companyQuotable.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565
  1. <template>
  2. <view class="">
  3. <service-widget @btnClick="btn_click"></service-widget>
  4. <image src="/static/image/car-insure/Quotablebanner.png" mode=""
  5. style="width: 100%;height: 110px;position: absolute;"></image>
  6. <view class="page">
  7. <view class="car">
  8. <view class="header d-flex a-center j-sb" @tap="showCarInfo = !showCarInfo">
  9. <view class="title">车辆信息</view>
  10. <view class=" d-flex">
  11. <view class="icon iconfont"
  12. :class="{ 'icon-up-yixuanzhong': showCarInfo, 'icon-down-weixuanzhong': !showCarInfo }"
  13. style="font-weight: bold;color: #fff;">
  14. </view>
  15. </view>
  16. </view>
  17. <view class="body" v-if="showCarInfo">
  18. <view class="row d-flex a-center j-sb">
  19. <view>车牌号</view>
  20. <view>{{carInfo.licenseNo}}</view>
  21. </view>
  22. <view class="row d-flex a-center j-sb">
  23. <view>品牌型号</view>
  24. <view>{{carInfo.modelcname}}</view>
  25. </view>
  26. <view class="row d-flex a-center j-sb">
  27. <view>车辆识别代码</view>
  28. <view>{{carInfo.vinNo}}</view>
  29. </view>
  30. <view class="row d-flex a-center j-sb">
  31. <view>发动机号</view>
  32. <view>{{carInfo.engineNo}}</view>
  33. </view>
  34. <view class="row d-flex a-center j-sb">
  35. <view>年款</view>
  36. <view>{{carInfo.caryear}}</view>
  37. </view>
  38. <view class="row d-flex a-center j-sb">
  39. <view>座位数</view>
  40. <view>{{carInfo.seatCount}}</view>
  41. </view>
  42. <view class="row d-flex a-center j-sb">
  43. <view>整备质量</view>
  44. <view>{{carInfo.completeKerbMass}}</view>
  45. </view>
  46. <view class="row d-flex a-center j-sb" v-if="carInfo.limitLoad">
  47. <view>核定载质量</view>
  48. <view>{{carInfo.limitLoad}}</view>
  49. </view>
  50. <view class="row d-flex a-center j-sb">
  51. <view>排量</view>
  52. <view>{{carInfo.enginedesc}}</view>
  53. </view>
  54. <view class="row d-flex a-center j-sb">
  55. <view>功率</view>
  56. <view>{{carInfo.powerScale}}</view>
  57. </view>
  58. <view class="row d-flex a-center j-sb">
  59. <view>新车购置价</view>
  60. <view>{{carInfo.purchasePrice}}</view>
  61. </view>
  62. <view class="row d-flex a-center j-sb font-weight"
  63. style="background-color: #E5ECFA;padding:5px 10px;">
  64. <view>车辆其他信息</view>
  65. </view>
  66. <view class="row d-flex a-center j-sb">
  67. <view>使用性质</view>
  68. <view>{{carInfo1.carnature}}</view>
  69. </view>
  70. <view class="row d-flex a-center j-sb">
  71. <view>车辆用途</view>
  72. <view>{{carInfo1.vehicleUse}}</view>
  73. </view>
  74. <view class="row d-flex a-center j-sb">
  75. <view>车辆类型</view>
  76. <view>{{carInfo1.cartype}}</view>
  77. </view>
  78. <view class="row d-flex a-center j-sb">
  79. <view>车辆种类</view>
  80. <view>{{carInfo1.cimodelclass}}</view>
  81. </view>
  82. <view class="row d-flex a-center j-sb">
  83. <view>能源种类</view>
  84. <view>{{carInfo1.energyType}}</view>
  85. </view>
  86. <view class="row d-flex a-center j-sb">
  87. <view>注册日期</view>
  88. <view>{{carInfo.registerDate }}</view>
  89. </view>
  90. <view class="row d-flex a-center j-sb">
  91. <view>发证日期</view>
  92. <view>{{carInfo.issueDate }}</view>
  93. </view>
  94. <view class="row d-flex a-center j-sb" v-if="carInfo.transferFlag">
  95. <view>转移登记日期</view>
  96. <view>{{carInfo.transferDate }}</view>
  97. </view>
  98. <view class="row dis j-c a-c">
  99. <u-button type="primary" shape="circle" size="medium"
  100. style="background: linear-gradient( 90deg, #0052FF 0%, #6595FA 100%);"
  101. @click="back('userModificationLabel' )">修改车辆信息</u-button>
  102. </view>
  103. </view>
  104. </view>
  105. <view class="car" style="padding: 0;">
  106. <view class="header d-flex a-center j-sb " @tap="showOwerInfo = !showOwerInfo" style="padding: 0 10px;">
  107. <view class="title">人员信息</view>
  108. <view class=" d-flex">
  109. <view class="icon iconfont "
  110. :class="{ 'icon-up-yixuanzhong': showOwerInfo, 'icon-down-weixuanzhong': !showOwerInfo }"
  111. style="font-weight: bold;color: #fff;">
  112. </view>
  113. </view>
  114. </view>
  115. <view class="body" v-if="showOwerInfo">
  116. <view class="row d-flex a-center j-sb font-weight "
  117. style="background-color: #E5ECFA;padding:5px 10px;">
  118. <view>车主姓名:</view>
  119. <view>{{ownerInfo.name}}</view>
  120. </view>
  121. <view class="" style="padding: 0 5px;">
  122. <view class="row d-flex a-center j-sb">
  123. <view>车主身份证号:</view>
  124. <view>
  125. {{ownerInfo.identifyNumber}}
  126. </view>
  127. </view>
  128. <view class="row d-flex a-center j-sb">
  129. <view>手机号:</view>
  130. <view>{{ownerInfo.mobile}}</view>
  131. </view>
  132. <view class="row d-flex a-center j-sb">
  133. <view>地址:</view>
  134. <view>{{ownerInfo.addr}}</view>
  135. </view>
  136. </view>
  137. <view class="row d-flex a-center j-sb font-weight "
  138. style="background-color: #E5ECFA;padding:5px 10px;">
  139. <view>投保人姓名:</view>
  140. <view>{{policyHolderInfo.name}}</view>
  141. </view>
  142. <view class="" style="padding: 0 5px;">
  143. <view class="row d-flex a-center j-sb">
  144. <view>投保人身份证号:</view>
  145. <view>
  146. {{policyHolderInfo.identifyNumber}}
  147. </view>
  148. </view>
  149. <view class="row d-flex a-center j-sb">
  150. <view>手机号:</view>
  151. <view>{{policyHolderInfo.mobile}}</view>
  152. </view>
  153. <view class="row d-flex a-center j-sb">
  154. <view>地址:</view>
  155. <view>{{policyHolderInfo.addr}}</view>
  156. </view>
  157. </view>
  158. <view class="row d-flex a-center j-sb font-weight "
  159. style="background-color: #E5ECFA;padding:5px 10px;">
  160. <view>被保人姓名:</view>
  161. <view>{{insuredPersonInfo.name}}</view>
  162. </view>
  163. <view class="" style="padding: 0 5px;">
  164. <view class="row d-flex a-center j-sb">
  165. <view>被保人身份证号:</view>
  166. <view>
  167. {{insuredPersonInfo.identifyNumber}}
  168. </view>
  169. </view>
  170. <view class="row d-flex a-center j-sb">
  171. <view>手机号:</view>
  172. <view>{{insuredPersonInfo.mobile}}</view>
  173. </view>
  174. <view class="row d-flex a-center j-sb">
  175. <view>地址:</view>
  176. <view>{{insuredPersonInfo.addr}}</view>
  177. </view>
  178. </view>
  179. <view class="row dis j-c a-c">
  180. <u-button type="primary" shape="circle" size="medium"
  181. style="background: linear-gradient( 90deg, #0052FF 0%, #6595FA 100%);"
  182. @click="back('carModificationLabel')">修改人员信息</u-button>
  183. </view>
  184. </view>
  185. </view>
  186. <view class="insuranceType mt-2 dis f-c ">
  187. <view class="dis a-c">
  188. <text class="title">险种信息</text>
  189. <image @click="riskTypeInfo = true" class="ml-1" src="../../static/image/car-insure/description.png"
  190. mode="" style="width: 16px;height: 16px;"></image>
  191. <text style="color: #666666;font-size: 13px;">(选择下方险种信息后点击下一步可报价)</text>
  192. </view>
  193. <view class="dis a-c f-wrap j-s" style="margin-top: 10px;">
  194. <view class="status-data" :class="item.dictValue==productId? 'active':''"
  195. v-for="(item,index) in productsTypeoptions" @tap.stop.prevent="statusclick(item)" :key="index">
  196. {{item.dictTag}}
  197. </view>
  198. </view>
  199. </view>
  200. <view class="insuranceType mt-2 dis f-c ">
  201. <text class="title">可报价保险公司</text>
  202. <view class="dis f-wrap j-start mt-2">
  203. <view class="insurer dis j-s a-c" style="margin: 5px 10px;" @tap="CompIntro(item.remark)"
  204. v-for="(item,index) in quotableCompanyList" :key="index">
  205. <image :src="item.logo" mode=""></image>
  206. <text>{{item.namesimple}}</text>
  207. </view>
  208. </view>
  209. </view>
  210. </view>
  211. <view class="footer-btn dis j-s a-c">
  212. <u-button type="primary" style="background:#E6EEFF;color:#0052FF;" @tap="back(null)">上一步</u-button>
  213. <u-button type="primary" style="background:#0052FF;" :disabled="!productId" @tap="next">下一步</u-button>
  214. </view>
  215. <u-modal v-model="CompIntroShow" title="公司简介"
  216. :title-style="{fontWeight: 'bold',borderBottom:'1px solid #f2f2f2',padding:'10px'}"
  217. :show-cancel-button="false"
  218. :confirm-style="{background:'#E6EEFF',color:'#0052FF',height:'40px',lineHeight:'40px'}"
  219. @confirm="CompIntroShow=false">
  220. <view class="slot-content dis a-c f-c p-2">
  221. <text style="text-indent: 2em;">{{companyRemark}}</text>
  222. </view>
  223. </u-modal>
  224. <u-modal v-model="riskTypeInfo" title="险种说明"
  225. :title-style="{fontWeight: 'bold',borderBottom:'1px solid #f2f2f2',padding:'10px'}" width="80%"
  226. :confirm-style="{background:'#E6EEFF',color:'#0052FF',height:'40px',lineHeight:'40px'}"
  227. :show-cancel-button="false" @confirm="riskTypeInfo=false">
  228. <view class="slot-content">
  229. <scroll-view class="scrollBar" scroll-y="true"
  230. style="max-height: 520px; padding: 0 20px; box-sizing: border-box;">
  231. <view class="coverageHint dis f-c pb-2">
  232. <text v-for="(item,index) in coverageHint" :key="index" style="color: #232832;"
  233. class="mb-2">{{item}}</text>
  234. </view>
  235. </scroll-view>
  236. </view>
  237. </u-modal>
  238. </view>
  239. </template>
  240. <script>
  241. import {
  242. dictionaryMatch
  243. } from '@/plugins/utils';
  244. export default {
  245. data() {
  246. return {
  247. coverageHint: [
  248. "1.交强险:国家要求强制购买的一种车险。赔偿他人的人身伤害及财产损失。(有责赔偿:死伤18万;医疗费用:1.8万;财损损失:2000元。无责赔偿:死伤1.8万;医疗费用:1800元;财损损失:100元。)",
  249. "2.交+三(交强+三者险):赔偿他人的人身伤害及财产损失,三者对交强险的上限额度形成补充,根据被保险人所处事故中的具体承担责任进行赔偿。建议:200万以上。",
  250. "3.交+商(交强+商业险):赔偿他人的人身伤害及财产损失 ,赔偿自然灾害和意外事故而导致的自身车辆损失。(车辆损失险包含:盗抢险、玻璃险、涉水险、自燃险、无法找到第三方、指定修理厂和不计免赔险。)",
  251. "4.单三者: 赔偿他人的人身伤害及财产损失。",
  252. "5.单商业:赔偿他人的人身伤害及财产损失 , 赔偿自然灾害和意外事故而导致的自身车辆损失。"
  253. ],
  254. riskTypeInfo: false,
  255. quotableCompanyList: [],
  256. CompIntroShow: false,
  257. carInfo: {},
  258. carInfo1: {
  259. carnature: "",
  260. vehicleUse: "",
  261. cartype: "",
  262. cimodelclass: "",
  263. energyType: "",
  264. },
  265. ownerInfo: {},
  266. policyHolderInfo: {},
  267. insuredPersonInfo: {},
  268. carInfoPositiveList: [],
  269. ownerInfoPositiveList: [],
  270. policyHolderInfoPositiveList: [],
  271. insuredPersonInfoPositiveList: [],
  272. showCarInfo: true,
  273. showOwerInfo: true,
  274. productsTypeoptions: [],
  275. natureOfVehicleUseoptions: [],
  276. vehicleTypeoptions: [],
  277. trafficManagementVehicleTypeoptions: [],
  278. energyTypeoptions: [],
  279. businessVehicleUseoptions: [],
  280. outOfBusinessVehicleUseoptions: [],
  281. insuranceTypeName: "",
  282. companyRemark: "",
  283. productId: "",
  284. productName: "",
  285. quoteno: "",
  286. }
  287. },
  288. onShow() {
  289. },
  290. async onLoad() {
  291. await this.getDicType("productsType");
  292. await this.getDicType("businessVehicleUse"); //车辆用途(营业)
  293. await this.getDicType("outOfBusinessVehicleUse"); //车辆用途(非营业)
  294. await this.getDicType("natureOfVehicleUse"); //车辆性质
  295. await this.getDicType("vehicleType"); //车辆种类
  296. await this.getDicType("trafficManagementVehicleType"); //车辆类型
  297. await this.getDicType("energyType"); //能源种类
  298. const eventChannel = this.getOpenerEventChannel()
  299. // 监听acceptData事件,获取上一页面通过eventChannel传送到当前页面的数据
  300. eventChannel.on('acceptData', (data) => {
  301. if (!!data) {
  302. //读取上一个页面传过来数据(车辆信息,人员信息,险种信息)
  303. this.productId = data.productId;
  304. this.productName = data.productName;
  305. this.quoteno = data.quoteno;
  306. this.carInfo = data.carInfo; //车辆信息
  307. this.ownerInfo = data.ownerInfo; //车主信息
  308. this.policyHolderInfo = data.policyHolderInfo; //投保人信息
  309. this.insuredPersonInfo = data.insuredPersonInfo; //被保人信息
  310. this.carInfoPositiveList = data.carInfoPositiveList; //车辆影像
  311. this.ownerInfoPositiveList = data.ownerInfoPositiveList; //车主影像
  312. this.policyHolderInfoPositiveList = data.policyHolderInfoPositiveList; //投保影像
  313. this.insuredPersonInfoPositiveList = data.insuredPersonInfoPositiveList; //被保人影像
  314. this.carInfo1.carnature = dictionaryMatch(this.natureOfVehicleUseoptions, data.carInfo
  315. .carnature)
  316. if (data.carInfo.carnature == '01') {
  317. this.carInfo1.vehicleUse = dictionaryMatch(this.businessVehicleUseoptions, data.carInfo
  318. .vehicleUse)
  319. } else {
  320. this.carInfo1.vehicleUse = dictionaryMatch(this.outOfBusinessVehicleUseoptions, data
  321. .carInfo
  322. .vehicleUse)
  323. }
  324. this.carInfo1.cartype = dictionaryMatch(this.trafficManagementVehicleTypeoptions, data
  325. .carInfo
  326. .cartype)
  327. this.carInfo1.cimodelclass = dictionaryMatch(this.vehicleTypeoptions, data.carInfo
  328. .cimodelclass)
  329. this.carInfo1.energyType = dictionaryMatch(this.energyTypeoptions, data.carInfo
  330. .energyType)
  331. }
  332. })
  333. this.ruleFilterCompany();
  334. },
  335. methods: {
  336. btn_click() {
  337. uni.navigateTo({
  338. url: '/pages/chat/chat'
  339. })
  340. },
  341. async ruleFilterCompany() {
  342. let params = {
  343. carInfo: this.carInfo,
  344. ownerInfo: this.ownerInfo,
  345. applyInfo: this.policyHolderInfo,
  346. insureInfo: this.insuredPersonInfo,
  347. productId: this.productId
  348. }
  349. let res = await this.$http.post('/plt/scheme/ruleFilterCompany', this.productId !== "" ? params : {});
  350. this.quotableCompanyList = res.data;
  351. },
  352. CompIntro(remark) {
  353. this.companyRemark = remark;
  354. this.CompIntroShow = true;
  355. },
  356. async getDicType(type) {
  357. let res = await this.$http.get('/sysDict/dictDetails/' + type);
  358. this[type + "options"] = res.data.ddList;
  359. },
  360. async statusclick(e) {
  361. this.productId = e.dictValue;
  362. this.insuranceTypeName = e.dictTag;
  363. let res = await this.$http.post('/plt/scheme/ruleFilterCompany', {
  364. carInfo: this.carInfo,
  365. ownerInfo: this.ownerInfo,
  366. applyInfo: this.policyHolderInfo,
  367. insureInfo: this.insuredPersonInfo,
  368. productId: this.productId
  369. });
  370. this.quotableCompanyList = res.data;
  371. },
  372. back(params) {
  373. this.navigate({
  374. url: '/pages/carInsure/Information',
  375. success: (res) => {
  376. res.eventChannel.emit(
  377. "acceptData", {
  378. carInfo: this
  379. .carInfo,
  380. ownerInfo: this
  381. .ownerInfo,
  382. policyHolderInfo: this
  383. .policyHolderInfo,
  384. insuredPersonInfo: this
  385. .insuredPersonInfo,
  386. carInfoPositiveList: this
  387. .carInfoPositiveList, //车辆
  388. ownerInfoPositiveList: this
  389. .ownerInfoPositiveList, //车主
  390. policyHolderInfoPositiveList: this
  391. .policyHolderInfoPositiveList, //投保
  392. insuredPersonInfoPositiveList: this
  393. .insuredPersonInfoPositiveList, //被保人
  394. quoteno: this.quoteno,
  395. identifier: params ? params : "",
  396. })
  397. }
  398. }, "navigateTo", true);
  399. },
  400. next() {
  401. if (!this.quotableCompanyList.length) {
  402. return uni.showToast({
  403. title: "暂无可报价保险公司",
  404. icon: 'none',
  405. });
  406. }
  407. this.navigate({
  408. url: '/pages/carInsure/premiumCalc',
  409. success: (res) => {
  410. res.eventChannel.emit(
  411. "acceptData", {
  412. carInfo: this
  413. .carInfo,
  414. ownerInfo: this
  415. .ownerInfo,
  416. policyHolderInfo: this
  417. .policyHolderInfo,
  418. insuredPersonInfo: this
  419. .insuredPersonInfo,
  420. carInfoPositiveList: this
  421. .carInfoPositiveList, //车辆
  422. ownerInfoPositiveList: this
  423. .ownerInfoPositiveList, //车主
  424. policyHolderInfoPositiveList: this
  425. .policyHolderInfoPositiveList, //投保
  426. insuredPersonInfoPositiveList: this
  427. .insuredPersonInfoPositiveList, //被保人
  428. quotableCompanyList: this.quotableCompanyList, //可报价公司
  429. productId: this.productId, //险种id
  430. productName: this.insuranceTypeName ? this.insuranceTypeName : this
  431. .productName //险种名字
  432. })
  433. }
  434. }, "navigateTo", true);
  435. },
  436. }
  437. }
  438. </script>
  439. <style lang="scss" scoped>
  440. .coverageHint {}
  441. .page {
  442. background: #F8FAFE;
  443. padding: 10px 16px 100px 16px;
  444. }
  445. .footer-btn {
  446. position: fixed;
  447. bottom: 0;
  448. left: 0;
  449. width: 100%;
  450. height: 62px;
  451. background: #FFFFFF;
  452. box-shadow: 0px -4px 10px 0px #DAE3F4;
  453. border-radius: 0px 0px 0px 0px;
  454. padding: 12px 16px;
  455. z-index: 99;
  456. uni-button {
  457. width: 45%;
  458. }
  459. }
  460. .status-data {
  461. padding: 4px 10px;
  462. box-sizing: border-box;
  463. margin: 0 4px 4px 0;
  464. font-size: 12px;
  465. border: 1px solid #eee;
  466. cursor: pointer;
  467. }
  468. .active {
  469. position: relative;
  470. background: rgba(0, 82, 255, 0.1);
  471. color: #0052FF;
  472. border: 1px solid #0052FF;
  473. font-weight: 700;
  474. }
  475. .active::before {
  476. content: "";
  477. position: absolute;
  478. top: 0;
  479. left: 0;
  480. width: 10px;
  481. height: 10px;
  482. background-image: url("/static/image/car-insure/before.png");
  483. background-size: cover;
  484. }
  485. .insuranceType {
  486. .title {
  487. font-size: 15px;
  488. font-weight: bold;
  489. color: #232832;
  490. }
  491. .insurer {
  492. width: 100px;
  493. height: 40px;
  494. background: #FFFFFF;
  495. box-shadow: 0px 4px 10px 0px #DAE3F4;
  496. border-radius: 6px;
  497. margin-bottom: 10px;
  498. padding: 8px;
  499. box-sizing: border-box;
  500. image {
  501. width: 20px;
  502. height: 20px;
  503. }
  504. text {
  505. font-size: 14px;
  506. color: #232832;
  507. font-weight: bold;
  508. }
  509. }
  510. }
  511. .car {
  512. width: 100%;
  513. background-color: #fff;
  514. border-radius: 6px;
  515. box-shadow: 0px 4px 10px 0px #DAE3F4;
  516. margin-top: 10px;
  517. position: relative;
  518. .header {
  519. height: 80upx;
  520. position: relative;
  521. padding: 0 10px;
  522. background: linear-gradient(132deg, #467FF6 0%, #A5C2FF 59%, #467FF6 100%);
  523. border-image: linear-gradient(152deg, rgba(234, 241, 255, 1), rgba(231, 238, 255, 1)) 1 1;
  524. border-radius: 6px 6px 0px 0px;
  525. .title {
  526. font-size: 30upx;
  527. font-weight: bold;
  528. color: #fff;
  529. }
  530. }
  531. .body {
  532. .row {
  533. padding: 6px 10px;
  534. border-top: 1px solid #F3F3F3;
  535. }
  536. .row:last-child {
  537. border: none;
  538. }
  539. }
  540. }
  541. </style>