index.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never" v-loading="loading">
  4. <search @search="reload"> </search>
  5. <!-- 数据表格 -->
  6. <ele-pro-table
  7. ref="table"
  8. :columns="columns"
  9. :datasource="datasource"
  10. cache-key="systemRoleTable"
  11. :pageSize="20"
  12. >
  13. <!-- 表头工具栏 -->
  14. <template v-slot:toolbar>
  15. <el-button
  16. size="small"
  17. type="primary"
  18. icon="el-icon-plus"
  19. class="ele-btn-icon"
  20. @click="openEdit('', 'add')"
  21. >
  22. 新建
  23. </el-button>
  24. </template>
  25. <template v-slot:code="{ row }"
  26. ><el-link
  27. type="primary"
  28. :underline="false"
  29. @click="openEdit(row, 'view')"
  30. >
  31. {{ row.code }}
  32. </el-link>
  33. </template>
  34. <!-- 操作列 -->
  35. <template v-if="" v-slot:action="{ row }">
  36. <el-link
  37. type="primary"
  38. :underline="false"
  39. @click="openEdit(row, 'edit')"
  40. v-if="row.demandStatus != 1"
  41. >
  42. 修改
  43. </el-link>
  44. <el-popconfirm
  45. v-if="row.demandStatus != 1"
  46. class="ele-action"
  47. title="确定要删除此售后需求吗?"
  48. @confirm="handleRemove(row)"
  49. >
  50. <template v-slot:reference>
  51. <el-link type="danger" :underline="false" icon="el-icon-delete">
  52. 删除
  53. </el-link>
  54. </template>
  55. </el-popconfirm>
  56. <el-dropdown
  57. @command="(command) => handleCommand(command, row)"
  58. v-if="row.demandStatus == 0"
  59. >
  60. <span class="el-dropdown-link">
  61. 操作菜单<i class="el-icon-arrow-down el-icon--right"></i>
  62. </span>
  63. <el-dropdown-menu slot="dropdown">
  64. <el-dropdown-item command="handleRevoke">撤回 </el-dropdown-item>
  65. <el-dropdown-item command="handleAudit">提交 </el-dropdown-item>
  66. </el-dropdown-menu>
  67. </el-dropdown>
  68. </template>
  69. </ele-pro-table>
  70. </el-card>
  71. <!-- 新建或编辑弹窗 -->
  72. <AddDialog
  73. ref="addDialogRef"
  74. :dialogTitle="addDialogTitle"
  75. @refresh="reload"
  76. />
  77. <!-- 审核弹窗 -->
  78. <ele-modal
  79. :centered="true"
  80. :visible.sync="auditDialog"
  81. title="审核"
  82. :close-on-click-modal="false"
  83. width="25%"
  84. append-to-body
  85. @close="handleClose"
  86. >
  87. <el-form ref="form" :model="formData">
  88. <el-form-item
  89. prop="approvalResult"
  90. label="审核结果"
  91. :rules="{
  92. required: true,
  93. message: '请选择',
  94. trigger: 'change'
  95. }"
  96. >
  97. <el-select
  98. v-model="formData.approvalResult"
  99. placeholder="请选择"
  100. style="width: 100%"
  101. clearable
  102. >
  103. <el-option
  104. v-for="item in approvalResultOptions"
  105. :key="item.value"
  106. :label="item.label"
  107. :value="item.value"
  108. ></el-option>
  109. </el-select>
  110. </el-form-item>
  111. <el-form-item
  112. prop="rejectCause"
  113. label="审核意见"
  114. :rules="{
  115. required: formData.approvalResult == 0,
  116. message: '请输入',
  117. trigger: 'change'
  118. }"
  119. >
  120. <el-input
  121. v-model="formData.rejectCause"
  122. placeholder="请输入"
  123. type="textarea"
  124. ></el-input>
  125. </el-form-item>
  126. </el-form>
  127. <div slot="footer" class="footer">
  128. <el-button type="primary" @click="handleSubmit">确认</el-button>
  129. <el-button @click="handleClose">取消</el-button>
  130. </div>
  131. </ele-modal>
  132. </div>
  133. </template>
  134. <script>
  135. import {
  136. getPageSalesDemand,
  137. deleteSalesDemand,
  138. auditSalesDemand,
  139. revokeSalesDemand
  140. } from '@/api/salesServiceManagement/index.js';
  141. import search from './components/search.vue';
  142. import AddDialog from './components/addDialog.vue';
  143. import dictMixins from '@/mixins/dictMixins';
  144. export default {
  145. mixins: [dictMixins],
  146. components: {
  147. search,
  148. AddDialog
  149. },
  150. data() {
  151. return {
  152. // 表格列配置
  153. columns: [
  154. {
  155. columnKey: 'index',
  156. label: '序号',
  157. type: 'index',
  158. width: 55,
  159. align: 'center',
  160. showOverflowTooltip: true,
  161. fixed: 'left'
  162. },
  163. {
  164. slot: 'code',
  165. prop: 'code',
  166. label: '编码',
  167. align: 'center',
  168. showOverflowTooltip: true,
  169. minWidth: 110
  170. },
  171. {
  172. prop: 'contactCode',
  173. label: '客户编码',
  174. align: 'center',
  175. showOverflowTooltip: true
  176. },
  177. {
  178. prop: 'contactName',
  179. label: '客户名称',
  180. align: 'center',
  181. showOverflowTooltip: true
  182. },
  183. {
  184. prop: 'faultLevel',
  185. label: '故障等级',
  186. align: 'center',
  187. showOverflowTooltip: true
  188. },
  189. {
  190. prop: 'createUserName',
  191. label: '创建人',
  192. align: 'center',
  193. showOverflowTooltip: true
  194. },
  195. {
  196. prop: 'createTime',
  197. label: '创建时间',
  198. align: 'center',
  199. showOverflowTooltip: true,
  200. formatter: (_row, _column, cellValue) => {
  201. return this.$util.toDateString(cellValue);
  202. }
  203. },
  204. {
  205. prop: 'approvalUserName',
  206. label: '审核人',
  207. align: 'center',
  208. showOverflowTooltip: true
  209. },
  210. {
  211. prop: 'approvalTime',
  212. label: '审核时间',
  213. align: 'center',
  214. showOverflowTooltip: true,
  215. formatter: (_row, _column, cellValue) => {
  216. return this.$util.toDateString(cellValue);
  217. }
  218. },
  219. {
  220. prop: 'demandStatus',
  221. label: '状态',
  222. align: 'center',
  223. showOverflowTooltip: true,
  224. formatter: (_row, _column, cellValue) => {
  225. return cellValue == 0
  226. ? '待审核'
  227. : cellValue == 2
  228. ? '已拒绝'
  229. : cellValue == 1
  230. ? '已通过'
  231. : cellValue == 3
  232. ? '已撤回'
  233. : '';
  234. }
  235. },
  236. {
  237. columnKey: 'action',
  238. slot: 'action',
  239. label: '操作',
  240. align: 'center',
  241. width: 230,
  242. resizable: false,
  243. showOverflowTooltip: true
  244. }
  245. ],
  246. // 加载状态
  247. loading: false,
  248. infoData: {},
  249. repairInfoLogs: [],
  250. addDialogTitle: '新建售后需求',
  251. auditDialog: false,
  252. rowData: {},
  253. formData: {
  254. approvalResult: null,
  255. rejectCause: '',
  256. approvalUserId: '',
  257. approvalUserName: ''
  258. },
  259. approvalResultOptions: [
  260. { label: '驳回', value: 0 },
  261. { label: '同意', value: 1 }
  262. ]
  263. };
  264. },
  265. computed: {},
  266. created() {
  267. this.requestDict('报修来源');
  268. this.requestDict('报修状态');
  269. },
  270. methods: {
  271. /* 表格数据源 */
  272. datasource({ page, limit, where, order }) {
  273. return getPageSalesDemand({ pageNum: page, size: limit, ...where });
  274. },
  275. async changeEnable(row) {
  276. const res = await putRoles(row);
  277. if (res.code == 0) {
  278. this.$message({
  279. type: 'success',
  280. message: '修改成功',
  281. customClass: 'ele-message-border'
  282. });
  283. this.reload();
  284. }
  285. },
  286. /* 刷新表格 */
  287. reload(where) {
  288. this.$refs.table.reload({ page: 1, where });
  289. },
  290. openEdit(row, type) {
  291. this.$refs.addDialogRef.init(row, type);
  292. },
  293. handleRemove(row) {
  294. deleteSalesDemand([row.id]).then((res) => {
  295. this.$message.success('删除成功!');
  296. this.reload();
  297. });
  298. },
  299. async handleAudit(row) {
  300. this.auditDialog = true;
  301. this.rowData = row;
  302. },
  303. handleClose() {
  304. this.auditDialog = false;
  305. },
  306. async handleSubmit() {
  307. this.$refs.form.validate(async (valid) => {
  308. if (valid) {
  309. const data = this.$store.state.user.info;
  310. let pdata = {
  311. id: this.rowData.id,
  312. approvalResult: this.formData.approvalResult,
  313. rejectCause: this.formData.rejectCause,
  314. approvalUserId: data.userId,
  315. approvalUserName: data.name
  316. };
  317. const res = await auditSalesDemand(pdata);
  318. if (res) {
  319. this.$message.success('审核成功!');
  320. this.auditDialog = false;
  321. this.reload();
  322. }
  323. }
  324. });
  325. },
  326. async handleRevoke(row) {
  327. const res = await revokeSalesDemand({ id: row.id });
  328. if (!res) return;
  329. this.$message.success('撤回成功!');
  330. this.reload();
  331. },
  332. handleCommand(command, row) {
  333. if (command === 'handleRevoke') {
  334. this.handleRevoke(row);
  335. }
  336. if (command === 'handleAudit') {
  337. this.handleAudit(row);
  338. }
  339. }
  340. }
  341. };
  342. </script>
  343. <style lang="scss" scoped>
  344. .el-dropdown-link {
  345. cursor: pointer;
  346. color: var(--color-primary-5);
  347. }
  348. .el-icon-arrow-down {
  349. font-size: 12px;
  350. }
  351. </style>