index.vue 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120
  1. <template>
  2. <zj-tab-page ref="tabPage" :defaultActives="[{ key: 'list', label: $route.meta.title + '-列表', essential: true }]">
  3. <template slot-scope="{ activeKey, data }">
  4. <div
  5. :style="{
  6. width: '100%',
  7. height: activeKey == 'list' ? '100%' : '0px',
  8. overflow: 'hidden'
  9. }"
  10. >
  11. <template-page
  12. ref="pageRef"
  13. :get-list="getList"
  14. :table-attributes="tableAttributes"
  15. :table-events="tableEvents"
  16. :operationColumnWidth="260"
  17. :options-evens-group="optionsEvensGroup"
  18. :moreParameters="moreParameters"
  19. :column-parsing="columnParsing"
  20. :operation="operation()"
  21. :exportList="exportList"
  22. >
  23. <div slot="moreSearch">
  24. <el-radio-group v-model="examineStatus" size="mini" @change="changeType">
  25. <el-radio-button label="">全部</el-radio-button>
  26. <el-radio-button label="WAIT">入住申请待审核</el-radio-button>
  27. <el-radio-button label="WAIT_WORKER">待师傅购买</el-radio-button>
  28. <el-radio-button label="POLICY_WAIT">保险待审核</el-radio-button>
  29. <el-radio-button label="OK">状态正常</el-radio-button>
  30. <el-radio-button label="FAIL">已驳回</el-radio-button>
  31. <el-radio-button label="EXPIRED">证件快过期</el-radio-button>
  32. <el-radio-button label="OVERDUE">证件已过期</el-radio-button>
  33. <el-radio-button label="STOP">已暂停</el-radio-button>
  34. <el-radio-button label="QUIT">已经离职</el-radio-button>
  35. </el-radio-group>
  36. <br /><br />
  37. </div>
  38. </template-page>
  39. </div>
  40. <div
  41. v-if="~['detail', 'edit', 'entryAudit', 'insuranceAudit'].indexOf(activeKey)"
  42. style="box-sizing: border-box; padding: 16px"
  43. >
  44. <zj-form-container ref="formRef" :form-data="formData" :styleSwitch="false">
  45. <zj-form-module
  46. title="详情"
  47. label-width="100px"
  48. :showPackUp="false"
  49. :form-data="formData.user"
  50. :form-items="formItems"
  51. >
  52. </zj-form-module>
  53. <zj-form-module
  54. title="证件信息"
  55. label-width="100px"
  56. :showPackUp="false"
  57. :form-data="formData"
  58. :form-items="formItems2"
  59. >
  60. </zj-form-module>
  61. <zj-form-module
  62. title="保险信息"
  63. label-width="100px"
  64. :showPackUp="false"
  65. :form-data="formData"
  66. :form-items="formItems3"
  67. >
  68. </zj-form-module>
  69. </zj-form-container>
  70. <div slot="footer" class="dialog-footer">
  71. <el-button v-if="formData.examineStatus == 'WAIT' && activeKey == 'examine'" size="mini" type="primary"
  72. >审核通过</el-button
  73. >
  74. <el-button v-if="formData.examineStatus == 'WAIT' && activeKey == 'examine'" size="mini" type="danger"
  75. >审核驳回</el-button
  76. >
  77. <el-button v-if="activeKey == 'edit'" size="mini" type="primary" @click="submit">保存</el-button>
  78. <el-button size="mini" @click="data.removeTab()">取 消</el-button>
  79. </div>
  80. </div>
  81. </template>
  82. </zj-tab-page>
  83. </template>
  84. <script>
  85. import TemplatePage from '@/components/template/template-page-1.vue'
  86. import import_mixin from '@/components/template/import_mixin.js'
  87. import { required, mobileRequired, mobile } from '@/components/template/rules_verify.js'
  88. import {
  89. memberListPageV2,
  90. memberPageExport,
  91. workerManagerDetail,
  92. workerManagerActivation,
  93. workerManagerAgainQuit,
  94. workerManagerQuit,
  95. workerManagerStop,
  96. workerManagerUpdate,
  97. workerManagerExamineWait,
  98. workerManagerExamine
  99. } from '@/api/masterManagement'
  100. import operation_mixin from '@/components/template/operation_mixin.js'
  101. import ImageUpload from '@/components/file-upload'
  102. import editTable from '@/components/template/editTable.js'
  103. export default {
  104. components: { TemplatePage, ImageUpload },
  105. mixins: [import_mixin, operation_mixin, editTable],
  106. data() {
  107. return {
  108. // 事件组合
  109. optionsEvensGroup: [],
  110. // 表格属性
  111. tableAttributes: {
  112. // 启用勾选列
  113. selectColumn: false,
  114. 'row-class-name': this.tableRowClassName
  115. },
  116. // 表格事件
  117. tableEvents: {
  118. 'selection-change': this.selectionChange
  119. },
  120. // 勾选选中行
  121. recordSelected: [],
  122. /** 表单变量 */
  123. formData: {
  124. type: '工程师',
  125. nickName: '',
  126. mobile: '',
  127. idCard: '',
  128. bankAccount: '',
  129. workerNumber: '',
  130. isEs: false,
  131. examineRemark: '',
  132. examineStatus: '',
  133. idCardImg: [],
  134. user: {},
  135. workerImgsCp: [{ type: '', number: '', startTime: '', endTime: '', reexamineTime: '', filesList: [] }],
  136. workerPolicies: []
  137. },
  138. examineStatus: '',
  139. openType: 0
  140. }
  141. },
  142. computed: {
  143. // 更多参数
  144. moreParameters() {
  145. return []
  146. },
  147. formItems() {
  148. return [
  149. {
  150. md: 6,
  151. isShow: true,
  152. name: 'el-select',
  153. options: [
  154. { label: '入住申请待审核', value: 'WAIT' },
  155. { label: '待师傅购买', value: 'WAIT_WORKER' },
  156. { label: '保险待审核', value: 'POLICY_WAIT' },
  157. { label: '状态正常', value: 'OK' },
  158. { label: '已驳回', value: 'FAIL' },
  159. { label: '证件快过期', value: 'EXPIRED' },
  160. { label: '证件已过期', value: 'OVERDUE' },
  161. { label: '已暂停', value: 'STOP' },
  162. { label: '已经离职', value: 'QUIT' }
  163. ],
  164. attributes: { placeholder: '请输入', disabled: true },
  165. formItemAttributes: {
  166. label: '状态',
  167. prop: 'examineStatus_t',
  168. rules: []
  169. }
  170. },
  171. {
  172. md: 6,
  173. isShow: true,
  174. name: 'el-select',
  175. options: [
  176. { label: '普通用户', value: 'GENERAL' },
  177. { label: '分销员', value: 'SERVICE' },
  178. { label: '师傅', value: 'WORKER' }
  179. ],
  180. attributes: { placeholder: '请输入', disabled: true },
  181. formItemAttributes: {
  182. label: '用户类型',
  183. prop: 'type',
  184. rules: []
  185. }
  186. },
  187. {
  188. md: 6,
  189. isShow: true,
  190. name: 'el-input',
  191. attributes: { placeholder: '请输入' },
  192. formItemAttributes: {
  193. label: '师傅名称',
  194. prop: 'nickName',
  195. rules: []
  196. }
  197. },
  198. {
  199. md: 6,
  200. isShow: true,
  201. name: 'el-input',
  202. attributes: { placeholder: '请输入' },
  203. formItemAttributes: {
  204. label: '联系电话',
  205. prop: 'mobile',
  206. rules: []
  207. }
  208. },
  209. {
  210. md: 12,
  211. isShow: true,
  212. name: 'el-input',
  213. attributes: { placeholder: '请输入', disabled: true },
  214. formItemAttributes: {
  215. label: '入驻网点',
  216. prop: 'websitName',
  217. rules: []
  218. }
  219. },
  220. {
  221. md: 6,
  222. isShow: true,
  223. name: 'el-input',
  224. attributes: { placeholder: '请输入', disabled: true },
  225. formItemAttributes: {
  226. label: '师傅编号',
  227. prop: 'workerNumber',
  228. rules: []
  229. }
  230. },
  231. {
  232. md: 6,
  233. isShow: true,
  234. name: 'el-input',
  235. attributes: { placeholder: '请输入' },
  236. formItemAttributes: {
  237. label: '银行卡',
  238. prop: 'bankAccount',
  239. rules: []
  240. }
  241. },
  242. {
  243. md: 24,
  244. isShow: true,
  245. name: 'el-input',
  246. attributes: {
  247. placeholder: '请输入',
  248. type: 'textarea'
  249. },
  250. formItemAttributes: {
  251. label: '备注',
  252. prop: 'examineRemark',
  253. rules: []
  254. }
  255. }
  256. ]
  257. },
  258. formItems2() {
  259. return [
  260. {
  261. name: 'slot-component',
  262. md: 24,
  263. formItemAttributes: {
  264. 'label-width': '0px',
  265. label: '',
  266. prop: 'items',
  267. rules: []
  268. },
  269. render: (h, { props }) => {
  270. return (
  271. <zj-table
  272. columns={[
  273. {
  274. columnAttributes: {
  275. label: '证件名称',
  276. prop: 'type'
  277. },
  278. render: (h, { row, column, index }) => {
  279. return (
  280. <div class="redbordererr">
  281. <el-form-item
  282. label=""
  283. label-width="0px"
  284. prop={`workerImgsCp.${index}.${column.columnAttributes.prop}`}
  285. >
  286. <el-select
  287. value={row[column.columnAttributes.prop]}
  288. onInput={val => {
  289. row[column.columnAttributes.prop] = val
  290. }}
  291. placeholder="请选择"
  292. disabled={true}
  293. >
  294. {[
  295. { value: 'HIGHT', label: '高空证' },
  296. { value: 'ID', label: '身份证' }
  297. ].map((item, index_) => (
  298. <el-option key={index_} label={item.label} value={item.value}></el-option>
  299. ))}
  300. </el-select>
  301. </el-form-item>
  302. </div>
  303. )
  304. }
  305. },
  306. {
  307. columnAttributes: {
  308. label: '证件号码',
  309. prop: 'number'
  310. },
  311. render: (h, { row, column, index }) => {
  312. return (
  313. <div class="redbordererr">
  314. <el-input
  315. value={row[column.columnAttributes.prop]}
  316. onInput={val => {
  317. row[column.columnAttributes.prop] = val
  318. }}
  319. placeholder="请输入内容"
  320. ></el-input>
  321. </div>
  322. )
  323. }
  324. },
  325. {
  326. columnAttributes: {
  327. label: '有效期开始日期',
  328. prop: 'startTime'
  329. },
  330. render: (h, { row, column, index }) => {
  331. return (
  332. <div class="redbordererr">
  333. <el-form-item
  334. label=""
  335. label-width="0px"
  336. prop={`workerImgsCp.${index}.${column.columnAttributes.prop}`}
  337. >
  338. <el-date-picker
  339. value={row[column.columnAttributes.prop]}
  340. onInput={val => {
  341. row[column.columnAttributes.prop] = val
  342. }}
  343. type="date"
  344. placeholder="选择日期"
  345. ></el-date-picker>
  346. </el-form-item>
  347. </div>
  348. )
  349. }
  350. },
  351. {
  352. columnAttributes: {
  353. label: '有效期结束日期',
  354. prop: 'endTime'
  355. },
  356. render: (h, { row, column, index }) => {
  357. return (
  358. <div class="redbordererr">
  359. <el-form-item
  360. label=""
  361. label-width="0px"
  362. prop={`workerImgsCp.${index}.${column.columnAttributes.prop}`}
  363. >
  364. <el-date-picker
  365. value={row[column.columnAttributes.prop]}
  366. onInput={val => {
  367. row[column.columnAttributes.prop] = val
  368. }}
  369. type="date"
  370. placeholder="选择日期"
  371. ></el-date-picker>
  372. </el-form-item>
  373. </div>
  374. )
  375. }
  376. },
  377. {
  378. columnAttributes: {
  379. label: '复审日期',
  380. prop: 'reexamineTime'
  381. },
  382. render: (h, { row, column, index }) => {
  383. if (index) {
  384. return (
  385. <div class="redbordererr">
  386. <el-form-item
  387. label=""
  388. label-width="0px"
  389. prop={`workerImgsCp.${index}.${column.columnAttributes.prop}`}
  390. >
  391. <el-date-picker
  392. value={row[column.columnAttributes.prop]}
  393. onInput={val => {
  394. row[column.columnAttributes.prop] = val
  395. }}
  396. type="date"
  397. placeholder="选择日期"
  398. ></el-date-picker>
  399. </el-form-item>
  400. </div>
  401. )
  402. } else {
  403. return null
  404. }
  405. }
  406. },
  407. {
  408. columnAttributes: {
  409. label: '正面',
  410. prop: 'positive',
  411. width: 130
  412. },
  413. render: (h, { row, column, index }) => {
  414. return (
  415. <div class="redbordererr">
  416. <ImageUpload fileList={row[column.columnAttributes.prop]} limit={1} isEdit={true} />
  417. </div>
  418. )
  419. }
  420. },
  421. {
  422. columnAttributes: {
  423. label: '反面',
  424. prop: 'negative',
  425. width: 130
  426. },
  427. render: (h, { row, column, index }) => {
  428. return (
  429. <div class="redbordererr">
  430. <ImageUpload fileList={row[column.columnAttributes.prop]} limit={1} isEdit={true} />
  431. </div>
  432. )
  433. }
  434. }
  435. ]}
  436. table-data={this.formData.workerImgsCp || []}
  437. />
  438. )
  439. }
  440. }
  441. ]
  442. },
  443. formItems3() {
  444. return [
  445. {
  446. name: 'slot-component',
  447. md: 24,
  448. formItemAttributes: {
  449. label: '',
  450. 'label-width': '0px',
  451. prop: 'workerPolicies',
  452. rules: []
  453. },
  454. render: (h, { props, onInput }) => {
  455. var { value } = props
  456. return this.convertTableJson(
  457. value,
  458. [
  459. {
  460. columnAttributes: {
  461. label: '保险公司名字',
  462. prop: 'company',
  463. 'min-width': '200px'
  464. },
  465. render: (h, { row, column, index }) => {
  466. return (
  467. <div class="redbordererr">
  468. <el-form-item
  469. label=""
  470. label-width="0px"
  471. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  472. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  473. >
  474. <el-input
  475. value={row[column.columnAttributes.prop]}
  476. onInput={val => {
  477. row[column.columnAttributes.prop] = val
  478. }}
  479. placeholder="请输入内容"
  480. disabled={row.type == 'IN'}
  481. ></el-input>
  482. </el-form-item>
  483. </div>
  484. )
  485. }
  486. },
  487. {
  488. columnAttributes: {
  489. label: '购买类型',
  490. prop: 'type',
  491. 'min-width': '200px'
  492. },
  493. render: (h, { row, column, index }) => {
  494. return (
  495. <div class="redbordererr">
  496. <el-form-item
  497. label=""
  498. label-width="0px"
  499. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  500. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  501. >
  502. <el-select
  503. value={row[column.columnAttributes.prop]}
  504. onInput={val => {
  505. row[column.columnAttributes.prop] = val
  506. }}
  507. placeholder="请输入内容"
  508. disabled={true}
  509. >
  510. {[
  511. { label: '线下购买', value: 'LINE' },
  512. { label: '在线购买', value: 'IN' }
  513. ].map((item, index_) => (
  514. <el-option key={index_} label={item.label} value={item.value}></el-option>
  515. ))}
  516. </el-select>
  517. </el-form-item>
  518. </div>
  519. )
  520. }
  521. },
  522. {
  523. columnAttributes: {
  524. label: '保险单名称',
  525. prop: 'policyName',
  526. 'min-width': '200px'
  527. },
  528. render: (h, { row, column, index }) => {
  529. return (
  530. <div class="redbordererr">
  531. <el-form-item
  532. label=""
  533. label-width="0px"
  534. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  535. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  536. >
  537. <el-input
  538. value={row[column.columnAttributes.prop]}
  539. onInput={val => {
  540. row[column.columnAttributes.prop] = val
  541. }}
  542. placeholder="请输入内容"
  543. disabled={row.type == 'IN'}
  544. ></el-input>
  545. </el-form-item>
  546. </div>
  547. )
  548. }
  549. },
  550. {
  551. columnAttributes: {
  552. label: '保单类型',
  553. prop: 'policyType',
  554. 'min-width': '200px'
  555. },
  556. render: (h, { row, column, index }) => {
  557. return (
  558. <div class="redbordererr">
  559. <el-form-item
  560. label=""
  561. label-width="0px"
  562. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  563. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  564. >
  565. <el-select
  566. disabled={row.type == 'IN'}
  567. value={row[column.columnAttributes.prop]}
  568. onInput={val => {
  569. row[column.columnAttributes.prop] = val
  570. }}
  571. placeholder="请输入内容"
  572. >
  573. {[
  574. { label: '意外险', value: 'AC' },
  575. { label: '雇主险', value: 'EM' },
  576. { label: '工伤险', value: 'IN' }
  577. ].map((item, index_) => (
  578. <el-option key={index_} label={item.label} value={item.value}></el-option>
  579. ))}
  580. </el-select>
  581. </el-form-item>
  582. </div>
  583. )
  584. }
  585. },
  586. {
  587. columnAttributes: {
  588. label: '保单状态',
  589. prop: 'status',
  590. 'min-width': '200px'
  591. },
  592. render: (h, { row, column, index }) => {
  593. return (
  594. <div class="redbordererr">
  595. <el-form-item
  596. label=""
  597. label-width="0px"
  598. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  599. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  600. >
  601. <el-select
  602. disabled={true}
  603. value={row[column.columnAttributes.prop]}
  604. onInput={val => {
  605. row[column.columnAttributes.prop] = val
  606. }}
  607. placeholder="请输入内容"
  608. >
  609. {[
  610. { label: '保障中', value: 'ON' },
  611. { label: '失效', value: 'OFF' },
  612. { label: '待生效', value: 'WAIT_ON' }
  613. ].map((item, index_) => (
  614. <el-option key={index_} label={item.label} value={item.value}></el-option>
  615. ))}
  616. </el-select>
  617. </el-form-item>
  618. </div>
  619. )
  620. }
  621. },
  622. {
  623. columnAttributes: {
  624. label: '保险单号',
  625. prop: 'policyOrder',
  626. 'min-width': '200px'
  627. },
  628. render: (h, { row, column, index }) => {
  629. return (
  630. <div class="redbordererr">
  631. <el-form-item
  632. label=""
  633. label-width="0px"
  634. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  635. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  636. >
  637. <el-input
  638. disabled={row.type == 'IN'}
  639. value={row[column.columnAttributes.prop]}
  640. onInput={val => {
  641. row[column.columnAttributes.prop] = val
  642. }}
  643. placeholder="请输入内容"
  644. ></el-input>
  645. </el-form-item>
  646. </div>
  647. )
  648. }
  649. },
  650. {
  651. columnAttributes: {
  652. label: '有效期开始日期',
  653. prop: 'startTime',
  654. 'min-width': '200px'
  655. },
  656. render: (h, { row, column, index }) => {
  657. return (
  658. <div class="redbordererr">
  659. <el-form-item
  660. label=""
  661. label-width="0px"
  662. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  663. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  664. >
  665. <el-date-picker
  666. value={row[column.columnAttributes.prop]}
  667. onInput={val => {
  668. row[column.columnAttributes.prop] = val
  669. }}
  670. type="date"
  671. placeholder="选择日期"
  672. ></el-date-picker>
  673. </el-form-item>
  674. </div>
  675. )
  676. }
  677. },
  678. {
  679. columnAttributes: {
  680. label: '有效期结束日期',
  681. prop: 'endTime',
  682. 'min-width': '200px'
  683. },
  684. render: (h, { row, column, index }) => {
  685. return (
  686. <div class="redbordererr">
  687. <el-form-item
  688. label=""
  689. label-width="0px"
  690. prop={`workerPolicies.${index}.${column.columnAttributes.prop}`}
  691. rules={[{ required: true, message: '请填写', trigger: 'blur' }]}
  692. >
  693. <el-date-picker
  694. value={row[column.columnAttributes.prop]}
  695. onInput={val => {
  696. row[column.columnAttributes.prop] = val
  697. }}
  698. type="date"
  699. placeholder="选择日期"
  700. ></el-date-picker>
  701. </el-form-item>
  702. </div>
  703. )
  704. }
  705. },
  706. {
  707. columnAttributes: {
  708. label: '附件',
  709. prop: 'policyUrl',
  710. 'min-width': '440px'
  711. },
  712. render: (h, { row, column, index }) => {
  713. return (
  714. <div class="redbordererr">
  715. <ImageUpload fileList={row[column.columnAttributes.prop]} limit={100} isEdit={true} />
  716. </div>
  717. )
  718. }
  719. }
  720. ],
  721. {
  722. isEdit: true,
  723. isAdd: this.openType !== 0,
  724. isDel: true,
  725. isUpdate: false,
  726. isConfirm: false
  727. },
  728. {
  729. add: () => {
  730. this.formData.workerPolicies.push({
  731. company: '',
  732. endTime: '',
  733. exTime: '',
  734. policyId: '',
  735. policyName: '',
  736. policyOrder: '',
  737. policyPrice: '',
  738. policyType: '',
  739. startTime: '',
  740. status: '',
  741. type: 'LINE',
  742. websitId: '',
  743. websitName: '',
  744. websitUserId: '',
  745. workerId: '',
  746. workerName: ''
  747. })
  748. this.isEditTableIndex = this.formData.workerPolicies.length - 1
  749. },
  750. delete: ({ row, column, index }, cb) => {
  751. if (this.isEditTableIndex == index) {
  752. this.isEditTableIndex = -1
  753. } else if (this.isEditTableIndex > index) {
  754. this.isEditTableIndex--
  755. }
  756. cb && cb()
  757. }
  758. }
  759. )
  760. }
  761. }
  762. ]
  763. }
  764. },
  765. methods: {
  766. // 切换状态
  767. changeType(val) {
  768. this.$refs.pageRef.refreshList()
  769. },
  770. exportList: memberPageExport,
  771. // 列表请求函数
  772. getList(p) {
  773. try {
  774. var pam = JSON.parse(JSON.stringify(p))
  775. if (this.examineStatus) {
  776. pam.params.push({ param: 'b.examine_status', compare: '=', value: this.examineStatus })
  777. }
  778. return memberListPageV2(pam)
  779. } catch (error) {
  780. console.log(error)
  781. }
  782. },
  783. // 列表导出函数
  784. exportList: memberPageExport,
  785. // 表格列解析渲染数据更改
  786. columnParsing(item, defaultData) {
  787. if (item.jname === 'idCardImg') {
  788. defaultData.render = (h, { row, index, column }) => {
  789. return (
  790. <div style="padding:0 6px;cursor: pointer;">
  791. {row.idCardImg
  792. ? row.idCardImg
  793. .split(',')
  794. .map(url => (
  795. <el-image
  796. src={this.$showImgUrl(url)}
  797. preview-src-list={[this.$showImgUrl(url)]}
  798. fit="fit"
  799. style="width:80px;height:80px;"
  800. />
  801. ))
  802. : null}
  803. </div>
  804. )
  805. }
  806. }
  807. return defaultData
  808. },
  809. // 监听勾选变化
  810. selectionChange(data) {
  811. this.recordSelected = data
  812. },
  813. openWindows(row, cb) {
  814. workerManagerDetail({ id: row.id }).then(res => {
  815. this.formData = {
  816. ...res.data,
  817. user: {
  818. ...res.data.user,
  819. examineStatus_t: res.data.examineStatus
  820. },
  821. workerImgsCp: [
  822. {
  823. type: 'ID',
  824. number: res.data?.user?.idCard || '',
  825. startTime: res.data?.user?.idCardStartTime || '',
  826. endTime: res.data?.user?.idCardEndTime || '',
  827. reexamineTime: '',
  828. positive:
  829. (res.data?.workerImgs || [])
  830. .filter(item => item.type == 'ID')
  831. .map(item => ({
  832. name: item.imgName,
  833. url: item.imgUrl
  834. }))?.[0] || [],
  835. negative:
  836. (res.data?.workerImgs || [])
  837. .filter(item => item.type == 'ID')
  838. .map(item => ({
  839. name: item.imgName,
  840. url: item.imgUrl
  841. }))?.[1] || []
  842. },
  843. {
  844. type: 'HIGHT',
  845. number: res.data?.user?.number || '',
  846. startTime: res.data?.user?.startTime || '',
  847. endTime: res.data?.user?.endTime || '',
  848. reexamineTime: res.data?.user?.hightExamineTime || '',
  849. positive:
  850. (res.data?.workerImgs || [])
  851. .filter(item => item.type == 'HIGHT')
  852. .map(item => ({
  853. name: item.imgName,
  854. url: item.imgUrl
  855. }))?.[0] || [],
  856. negative:
  857. (res.data?.workerImgs || [])
  858. .filter(item => item.type == 'HIGHT')
  859. .map(item => ({
  860. name: item.imgName,
  861. url: item.imgUrl
  862. }))?.[1] || []
  863. }
  864. ]
  865. }
  866. cb?.()
  867. })
  868. },
  869. // 表格操作列
  870. operation() {
  871. return this.operationBtn({
  872. // 详情
  873. detail: {
  874. btnType: 'text',
  875. click: ({ row, index, column }) => {
  876. this.$refs.tabPage.addTab({
  877. activeKey: 'detail',
  878. key: 'detail',
  879. label: '详情',
  880. triggerEvent: () => {
  881. this.guanbi()
  882. this.openType = 0
  883. this.$nextTick(() => {
  884. this.openWindows(row)
  885. })
  886. },
  887. closeEvent: () => {}
  888. })
  889. }
  890. },
  891. // 编辑
  892. edit: {
  893. btnType: 'text',
  894. conditions: ({ row, index, column }) => {
  895. return ['OK', 'FAIL', 'STOP', 'QUIT'].includes(row.examineStatus)
  896. },
  897. click: ({ row, index, column }) => {
  898. this.$refs.tabPage.addTab({
  899. activeKey: 'edit',
  900. key: 'edit',
  901. label: '编辑',
  902. triggerEvent: () => {
  903. this.guanbi()
  904. this.openType = 1
  905. this.$nextTick(() => {
  906. this.openWindows(row)
  907. })
  908. },
  909. closeEvent: () => {}
  910. })
  911. }
  912. },
  913. // 入驻申请审核
  914. entryAudit: {
  915. btnType: 'text',
  916. conditions: ({ row, index, column }) => {
  917. return ['WAIT'].includes(row.examineStatus)
  918. },
  919. click: ({ row, index, column }) => {
  920. this.$refs.tabPage.addTab({
  921. activeKey: 'entryAudit',
  922. key: 'entryAudit',
  923. label: '入驻申请审核',
  924. triggerEvent: () => {
  925. this.guanbi()
  926. this.openType = 2
  927. this.$nextTick(() => {
  928. this.openWindows(row)
  929. })
  930. },
  931. closeEvent: () => {}
  932. })
  933. }
  934. },
  935. // 保险审核
  936. insuranceAudit: {
  937. btnType: 'text',
  938. conditions: ({ row, index, column }) => {
  939. return ['POLICY_WAIT'].includes(row.examineStatus)
  940. },
  941. click: ({ row, index, column }) => {
  942. this.$refs.tabPage.addTab({
  943. activeKey: 'insuranceAudit',
  944. key: 'insuranceAudit',
  945. label: '保险审核',
  946. triggerEvent: () => {
  947. this.guanbi()
  948. this.openType = 3
  949. this.$nextTick(() => {
  950. this.openWindows(row)
  951. })
  952. },
  953. closeEvent: () => {}
  954. })
  955. }
  956. },
  957. // 激活
  958. activate: {
  959. btnType: 'text',
  960. conditions: ({ row, index, column }) => {
  961. return ['STOP'].includes(row.examineStatus)
  962. },
  963. click: ({ row, index, column }) => {
  964. workerManagerActivation({ id: row.id }).then(res => {
  965. this.$message({ type: 'success', message: '激活成功!' })
  966. this.$refs.pageRef.refreshList()
  967. })
  968. }
  969. },
  970. // 重新入职
  971. reEntry: {
  972. btnType: 'text',
  973. conditions: ({ row, index, column }) => {
  974. return ['QUIT'].includes(row.examineStatus)
  975. },
  976. click: ({ row, index, column }) => {
  977. workerManagerAgainQuit.then(res => {
  978. this.$message({ type: 'success', message: '入职成功!' })
  979. this.$refs.pageRef.refreshList()
  980. })
  981. }
  982. },
  983. // 暂停
  984. pause: {
  985. btnType: 'text',
  986. conditions: ({ row, index, column }) => {
  987. return ['OK'].includes(row.examineStatus)
  988. },
  989. click: ({ row, index, column }) => {
  990. workerManagerStop.then(res => {
  991. this.$message({ type: 'success', message: '暂停成功!' })
  992. this.$refs.pageRef.refreshList()
  993. })
  994. }
  995. },
  996. // 离职
  997. dimission: {
  998. btnType: 'text',
  999. conditions: ({ row, index, column }) => {
  1000. return ['OK'].includes(row.examineStatus)
  1001. },
  1002. click: ({ row, index, column }) => {
  1003. workerManagerQuit.then(res => {
  1004. this.$message({ type: 'success', message: '离职成功!' })
  1005. this.$refs.pageRef.refreshList()
  1006. })
  1007. }
  1008. },
  1009. // 师傅组别
  1010. masterGroup: {
  1011. btnType: 'text',
  1012. conditions: ({ row, index, column }) => {
  1013. return true
  1014. },
  1015. click: ({ row, index, column }) => {}
  1016. }
  1017. })
  1018. },
  1019. tableRowClassName({ row, rowIndex }) {
  1020. if (row.examineStatus === '待审核') {
  1021. return 'redbackground'
  1022. } else {
  1023. return ''
  1024. }
  1025. },
  1026. guanbi() {
  1027. this.$refs?.formRef?.$refs?.inlineForm?.clearValidate()
  1028. this.$data.formData = this.$options.data().formData
  1029. },
  1030. getPam() {
  1031. return {
  1032. ...this.formData,
  1033. user: {
  1034. ...this.formData.user,
  1035. idCard: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.number,
  1036. idCardStartTime: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.startTime,
  1037. idCardEndTime: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.endTime,
  1038. number: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.number,
  1039. startTime: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.startTime,
  1040. endTime: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.endTime,
  1041. hightExamineTime: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.reexamineTime
  1042. },
  1043. workerImgs: [
  1044. {
  1045. type: 'ID',
  1046. imgName: '身份证正面',
  1047. imgUrl: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.positive?.[0]?.url || ''
  1048. },
  1049. {
  1050. type: 'ID',
  1051. imgName: '身份证反面',
  1052. imgUrl: this.formData?.workerImgsCp?.find(item => item.type == 'ID')?.negative?.[0]?.url || ''
  1053. },
  1054. {
  1055. type: 'HIGHT',
  1056. imgName: '高空证正面',
  1057. imgUrl: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.positive?.[0]?.url || ''
  1058. },
  1059. {
  1060. type: 'HIGHT',
  1061. imgName: '高空证反面',
  1062. imgUrl: this.formData?.workerImgsCp?.find(item => item.type == 'HIGHT')?.negative?.[0]?.url || ''
  1063. }
  1064. ]
  1065. }
  1066. },
  1067. submit() {
  1068. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  1069. if (valid) {
  1070. workerManagerUpdate(this.getPam()).then(res => {
  1071. this.$message({ type: 'success', message: `保存成功!` })
  1072. this.guanbi()
  1073. this.$refs.pageRef.refreshList()
  1074. })
  1075. }
  1076. })
  1077. },
  1078. examineWait() {
  1079. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  1080. if (valid) {
  1081. workerManagerExamineWait(this.getPam()).then(res => {
  1082. this.$message({ type: 'success', message: `保存成功!` })
  1083. this.guanbi()
  1084. this.$refs.pageRef.refreshList()
  1085. })
  1086. }
  1087. })
  1088. },
  1089. workerManagerExamine() {
  1090. this.$refs.formRef.validate((valid, invalidFields, errLabels) => {
  1091. if (valid) {
  1092. workerManagerExamine(this.getPam()).then(res => {
  1093. this.$message({ type: 'success', message: `保存成功!` })
  1094. this.guanbi()
  1095. this.$refs.pageRef.refreshList()
  1096. })
  1097. }
  1098. })
  1099. }
  1100. }
  1101. }
  1102. </script>
  1103. <style lang="scss" scoped>
  1104. .tab {
  1105. padding: 20px 20px 0 20px;
  1106. }
  1107. </style>
  1108. <style lang="scss">
  1109. .redbackground {
  1110. background: rgb(248, 185, 185) !important;
  1111. }
  1112. .lcsebackground {
  1113. background: rgb(212, 245, 212) !important;
  1114. }
  1115. .dialog-footer {
  1116. text-align: right !important;
  1117. }
  1118. </style>