index.vue 32 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064
  1. <template>
  2. <template-page
  3. v-if="pageShow"
  4. ref="pageRef"
  5. :get-list="getList"
  6. :exportList="exportList"
  7. :table-attributes="tableAttributes"
  8. :table-events="tableEvents"
  9. :options-evens-group="optionsEvensGroup"
  10. :moreParameters="moreParameters"
  11. :column-parsing="columnParsing"
  12. :operation="operation()"
  13. key="pageType"
  14. >
  15. <div class="cartographer_big">
  16. <el-dialog title="工作联络函" width="100%" :modal="false" :visible.sync="formDialog" :before-close="handleClose">
  17. <zj-page-container>
  18. <zj-page-fill>
  19. <div style="box-sizing: border-box; padding: 20px 20px 0 20px">
  20. <zj-form-container
  21. v-if="formDialog"
  22. ref="formRef"
  23. :form-data="formData"
  24. :form-attributes="{ size: 'mini' }"
  25. >
  26. <zj-form-module title="基本信息" label-width="100px" :form-data="formData" :form-items="formItems">
  27. </zj-form-module>
  28. <template v-if="[-1].includes(openType) && formData.leLetterItems && formData.leLetterItems.length">
  29. <template v-for="(item, index) in formData.leLetterItems">
  30. <zj-form-module
  31. :key="`${index}1`"
  32. :title="`网点审核${index + 1}`"
  33. label-width="100px"
  34. :form-data="item"
  35. :form-items="formItems1"
  36. >
  37. </zj-form-module>
  38. <zj-form-module
  39. :key="`${index}2`"
  40. :title="`中心审核${index + 1}`"
  41. label-width="100px"
  42. :form-data="item"
  43. :form-items="formItems2"
  44. >
  45. </zj-form-module>
  46. </template>
  47. </template>
  48. </zj-form-container>
  49. <zj-form-container
  50. v-if="formDialog && [1, 2].includes(openType)"
  51. ref="formRef1"
  52. :form-data="formData1"
  53. :form-attributes="{ size: 'mini' }"
  54. >
  55. <zj-form-module title="网点审核" label-width="100px" :form-data="formData1" :form-items="formItems1">
  56. </zj-form-module>
  57. </zj-form-container>
  58. <zj-form-container
  59. v-if="formDialog && [2].includes(openType)"
  60. ref="formRef2"
  61. :form-data="formData2"
  62. :form-attributes="{ size: 'mini' }"
  63. >
  64. <zj-form-module title="中心审核" label-width="100px" :form-data="formData2" :form-items="formItems2">
  65. </zj-form-module>
  66. </zj-form-container>
  67. </div>
  68. </zj-page-fill>
  69. <div style="text-align: right; box-sizing: border-box; padding: 16px 20px">
  70. <el-button size="mini" @click="handleClose">取消</el-button>
  71. <el-button v-if="openType == 0" size="mini" type="primary" @click="save()">保存</el-button>
  72. <el-button v-if="openType == 0 && formData.status == ''" size="mini" type="primary" @click="save('SEND')"
  73. >发送</el-button
  74. >
  75. <el-button v-if="openType == 1" size="mini" type="primary" @click="networkAudit">网点审核</el-button>
  76. <el-button v-if="openType == 2" size="mini" type="primary" @click="centralAudit">中心审核</el-button>
  77. </div>
  78. </zj-page-container>
  79. </el-dialog>
  80. </div>
  81. </template-page>
  82. </template>
  83. <script>
  84. import TemplatePage from '@/components/template/template-page-1.vue'
  85. import import_mixin from '@/components/template/import_mixin.js'
  86. import operation_mixin from '@/components/template/operation_mixin.js'
  87. import {
  88. letterProcessList,
  89. letterProcessListExport,
  90. letterProcessDetailLetter,
  91. letterProcessAddLetter,
  92. letterProcessUpdateLetter,
  93. letterProcessDelLetter,
  94. letterProcessAppeal, // 网点申诉
  95. letterProcessCancel, // 作废
  96. letterProcessExamine, // 中心批复
  97. letterProcessReject, // 驳回
  98. letterProcessSend // 发送
  99. } from '@/api/workContactLetterPage.js'
  100. import { required } from '@/components/template/rules_verify.js'
  101. import { getWebsit } from '@/api/customerManagement.js'
  102. import { letterManagerList } from '@/api/departmentSetting.js'
  103. import { letterManagerListProject } from '@/api/assessmentItemSetting.js'
  104. import { listPageV2 } from '@/api/workOrder/orderType'
  105. import { getClassifyList } from '@/api/goods'
  106. import ImageUpload from '@/components/file-upload'
  107. import { orderBaseDetail } from '@/api/workOrderPool.js'
  108. export default {
  109. components: { TemplatePage, ImageUpload },
  110. mixins: [import_mixin, operation_mixin],
  111. data() {
  112. return {
  113. pageType: 'list',
  114. pageShow: true,
  115. // 表格属性
  116. tableAttributes: {
  117. // 启用勾选列
  118. selectColumn: true
  119. },
  120. // 表格事件
  121. tableEvents: {
  122. 'selection-change': this.selectionChange
  123. },
  124. // 勾选选中行
  125. recordSelected: [],
  126. /** 表单变量 */
  127. formDialog: false,
  128. formData: {
  129. belongCompany: '',
  130. belongCompanyCode: '',
  131. companyWechatId: '',
  132. companyWechatName: '',
  133. context: '',
  134. dapartment: '',
  135. dapartmentId: '',
  136. examineFration: 0,
  137. examineName: '',
  138. examinePrice: 0,
  139. examineStatus: '',
  140. examineTime: '',
  141. fraction: 0,
  142. leLetterId: '',
  143. leLetterItems: [],
  144. letteWebsitNum: 0,
  145. letterNum: 0,
  146. letterNumber: '',
  147. mainId: '',
  148. mainName: '',
  149. orderCreateTime: '',
  150. orderId: '',
  151. orderSmallType: '',
  152. orderSmallTypeText: '',
  153. price: 0,
  154. projectId: '',
  155. projectName: '',
  156. projectReg: '',
  157. projectText: '',
  158. remark: '',
  159. sendTime: '',
  160. status: '',
  161. type: '',
  162. websitId: '',
  163. websitName: '',
  164. fileUrl: []
  165. },
  166. websitList: [],
  167. managerList: [],
  168. managerListProject: [],
  169. orderSmallTypeData: [],
  170. classifyList: [],
  171. openType: 0,
  172. formData1: {
  173. appealRemark: '',
  174. appealUrl: [],
  175. createBy: '',
  176. createTime: '',
  177. examineFration: 0,
  178. examineName: '',
  179. examinePrice: 0,
  180. examineRemark: '',
  181. examineStatus: '',
  182. examineTime: '',
  183. leLetterId: '',
  184. leLetterItemId: '',
  185. websitAppeal: ''
  186. },
  187. formData2: {
  188. appealRemark: '',
  189. appealUrl: '',
  190. createBy: '',
  191. createTime: '',
  192. examineFration: 0,
  193. examineName: '',
  194. examinePrice: 0,
  195. examineRemark: '',
  196. examineStatus: '',
  197. examineTime: '',
  198. leLetterId: '',
  199. leLetterItemId: '',
  200. websitAppeal: ''
  201. }
  202. }
  203. },
  204. computed: {
  205. // 事件组合
  206. optionsEvensGroup() {
  207. return [
  208. [
  209. [
  210. this.optionsEvensAuth('add', {
  211. click: this.openForm
  212. })
  213. ]
  214. ],
  215. [
  216. [
  217. this.optionsEvensAuth('void', {
  218. click: () => {
  219. if (this.recordSelected.length === 0) {
  220. this.$message.warning('请勾选数据')
  221. return
  222. }
  223. this.$confirm(' 是否继续?', '提示', {
  224. confirmButtonText: '确定',
  225. cancelButtonText: '取消',
  226. type: 'warning'
  227. })
  228. .then(() => {
  229. letterProcessCancel({
  230. ids: this.recordSelected.map(item => item.leLetterId).join(',')
  231. })
  232. .then(res => {
  233. this.$refs?.pageRef?.refreshList()
  234. this.recordSelected = []
  235. this.$message({
  236. message: '操作成功',
  237. type: 'success'
  238. })
  239. })
  240. .catch(err => {
  241. this.$message.error('操作失败')
  242. })
  243. })
  244. .catch(() => {})
  245. }
  246. })
  247. ]
  248. ],
  249. [
  250. [
  251. this.optionsEvensAuth('send', {
  252. click: () => {
  253. if (this.recordSelected.length === 0) {
  254. this.$message.warning('请勾选数据')
  255. return
  256. }
  257. this.$confirm(' 是否继续?', '提示', {
  258. confirmButtonText: '确定',
  259. cancelButtonText: '取消',
  260. type: 'warning'
  261. })
  262. .then(() => {
  263. letterProcessSend({
  264. ids: this.recordSelected.map(item => item.leLetterId).join(',')
  265. })
  266. .then(res => {
  267. this.$refs?.pageRef?.refreshList()
  268. this.recordSelected = []
  269. this.$message({
  270. message: '操作成功',
  271. type: 'success'
  272. })
  273. })
  274. .catch(err => {
  275. this.$message.error('操作失败')
  276. })
  277. })
  278. .catch(() => {})
  279. }
  280. })
  281. ]
  282. ],
  283. [
  284. [
  285. this.optionsEvensAuth('oneCaseRejected', {
  286. click: () => {
  287. if (this.recordSelected.length === 0) {
  288. this.$message.warning('请勾选数据')
  289. return
  290. }
  291. this.$confirm(' 是否继续?', '提示', {
  292. confirmButtonText: '确定',
  293. cancelButtonText: '取消',
  294. type: 'warning'
  295. })
  296. .then(() => {
  297. letterProcessReject({
  298. ids: this.recordSelected.map(item => item.leLetterId).join(',')
  299. })
  300. .then(res => {
  301. this.$refs?.pageRef?.refreshList()
  302. this.recordSelected = []
  303. this.$message({
  304. message: '操作成功',
  305. type: 'success'
  306. })
  307. })
  308. .catch(err => {
  309. this.$message.error('操作失败')
  310. })
  311. })
  312. .catch(() => {})
  313. }
  314. })
  315. ]
  316. ]
  317. ]
  318. },
  319. // 更多参数
  320. moreParameters() {
  321. return []
  322. },
  323. formItems() {
  324. return [
  325. {
  326. md: 6,
  327. name: 'el-input',
  328. attributes: {
  329. disabled: true
  330. },
  331. formItemAttributes: {
  332. label: '联络函编号',
  333. prop: 'letterNumber',
  334. rules: []
  335. }
  336. },
  337. {
  338. md: 6,
  339. name: 'el-input',
  340. attributes: {
  341. disabled: true
  342. },
  343. formItemAttributes: {
  344. label: '下发时间',
  345. prop: 'sendTime',
  346. rules: []
  347. }
  348. },
  349. {
  350. name: 'el-radio',
  351. options: [
  352. { label: '考核函', value: '考核函' },
  353. { label: '奖励函', value: '奖励函' },
  354. { label: '整改函', value: '整改函' }
  355. ],
  356. md: 6,
  357. attributes: {
  358. disabled: this.openType != 0,
  359. placeholder: '请输入'
  360. },
  361. formItemAttributes: {
  362. label: '函件类型',
  363. prop: 'type',
  364. rules: [...required]
  365. }
  366. },
  367. {
  368. name: 'el-select',
  369. options: this.managerList.map(item => ({
  370. data: item,
  371. label: item.dapartment,
  372. value: item.id
  373. })),
  374. echoInsertion: true,
  375. md: 6,
  376. attributes: {
  377. disabled: this.openType != 0,
  378. placeholder: '请选择',
  379. clearable: true,
  380. filterable: true
  381. },
  382. formItemAttributes: {
  383. label: '来源科室',
  384. prop: 'dapartmentId',
  385. propName: 'dapartment',
  386. rules: [...required]
  387. },
  388. events: {
  389. change: val => {
  390. if (val) {
  391. this.formData.dapartment = this.managerList?.find(item => item.id === val)?.dapartment
  392. } else {
  393. this.formData.dapartment = ''
  394. }
  395. }
  396. }
  397. },
  398. {
  399. md: 6,
  400. name: 'el-input',
  401. attributes: {
  402. disabled: this.openType != 0
  403. },
  404. formItemAttributes: {
  405. label: '工单编号',
  406. prop: 'orderId',
  407. rules: [...required]
  408. },
  409. events: {
  410. input: val => {
  411. if (val) {
  412. orderBaseDetail({
  413. orderBaseId: val,
  414. returnErr: true
  415. })
  416. .then(res => {
  417. if (res.data.orderProducts.length == 1) {
  418. this.formData.mainId = res.data.orderProducts?.[0]?.mainId || ''
  419. this.formData.mainName = res.data.orderProducts?.[0]?.mainName || ''
  420. }
  421. this.formData.orderSmallType = res.data?.orderSmallType || ''
  422. this.formData.orderSmallTypeText = res.data?.orderSmallTypeText || ''
  423. this.formData.orderCreateTime = res.data?.createTime || ''
  424. this.formData.websitId = res.data?.websitId || ''
  425. this.formData.websitName = res.data?.websitName || ''
  426. })
  427. .catch(err => {
  428. this.formData.mainId = ''
  429. this.formData.mainName = ''
  430. this.formData.orderSmallType = ''
  431. this.formData.orderSmallTypeText = ''
  432. this.formData.orderCreateTime = ''
  433. this.formData.websitId = ''
  434. this.formData.websitName = ''
  435. })
  436. }
  437. }
  438. }
  439. },
  440. {
  441. name: 'el-select',
  442. options: this.classifyList.map(item => ({
  443. data: item,
  444. label: item.name,
  445. value: item.categoryId
  446. })),
  447. echoInsertion: true,
  448. md: 6,
  449. attributes: {
  450. disabled: this.openType != 0,
  451. placeholder: '请选择',
  452. clearable: true,
  453. filterable: true
  454. },
  455. formItemAttributes: {
  456. label: '产品大类',
  457. prop: 'mainId',
  458. propName: 'mainName',
  459. rules: [...required]
  460. },
  461. events: {
  462. change: val => {
  463. if (val) {
  464. this.formData.mainName = this.classifyList?.find(item => item.categoryId === val)?.name
  465. } else {
  466. this.formData.mainName = ''
  467. }
  468. }
  469. }
  470. },
  471. {
  472. name: 'el-select',
  473. md: 6,
  474. options: this.orderSmallTypeData,
  475. attributes: {
  476. disabled: this.openType != 0,
  477. placeholder: '请选择',
  478. clearable: true,
  479. filterable: true
  480. },
  481. formItemAttributes: {
  482. label: '工单类型',
  483. prop: 'orderSmallType',
  484. rules: [...required]
  485. },
  486. events: {
  487. change: val => {
  488. if (val) {
  489. this.orderInfo.orderSmallTypeText = this.orderSmallTypeData.find(item => item.value == val).label
  490. } else {
  491. this.orderInfo.orderSmallTypeText = ''
  492. }
  493. }
  494. }
  495. },
  496. {
  497. md: 6,
  498. name: 'el-date-picker',
  499. attributes: {
  500. disabled: this.openType != 0,
  501. style: { width: '100%' },
  502. type: 'datetime',
  503. 'value-format': 'yyyy-MM-dd HH:mm:ss'
  504. },
  505. formItemAttributes: {
  506. label: '工单创建日期',
  507. prop: 'orderCreateTime',
  508. rules: []
  509. }
  510. },
  511. {
  512. name: 'el-select',
  513. options: this.websitList.map(item => ({
  514. data: item,
  515. label: item.name,
  516. value: item.websitId
  517. })),
  518. echoInsertion: true,
  519. md: 12,
  520. attributes: {
  521. disabled: this.openType != 0,
  522. placeholder: '请选择',
  523. clearable: true,
  524. filterable: true
  525. },
  526. formItemAttributes: {
  527. label: '接收网点',
  528. prop: 'websitId',
  529. propName: 'websitName',
  530. rules: [...required]
  531. },
  532. events: {
  533. change: val => {
  534. if (val) {
  535. this.formData.websitName = this.websitList?.find(item => item.websitId === val)?.name
  536. } else {
  537. this.formData.websitName = ''
  538. }
  539. }
  540. }
  541. },
  542. {
  543. name: 'el-select',
  544. options: this.managerListProject.map(item => ({
  545. data: item,
  546. label: item.projectName,
  547. value: item.projectId
  548. })),
  549. echoInsertion: true,
  550. md: 12,
  551. attributes: {
  552. disabled: this.openType != 0,
  553. placeholder: '请选择',
  554. clearable: true,
  555. filterable: true
  556. },
  557. formItemAttributes: {
  558. label: '考核项目',
  559. prop: 'projectId',
  560. propName: 'projectName',
  561. rules: [...required]
  562. },
  563. events: {
  564. change: val => {
  565. if (val) {
  566. var data = this.managerListProject?.find(item => item.projectId === val)
  567. this.formData.projectName = data?.projectName
  568. this.formData.projectReg = data?.projectReg || ''
  569. this.formData.projectText = data?.projectText || ''
  570. this.formData.price = data?.price || ''
  571. this.formData.fraction = data?.fraction || ''
  572. } else {
  573. this.formData.projectReg = ''
  574. this.formData.projectText = ''
  575. this.formData.price = ''
  576. this.formData.fraction = ''
  577. this.formData.projectName = ''
  578. }
  579. }
  580. }
  581. },
  582. {
  583. md: 12,
  584. name: 'el-input',
  585. attributes: {
  586. disabled: true
  587. },
  588. formItemAttributes: {
  589. label: '考核条例',
  590. prop: 'projectReg',
  591. rules: [...required]
  592. }
  593. },
  594. {
  595. md: 24,
  596. name: 'el-input',
  597. attributes: {
  598. disabled: true,
  599. type: 'textarea',
  600. rows: 3
  601. },
  602. formItemAttributes: {
  603. label: '考核规定',
  604. prop: 'projectText',
  605. rules: [...required]
  606. }
  607. },
  608. {
  609. md: 6,
  610. name: 'el-input',
  611. attributes: {
  612. disabled: true
  613. },
  614. formItemAttributes: {
  615. label: '考核金额',
  616. prop: 'price',
  617. rules: [...required]
  618. }
  619. },
  620. {
  621. md: 6,
  622. name: 'el-input',
  623. attributes: {
  624. disabled: true
  625. },
  626. formItemAttributes: {
  627. label: '考核分数',
  628. prop: 'fraction',
  629. rules: [...required]
  630. }
  631. },
  632. {
  633. md: 24,
  634. name: 'el-input',
  635. attributes: {
  636. disabled: this.openType != 0,
  637. type: 'textarea',
  638. rows: 3
  639. },
  640. formItemAttributes: {
  641. label: '函件内容',
  642. prop: 'context',
  643. rules: [...required]
  644. }
  645. },
  646. {
  647. md: 24,
  648. name: 'el-input',
  649. attributes: {
  650. disabled: this.openType != 0,
  651. type: 'textarea',
  652. rows: 3
  653. },
  654. formItemAttributes: {
  655. label: '备注',
  656. prop: 'remark',
  657. rules: []
  658. }
  659. },
  660. {
  661. md: 24,
  662. isShow: true,
  663. name: 'slot-component',
  664. formItemAttributes: {
  665. label: '附件',
  666. prop: 'fileUrl',
  667. rules: []
  668. },
  669. render: (h, { props, onInput }) => {
  670. return (
  671. <div>
  672. <ImageUpload fileList={this.formData.fileUrl} limit={1} isEdit={this.openType == 0} />
  673. </div>
  674. )
  675. }
  676. }
  677. ]
  678. },
  679. formItems1() {
  680. return [
  681. {
  682. name: 'el-radio',
  683. options: [
  684. { label: '接受', value: 'OK' },
  685. { label: '申诉', value: 'AP' }
  686. ],
  687. md: 8,
  688. attributes: {
  689. disabled: [-1, 2].includes(this.openType),
  690. placeholder: '请输入'
  691. },
  692. formItemAttributes: {
  693. label: '核实结果',
  694. prop: 'websitAppeal',
  695. rules: [...required]
  696. }
  697. },
  698. {
  699. md: 8,
  700. name: 'el-input',
  701. attributes: {
  702. disabled: true
  703. },
  704. formItemAttributes: {
  705. label: '申诉人',
  706. prop: 'createBy',
  707. rules: []
  708. }
  709. },
  710. {
  711. md: 8,
  712. name: 'el-input',
  713. attributes: {
  714. disabled: true
  715. },
  716. formItemAttributes: {
  717. label: '申诉时间',
  718. prop: 'createTime',
  719. rules: []
  720. }
  721. },
  722. {
  723. md: 24,
  724. name: 'el-input',
  725. attributes: {
  726. disabled: [-1, 2].includes(this.openType),
  727. type: 'textarea',
  728. rows: 3
  729. },
  730. formItemAttributes: {
  731. label: '申诉内容',
  732. prop: 'appealRemark',
  733. rules: [...required]
  734. }
  735. },
  736. {
  737. md: 24,
  738. name: 'slot-component',
  739. formItemAttributes: {
  740. label: '申诉附件',
  741. prop: 'appealUrl',
  742. rules: []
  743. },
  744. render: (h, { props, onInput }) => {
  745. return (
  746. <div>
  747. <ImageUpload fileList={this.formData1.appealUrl} limit={1} isEdit={this.openType == 1} />
  748. </div>
  749. )
  750. }
  751. }
  752. ]
  753. },
  754. formItems2() {
  755. return [
  756. {
  757. name: 'el-radio',
  758. options: [
  759. { label: '通过', value: 'OK' },
  760. { label: '驳回', value: 'FAIL' },
  761. { label: '减免', value: 'SUB' }
  762. ],
  763. md: 24,
  764. attributes: {
  765. disabled: [-1].includes(this.openType),
  766. placeholder: '请输入'
  767. },
  768. formItemAttributes: {
  769. label: '审核结果',
  770. prop: 'examineStatus',
  771. rules: [...required]
  772. }
  773. },
  774. {
  775. md: 6,
  776. name: 'el-input',
  777. attributes: {
  778. disabled: [-1].includes(this.openType)
  779. },
  780. formItemAttributes: {
  781. label: '审批金额',
  782. prop: 'examinePrice',
  783. rules: [...required]
  784. }
  785. },
  786. {
  787. md: 6,
  788. name: 'el-input',
  789. attributes: {
  790. disabled: [-1].includes(this.openType)
  791. },
  792. formItemAttributes: {
  793. label: '审批分数',
  794. prop: 'examineFration',
  795. rules: [...required]
  796. }
  797. },
  798. {
  799. md: 6,
  800. name: 'el-input',
  801. attributes: {
  802. disabled: true
  803. },
  804. formItemAttributes: {
  805. label: '审批人',
  806. prop: 'examineName',
  807. rules: []
  808. }
  809. },
  810. {
  811. md: 6,
  812. name: 'el-input',
  813. attributes: {
  814. disabled: true
  815. },
  816. formItemAttributes: {
  817. label: '审批时间',
  818. prop: 'createTime',
  819. rules: []
  820. }
  821. },
  822. {
  823. md: 24,
  824. name: 'el-input',
  825. attributes: {
  826. disabled: [-1].includes(this.openType),
  827. type: 'textarea',
  828. rows: 3
  829. },
  830. formItemAttributes: {
  831. label: '审批内容',
  832. prop: 'examineRemark',
  833. rules: [...required]
  834. }
  835. }
  836. ]
  837. }
  838. },
  839. methods: {
  840. // 列表请求函数
  841. getList: letterProcessList,
  842. // 列表导出函数
  843. exportList: letterProcessListExport,
  844. // 表格列解析渲染数据更改
  845. columnParsing(item, defaultData) {
  846. return defaultData
  847. },
  848. // 监听勾选变化
  849. selectionChange(data) {
  850. this.recordSelected = data
  851. },
  852. // 打开创建弹窗
  853. openForm() {
  854. Promise.all([
  855. getWebsit({ status: true }),
  856. letterManagerList({ pageNum: 1, pageSize: -1, params: [] }),
  857. letterManagerListProject({
  858. pageNum: 1,
  859. pageSize: -1,
  860. params: [{ param: 'a.status', compare: '=', value: 'ON' }]
  861. }),
  862. listPageV2({ pageNum: 1, pageSize: -1, params: [{ param: 'a.status', compare: '=', value: 'true' }] }),
  863. getClassifyList({ type: 2, status: true })
  864. ]).then(([res2, res3, res4, res5, res6]) => {
  865. this.openType = 0
  866. this.websitList = res2.data
  867. this.managerList = res3.data.records
  868. this.managerListProject = res4.data.records
  869. this.orderSmallTypeData = res5.data.records.map(item => ({
  870. value: item.id,
  871. label: item.orderSmallTypeText
  872. }))
  873. this.classifyList = res6.data.map(item => {
  874. var { children, ...data } = item
  875. return {
  876. ...data
  877. }
  878. })
  879. this.formDialog = true
  880. })
  881. },
  882. // 打开详情弹窗
  883. openDetailForm(row) {
  884. Promise.all([
  885. letterProcessDetailLetter({ id: row.leLetterId }),
  886. getWebsit({ status: true }),
  887. letterManagerList({ pageNum: 1, pageSize: -1, params: [] }),
  888. letterManagerListProject({
  889. pageNum: 1,
  890. pageSize: -1,
  891. params: [{ param: 'a.status', compare: '=', value: 'ON' }]
  892. }),
  893. listPageV2({ pageNum: 1, pageSize: -1, params: [{ param: 'a.status', compare: '=', value: 'true' }] }),
  894. getClassifyList({ type: 2, status: true })
  895. ]).then(([res1, res2, res3, res4, res5, res6]) => {
  896. this.formData = {
  897. ...res1.data,
  898. fileUrl: res1.data.fileUrl ? res1.data.fileUrl.split(',') : []
  899. }
  900. // 中心审批时需要把申述数据转换到formData1
  901. if (this.openType == 2 && res1.data.leLetterItems?.[0]) {
  902. this.formData1 = {
  903. ...res1.data.leLetterItems?.[0],
  904. appealUrl: res1.data.leLetterItems?.[0]?.appealUrl ? res1.data.leLetterItems?.[0]?.appealUrl.split(',') : []
  905. }
  906. }
  907. // 查看详情数据转换
  908. if (this.openType == -1) {
  909. this.formData = {
  910. ...this.formData,
  911. leLetterItems: this.formData.leLetterItems
  912. ? this.formData.leLetterItems.map(item => {
  913. return {
  914. ...item,
  915. appealUrl: item?.appealUrl ? item?.appealUrl.split(',') : []
  916. }
  917. })
  918. : []
  919. }
  920. }
  921. this.websitList = res2.data
  922. this.managerList = res3.data.records
  923. this.managerListProject = res4.data.records
  924. this.orderSmallTypeData = res5.data.records.map(item => ({
  925. value: item.id,
  926. label: item.orderSmallTypeText
  927. }))
  928. this.classifyList = res6.data.map(item => {
  929. var { children, ...data } = item
  930. return {
  931. ...data
  932. }
  933. })
  934. this.formDialog = true
  935. })
  936. },
  937. handleClose() {
  938. this.$refs?.formRef?.resetFields()
  939. this.$data.formData = this.$options.data().formData
  940. this.$data.formData1 = this.$options.data().formData1
  941. this.$data.formData2 = this.$options.data().formData2
  942. this.formDialog = false
  943. this.openType = 0
  944. },
  945. // 操作按钮
  946. operation() {
  947. return this.operationBtn({
  948. details: {
  949. click: ({ row, index, column }) => {
  950. this.openType = -1
  951. this.openDetailForm(row)
  952. }
  953. },
  954. edit: {
  955. conditions: ({ row, index, column }) => {
  956. return row.status === 'WAIT'
  957. },
  958. click: ({ row, index, column }) => {
  959. this.openType = 0
  960. this.openDetailForm(row)
  961. }
  962. },
  963. networkAppeal: {
  964. conditions: ({ row, index, column }) => {
  965. return row.status === 'SEND'
  966. },
  967. click: ({ row, index, column }) => {
  968. this.openType = 1
  969. this.openDetailForm(row)
  970. }
  971. },
  972. centralRebatch: {
  973. conditions: ({ row, index, column }) => {
  974. return row.status === 'WAIT_EXAMINE'
  975. },
  976. click: ({ row, index, column }) => {
  977. this.openType = 2
  978. this.openDetailForm(row)
  979. }
  980. }
  981. // del: {
  982. // conditions: ({ row, index, column }) => {
  983. // return true
  984. // },
  985. // prompt: '确定删除?',
  986. // click: ({ row, index, column }) => {
  987. // letterProcessDelLetter({
  988. // id: row.id
  989. // })
  990. // .then(res => {
  991. // this.$refs.pageRef.refreshList()
  992. // this.$message({
  993. // type: 'success',
  994. // message: `删除成功!`
  995. // })
  996. // })
  997. // .catch(err => {
  998. // console.log(err)
  999. // })
  1000. // }
  1001. // }
  1002. })
  1003. },
  1004. // 保存
  1005. save(status) {
  1006. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  1007. if (valid) {
  1008. ;(this.formData?.leLetterId ? letterProcessUpdateLetter : letterProcessAddLetter)({
  1009. ...this.formData,
  1010. status: status || this.formData.status,
  1011. fileUrl: this.formData.fileUrl.length ? this.formData.fileUrl.map(item => item.url).join(',') : ''
  1012. }).then(res => {
  1013. this.$message({
  1014. type: 'success',
  1015. message: '保存成功'
  1016. })
  1017. this.handleClose()
  1018. this.$refs.pageRef.refreshList()
  1019. })
  1020. }
  1021. })
  1022. },
  1023. networkAudit() {
  1024. this.$refs.formRef1.validate((valid, invalidFields, errLabels) => {
  1025. if (valid) {
  1026. letterProcessAppeal({
  1027. ...this.formData1,
  1028. appealUrl: this.formData1.appealUrl.length ? this.formData1.appealUrl.map(item => item.url).join(',') : '',
  1029. leLetterId: this.formData?.leLetterId
  1030. }).then(res => {
  1031. this.$message({
  1032. type: 'success',
  1033. message: '审核成功'
  1034. })
  1035. this.handleClose()
  1036. this.$refs.pageRef.refreshList()
  1037. })
  1038. }
  1039. })
  1040. },
  1041. centralAudit() {
  1042. this.$refs.formRef2.validate((valid, invalidFields, errLabels) => {
  1043. if (valid) {
  1044. letterProcessExamine({
  1045. ...this.formData2,
  1046. leLetterItemId: this.formData.leLetterItems?.[0]?.leLetterItemId,
  1047. leLetterId: this.formData?.leLetterId
  1048. }).then(res => {
  1049. this.$message({
  1050. type: 'success',
  1051. message: '审核成功'
  1052. })
  1053. this.handleClose()
  1054. this.$refs.pageRef.refreshList()
  1055. })
  1056. }
  1057. })
  1058. }
  1059. }
  1060. }
  1061. </script>
  1062. <style lang="scss" scoped></style>