verifyItem.vue 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <script setup lang="ts">
  2. import {
  3. VerifyItem_List,
  4. VerifyItem_Add,
  5. VerifyItem_Edit,
  6. VerifyItem_Del,
  7. } from '@/api/storehouse/index'
  8. import { ref, reactive, nextTick } from 'vue'
  9. import Upload from '@/components/Upload/index.vue'
  10. import Drawer from '@/components/Drawer/index.vue'
  11. import TableBase from '@/components/TableBase/index.vue'
  12. import { ElMessageBox, ElMessage } from 'element-plus'
  13. import type { FormInstance, FormRules } from 'element-plus'
  14. import { Edit, Delete, Plus } from '@element-plus/icons-vue'
  15. import type { ColumnProps } from '@/components/TableBase/interface/index'
  16. import ImageCom from '@/components/Image/index.vue'
  17. import { useTablePublic,options3 } from '@/hooks/useTablePublic'
  18. const isNew = ref(true)
  19. const formLabelWidth = ref('100px')
  20. const ruleFormRef = ref<FormInstance>()
  21. const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
  22. const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
  23. const uploadRef = ref<InstanceType<typeof Upload> | null>(null)
  24. const { resetForm, globalStore, searchOnTableList, updateOnTableList } = useTablePublic()
  25. const columns: ColumnProps[] = [
  26. { type: 'index', label: '序号', width: 80 },
  27. { prop: 'T_name', label: '项目名称' },
  28. { prop: 'T_type', label: '类型' , name: 'T_type'},
  29. { prop: 'T_price', label: '金额(元)' },
  30. { prop: 'operation', label: '操作', width: 150, fixed: 'right' }
  31. ]
  32. const rules = reactive<FormRules>({
  33. T_name: [{ required: true, message: '请输入项目名称', trigger: 'blur' }],
  34. T_type: [{ required: true, message: '请选择类型', trigger: 'blur' }],
  35. T_price: [{ required: true, message: '请输入金额', trigger: 'blur' }],
  36. })
  37. const form:any = ref({
  38. T_id:'',
  39. T_name: '',
  40. T_type: 1,
  41. T_price: '',
  42. })
  43. const openDrawer = (type: string, row?: any) => {
  44. isNew.value = type === 'new' ? true : false
  45. if(type == 'edit'){
  46. form.value.T_id = row.Id
  47. form.value.T_name = row.T_name
  48. form.value.T_type = row.T_type
  49. form.value.T_price = row.T_price
  50. }else{
  51. delete form.value.T_id
  52. form.value.T_name = ''
  53. form.value.T_type = 1
  54. form.value.T_price =''
  55. }
  56. drawerRef.value?.openDrawer()
  57. }
  58. const AddProduction = (formEl: FormInstance | undefined) => {
  59. if (!formEl) return
  60. formEl.validate(async valid => {
  61. if (valid) {
  62. let res: any = {}
  63. if (isNew.value) {//新增
  64. res = await VerifyItem_Add({ User_tokey: globalStore.GET_User_tokey, ...form.value })
  65. } else {//编辑
  66. res = await VerifyItem_Edit({
  67. User_tokey: globalStore.GET_User_tokey,
  68. ...form.value,
  69. })
  70. }
  71. if (res.Code === 200) {
  72. ElMessage.success(`提成项目${isNew.value ? '添加' : '修改'}成功!!`)
  73. nextTick(() => {
  74. drawerRef.value?.closeDrawer()
  75. updateOnTableList(TableRef.value)
  76. resetForm(ruleFormRef.value)
  77. isNew.value = true
  78. })
  79. }
  80. } else {
  81. return false
  82. }
  83. })
  84. }
  85. const ProductDelete = (row: any) => {
  86. ElMessageBox.confirm('您确定要删除该提成项目吗?', '警告', {
  87. confirmButtonText: '确定',
  88. cancelButtonText: '取消',
  89. type: 'warning'
  90. })
  91. .then(async () => {
  92. const res: any = await VerifyItem_Del({
  93. User_tokey: globalStore.GET_User_tokey,
  94. T_id: row.Id
  95. })
  96. if (res.Code === 200) {
  97. ElMessage.success('删除成功!')
  98. nextTick(() => updateOnTableList(TableRef.value))
  99. }
  100. })
  101. .catch(() => {
  102. ElMessage.warning('取消成功!')
  103. })
  104. }
  105. const callbackDrawer = (done: () => void) => {
  106. resetForm(ruleFormRef.value)
  107. uploadRef.value?.clearfileList()
  108. done()
  109. }
  110. // 搜索
  111. const initParam = reactive({
  112. User_tokey: globalStore.GET_User_tokey,
  113. T_name: '',
  114. T_type: ''
  115. })
  116. </script>
  117. <template>
  118. <div class="production-list">
  119. <TableBase ref="TableRef" :columns="columns" :requestApi="VerifyItem_List" :initParam="initParam">
  120. <template #table-header>
  121. <div class="input-suffix">
  122. <el-row :gutter="20" style="margin-bottom: 0">
  123. <el-col :xl="6" :lg="8" :md="10">
  124. <span class="inline-flex items-center">项目名称:</span>
  125. <el-input
  126. v-model="initParam.T_name"
  127. type="text"
  128. class="w-50 m-2"
  129. placeholder="按产品名称、产品型号搜索"
  130. @change="searchOnTableList(TableRef)"
  131. />
  132. </el-col>
  133. <el-col :xl="10" :md="12">
  134. <span class="inline-flex items-center">类型:</span>
  135. <el-select v-model="initParam.T_type" class="w-50 m-2" clearable placeholder="请选择分类~">
  136. <el-option v-for="item in options3" :key="item.id" :label="item.name" :value="item.id" />
  137. </el-select>
  138. <el-button type="primary" @click="searchOnTableList(TableRef)">搜索</el-button>
  139. </el-col>
  140. <el-col :xl="6" :md="2" class="btn"
  141. ><el-button type="primary" @click="openDrawer('new')">添加</el-button></el-col
  142. >
  143. </el-row>
  144. </div>
  145. </template>
  146. <template #T_type="{ row }">
  147. <el-tag :type="row.T_type === 1?'success':'primary'" effect="dark">{{row.T_type === 1?'验证实施':'报告编写'}}</el-tag>
  148. </template>
  149. <template #right="{ row }">
  150. <el-button link type="primary" size="small" :icon="Edit" @click="openDrawer('edit', row)">编辑</el-button>
  151. <el-button link type="danger" size="small" :icon="Delete" @click="ProductDelete(row)">删除</el-button>
  152. </template>
  153. </TableBase>
  154. <Drawer ref="drawerRef" :handleClose="callbackDrawer">
  155. <template #header="{ params }">
  156. <h4 :id="params.titleId" :class="params.titleClass">{{ isNew ? '添加' : '编辑' }} - 提成项目</h4>
  157. </template>
  158. <el-form ref="ruleFormRef" :model="form" :rules="rules">
  159. <el-form-item label="项目名称:" class="m-b-6" :label-width="formLabelWidth" prop="T_name">
  160. <el-input v-model="form.T_name" type="text" autocomplete="off" placeholder="请填写项目名称" />
  161. </el-form-item>
  162. <el-form-item label="类型:" class="m-b-6" :label-width="formLabelWidth" prop="T_type">
  163. <el-radio-group v-model="form.T_type" class="ml-4">
  164. <el-radio :label="item.id" v-for="item,index in options3">{{item.name}}</el-radio>
  165. </el-radio-group>
  166. </el-form-item>
  167. <el-form-item label="金额:" class="m-b-6" :label-width="formLabelWidth" prop="T_price">
  168. <el-input v-model="form.T_price" type="text" autocomplete="off" placeholder="请填写金额" />
  169. </el-form-item>
  170. <el-form-item :label-width="formLabelWidth">
  171. <el-button v-if="isNew" color="#626aef" @click="AddProduction(ruleFormRef)">提交</el-button>
  172. <el-button v-else color="#626aef" @click="AddProduction(ruleFormRef)">修改</el-button>
  173. </el-form-item>
  174. </el-form>
  175. </Drawer>
  176. </div>
  177. </template>
  178. <style scoped lang="scss">
  179. @import '@/styles/var.scss';
  180. .tooltip-content {
  181. max-width: 500px;
  182. overflow-y: auto;
  183. }
  184. .production-list {
  185. @include f-direction;
  186. .input-suffix {
  187. width: 100%;
  188. .inline-flex {
  189. white-space: nowrap;
  190. }
  191. .btn {
  192. display: flex;
  193. justify-content: end;
  194. }
  195. .w-50 {
  196. width: 12.5rem;
  197. }
  198. }
  199. }
  200. </style>