@dongkboy 1 an în urmă
părinte
comite
e87ad1048e

+ 203 - 0
components/common/commonFormItem/ApplicantInfoForm.vue

@@ -0,0 +1,203 @@
+<template>
+	<u-form :model="policyHolderInfo" :rules="policyRules" ref="policyForm" :errorType="errorType" label-width="200"
+		style="padding: 0 15px;">
+		<u-form-item label="姓名:" prop="name">
+			<u-input placeholder="请输入姓名" v-model="policyHolderInfo.name" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="证件类型:" prop="identifyType" style="padding: 14rpx 0;">
+			<view class="dis a-c j-end" style="width:100%;height: 100%;">
+				身份证
+			</view>
+		</u-form-item>
+		<u-form-item label="证件号:" prop="identifyNumber">
+			<u-input placeholder="请输入证件号" v-model="policyHolderInfo.identifyNumber" type="text"
+				:custom-style="{textAlign:'right'}"
+				@blur="binddata('identifyNumber', $event,'policyHolderInfo')"></u-input>
+		</u-form-item>
+		<u-form-item label="年龄:" prop="age">
+			<u-input placeholder="请输入年龄" v-model="policyHolderInfo.age" disabled type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="性别:" prop="gender">
+			<u-input placeholder="请输入性别" v-model="policyHolderInfo.gender" disabled type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="手机号:" prop="mobile">
+			<u-input placeholder="请输入手机号" v-model="policyHolderInfo.mobile" type="text" maxlength="11"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="地址:" prop="addr">
+			<u-input type="textarea" v-model="policyHolderInfo.addr" :custom-style="{textAlign:'right'}"
+				placeholder-style="color:#808080" :auto-height="true" placeholder="请输入地址" />
+		</u-form-item>
+		<u-form-item label="邮箱:">
+			<u-input placeholder="请输入邮箱" v-model="policyHolderInfo.email" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="有效期起期:" prop="identifyValidDate">
+			<u-input type="select" :select-open="applicantDateShow" v-model="policyHolderInfo.identifyValidDate"
+				placeholder="请选择有效期起期" @click="applicantDateShow = true" :custom-style="{textAlign:'right'}"
+				placeholder-style="color:#808080"></u-input>
+			<u-picker v-model="applicantDateShow" mode="time" :params="params"
+				@confirm="e=> Dateconfirm(e,'policyHolderInfo','identifyValidDate')"></u-picker>
+		</u-form-item>
+		<u-form-item label="有效期止期:" prop="identifyValidEndDate">
+			<u-input placeholder="有效期止期" v-model="policyHolderInfo.identifyValidEndDate" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="止期年限:" style="padding: 10rpx 0;">
+			<view class="dis a-c j-c">
+				<view class="status-data" :class="item.value==policyValidEndDateholder? 'active':''"
+					v-for="(item,index) in endDateList"
+					@tap="ValidEndDateClick(item.value,'policyValidEndDateholder','policyHolderInfo')" :key="index">
+					{{item.label}}
+				</view>
+			</view>
+		</u-form-item>
+	</u-form>
+</template>
+
+<script>
+	export default {
+		props: {
+			policyHolderInfo: Object,
+			Dateconfirm: Function,
+			binddata: Function,
+			endDateList: Array,
+			ValidEndDateClick: Function,
+			policyValidEndDateholder: {
+				type: String,
+				default: null,
+			},
+			errorType: {
+				type: Array,
+				default: () => ['border-bottom', 'toast'],
+			},
+		},
+		data() {
+			return {
+				applicantDateShow: false,
+				params: {
+					year: true, //年
+					month: true, //月
+					day: true, //日
+					hour: false, //时
+					minute: false, //分
+					second: false, //秒
+				},
+				policyRules: {
+					name: [{
+							required: true,
+							message: '请输入车主姓名',
+							trigger: ['blur', 'change'],
+						},
+						{
+							minLength: 2,
+							maxLength: 5,
+							message: '车主姓名长度在 {minLength} 到 {maxLength} 个字符',
+						},
+						{
+							pattern: /^([\u4e00-\u9fa5]{1,6}|[a-zA-Z\.\s]{1,6})$/,
+							message: '请输入正确的车主姓名',
+						}
+					],
+					identifyNumber: [{
+							required: true,
+							message: '请输入车主证件号',
+							trigger: ['blur', 'change'],
+						},
+						{
+							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]$/,
+							message: '请输入正确的车主证件号',
+						}
+					],
+					mobile: [{
+							required: true,
+							message: '请输入车主手机号',
+							trigger: ['blur', 'change'],
+						},
+						{
+							pattern: /^1[3-9]\d{9}$/,
+							message: '请输入正确的手机号',
+						}
+					],
+					addr: [{
+							required: true,
+							message: '请输入车主地址',
+							trigger: ['blur', 'change'],
+						},
+						{
+							minLength: 8,
+							maxLength: 40,
+							message: '车主地址长度在 {minLength} 到 {maxLength} 个字符',
+						},
+					],
+					identifyValidDate: [{
+						required: true,
+						message: '请选择身份证起期',
+						trigger: ['blur', 'change'],
+					}, {
+						pattern: /^\d{4}-\d{2}-\d{2}$/,
+						message: '身份证起期格式错误',
+					}],
+					identifyValidEndDate: [{
+						required: true,
+						message: '请选择身份证止期',
+						trigger: ['blur', 'change'],
+					}, {
+						pattern: /^\d{4}-\d{2}-\d{2}$/,
+						message: '身份证止期格式错误',
+					}]
+				},
+			}
+		},
+		methods: {
+			validate(callback) {
+				this.$refs.policyForm.setRules(this.policyRules);
+				this.$refs.policyForm.validate(valid => {
+					if (callback) {
+						callback(valid);
+					}
+				});
+			},
+			setRules(rules) {
+				// 更新规则逻辑
+				this.policyRules = rules; // 或者根据需要
+			},
+		},
+	}
+</script>
+
+<style scoped lang="scss">
+	/* 添加样式 */
+	.status-data {
+		width: 66px;
+		height: 30px;
+		margin: 0 7px;
+		font-size: 14px;
+		border: 1px solid #CDCDCD;
+		cursor: pointer;
+		text-align: center;
+		line-height: 30px;
+	}
+
+	.active {
+		position: relative;
+		background: rgba(0, 82, 255, 0.1);
+		color: #0052FF;
+		border: 1px solid #0052FF;
+		font-weight: 700;
+	}
+
+	.active::before {
+		content: "";
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 10px;
+		height: 10px;
+		background-image: url("/static/image/car-insure/before.png");
+		background-size: cover;
+	}
+</style>

+ 257 - 0
components/common/commonFormItem/CarInfoForm.vue

