CarInfoForm.vue 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415
  1. <template>
  2. <view class="">
  3. <u--form labelPosition="left" :model="carInfo" :rules="carRules" ref="carForm" labelWidth="80"
  4. errorType="message">
  5. <template v-if="currentPagePath=='/pages/quote/quoteInfo'">
  6. <u-form-item label="车牌号" borderBottom>
  7. <u--input v-model="carInfo.licenseNo" border="none" clearable placeholder="请输入车牌号"
  8. placeholderStyle="text-align:right;" @input="upperCaseType('licenseNo')"></u--input>
  9. </u-form-item>
  10. <u-form-item label="车架号" prop="vinNo" borderBottom>
  11. <u--input placeholder="请输入车架号" placeholderStyle="text-align:right;" @input="upperCaseType('vinNo')"
  12. v-model="carInfo.vinNo" border="none" clearable></u--input>
  13. </u-form-item>
  14. <u-form-item label="品牌型号" prop="brandName" borderBottom>
  15. <u--input v-model="carInfo.brandName" border="none" @input="upperCaseType('brandName')" clearable
  16. placeholder="请输入品牌型号" placeholderStyle="text-align:right;"></u--input>
  17. </u-form-item>
  18. <u-form-item label="发动机号" prop="engineNo" borderBottom>
  19. <u--input v-model="carInfo.engineNo" border="none" clearable placeholder="请输入发动机号"
  20. placeholderStyle="text-align:right;" @input="upperCaseType('engineNo')"></u--input>
  21. </u-form-item>
  22. <u-form-item label="使用性质" prop="carNatureCode" borderBottom @tap="carnatureShow=true">
  23. <u--input v-model="carInfos.carNatureCode" disabled disabledColor="#ffffff" suffixIcon='arrow-down'
  24. suffixIconStyle="color:#333;font-size:30rpx" placeholder="请选择使用性质"
  25. placeholderStyle="text-align:right;" clearable border="none"
  26. style="pointer-events: none"></u--input>
  27. </u-form-item>
  28. <u-form-item label="车辆种类" prop="carKindCode" borderBottom @tap="plateTypeShow=true">
  29. <u--input v-model="carInfos.carKindCode" disabled disabledColor="#ffffff" suffixIcon='arrow-down'
  30. suffixIconStyle="color:#333;font-size:30rpx" placeholder="请选择车辆种类"
  31. placeholderStyle="text-align:right;" clearable border="none"
  32. style="pointer-events: none"></u--input>
  33. </u-form-item>
  34. <u-form-item label="车辆用途" prop="vehicleUseCode" borderBottom @click="vehicleUseShow=true">
  35. <u--input v-model="carInfos.vehicleUseCode" disabled disabledColor="#ffffff" suffixIcon='arrow-down'
  36. suffixIconStyle="color:#333;font-size:30rpx" placeholder="请选择车辆用途 "
  37. placeholderStyle="text-align:right;" clearable border="none"
  38. style="pointer-events: none"></u--input>
  39. </u-form-item>
  40. <u-form-item label="所属性质" prop="property" borderBottom @tap="propertyShow=true">
  41. <u--input v-model="carInfos.property" disabled disabledColor="#ffffff" suffixIcon='arrow-down'
  42. suffixIconStyle="color:#333;font-size:30rpx" placeholder="请选择所属性质"
  43. placeholderStyle="text-align:right;" clearable border="none"
  44. style="pointer-events: none"></u--input>
  45. </u-form-item>
  46. <u-form-item label="注册日期" prop="registerDate" borderBottom @tap="registerDateShow = true; ">
  47. <u--input v-model="carInfo.registerDate" disabled disabledColor="#ffffff" clearable
  48. :holdKeyboard="true" suffixIcon='calendar' suffixIconStyle="color:#333;font-size:40rpx"
  49. placeholder="请选择 " placeholderStyle="text-align:right;" border="none"
  50. style="pointer-events: none"></u--input>
  51. </u-form-item>
  52. <u-form-item label="发证日期" prop="issueDate" borderBottom @click="issueDateShow=true">
  53. <u--input v-model="carInfo.issueDate" disabled disabledColor="#ffffff" clearable
  54. suffixIcon='calendar' suffixIconStyle="color:#333;font-size:40rpx" placeholder="请选择 "
  55. placeholderStyle="text-align:right;" border="none" style="pointer-events: none"></u--input>
  56. </u-form-item>
  57. <u-form-item label="整备质量" prop="completeKerbMass" borderBottom>
  58. <u--input v-model="carInfo.completeKerbMass" border="none" clearable placeholder="请输入整备质量"
  59. placeholderStyle="text-align:right;"></u--input>
  60. </u-form-item>
  61. <u-form-item label="核定载质量" prop="limitLoad" borderBottom>
  62. <u--input v-model="carInfo.limitLoad" border="none" clearable placeholder="请输入核定载质量"
  63. placeholderStyle="text-align:right;"></u--input>
  64. </u-form-item>
  65. </template>
  66. <template v-if="currentPagePath=='/pages/quote/selectInsuranceCompany'">
  67. <u-form-item label="车架号" prop="vinNo" borderBottom>
  68. <u--input placeholder="请输入车架号" placeholderStyle="text-align:right;" v-model="carInfo.vinNo"
  69. border="none" clearable></u--input>
  70. <view class="search ml-1 dis a-c j-c " @tap="toChooseVin(carInfo.vinNo)">查询</view>
  71. </u-form-item>
  72. <u-form-item label="品牌型号" prop="brandName" borderBottom>
  73. <u--input v-model="carInfo.brandName" border="none" clearable placeholder="请输入品牌型号"
  74. placeholderStyle="text-align:right;"></u--input>
  75. <view class="search ml-1 dis a-c j-c" @tap="toChooseVehicleType(carInfo.brandName)">查询</view>
  76. </u-form-item>
  77. <u-form-item label="能源种类" prop="energyTypeCode" borderBottom @click="energyTypeShow=true">
  78. <u--input v-model="carInfos.energyTypeCode" disabled disabledColor="#ffffff" suffixIcon='arrow-down'
  79. suffixIconStyle="color:#333;font-size:30rpx" placeholder="请选择使用性质"
  80. placeholderStyle="text-align:right;" clearable border="none"
  81. style="pointer-events: none"></u--input>
  82. </u-form-item>
  83. <u-form-item label="车辆用途" prop="vehicleUseCode" borderBottom @click="vehicleUseShow=true">
  84. <u--input v-model="carInfos.vehicleUseCode" disabled disabledColor="#ffffff" suffixIcon='arrow-down'
  85. suffixIconStyle="color:#333;font-size:30rpx" placeholder="请选择车辆用途 "
  86. placeholderStyle="text-align:right;" clearable border="none"
  87. style="pointer-events: none"></u--input>
  88. </u-form-item>
  89. <u-form-item label="车辆种类" prop="carKindCode" borderBottom @click="cimodelclassShow=true">
  90. <u--input v-model="carInfos.carKindCode" disabled disabledColor="#ffffff" suffixIcon='arrow-down'
  91. suffixIconStyle="color:#333;font-size:30rpx" placeholder="请选择车辆种类 "
  92. placeholderStyle="text-align:right;" clearable border="none"
  93. style="pointer-events: none"></u--input>
  94. </u-form-item>
  95. <u-form-item label="车辆类型" prop="carTypeCode" borderBottom @click="cartypeShow=true">
  96. <u--input v-model="carInfos.carTypeCode" disabled disabledColor="#ffffff" suffixIcon='arrow-down'
  97. suffixIconStyle="color:#333;font-size:30rpx" placeholder="请选择车辆类型 "
  98. placeholderStyle="text-align:right;" clearable border="none"
  99. style="pointer-events: none"></u--input>
  100. </u-form-item>
  101. <u-form-item label="座位数" borderBottom>
  102. <u--input v-model="carInfo.seatCount" border="none" clearable placeholder="请输入座位数"
  103. placeholderStyle="text-align:right;">
  104. </u--input>
  105. <text class="suffixClass">座</text>
  106. </u-form-item>
  107. <u-form-item label="年款" borderBottom>
  108. <u--input v-model="carInfo.carYear" border="none" clearable placeholder="请输入年款"
  109. placeholderStyle="text-align:right;"></u--input>
  110. </u-form-item>
  111. <u-form-item label="排量" borderBottom>
  112. <u--input v-model="carInfo.displacement" border="none" clearable placeholder="请输入排量"
  113. placeholderStyle="text-align:right;">
  114. </u--input>
  115. <text class="suffixClass">L</text>
  116. </u-form-item>
  117. <u-form-item label="功率" borderBottom>
  118. <u--input v-model="carInfo.powerScale" border="none" clearable placeholder="请输入功率"
  119. placeholderStyle="text-align:right;">
  120. </u--input>
  121. <text class="suffixClass">KW</text>
  122. </u-form-item>
  123. <u-form-item label="汽车购置价" prop="purchasePrice" borderBottom>
  124. <u--input v-model="carInfo.purchasePrice" border="none" clearable placeholder="请输入新车购置价"
  125. placeholderStyle="text-align:right;">
  126. </u--input>
  127. <text class="suffixClass">元</text>
  128. </u-form-item>
  129. </template>
  130. </u--form>
  131. <!-- 使用性质 -->
  132. <u-picker :show="carnatureShow" :columns="natureOfVehicleUseoptions" keyName="label"
  133. @cancel="carnatureShow=false" @confirm="dictionaryConfirm($event, 'carNatureCode','carnatureShow')"
  134. @close="carnatureShow=false" :closeOnClickOverlay="true"></u-picker>
  135. <!-- 车辆种类 -->
  136. <u-picker :show="plateTypeShow" :columns="plateVehicleUseoptions" keyName="label"
  137. @cancel="plateTypeShow=false" @confirm="dictionaryConfirm($event, 'carKindCode','plateTypeShow')"
  138. @close="plateTypeShow=false" :closeOnClickOverlay="true"></u-picker>
  139. <!-- 所属性质 -->
  140. <u-picker :show="propertyShow" :columns="[filterepropertyOptions]" keyName="label" @cancel="propertyShow=false"
  141. @confirm="dictionaryConfirm($event, 'property', 'propertyShow')" @close="propertyShow=false"
  142. :closeOnClickOverlay="true" :defaultIndex="[0]"></u-picker>
  143. <!-- 能源种类 -->
  144. <u-picker :show="energyTypeShow" :columns="energyTypeoptions" keyName="label" @cancel="energyTypeShow=false"
  145. @confirm="dictionaryConfirm($event, 'energyTypeCode','energyTypeShow')" @close="energyTypeShow=false"
  146. :closeOnClickOverlay="true"></u-picker>
  147. <!-- 车辆用途 -->
  148. <u-picker v-if="carInfo.carNatureCode === '01'" :show="vehicleUseShow" :columns="businessVehicleUseoptions"
  149. keyName="label" @cancel="vehicleUseShow=false"
  150. @confirm="dictionaryConfirm($event, 'vehicleUseCode','vehicleUseShow')" @close="vehicleUseShow=false"
  151. :closeOnClickOverlay="true"></u-picker>
  152. <u-picker v-if="carInfo.carNatureCode === '02'" :show="vehicleUseShow" :columns="outOfBusinessVehicleUseoptions"
  153. keyName="label" @cancel="vehicleUseShow=false"
  154. @confirm="dictionaryConfirm($event, 'vehicleUseCode','vehicleUseShow')" @close="vehicleUseShow=false"
  155. :closeOnClickOverlay="true"></u-picker>
  156. <!-- 车辆类型 -->
  157. <u-picker :show="cartypeShow" :columns="trafficManagementVehicleTypeoptions" keyName="label"
  158. @cancel="cartypeShow=false" @confirm="dictionaryConfirm($event, 'carTypeCode','cartypeShow')"
  159. @close="cartypeShow=false" :closeOnClickOverlay="true"></u-picker>
  160. <!-- 车辆种类 -->
  161. <u-picker :show="cimodelclassShow" :columns="vehicleTypeoptions" keyName="label"
  162. @cancel="cimodelclassShow=false" @confirm="dictionaryConfirm($event, 'carKindCode','cimodelclassShow')"
  163. @close="cimodelclassShow=false" :closeOnClickOverlay="true"></u-picker>
  164. <u-datetime-picker :show="registerDateShow" v-model="registerDatevalue" mode="date" :formatter="formatter"
  165. @cancel="registerDateShow=false" @close="registerDateShow=false" :closeOnClickOverlay="true"
  166. @confirm="registerDateconfirm" confirmText="确定"></u-datetime-picker>
  167. <u-datetime-picker :show="issueDateShow" mode="date" v-model="issueDatevalue" :formatter="formatter"
  168. @cancel="issueDateShow=false" @confirm="issueDateconfirm" :closeOnClickOverlay="true"
  169. @close="issueDateShow=false" confirmText="确定"></u-datetime-picker>
  170. </view>
  171. </template>
  172. <script>
  173. var dateTime = new Date();
  174. let Year = dateTime.getFullYear();
  175. let Month = Number(dateTime.getMonth() + 1);
  176. export default {
  177. props: {
  178. carInfo: Object,
  179. currentPagePath: String,
  180. carInfos: Object,
  181. natureOfVehicleUseoptions: Array,
  182. plateVehicleUseoptions: Array,
  183. energyTypeoptions: Array,
  184. trafficManagementVehicleTypeoptions: Array,
  185. vehicleTypeoptions: Array,
  186. businessVehicleUseoptions: Array,
  187. outOfBusinessVehicleUseoptions: Array,
  188. },
  189. data() {
  190. return {
  191. registerDatevalue: Number(new Date()), //注册日期
  192. issueDatevalue: Number(new Date()), //发证日期
  193. registerDateShow: false, //注册日期
  194. issueDateShow: false, //发证日期
  195. carnatureShow: false, //使用性质
  196. propertyShow: false, //所属性质
  197. plateTypeShow: false, //车辆种类
  198. energyTypeShow: false,
  199. vehicleUseShow: false,
  200. cartypeShow: false,
  201. cimodelclassShow: false,
  202. carRules: {
  203. vinNo: [{
  204. required: true,
  205. message: '请输入车辆识别码',
  206. trigger: ['blur', 'change'],
  207. },
  208. {
  209. pattern: /^([0-9A-Z]){17}$/,
  210. message: '请输入正确的车辆识别码',
  211. }
  212. ],
  213. modelcname: [{
  214. required: true,
  215. message: '请输入品牌型号',
  216. trigger: ['blur', 'change'],
  217. }],
  218. engineNo: [{
  219. required: true,
  220. message: '请输入发动机号',
  221. trigger: ['blur', 'change'],
  222. }],
  223. purchasePrice: [{
  224. required: true,
  225. message: '请输入新车购置价',
  226. trigger: ['blur', 'change'],
  227. },
  228. ],
  229. completeKerbMass: [{
  230. required: true,
  231. message: '请输入整备质量',
  232. trigger: ['blur', 'change'],
  233. }],
  234. carNatureCode: [{
  235. required: true,
  236. message: '使用性质必选',
  237. trigger: 'change',
  238. }],
  239. energyTypeCode: [{
  240. required: true,
  241. message: '能源种类必选',
  242. trigger: 'change',
  243. }],
  244. vehicleUseCode: [{
  245. required: true,
  246. message: '车辆用途必选',
  247. trigger: 'change',
  248. }],
  249. carTypeCode: [{
  250. required: true,
  251. message: '车辆类型必选',
  252. trigger: 'change',
  253. }],
  254. carKindCode: [{
  255. required: true,
  256. message: '车辆种类必选',
  257. trigger: 'change',
  258. }],
  259. registerDate: [{
  260. required: true,
  261. message: '请选择注册日期',
  262. trigger: 'change',
  263. },
  264. {
  265. pattern: /^\d{4}-\d{2}-\d{2}$/,
  266. message: '注册日期格式错误',
  267. }
  268. ],
  269. issueDate: [{
  270. required: true,
  271. message: '请选择发证日期',
  272. trigger: 'change',
  273. },
  274. {
  275. pattern: /^\d{4}-\d{2}-\d{2}$/,
  276. message: '发证日期日期格式错误',
  277. }
  278. ],
  279. },
  280. propertyoptions: [ //所属性质
  281. {
  282. value: "1",
  283. label: "个人",
  284. },
  285. {
  286. value: "2",
  287. label: "企业",
  288. }
  289. ],
  290. }
  291. },
  292. computed: {
  293. filterepropertyOptions() {
  294. // 假设 isEnterpriseAllowed 是控制企业是否可选的字段
  295. return this.propertyoptions.filter(item => {
  296. if (item.label === "企业" && this.carInfo.vehicleUseCode == "05") {
  297. return false; // 企业不可选时移除
  298. } else {
  299. return true; // 企业不可选时移除
  300. }
  301. return true;
  302. });
  303. }
  304. },
  305. watch: {
  306. 'carInfo.vehicleUseCode': {
  307. handler(val) {
  308. switch (val) {
  309. case '05':
  310. this.carInfo.property = '1';
  311. this.carInfos.property = '个人';
  312. break;
  313. }
  314. },
  315. deep: true
  316. },
  317. },
  318. mounted() {
  319. },
  320. methods: {
  321. toChooseVin(name) {
  322. this.$emit('toChooseVin', name)
  323. },
  324. toChooseVehicleType(name) {
  325. this.$emit('toChooseVehicleType', name)
  326. },
  327. upperCaseType(type) {
  328. this.carInfo[type] = this.carInfo[type].toUpperCase();
  329. },
  330. close() {
  331. this.registerDateShow = false;
  332. },
  333. registerDateconfirm(e) {
  334. this.carInfo.registerDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd');
  335. this.registerDateShow = false;
  336. },
  337. issueDateconfirm(e) {
  338. this.carInfo.issueDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd');
  339. this.issueDateShow = false;
  340. },
  341. formatter(type, value) {
  342. if (type === 'year') {
  343. return `${value}年`
  344. }
  345. if (type === 'month') {
  346. return `${value}月`
  347. }
  348. if (type === 'day') {
  349. return `${value}日`
  350. }
  351. return value
  352. },
  353. // handlePropertyConfirm(e) {
  354. // const selected = this.propertyoptions.find(item => item.value === e.value[0].value);
  355. // console.log(selected);
  356. // if (selected?.disabled) {
  357. // uni.showToast({
  358. // title: '该选项不可选',
  359. // icon: 'none'
  360. // });
  361. // return;
  362. // }
  363. // this.dictionaryConfirm(e, 'property', 'propertyShow');
  364. // },
  365. //字典信息回显处理
  366. dictionaryConfirm(value, name, showName) {
  367. console.log(this.propertyoptions);
  368. console.log(value);
  369. console.log(name);
  370. console.log(showName);
  371. this.carInfo[name] = value.value[0].value;
  372. this.carInfos[name] = value.value[0].label;
  373. this[showName] = false;
  374. },
  375. validate(callback) {
  376. this.$refs.carForm.setRules(this.carRules)
  377. this.$refs.carForm.validate().then(res => {
  378. callback(res)
  379. }).catch(errors => {
  380. callback(errors)
  381. })
  382. }
  383. },
  384. }
  385. </script>
  386. <style scoped lang="scss">
  387. /* 添加样式 */
  388. .search {
  389. width: 112rpx;
  390. height: 60rpx;
  391. background: #FDE935;
  392. border-radius: 100rpx 100rpx 100rpx 100rpx;
  393. }
  394. .disabled {
  395. color: #ccc;
  396. pointer-events: none;
  397. }
  398. .suffixClass {
  399. margin-left: 10rpx;
  400. font-size: 30rpx;
  401. }
  402. </style>