companyQuotable.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531
  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">修改车辆信息</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">修改人员信息</u-button>
  183. </view>
  184. </view>
  185. </view>
  186. <view class="insuranceType mt-2 dis f-c ">
  187. <text class="title">险种信息</text>
  188. <view class="dis a-c f-wrap j-s" style="margin-top: 10px;">
  189. <view class="status-data" :class="item.dictValue==productId? 'active':''"
  190. v-for="(item,index) in productsTypeoptions" @tap.stop.prevent="statusclick(item)" :key="index">
  191. {{item.dictTag}}
  192. </view>
  193. </view>
  194. </view>
  195. <view class="insuranceType mt-2 dis f-c ">
  196. <text class="title">可报价保险公司</text>
  197. <view class="dis f-wrap j-start mt-2">
  198. <view class="insurer dis j-s a-c" style="margin: 5px 10px;" @tap="CompIntro(item.remark)"
  199. v-for="(item,index) in quotableCompanyList" :key="index">
  200. <image :src="item.logo" mode=""></image>
  201. <text>{{item.namesimple}}</text>
  202. </view>
  203. </view>
  204. </view>
  205. </view>
  206. <view class="footer-btn dis j-s a-c">
  207. <u-button type="primary" style="background:#E6EEFF;color:#0052FF;" @tap="back">上一步</u-button>
  208. <u-button type="primary" style="background:#0052FF;" :disabled="!productId" @tap="next">下一步</u-button>
  209. </view>
  210. <u-modal v-model="CompIntroShow" title="公司简介"
  211. :title-style="{fontWeight: 'bold',borderBottom:'1px solid #f2f2f2',padding:'10px'}"
  212. :show-cancel-button="false"
  213. :confirm-style="{background:'#E6EEFF',color:'#0052FF',height:'40px',lineHeight:'40px'}"
  214. @confirm="CompIntroShow=false">
  215. <view class="slot-content dis a-c f-c p-2">
  216. <text>{{companyRemark}}</text>
  217. </view>
  218. </u-modal>
  219. </view>
  220. </template>
  221. <script>
  222. import {
  223. dictionaryMatch
  224. } from '@/plugins/utils';
  225. export default {
  226. data() {
  227. return {
  228. quotableCompanyList: [],
  229. CompIntroShow: false,
  230. carInfo: {},
  231. carInfo1: {
  232. carnature: "",
  233. vehicleUse: "",
  234. cartype: "",
  235. cimodelclass: "",
  236. energyType: "",
  237. },
  238. ownerInfo: {},
  239. policyHolderInfo: {},
  240. insuredPersonInfo: {},
  241. carInfoPositiveList: [],
  242. ownerInfoPositiveList: [],
  243. policyHolderInfoPositiveList: [],
  244. insuredPersonInfoPositiveList: [],
  245. showCarInfo: true,
  246. showOwerInfo: true,
  247. productsTypeoptions: [],
  248. natureOfVehicleUseoptions: [],
  249. vehicleTypeoptions: [],
  250. trafficManagementVehicleTypeoptions: [],
  251. energyTypeoptions: [],
  252. businessVehicleUseoptions: [],
  253. outOfBusinessVehicleUseoptions: [],
  254. insuranceTypeName: "",
  255. companyRemark: "",
  256. productId: "",
  257. productName: "",
  258. }
  259. },
  260. onShow() {
  261. },
  262. async onLoad() {
  263. await this.getDicType("productsType");
  264. await this.getDicType("businessVehicleUse"); //车辆用途(营业)
  265. await this.getDicType("outOfBusinessVehicleUse"); //车辆用途(非营业)
  266. await this.getDicType("natureOfVehicleUse"); //车辆性质
  267. await this.getDicType("vehicleType"); //车辆种类
  268. await this.getDicType("trafficManagementVehicleType"); //车辆类型
  269. await this.getDicType("energyType"); //能源种类
  270. const eventChannel = this.getOpenerEventChannel()
  271. // 监听acceptData事件,获取上一页面通过eventChannel传送到当前页面的数据
  272. eventChannel.on('acceptData', (data) => {
  273. if (!!data) {
  274. //读取上一个页面传过来数据(车辆信息,人员信息,险种信息)
  275. this.productId = data.productId;
  276. this.productName = data.productName;
  277. this.carInfo = data.carInfo; //车辆信息
  278. this.ownerInfo = data.ownerInfo; //车主信息
  279. this.policyHolderInfo = data.policyHolderInfo; //投保人信息
  280. this.insuredPersonInfo = data.insuredPersonInfo; //被保人信息
  281. this.carInfoPositiveList = data.carInfoPositiveList; //车辆影像
  282. this.ownerInfoPositiveList = data.ownerInfoPositiveList; //车主影像
  283. this.policyHolderInfoPositiveList = data.policyHolderInfoPositiveList; //投保影像
  284. this.insuredPersonInfoPositiveList = data.insuredPersonInfoPositiveList; //被保人影像
  285. this.carInfo1.carnature = dictionaryMatch(this.natureOfVehicleUseoptions, data.carInfo
  286. .carnature)
  287. if (data.carInfo.carnature == '01') {
  288. this.carInfo1.vehicleUse = dictionaryMatch(this.businessVehicleUseoptions, data.carInfo
  289. .vehicleUse)
  290. } else {
  291. this.carInfo1.vehicleUse = dictionaryMatch(this.outOfBusinessVehicleUseoptions, data
  292. .carInfo
  293. .vehicleUse)
  294. }
  295. this.carInfo1.cartype = dictionaryMatch(this.trafficManagementVehicleTypeoptions, data
  296. .carInfo
  297. .cartype)
  298. this.carInfo1.cimodelclass = dictionaryMatch(this.vehicleTypeoptions, data.carInfo
  299. .cimodelclass)
  300. this.carInfo1.energyType = dictionaryMatch(this.energyTypeoptions, data.carInfo
  301. .energyType)
  302. }
  303. })
  304. this.ruleFilterCompany();
  305. },
  306. methods: {
  307. btn_click() {
  308. uni.navigateTo({
  309. url: '/pages/chat/chat'
  310. })
  311. },
  312. async ruleFilterCompany() {
  313. let params = {
  314. carInfo: this.carInfo,
  315. ownerInfo: this.ownerInfo,
  316. applyInfo: this.policyHolderInfo,
  317. insureInfo: this.insuredPersonInfo,
  318. productId: this.productId
  319. }
  320. let res = await this.$http.post('/plt/scheme/ruleFilterCompany', this.productId !== "" ? params : {});
  321. this.quotableCompanyList = res.data;
  322. },
  323. CompIntro(remark) {
  324. this.companyRemark = remark;
  325. this.CompIntroShow = true;
  326. },
  327. async getDicType(type) {
  328. let res = await this.$http.get('/sysDict/dictDetails/' + type);
  329. this[type + "options"] = res.data.ddList;
  330. },
  331. async statusclick(e) {
  332. this.productId = e.dictValue;
  333. this.insuranceTypeName = e.dictTag;
  334. let res = await this.$http.post('/plt/scheme/ruleFilterCompany', {
  335. carInfo: this.carInfo,
  336. ownerInfo: this.ownerInfo,
  337. applyInfo: this.policyHolderInfo,
  338. insureInfo: this.insuredPersonInfo,
  339. productId: this.productId
  340. });
  341. this.quotableCompanyList = res.data;
  342. },
  343. back() {
  344. this.navigate({
  345. url: '/pages/carInsure/Information',
  346. success: (res) => {
  347. res.eventChannel.emit(
  348. "acceptData", {
  349. carInfo: this
  350. .carInfo,
  351. ownerInfo: this
  352. .ownerInfo,
  353. policyHolderInfo: this
  354. .policyHolderInfo,
  355. insuredPersonInfo: this
  356. .insuredPersonInfo,
  357. carInfoPositiveList: this
  358. .carInfoPositiveList, //车辆
  359. ownerInfoPositiveList: this
  360. .ownerInfoPositiveList, //车主
  361. policyHolderInfoPositiveList: this
  362. .policyHolderInfoPositiveList, //投保
  363. insuredPersonInfoPositiveList: this
  364. .insuredPersonInfoPositiveList, //被保人
  365. })
  366. }
  367. }, "navigateTo", true);
  368. },
  369. next() {
  370. if (!this.productId) {
  371. return uni.showToast({
  372. title: "选择险种信息后,再进行下一步",
  373. icon: 'none',
  374. });
  375. }
  376. this.navigate({
  377. url: '/pages/carInsure/premiumCalc',
  378. success: (res) => {
  379. res.eventChannel.emit(
  380. "acceptData", {
  381. carInfo: this
  382. .carInfo,
  383. ownerInfo: this
  384. .ownerInfo,
  385. policyHolderInfo: this
  386. .policyHolderInfo,
  387. insuredPersonInfo: this
  388. .insuredPersonInfo,
  389. carInfoPositiveList: this
  390. .carInfoPositiveList, //车辆
  391. ownerInfoPositiveList: this
  392. .ownerInfoPositiveList, //车主
  393. policyHolderInfoPositiveList: this
  394. .policyHolderInfoPositiveList, //投保
  395. insuredPersonInfoPositiveList: this
  396. .insuredPersonInfoPositiveList, //被保人
  397. quotableCompanyList: this.quotableCompanyList, //可报价公司
  398. productId: this.productId, //险种id
  399. productName: this.insuranceTypeName ? this.insuranceTypeName : this
  400. .productName //险种名字
  401. })
  402. }
  403. }, "navigateTo", true);
  404. },
  405. }
  406. }
  407. </script>
  408. <style lang="scss" scoped>
  409. .page {
  410. background: #F8FAFE;
  411. padding: 10px 16px 100px 16px;
  412. }
  413. .footer-btn {
  414. position: fixed;
  415. bottom: 0;
  416. left: 0;
  417. width: 100%;
  418. height: 62px;
  419. background: #FFFFFF;
  420. box-shadow: 0px -4px 10px 0px #DAE3F4;
  421. border-radius: 0px 0px 0px 0px;
  422. padding: 12px 16px;
  423. z-index: 99;
  424. uni-button {
  425. width: 45%;
  426. }
  427. }
  428. .status-data {
  429. padding: 4px 10px;
  430. box-sizing: border-box;
  431. margin: 0 4px 4px 0;
  432. font-size: 12px;
  433. border: 1px solid #eee;
  434. cursor: pointer;
  435. }
  436. .active {
  437. position: relative;
  438. background: rgba(0, 82, 255, 0.1);
  439. color: #0052FF;
  440. border: 1px solid #0052FF;
  441. font-weight: 700;
  442. }
  443. .active::before {
  444. content: "";
  445. position: absolute;
  446. top: 0;
  447. left: 0;
  448. width: 10px;
  449. height: 10px;
  450. background-image: url("/static/image/car-insure/before.png");
  451. background-size: cover;
  452. }
  453. .insuranceType {
  454. .title {
  455. font-size: 15px;
  456. font-weight: bold;
  457. color: #232832;
  458. }
  459. .insurer {
  460. width: 100px;
  461. height: 40px;
  462. background: #FFFFFF;
  463. box-shadow: 0px 4px 10px 0px #DAE3F4;
  464. border-radius: 6px;
  465. margin-bottom: 10px;
  466. padding: 8px;
  467. box-sizing: border-box;
  468. image {
  469. width: 20px;
  470. height: 20px;
  471. }
  472. text {
  473. font-size: 14px;
  474. color: #232832;
  475. font-weight: bold;
  476. }
  477. }
  478. }
  479. .car {
  480. width: 100%;
  481. background-color: #fff;
  482. border-radius: 6px;
  483. box-shadow: 0px 4px 10px 0px #DAE3F4;
  484. margin-top: 10px;
  485. position: relative;
  486. .header {
  487. height: 80upx;
  488. position: relative;
  489. padding: 0 10px;
  490. background: linear-gradient(132deg, #467FF6 0%, #A5C2FF 59%, #467FF6 100%);
  491. border-image: linear-gradient(152deg, rgba(234, 241, 255, 1), rgba(231, 238, 255, 1)) 1 1;
  492. border-radius: 6px 6px 0px 0px;
  493. .title {
  494. font-size: 30upx;
  495. font-weight: bold;
  496. color: #fff;
  497. }
  498. }
  499. .body {
  500. .row {
  501. padding: 6px 10px;
  502. border-top: 1px solid #F3F3F3;
  503. }
  504. .row:last-child {
  505. border: none;
  506. }
  507. }
  508. }
  509. </style>