index.vue 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never">
  4. <seek-page
  5. v-if="renderFlag"
  6. :seekList="seekList"
  7. @search="search"
  8. ref="search"
  9. ></seek-page>
  10. <!-- <search ref="search" @search="search"></search> -->
  11. <ele-pro-table
  12. ref="table"
  13. :columns="columns"
  14. :datasource="datasource"
  15. height="calc(100vh - 400px)"
  16. tool-class="ele-toolbar-form"
  17. cache-key="inspectionClassify"
  18. row-key="id"
  19. @selection-change="selectionChangeHandle"
  20. >
  21. <template v-slot:toolbar>
  22. <el-button
  23. size="small"
  24. type="primary"
  25. icon="el-icon-plus"
  26. class="ele-btn-icon"
  27. @click="addOrUpdateHandle()"
  28. >
  29. 新增
  30. </el-button>
  31. <el-button
  32. size="small"
  33. type="danger"
  34. icon="el-icon-delete"
  35. class="ele-btn-icon"
  36. @click="deleteHandle()"
  37. :disabled="selection.length <= 0"
  38. >
  39. 批量删除
  40. </el-button>
  41. </template>
  42. <template v-slot:status="{ row }">
  43. {{ row.status ? '启用' : '停用' }}
  44. </template>
  45. <!-- 操作列 -->
  46. <template v-slot:action="{ row }">
  47. <el-link
  48. type="primary"
  49. :underline="false"
  50. icon="el-icon-tickets"
  51. @click="copyData(row)"
  52. >
  53. 复制
  54. </el-link>
  55. <el-link
  56. type="primary"
  57. :underline="false"
  58. icon="el-icon-edit"
  59. @click="updateStatus(row)"
  60. v-if="row.status == 1"
  61. >
  62. 不启用
  63. </el-link>
  64. <el-link
  65. type="primary"
  66. :underline="false"
  67. icon="el-icon-edit"
  68. @click="updateStatus(row)"
  69. v-if="row.status == 0"
  70. >
  71. 启用
  72. </el-link>
  73. <el-link
  74. type="primary"
  75. :underline="false"
  76. icon="el-icon-edit"
  77. @click="addOrUpdateHandle(row.id)"
  78. >
  79. 修改
  80. </el-link>
  81. <el-popconfirm
  82. class="ele-action"
  83. title="确定要删除此方案吗?"
  84. @confirm="deleteHandle(row.id)"
  85. >
  86. <template v-slot:reference>
  87. <el-link type="danger" :underline="false" icon="el-icon-delete">
  88. 删除
  89. </el-link>
  90. </template>
  91. </el-popconfirm>
  92. </template>
  93. </ele-pro-table>
  94. </el-card>
  95. <!-- 弹窗, 新增 / 修改 -->
  96. <AddOrUpdate
  97. ref="addOrUpdateRef"
  98. @refreshDataList="getDataList"
  99. ></AddOrUpdate>
  100. </div>
  101. </template>
  102. <script>
  103. import AddOrUpdate from './AddorUpdate';
  104. // import search from './components/search.vue';
  105. import dictMixins from '@/mixins/dictMixins';
  106. import {
  107. getList,
  108. removeItem,
  109. update,
  110. copyData,
  111. updateStatus
  112. } from '@/api/inspectionTemplate';
  113. export default {
  114. mixins: [dictMixins],
  115. components: {
  116. AddOrUpdate
  117. // search
  118. },
  119. computed: {},
  120. data() {
  121. return {
  122. seekList: [
  123. {
  124. label: '名称:',
  125. value: 'qualitySchemeTemplateName',
  126. type: 'input',
  127. placeholder: ''
  128. },
  129. {
  130. label: '编码:',
  131. value: 'qualitySchemeTemplateCode',
  132. type: 'input',
  133. placeholder: ''
  134. },
  135. {
  136. label: '类型:',
  137. value: 'type',
  138. type: 'select',
  139. placeholder: '',
  140. planList: []
  141. },
  142. {
  143. label: '状态:',
  144. value: 'status',
  145. type: 'select',
  146. planList: [
  147. { value: 0, label: '停用' },
  148. { value: 1, label: '启用' }
  149. ],
  150. placeholder: ''
  151. }
  152. ],
  153. dataForm: {
  154. key: ''
  155. },
  156. selection: [],
  157. columns: [
  158. {
  159. width: 45,
  160. type: 'selection',
  161. columnKey: 'selection',
  162. align: 'center',
  163. reserveSelection: true
  164. },
  165. {
  166. columnKey: 'index',
  167. label: '序号',
  168. type: 'index',
  169. width: 55,
  170. align: 'center',
  171. showOverflowTooltip: true,
  172. fixed: 'left'
  173. },
  174. {
  175. prop: 'type',
  176. label: '类型',
  177. showOverflowTooltip: true,
  178. align: 'center',
  179. minWidth: 110,
  180. formatter: (row, column, cellValue) => {
  181. return this.getDictName('质检计划类型', cellValue);
  182. }
  183. },
  184. {
  185. prop: 'qualitySchemeTemplateCode',
  186. label: '质检方案编码',
  187. showOverflowTooltip: true,
  188. align: 'center',
  189. minWidth: 110
  190. },
  191. {
  192. prop: 'qualitySchemeTemplateName',
  193. label: '质检方案名称',
  194. align: 'center',
  195. minWidth: 150
  196. },
  197. {
  198. label: '状态',
  199. prop: 'status',
  200. slot: 'status',
  201. align: 'center'
  202. },
  203. {
  204. prop: 'templateRemark',
  205. label: '备注',
  206. showOverflowTooltip: true,
  207. align: 'center',
  208. minWidth: 110
  209. },
  210. {
  211. columnKey: 'action',
  212. label: '操作',
  213. width: 260,
  214. align: 'center',
  215. resizable: false,
  216. slot: 'action',
  217. fixed: 'right'
  218. }
  219. ],
  220. typeList: [],
  221. renderFlag: false
  222. };
  223. },
  224. async created() {
  225. const res = await this.requestDict('质检计划类型');
  226. console.log(res, 'res 000');
  227. this.typeList = res.map((item) => {
  228. // let values = Object.keys(item);
  229. // return {
  230. // value: Number(values[0]),
  231. // label: item[values[0]]
  232. // };
  233. return {
  234. value: item.dictCode,
  235. label: item.dictValue
  236. };
  237. });
  238. const index = this.seekList.findIndex((item) => item.value === 'type');
  239. this.$set(this.seekList, index, {
  240. label: '类型:',
  241. value: 'type',
  242. type: 'select',
  243. placeholder: '',
  244. planList: this.typeList
  245. });
  246. this.renderFlag = true;
  247. },
  248. methods: {
  249. // 获取数据列表
  250. datasource({ page, where, limit }) {
  251. return getList({
  252. ...where,
  253. pageNum: page,
  254. size: limit
  255. });
  256. },
  257. // 多选
  258. selectionChangeHandle(val) {
  259. this.selection = val;
  260. },
  261. // 新增 / 修改
  262. addOrUpdateHandle(id) {
  263. this.$refs.addOrUpdateRef.init(id);
  264. },
  265. // 删除
  266. deleteHandle(id) {
  267. var ids = id
  268. ? [id]
  269. : this.selection.map((item) => {
  270. return item.id;
  271. });
  272. this.$confirm(
  273. `确定对[id=${ids.join(',')}]进行[${id ? '删除' : '批量删除'}]操作?`,
  274. '提示',
  275. {
  276. confirmButtonText: '确定',
  277. cancelButtonText: '取消',
  278. type: 'warning'
  279. }
  280. ).then(() => {
  281. removeItem(ids)
  282. .then(({ message }) => {
  283. this.$message.success(message);
  284. this.getDataList();
  285. })
  286. .catch((e) => {});
  287. });
  288. },
  289. getDataList() {
  290. this.$refs.search.search();
  291. },
  292. search(where) {
  293. this.$refs.table.reload({
  294. where: where,
  295. page: 1
  296. });
  297. },
  298. //上下架操作
  299. updateStatus(row) {
  300. let dataForm = {};
  301. let status = row.status === 1 ? 0 : 1;
  302. dataForm['status'] = status;
  303. dataForm['id'] = row.id;
  304. updateStatus(dataForm)
  305. .then((res) => {
  306. this.loading = false;
  307. this.$message.success('操作成功!');
  308. this.visible = false;
  309. this.getDataList();
  310. })
  311. .catch((e) => {
  312. this.loading = false;
  313. });
  314. },
  315. copyData(row) {
  316. console.log(row.id);
  317. copyData(row.id).then((res) => {
  318. console.log(res);
  319. this.$message.success('复制成功!');
  320. this.getDataList();
  321. });
  322. }
  323. }
  324. };
  325. </script>