@@ -0,0 +1,257 @@
+<template>
+	<u-form :model="carInfo" :rules="carRules" ref="carForm" :errorType="errorType" label-width="200"
+		style="padding: 0 15px;">
+		<u-form-item label-width="120" label="车牌号:">
+			<u-input placeholder="输入车牌号" v-model="carInfo.licenseNo" type="text" :custom-style="{textAlign:'right'}"
+				@input="upperCaseType('licenseNo')"></u-input>
+		</u-form-item>
+		<u-form-item label="品牌型号:" prop="modelcname">
+			<u-input placeholder="请输入品牌型号" v-model="carInfo.modelcname" type="text" :custom-style="{textAlign:'right'}"
+				@input="upperCaseType('modelcname')"></u-input>
+			<view class="search ml-1" @tap="toChooseVehicleType(carInfo.modelcname)">查询</view>
+		</u-form-item>
+		<u-form-item label="车辆识别码:" prop="frameNo">
+			<u-input placeholder="请输入车辆识别码" v-model="carInfo.frameNo" type="text" :custom-style="{textAlign:'right'}"
+				@input="upperCaseType('frameNo')"></u-input>
+			<view class="search ml-1" @tap="toChooseVin(carInfo.frameNo)">查询</view>
+		</u-form-item>
+		<u-form-item label="发动机号:" prop="engineNo">
+			<u-input placeholder="请输入发动机号" v-model="carInfo.engineNo" type="text" :custom-style="{textAlign:'right'}"
+				@input="upperCaseType('engineNo')"></u-input>
+		</u-form-item>
+		<u-form-item label="注册日期:" prop="registerDate">
+			<u-input type="select" :custom-style="{textAlign:'right'}" :select-open="registerDateShow"
+				v-model="carInfo.registerDate" placeholder="请选择注册日期" @click="registerDateShow = true"
+				placeholder-style="color:#808080"></u-input>
+			<u-picker v-model="registerDateShow" mode="time" :params="params" :end-year="endYear" :end-month="endMonth"
+				@confirm="e => Dateconfirm(e, 'carInfo', 'registerDate')"></u-picker>
+		</u-form-item>
+		<u-form-item label="发证日期:" prop="issueDate">
+			<u-input type="select" :custom-style="{textAlign:'right'}" :select-open="issueDateShow"
+				v-model="carInfo.issueDate" placeholder="请选择发证日期" @click="issueDateShow = true"
+				placeholder-style="color:#808080"></u-input>
+			<u-picker v-model="issueDateShow" mode="time" :params="params"
+				@confirm="e => Dateconfirm(e, 'carInfo', 'issueDate')"></u-picker>
+		</u-form-item>
+		<u-form-item label="整备质量:" prop="completeKerbMass">
+			<u-input placeholder="请输入整备质量" v-model="carInfo.completeKerbMass" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="核定载质量:" prop="limitLoad">
+			<u-input placeholder="请输入核定载质量" v-model="carInfo.limitLoad" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="使用性质:" prop="carnature">
+			<u-input v-model="carInfos.carnature" type="select" :select-open="carnatureShow"
+				@click="carnatureShow = true" :custom-style="{textAlign:'right'}" placeholder-style="color:#808080"
+				placeholder="请选择使用性质" />
+			<u-select mode="single-column" :list="natureOfVehicleUseoptions" v-model="carnatureShow"
+				label-name="dictTag" value-name="dictValue"
+				@confirm="dictionaryConfirm($event, 'carnature')"></u-select>
+		</u-form-item>
+		<u-form-item label="能源种类:" prop="energyType">
+			<u-input v-model="carInfos.energyType" type="select" :select-open="energyTypeShow"
+				@click="energyTypeShow = true" :custom-style="{textAlign:'right'}" placeholder-style="color:#808080"
+				placeholder="请选择能源种类" />
+			<u-select mode="single-column" :list="energyTypeoptions" v-model="energyTypeShow" label-name="dictTag"
+				value-name="dictValue" @confirm="dictionaryConfirm($event, 'energyType')"></u-select>
+		</u-form-item>
+		<u-form-item label="车辆用途:" prop="vehicleUse">
+			<u-input v-model="carInfos.vehicleUse" type="select" :select-open="vehicleUseShow"
+				@click="vehicleUseShow = true" :custom-style="{textAlign:'right'}" placeholder-style="color:#808080"
+				placeholder="请选择车辆用途" />
+			<u-select v-if="carInfo.carnature === '01'" mode="single-column" :list="businessVehicleUseoptions"
+				v-model="vehicleUseShow" label-name="dictTag" value-name="dictValue"
+				@confirm="dictionaryConfirm($event, 'vehicleUse')"></u-select>
+			<u-select v-else mode="single-column" :list="outOfBusinessVehicleUseoptions" v-model="vehicleUseShow"
+				label-name="dictTag" value-name="dictValue"
+				@confirm="dictionaryConfirm($event, 'vehicleUse')"></u-select>
+		</u-form-item>
+		<u-form-item label="车辆类型:" prop="cartype">
+			<u-input v-model="carInfos.cartype" type="select" :select-open="cartypeShow" @click="cartypeShow = true"
+				:custom-style="{textAlign:'right'}" placeholder-style="color:#808080" placeholder="请选择车辆类型" />
+			<u-select mode="single-column" :searchShow="true" :list="trafficManagementVehicleTypeoptions"
+				v-model="cartypeShow" label-name="dictTag" value-name="dictValue"
+				@confirm="dictionaryConfirm($event, 'cartype')"></u-select>
+		</u-form-item>
+		<u-form-item label="车辆种类:" prop="cimodelclass">
+			<u-input v-model="carInfos.cimodelclass" type="select" :select-open="cimodelclassShow"
+				@click="cimodelclassShow = true" :custom-style="{textAlign:'right'}" placeholder-style="color:#808080"
+				placeholder="请选择车辆种类" />
+			<u-select mode="single-column" :list="vehicleTypeoptions" v-model="cimodelclassShow" label-name="dictTag"
+				value-name="dictValue" @confirm="dictionaryConfirm($event, 'cimodelclass')"></u-select>
+		</u-form-item>
+		<u-form-item label="年款:">
+			<u-input type="text" placeholder="请输入年款" v-model="carInfo.caryear"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="座位数:">
+			<u-input type="text" placeholder="请输入座位数" v-model="carInfo.seatCount"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="排量:">
+			<u-input type="text" placeholder="请输入排量" v-model="carInfo.enginedesc"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="功率:">
+			<u-input type="text" placeholder="请输入功率" v-model="carInfo.powerScale"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="新车购置价:" prop="purchasePrice">
+			<u-input type="text" placeholder="请输入新车购置价" v-model="carInfo.purchasePrice"
+				:custom-style="{textAlign:'right'}" @input="upperCaseType('purchasePrice')"></u-input>
+		</u-form-item>
+	</u-form>
+</template>
+
+<script>
+	var dateTime = new Date();
+	let Year = dateTime.getFullYear();
+	let Month = Number(dateTime.getMonth() + 1);
+	export default {
+		props: {
+			carInfo: Object,
+			upperCaseType: Function,
+			toChooseVehicleType: Function,
+			toChooseVin: Function,
+			dictionaryConfirm: Function,
+			Dateconfirm: Function,
+			natureOfVehicleUseoptions: Array,
+			energyTypeoptions: Array,
+			trafficManagementVehicleTypeoptions: Array,
+			vehicleTypeoptions: Array,
+			businessVehicleUseoptions: Array,
+			outOfBusinessVehicleUseoptions: Array,
+			carInfos: Object,
+			errorType: {
+				type: Array,
+				default: () => ['border-bottom', 'toast'],
+			},
+		},
+		data() {
+			return {
+				registerDateShow: false,
+				issueDateShow: false,
+				carnatureShow: false,
+				energyTypeShow: false,
+				vehicleUseShow: false,
+				cartypeShow: false,
+				cimodelclassShow: false,
+				params: {
+					year: true, //年
+					month: true, //月
+					day: true, //日
+					hour: false, //时
+					minute: false, //分
+					second: false, //秒
+				},
+				endYear: Year,
+				endMonth: Month,
+				carRules: {
+					frameNo: [{
+							required: true,
+							message: '请输入车辆识别码',
+							trigger: ['blur', 'change'],
+						},
+						{
+							pattern: /^([0-9A-Z]){17}$/,
+							message: '请输入正确的车辆识别码',
+						}
+					],
+					modelcname: [{
+						required: true,
+						message: '请输入品牌型号',
+						trigger: ['blur', 'change'],
+					}],
+					engineNo: [{
+						required: true,
+						message: '请输入发动机号',
+						trigger: ['blur', 'change'],
+					}],
+					purchasePrice: [{
+							required: true,
+							message: '请输入新车购置价',
+							trigger: ['blur', 'change'],
+						},
+
+					],
+					completeKerbMass: [{
+						required: true,
+						message: '请输入整备质量',
+						trigger: ['blur', 'change'],
+					}],
+					carnature: [{
+						required: true,
+						message: '使用性质必选',
+						trigger: 'change',
+					}],
+					energyType: [{
+						required: true,
+						message: '能源种类必选',
+						trigger: 'change',
+					}],
+					vehicleUse: [{
+						required: true,
+						message: '车辆用途必选',
+						trigger: 'change',
+					}],
+					cartype: [{
+						required: true,
+						message: '车辆类型必选',
+						trigger: 'change',
+					}],
+					cimodelclass: [{
+						required: true,
+						message: '车辆种类必选',
+						trigger: 'change',
+					}],
+					registerDate: [{
+							required: true,
+							message: '请选择注册日期',
+							trigger: 'change',
+						},
+						{
+							pattern: /^\d{4}-\d{2}-\d{2}$/,
+							message: '注册日期格式错误',
+						}
+					],
+					issueDate: [{
+							required: true,
+							message: '请选择发证日期',
+							trigger: 'change',
+						},
+						{
+							pattern: /^\d{4}-\d{2}-\d{2}$/,
+							message: '发证日期日期格式错误',
+						}
+					],
+				},
+			}
+		},
+		methods: {
+			validate(callback) {
+				this.$refs.carForm.setRules(this.carRules);
+				this.$refs.carForm.validate(valid => {
+					if (callback) {
+						callback(valid);
+					}
+				});
+			},
+			setRules(rules) {
+				// 更新规则逻辑
+				this.carRules = rules; // 或者根据需要
+			},
+		},
+	}
+</script>
+
+<style scoped lang="scss">
+	/* 添加样式 */
+	.search {
+		background: linear-gradient(270deg, #FF9A47 0%, #FF5600 100%);
+		border-radius: 2px;
+		color: #fff;
+		font-size: 22rpx;
+		padding: 1px 6px;
+	}
+</style>

+ 203 - 0
components/common/commonFormItem/InsuredInfoForm.vue

@@ -0,0 +1,203 @@
+<template>
+	<u-form :model="insuredPersonInfo" :rules="insuredRules" ref="insuredForm" :errorType="errorType" label-width="200"
+		style="padding: 0 15px;">
+		<u-form-item label="姓名:" prop="name">
+			<u-input placeholder="请输入姓名" v-model="insuredPersonInfo.name" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="证件类型:" prop="identifyType" style="padding: 14rpx 0;">
+			<view class="dis a-c j-end" style="width:100%;height: 100%;">
+				身份证
+			</view>
+		</u-form-item>
+		<u-form-item label="证件号:" prop="identifyNumber">
+			<u-input placeholder="请输入证件号" v-model="insuredPersonInfo.identifyNumber" type="text"
+				:custom-style="{textAlign:'right'}"
+				@blur="binddata('identifyNumber', $event,'insuredPersonInfo')"></u-input>
+		</u-form-item>
+		<u-form-item label="年龄:" prop="age">
+			<u-input placeholder="请输入年龄" v-model="insuredPersonInfo.age" disabled type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="性别:" prop="gender">
+			<u-input placeholder="请输入性别" v-model="insuredPersonInfo.gender" disabled type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="手机号:" prop="mobile">
+			<u-input placeholder="请输入手机号" v-model="insuredPersonInfo.mobile" type="text" maxlength="11"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="地址:" prop="addr">
+			<u-input type="textarea" v-model="insuredPersonInfo.addr" :custom-style="{textAlign:'right'}"
+				placeholder-style="color:#808080" :auto-height="true" placeholder="请输入地址" />
+		</u-form-item>
+		<u-form-item label="邮箱:">
+			<u-input placeholder="请输入邮箱" v-model="insuredPersonInfo.email" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="有效期起期:" prop="identifyValidDate">
+			<u-input type="select" :select-open="InsuredDateShow" v-model="insuredPersonInfo.identifyValidDate"
+				placeholder="请选择有效期起期" @click="InsuredDateShow = true" :custom-style="{textAlign:'right'}"
+				placeholder-style="color:#808080"></u-input>
+			<u-picker v-model="InsuredDateShow" mode="time" :params="params"
+				@confirm="e=> Dateconfirm(e,'insuredPersonInfo','identifyValidDate')"></u-picker>
+		</u-form-item>
+		<u-form-item label="有效期止期:" prop="identifyValidEndDate">
+			<u-input placeholder="有效期止期" v-model="insuredPersonInfo.identifyValidEndDate" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="止期年限:" style="padding: 10rpx 0;">
+			<view class="dis a-c j-c">
+				<view class="status-data" :class="item.value==insuredValidEndDateholder? 'active':''"
+					v-for="(item,index) in endDateList"
+					@tap="ValidEndDateClick(item.value,'insuredValidEndDateholder','insuredPersonInfo')" :key="index">
+					{{item.label}}
+				</view>
+			</view>
+		</u-form-item>
+	</u-form>
+</template>
+
+<script>
+	export default {
+		props: {
+			insuredPersonInfo: Object,
+			Dateconfirm: Function,
+			binddata: Function,
+			endDateList: Array,
+			ValidEndDateClick: Function,
+			insuredValidEndDateholder: {
+				type: String,
+				default: null,
+			},
+			errorType: {
+				type: Array,
+				default: () => ['border-bottom', 'toast'],
+			},
+		},
+		data() {
+			return {
+				InsuredDateShow: false,
+				params: {
+					year: true, //年
+					month: true, //月
+					day: true, //日
+					hour: false, //时
+					minute: false, //分
+					second: false, //秒
+				},
+				insuredRules: {
+					name: [{
+							required: true,
+							message: '请输入车主姓名',
+							trigger: ['blur', 'change'],
+						},
+						{
+							minLength: 2,
+							maxLength: 5,
+							message: '车主姓名长度在 {minLength} 到 {maxLength} 个字符',
+						},
+						{
+							pattern: /^([\u4e00-\u9fa5]{1,6}|[a-zA-Z\.\s]{1,6})$/,
+							message: '请输入正确的车主姓名',
+						}
+					],
+					identifyNumber: [{
+							required: true,
+							message: '请输入车主证件号',
+							trigger: ['blur', 'change'],
+						},
+						{
+							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]$/,
+							message: '请输入正确的车主证件号',
+						}
+					],
+					mobile: [{
+							required: true,
+							message: '请输入车主手机号',
+							trigger: ['blur', 'change'],
+						},
+						{
+							pattern: /^1[3-9]\d{9}$/,
+							message: '请输入正确的手机号',
+						}
+					],
+					addr: [{
+							required: true,
+							message: '请输入车主地址',
+							trigger: ['blur', 'change'],
+						},
+						{
+							minLength: 8,
+							maxLength: 40,
+							message: '车主地址长度在 {minLength} 到 {maxLength} 个字符',
+						},
+					],
+					identifyValidDate: [{
+						required: true,
+						message: '请选择身份证起期',
+						trigger: ['blur', 'change'],
+					}, {
+						pattern: /^\d{4}-\d{2}-\d{2}$/,
+						message: '身份证起期格式错误',
+					}],
+					identifyValidEndDate: [{
+						required: true,
+						message: '请选择身份证止期',
+						trigger: ['blur', 'change'],
+					}, {
+						pattern: /^\d{4}-\d{2}-\d{2}$/,
+						message: '身份证止期格式错误',
+					}]
+				},
+			}
+		},
+		methods: {
+			validate(callback) {
+				this.$refs.insuredForm.setRules(this.insuredRules);
+				this.$refs.insuredForm.validate(valid => {
+					if (callback) {
+						callback(valid);
+					}
+				});
+			},
+			setRules(rules) {
+				// 更新规则逻辑
+				this.insuredRules = rules; // 或者根据需要
+			},
+		},
+	}
+</script>
+
+<style scoped lang="scss">
+	/* 添加样式 */
+	.status-data {
+		width: 66px;
+		height: 30px;
+		margin: 0 7px;
+		font-size: 14px;
+		border: 1px solid #CDCDCD;
+		cursor: pointer;
+		text-align: center;
+		line-height: 30px;
+	}
+
+	.active {
+		position: relative;
+		background: rgba(0, 82, 255, 0.1);
+		color: #0052FF;
+		border: 1px solid #0052FF;
+		font-weight: 700;
+	}
+
+	.active::before {
+		content: "";
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 10px;
+		height: 10px;
+		background-image: url("/static/image/car-insure/before.png");
+		background-size: cover;
+	}
+</style>

+ 202 - 0
components/common/commonFormItem/OwnerInfoForm.vue

