index.vue 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <!-- 搜索表单 -->
  5. <index-search :typeList="typeList" @search="reload"/>
  6. <!-- 数据表格 -->
  7. <ele-pro-table
  8. ref="table"
  9. height="calc(100vh - 325px)"
  10. :columns="columns"
  11. :datasource="datasource"
  12. :selection.sync="selection"
  13. row-key="id"
  14. :pageSize="this.$store.state.tablePageSize"
  15. >
  16. <!-- 表头工具栏 -->
  17. <template v-slot:toolbar>
  18. <el-button
  19. size="small"
  20. type="primary"
  21. icon="el-icon-plus"
  22. class="ele-btn-icon"
  23. @click="openEdit('','add')"
  24. v-if="$hasPermission('main:version:save')"
  25. >
  26. 新建
  27. </el-button>
  28. <el-button
  29. size="small"
  30. type="danger"
  31. icon="el-icon-delete"
  32. class="ele-btn-icon"
  33. v-if="$hasPermission('main:version:delete')"
  34. @click="removeBatch"
  35. plain
  36. >
  37. 删除
  38. </el-button>
  39. <!-- <el-button-->
  40. <!-- size="small"-->
  41. <!-- type="primary"-->
  42. <!-- icon="el-icon-upload2"-->
  43. <!-- class="ele-btn-icon"-->
  44. <!-- plain-->
  45. <!-- >-->
  46. <!-- 导出-->
  47. <!-- </el-button>-->
  48. <!-- <el-button-->
  49. <!-- size="small"-->
  50. <!-- type="primary"-->
  51. <!-- icon="el-icon-download"-->
  52. <!-- class="ele-btn-icon"-->
  53. <!-- plain-->
  54. <!-- >-->
  55. <!-- 导入-->
  56. <!-- </el-button>-->
  57. </template>
  58. <!-- 操作列 -->
  59. <template v-slot:action="{ row }">
  60. <el-link
  61. v-if="row.status!=1&&$hasPermission('main:version:update')"
  62. type="primary"
  63. :underline="false"
  64. icon="el-icon-edit"
  65. @click="openEdit(row,'edit')"
  66. >
  67. 修改
  68. </el-link>
  69. <el-link
  70. type="primary"
  71. :underline="false"
  72. icon="el-icon-setting"
  73. @click="openEdit(row, 'view')"
  74. >
  75. 详情
  76. </el-link>
  77. <el-popconfirm
  78. v-if="row.status!=1&&$hasPermission('main:version:delete')"
  79. class="ele-action"
  80. title="确定要删除当前版本规则吗?"
  81. @confirm="remove(row)"
  82. >
  83. <template v-slot:reference>
  84. <el-link type="danger" :underline="false" icon="el-icon-delete">
  85. 删除
  86. </el-link>
  87. </template>
  88. </el-popconfirm>
  89. </template>
  90. <template v-slot:status="scope">
  91. <el-switch
  92. @change="(val)=>handleStatus(scope,val)"
  93. :active-value="1"
  94. :inactive-value="0"
  95. v-model="scope.row.status"
  96. active-color="#13ce66"
  97. inactive-color="#ff4949">
  98. </el-switch>
  99. </template>
  100. </ele-pro-table>
  101. </el-card>
  102. <!-- 新增/编辑/详情弹窗 -->
  103. <add-or-edit-dialog
  104. :addOrEditDialogFlag.sync="addOrEditDialogFlag"
  105. v-if="addOrEditDialogFlag"
  106. ref="addOrEditDialogRef"
  107. :data="current"
  108. :typeList="typeList"
  109. @reload="reload"
  110. />
  111. </div>
  112. </template>
  113. <script>
  114. import addOrEditDialog from './components/addOrEditDialog.vue';
  115. import dictMixins from '@/mixins/dictMixins';
  116. import FileUpload from "@/components/upload/fileUpload.vue";
  117. import {getFile} from "@/api/system/file";
  118. import {reviewStatus} from "@/enum/dict";
  119. import {getSubTwoLevelAPI, getVersionManagePageAPI, updateStatus, versionManageDeleteAPI} from "@/api/versionManage";
  120. import indexSearch from "@/views/versionManage/components/index-search.vue";
  121. import {getSubPage} from "@/api/classifyManage";
  122. import {getByCode} from "@/api/system/dictionary-data";
  123. export default {
  124. name: 'technologyProduction',
  125. components: {
  126. FileUpload,
  127. indexSearch,
  128. addOrEditDialog
  129. },
  130. mixins: [dictMixins],
  131. data() {
  132. return {
  133. levelOptions: [
  134. {
  135. label: '初级',
  136. value: '1'
  137. },
  138. {
  139. label: '中级',
  140. value: '2'
  141. },
  142. {
  143. label: '高级',
  144. value: '3'
  145. }
  146. ],
  147. isView: false,
  148. // 表格列配置
  149. columns: [
  150. {
  151. columnKey: 'selection',
  152. type: 'selection',
  153. width: 45,
  154. align: 'center',
  155. fixed: 'left'
  156. },
  157. {
  158. label: '序号',
  159. type: 'index',
  160. width: 55,
  161. align: 'center'
  162. },
  163. {
  164. slot: 'name',
  165. prop: 'name',
  166. label: '名称',
  167. showOverflowTooltip: true,
  168. align: 'center',
  169. minWidth: 110
  170. },
  171. {
  172. slot: 'type',
  173. prop: 'type',
  174. label: '分类',
  175. showOverflowTooltip: true,
  176. align: 'center',
  177. formatter: (row, column) => {
  178. return this.getDictV('version_rule_type',row.type) ;
  179. },
  180. minWidth: 110
  181. },
  182. {
  183. slot: 'getExample',
  184. prop: 'getExample',
  185. label: '规则示例',
  186. showOverflowTooltip: true,
  187. align: 'center',
  188. formatter: (_row, _column, cellValue) => {
  189. let value = _row.note || (_row.noteType == 1 ? 'A' : '1')
  190. return value + _row.mark + _row.versionNumber
  191. },
  192. minWidth: 120
  193. },
  194. {
  195. label: '是否启用',
  196. prop: 'status',
  197. slot: 'status',
  198. align: "center",
  199. width: 120,
  200. },
  201. {
  202. columnKey: 'action',
  203. label: '操作',
  204. width: 260,
  205. align: 'center',
  206. resizable: false,
  207. slot: 'action',
  208. showOverflowTooltip: true
  209. }
  210. ],
  211. // 表格选中数据
  212. selection: [],
  213. dictList: {},
  214. // 当前编辑数据
  215. current: null,
  216. typeList: [],
  217. // 是否显示编辑弹窗
  218. addOrEditDialogFlag: false,
  219. };
  220. },
  221. created() {
  222. this.getTypeList()
  223. },
  224. computed: {},
  225. methods: {
  226. // getTypeName(list, val, callBack) {
  227. // let find = list.find(item => callBack(item, val)) || {}
  228. // if (find.name) {
  229. // return find.name
  230. // } else {
  231. // for (let i = 0; i < list.length; i++) {
  232. // let find = list[i].subList.find(item => callBack(item, val)) || {}
  233. // if (find.name) {
  234. // return find.name
  235. // }
  236. // }
  237. // }
  238. // },
  239. getDictV(code, val) {
  240. if (!this.dictList[code]) return '';
  241. return this.dictList[code].find(item => item.value == val)?.label
  242. },
  243. async getDictList(code) {
  244. let {data: res} = await getByCode(code)
  245. this.dictList[code] = res.map(item => {
  246. let values = Object.keys(item)
  247. return {
  248. value: values[0],
  249. label: item[values[0]]
  250. }
  251. })
  252. },
  253. /* 表格数据源 */
  254. async datasource({page, limit, where, order}) {
  255. await this.getDictList('version_rule_type')
  256. return await getVersionManagePageAPI({
  257. ...where,
  258. ...order,
  259. pageNum: page,
  260. size: limit
  261. });
  262. },
  263. handleStatus(scope, val) {
  264. let msg = val == 1 ? '是否启用该规则' : '是否关闭该规则'
  265. this.$confirm(msg, '提示', {
  266. type: 'warning'
  267. }).then(async () => {
  268. await updateStatus(
  269. {
  270. id: scope.row.id,
  271. status: val
  272. }
  273. )
  274. this.$message.success('操作成功')
  275. }).catch(() => {
  276. scope.row.status = val == 1 ? 0 : 1
  277. })
  278. },
  279. async getTypeList() {
  280. this.typeList = await getSubTwoLevelAPI({
  281. parentId: 0,
  282. pageNum: 1,
  283. size: 9999
  284. })
  285. console.log(this.typeList);
  286. },
  287. downloadFile(file) {
  288. getFile({objectName: file.storePath}, file.name);
  289. },
  290. /* 刷新表格 */
  291. reload(where) {
  292. this.$refs.table.reload({page: 1, where: where});
  293. },
  294. /* 打开编辑弹窗 */
  295. openEdit(row = {}, type) {
  296. this.addOrEditDialogFlag = true
  297. this.$nextTick(() => {
  298. this.$refs.addOrEditDialogRef.init(type, {...row})
  299. })
  300. },
  301. /* 删除 */
  302. remove(row) {
  303. const loading = this.$loading({lock: true});
  304. versionManageDeleteAPI([row.id])
  305. .then((msg) => {
  306. loading.close();
  307. this.$message.success('删除成功');
  308. this.reload();
  309. })
  310. .catch((e) => {
  311. loading.close();
  312. // this.$message.error(e.message);
  313. });
  314. },
  315. /* 批量删除 */
  316. removeBatch() {
  317. if (!this.selection.length) return this.$message.error('请至少选择一条数据');
  318. if (this.selection.some(item => item.status == 1)) return this.$message.error('启用状态的规则不允许删除!请检查');
  319. this.$confirm('确定要删除选中的规则吗?', '提示', {
  320. type: 'warning'
  321. }).then(() => {
  322. const loading = this.$loading({lock: true});
  323. versionManageDeleteAPI(this.selection.map((d) => d.id))
  324. .then((msg) => {
  325. loading.close();
  326. this.$message.success('删除成功');
  327. this.reload();
  328. })
  329. .catch((e) => {
  330. loading.close();
  331. // this.$message.error(e.message);
  332. });
  333. })
  334. .catch(() => {
  335. });
  336. }
  337. }
  338. };
  339. </script>