ApplicantInfoForm.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. <template>
  2. <view class="">
  3. <u--form labelPosition="left" :model="policyHolderInfo" :rules="policyRules" ref="policyForm" labelWidth="80"
  4. errorType="message">
  5. <u-form-item label="姓名" prop="name" borderBottom>
  6. <u-input v-model="policyHolderInfo.name" border="none" clearable placeholder="请输入姓名"
  7. placeholderStyle="text-align:right;"></u-input>
  8. </u-form-item>
  9. <u-form-item label="投保人类型" borderBottom @click="propertyShow=true">
  10. <u-input v-model="policyHolderInfos.property" border="none" clearable placeholder=""
  11. placeholderStyle="text-align:right;" suffixIcon='arrow-down'
  12. suffixIconStyle="color:#333;font-size:30rpx" style="pointer-events: none"></u-input>
  13. </u-form-item>
  14. <u-form-item label="证件类型" borderBottom @click="identifyTypeShow=true">
  15. <u-input v-model="policyHolderInfos.identifyType" border="none" clearable placeholder=""
  16. placeholderStyle="text-align:right;" suffixIcon='arrow-down'
  17. suffixIconStyle="color:#333;font-size:30rpx" style="pointer-events: none"></u-input>
  18. </u-form-item>
  19. <u-form-item v-if="policyHolderInfo.property==1" label="证件号" prop="identifyNumber" borderBottom>
  20. <u-input v-model="policyHolderInfo.identifyNumber" border="none" maxlength="18" clearable
  21. placeholder="请输入证件号" placeholderStyle="text-align:right;"></u-input>
  22. </u-form-item>
  23. <u-form-item v-if="policyHolderInfo.property==2" label="社会信用代码" prop="organizationCode" borderBottom
  24. labelWidth="120">
  25. <u-input v-model="policyHolderInfo.organizationCode" border="none" clearable maxlength="18"
  26. placeholder="请输入统一社会信用代码" placeholderStyle="text-align:right;"></u-input>
  27. </u-form-item>
  28. <u-form-item v-if="policyHolderInfo.property==2" label="注册资金" borderBottom>
  29. <u--input v-model="policyHolderInfo.registeredCapital" border="none" clearable placeholder="请输入注册资金"
  30. placeholderStyle="text-align:right;">
  31. </u--input>
  32. <text class="suffixClass">万元</text>
  33. </u-form-item>
  34. <u-form-item label="手机号" prop="mobile" borderBottom>
  35. <u-input v-model="policyHolderInfo.mobile" border="none" clearable placeholder="请输入手机号" maxlength="11"
  36. placeholderStyle="text-align:right;"></u-input>
  37. </u-form-item>
  38. <u-form-item v-if="policyHolderInfo.property==2" label="车主座机" borderBottom>
  39. <u-input v-model="policyHolderInfo.tel" border="none" clearable placeholder="请输入车主座机"
  40. placeholderStyle="text-align:right;"></u-input>
  41. </u-form-item>
  42. <u-form-item v-if="policyHolderInfo.property==2" label="投保人联系人" borderBottom>
  43. <u-input v-model="policyHolderInfo.legalPerson" border="none" clearable placeholder="请输入车主联系人"
  44. placeholderStyle="text-align:right;"></u-input>
  45. </u-form-item>
  46. <u-form-item v-if="policyHolderInfo.property==2" label="联系人证件号码" borderBottom labelWidth="120">
  47. <u-input v-model="policyHolderInfo.leaderIdentifyNumber" border="none" clearable
  48. placeholder="请输入联系人证件号码" placeholderStyle="text-align:right;"></u-input>
  49. </u-form-item>
  50. <u-form-item label="联系人有效期止期" v-if="policyHolderInfo.property==2" prop="leaderOtherEffectiveDate"
  51. borderBottom labelWidth="150" @click="leaderOtherEffectiveDateShow = true; ">
  52. <u--input v-model="policyHolderInfo.leaderOtherEffectiveDate" disabled disabledColor="#ffffff" clearable
  53. suffixIcon='calendar' suffixIconStyle="color:#333;font-size:40rpx" placeholder="选择有效期止期"
  54. placeholderStyle="text-align:right;" border="none" style="pointer-events: none"></u--input>
  55. </u-form-item>
  56. <u-form-item label="省市区" v-if="policyHolderInfo.property==2" borderBottom @click="addressPickershow=true">
  57. <u-input v-model="policyHolderInfos.fullAddress" border="none" clearable placeholder="请选择省市区"
  58. placeholderStyle="text-align:right;" suffixIcon='arrow-down'
  59. suffixIconStyle="color:#333;font-size:30rpx" style="pointer-events: none"></u-input>
  60. </u-form-item>
  61. <u-form-item label="地址" prop="addr" borderBottom>
  62. <u--textarea v-model="policyHolderInfo.addr" border="none" placeholder="请输入地址" autoHeight></u--textarea>
  63. </u-form-item>
  64. <u-form-item label="证件起期" prop="identifyValidDate" borderBottom @click="identifyValidDateShow = true; ">
  65. <u--input v-model="policyHolderInfo.identifyValidDate" disabled disabledColor="#ffffff" clearable
  66. suffixIcon='calendar' suffixIconStyle="color:#333;font-size:40rpx" placeholder="请选择证件起期 "
  67. placeholderStyle="text-align:right;" border="none" style="pointer-events: none"></u--input>
  68. </u-form-item>
  69. <u-form-item label="证件止期" prop="identifyValidEndDate" @click="identifyValidEndDateShow = true; ">
  70. <u--input v-model="policyHolderInfo.identifyValidEndDate" disabled disabledColor="#ffffff" clearable
  71. suffixIcon='calendar' suffixIconStyle="color:#333;font-size:40rpx;margin-right:20px"
  72. placeholder="请选择证件止期 " placeholderStyle="text-align:right;" border="none"
  73. style="pointer-events: none">
  74. </u--input>
  75. <u-checkbox-group v-model="ownerlongTerm" iconPlacement="right" @change="ownerlongTermChange">
  76. <u-checkbox activeColor="#FDE935" iconColor="#333" labelSize="15px" shape="circle" label="长期有效"
  77. name="长期有效"></u-checkbox>
  78. </u-checkbox-group>
  79. </u-form-item>
  80. </u--form>
  81. <!-- 车主类型 -->
  82. <u-picker :show="propertyShow" :columns="propertylist" keyName="label" @cancel="propertyShow=false"
  83. @confirm="propertyConfirm($event,'property','propertyShow')" @close="propertyShow=false"
  84. :closeOnClickOverlay="true"></u-picker>
  85. <u-datetime-picker :show="identifyValidDateShow" v-model="identifyValidDatevalue" mode="date"
  86. :formatter="formatter" @cancel="identifyValidDateShow=false" @close="identifyValidDateShow=false"
  87. :closeOnClickOverlay="true" @confirm="identifyValidDateconfirm" confirmText="确定"></u-datetime-picker>
  88. <u-datetime-picker :show="identifyValidEndDateShow" mode="date" v-model="identifyValidEndDatevalue"
  89. :formatter="formatter" @cancel="identifyValidEndDateShow=false" @confirm="identifyValidEndDateconfirm"
  90. :closeOnClickOverlay="true" @close="identifyValidEndDateShow=false" confirmText="确定"></u-datetime-picker>
  91. <!-- 有效期止期 -->
  92. <u-datetime-picker :show="leaderOtherEffectiveDateShow" v-model="leaderOtherEffectiveDatevalue" mode="date"
  93. :formatter="formatter" @cancel="leaderOtherEffectiveDateShow=false"
  94. @close="leaderOtherEffectiveDateShow=false" :closeOnClickOverlay="true"
  95. @confirm="leaderOtherEffectiveDateconfirm" confirmText="确定"></u-datetime-picker>
  96. <!-- 身份证止期 -->
  97. <!-- 省市区组件 -->
  98. <uni-areaCascadePicker :show="addressPickershow" @confirm="addressConfirm" @close="addressPickershow=false"
  99. @cancel="addressPickershow=false"></uni-areaCascadePicker>
  100. </view>
  101. </template>
  102. <script>
  103. export default {
  104. props: {
  105. policyHolderInfo: Object,
  106. policyHolderInfos: Object,
  107. },
  108. data() {
  109. return {
  110. leaderOtherEffectiveDatevalue: Number(new Date()),
  111. identifyValidDatevalue: Number(new Date()), //证件起期
  112. identifyValidEndDatevalue: Number(new Date()), //证件止期
  113. propertyShow: false, //证件类型
  114. identifyValidDateShow: false, //证件起期
  115. identifyValidEndDateShow: false, //证件止期
  116. leaderOtherEffectiveDateShow: false, //有效期止期
  117. addressPickershow: false, //省市区
  118. ownerlongTerm: [], //车主长期
  119. propertylist: [
  120. [{
  121. label: "个人",
  122. value: "1",
  123. }, {
  124. label: "法人",
  125. value: "2",
  126. }]
  127. ],
  128. policyRules: {
  129. name: [{
  130. required: true,
  131. message: '请输入车主姓名',
  132. trigger: ['blur', 'change'],
  133. },
  134. {
  135. minLength: 2,
  136. maxLength: 5,
  137. message: '车主姓名长度在 {minLength} 到 {maxLength} 个字符',
  138. },
  139. {
  140. pattern: /^([\u4e00-\u9fa5]{1,6}|[a-zA-Z\.\s]{1,6})$/,
  141. message: '请输入正确的车主姓名',
  142. }
  143. ],
  144. organizationCode: [{
  145. required: true,
  146. message: '请输入统一社会信用代码',
  147. trigger: ['blur', 'change'],
  148. }],
  149. identifyNumber: [{
  150. required: true,
  151. message: '请输入车主证件号',
  152. trigger: ['blur', 'change'],
  153. },
  154. {
  155. pattern: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/,
  156. message: '请输入正确的车主证件号',
  157. }
  158. ],
  159. mobile: [{
  160. required: true,
  161. message: '请输入车主手机号',
  162. trigger: ['blur', 'change'],
  163. },
  164. {
  165. pattern: /^1[3-9]\d{9}$/,
  166. message: '请输入正确的手机号',
  167. }
  168. ],
  169. addr: [{
  170. required: true,
  171. message: '请输入车主地址',
  172. trigger: ['blur', 'change'],
  173. },
  174. {
  175. minLength: 8,
  176. maxLength: 40,
  177. message: '车主地址长度在 {minLength} 到 {maxLength} 个字符',
  178. },
  179. ],
  180. identifyValidDate: [{
  181. required: true,
  182. message: '请选择身份证起期',
  183. trigger: ['blur', 'change'],
  184. }, {
  185. pattern: /^\d{4}-\d{2}-\d{2}$/,
  186. message: '身份证起期格式错误',
  187. }],
  188. identifyValidEndDate: [{
  189. required: true,
  190. message: '请选择身份证止期',
  191. trigger: ['blur', 'change'],
  192. }, {
  193. pattern: /^\d{4}-\d{2}-\d{2}$/,
  194. message: '身份证止期格式错误',
  195. }]
  196. },
  197. }
  198. },
  199. methods: {
  200. //省市区选择回调
  201. addressConfirm(value) {
  202. if (value) {
  203. console.log(value);
  204. this.policyHolderInfos.fullAddress = value.fullAddress;
  205. this.policyHolderInfo.provinceCode = value.codes[0];
  206. this.policyHolderInfo.cityCode = value.codes[1];
  207. this.policyHolderInfo.countyCode = value.codes[2];
  208. }
  209. this.addressPickershow = false;
  210. },
  211. propertyConfirm(value, name, showName) {
  212. this.policyHolderInfo[name] = value.value[0].value;
  213. this.policyHolderInfos[name] = value.value[0].label;
  214. this[showName] = false;
  215. if (value.value[0].value == '1') { //个人
  216. this.policyHolderInfos.identifyType = "身份证";
  217. this.policyHolderInfo.identifyType = "01";
  218. } else {
  219. this.policyHolderInfos.identifyType = "营业执照";
  220. this.policyHolderInfo.identifyType = "10";
  221. }
  222. },
  223. ownerlongTermChange(e) {
  224. if (e.length) {
  225. this.policyHolderInfo.identifyValidEndDate = '9999-12-31';
  226. } else {
  227. this.policyHolderInfo.identifyValidEndDate = '';
  228. }
  229. },
  230. identifyValidDateconfirm(e) {
  231. this.policyHolderInfo.identifyValidDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd');
  232. this.identifyValidDateShow = false;
  233. },
  234. identifyValidEndDateconfirm(e) {
  235. this.policyHolderInfo.identifyValidEndDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd');
  236. this.identifyValidEndDateShow = false;
  237. },
  238. leaderOtherEffectiveDateconfirm(e) {
  239. this.ownerInfo.leaderOtherEffectiveDate = uni.$u.timeFormat(e.value, 'yyyy-mm-dd');
  240. this.leaderOtherEffectiveDateShow = false;
  241. },
  242. formatter(type, value) {
  243. if (type === 'year') {
  244. return `${value}年`
  245. }
  246. if (type === 'month') {
  247. return `${value}月`
  248. }
  249. if (type === 'day') {
  250. return `${value}日`
  251. }
  252. return value
  253. },
  254. validate(callback) {
  255. this.$refs.policyForm.setRules(this.policyRules)
  256. this.$refs.policyForm.validate().then(res => {
  257. callback(res)
  258. }).catch(errors => {
  259. callback(errors)
  260. })
  261. }
  262. },
  263. }
  264. </script>
  265. <style scoped lang="scss">
  266. ::v-deep {
  267. .u-textarea {
  268. text-align: right;
  269. padding: 0;
  270. color: #303133;
  271. }
  272. .uni-textarea-placeholder {
  273. color: grey !important;
  274. text-align: right;
  275. }
  276. }
  277. /* 添加样式 */
  278. .search {
  279. width: 112rpx;
  280. height: 60rpx;
  281. background: #FDE935;
  282. border-radius: 100rpx 100rpx 100rpx 100rpx;
  283. }
  284. .suffixClass {
  285. margin-left: 10rpx;
  286. font-size: 30rpx;
  287. }
  288. </style>