@@ -0,0 +1,202 @@
+<template>
+	<u-form :model="ownerInfo" :rules="ownerRules" ref="ownerForm" :errorType="errorType" label-width="200"
+		style="padding: 0 15px;">
+		<u-form-item label="姓名:" prop="name">
+			<u-input placeholder="请输入姓名" v-model="ownerInfo.name" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="证件类型:" prop="identifyType" style="padding: 14rpx 0;">
+			<view class="dis a-c j-end" style="width:100%;height: 100%;">
+				身份证
+			</view>
+		</u-form-item>
+		<u-form-item label="证件号:" prop="identifyNumber">
+			<u-input placeholder="请输入证件号" v-model="ownerInfo.identifyNumber" type="text"
+				:custom-style="{textAlign:'right'}" @blur="binddata('identifyNumber', $event,'ownerInfo')"></u-input>
+		</u-form-item>
+		<u-form-item label="年龄:" prop="age">
+			<u-input placeholder="请输入年龄" v-model="ownerInfo.age" disabled type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="性别:" prop="gender">
+			<u-input placeholder="请输入性别" v-model="ownerInfo.gender" disabled type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="手机号:" prop="mobile">
+			<u-input placeholder="请输入手机号" v-model="ownerInfo.mobile" type="text" maxlength="11"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="地址:" prop="addr">
+			<u-input type="textarea" v-model="ownerInfo.addr" :custom-style="{textAlign:'right'}"
+				placeholder-style="color:#808080" :auto-height="true" placeholder="请输入地址" />
+		</u-form-item>
+		<u-form-item label="邮箱:">
+			<u-input placeholder="请输入邮箱" v-model="ownerInfo.email" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="有效期起期:" prop="identifyValidDate">
+			<u-input type="select" :select-open="ownerDateShow" v-model="ownerInfo.identifyValidDate"
+				placeholder="请选择有效期起期" @click="ownerDateShow = true" :custom-style="{textAlign:'right'}"
+				placeholder-style="color:#808080"></u-input>
+			<u-picker v-model="ownerDateShow" mode="time" :params="params"
+				@confirm="e=> Dateconfirm(e,'ownerInfo','identifyValidDate')"></u-picker>
+		</u-form-item>
+		<u-form-item label="有效期止期:" prop="identifyValidEndDate">
+			<u-input placeholder="有效期止期" v-model="ownerInfo.identifyValidEndDate" type="text"
+				:custom-style="{textAlign:'right'}"></u-input>
+		</u-form-item>
+		<u-form-item label="止期年限:" style="padding: 10rpx 0;">
+			<view class="dis a-c j-c">
+				<view class="status-data" :class="item.value==ownerValidEndDateholder? 'active':''"
+					v-for="(item,index) in endDateList"
+					@tap="ValidEndDateClick(item.value,'ownerValidEndDateholder','ownerInfo')" :key="index">
+					{{item.label}}
+				</view>
+			</view>
+		</u-form-item>
+	</u-form>
+</template>
+
+<script>
+	export default {
+		props: {
+			ownerInfo: Object,
+			Dateconfirm: Function,
+			binddata: Function,
+			endDateList: Array,
+			ValidEndDateClick: Function,
+			ownerValidEndDateholder: {
+				type: String,
+				default: null,
+			},
+			errorType: {
+				type: Array,
+				default: () => ['border-bottom', 'toast'],
+			},
+		},
+		data() {
+			return {
+				ownerDateShow: false,
+				params: {
+					year: true, //年
+					month: true, //月
+					day: true, //日
+					hour: false, //时
+					minute: false, //分
+					second: false, //秒
+				},
+				ownerRules: {
+					name: [{
+							required: true,
+							message: '请输入车主姓名',
+							trigger: ['blur', 'change'],
+						},
+						{
+							minLength: 2,
+							maxLength: 5,
+							message: '车主姓名长度在 {minLength} 到 {maxLength} 个字符',
+						},
+						{
+							pattern: /^([\u4e00-\u9fa5]{1,6}|[a-zA-Z\.\s]{1,6})$/,
+							message: '请输入正确的车主姓名',
+						}
+					],
+					identifyNumber: [{
+							required: true,
+							message: '请输入车主证件号',
+							trigger: ['blur', 'change'],
+						},
+						{
+							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]$/,
+							message: '请输入正确的车主证件号',
+						}
+					],
+					mobile: [{
+							required: true,
+							message: '请输入车主手机号',
+							trigger: ['blur', 'change'],
+						},
+						{
+							pattern: /^1[3-9]\d{9}$/,
+							message: '请输入正确的手机号',
+						}
+					],
+					addr: [{
+							required: true,
+							message: '请输入车主地址',
+							trigger: ['blur', 'change'],
+						},
+						{
+							minLength: 8,
+							maxLength: 40,
+							message: '车主地址长度在 {minLength} 到 {maxLength} 个字符',
+						},
+					],
+					identifyValidDate: [{
+						required: true,
+						message: '请选择身份证起期',
+						trigger: ['blur', 'change'],
+					}, {
+						pattern: /^\d{4}-\d{2}-\d{2}$/,
+						message: '身份证起期格式错误',
+					}],
+					identifyValidEndDate: [{
+						required: true,
+						message: '请选择身份证止期',
+						trigger: ['blur', 'change'],
+					}, {
+						pattern: /^\d{4}-\d{2}-\d{2}$/,
+						message: '身份证止期格式错误',
+					}]
+				},
+			}
+		},
+		methods: {
+			validate(callback) {
+				this.$refs.ownerForm.setRules(this.ownerRules);
+				this.$refs.ownerForm.validate(valid => {
+					if (callback) {
+						callback(valid);
+					}
+				});
+			},
+			setRules(rules) {
+				// 更新规则逻辑
+				this.ownerRules = rules; // 或者根据需要
+			},
+		},
+	}
+</script>
+
+<style scoped lang="scss">
+	/* 添加样式 */
+	.status-data {
+		width: 66px;
+		height: 30px;
+		margin: 0 7px;
+		font-size: 14px;
+		border: 1px solid #CDCDCD;
+		cursor: pointer;
+		text-align: center;
+		line-height: 30px;
+	}
+
+	.active {
+		position: relative;
+		background: rgba(0, 82, 255, 0.1);
+		color: #0052FF;
+		border: 1px solid #0052FF;
+		font-weight: 700;
+	}
+
+	.active::before {
+		content: "";
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 10px;
+		height: 10px;
+		background-image: url("/static/image/car-insure/before.png");
+		background-size: cover;
+	}
+</style>

+ 6 - 6
config/baseUrl.js

