index.vue 43 KB

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