CarInfoForm.vue 16 KB

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