@@ -4,26 +4,26 @@ let socketUrl = "";
 if (process.env.NODE_ENV === 'development') {
 	// 开发环境
 	// baseUrl = "https://test.baoxianzhanggui.com/dx/"; //屈晨
-	baseUrl = "http://192.168.0.115:8090"; //董鑫
+	// baseUrl = "https://test.baoxianzhanggui.com/test/"
 	// baseUrl = "http://192.168.0.253:8080"; //田智
 	// baseUrl = "https://test.baoxianzhanggui.com/web-api"; //测试
 	// h5BaseUrl = "https://test.baoxianzhanggui.com/h5";
 	// baseUrl = "https://pre.baoxianzhanggui.com/web-api"; //预生产
 	// h5BaseUrl = "https://pre.baoxianzhanggui.com/h5";
 	// baseUrl = "https://pre.baoxianzhanggui.com/test"; //生产
-	// baseUrl = "https://sxzgkj.baoxianzhanggui.com/web-api"; //生产
-	// h5BaseUrl = "https://sxzgkj.baoxianzhanggui.com/h5";
+	baseUrl = "https://sxzgkj.baoxianzhanggui.com/web-api"; //生产
+	h5BaseUrl = "https://sxzgkj.baoxianzhanggui.com/h5";
 	socketUrl = "wss://sxzgkj.baoxianzhanggui.com/web-api/websocket";
 	// socketUrl = "ws://192.168.0.52:8080/websocket";
 } else if (process.env.NODE_ENV === 'production') {
 	// 生产环境
-	baseUrl = "http://192.168.0.115:8090"; //董鑫
+	// baseUrl = "http://192.168.0.115:8090"; //董鑫
 	// baseUrl = "https://test.baoxianzhanggui.com/web-api"; //测试
 	// h5BaseUrl = "https://test.baoxianzhanggui.com/h5";
 	// baseUrl = "https://pre.baoxianzhanggui.com/web-api"; //预生产
 	// h5BaseUrl = "https://pre.baoxianzhanggui.com/h5";
-	// baseUrl = "https://sxzgkj.baoxianzhanggui.com/web-api"; //生产
-	// h5BaseUrl = "https://sxzgkj.baoxianzhanggui.com/h5";
+	baseUrl = "https://sxzgkj.baoxianzhanggui.com/web-api"; //生产
+	h5BaseUrl = "https://sxzgkj.baoxianzhanggui.com/h5";
 	socketUrl = "wss://sxzgkj.baoxianzhanggui.com/web-api/websocket";
 }
 const courtConfig = {

+ 7 - 12
main.js

@@ -2,10 +2,7 @@ import Vue from 'vue'
 import uView from "uview-ui";
 Vue.use(uView);
 import App from './App'
-import {
-	addPermisionInterceptor,
-	removePermisionInterceptor
-} from '@/uni_modules/x-perm-apply-instr/js_sdk/index.js'
+import PermissionHandler from '@/uni_modules/x-perm-apply-instr/js_sdk/index.js'
 //数据管理中心
 import store from '@/store'
 Vue.prototype.$store = store;
@@ -88,11 +85,9 @@ plus.nativeUI.toast = (function(str) {
 });
 // #endif
 
-addPermisionInterceptor('chooseImage', '为了正确识别证件内容,实现图片转文字功能等, 我们需要申请您设备的相机和存储权限')
-addPermisionInterceptor('chooseVideo', '为了发布信息图片视频等, 我们需要申请您设备的相机和存储权限')
-addPermisionInterceptor('saveImageToPhotosAlbum', '为了保存推广海报到手机相册, 我们需要申请您设备的存储权限')
-addPermisionInterceptor('getLocation', '为了根据您的位置展示信息, 我们需要申请您设备的位置权限')
-addPermisionInterceptor('makePhoneCall', '为了联系客服/用户/咨询等, 我们需要申请您设备的拨打电话权限')
-addPermisionInterceptor('getRecorderManager', '为了使用语言消息功能等, 我们需要申请您设备的麦克风权限')
-addPermisionInterceptor('startLocationUpdate', '为了根据您的位置展示信息, 我们需要申请您设备的位置权限')
-addPermisionInterceptor('scanCode', '为了识别二维码信息, 我们需要申请您设备的相机权限')
+// 添加权限拦截器
+PermissionHandler.addPermissionInterceptor('chooseImage');
+PermissionHandler.addPermissionInterceptor('chooseVideo');
+PermissionHandler.addPermissionInterceptor('saveImageToPhotosAlbum');
+PermissionHandler.addPermissionInterceptor('getLocation');
+PermissionHandler.addPermissionInterceptor('getRecorderManager');

+ 221 - 224
manifest.json

@@ -1,226 +1,223 @@
 {
-    "name" : "晋掌柜",
-    "appid" : "__UNI__D4FE29A",
-    "description" : "保险类app",
-    "transformPx" : false,
-    "icons" : [
-        {
-            "sizes" : "分辨率,192x192",
-            "src" : "图片路径"
-        }
-    ],
-    "versionName" : "3.1.6",
-    "versionCode" : 316,
-    "app-plus" : {
-        "error" : {
-            "url" : "hybrid/html/error.html"
-        },
-        "compatible" : {
-            "ignoreVersion" : true
-        },
-        "privacy" : {
-            "prompt" : "template",
-            "template" : {
-                "title" : "平台协议和隐私协议",
-                "message" : "欢迎使用晋掌柜app,我们非常重视您的个人信息和隐私保护。我们将通过《隐私权保护政策》帮助您了解我们收集、使用、存储、共享和保护个人信息的情况,以及您所享有的相关权利。<br/> 为了更好的向您提供注册认证、线上投保、以及周边服务等相关服务功能,我们会收集、使用必要的信息。包括但不限于:<br/>1、为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。2、在使用道路救援功能时,基于您的授权我们可能会获取您的位置信息,以便为您提供服务。您有权拒绝或取消授权。在使用线上投保以及注册等功能时, 基于您的授权我们会获取您的相册存储的权限, 以便在使用时能够正确的上传个人资料。获取通知权限, 用于向您发送重要通知, 如服务更新或安全提醒。<br/>   请仔细阅读<a href='https://sxzgkj.baoxianzhanggui.com/h5/#/pages/login/xieyi'>《平台协议》</a>和<a href='https://sxzgkj.baoxianzhanggui.com/h5/#/pages/login/mimi'>《隐私协议》</a>了解详细信息。我们将按照您同意的条款使用您的个人信息,以便为您提供服务。",
-                "buttonAccept" : "同意",
-                "buttonRefuse" : "暂不同意"
-            }
-        },
-        "modules" : {
-            "Messaging" : {},
-            "OAuth" : {},
-            "Payment" : {},
-            "Share" : {},
-            "SQLite" : {
-                "description" : "iBeacon"
-            },
-            "Camera" : {},
-            "Maps" : {},
-            "Geolocation" : {}
-        },
-        "distribute" : {
-            "android" : {
-                "permissionPhoneState" : {
-                    "request" : "none",
-                    "prompt" : "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
-                },
-                "permissionExternalStorage" : {
-                    "request" : "none",
-                    "prompt" : "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
-                },
-                "permissions" : [
-                    "<uses-feature android:name=\"android.hardware.camera\"/>",
-                    "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
-                    "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
-                    "<uses-permission android:name=\"android.permission.CAMERA\"/>",
-                    "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
-                    "<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>",
-                    "<uses-permission android:name=\"android.permission.INTERNET\"/>",
-                    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
-                    "<uses-permission android:name=\"android.permission.READ_SMS\"/>",
-                    "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
-                    "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
-                    "<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
-                    "<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
-                    "<uses-permission android:name=\"android.permission.VIBRATE\"/>",
-                    "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
-                    "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>"
-                ],
-                "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ],
-                "minSdkVersion" : 21,
-                "schemes" : "zgcxapp",
-                "targetSdkVersion" : 30
-            },
-            "sdkConfigs" : {
-                "ad" : {
-                    "ks" : {},
-                    "sigmob" : {}
-                },
-                "payment" : {
-                    "weixin" : {
-                        "__platform__" : [ "android" ],
-                        "appid" : "wx612ca90988c46947",
-                        "UniversalLinks" : ""
-                    }
-                },
-                "share" : {
-                    "weixin" : {
-                        "appid" : "wx612ca90988c46947",
-                        "UniversalLinks" : ""
-                    }
-                },
-                "oauth" : {
-                    "weixin" : {
-                        "appid" : "wx612ca90988c46947",
-                        "appsecret" : "75b7d4cda453b2075dec23f849278bc0",
-                        "UniversalLinks" : ""
-                    }
-                },
-                "geolocation" : {
-                    "amap" : {
-                        "name" : "amap_18335592986CWFSxSLAB",
-                        "__platform__" : [ "android" ],
-                        "appkey_ios" : "e410fdbf6be7110af9267b6d56c93c8d",
-                        "appkey_android" : "e410fdbf6be7110af9267b6d56c93c8d"
-                    },
-                    "system" : {
-                        "__platform__" : [ "ios", "android" ]
-                    }
-                },
-                "push" : {
-                    "unipush" : {
-                        "appid" : "YDcU8mcWRO6MWIT1i4naP2",
-                        "appkey" : "DK2LTzhnc87pFFFhcTSgs8",
-                        "appsecret" : "wTUMKWB4ReAoPyCp7Jyaz9"
-                    }
-                },
-                "maps" : {
-                    "amap" : {
-                        "name" : "amap_18335592986CWFSxSLAB",
-                        "appkey_ios" : "e410fdbf6be7110af9267b6d56c93c8d",
-                        "appkey_android" : "e410fdbf6be7110af9267b6d56c93c8d"
-                    }
-                }
-            },
-            "icons" : {
-                "android" : {
-                    "hdpi" : "unpackage/res/icons/72x72.png",
-                    "xhdpi" : "unpackage/res/icons/96x96.png",
-                    "xxhdpi" : "unpackage/res/icons/144x144.png",
-                    "xxxhdpi" : "unpackage/res/icons/192x192.png"
-                },
-                "ios" : {
-                    "appstore" : "unpackage/res/icons/1024x1024.png",
-                    "ipad" : {
-                        "app" : "unpackage/res/icons/76x76.png",
-                        "app@2x" : "unpackage/res/icons/152x152.png",
-                        "notification" : "unpackage/res/icons/20x20.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "proapp@2x" : "unpackage/res/icons/167x167.png",
-                        "settings" : "unpackage/res/icons/29x29.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "spotlight" : "unpackage/res/icons/40x40.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png"
-                    },
-                    "iphone" : {
-                        "app@2x" : "unpackage/res/icons/120x120.png",
-                        "app@3x" : "unpackage/res/icons/180x180.png",
-                        "notification@2x" : "unpackage/res/icons/40x40.png",
-                        "notification@3x" : "unpackage/res/icons/60x60.png",
-                        "settings@2x" : "unpackage/res/icons/58x58.png",
-                        "settings@3x" : "unpackage/res/icons/87x87.png",
-                        "spotlight@2x" : "unpackage/res/icons/80x80.png",
-                        "spotlight@3x" : "unpackage/res/icons/120x120.png"
-                    }
-                }
-            },
-            "splashscreen" : {
-                "androidStyle" : "common",
-                "useOriginalMsgbox" : true
-            },
-            "ios" : {
-                "dSYMs" : false,
-                "urltypes" : "zgcxapp"
-            }
-        },
-        "compilerVersion" : 3,
-        "nvueLaunchMode" : "fast",
-        "splashscreen" : {
-            "alwaysShowBeforeRender" : true
-        },
-        "nativePlugins" : {}
-    },
-    // 5+App特有相关
-    "quickapp" : {},
-    // 快应用特有相关
-    "mp-weixin" : {
-        "setting" : {
-            "urlCheck" : false,
-            "es6" : false,
-            "postcss" : false,
-            "minified" : false
-        },
-        "usingComponents" : true,
-        "appid" : "wxe57ddfbe230bcfba",
-        "permission" : {
-            "photos" : {
-                "desc" : "你的应用程序需要保存图片到相册"
-            }
-        }
-    },
-    "h5" : {
-        "template" : "template.h5.html",
-        "router" : {
-            "mode" : "hash",
-            "base" : "./"
-        },
-        "optimization" : {
-            "treeShaking" : {
-                "enable" : true
-            }
-        },
-        "devServer" : {
-            "https" : false,
-            "port" : 80
-        },
-        "sdkConfigs" : {
-            "maps" : {}
-        },
-        "uniStatistics" : {
-            "enable" : false
-        }
-    },
-    "mp-jd" : {
-        "unipush" : {
-            "enable" : false
-        }
-    }
+	"name": "晋掌柜",
+	"appid": "__UNI__D4FE29A",
+	"description": "保险类app",
+	"transformPx": false,
+	"icons": [{
+		"sizes": "分辨率,192x192",
+		"src": "图片路径"
+	}],
+	"versionName": "3.1.8",
+	"versionCode": 318,
+	"app-plus": {
+		"error": {
+			"url": "hybrid/html/error.html"
+		},
+		"compatible": {
+			"ignoreVersion": true
+		},
+		"privacy": {
+			"prompt": "template",
+			"template": {
+				"title": "平台协议和隐私协议",
+				"message": "欢迎使用晋掌柜app,我们非常重视您的个人信息和隐私保护。我们将通过《隐私权保护政策》帮助您了解我们收集、使用、存储、共享和保护个人信息的情况,以及您所享有的相关权利。<br/> 为了更好的向您提供注册认证、线上投保、以及周边服务等相关服务功能,我们会收集、使用必要的信息。包括但不限于:<br/>1、为了更好的向你提供服务,我们需要收集你的设备标识、操作日志等信息用于分析、优化应用性能。2、在使用道路救援功能时,基于您的授权我们可能会获取您的位置信息,以便为您提供服务。您有权拒绝或取消授权。在使用线上投保以及注册等功能时, 基于您的授权我们会获取您的相册存储的权限, 以便在使用时能够正确的上传个人资料。获取通知权限, 用于向您发送重要通知, 如服务更新或安全提醒。<br/>   请仔细阅读<a href='https://sxzgkj.baoxianzhanggui.com/h5/#/pages/login/xieyi'>《平台协议》</a>和<a href='https://sxzgkj.baoxianzhanggui.com/h5/#/pages/login/mimi'>《隐私协议》</a>了解详细信息。我们将按照您同意的条款使用您的个人信息,以便为您提供服务。",
+				"buttonAccept": "同意",
+				"buttonRefuse": "暂不同意"
+			}
+		},
+		"modules": {
+			"Messaging": {},
+			"OAuth": {},
+			"Payment": {},
+			"Share": {},
+			"SQLite": {
+				"description": "iBeacon"
+			},
+			"Camera": {},
+			"Maps": {},
+			"Geolocation": {}
+		},
+		"distribute": {
+			"android": {
+				"permissionPhoneState": {
+					"request": "none",
+					"prompt": "为保证您正常、安全地使用,需要获取设备识别码(部分手机提示为获取手机号码)使用权限,请允许。"
+				},
+				"permissionExternalStorage": {
+					"request": "none",
+					"prompt": "应用保存运行状态等信息,需要获取读写手机存储(系统提示为访问设备上的照片、媒体内容和文件)权限,请允许。"
+				},
+				"permissions": [
+					"<uses-feature android:name=\"android.hardware.camera\"/>",
+					"<uses-feature android:name=\"android.hardware.camera.autofocus\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>",
+					"<uses-permission android:name=\"android.permission.CALL_PHONE\"/>",
+					"<uses-permission android:name=\"android.permission.CAMERA\"/>",
+					"<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>",
+					"<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>",
+					"<uses-permission android:name=\"android.permission.INTERNET\"/>",
+					"<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>",
+					"<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>",
+					"<uses-permission android:name=\"android.permission.READ_SMS\"/>",
+					"<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>",
+					"<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",
+					"<uses-permission android:name=\"android.permission.SEND_SMS\"/>",
+					"<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>",
+					"<uses-permission android:name=\"android.permission.VIBRATE\"/>",
+					"<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>",
+					"<uses-permission android:name=\"android.permission.WRITE_SMS\"/>"
+				],
+				"abiFilters": ["armeabi-v7a", "arm64-v8a", "x86"],
+				"minSdkVersion": 21,
+				"schemes": "zgcxapp",
+				"targetSdkVersion": 30
+			},
+			"sdkConfigs": {
+				"ad": {
+					"ks": {},
+					"sigmob": {}
+				},
+				"payment": {
+					"weixin": {
+						"__platform__": ["android"],
+						"appid": "wx612ca90988c46947",
+						"UniversalLinks": ""
+					}
+				},
+				"share": {
+					"weixin": {
+						"appid": "wx612ca90988c46947",
+						"UniversalLinks": ""
+					}
+				},
+				"oauth": {
+					"weixin": {
+						"appid": "wx612ca90988c46947",
+						"appsecret": "75b7d4cda453b2075dec23f849278bc0",
+						"UniversalLinks": ""
+					}
+				},
+				"geolocation": {
+					"amap": {
+						"name": "amap_18335592986CWFSxSLAB",
+						"__platform__": ["android"],
+						"appkey_ios": "e410fdbf6be7110af9267b6d56c93c8d",
+						"appkey_android": "e410fdbf6be7110af9267b6d56c93c8d"
+					},
+					"system": {
+						"__platform__": ["ios", "android"]
+					}
+				},
+				"push": {
+					"unipush": {
+						"appid": "YDcU8mcWRO6MWIT1i4naP2",
+						"appkey": "DK2LTzhnc87pFFFhcTSgs8",
+						"appsecret": "wTUMKWB4ReAoPyCp7Jyaz9"
+					}
+				},
+				"maps": {
+					"amap": {
+						"name": "amap_18335592986CWFSxSLAB",
+						"appkey_ios": "e410fdbf6be7110af9267b6d56c93c8d",
+						"appkey_android": "e410fdbf6be7110af9267b6d56c93c8d"
+					}
+				}
+			},
+			"icons": {
+				"android": {
+					"hdpi": "unpackage/res/icons/72x72.png",
+					"xhdpi": "unpackage/res/icons/96x96.png",
+					"xxhdpi": "unpackage/res/icons/144x144.png",
+					"xxxhdpi": "unpackage/res/icons/192x192.png"
+				},
+				"ios": {
+					"appstore": "unpackage/res/icons/1024x1024.png",
+					"ipad": {
+						"app": "unpackage/res/icons/76x76.png",
+						"app@2x": "unpackage/res/icons/152x152.png",
+						"notification": "unpackage/res/icons/20x20.png",
+						"notification@2x": "unpackage/res/icons/40x40.png",
+						"proapp@2x": "unpackage/res/icons/167x167.png",
+						"settings": "unpackage/res/icons/29x29.png",
+						"settings@2x": "unpackage/res/icons/58x58.png",
+						"spotlight": "unpackage/res/icons/40x40.png",
+						"spotlight@2x": "unpackage/res/icons/80x80.png"
+					},
+					"iphone": {
+						"app@2x": "unpackage/res/icons/120x120.png",
+						"app@3x": "unpackage/res/icons/180x180.png",
+						"notification@2x": "unpackage/res/icons/40x40.png",
+						"notification@3x": "unpackage/res/icons/60x60.png",
+						"settings@2x": "unpackage/res/icons/58x58.png",
+						"settings@3x": "unpackage/res/icons/87x87.png",
+						"spotlight@2x": "unpackage/res/icons/80x80.png",
+						"spotlight@3x": "unpackage/res/icons/120x120.png"
+					}
+				}
+			},
+			"splashscreen": {
+				"androidStyle": "common",
+				"useOriginalMsgbox": true
+			},
+			"ios": {
+				"dSYMs": false,
+				"urltypes": "zgcxapp"
+			}
+		},
+		"compilerVersion": 3,
+		"nvueLaunchMode": "fast",
+		"splashscreen": {
+			"alwaysShowBeforeRender": true
+		},
+		"nativePlugins": {}
+	},
+	// 5+App特有相关
+	"quickapp": {},
+	// 快应用特有相关
+	"mp-weixin": {
+		"setting": {
+			"urlCheck": false,
+			"es6": false,
+			"postcss": false,
+			"minified": false
+		},
+		"usingComponents": true,
+		"appid": "wxe57ddfbe230bcfba",
+		"permission": {
+			"photos": {
+				"desc": "你的应用程序需要保存图片到相册"
+			}
+		}
+	},
+	"h5": {
+		"template": "template.h5.html",
+		"router": {
+			"mode": "hash",
+			"base": "./"
+		},
+		"optimization": {
+			"treeShaking": {
+				"enable": true
+			}
+		},
+		"devServer": {
+			"https": false,
+			"port": 80
+		},
+		"sdkConfigs": {
+			"maps": {}
+		},
+		"uniStatistics": {
+			"enable": false
+		}
+	},
+	"mp-jd": {
+		"unipush": {
+			"enable": false
+		}
+	}
 }
-// 小程序特有相关
-
+// 小程序特有相关

Fișier diff suprimat deoarece este prea mare
+ 65 - 879
pages/carInsure/Information.vue


+ 62 - 405
pages/carInsure/entry.vue

@@ -88,12 +88,12 @@
 						<text>{{carSwitching?'手动输入':'拍照识别'}}</text>
 					</view>
 				</view>
-				<view v-if="carSwitching" class="ocr mt-2">
-					<image v-show="!carfrontImg" @tap="ocrIdentify" src="/static/image/car-insure/carbg.png" mode=""
-						style="width: 100%;height: 198px;">
-					</image>
-					<view v-show="carfrontImg">
-						<view class="movable-view dis f-c a-c">
+				<view class="ocr mt-2">
+					<view class="" v-show="carSwitching">
+						<image v-show="!carfrontImg" @tap="ocrIdentify" src="/static/image/car-insure/carbg.png" mode=""
+							style="width: 100%;height: 198px;">
+						</image>
+						<view v-if="carfrontImg" class="movable-view dis f-c a-c">
 							<movable-area>
 								<movable-view direction="all" :out-of-bounds="true" :scale="true" :damping="30"
 									:friction="10">
@@ -120,224 +120,19 @@
 								</view>
 							</view>
 						</view>
-						<u-form :model="carInfo" :rules="carRules" ref="carForm" :errorType="errorType"
-							label-width="200" style="padding: 0 15px;">
-							<u-form-item label-width="120" label="车牌号:">
-								<u-input placeholder="输入车牌号" v-model="carInfo.licenseNo" type="text"
-									:custom-style="{textAlign:'right'}" @input="upperCaseType('licenseNo')"></u-input>
-							</u-form-item>
-							<u-form-item label="品牌型号:" prop="modelcname">
-								<u-input placeholder="请输入品牌型号" v-model="carInfo.modelcname" type="text"
-									:custom-style="{textAlign:'right'}" @input="upperCaseType('modelcname')"></u-input>
-								<view class="search ml-1" @tap="toChooseVehicleType(carInfo.modelcname)">查询</view>
-							</u-form-item>
-							<u-form-item label="车辆识别码:" prop="frameNo">
-								<u-input type="text" placeholder="请输入车辆识别码" v-model="carInfo.frameNo"
-									:custom-style="{textAlign:'right'}" @input="upperCaseType('frameNo')"></u-input>
-								<view class="search ml-1" @tap="toChooseVin(carInfo.frameNo)">查询</view>
-							</u-form-item>
-							<u-form-item label="发动机号:" prop="engineNo">
-								<u-input type="text" placeholder="请输入发动机号" v-model="carInfo.engineNo"
-									:custom-style="{textAlign:'right'}" @input="upperCaseType('engineNo')"></u-input>
-							</u-form-item>
-							<u-form-item label="注册日期:" prop="registerDate">
-								<u-input type="select" :custom-style="{textAlign:'right'}"
-									:select-open="registerDateShow" v-model="carInfo.registerDate" placeholder="请选择注册日期"
-									@click="registerDateShow = true" placeholder-style="color:#808080"></u-input>
-								<u-picker v-model="registerDateShow" mode="time" :params="params" :end-year="endYear"
-									:end-month="endMonth"
-									@confirm="e=> Dateconfirm(e,'carInfo','registerDate')"></u-picker>
-							</u-form-item>
-							<u-form-item label="发证日期:" prop="issueDate">
-								<u-input type="select" :custom-style="{textAlign:'right'}" :select-open="issueDateShow"
-									v-model="carInfo.issueDate" placeholder="请选择发证日期" @click="issueDateShow = true"
-									placeholder-style="color:#808080"></u-input>
-								<u-picker v-model="issueDateShow" mode="time" :params="params"
-									@confirm="e=> Dateconfirm(e,'carInfo','issueDate')"></u-picker>
-							</u-form-item>
-							<u-form-item label="整备质量:" prop="completeKerbMass">
-								<u-input type="text" placeholder="请输入整备质量" v-model="carInfo.completeKerbMass"
-									:custom-style="{textAlign:'right'}"></u-input>
-							</u-form-item>
-							<u-form-item label="核定载质量:" prop="frameNo">
-								<u-input type="text" placeholder="请输入核定载质量" v-model="carInfo.limitLoad"
-									:custom-style="{textAlign:'right'}"></u-input>
-							</u-form-item>
-							<u-form-item label="使用性质:" prop="carnature">
-								<u-input v-model="carInfo1.carnature" type="select" :select-open="carnatureShow"
-									@click="carnatureShow = true" :custom-style="{textAlign:'right'}"
-									placeholder-style="color:#808080" placeholder="请选择使用性质" />
-								<u-select mode="single-column" :list="natureOfVehicleUseoptions" v-model="carnatureShow"
-									label-name="dictTag" value-name="dictValue"
-									@confirm="dictionaryConfirm($event,'carnature')"></u-select>
-							</u-form-item>
-							<u-form-item label="能源种类: " prop="energyType">
-								<u-input v-model="carInfo1.energyType" type="select" :select-open="energyTypeShow"
-									@click="energyTypeShow = true" :custom-style="{textAlign:'right'}"
-									placeholder-style="color:#808080" placeholder="请选择能源种类" />
-								<u-select mode="single-column" :list="energyTypeoptions" v-model="energyTypeShow"
-									label-name="dictTag" value-name="dictValue"
-									@confirm="dictionaryConfirm($event,'energyType')"></u-select>
-							</u-form-item>
-							<u-form-item label="车辆用途: " prop="vehicleUse">
-								<u-input v-model="carInfo1.vehicleUse" type="select" :select-open="vehicleUseShow"
-									@click="vehicleUseShow = true" :custom-style="{textAlign:'right'}"
-									placeholder-style="color:#808080" placeholder="请选择车辆用途" />
-								<u-select v-if="carInfo.carnature=='01'" mode="single-column"
-									:list="businessVehicleUseoptions" v-model="vehicleUseShow" label-name="dictTag"
-									value-name="dictValue" @confirm="dictionaryConfirm($event,'vehicleUse')"></u-select>
-								<u-select v-else mode="single-column" :list="outOfBusinessVehicleUseoptions"
-									v-model="vehicleUseShow" label-name="dictTag" value-name="dictValue"
-									@confirm="dictionaryConfirm($event,'vehicleUse')"></u-select>
-							</u-form-item>
-							<u-form-item label="车辆类型: " prop="cartype">
-								<u-input v-model="carInfo1.cartype" type="select" :select-open="cartypeShow"
-									@click="cartypeShow = true" :custom-style="{textAlign:'right'}"
-									placeholder-style="color:#808080" placeholder="请选择车辆类型" />
-								<u-select mode="single-column" :searchShow="true"
-									:list="trafficManagementVehicleTypeoptions" v-model="cartypeShow"
-									label-name="dictTag" value-name="dictValue"
-									@confirm="dictionaryConfirm($event,'cartype')"></u-select>
-							</u-form-item>
-							<u-form-item label="车辆种类: " prop="cimodelclass">
-								<u-input v-model="carInfo1.cimodelclass" type="select" :select-open="cimodelclassShow"
-									@click="cimodelclassShow = true" :custom-style="{textAlign:'right'}"
-									placeholder-style="color:#808080" placeholder="请选择车辆种类" />
-								<u-select mode="single-column" :list="vehicleTypeoptions" v-model="cimodelclassShow"
-									label-name="dictTag" value-name="dictValue"
-									@confirm="dictionaryConfirm($event,'cimodelclass')"></u-select>
-							</u-form-item>
-							<u-form-item label="年款:">
-								<u-input type="text" placeholder="请输入年款" v-model="carInfo.caryear"
-									:custom-style="{textAlign:'right'}"></u-input>
-							</u-form-item>
-							<u-form-item label="座位数:">
-								<u-input type="text" placeholder="请输入座位数" v-model="carInfo.seatCount"
-									:custom-style="{textAlign:'right'}"></u-input>
-							</u-form-item>
-							<u-form-item label="排量:">
-								<u-input type="text" placeholder="请输入排量" v-model="carInfo.enginedesc"
-									:custom-style="{textAlign:'right'}"></u-input>
-							</u-form-item>
-							<u-form-item label="功率:">
-								<u-input type="text" placeholder="请输入功率" v-model="carInfo.powerScale"
-									:custom-style="{textAlign:'right'}"></u-input>
-							</u-form-item>
-							<u-form-item label="新车购置价:" prop="purchasePrice">
-								<u-input type="text" placeholder="请输入新车购置价" v-model="carInfo.purchasePrice"
-									:custom-style="{textAlign:'right'}"
-									@input="upperCaseType('purchasePrice')"></u-input>
-							</u-form-item>
-						</u-form>
 					</view>
-				</view>
-				<view v-if="!carSwitching" class="content mt-2">
-					<u-form :model="carInfo" :rules="carRules" ref="carForm1" :errorType="errorType" label-width="200"
-						style="padding: 0 15px;">
-						<u-form-item label="车牌号:">
-							<u-input placeholder="输入车牌号" v-model="carInfo.licenseNo" type="text"
-								:custom-style="{textAlign:'right'}" @input="upperCaseType('licenseNo')"></u-input>
-						</u-form-item>
-						<u-form-item label="品牌型号:" prop="modelcname">
-							<u-input placeholder="请输入品牌型号" v-model="carInfo.modelcname" type="text"
-								:custom-style="{textAlign:'right'}" @input="upperCaseType('modelcname')"></u-input>
-							<view class="search ml-1" @tap="toChooseVehicleType(carInfo.modelcname)">查询</view>
-						</u-form-item>
-						<u-form-item label="车辆识别码:" prop="frameNo">
-							<u-input type="text" placeholder="请输入车辆识别码" v-model="carInfo.frameNo"
-								:custom-style="{textAlign:'right'}" @input="upperCaseType('frameNo')"></u-input>
-							<view class="search ml-1" @tap="toChooseVin(carInfo.frameNo)">查询</view>
-						</u-form-item>
-						<u-form-item label="发动机号:" prop="engineNo">
-							<u-input type="text" placeholder="请输入发动机号" v-model="carInfo.engineNo"
-								:custom-style="{textAlign:'right'}" @input="upperCaseType('engineNo')"></u-input>
-						</u-form-item>
-						<u-form-item label="注册日期:" prop="registerDate">
-							<u-input type="select" :custom-style="{textAlign:'right'}" :select-open="registerDateShow"
-								v-model="carInfo.registerDate" placeholder="请选择注册日期" @click="registerDateShow = true"
-								placeholder-style="color:#808080"></u-input>
-							<u-picker v-model="registerDateShow" mode="time" :params="params" :end-year="endYear"
-								:end-month="endMonth" @confirm="e=> Dateconfirm(e,'carInfo','registerDate')"></u-picker>
-						</u-form-item>
-						<u-form-item label="发证日期:" prop="issueDate">
-							<u-input type="select" :custom-style="{textAlign:'right'}" :select-open="issueDateShow"
-								v-model="carInfo.issueDate" placeholder="请选择发证日期" @click="issueDateShow = true"
-								placeholder-style="color:#808080"></u-input>
-							<u-picker v-model="issueDateShow" mode="time" :params="params"
-								@confirm="e=> Dateconfirm(e,'carInfo','issueDate')"></u-picker>
-						</u-form-item>
-						<u-form-item label="整备质量:" prop="completeKerbMass">
-							<u-input type="text" placeholder="请输入整备质量" v-model="carInfo.completeKerbMass"
-								:custom-style="{textAlign:'right'}"></u-input>
-						</u-form-item>
-						<u-form-item label="核定载质量:" prop="frameNo">
-							<u-input type="text" placeholder="请输入核定载质量" v-model="carInfo.limitLoad"
-								:custom-style="{textAlign:'right'}"></u-input>
-						</u-form-item>
-						<u-form-item label="使用性质:" prop="carnature">
-							<u-input v-model="carInfo1.carnature" type="select" :select-open="carnatureShow"
-								@click="carnatureShow = true" :custom-style="{textAlign:'right'}"
-								placeholder-style="color:#808080" placeholder="请选择使用性质" />
-							<u-select mode="single-column" :list="natureOfVehicleUseoptions" v-model="carnatureShow"
-								label-name="dictTag" value-name="dictValue"
-								@confirm="dictionaryConfirm($event,'carnature')"></u-select>
-						</u-form-item>
-						<u-form-item label="能源种类: " prop="energyType">
-							<u-input v-model="carInfo1.energyType" type="select" :select-open="energyTypeShow"
-								@click="energyTypeShow = true" :custom-style="{textAlign:'right'}"
-								placeholder-style="color:#808080" placeholder="请选择能源种类" />
-							<u-select mode="single-column" :list="energyTypeoptions" v-model="energyTypeShow"
-								label-name="dictTag" value-name="dictValue"
-								@confirm="dictionaryConfirm($event,'energyType')"></u-select>
-						</u-form-item>
-						<u-form-item label="车辆用途: " prop="vehicleUse">
-							<u-input v-model="carInfo1.vehicleUse" type="select" :select-open="vehicleUseShow"
-								@click="vehicleUseShow = true" :custom-style="{textAlign:'right'}"
-								placeholder-style="color:#808080" placeholder="请选择车辆用途" />
-							<u-select v-if="carInfo.carnature=='01'" mode="single-column"
-								:list="businessVehicleUseoptions" v-model="vehicleUseShow" label-name="dictTag"
-								value-name="dictValue" @confirm="dictionaryConfirm($event,'vehicleUse')"></u-select>
-							<u-select v-else mode="single-column" :list="outOfBusinessVehicleUseoptions"
-								v-model="vehicleUseShow" label-name="dictTag" value-name="dictValue"
-								@confirm="dictionaryConfirm($event,'vehicleUse')"></u-select>
-						</u-form-item>
-						<u-form-item label="车辆类型: " prop="cartype">
-							<u-input v-model="carInfo1.cartype" type="select" :select-open="cartypeShow"
-								@click="cartypeShow = true" :custom-style="{textAlign:'right'}"
-								placeholder-style="color:#808080" placeholder="请选择车辆类型" />
-							<u-select mode="single-column" :searchShow="true"
-								:list="trafficManagementVehicleTypeoptions" v-model="cartypeShow" label-name="dictTag"
-								value-name="dictValue" @confirm="dictionaryConfirm($event,'cartype')"></u-select>
-						</u-form-item>
-						<u-form-item label="车辆种类: " prop="cimodelclass">
-							<u-input v-model="carInfo1.cimodelclass" type="select" :select-open="cimodelclassShow"
-								@click="cimodelclassShow = true" :custom-style="{textAlign:'right'}"
-								placeholder-style="color:#808080" placeholder="请选择车辆种类" />
-							<u-select mode="single-column" :list="vehicleTypeoptions" v-model="cimodelclassShow"
-								label-name="dictTag" value-name="dictValue"
-								@confirm="dictionaryConfirm($event,'cimodelclass')"></u-select>
-						</u-form-item>
-						<u-form-item label="年款:">
-							<u-input type="text" placeholder="请输入年款" v-model="carInfo.caryear"
-								:custom-style="{textAlign:'right'}"></u-input>
-						</u-form-item>
-						<u-form-item label="座位数:">
-							<u-input type="text" placeholder="请输入座位数" v-model="carInfo.seatCount"
-								:custom-style="{textAlign:'right'}"></u-input>
-						</u-form-item>
-						<u-form-item label="排量:">
-							<u-input type="text" placeholder="请输入排量" v-model="carInfo.enginedesc"
-								:custom-style="{textAlign:'right'}"></u-input>
-						</u-form-item>
-						<u-form-item label="功率:">
-							<u-input type="text" placeholder="请输入功率" v-model="carInfo.powerScale"
-								:custom-style="{textAlign:'right'}"></u-input>
-						</u-form-item>
-						<u-form-item label="新车购置价:" prop="purchasePrice">
-							<u-input type="text" placeholder="请输入新车购置价" v-model="carInfo.purchasePrice"
-								:custom-style="{textAlign:'right'}" @input="upperCaseType('purchasePrice')"></u-input>
-						</u-form-item>
-					</u-form>
+					<view v-show="!carSwitching || carfrontImg">
+						<CarInfoForm :carInfo="carInfo" ref="carForm" :upperCaseType="upperCaseType"
+							:toChooseVehicleType="toChooseVehicleType" :toChooseVin="toChooseVin"
+							:dictionaryConfirm="dictionaryConfirm" :Dateconfirm="Dateconfirm"
+							:natureOfVehicleUseoptions="natureOfVehicleUseoptions"
+							:energyTypeoptions="energyTypeoptions"
+							:trafficManagementVehicleTypeoptions="trafficManagementVehicleTypeoptions"
+							:vehicleTypeoptions="vehicleTypeoptions"
+							:businessVehicleUseoptions="businessVehicleUseoptions"
+							:outOfBusinessVehicleUseoptions="outOfBusinessVehicleUseoptions" :carInfos="carInfo1"
+							:errorType="errorType" />
+					</view>
 				</view>
 			</view>
 		</view>
@@ -442,12 +237,14 @@
 		nextTick
 	} from 'process';
 	import OCRComponent from '@/components/modules/carInsure/OCRComponent/OCRComponent.vue'; //引用图片信息检查插件
