Classify.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <script setup lang="ts">
  2. import {
  3. Storehouse_ProductClass_List,
  4. Storehouse_ProductClass_Add,
  5. Storehouse_ProductClass_Edit,
  6. Storehouse_ProductClass_Del
  7. } from '@/api/storehouse/index'
  8. import { GlobalStore } from '@/stores/index'
  9. import { ref, reactive, nextTick } from 'vue'
  10. import Drawer from '@/components/Drawer/index.vue'
  11. import TableBase from '@/components/TableBase/index.vue'
  12. import { Edit, Delete } from '@element-plus/icons-vue'
  13. import { ElMessageBox, ElMessage } from 'element-plus'
  14. import type { FormInstance, FormRules } from 'element-plus'
  15. import type { ColumnProps } from '@/components/TableBase/interface/index'
  16. const isNew = ref(true)
  17. const globalStore = GlobalStore()
  18. const formLabelWidth = ref('130px')
  19. const ruleFormRef = ref<FormInstance>()
  20. const drawerRef = ref<InstanceType<typeof Drawer> | null>(null)
  21. const TableRef = ref<InstanceType<typeof TableBase> | null>(null)
  22. const initParam = {
  23. User_tokey: globalStore.GET_User_tokey,
  24. T_name: ''
  25. }
  26. const columns: ColumnProps[] = [
  27. { type: 'index', label: '序号', width: 80 },
  28. { prop: 'T_name', label: '分类名称' },
  29. { prop: 'operation', label: '操作', width: 200, fixed: 'right' }
  30. ]
  31. // 添加仓库名称
  32. type Fn = () => void
  33. const form = reactive({
  34. name: '',
  35. id: ''
  36. })
  37. const rules = reactive<FormRules>({
  38. name: [{ required: true, message: '请输入分类名称', trigger: 'blur' }]
  39. })
  40. const callbackDrawer = (done: Fn) => {
  41. resetForm(ruleFormRef.value)
  42. done()
  43. }
  44. const openDrawer = (type: string, row?: any) => {
  45. isNew.value = type === 'new' ? true : false
  46. nextTick(() => {
  47. !isNew.value && ((form.name = row.T_name), (form.id = row.Id))
  48. })
  49. drawerRef.value?.openDrawer()
  50. }
  51. const resetForm = (formEl: FormInstance | undefined) => {
  52. if (!formEl) return
  53. formEl.resetFields()
  54. }
  55. const AddUserName = (formEl: FormInstance | undefined) => {
  56. if (!formEl) return
  57. formEl.validate(async valid => {
  58. if (valid) {
  59. let res: any = {}
  60. if (isNew.value) {
  61. res = await Storehouse_ProductClass_Add({ User_tokey: globalStore.GET_User_tokey, T_name: form.name })
  62. } else {
  63. res = await Storehouse_ProductClass_Edit({
  64. User_tokey: globalStore.GET_User_tokey,
  65. T_name: form.name,
  66. T_id: form.id
  67. })
  68. }
  69. if (res.Code === 200) {
  70. ElMessage.success('产品分类添加成功!!')
  71. nextTick(() => {
  72. drawerRef.value?.closeDrawer()
  73. TableRef.value?.getTableList()
  74. resetForm(ruleFormRef.value)
  75. isNew.value = true
  76. })
  77. }
  78. } else {
  79. return false
  80. }
  81. })
  82. }
  83. // 删除
  84. const UserDelete = (row: any) => {
  85. ElMessageBox.confirm('您确定要删除产品分类吗?', '警告', {
  86. confirmButtonText: '确定',
  87. cancelButtonText: '取消',
  88. type: 'warning'
  89. })
  90. .then(async () => {
  91. const res: any = await Storehouse_ProductClass_Del({ User_tokey: globalStore.GET_User_tokey, T_id: row.Id })
  92. if (res.Code === 200) {
  93. ElMessage.success('删除成功!')
  94. nextTick(() => {
  95. TableRef.value?.getTableList()
  96. })
  97. }
  98. })
  99. .catch(() => {
  100. ElMessage.warning('取消成功!')
  101. })
  102. }
  103. // 搜索
  104. const search = ref('')
  105. const searchHandle = () => {
  106. initParam.T_name = search.value
  107. TableRef.value?.searchTable()
  108. }
  109. </script>
  110. <template>
  111. <div class="Classify">
  112. <TableBase ref="TableRef" :columns="columns" :requestApi="Storehouse_ProductClass_List" :initParam="initParam">
  113. <template #table-header>
  114. <div class="input-suffix">
  115. <el-row :gutter="20" style="margin-bottom: 0">
  116. <el-col :span="12">
  117. <span class="inline-flex items-center">产品分类名称:</span>
  118. <el-input
  119. v-model="search"
  120. type="text"
  121. class="w-50 m-2"
  122. @change="searchHandle"
  123. placeholder="按产品分类名称搜索"
  124. />
  125. <el-button type="primary" @click.enter="searchHandle">搜索</el-button>
  126. </el-col>
  127. <el-col :span="6" :offset="6"><el-button type="primary" @click="openDrawer('new')">添加</el-button></el-col>
  128. </el-row>
  129. </div>
  130. </template>
  131. <template #right="{ row }">
  132. <el-button link type="primary" size="small" :icon="Edit" @click="openDrawer('edit', row)">编辑</el-button>
  133. <el-button link type="danger" size="small" :icon="Delete" @click="UserDelete(row)">删除</el-button>
  134. </template>
  135. </TableBase>
  136. <Drawer ref="drawerRef" :handleClose="callbackDrawer">
  137. <template #header="{ params }">
  138. <h4 :id="params.titleId" :class="params.titleClass">{{ isNew ? '添加' : '编辑' }} - 产品分类</h4>
  139. </template>
  140. <el-form ref="ruleFormRef" :model="form" :rules="rules">
  141. <el-divider border-style="dashed" />
  142. <el-form-item label="产品分类名称:" :label-width="formLabelWidth" prop="name">
  143. <el-input v-model="form.name" type="text" autocomplete="off" placeholder="请输入产品分类名称" />
  144. </el-form-item>
  145. <el-form-item :label-width="formLabelWidth">
  146. <el-button v-if="isNew" color="#626aef" @click="AddUserName(ruleFormRef)">提交</el-button>
  147. <el-button v-else color="#626aef" @click="AddUserName(ruleFormRef)">修改</el-button>
  148. </el-form-item>
  149. </el-form>
  150. </Drawer>
  151. </div>
  152. </template>
  153. <style scoped lang="scss">
  154. @import '@/styles/var.scss';
  155. .Classify {
  156. @include f-direction;
  157. }
  158. .input-suffix {
  159. width: 100%;
  160. .w-50 {
  161. width: 12.5rem;
  162. }
  163. }
  164. </style>