index.vue 50 KB

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