+	import CarInfoForm from '@/components/common/commonFormItem/CarInfoForm.vue';
 	var dateTime = new Date();
 	let Year = dateTime.getFullYear();
 	let Month = Number(dateTime.getMonth() + 1);
 	export default {
 		components: {
 			OCRComponent,
+			CarInfoForm
 		},
 		data() {
 			return {
@@ -471,85 +268,6 @@
 				carTypeVINList: [],
 				carTypeVINListIndex: {},
 				carModelLookupModal: false,
-				carRules: {
-					frameNo: [{
-							required: true,
-							message: '请输入车辆识别码',
-							trigger: ['blur', 'change'],
-						},
-						{
-							pattern: /^([0-9A-Z]){17}$/,
-							message: '请输入正确的车辆识别码',
-						}
-					],
-					modelcname: [{
-						required: true,
-						message: '请输入品牌型号',
-						trigger: ['blur', 'change'],
-					}],
-					engineNo: [{
-						required: true,
-						message: '请输入发动机号',
-						trigger: ['blur', 'change'],
-					}],
-					purchasePrice: [{
-							required: true,
-							message: '请输入新车购置价',
-							trigger: ['blur', 'change'],
-						},
-
-					],
-					completeKerbMass: [{
-						required: true,
-						message: '请输入整备质量',
-						trigger: ['blur', 'change'],
-					}],
-					carnature: [{
-						required: true,
-						message: '使用性质必选',
-						trigger: 'change',
-					}],
-					energyType: [{
-						required: true,
-						message: '能源种类必选',
-						trigger: 'change',
-					}],
-					vehicleUse: [{
-						required: true,
-						message: '车辆用途必选',
-						trigger: 'change',
-					}],
-					cartype: [{
-						required: true,
-						message: '车辆类型必选',
-						trigger: 'change',
-					}],
-					cimodelclass: [{
-						required: true,
-						message: '车辆种类必选',
-						trigger: 'change',
-					}],
-					registerDate: [{
-							required: true,
-							message: '请选择注册日期',
-							trigger: 'change',
-						},
-						{
-							pattern: /^\d{4}-\d{2}-\d{2}$/,
-							message: '注册日期格式错误',
-						}
-					],
-					issueDate: [{
-							required: true,
-							message: '请选择发证日期',
-							trigger: 'change',
-						},
-						{
-							pattern: /^\d{4}-\d{2}-\d{2}$/,
-							message: '发证日期日期格式错误',
-						}
-					],
-				},
 				model: {
 					name: '',
 					sex: '',
@@ -735,9 +453,7 @@
 
 
 		},
-		onReady() {
-			this.$refs.carForm.setRules(this.carRules);
-		},
+
 		onShow() {
 			let historyInfo = uni.getStorageSync('historyInfo');
 			if (historyInfo) {
@@ -752,17 +468,6 @@
 			}
 		},
 		watch: {
-			carSwitching(newVal) {
-				if (newVal) {
-					this.$nextTick(() => {
-						this.$refs.carForm.setRules(this.carRules);
-					})
-				} else {
-					this.$nextTick(() => {
-						this.$refs.carForm1.setRules(this.carRules);
-					})
-				}
-			},
 			currentInputIndex(newVal) {
 				switch (newVal) {
 					case 0:
@@ -943,98 +648,50 @@
 								duration: 1500
 							});
 						}
-						if (this.carSwitching) {
-							this.$refs['carForm'].validate(valid => {
-								if (valid) {
-									if (this.vehicleType) {
-										this.navigate({
-											url: '/pages/carInsure/Information',
-											success: (res) => {
-												res.eventChannel.emit(
-													"acceptData", {
-														carInfo: this
-															.carInfo,
-														ownerInfo: this
-															.ownerInfo,
-														policyHolderInfo: this
-															.policyHolderInfo,
-														insuredPersonInfo: this
-															.insuredPersonInfo,
-														carInfoPositiveList: this
-															.carInfoPositiveList, //车辆
-														ownerInfoPositiveList: this
-															.ownerInfoPositiveList, //车主
-														policyHolderInfoPositiveList: this
-															.policyHolderInfoPositiveList, //投保人
-														insuredPersonInfoPositiveList: this
-															.insuredPersonInfoPositiveList, //被保人
-													})
-											}
-										}, "navigateTo", true);
-									} else {
-										this.$refs.uToast.show({
-											title: '检测到未精准校验车型,即将跳转到车型界面选择,请等待。。。',
-											type: 'warning',
-											icon: false,
-										})
-										setTimeout(() => {
-											this.navigate({
-												url: '/pages/carInsure/carType?frameNo=' +
-													encodeURIComponent(this.carInfo
-														.frameNo) +
-													'&vehicleType=true'
-											}, "navigateTo", true);
-										}, 2000)
-									}
-								}
-							});
-
-						} else {
-							this.$refs['carForm1'].validate(valid => {
-								if (valid) {
-									if (this.vehicleType) {
+						this.$refs.carForm.validate(valid => {
+							if (valid) {
+								if (this.vehicleType) {
+									this.navigate({
+										url: '/pages/carInsure/Information',
+										success: (res) => {
+											res.eventChannel.emit(
+												"acceptData", {
+													carInfo: this
+														.carInfo,
+													ownerInfo: this
+														.ownerInfo,
+													policyHolderInfo: this
+														.policyHolderInfo,
+													insuredPersonInfo: this
+														.insuredPersonInfo,
+													carInfoPositiveList: this
+														.carInfoPositiveList, //车辆
+													ownerInfoPositiveList: this
+														.ownerInfoPositiveList, //车主
+													policyHolderInfoPositiveList: this
+														.policyHolderInfoPositiveList, //投保人
+													insuredPersonInfoPositiveList: this
+														.insuredPersonInfoPositiveList, //被保人
+												})
+										}
+									}, "navigateTo", true);
+								} else {
+									this.$refs.uToast.show({
+										title: '检测到未精准校验车型,即将跳转到车型界面选择,请等待。。。',
+										type: 'warning',
+										icon: false,
+									})
+									setTimeout(() => {
 										this.navigate({
-											url: '/pages/carInsure/Information',
-											success: (res) => {
-												res.eventChannel.emit(
-													"acceptData", {
-														carInfo: this
-															.carInfo,
-														ownerInfo: this
-															.ownerInfo,
-														policyHolderInfo: this
-															.policyHolderInfo,
-														insuredPersonInfo: this
-															.insuredPersonInfo,
-														carInfoPositiveList: this
-															.carInfoPositiveList, //车辆
-														ownerInfoPositiveList: this
-															.ownerInfoPositiveList, //车主
-														policyHolderInfoPositiveList: this
-															.policyHolderInfoPositiveList, //投保人
-														insuredPersonInfoPositiveList: this
-															.insuredPersonInfoPositiveList, //被保人
-													})
-											}
+											url: '/pages/carInsure/carType?frameNo=' +
+												encodeURIComponent(this.carInfo
+													.frameNo) +
+												'&vehicleType=true'
 										}, "navigateTo", true);
-									} else {
-										this.$refs.uToast.show({
-											title: '检测到未精准校验车型,即将跳转到车型界面选择,请等待。。。',
-											type: 'warning',
-											icon: false,
-										})
-										setTimeout(() => {
-											this.navigate({
-												url: '/pages/carInsure/carType?frameNo=' +
-													encodeURIComponent(this.carInfo
-														.frameNo) +
-													'&vehicleType=true'
-											}, "navigateTo", true);
-										}, 2000)
-									}
+									}, 2000)
 								}
-							});
-						}
+							}
+						});
 						break;
 					default:
 				}

+ 16 - 6
pages/carInsure/premiumCalc.vue

@@ -669,13 +669,19 @@
 						<text>扩展内容</text>
 						<view class="dis a-c j-s">
 							<text>自主定价系数</text>
-							<u-input type="number" v-model="CTcoefficientForm.coefficient"
+							<u-input type="number" v-model="CTcoefficientForm.pricingCoefficient"
+								:custom-style="{textAlign:'right',width:'50px',marginRight:'10px'}"
+								placeholder="请输入"></u-input>
+						</view>
+						<view class="dis a-c j-s">
+							<text>初始折扣</text>
+							<u-input type="number" v-model="CTcoefficientForm.initialProposalDiscount" disabled
 								:custom-style="{textAlign:'right',width:'50px',marginRight:'10px'}"
 								placeholder="请输入"></u-input>
 						</view>
 						<view class="dis a-c j-s">
 							<text>商业险折扣</text>
-							<u-input type="number" v-model="CTcoefficientForm.discount"
+							<u-input type="number" v-model="CTcoefficientForm.expectedDiscount"
 								:custom-style="{textAlign:'right',width:'50px',marginRight:'10px'}"
 								placeholder="请输入"></u-input>
 						</view>
@@ -1424,8 +1430,9 @@
 				HTcurrent: 0,
 				//特约分类
 				CTcoefficientForm: {
-					coefficient: null, //系数
-					discount: null, //折扣
+					initialProposalDiscount: "", //初始折扣
+					expectedDiscount: "", //期望折扣
+					pricingCoefficient: "", //自主定价系数
 				},
 				ZJcoefficientForm: {
 					coefficient: null, //系数
@@ -1758,8 +1765,8 @@
 		},
 		methods: {
 			CTcoefficientSubmit() {
-				this.quotableCompanyList[this.CTcoefficientIndex].coefficient = this.CTcoefficientForm.coefficient;
-				this.quotableCompanyList[this.CTcoefficientIndex].discount = this.CTcoefficientForm.discount;
+				this.quotableCompanyList[this.CTcoefficientIndex].coefficient = this.CTcoefficientForm.pricingCoefficient;
+				this.quotableCompanyList[this.CTcoefficientIndex].discount = this.CTcoefficientForm.expectedDiscount;
 				this.CTcoefficientShow = false;
 			},
 			ZJcoefficientSubmit() {
@@ -3000,6 +3007,9 @@
 								this.quotableCompanyList[num].result =
 									res.data;
 								this.subOrderId = res.data.companyId;
+								this.CTcoefficientForm.initialProposalDiscount = res.data.initialProposalDiscount;
+								this.CTcoefficientForm.expectedDiscount = res.data.expectedDiscount;
+								this.CTcoefficientForm.pricingCoefficient = res.data.pricingCoefficient;
 								if (res.data.syAdjustRate) {
 									this.quotableCompanyList[num].syAdjustRate = res.data.syAdjustRate;
 									uni.setStorageSync('companyId', res.data.companyId);

+ 9 - 2
pages/carInsure/quoteDetail.vue

@@ -491,11 +491,18 @@
 						<view>交强险折扣</view>
 						<view>{{extendInfo.jqAdjustRate}}</view>
 					</view>
-					<view class="row d-flex a-center j-sb">
+					<view class="row d-flex a-center j-sb" v-if="orderInfo.inscompany=='诚泰财险'">
+						<view>商业险折扣</view>
+						<view>{{orderInfo.extendInfo1?JSON.parse(orderInfo.extendInfo1).hopeDiscount:'-'}}</view>
+					</view>
+					<view class="row d-flex a-center j-sb" v-else>
 						<view>商业险折扣</view>
 						<view>{{extendInfo.syAdjustRate}}</view>
 					</view>
-
+					<view class="row d-flex a-center j-sb" v-if="orderInfo.inscompany=='诚泰财险'">
+						<view>自主定价系数</view>
+						<view>{{ orderInfo.extendInfo1?JSON.parse(orderInfo.extendInfo1).hopeCoefficient:"-"}}</view>
+					</view>
 				</view>
 			</view>
 			<view class="car">

+ 15 - 10
pages/index/index.vue

@@ -3,7 +3,7 @@
 		<public-module></public-module>
 		<service-widget @btnClick="btn_click"></service-widget>
 		<view class="header dis a-c j-s" :style="transitionStyle">
-			<view class="city dis a-c ">
+			<view class="city dis a-c " :style="{opacity:featureHideHandling?1:0}">
 				<image src="../../static/image/index/img/cityicon.png" mode=""></image>
 				<text>{{city}}</text>
 				<image src="../../static/image/index/img/jiantou.png" mode="" style="width: 12px;height: 12px;"></image>
@@ -22,7 +22,7 @@
 		<view class="swiperelement" :style="transitionStyle">
 			<view class="swiper">
 				<u-swiper :list="swiperlist" height="258" duration="400" interval="4000" mode="rect" border-radius="12"
-					@change="swiperChange"></u-swiper>
+					@change="swiperChange" @click="swiperClick"></u-swiper>
 			</view>
 
 		</view>
@@ -362,14 +362,14 @@
 						image: '/static/image/index/ad-img/ad1.png',
 						backgroundColor: '#3385F5'
 					},
-					{
-						image: '/static/image/index/ad-img/ad2.png',
-						backgroundColor: '#F5B333'
-					},
-					{
-						image: '/static/image/index/ad-img/ad3.png',
-						backgroundColor: '#FF6591'
-					}
+					// {
+					// 	image: '/static/image/index/ad-img/ad2.png',
+					// 	backgroundColor: '#F5B333'
+					// },
+					// {
+					// 	image: '/static/image/index/ad-img/ad3.png',
+					// 	backgroundColor: '#FF6591'
+					// }
 				],
 				headerPosition: "fixed",
 				getApplicationStatus: "",
@@ -448,6 +448,11 @@
 				this.transitionStyle.backgroundColor = color.backgroundColor;
 
 			},
+			swiperClick() {
+				uni.navigateTo({
+					url: '/pages/carInsure/entry'
+				})
+			},
 			async loginUser() {
 				let userInfoRes = await this.$http.get('/user/loginUser')
 				store.commit('setUserModules', {

+ 7 - 7
pages/my/my.vue

@@ -11,7 +11,7 @@
 		</view>
 		<view class="Personnel">
 			<image src="../../static/image/my/decor1.png" class="decor" mode="widthFix"></image>
-			<view class="promotion dis a-c j-c " @click="promotionQrde">
+			<view class="promotion dis a-c j-c " @click="promotionQrde" v-if="userInfo.sysUser.status=='1'">
 				<image src="../../static/image/my/qrcode.png" mode="widthFix"></image>
 				<text>我的推广码</text>
 			</view>
@@ -315,12 +315,12 @@
 						url: '/pages/set/question',
 						icon: '/static/image/my/right-jiantou.png'
 					},
-					{
-						image: '/static/image/my/Frame6.png',
-						text: '意见反馈',
-						url: '',
-						icon: '/static/image/my/right-jiantou.png'
-					},
+					// {
+					// 	image: '/static/image/my/Frame6.png',
+					// 	text: '意见反馈',
+					// 	url: '',
+					// 	icon: '/static/image/my/right-jiantou.png'
+					// },
 					{
 						image: '/static/image/my/Frame7.png',
 						text: '联系客服',

+ 16 - 3
pages/orders/orders.vue

@@ -523,9 +523,22 @@
 		methods: {
 			...mapMutations(['setOrderType', 'setOrderStage']),
 			phone(phone) {
-				uni.makePhoneCall({
-					phoneNumber: phone, //仅为示例
-				});
+				// 获取宿主上下文  
+				var main = plus.android.runtimeMainActivity();
+				var Uri = plus.android.importClass("android.net.Uri");
+				// 通过反射获取Android的Intent对象  
+				var Intent = plus.android.importClass("android.content.Intent");
+				// 创建Intent,设置Action为ACTION_DIAL  
+				var intent = new Intent("android.intent.action.DIAL");
+				// 设置要拨打的电话号码  
+				intent.setData(Uri.parse("tel:" + phone));
+				// 启动Intent  
+				main.startActivity(intent);
+				// ...  	
+				// uni.makePhoneCall({
+				// 	phoneNumber: phone, //仅为示例
+				// });
+
 			},
 			async closeOrderconfirm() {
 				let res = await this.$http.get('/insurance/order/shutDown/' + this.orderno);

+ 109 - 291
uni_modules/x-perm-apply-instr/js_sdk/index.js

@@ -1,298 +1,116 @@
-import permisionUtil from "./permission.js"
-import { popup } from './native_popup.js'
+// PermissionHandler.js
+import permisionUtil from "./permission.js";
+import {
+	popup
+} from './native_popup.js';
 
-const prefix = 'permision_'
-const {
-    uniPlatform,
-    platform
-} = uni.getSystemInfoSync()
+const prefix = 'permision_';
+const PermissionStatus = {
+	GRANTED: 1,
+	DENIED: -1,
+	ERROR: 0
+};
 
-const permisionMap = {
-    startBluetoothDevicesDiscovery: async function() {
-        try {
-            const status1 = await permisionUtil.requestAndroidPermission('android.permission.ACCESS_FINE_LOCATION')
-            const status2 = await permisionUtil.requestAndroidPermission('android.permission.BLUETOOTH_SCAN')
-            const status3 = await permisionUtil.requestAndroidPermission('android.permission.BLUETOOTH_CONNECT')
-            if (status1 == 1 && status2 == 1 && status3 == 1) {
-                return Promise.resolve(1)
-            } else {
-                return Promise.resolve(-1)
-            }
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    scanCode: async function() {
-        try {
-            const status1 = await permisionUtil.requestAndroidPermission('android.permission.CAMERA')
-            const status2 = await permisionUtil.requestAndroidPermission('android.permission.READ_EXTERNAL_STORAGE')
-            if (status1 == 1 || status2 == 1) {
-                return Promise.resolve(1)
-            } else {
-                return Promise.resolve(-1)
-            }
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    album: async function() {
-        try {
-            const status = await permisionUtil.requestAndroidPermission('android.permission.READ_EXTERNAL_STORAGE')
-            return Promise.resolve(status)
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    camera: async function() {
-        try {
-            const status = await permisionUtil.requestAndroidPermission('android.permission.CAMERA')
-            return Promise.resolve(status)
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    chooseFile: async function() {
-        try {
-            const status = await permisionUtil.requestAndroidPermission('android.permission.READ_EXTERNAL_STORAGE')
-            return Promise.resolve(status)
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    chooseImage: async function() {
-        try {
-            const status1 = await permisionUtil.requestAndroidPermission('android.permission.CAMERA')
-            const status2 = await permisionUtil.requestAndroidPermission('android.permission.READ_EXTERNAL_STORAGE')
-            if (status1 == 1 || status2 == 1) {
-                return Promise.resolve(1)
-            } else {
-                return Promise.resolve(-1)
-            }
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    chooseVideo: async function() {
-        try {
-            const status1 = await permisionUtil.requestAndroidPermission('android.permission.CAMERA')
-            const status2 = await permisionUtil.requestAndroidPermission('android.permission.READ_EXTERNAL_STORAGE')
-            if (status1 == 1 || status2 == 1) {
-                return Promise.resolve(1)
-            } else {
-                return Promise.resolve(-1)
-            }
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    saveImageToPhotosAlbum: async function() {
-        try {
-            const status = await permisionUtil.requestAndroidPermission('android.permission.WRITE_EXTERNAL_STORAGE')
-            return Promise.resolve(status)
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    saveVideoToPhotosAlbum: async function() {
-        try {
-            const status = await permisionUtil.requestAndroidPermission('android.permission.WRITE_EXTERNAL_STORAGE')
-            return Promise.resolve(status)
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    getLocation: async function() {
-        try {
-            const status = await permisionUtil.requestAndroidPermission('android.permission.ACCESS_FINE_LOCATION')
-            return Promise.resolve(status)
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    startLocationUpdate: async function() {
-        try {
-            const status = await permisionUtil.requestAndroidPermission('android.permission.ACCESS_FINE_LOCATION')
-            return Promise.resolve(status)
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    makePhoneCall: async function() {
-        try {
-            const status = await permisionUtil.requestAndroidPermission('android.permission.CALL_PHONE')
-            return Promise.resolve(status)
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    },
-    getRecorderManager: async function() {
-        try {
-            const status = await permisionUtil.requestAndroidPermission('android.permission.RECORD_AUDIO')
-            return Promise.resolve(status)
-        } catch (e) {
-            return Promise.resolve(0)
-        }
-    }
-}
+// 权限配置对象
+const permissionConfig = {
+	chooseImage: {
+		permissions: ['android.permission.CAMERA', 'android.permission.READ_EXTERNAL_STORAGE'],
+		message: '为了正确识别证件内容,实现图片转文字功能等, 我们需要申请您设备的相机和存储权限。'
+	},
+	chooseVideo: {
+		permissions: ['android.permission.CAMERA', 'android.permission.READ_EXTERNAL_STORAGE'],
+		message: '为了发布信息图片视频等, 我们需要申请您设备的相机和存储权限。'
+	},
+	saveImageToPhotosAlbum: {
+		permissions: ['android.permission.WRITE_EXTERNAL_STORAGE'],
+		message: '为了保存推广海报到手机相册, 我们需要申请您设备的存储权限。'
+	},
+	getLocation: {
+		permissions: ['android.permission.ACCESS_FINE_LOCATION'],
+		message: '为了根据您的位置展示信息, 我们需要申请您设备的位置权限。'
+	},
+	getRecorderManager: {
+		permissions: ['android.permission.RECORD_AUDIO'],
+		message: '为了使用语言消息功能等, 我们需要申请您设备的麦克风权限。'
+	}
+};
 
-const resultHandler = function(args, err) {
-    args.fail && args.fail(err)
-    args.complete && args.complete(err)
-}
+// 显示权限说明弹窗
+const showPermissionExplanation = function(content) {
+	return new Promise((resolve, reject) => {
+		uni.showModal({
+			title: '权限申请说明',
+			content: content,
+			cancelText: '拒绝',
+			confirmText: '允许',
+			success: (res) => {
+				if (res.confirm) {
+					// 用户点击允许
+					resolve(true);
+				} else {
+					// 用户点击拒绝
+					reject(false);
+				}
+			}
+		});
+	});
+};
 
-let getRecorderManagerFlag = false
-const _getRecorderManager = uni.getRecorderManager
+// 请求权限并处理
+const requestPermissions = async function(permissions, message) {
+	try {
+		const explanationAccepted = await showPermissionExplanation(message);
+		if (explanationAccepted) {
+			for (const permission of permissions) {
+				const status = await permisionUtil.requestAndroidPermission(permission);
+				if (status !== PermissionStatus.GRANTED) {
+					return false; // 如果有任何权限请求失败,返回 false
+				}
+			}
+			return true; // 所有权限请求成功
+		}
+	} catch (error) {
+		return false; // 用户拒绝说明弹窗
+	}
+};
 
-const gotoAppPermissionSetting = function() {
-    uni.showModal({
-        title: '提示',
-        content: '当前功能需要开启相应权限,是否前往开启?',
-        cancelText: '否',
-        confirmText: '是',
-        success: (res) => {
-            if (res.confirm) {
-                permisionUtil.gotoAppPermissionSetting()
-            }
-        }
-    })
-}
+// 添加权限拦截器
+const addPermissionInterceptor = function(apiName) {
+	const {
+		permissions,
+		message
+	} = permissionConfig[apiName];
+	uni.addInterceptor(apiName, {
+		invoke(args) {
+			return new Promise(async (resolve, reject) => {
+				const perm = uni.getStorageSync(prefix + apiName);
+				if (perm === PermissionStatus.GRANTED) {
+					resolve(args); // 权限已授予,继续执行
+					return;
+				}
 
-/**
- * @func addPermisionInterceptor
- * @desc 添加权限申请说明拦截
- * @param {String} permisionName 要拦截的 uniApi 名称
- * @param {String} content 申请权限说明信息
- * @param {Boolean} once 只询问一次, 用户不同意申请或拒绝权限将无法使用 uniApi, 如果要继续使用 Api 先用 removePermisionInterceptor 函数移除拦截再调用 Api
- * @return 无
- * @Author huiliyi
- * @Email 1824159241@qq.com
- */
-export const addPermisionInterceptor = function(permisionName, content, once) {
-    if (uniPlatform != 'app' || platform != 'android') return
-    const getRecorderManagerAdapter = function() {
-        const recorder = _getRecorderManager()
-        const _start = recorder.start.bind(recorder)
-        recorder.start = async function(options) {
-            const perm = uni.getStorageSync(prefix + permisionName)
-            if (perm == 1) {
-                _start(options)
-                return
-            }
-            if (once && typeof perm == 'number') {
-                console.error(`用户不同意申请或已拒绝权限`)
-                return
-            }
-            try {
-                popup.show({ content })
-                let status = 0
-                if (permisionMap[permisionName]) {
-                    status = await permisionMap[permisionName]()
-                } else {
-                    status = 1
-                    console.error(`addPermisionInterceptor fail, ${permisionName}-未配置获取权限方法`)
-                }
-                uni.setStorageSync(prefix + permisionName, status)
-                if (status === 1) {
-                    _start(options)
-                }
-                if (status === 0) {
-                    console.error(`申请麦克风权限失败`)
-                }
-                if (status === -1) {
-                    console.error(`用户已拒绝麦克风权限`)
-                    gotoAppPermissionSetting()
-                }
-            } catch (err) {
-                console.error(err)
-            } finally {
-                popup.close()
-            }
-        }
-        return recorder
-    }
-    if (permisionName == 'getRecorderManager') {
-        if (getRecorderManagerFlag) return
-        uni.getRecorderManager = getRecorderManagerAdapter
-        getRecorderManagerFlag = true
-        return
-    }
-    uni.addInterceptor(permisionName, {
-        invoke(args) {
-            if (args.sourceType && Array.isArray(args.sourceType) && args.sourceType.length == 1) permisionName = args.sourceType[0]
-            return new Promise(async (resolve, reject) => {
-                const perm = uni.getStorageSync(prefix + permisionName)
-                if (perm == 1) {
-                    resolve(args)
-                    return
-                }
-                if (once && typeof perm == 'number') {
-                    reject(args)
-                    resultHandler(args, {
-                        errMsg: '用户不同意申请或已拒绝权限'
-                    })
-                    return
-                }
-                try {
-                    popup.show({ content })
-                    let status = 0
-                    if (permisionMap[permisionName]) {
-                        status = await permisionMap[permisionName]()
-                    } else {
-                        status = 1
-                        console.error(`addPermisionInterceptor fail, ${permisionName}-未配置获取权限方法`)
-                    }
-                    uni.setStorageSync(prefix + permisionName, status)
-                    if (status === 1) {
-                        resolve(args)
-                    }
-                    if (status === 0) {
-                        reject(args)
-                        resultHandler(args, {
-                            errMsg: '申请权限失败'
-                        })
-                    }
-                    if (status === -1) {
-                        reject(args)
-                        resultHandler(args, {
-                            errMsg: '用户已拒绝该权限'
-                        })
-                        gotoAppPermissionSetting()
-                    }
-                } catch (err) {
-                    reject(args)
-                    resultHandler(args, err)
-                } finally {
-                    popup.close()
-                }
-            });
-        },
-        success: (res) => {
-            console.log(res);
-        },
-        fail(err) {
-            console.log('interceptor-fail', err)
-            const errMsg = String(err?.errMsg)
-            if (errMsg.includes('fail No Permission') || (errMsg.includes('fail') && errMsg.includes('权限'))) {
-                uni.setStorageSync(prefix + permisionName, 0)
-                gotoAppPermissionSetting()
-            }
-        }
-    })
-}
+				const permissionsGranted = await requestPermissions(permissions, message);
+				if (permissionsGranted) {
+					uni.setStorageSync(prefix + apiName, PermissionStatus.GRANTED);
+					resolve(args); // 权限请求成功,继续执行
+				} else {
+					reject(args); // 权限请求失败,提示用户手动开启权限
+					uni.showModal({
+						title: '权限被拒绝',
+						content: '请前往设置手动开启权限,以便使用该功能。',
+						showCancel: false,
+						confirmText: '知道了'
+					});
+				}
+			});
+		},
+		fail(err) {
+			console.error('权限请求失败', err);
+		}
+	});
+};
 
-/**
- * @func removePermisionInterceptor
- * @desc 移除权限申请说明拦截
- * @param {String} permisionName 要移除拦截的 uniApi 名称
- * @return 无
- * @Author huiliyi
- * @Email 1824159241@qq.com
- */
-export const removePermisionInterceptor = function(permisionName) {
-    if (permisionName == 'getRecorderManager') {
-        getRecorderManagerFlag = false
-        uni.getRecorderManager = _getRecorderManager
-    }
-    uni.removeInterceptor(permisionName)
-    uni.removeStorageSync(prefix + permisionName)
-}
+// 导出功能
+export default {
+	addPermissionInterceptor
+};

Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff