index.vue 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never" v-loading="loading">
  4. <work-search
  5. class="seep-search"
  6. ref="workSearch"
  7. :levelList="levelList"
  8. @search="reload"
  9. ></work-search>
  10. <el-tabs v-model="orderStatus" type="card" @tab-click="handleClick">
  11. <el-tab-pane label="全部" name="all"></el-tab-pane>
  12. <el-tab-pane label="待执行" name="0"></el-tab-pane>
  13. <el-tab-pane label="执行中" name="1"></el-tab-pane>
  14. <el-tab-pane label="待验收" name="3"></el-tab-pane>
  15. <el-tab-pane label="已完成" name="5"></el-tab-pane>
  16. </el-tabs>
  17. <!-- 数据表格 -->
  18. <ele-pro-table
  19. ref="table"
  20. :columns="columns"
  21. :datasource="datasource"
  22. cache-key="systemRoleTable"
  23. :pageSize="20"
  24. @cell-click="cellClick"
  25. >
  26. <template v-slot:single="{ row }">
  27. <el-radio class="radio" v-model="radioId" :label="row.id">
  28. <i></i>
  29. </el-radio>
  30. </template>
  31. <template v-slot:toolbar>
  32. <el-dropdown trigger="click" :disabled="!radioId">
  33. <el-button type="primary" class="el-icon-printer" size="small">
  34. 打印<i class="el-icon-arrow-down el-icon--right"></i>
  35. </el-button>
  36. <el-dropdown-menu slot="dropdown">
  37. <el-dropdown-item @click.native="quotation('service')"
  38. >服务派工单</el-dropdown-item
  39. >
  40. <el-dropdown-item @click.native="quotation('technical')"
  41. >技术派工单</el-dropdown-item
  42. >
  43. </el-dropdown-menu>
  44. </el-dropdown>
  45. </template>
  46. <template v-slot:code="{ row }">
  47. <el-link
  48. type="primary"
  49. :underline="false"
  50. @click="declarationForm(row, 'view')"
  51. >{{ row.code }}</el-link
  52. >
  53. </template>
  54. <!-- 操作列 -->
  55. <template v-slot:action="{ row }">
  56. <el-link
  57. type="primary"
  58. :underline="false"
  59. @click="declarationForm(row, 'edit')"
  60. v-if="
  61. (row.orderStatus == 1 || row.orderStatus == 6) &&
  62. $hasPermission('eom:aftersalesworkorder:update')
  63. "
  64. >修改</el-link
  65. >
  66. <el-link
  67. type="primary"
  68. :underline="false"
  69. @click="declarationForm(row, 'report')"
  70. v-if="
  71. (row.orderStatus == 1 || row.orderStatus == 6) &&
  72. $hasPermission('eom:aftersalesworkorder:reportWorking')
  73. "
  74. >报工</el-link
  75. >
  76. <el-link
  77. type="primary"
  78. v-if="
  79. row.orderStatus == 0 &&
  80. $hasPermission('eom:aftersalesworkorder:receive')
  81. "
  82. :underline="false"
  83. @click="handleCommand('handleReceive', row)"
  84. >接收</el-link
  85. >
  86. <el-link
  87. type="primary"
  88. v-if="
  89. (row.pieCarType == 1 || row.pieCarType == 2) &&
  90. $hasPermission('eom:aftersalesworkorder:vehicle')
  91. "
  92. :underline="false"
  93. @click="handlevehicle(row)"
  94. >用车申请</el-link
  95. >
  96. <el-link
  97. type="primary"
  98. v-if="
  99. (row.orderStatus == 0 || row.orderStatus == 1) &&
  100. $hasPermission('eom:aftersalesworkorder:reassignment')
  101. "
  102. :underline="false"
  103. @click="handleCommand('toRedeploy', row)"
  104. >转派</el-link
  105. >
  106. <el-link
  107. type="primary"
  108. v-if="
  109. (row.orderStatus == 1 || row.orderStatus == 2) &&
  110. $hasPermission('eom:sparepartsapply:save')
  111. "
  112. :underline="false"
  113. @click="handleCommand('addSpareItems', row)"
  114. >申请配件</el-link
  115. >
  116. <el-link
  117. type="primary"
  118. v-if="
  119. acceptShow(row) &&
  120. $hasPermission('eom:aftersalesworkorder:checkAndAccept')
  121. "
  122. :underline="false"
  123. @click="handleCommand('checkAndAccept', row)"
  124. >验收</el-link
  125. >
  126. <!-- v-if="row.orderStatus == 4" -->
  127. <el-link
  128. type="primary"
  129. v-if="
  130. evaluateShow(row) &&
  131. $hasPermission('eom:aftersalesworkorder:comment')
  132. "
  133. :underline="false"
  134. @click="handleCommand('evaluate', row)"
  135. >评价</el-link
  136. >
  137. </template>
  138. </ele-pro-table>
  139. </el-card>
  140. <!-- 详情 -->
  141. <detailDialog ref="detailDialogRef"></detailDialog>
  142. <!-- 备品备件 -->
  143. <applyForSpare @reload="reload" ref="edit" />
  144. <!-- 报工 -->
  145. <declarationDialog
  146. ref="declarationDialogRef"
  147. @reload="reload"
  148. ></declarationDialog>
  149. <!-- 转派 -->
  150. <redeployOther ref="redeployOtherRef" @reload="reload" />
  151. <ele-modal
  152. custom-class="ele-dialog-form long-dialog-form"
  153. :visible.sync="visibleCheckAndAccept"
  154. title="验收"
  155. :close-on-click-modal="false"
  156. width="500px"
  157. append-to-body
  158. :maxable="true"
  159. >
  160. <div>
  161. <el-form
  162. ref="form"
  163. :model="form"
  164. label-width="100px"
  165. class="create-form"
  166. >
  167. <el-form-item label="验收人" prop="accepterUserId">
  168. <el-select
  169. v-model="form.accepterUserId"
  170. size="small"
  171. style="width: 100%"
  172. >
  173. <el-option
  174. :value="item.id"
  175. :label="item.contactName"
  176. v-for="(item, index) in contactInfoVOS"
  177. @click.native="accepterUserChange(item)"
  178. :key="index"
  179. ></el-option>
  180. </el-select>
  181. </el-form-item>
  182. <el-form-item label="验收意见" prop="accepterRemark">
  183. <el-input
  184. placeholder="请输入内容"
  185. v-model="form.accepterRemark"
  186. type="textarea"
  187. ></el-input>
  188. </el-form-item>
  189. <el-form-item label="附件" prop="accepterAttachments">
  190. <fileMain v-model="form.accepterAttachments"></fileMain>
  191. </el-form-item>
  192. </el-form>
  193. </div>
  194. <div slot="footer" class="footer">
  195. <el-button type="primary" @click="checkAndAccept(1)">通过</el-button>
  196. <el-button type="primary" @click="checkAndAccept(0)">不通过</el-button>
  197. <el-button @click="visibleCheckAndAccept = false">取消</el-button>
  198. </div>
  199. </ele-modal>
  200. <addDialog ref="addDialogRef" @success="reload"></addDialog>
  201. <jimureportBrowse
  202. @cancelQuo="cancelQuo"
  203. v-if="browseShow"
  204. :browseShow="browseShow"
  205. :businessId="currentRow.id"
  206. :businessCode="currentBusinessCode"
  207. :role-name="roleName"
  208. ></jimureportBrowse>
  209. <process-submit-dialog
  210. :process-submit-dialog-flag="processSubmitDialogFlag"
  211. :form-schema="formSchema"
  212. :carByTemplate="carByTemplate"
  213. :work-order-data="currentVehicleWorkOrder"
  214. @update:processSubmitDialogFlag="(val) => (processSubmitDialogFlag = val)"
  215. @formSubmit="handleFormSubmit"
  216. ></process-submit-dialog>
  217. </div>
  218. </template>
  219. <script>
  220. // import fileMain from '@/components/addDoc/index.vue';
  221. import workSearch from './components/work-search.vue';
  222. import detailDialog from './components/detailDialog.vue';
  223. import applyForSpare from '../components/applyForSpare.vue';
  224. import declarationDialog from './components/declarationDialog.vue';
  225. import redeployOther from './components/redeployOther2.vue';
  226. import addDialog from '@/views/salesServiceManagement/evaluate/components/addDialog.vue';
  227. import { enterprisePage } from '@/api/contractManage/contractBook';
  228. import jimureportBrowse from '@/components/jimureport/browseModal.vue';
  229. import processSubmitDialog from '@/views/salesServiceManagement/components/processSubmitDialog/processSubmitDialog.vue';
  230. import { getBpmCustomFormList } from '@/api/saleManage/contact';
  231. import { getToken } from '@/utils/token-util';
  232. import {
  233. getSalesWorkOrder,
  234. deleteSalesWorkOrder,
  235. receiveSalesWorkOrder,
  236. checkAndAccept,
  237. getSalesWorkOrderById,
  238. checkByWorkId,
  239. afterSalesEvaluation
  240. } from '@/api/salesServiceManagement/index';
  241. import { getByCode } from '@/api/system/dictionary-data';
  242. import dictMixins from '@/mixins/dictMixins';
  243. import { getCurrentUser } from '@/utils/token-util';
  244. export default {
  245. mixins: [dictMixins],
  246. components: {
  247. workSearch,
  248. detailDialog,
  249. applyForSpare,
  250. declarationDialog,
  251. redeployOther,
  252. addDialog,
  253. jimureportBrowse,
  254. processSubmitDialog
  255. // fileMain
  256. },
  257. data() {
  258. return {
  259. visibleCheckAndAccept: false,
  260. form: {
  261. accepterUserId: '',
  262. accepterUserName: '',
  263. accepterRemark: ''
  264. },
  265. roleName: '',
  266. currentBusinessCode: '',
  267. contactInfoVOS: [],
  268. currentVehicleWorkOrder: {},
  269. defaultTemplateList: [], // 模板列表
  270. carByTemplate: {}, // 用车相关模板
  271. processSubmitDialogFlag: false, // 弹窗显示/隐藏标识
  272. formSchema: {}, // 弹窗表单配置
  273. carFormData: {}, // 弹窗提交的表单数据
  274. workOrderStatus: [
  275. // { code: 0, label: '待接收' },
  276. { code: 0, label: '待执行' },
  277. { code: 1, label: '已接收' },
  278. { code: 2, label: '执行中' },
  279. { code: 3, label: '待验收' },
  280. { code: 4, label: '待评价' },
  281. { code: 5, label: '已完成' },
  282. { code: 6, label: '验收不通过' }
  283. ],
  284. resultStatus: [
  285. { code: 5, label: '未修复' },
  286. { code: 4, label: '已修复' }
  287. ],
  288. // 表格列配置
  289. columns: [
  290. {
  291. columnKey: 'index',
  292. label: '序号',
  293. type: 'index',
  294. width: 55,
  295. align: 'center',
  296. showOverflowTooltip: true,
  297. fixed: 'left'
  298. },
  299. {
  300. action: 'single',
  301. slot: 'single',
  302. align: 'center',
  303. label: '选择',
  304. width: 50
  305. },
  306. {
  307. prop: 'code',
  308. slot: 'code',
  309. label: '工单编号',
  310. align: 'center',
  311. showOverflowTooltip: true,
  312. minWidth: 150
  313. },
  314. {
  315. prop: 'planCode',
  316. label: '计划单号',
  317. align: 'center',
  318. showOverflowTooltip: true,
  319. minWidth: 110
  320. },
  321. {
  322. prop: 'planName',
  323. label: '计划名称',
  324. align: 'center',
  325. showOverflowTooltip: true,
  326. minWidth: 110
  327. },
  328. {
  329. prop: 'executeUserName',
  330. label: '报工人',
  331. align: 'center',
  332. showOverflowTooltip: true,
  333. minWidth: 110
  334. },
  335. {
  336. prop: 'accepterUserName',
  337. label: '验收人',
  338. align: 'center',
  339. showOverflowTooltip: true,
  340. minWidth: 110
  341. },
  342. {
  343. slot: 'faultLevel',
  344. prop: 'faultLevel',
  345. label: '故障等级',
  346. align: 'center',
  347. showOverflowTooltip: true,
  348. formatter: (row) => {
  349. return this.levelData[row.faultLevel] || '';
  350. }
  351. },
  352. {
  353. prop: 'contactName',
  354. label: '客户名称',
  355. align: 'center',
  356. showOverflowTooltip: true,
  357. minWidth: 110
  358. },
  359. {
  360. prop: 'categoryName',
  361. label: '设备名称',
  362. align: 'center',
  363. minWidth: 110,
  364. showOverflowTooltip: true,
  365. formatter: (row) => {
  366. if (!row.deviceDetails) return '';
  367. let str = '';
  368. row.deviceDetails.map((el, idx) => {
  369. if (idx + 1 == row.deviceDetails.length) {
  370. str += el.categoryName;
  371. } else {
  372. str = str + '' + el.categoryName + ',';
  373. }
  374. });
  375. return str;
  376. }
  377. },
  378. {
  379. prop: 'accepterTime',
  380. label: '验收时间',
  381. align: 'center',
  382. showOverflowTooltip: true,
  383. minWidth: 110
  384. },
  385. {
  386. prop: 'acceptTime',
  387. label: '开始时间',
  388. align: 'center',
  389. showOverflowTooltip: true,
  390. minWidth: 110
  391. },
  392. {
  393. prop: 'finishTime',
  394. label: '结束时间',
  395. align: 'center',
  396. showOverflowTooltip: true,
  397. minWidth: 110
  398. },
  399. {
  400. prop: 'planFinishTime',
  401. label: '计划完成时间',
  402. align: 'center',
  403. showOverflowTooltip: true,
  404. minWidth: 110
  405. },
  406. {
  407. prop: 'totalCost',
  408. label: '费用( 元 )',
  409. align: 'center',
  410. showOverflowTooltip: true,
  411. minWidth: 110
  412. },
  413. {
  414. columnKey: 'inFactDuration',
  415. label: '工时',
  416. align: 'center',
  417. resizable: false,
  418. showOverflowTooltip: true,
  419. minWidth: 120,
  420. formatter: (row) => {
  421. if (row.inFactDuration || row.inFactDuration == 0) {
  422. let str = ((row.inFactDuration - 0) / 60).toFixed(1);
  423. return str + ' 小时';
  424. }
  425. }
  426. },
  427. {
  428. prop: 'orderStatus',
  429. label: '状态',
  430. align: 'center',
  431. showOverflowTooltip: true,
  432. formatter: (row) => {
  433. return this.workOrderStatus.find(
  434. (item) => item.code == row.orderStatus
  435. )?.label;
  436. }
  437. },
  438. {
  439. columnKey: 'action',
  440. label: '操作',
  441. width: 240,
  442. align: 'center',
  443. resizable: false,
  444. slot: 'action',
  445. showOverflowTooltip: true
  446. }
  447. ],
  448. // 加载状态
  449. loading: false,
  450. row: {},
  451. levelData: {},
  452. levelList: [],
  453. orderStatus: 'all',
  454. radioId: '',
  455. currentRow: {},
  456. browseShow: false
  457. };
  458. },
  459. computed: {
  460. // 评价
  461. evaluateShow() {
  462. return (row) => {
  463. return row.orderStatus == 4;
  464. };
  465. },
  466. // 验收
  467. acceptShow() {
  468. return (row) => {
  469. return row.orderStatus == 3 || row.orderStatus == 6;
  470. };
  471. }
  472. },
  473. created() {
  474. this.getLevelCode('fault_level');
  475. },
  476. methods: {
  477. quotation(type) {
  478. console.log(this.currentRow.id);
  479. if (!this.currentRow.id) {
  480. this.$message.warning('请先选择计划');
  481. return;
  482. }
  483. this.currentBusinessCode =
  484. type === 'technical'
  485. ? 'eomTechnicalDispatchOrder' // 技术派工单
  486. : 'eomServiceDispatchOrder'; // 服务派工单
  487. const currentUser = getCurrentUser();
  488. const { currentGroupId, currentRoleId } = currentUser || {};
  489. const groupList =
  490. this.$store.state.user?.info?.loginChangeGroupVOList || [];
  491. const targetGroup = groupList.find(
  492. (group) => group.groupId === currentGroupId
  493. );
  494. let roleName = '';
  495. if (targetGroup && targetGroup.loginChangeRoleVOList) {
  496. const targetRole = targetGroup.loginChangeRoleVOList.find(
  497. (role) => role.roleId === currentRoleId
  498. );
  499. roleName = targetRole?.roleName || '';
  500. }
  501. this.roleName = roleName;
  502. this.browseShow = true;
  503. },
  504. cancelQuo() {
  505. this.browseShow = false;
  506. },
  507. cellClick(row) {
  508. this.currentRow = row;
  509. this.radioId = row.id;
  510. },
  511. handleClick(e) {
  512. let where = this.$refs.workSearch.$refs.seekPage.defaultWhere || {};
  513. this.reload(where);
  514. },
  515. //查询问题等级字典
  516. async getLevelCode(code) {
  517. const res = await getByCode(code);
  518. if (res?.code === '0') {
  519. let obj = {};
  520. let arr = [];
  521. res.data.map((el) => {
  522. arr.push({
  523. label: Object.values(el)[0],
  524. value: Object.keys(el)[0]
  525. });
  526. obj = { ...obj, ...el };
  527. });
  528. this.levelList = arr;
  529. this.levelData = obj;
  530. }
  531. },
  532. /* 表格数据源 */
  533. datasource({ page, limit, where, order }) {
  534. return getSalesWorkOrder({ pageNum: page, size: limit, ...where });
  535. },
  536. /* 刷新表格 */
  537. reload(where) {
  538. this.radioId = ''; // 翻页/刷新时清空选中状态
  539. this.currentRow = {}; // 同步清空当前行
  540. // 判断如果是选择的全部 不用传参
  541. if (this.orderStatus == 'all') {
  542. // where = where ? delete where.orderStatus : '';
  543. if (where) {
  544. delete where.orderStatus;
  545. }
  546. return this.$refs.table.reload({ page: 1, where });
  547. }
  548. // 不是的话 赋值工单状态
  549. if (!where) {
  550. where = { orderStatus: this.orderStatus };
  551. } else {
  552. where.orderStatus = this.orderStatus;
  553. }
  554. this.$refs.table.reload({ page: 1, where });
  555. this.$emit('getToDoReminder');
  556. },
  557. async cancel(row) {
  558. const res = await deleteSalesWorkOrder([row.id]);
  559. if (res) {
  560. this.$message.success('删除成功');
  561. this.reload();
  562. }
  563. },
  564. async addSpareItems(row) {
  565. let data = await getSalesWorkOrderById(row.id);
  566. let dataP = {
  567. receivingDeptName: data.executeGroupName,
  568. receivingDeptId: data.executeGroupId,
  569. recipientName: data.executeUserName,
  570. recipientId: data.executeUserId,
  571. name: data.name,
  572. receptionUserId: data.receptionUserId,
  573. id: data.id,
  574. userId: data.executeUserId,
  575. userName: data.executeUserName,
  576. details: data.costListVOS.filter((item) => {
  577. if (item.typeId == 2 && item.isApply != 1) {
  578. item.totalPrice = item.settlementPrice;
  579. item.categoryCode = item.code;
  580. item.categoryName = item.name;
  581. return item;
  582. }
  583. })
  584. };
  585. this.$refs.edit.open(JSON.parse(JSON.stringify(dataP)), 'work');
  586. },
  587. //接收
  588. async handleReceive(row) {
  589. const res = await receiveSalesWorkOrder(row);
  590. if (!res) return;
  591. this.$message.success('操作成功');
  592. this.reload();
  593. },
  594. //验收
  595. async checkAndAccept(accepterStatus) {
  596. if (!this.form.accepterUserId) {
  597. this.$message.warning('请选择验收人!');
  598. return;
  599. }
  600. const res = await checkAndAccept({
  601. id: this.row.id,
  602. ...this.form,
  603. accepterStatus
  604. });
  605. if (!res) return;
  606. this.$message.success('操作成功');
  607. this.visibleCheckAndAccept = false;
  608. this.reload();
  609. },
  610. accepterUserChange(item) {
  611. this.form.accepterUserName = item.contactName;
  612. },
  613. // 转派
  614. async toRedeploy(row) {
  615. this.$refs.redeployOtherRef.open(row, 'transfer');
  616. },
  617. //报工
  618. async declarationForm(row, type) {
  619. if (type !== 'view') {
  620. let flag = await this.permission(row);
  621. if (!flag) return;
  622. }
  623. this.$refs.declarationDialogRef.open(row, type);
  624. },
  625. // 校验
  626. async permission(row, command) {
  627. // 点评论/验收的话不走这个方法
  628. if (command == 'evaluate' || command == 'checkAndAccept') {
  629. return true;
  630. }
  631. try {
  632. await checkByWorkId(row.id);
  633. return true;
  634. } catch {
  635. return false;
  636. }
  637. },
  638. goDetail(row) {
  639. this.$refs.declarationDialogRef.open(row, 'view');
  640. },
  641. async handlevehicle(row) {
  642. this.currentVehicleWorkOrder = {
  643. id: row.id, // 列表工单ID
  644. code: row.code, // 列表工单编号(要显示的code)
  645. name: row.planName // 列表工单名称(可选,根据弹窗需求传递)
  646. };
  647. const e = row.pieCarType;
  648. if (e == '1' || e == '2') {
  649. this.defaultTemplateList = await getBpmCustomFormList({ status: 1 });
  650. this.carByTemplate = this.defaultTemplateList.find(
  651. (item) => item?.code === 'carBy'
  652. );
  653. console.log(this.carByTemplate)
  654. if (this.carByTemplate && this.carByTemplate.formJson?.makingJson) {
  655. this.formSchema = JSON.parse(this.carByTemplate.formJson.makingJson);
  656. this.formSchema.config.dataSource &&
  657. this.formSchema.config.dataSource.forEach((item) => {
  658. item.headers = { Authorization: getToken() };
  659. });
  660. } else {
  661. this.formSchema = {};
  662. }
  663. this.processSubmitDialogFlag = true; // 打开弹窗
  664. }
  665. },
  666. handleFormSubmit(data) {
  667. this.carFormData = data;
  668. console.log(this.carFormData);
  669. },
  670. async handleCommand(command, row) {
  671. let flag = await this.permission(row, command);
  672. if (!flag) return;
  673. if (command === 'addSpareItems') {
  674. this.addSpareItems(row);
  675. }
  676. if (command === 'handleReceive') {
  677. this.handleReceive(row);
  678. }
  679. if (command === 'toRedeploy') {
  680. this.toRedeploy(row);
  681. }
  682. if (command == 'evaluate') {
  683. try {
  684. await afterSalesEvaluation(row.id);
  685. this.$refs.addDialogRef.open(row, 'add');
  686. } catch (err) {}
  687. }
  688. if (command == 'checkAndAccept') {
  689. try {
  690. await afterSalesEvaluation(row.id);
  691. this.visibleCheckAndAccept = true;
  692. this.form = {
  693. accepterUserId: '',
  694. accepterUserName: '',
  695. accepterRemark: ''
  696. };
  697. const { afterSalesDemandVO } = await getSalesWorkOrderById(row.id);
  698. this.contactInfoVOS = afterSalesDemandVO.contactInfoVOS || [];
  699. this.row = row;
  700. } catch (err) {}
  701. }
  702. }
  703. }
  704. };
  705. </script>
  706. <style lang="scss" scoped>
  707. .el-dropdown-link {
  708. cursor: pointer;
  709. color: var(--color-primary-5);
  710. }
  711. .el-icon-arrow-down {
  712. font-size: 12px;
  713. }
  714. ::v-deep .seep-search {
  715. .el-input__inner {
  716. padding: 0 5px 0 10px;
  717. }
  718. }
  719. </style>