insuranceFirst-issued.vue 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699
  1. <template>
  2. <div>
  3. <el-breadcrumb separator=">">
  4. <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
  5. <el-breadcrumb-item>
  6. <a href="#/business/insuranceFirst/listPicc">系统管理</a>
  7. </el-breadcrumb-item>
  8. <el-breadcrumb-item>
  9. <a href="#">制单</a>
  10. </el-breadcrumb-item>
  11. </el-breadcrumb>
  12. <el-divider></el-divider>
  13. <!--
  14. 要resetFields起作用,必须配置:model和prop
  15. -->
  16. <el-container>
  17. <el-aside width="70%">
  18. <el-tabs type="card" activeName="0" @tab-click="tabsClick">
  19. <el-tab-pane label="投保信息" name="0">
  20. <div>
  21. <div class="application-panel" v-loading="loading">
  22. <!-- 投保信息 -->
  23. <table border="1" style="border-collapse:collapse;">
  24. <tr>
  25. <td colspan="2">投保人名称</td>
  26. <td colspan="3">{{insureData.insuredName}}</td>
  27. <td>联系电话</td>
  28. <td>{{insureData.insuredTel}}</td>
  29. </tr>
  30. <tr>
  31. <td rowspan="5">被保险人信息</td>
  32. <td>企业名称</td>
  33. <td colspan="3">{{insureData.companyName}}</td>
  34. <td>营业性质</td>
  35. <td>{{insureData.businessNature}}</td>
  36. </tr>
  37. <tr>
  38. <td>证件类型</td>
  39. <td colspan="3">{{insureData.insuredName}}</td>
  40. <td>证件号码</td>
  41. <td>{{insureData.usccCode}}</td>
  42. </tr>
  43. <tr>
  44. <td>营业范围</td>
  45. <td colspan="3">{{insureData.businessScope}}</td>
  46. <td>行业类型</td>
  47. <td>{{insureData.industryType}}</td>
  48. </tr>
  49. <tr>
  50. <td>雇员人数</td>
  51. <td>{{insureData.employeesNumber}}</td>
  52. <td>投保人数</td>
  53. <td>{{insureData.insuredNumber}}</td>
  54. <td>联系电话</td>
  55. <td>{{insureData.tel}}</td>
  56. </tr>
  57. <tr>
  58. <td>联系地址</td>
  59. <td colspan="3">{{insureData.companyAddress}}</td>
  60. <td>邮编</td>
  61. <td>{{insureData.postal}}</td>
  62. </tr>
  63. <tr>
  64. <td colspan="2">近三年损失情况(时间、原因、损失金额)</td>
  65. <td colspan="5">{{insureData.lossInRecentYears}}</td>
  66. </tr>
  67. </table>
  68. </div>
  69. <div class="user-panel" v-loading="loading">
  70. <!-- 被保险人信息 -->
  71. <el-table
  72. :data="memberData"
  73. style="width: 100%"
  74. v-loading="loading"
  75. stripe
  76. @sort-change="sortChange"
  77. @selection-change="handleSelectionChange"
  78. >
  79. <el-table-column prop="companyMember.name" label="姓名" width="100"></el-table-column>
  80. <el-table-column prop="cardType" label="证件类型" width="100"></el-table-column>
  81. <el-table-column prop="cardNo" label="证件号码" width="100"></el-table-column>
  82. <el-table-column prop="status" label="审核状态" width="100"></el-table-column>
  83. <el-table-column prop="sex" label="性别" width="100"></el-table-column>
  84. <el-table-column prop="age" label="年龄" width="100"></el-table-column>
  85. <el-table-column prop="jobName" label="岗位/工种" width="100"></el-table-column>
  86. <el-table-column prop="healthStatus" label="健康状况" width="100"></el-table-column>
  87. <el-table-column prop="cardFiles" label="身份证正面照" width="120"></el-table-column>
  88. </el-table>
  89. <el-pagination
  90. :current-page.sync="pageIndex"
  91. :total="totalElements"
  92. :page-sizes="pageSizeList"
  93. @current-change="changePage"
  94. @size-change="pageSizeChange"
  95. layout="total, sizes, prev, pager, next, jumper"
  96. ></el-pagination>
  97. </div>
  98. <div class="accept-panel" v-loading="loading">
  99. <!-- 承保信息 -->
  100. <table border="1" style="border-collapse:collapse;">
  101. <tr>
  102. <td colspan="2">险种</td>
  103. <td colspan="2">限额名称</td>
  104. <td colspan="2">责任限额/免赔额</td>
  105. </tr>
  106. <tr>
  107. <td rowspan="6" colspan="2">雇主责任险</td>
  108. <td colspan="2">限额名称</td>
  109. <td colspan="2">责任限额/免赔额</td>
  110. </tr>
  111. <tr>
  112. <td colspan="2">伤亡责任限额</td>
  113. <td colspan="2">60万/人</td>
  114. </tr>
  115. <tr>
  116. <td colspan="2">医疗费用限额</td>
  117. <td colspan="2">5万/人</td>
  118. </tr>
  119. <tr>
  120. <td colspan="2">每次事故责任限额</td>
  121. <td colspan="2">240万/次(按4人计算)</td>
  122. </tr>
  123. <tr>
  124. <td colspan="2">累计责任限额</td>
  125. <td colspan="2">1800万/年(按30人计算)</td>
  126. </tr>
  127. <tr>
  128. <td colspan="2">累计法律诉讼费用限额</td>
  129. <td colspan="2">2万元/年(赠送)</td>
  130. </tr>
  131. <tr>
  132. <td colspan="2">行业/职业类型</td>
  133. <td>收费标准(年)</td>
  134. <td>收费标准(月)</td>
  135. <td>投保人数</td>
  136. <td>保险费</td>
  137. </tr>
  138. <tr>
  139. <td colspan="2">
  140. 一类职业:企业的行管人员
  141. (管理人员,财务人员,以及公司行政辅助人员)
  142. </td>
  143. <td>408元/年/人</td>
  144. <td>34元/月/人</td>
  145. <td>10</td>
  146. <td>4080</td>
  147. </tr>
  148. <tr>
  149. <td colspan="2">
  150. 二类职业:企业的外勤人员
  151. (销售人员,项目施工人员,项目服务人员)
  152. </td>
  153. <td>564/年/人</td>
  154. <td>47/月/人</td>
  155. <td>10</td>
  156. <td>5640</td>
  157. </tr>
  158. <tr>
  159. <td colspan="2">
  160. 三类职业:企业的生产人员
  161. (企业司机、流水线工人等)
  162. </td>
  163. <td>804/年/人</td>
  164. <td>67/月/人</td>
  165. <td>10</td>
  166. <td>8040</td>
  167. </tr>
  168. <tr>
  169. <td colspan="2">保险费合计(人民币)</td>
  170. <td colspan="2">(大写):壹万柒仟柒佰陆拾圆</td>
  171. <td colspan="2">(小写):¥ 17760</td>
  172. </tr>
  173. <tr>
  174. <td colspan="2">保险期间</td>
  175. <td colspan="4">自 2020 年 2 月 1 日 零时起 至 2021 年 1 月 31 日 二十四时止。</td>
  176. </tr>
  177. </table>
  178. </div>
  179. <div class="application-panel" v-loading="loading">
  180. <!-- 附件信息 -->
  181. <!-- <el-table
  182. :data="filesData"
  183. style="width: 100%"
  184. v-loading="loading"
  185. stripe
  186. @sort-change="sortChange"
  187. @selection-change="handleSelectionChange"
  188. >
  189. <el-table-column prop="definitionName" label="序号" width="150"></el-table-column>
  190. <el-table-column prop="insuredNumber" label="附件类型" width="100"></el-table-column>
  191. <el-table-column prop="insuredNumber" label="附件名称" width="100"></el-table-column>
  192. <el-table-column prop="insuredNumber" label="操作" width="100"></el-table-column>
  193. </el-table>-->
  194. </div>
  195. <div class="application-panel" v-loading="loading">
  196. <!-- 推广信息 -->
  197. <table border="1" style="border-collapse:collapse;">
  198. <tr>
  199. <td>人员类型</td>
  200. <td>姓名</td>
  201. <td>联系方式</td>
  202. <td>注册账号</td>
  203. </tr>
  204. <tr>
  205. <td>社会推广员</td>
  206. <td>赵磊</td>
  207. <td>18600001111</td>
  208. <td>zhaolei001</td>
  209. </tr>
  210. <tr>
  211. <td>保险代理人</td>
  212. <td></td>
  213. <td></td>
  214. <td></td>
  215. </tr>
  216. </table>
  217. </div>
  218. </div>
  219. </el-tab-pane>
  220. <el-tab-pane label="流程历史记录" name="20">
  221. <el-table :data="recordData" style="width: 100%" v-loading="loading" stripe>
  222. <el-table-column label="序号" type="index" width="100" align="center">
  223. <template slot-scope="scope">
  224. <span>{{(pageIndexRecord - 1) * pageSizeRecord + scope.$index + 1}}</span>
  225. </template>
  226. </el-table-column>
  227. <el-table-column prop="processStatus" label="审核状态" width="100"></el-table-column>
  228. <el-table-column prop="opinion" label="意见" width="250"></el-table-column>
  229. <el-table-column prop="status" label="审核步骤" width="100"></el-table-column>
  230. <el-table-column prop="createTime" label="操作时间" width="150"></el-table-column>
  231. </el-table>
  232. <el-pagination
  233. :current-page.sync="pageIndexRecord"
  234. :total="totalElementsRecord"
  235. :page-sizes="pageSizeList"
  236. @current-change="changePageRecord"
  237. @size-change="pageSizeChangeRecord"
  238. layout="total, sizes, prev, pager, next, jumper"
  239. ></el-pagination>
  240. </el-tab-pane>
  241. <el-tab-pane label="流程图" name="30"></el-tab-pane>
  242. </el-tabs>
  243. </el-aside>
  244. <el-container>
  245. <el-main>
  246. <el-form ref="form" :model="formModel" :rules="ruleValidate" :label-width="'100px'">
  247. <table>
  248. <tr>
  249. <td>当前步骤</td>
  250. <td>{{insureData.statusN}}</td>
  251. </tr>
  252. <tr>
  253. <td colspan="2">
  254. <el-form-item label="应收保费">{{insureData.insuranceFee}}</el-form-item>
  255. </td>
  256. </tr>
  257. <tr>
  258. <td colspan="2">
  259. <el-form-item label="投保人名称">{{insureData.insuredName}}</el-form-item>
  260. </td>
  261. </tr>
  262. <tr>
  263. <td colspan="2">
  264. <el-form-item label="出账银行">{{insureData.insurancePolicy.issuingBank}}</el-form-item>
  265. </td>
  266. </tr>
  267. <tr>
  268. <td colspan="2">
  269. <el-form-item label="入账银行">{{insureData.insurancePolicy.accountBank}}</el-form-item>
  270. </td>
  271. </tr>
  272. <tr>
  273. <td colspan="2">
  274. <el-form-item label="转账单号">{{insureData.insurancePolicy.singlNumber}}</el-form-item>
  275. </td>
  276. </tr>
  277. <!-- <tr>
  278. <td colspan="2">
  279. <el-form-item label="推广员账号" prop="issuingBank">
  280. <el-input placeholder="请输入推广员账号" v-model="formModel.issuingBank"></el-input>
  281. </el-form-item>
  282. </td>
  283. </tr>-->
  284. <!-- <tr>
  285. <td colspan="2">
  286. <el-form-item label="保险代理人">
  287. {{insureData.insurancePolicy.agentId}}
  288. </el-form-item>
  289. </td>
  290. </tr>-->
  291. <tr>
  292. <td colspan="2">
  293. <el-upload
  294. class="upload-demo"
  295. :action="uploadUrl()"
  296. :on-preview="handlePreview"
  297. :on-remove="handleRemove"
  298. :before-remove="beforeRemove"
  299. :multiple="false"
  300. :limit="1"
  301. :on-exceed="handleExceed"
  302. :file-list="fileList"
  303. :before-upload="beforeUpload"
  304. >
  305. <el-button size="small" type="primary">点击上传</el-button>
  306. <div slot="tip" class="el-upload__tip">只能上传图片文件</div>
  307. </el-upload>
  308. </td>
  309. </tr>
  310. <tr>
  311. <td>
  312. <el-button
  313. size="mini"
  314. type="success"
  315. disabled="disabled"
  316. @click="downloadFiles()"
  317. >打包下载申请资料</el-button>
  318. </td>
  319. <td>
  320. <el-button size="mini" type="primary" @click="saveApproval()">提交</el-button>
  321. </td>
  322. </tr>
  323. </table>
  324. </el-form>
  325. </el-main>
  326. </el-container>
  327. </el-container>
  328. </div>
  329. </template>
  330. <script>
  331. import Constant from "@/constant";
  332. import insuranceApplicationApi from "@/api/business/insuranceApplication";
  333. import approvalApi from "@/api/business/approval";
  334. import { getToken } from "@/utils/auth"; // get token from cookie
  335. import NProgress from "nprogress"; // progress bar
  336. import "nprogress/nprogress.css"; // progress bar style
  337. export default {
  338. data() {
  339. var self = this;
  340. var token = getToken;
  341. return {
  342. queryModel: {
  343. id: ""
  344. },
  345. ruleValidate: {},
  346. loading: false,
  347. memberData: [],
  348. pageIndex: 1,
  349. pageSize: 10,
  350. totalPages: 0,
  351. totalElements: 0,
  352. field: "",
  353. direction: "",
  354. pageSizeList: [10, 20, 30],
  355. multipleSelection: [],
  356. showModal: false,
  357. modalTitle: "",
  358. businessKey: "",
  359. id: "",
  360. definitionId: "",
  361. policyId: "",
  362. insureData: "",
  363. acceptData: "",
  364. formModel: {
  365. processStatus: "",
  366. opinion: "",
  367. accountBank: "",
  368. issuingBank: "",
  369. singlNumber: ""
  370. },
  371. recordData: [],
  372. pageIndexRecord: 1,
  373. pageSizeRecord: 10,
  374. totalPagesRecord: 0,
  375. totalElementsRecord: 0,
  376. filesData: [],
  377. fileList: [],
  378. myHeaders: { Authorization: token }
  379. };
  380. },
  381. methods: {
  382. changePage(pageIndex) {
  383. var self = this;
  384. self.loading = true;
  385. self.pageIndex = pageIndex;
  386. var formData = new FormData();
  387. formData.append("pageIndex", self.pageIndex);
  388. formData.append("pageSize", self.pageSize);
  389. formData.append("applicationId", self.id);
  390. formData.append("policyId", self.policyId);
  391. if (this.field != null) {
  392. formData.append("field", this.field);
  393. }
  394. if (this.direction != null) {
  395. formData.append("direction", this.direction);
  396. }
  397. approvalApi
  398. .pageList(formData)
  399. .then(function(response) {
  400. self.loading = false;
  401. var jsonData = response.data.data;
  402. self.memberData = jsonData.data;
  403. self.totalPages = jsonData.totalPages;
  404. self.totalElements = jsonData.recordsTotal;
  405. })
  406. .catch(error => {
  407. self.loading = false;
  408. // self.$message.error(error + "");
  409. });
  410. },
  411. pageSizeChange(pageSize) {
  412. this.pageSize = pageSize;
  413. },
  414. sortChange(data) {
  415. this.field = data.column.field;
  416. this.direction = data.order;
  417. this.changePage(this.pageIndex);
  418. },
  419. handleSelectionChange(val) {
  420. this.multipleSelection = val;
  421. },
  422. insureDetail() {
  423. var self = this;
  424. (function() {
  425. if (self.id.length == 0) {
  426. self.$message.error("没有传递ID");
  427. } else {
  428. var formData = new FormData();
  429. formData.append("id", self.id);
  430. formData.append("no", "0");
  431. return insuranceApplicationApi.insureDetail(formData);
  432. }
  433. })()
  434. .then(response => {
  435. var jsonData = response.data;
  436. self.loading = false;
  437. if (jsonData.result) {
  438. self.insureData = jsonData.data;
  439. this.definitionId = self.insureData.definitionId;
  440. this.policyId = self.insureData.insurancePolicy.id;
  441. this.acceptDetail();
  442. this.changePage(1);
  443. } else {
  444. self.$message.error(jsonData.message + "");
  445. }
  446. })
  447. .catch(error => {
  448. self.$message.error(error + "");
  449. });
  450. },
  451. acceptDetail(definitionId) {
  452. var self = this;
  453. var formData = new FormData();
  454. formData.append("definitionId", self.definitionId);
  455. (function() {
  456. if (self.definitionId.length == 0) {
  457. self.$message.error("没有险种");
  458. } else {
  459. return approvalApi.acceptDetail(formData);
  460. }
  461. })()
  462. .then(response => {
  463. var jsonData = response.data;
  464. self.loading = false;
  465. if (jsonData.result) {
  466. self.acceptData = jsonData.data;
  467. } else {
  468. self.$message.error(jsonData.message + "");
  469. }
  470. })
  471. .catch(error => {
  472. self.$message.error(error + "");
  473. });
  474. },
  475. saveApproval() {
  476. var self = this;
  477. this.$refs["form"].validate(valid => {
  478. if (valid) {
  479. var self = this;
  480. var formModel = this.formModel;
  481. (function() {
  482. var formData = new FormData();
  483. formData.append("applicationId", self.id);
  484. formData.append("policyId", self.policyId);
  485. formData.append("processStatus", "正常");
  486. formData.append("opinion", self.formModel.opinion);
  487. return approvalApi.issued(formData);
  488. })().then(function(response) {
  489. var jsonData = response.data;
  490. if (jsonData.result) {
  491. self.$message({
  492. message: "保存成功!",
  493. type: "success"
  494. });
  495. self.$router.push("/business/insuranceFirst/listPicc");
  496. } else {
  497. self.$message({
  498. message: jsonData.message + "",
  499. type: "warning"
  500. });
  501. self.$emit("close", false);
  502. }
  503. });
  504. } else {
  505. this.$emit("error");
  506. }
  507. });
  508. },
  509. downloadFiles() {
  510. },
  511. changePageRecord(pageIndexRecord) {
  512. var self = this;
  513. self.loading = true;
  514. self.pageIndexRecord = pageIndexRecord;
  515. var formData = new FormData();
  516. formData.append("pageIndex", self.pageIndexRecord);
  517. formData.append("pageSize", self.pageSizeRecord);
  518. formData.append("applicationId", self.id);
  519. formData.append("policyId", self.policyId);
  520. if (this.field != null) {
  521. formData.append("field", this.field);
  522. }
  523. if (this.direction != null) {
  524. formData.append("direction", this.direction);
  525. }
  526. approvalApi
  527. .policyRecordPageList(formData)
  528. .then(function(response) {
  529. self.loading = false;
  530. var jsonData = response.data.data;
  531. self.recordData = jsonData.data;
  532. self.totalPagesRecord = jsonData.totalPages;
  533. self.totalElementsRecord = jsonData.recordsTotal;
  534. })
  535. .catch(error => {
  536. self.loading = false;
  537. // self.$message.error(error + "");
  538. });
  539. },
  540. pageSizeChangeRecord(pageSize) {
  541. this.pageSize = pageSize;
  542. },
  543. sortChangeRecord(data) {
  544. this.field = data.column.field;
  545. this.direction = data.order;
  546. this.changePageRecord(this.pageIndex);
  547. },
  548. handleSelectionChangeRecord(val) {
  549. this.multipleSelection = val;
  550. },
  551. tabsClick(tab, event) {
  552. if (tab.name == "20") {
  553. this.changePageRecord(1);
  554. }
  555. },
  556. attachmentList() {
  557. var self = this;
  558. self.loading = true;
  559. var formData = new FormData();
  560. formData.append("applicationId", self.id);
  561. formData.append("policyId", self.policyId);
  562. formData.append("id", self.policyId);
  563. approvalApi
  564. .attachmentList(formData)
  565. .then(function(response) {
  566. self.loading = false;
  567. var jsonData = response.data.data;
  568. self.filesData = jsonData.data;
  569. })
  570. .catch(error => {
  571. self.loading = false;
  572. // self.$message.error(error + "");
  573. });
  574. },
  575. handleRemove(file, fileList) {
  576. console.log(file, fileList);
  577. },
  578. handlePreview(file) {
  579. console.log(file);
  580. },
  581. handleExceed(files, fileList) {
  582. this.$message.warning(
  583. `当前限制选择 1 个文件,本次选择了 ${
  584. files.length
  585. } 个文件,共选择了 ${files.length + fileList.length} 个文件`
  586. );
  587. },
  588. beforeRemove(file, fileList) {
  589. return this.$confirm(`确定移除 ${file.name}?`);
  590. },
  591. uploadUrl: function() {
  592. var url = Constant.serverUrl + "/base/attachment/upload";
  593. return url;
  594. },
  595. beforeUpload(file) {
  596. var self = this;
  597. self.loading = true;
  598. const IMG_ALLOWD = ['image/jpeg', 'image/jpg', 'image/gif', 'image/png'];
  599. //const isLt2M = file.size / 1024 / 1024 < 2;
  600. if (IMG_ALLOWD.indexOf(file.type) === -1) {
  601. this.$message.error("上传文件只能为图片格式!");
  602. self.loading = false;
  603. return false;
  604. } else {
  605. var formData = new FormData();
  606. formData.append("uploadFile", file);
  607. formData.append("fileName", "");
  608. formData.append("subFolder", "issued");
  609. approvalApi
  610. .uploadFiles(formData)
  611. .then(function(response) {
  612. self.loading = false;
  613. var jsonData = response.data.data;
  614. self.fileUrl = jsonData.data;
  615. })
  616. .catch(error => {
  617. self.loading = false;
  618. // self.$message.error(error + "");
  619. });
  620. }
  621. }
  622. },
  623. async mounted() {
  624. var self = this;
  625. self.loading = true;
  626. self.id = this.$route.query.id;
  627. this.insureDetail();
  628. //this.attachmentList();
  629. }
  630. };
  631. </script>
  632. <style lang="scss" scoped>
  633. .el-breadcrumb {
  634. margin: 10px;
  635. line-height: 20px;
  636. }
  637. .el-divider {
  638. margin: 5px 0;
  639. }
  640. .demo-form-inline {
  641. margin-left: 10px;
  642. text-align: left;
  643. }
  644. .button-group {
  645. margin-left: 10px;
  646. text-align: left;
  647. }
  648. </style>