index.vue 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. <template>
  2. <div class="table-box">
  3. <ProTable ref="proTable" :columns="columns" row-key="id" :request-api="listAlgorithmConfigApi">
  4. <!-- 表格 header 按钮 -->
  5. <template #tableHeader="scope">
  6. <el-button type="primary" v-auth="['demo:algorithmConfig:add']" icon="CirclePlus" @click="openDialog(1, '通用算法配置新增')">
  7. 新增
  8. </el-button>
  9. <el-button type="primary" v-auth="['demo:algorithmConfig:import']" icon="Upload" plain @click="batchAdd"> 导入 </el-button>
  10. <el-button type="primary" v-auth="['demo:algorithmConfig:export']" icon="Download" plain @click="downloadFile"> 导出 </el-button>
  11. <el-button
  12. type="danger"
  13. v-auth="['demo:algorithmConfig:remove']"
  14. icon="Delete"
  15. plain
  16. :disabled="!scope.isSelected"
  17. @click="batchDelete(scope.selectedListIds)"
  18. >
  19. 批量删除
  20. </el-button>
  21. </template>
  22. <!-- 表格操作 -->
  23. <template #operation="scope">
  24. <el-button type="primary" link icon="View" v-auth="['demo:algorithmConfig:query']" @click="openDialog(3, '通用算法配置查看', scope.row)">
  25. 查看
  26. </el-button>
  27. <el-button type="primary" link icon="EditPen" v-auth="['demo:algorithmConfig:edit']" @click="openDialog(2, '通用算法配置编辑', scope.row)">
  28. 编辑
  29. </el-button>
  30. <el-button type="primary" link icon="Delete" v-auth="['demo:algorithmConfig:remove']" @click="deleteAlgorithmConfig(scope.row)">
  31. 删除
  32. </el-button>
  33. </template>
  34. </ProTable>
  35. <FormDialog ref="formDialogRef" />
  36. <ImportExcel ref="dialogRef" />
  37. </div>
  38. </template>
  39. <script setup lang="tsx" name="AlgorithmConfig">
  40. import { ref, reactive } from 'vue'
  41. import { useHandleData } from '@/hooks/useHandleData'
  42. import { useDownload } from '@/hooks/useDownload'
  43. import { ElMessageBox } from 'element-plus'
  44. import ProTable from '@/components/ProTable/index.vue'
  45. import ImportExcel from '@/components/ImportExcel/index.vue'
  46. import FormDialog from '@/components/FormDialog/index.vue'
  47. import { ProTableInstance, ColumnProps } from '@/components/ProTable/interface'
  48. import {
  49. listAlgorithmConfigApi,
  50. delAlgorithmConfigApi,
  51. addAlgorithmConfigApi,
  52. updateAlgorithmConfigApi,
  53. importTemplateApi,
  54. importAlgorithmConfigDataApi,
  55. exportAlgorithmConfigApi,
  56. getAlgorithmConfigApi
  57. } from '@/api/modules/demo/algorithmConfig'
  58. // ProTable 实例
  59. const proTable = ref<ProTableInstance>()
  60. // 删除通用算法配置信息
  61. const deleteAlgorithmConfig = async (params: any) => {
  62. await useHandleData(delAlgorithmConfigApi, params.id, '删除【' + params.id + '】通用算法配置')
  63. proTable.value?.getTableList()
  64. }
  65. // 批量删除通用算法配置信息
  66. const batchDelete = async (ids: string[]) => {
  67. await useHandleData(delAlgorithmConfigApi, ids, '删除所选通用算法配置信息')
  68. proTable.value?.clearSelection()
  69. proTable.value?.getTableList()
  70. }
  71. // 导出通用算法配置列表
  72. const downloadFile = async () => {
  73. ElMessageBox.confirm('确认导出通用算法配置数据?', '温馨提示', { type: 'warning' }).then(() =>
  74. useDownload(exportAlgorithmConfigApi, '通用算法配置列表', proTable.value?.searchParam)
  75. )
  76. }
  77. // 批量添加通用算法配置
  78. const dialogRef = ref<InstanceType<typeof ImportExcel> | null>(null)
  79. const batchAdd = () => {
  80. const params = {
  81. title: '通用算法配置',
  82. tempApi: importTemplateApi,
  83. importApi: importAlgorithmConfigDataApi,
  84. getTableList: proTable.value?.getTableList
  85. }
  86. dialogRef.value?.acceptParams(params)
  87. }
  88. const formDialogRef = ref<InstanceType<typeof FormDialog> | null>(null)
  89. // 打开弹框的功能
  90. const openDialog = async (type: number, title: string, row?: any) => {
  91. let res = { data: {} }
  92. if (row?.id) {
  93. res = await getAlgorithmConfigApi(row?.id || null)
  94. }
  95. // 重置表单
  96. setItemsOptions()
  97. const params = {
  98. title,
  99. width: 580,
  100. isEdit: type !== 3,
  101. itemsOptions: itemsOptions,
  102. model: type == 1 ? {} : res.data,
  103. api: type == 1 ? addAlgorithmConfigApi : updateAlgorithmConfigApi,
  104. getTableList: proTable.value?.getTableList
  105. }
  106. formDialogRef.value?.openDialog(params)
  107. }
  108. // 表格配置项
  109. const columns = reactive<ColumnProps<any>[]>([
  110. { type: 'selection', fixed: 'left', width: 70 },
  111. { prop: 'id', label: 'ID' },
  112. {
  113. prop: 'tool',
  114. label: '工具',
  115. search: {
  116. el: 'input'
  117. },
  118. width: 120
  119. },
  120. {
  121. prop: 'module',
  122. label: '模块',
  123. search: {
  124. el: 'input'
  125. },
  126. width: 120
  127. },
  128. {
  129. prop: 'algorithmName',
  130. label: '算法名称',
  131. search: {
  132. el: 'input'
  133. },
  134. width: 120
  135. },
  136. {
  137. prop: 'startApi',
  138. label: '开始接口',
  139. search: {
  140. el: 'input'
  141. },
  142. width: 120
  143. },
  144. {
  145. prop: 'pauseApi',
  146. label: '暂停接口',
  147. search: {
  148. el: 'input'
  149. },
  150. width: 120
  151. },
  152. {
  153. prop: 'terminateApi',
  154. label: '终止接口',
  155. search: {
  156. el: 'input'
  157. },
  158. width: 120
  159. },
  160. {
  161. prop: 'parameters',
  162. label: '参数',
  163. search: {
  164. el: 'input'
  165. },
  166. width: 120
  167. },
  168. {
  169. prop: 'remarks',
  170. label: '备注',
  171. search: {
  172. el: 'input'
  173. },
  174. width: 120
  175. },
  176. { prop: 'operation', label: '操作', width: 230, fixed: 'right' }
  177. ])
  178. // 表单配置项
  179. let itemsOptions: ProForm.ItemsOptions[] = []
  180. const setItemsOptions = () => {
  181. itemsOptions = [
  182. {
  183. label: '工具',
  184. prop: 'tool',
  185. rules: [{ required: true, message: '工具名称不能为空', trigger: 'blur' }],
  186. compOptions: {
  187. placeholder: '请输入工具名称'
  188. }
  189. },
  190. {
  191. label: '模块',
  192. prop: 'module',
  193. rules: [{ required: true, message: '模块不能为空', trigger: 'blur' }],
  194. compOptions: {
  195. placeholder: '请输入模块'
  196. }
  197. },
  198. {
  199. label: '算法名称',
  200. prop: 'algorithmName',
  201. rules: [{ required: true, message: '算法名称不能为空', trigger: 'blur' }],
  202. compOptions: {
  203. placeholder: '请输入算法名称'
  204. }
  205. },
  206. {
  207. label: '开始接口',
  208. prop: 'startApi',
  209. rules: [{ required: true, message: '开始接口不能为空', trigger: 'blur' }],
  210. compOptions: {
  211. placeholder: '请输入开始接口'
  212. }
  213. },
  214. {
  215. label: '暂停接口',
  216. prop: 'pauseApi',
  217. rules: [{ required: true, message: '暂停接口不能为空', trigger: 'blur' }],
  218. compOptions: {
  219. placeholder: '请输入暂停接口'
  220. }
  221. },
  222. {
  223. label: '终止接口',
  224. prop: 'terminateApi',
  225. rules: [{ required: true, message: '终止接口不能为空', trigger: 'blur' }],
  226. compOptions: {
  227. placeholder: '请输入终止接口'
  228. }
  229. },
  230. {
  231. label: '参数',
  232. prop: 'parameters',
  233. rules: [{ required: true, message: '参数不能为空', trigger: 'blur' }],
  234. compOptions: {
  235. type: 'textarea',
  236. rows: 2,
  237. placeholder: '请输入参数'
  238. }
  239. },
  240. {
  241. label: '备注',
  242. prop: 'remarks',
  243. rules: [{ required: false, message: '备注不能为空', trigger: 'blur' }],
  244. compOptions: {
  245. placeholder: '请输入备注'
  246. }
  247. }
  248. ]
  249. }
  250. </script>