wangguoyu il y a 3 semaines
Parent
commit
14337dcdb6

+ 464 - 0
pages/admin/Jiazheng/bf/banzhengXinxi.vue

@@ -0,0 +1,464 @@
+<template>
+	<view class="jz-content-box">
+		<view v-if="status =='add'" class="bzsm-tip-box form-top-margin">
+			<view class="title-btn-box">
+				<view class="phone-line-title">说明</view>
+				<view @click="resetFun" class="reset-btn">重置</view>
+			</view>
+			<view class="tip-content-box">1.如果不需要办理证书,可直接点击保存按钮。</view>
+			<view class="tip-content-box">2.点击重置按钮,只重置办证信息,其他信息不改变。</view>
+		</view>
+		<!-- 报证机构(picker 实现下拉选择) -->
+		<view class="form-label-select form-top-margin">
+			<view class="phone-form-label"><text class="form-label-require">*</text>报证机构</view>
+			<picker :disabled="(status =='edit'&&localStatus=='')" mode="selector" :range="jigouNames"
+				@change="jigouChange" class="select-picker-box">
+				<view class="form-radio-select" :class="{'form-radio-disabled': (status =='edit'&&localStatus=='')}">
+					<view>{{ formData.baozhengJigouName || '请选择报证机构' }}</view>
+					<icon></icon>
+				</view>
+			</picker>
+		</view>
+		<!-- 职业名称(picker 实现下拉选择) -->
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require">*</text>职业名称</view>
+			<picker mode="selector" :range="zhiyeNames" range-key="name" @change="zhiyeChange"
+				class="select-picker-box">
+				<view class="form-radio-select">
+					<view>{{ formData.zhiyeName || '请选择职业名称' }}</view>
+					<icon></icon>
+				</view>
+			</picker>
+		</view>
+		<!-- 职业等级(picker 实现下拉选择) -->
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require">*</text>职业等级</view>
+			<picker mode="selector" :range="zhiyeLevels" @change="levelChange" class="select-picker-box">
+				<view class="form-radio-select">
+					<view>{{ formData.zhiyeLevelName || '请选择等级' }}</view>
+					<icon></icon>
+				</view>
+			</picker>
+		</view>
+
+		<view v-if="formData.banzhengInfoFlag" class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require">*</text>参训时间</view>
+			<uni-datetime-picker class="form-radio-picker" v-model="formData.canxunShijian" type="date"
+				@change="canxunShijianChange">
+				<view class="form-radio-select">
+					<view>{{formData.canxunShijian}}</view>
+					<icon></icon>
+				</view>
+			</uni-datetime-picker>
+		</view>
+
+		<view v-if="formData.banzhengInfoFlag" class="form-label-input">
+			<view class="phone-form-label"><text class="form-label-require">*</text>实操成绩</view>
+			<input v-model="formData.shicaochengji" placeholder="请填写实操成绩" />
+		</view>
+		<view v-if="formData.banzhengInfoFlag" class="form-label-input">
+			<view class="phone-form-label"><text class="form-label-require">*</text>总课时</view>
+			<input v-model="formData.zongkeshi" placeholder="请填写总课时" />
+		</view>
+
+
+		<view v-if="formData.needFlag" class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require"></text>需要课程</view>
+			<radio-group @change="kechengChange">
+				<label class="radio-label">
+					<radio :value="'true'" :disabled=" formData.kcDisabled" :checked="formData.needKecheng == 'true'"
+						color="#3fd2a1" style="transform:scale(0.65)" />
+					<text>是</text>
+				</label>
+				<label class="radio-label">
+					<radio :value="'false'" :checked="formData.needKecheng == 'false'" color="#3fd2a1"
+						style="transform:scale(0.65)" />
+					<text>否</text>
+				</label>
+			</radio-group>
+		</view>
+		<view v-if="formData.needFlag" class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require"></text>需要考试</view>
+			<radio-group @change="kaoshiChange">
+				<label class="radio-label">
+					<radio :value="'true'" :checked="formData.needKaoshi == 'true'" color="#3fd2a1"
+						style="transform:scale(0.65)" />
+					<text>是</text>
+				</label>
+				<label class="radio-label">
+					<radio :value="'false'" :checked="formData.needKaoshi == 'false'" color="#3fd2a1"
+						style="transform:scale(0.65)" />
+					<text>否</text>
+				</label>
+			</radio-group>
+		</view>
+		<view class="page-btn-box">
+			<button type="default" v-if="status!='add'" @click="goBack" class="phone-white-btn">返回</button>
+			<button type="default" @click="addSaveForm" class="phone-green-btn">保存</button>
+		</view>
+		<!-- 提交按钮 -->
+		<!-- 		<button class="submit-btn" @click="submitForm">提交</button> -->
+	</view>
+</template>
+
+<script>
+	import {
+		getBaozhengJigou,
+		getJiazhengLevel,
+		getJiazhengZhiye,
+		getJiazhengBanzhengCheckKc
+	} from "@/api/jiazheng.js"
+	import dayjs from "dayjs";
+	export default {
+		data() {
+			return {
+				formData: {
+					baozhengJigouId: '',
+					baozhengJigouName: '',
+					baozhengJigouType: '',
+					banzhengInfoFlag: false,
+					zhiyeName: '',
+					zhiyeId: '',
+					zhiyeLevelName: '',
+					zhiyeLevelId: '',
+					canxunShijian: '',
+					shicaochengji: '',
+					zongkeshi: '',
+					needKecheng: 'false', // 默认选中"是"
+					needKaoshi: 'false', // 默认选中"是"
+					kcDisabled: false,
+					needFlag: false,
+					id:'',
+					createTime:''
+				},
+				baozhengJigouOpt: [
+
+				],
+				zhiyelevelsOpt: [],
+				zhiyeNameOpt: [
+
+				],
+				localStatus: '',
+				currentIndex :''
+			};
+		},
+		props: {
+			status: {
+				type: String,
+			}
+		},
+		computed: {
+			jigouNames() {
+				return this.baozhengJigouOpt.map(item => item.name);
+			},
+			zhiyeNames() {
+				return this.zhiyeNameOpt.map(item => item.name);
+			},
+			zhiyeLevels() {
+				return this.zhiyelevelsOpt.map(item => item.name);
+			},
+		},
+		created() {
+			this.getJigou()
+			this.localStatus = this.status
+
+		},
+		methods: {
+			goBack(){
+				this.$emit('goBack');	
+			},
+			editinfo(data,index) {
+				this.$nextTick(() => {
+					if (!data) {
+						return false
+					}
+					console.log('datssssa', data);
+					this.currentIndex = index
+					this.formData.baozhengJigouName = data.jgName;
+					this.formData.baozhengJigouId = data.jgId;
+					this.formData.id = data.id;
+					this.formData.baozhengJigouType = data.jgType;
+					this.formData.banzhengInfoFlag = data.jgType == 1;
+					this.formData.zhiyeName = data.zyName;
+					this.formData.zhiyeId = data.zyId;
+					this.formData.zhiyeLevelName = data.zyLevelName;
+					this.formData.zhiyeLevelId = data.zyLevel;
+					if (this.formData.baozhengJigouId) {
+						getJiazhengZhiye({
+							id: this.formData.baozhengJigouId
+						}).then(res => {
+							console.log('res', res);
+							this.zhiyeNameOpt = res.data
+						})
+					}
+					if (this.formData.baozhengJigouId && this.formData.zhiyeId) {
+						let req = {
+							jgId: this.formData.baozhengJigouId,
+							zyId: this.formData.zhiyeId,
+
+						}
+						getJiazhengLevel(req).then(res => {
+							console.log('res', res);
+							this.zhiyelevelsOpt = res.data
+						})
+					}
+					this.formData.canxunShijian = data.canxunShijian;
+					this.formData.shicaochengji = data.shicaochengji;
+					this.formData.needKecheng = data.needKecheng ? data.needKecheng.toString() : 'false';
+					this.formData.needKaoshi = data.needKaoshi ? data.needKaoshi.toString() : 'false';
+
+					if (this.formData.banzhengInfoFlag) {
+						this.formData.needFlag = false
+
+					} else {
+						this.formData.needFlag = true
+
+					}
+				})
+			},
+			getJigou() {
+				getBaozhengJigou({}).then(res => {
+					console.log('res', res);
+					this.baozhengJigouOpt = res.data
+				})
+			},
+			getZhiye() {
+				this.zhiyeNameOpt = []
+				this.formData.zhiyeName = ''
+				this.formData.zhiyeId = ''
+				getJiazhengZhiye({
+					id: this.formData.baozhengJigouId
+				}).then(res => {
+					console.log('res', res);
+					this.zhiyeNameOpt = res.data
+				})
+			},
+			getZhiyeLevel() {
+				this.zhiyelevelsOpt = []
+				this.formData.zhiyeLevelName = ''
+				this.formData.zhiyeLevelId = ''
+				let req = {
+					jgId: this.formData.baozhengJigouId,
+					zyId: this.formData.zhiyeId,
+
+				}
+				getJiazhengLevel(req).then(res => {
+					console.log('res', res);
+					this.zhiyelevelsOpt = res.data
+				})
+			},
+			resetData() {
+				this.formData.zhiyeName = ''
+				this.formData.zhiyeId = ''
+				this.formData.zhiyeLevelName = ''
+				this.formData.zhiyeLevelId = ''
+				this.formData.canxunShijian = ''
+				this.formData.shicaochengji = ''
+				this.formData.zongkeshi = ''
+			},
+			resetFun() {
+				this.formData.zhiyeName = ''
+				this.formData.zhiyeId = ''
+				this.formData.zhiyeLevelName = ''
+				this.formData.zhiyeLevelId = ''
+				this.formData.canxunShijian = ''
+				this.formData.shicaochengji = ''
+				this.formData.zongkeshi = ''
+				this.formData.baozhengJigouName = ''
+				this.formData.baozhengJigouId = ''
+				this.formData.baozhengJigouName = ''
+				this.formData.needKecheng = 'false'
+				this.formData.needKaoshi = 'false'
+				this.formData.needFlag = false
+				this.formData.kcDisabled = false
+				this.formData.banzhengInfoFlag = false
+	
+
+			},
+			// 报证机构选择
+			jigouChange(e) {
+				this.formData.baozhengJigouName = this.baozhengJigouOpt[e.detail.value].name;
+				this.formData.baozhengJigouId = this.baozhengJigouOpt[e.detail.value].jgId;
+				this.formData.baozhengJigouType = this.baozhengJigouOpt[e.detail.value].jgType;
+				this.formData.banzhengInfoFlag = this.baozhengJigouOpt[e.detail.value].jgType == 1;
+				// 每一次都重置
+				this.resetData()
+				console.log('this.formData.banzhengInfoFlag', this.formData.banzhengInfoFlag);
+				if (this.formData.banzhengInfoFlag) {
+					this.formData.needFlag = false
+					this.formData.needKaoshi = 'false'
+					this.formData.needKecheng = 'false'
+				} else {
+					this.formData.needFlag = true
+					this.formData.needKaoshi = 'true'
+					this.formData.needKecheng = 'false'
+				}
+				this.getZhiye()
+			},
+
+			// 职业等级选择
+			levelChange(e) {
+				this.formData.zhiyeLevelId = this.zhiyelevelsOpt[e.detail.value].id;
+				this.formData.zhiyeLevelName = this.zhiyelevelsOpt[e.detail.value].name;
+			},
+			checkKc() {
+				let req = {
+					zyId: this.formData.zhiyeId,
+					zyLevel: this.formData.zhiyeLevelId
+				}
+				getJiazhengBanzhengCheckKc(req).then(res => {
+					console.log('res', res);
+					if (res.data.pass.toString() == 'true') {
+						this.formData.kcDisabled = false
+						this.formData.needKecheng = 'true'
+					} else {
+						uni.showToast({
+							title: res.data.msg,
+							icon: 'none'
+						});
+						this.formData.needKecheng = 'false'
+						this.formData.kcDisabled = true
+					}
+					//	this.zhiyelevelsOpt = res.data
+				})
+			},
+			// 职业名称选择
+			zhiyeChange(e) {
+				this.formData.zhiyeName = this.zhiyeNameOpt[e.detail.value].name;
+				this.formData.zhiyeId = this.zhiyeNameOpt[e.detail.value].id;
+				this.getZhiyeLevel()
+			},
+			canxunShijianChange(e) {
+				console.log('e', e);
+				this.formData.canxunShijian = e
+			},
+
+			// 需要课程选择
+			kechengChange(e) {
+				this.formData.needKecheng = e.detail.value.toString();
+				console.log('this.formData.needKecheng', this.formData.needKecheng);
+				if (this.formData.needKecheng == 'true') {
+					if (this.formData.zhiyeId && this.formData.zhiyeLevelId) {
+						this.checkKc()
+					} else {
+						uni.showToast({
+							title: '请选择职业以及职业等级',
+							icon: 'none'
+						});
+						setTimeout(() => {
+							this.formData.needKecheng = 'false'
+						}, 1000)
+
+						return false
+					}
+				}
+			},
+
+			// 需要考试选择
+			kaoshiChange(e) {
+				this.formData.needKaoshi = e.detail.value.toString();
+			},
+			currentMove(data) {
+				console.log('');
+				// currentMove 编辑状态下的新增
+				this.localStatus = data
+				console.log('localStatus', this.localStatus);
+			},
+			// 提交表单
+			addSaveForm() {
+				//debugger
+
+				console.log('statusstatusstatus', this.status);
+
+				let req = {
+					canxunshijian: this.formData.canxunshijian,
+					jgId: this.formData.baozhengJigouId,
+					needKaoshi: this.formData.needKaoshi,
+					needKecheng: this.formData.needKecheng,
+					shicaochengji: this.formData.shicaochengji,
+					zongkeshi: this.formData.zongkeshi,
+					zyId: this.formData.zhiyeId,
+					zyLevel: this.formData.zhiyeLevelId,
+					jgType: this.formData.baozhengJigouType,
+					jgName: this.formData.baozhengJigouName,
+					zyName: this.formData.zhiyeName,
+					zyLevelName: this.formData.zhiyeLevelName,
+					id: this.formData.id,
+					createTime:dayjs().format("YYYY-MM-DD HH:mm:ss")
+				}
+				console.log('req', req);
+				if(this.status =='add'||this.localStatus =='editadd'){
+					req.createTime = dayjs().format("YYYY-MM-DD HH:mm:ss")
+				}
+				if (this.formData.baozhengJigouType == 1 && (this.formData.shicaochengji == '' || this.formData
+						.zongkeshi ==
+						'' || this.formData.canxunshijian == '')) {
+					uni.showToast({
+						title: '请填写参训时间,实操成绩,总课时',
+						icon: 'none'
+					});
+					return false
+				}
+				if (req.jgId && req.zyId && req.zyLevel) {
+					if (this.status == 'add') {
+						this.$emit('addSave', req);
+					} else if (this.localStatus == 'editAdd') {
+						this.$emit('editSave', req, 'editAdd');
+					} else {
+						this.$emit('editSave', req, 'edit',this.currentIndex);
+					}
+
+				} else if (req.jgId == '' && req.zyId == '' && req.zyLevel == '') {
+					if (this.status == 'add') {
+						this.$emit('addSave', '');
+					} else if(this.localStatus == 'editAdd') {
+						//this.$emit('editSave', '');
+						// uni.showToast({
+						// 	title: '请选择保证机构,职业名称,职业等级',
+						// 	icon: 'none'
+						// });
+
+						// return false
+					}else{
+						
+					}
+				} else {
+					uni.showToast({
+						title: '请选择保证机构,职业名称,职业等级',
+						icon: 'none'
+					});
+
+					return false
+				}
+				// // 表单验证
+				// if (!this.formData.institution) {
+				// 	uni.showToast({
+				// 		title: '请选择报证机构',
+				// 		icon: 'none'
+				// 	});
+				// 	return;
+				// }
+				// if (!this.formData.selectedLevel) {
+				// 	uni.showToast({
+				// 		title: '请选择职业等级',
+				// 		icon: 'none'
+				// 	});
+				// 	return;
+				// }
+				// if (!this.formData.selectedOccupation) {
+				// 	uni.showToast({
+				// 		title: '请选择职业名称',
+				// 		icon: 'none'
+				// 	});
+				// 	return;
+				// }
+
+				// // 提交数据(示例)
+				// console.log('提交数据:', this.formData);
+				// uni.showToast({
+				// 	title: '提交成功'
+				// });
+			}
+		}
+	};
+</script>

+ 61 - 0
pages/admin/Jiazheng/bf/banzhengXinxiList.vue

@@ -0,0 +1,61 @@
+<template>
+	<view class="bzxx-list-page">
+		<view class="bzxx-wrap-box" v-if="list.length>0">
+			<view v-for="(item,index) in list" :key="index" class="bzxx-card-box">
+				<view class="name-btn-box">
+					<view class="jg-name">报证机构:{{item.jgName}}</view>
+					<view class="name-btn editer-btn" @click="goEdit(item,index)">编辑</view>
+					<view class="name-btn delete-btn" @click="deleteFun(item,index)">删除</view>
+				</view>
+				<view class="bzxx-zy-row"><icon class="zy-icon"></icon>职业名称:<text>{{item.zyName}}</text></view>
+				<view class="bzxx-zy-row"><icon class="zydj-icon"></icon>职业等级:<text>{{item.zyLevelName}}</text></view>
+				<view class="bzxx-time-row"><icon class="time-icon"></icon><text>申报时间:{{item.createTime}}</text></view>
+			</view>
+		</view>
+		<view v-if="list.length>0" class="bzxx-btn-box">
+			<button type="default" @click="addBanzheng" class="phone-white-btn">添加</button>
+		</view>
+		<view v-else class="bzxx-add-btn-box">
+			<view  @click="addBanzheng" class="bzxx-add-btn"><text>+</text>添加办证信息</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getBaozhengJigou,
+		getJiazhengLevel,
+		getJiazhengZhiye,
+		getJiazhengBanzhengCheckKc
+	} from "@/api/jiazheng.js"
+	export default {
+		data() {
+			return {
+
+			};
+		},
+		props: {
+			list: {
+				type: Array,
+				default: () => []
+			},
+		},
+		computed: {
+
+		},
+		created() {
+
+		},
+		methods: {
+			addBanzheng() {
+				this.$emit('addBanzheng');
+			},
+			goEdit(item, index) {
+				this.$emit('editBanzheng', item, index);
+			},
+			deleteFun(item, index) {
+				this.$emit('deleteBanzheng', item, index);
+			}
+		}
+	};
+</script>

+ 247 - 0
pages/admin/Jiazheng/bf/common/dataChecked.vue

@@ -0,0 +1,247 @@
+<template>
+	<view class="phone-radio-group data-check-radio-group">
+		<!-- 技能块展示 -->
+		<view v-for="item in displayedList" :key="item.id" class="phone-radio-item"
+			:class="{ radioActive: isSelected(item.id) }" @click="toggleSelect(item)">
+			{{ item.name }}
+		</view>
+		<!-- 添加按钮 -->
+		<view v-if="showAddButton" class="radio-add-btn" @click="handleAdd">
+			+ 添加
+		</view>
+
+		<!-- 展开/收起按钮 -->
+		<view class="radio-btn-box label-radio-btn-box">
+			<view v-if="showExpandButton" :class="[{ 'radio-btn': true }, showAll ? 'collapsed-btn' : 'expanded-btn']"
+				@click="toggleExpand">
+				{{ showAll ? '收起' : `展开` }}
+			</view>
+		</view>
+
+
+		<!-- 	<view v-if="showExpandButton" class="expand-button" @click="toggleExpand">
+			{{ showAll ? '收起' : `展开剩余${remainingCount}项` }}
+		</view> -->
+
+		<!-- 添加弹窗 -->
+		<uni-popup ref="addPopup" type="dialog" :animation="false" :is-mask-click="false">
+			<view class="phone-common-dialog">
+				<view class="common-body-box">
+					<view class="common-title">新增技能</view>
+					<view class="common-input-box">
+						<input v-model="newName" placeholder="请输入技能名称" class="common-input-margin" />
+					</view>
+				</view>
+				<view class="common-btn-box">
+					<view class="not-confirm-btn" @click="cancelAdd">取消</view>
+					<view class="confirm-btn" @click="confirmAdd">确认</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	export default {
+		name: 'SkillSelector',
+		props: {
+			// 技能列表(必须包含id和name字段)
+			list: {
+				type: Array,
+				required: true,
+				default: () => []
+			},
+			// 默认显示数量
+			defaultCount: {
+				type: Number,
+				default: 10
+			},
+			// 是否显示添加功能
+			showAdd: {
+				type: Boolean,
+				default: true
+			},
+			// 新增模式选择
+			mode: {
+				type: String,
+				default: 'multiple', // 'single' | 'multiple'
+				validator: (value) => ['single', 'multiple'].includes(value)
+			},
+			// 外部传入的已选id(单选时为单个id,多选时为id数组)
+			selectedIds: {
+				type: [Array, Number,String],
+				default: () => []
+			},
+			selectedNames: {
+				type: String,
+				default: ''
+			}
+		},
+		data() {
+			return {
+				showAll: false,
+				selectedData: [],
+				newName: ''
+			};
+		},
+		computed: {
+			displayedList() {
+				return this.showAll ? this.list : this.list.slice(0, this.defaultCount);
+			},
+			remainingCount() {
+				return this.list.length - this.defaultCount;
+			},
+			showExpandButton() {
+				return this.list.length > this.defaultCount;
+			},
+			showAddButton() {
+				if (!this.showAdd) return false;
+				return this.showAll || this.list.length < this.defaultCount;
+			}
+		},
+		watch: {
+			// 监听外部传入的selectedIds变化,更新selectedData
+			selectedIds: {
+
+				handler(newVal) {
+					if (this.mode === 'single') {
+						// 单选模式
+						const selectedItem = this.list.find(item => item.id == newVal);
+						this.selectedData = selectedItem ? [selectedItem] : [];
+					} else {
+						// 多选模式
+						this.selectedData = this.list.filter(item => newVal.includes(item.id));
+					}
+				}
+			},
+			// 监听外部传入的selectedNames变化,更新selectedData
+			selectedNames: {
+				immediate: true,
+				handler(newVal) {
+					if (!newVal) {
+						this.selectedData = [];
+						return;
+					}
+					// 将字符串解析为名称数组
+					const names = newVal.split(',').map(name => name.trim());
+					// 根据名称从list中找到对应的数据
+					this.selectedData = this.list.filter(item => names.includes(item.name));
+				}
+			}
+		},
+		methods: {
+			isSelected(id) {
+				return this.selectedData.some(item => item.id === id);
+			},
+
+
+			toggleSelect(data) {
+				if (this.mode == 'single') {
+					this.handleSingleSelect(data);
+				} else {
+					this.handleMultipleSelect(data);
+				}
+				this.$emit('change', this.selectedData);
+			},
+			// 单选处理逻辑
+			handleSingleSelect(data) {
+				const isSelected = this.selectedData.some(item => item.id == data.id);
+				if (isSelected) {
+					// 取消选择
+					this.selectedData = [];
+				} else {
+					// 替换选择
+					this.selectedData = [data];
+				}
+			},
+			// 多选处理逻辑
+			handleMultipleSelect(data) {
+				const index = this.selectedData.findIndex(item => item.id == data.id);
+				if (index === -1) {
+					this.selectedData.push(data);
+				} else {
+					this.selectedData.splice(index, 1);
+				}
+			},
+			toggleExpand() {
+				this.showAll = !this.showAll;
+			},
+
+			handleAdd() {
+				this.$refs.addPopup.open();
+			},
+
+			confirmAdd() {
+				if (!this.newName.trim()) {
+					uni.showToast({
+						title: '请输入技能名称',
+						icon: 'none'
+					});
+					return;
+				}
+
+				const newObject = {
+					id: this.list.length,
+					name: this.newName
+				};
+				console.log('list', this.list);
+				console.log('newObject', newObject);
+
+				this.$emit('add', newObject);
+				this.newName = '';
+				this.$refs.addPopup.close();
+			},
+
+			cancelAdd() {
+				this.newName = '';
+				this.$refs.addPopup.close();
+			}
+		}
+	};
+</script>
+
+<style scoped>
+	.add-block {
+		background: transparent;
+		border: 1px dashed #007aff;
+		color: #007aff;
+	}
+
+	.expand-button {
+		margin-top: 30rpx;
+		color: #007aff;
+		font-size: 28rpx;
+		text-align: center;
+	}
+
+	.add-popup {
+		padding: 40rpx;
+		background: #fff;
+		border-radius: 16rpx;
+	}
+
+	.add-input {
+		width: 100%;
+		padding: 20rpx;
+		border: 1px solid #eee;
+		border-radius: 8rpx;
+		margin-bottom: 40rpx;
+	}
+
+	.button-group {
+		display: flex;
+		gap: 20rpx;
+	}
+
+	.confirm-button {
+		flex: 1;
+		background: #007aff;
+		color: #fff;
+	}
+
+	.cancel-button {
+		flex: 1;
+		background: #ff3b30;
+		color: #fff;
+	}
+</style>

+ 145 - 0
pages/admin/Jiazheng/bf/common/jiazhengPdfUpload.vue

@@ -0,0 +1,145 @@
+<template>
+  <view>
+    <!-- 触发按钮 -->
+    <slot name="trigger" :uploading="uploading">
+      <button 
+        :disabled="uploading"
+        @click="choosePdf"
+        class="upload-btn"
+      >
+        {{ uploading ? '上传中...' : '上传PDF' }}
+      </button>
+    </slot>
+  </view>
+</template>
+
+<script>
+export default {
+  name: 'PdfUploader',
+  props: {
+    // 上传接口地址
+    uploadUrl: {
+      type: String,
+      required: true
+    },
+    // 最大文件大小(单位:MB)
+    maxSize: {
+      type: Number,
+      default: 50
+    }
+  },
+  data() {
+    return {
+      uploading: false
+    }
+  },
+  methods: {
+    // 选择PDF文件
+    async choosePdf() {
+      if (this.uploading) return
+      
+      try {
+        const [file] = await this.selectFile()
+        await this.verifyFile(file)
+        const result = await this.uploadFile(file)
+        this.$emit('success', result)
+      } catch (error) {
+        this.$emit('error', error)
+        this.showToast(error.message)
+      }
+    },
+
+    // 选择文件
+    selectFile() {
+      return new Promise((resolve, reject) => {
+        uni.chooseFile({
+          count: 1,
+          type: 'file',
+          extension: ['pdf'],
+          success: res => resolve(res.tempFiles),
+          fail: () => reject(new Error('取消选择'))
+        })
+      })
+    },
+
+    // 验证文件
+    verifyFile(file) {
+      const maxBytes = this.maxSize * 1024 * 1024
+      
+      if (!file.type.includes('pdf')) {
+        throw new Error('请选择PDF文件')
+      }
+      
+      if (file.size > maxBytes) {
+        throw new Error(`文件大小不能超过${this.maxSize}MB`)
+      }
+      
+      return true
+    },
+
+    // 执行上传
+    uploadFile(file) {
+      this.uploading = true
+      
+      return new Promise((resolve, reject) => {
+        uni.uploadFile({
+          url: this.uploadUrl,
+          filePath: file.path,
+          name: 'file',
+          formData: {
+            filename: file.name
+          },
+          success: (res) => {
+            if (res.statusCode === 200) {
+              resolve(JSON.parse(res.data))
+            } else {
+              reject(new Error('上传失败'))
+            }
+          },
+          fail: () => reject(new Error('网络错误')),
+          complete: () => (this.uploading = false)
+        })
+      })
+    },
+
+    // 显示提示
+    showToast(message) {
+      uni.showToast({
+        title: message,
+        icon: 'none',
+        duration: 3000
+      })
+    }
+  }
+}
+</script>
+
+<style scoped>
+.upload-btn {
+  background-color: #007AFF;
+  color: white;
+  padding: 10px 20px;
+  border-radius: 5px;
+  font-size: 14px;
+}
+
+.upload-btn[disabled] {
+  background-color: #cccccc;
+}
+</style>
+<!--  <SimplePdfUploader
+      upload-url="https://your-api.com/upload"
+      :max-size="30"
+      @success="handleSuccess"
+      @error="handleError"
+    >
+      <!-- 自定义触发按钮 -->
+      <template v-slot:trigger="{ uploading }">
+        <button 
+          :disabled="uploading"
+          class="custom-btn"
+        >
+          {{ uploading ? '正在上传...' : '选择PDF文件' }}
+        </button>
+      </template>
+    </SimplePdfUploader> -->

+ 282 - 0
pages/admin/Jiazheng/bf/common/jiazhengUpload.vue

@@ -0,0 +1,282 @@
+<template>
+	<view v-if="changjingType =='shenfenzheng'" class="sfz-upload-box" @click="showActionSheet">
+		<view v-if="!imageUrl" class="sfz-content"><text>+</text> 添加身份证</view>
+		<image class="sfz-image" v-else :src="imageUrl" mode=""></image>
+	</view>
+
+	<view v-else-if="changjingType =='more'" class="admin-upload-btn-box" @click="showActionSheet">
+		<text>+</text>
+	</view>
+	<view v-else class="admin-upload-btn-box" @click="showActionSheet">
+		<text v-if="!imageUrl">+</text>
+		<image v-else class="other-image" :src="imageUrl" mode=""></image>
+	</view>
+	<view v-if="bottomText" class="upload-bottom-text">
+		{{bottomText}}
+	</view>
+</template>
+
+<script>
+	import {
+		getAliyunPolicy
+	} from "@/api/jiazheng.js"
+	export default {
+		emits: ['getFileUrl'], // 声明自定义事件
+		data() {
+			return {
+				imageUrl: ""
+			}
+		},
+		props: {
+			bottomText: { // 试题序号
+				type: String
+			},
+			changjingType: {
+				type: String,
+				default: ''
+			},
+			img: {
+				type: String,
+				default: ''
+			}
+		},
+		watch: {
+			img: {
+				handler(newVal) {
+					this.imageUrl = newVal
+				}
+			},
+
+		},
+		methods: {
+			showActionSheet() {
+
+				// 判断是否是H5环境
+				// #ifdef H5
+				this.chooseImage('album'); // H5环境下直接选择相册
+				// #endif
+
+				// #ifndef H5
+				uni.showActionSheet({
+					itemList: ['拍照', '从相册选择'],
+					success: (res) => {
+						if (res.tapIndex === 0) {
+							this.chooseImage('camera');
+						} else if (res.tapIndex === 1) {
+							this.chooseImage('album');
+						}
+					}
+				});
+				// #endif
+
+			},
+			chooseImage(sourceType) {
+				uni.chooseImage({
+					count: 1, // 只能选择一张图片
+					sourceType: [sourceType], // 'camera' 或 'album'
+					success: (res) => {
+						const filePath = res.tempFilePaths[0];
+						this.uploadFileToAliyun(filePath);
+					}
+				});
+			},
+			uploadFileToAliyun(filePath) {
+				console.log('filePath', filePath);
+				const loading = uni.showLoading({
+					title: '上传中...',
+					mask: true
+				});
+			
+				try {
+					const suffix = filePath.split('.').pop();
+					let req = {
+						prefix: 'resource/',
+						suffix: suffix
+					}
+			
+					getAliyunPolicy(req).then(res => {
+						let that = this;
+						if (res.code == 0) {
+							const policyData = res.data;
+							console.log('policyData', policyData);
+			
+							// #ifdef H5
+							const formData = new FormData();
+							formData.append('key', policyData.key);
+							formData.append('policy', policyData.policy);
+							formData.append('OSSAccessKeyId', policyData.accessid);
+							formData.append('signature', policyData.signature);
+							formData.append('success_action_status', '200');
+		
+							fetch(filePath)
+								.then(response => response.blob())
+								.then(blob => {
+									formData.append('file', blob, policyData.key);
+									fetch(policyData.uploadUrl, {
+										method: 'POST',
+										body: formData
+									})
+									.then(response => {
+										if (response.ok) {
+											that.imageUrl = `${policyData.downloadUrl}/${policyData.key}`;
+											uni.showToast({
+												title: '上传成功',
+												icon: 'success'
+											});
+											that.$emit('getFileUrl', that.imageUrl);
+										} else {
+											uni.showToast({
+												title: '上传失败',
+											});
+										}
+									})
+									.catch(error => {
+										console.error('上传失败:', error);
+										uni.showToast({
+											title: '上传失败',
+											icon: 'none'
+										});
+									});
+								})
+								.catch(error => {
+									console.error('文件转换失败:', error);
+									uni.showToast({
+										title: '文件转换失败',
+										icon: 'none'
+									});
+								});
+							// #endif
+			
+							// #ifndef H5
+							// 非 H5 环境下使用 uni.uploadFile 上传
+							uni.uploadFile({
+								url: policyData.uploadUrl,
+								filePath: filePath,
+								name: 'file',
+								formData: {
+									key: policyData.key,
+									policy: policyData.policy,
+									OSSAccessKeyId: policyData.accessid,
+									signature: policyData.signature,
+									success_action_status: '200'
+								},
+								header: {
+									'Content-Type': 'multipart/form-data'
+								},
+								success(uploadRes) {
+									console.log('uploadRes', uploadRes);
+									if (uploadRes.statusCode === 200) {
+										that.imageUrl = `${policyData.downloadUrl}/${policyData.key}`;
+										uni.showToast({
+											title: '上传成功',
+											icon: 'success'
+										});
+										that.$emit('getFileUrl', that.imageUrl);
+									} else {
+										uni.showToast({
+											title: '上传失败',
+										});
+									}
+								},
+								fail(err) {
+									console.log('err', err);
+								}
+							});
+							// #endif
+			
+						} else {
+							uni.showToast({
+								title: '获取凭证失败',
+							});
+						}
+					});
+				} catch (error) {
+					uni.showToast({
+						title: '上传失败',
+						icon: 'none'
+					});
+					console.error('上传失败:', error);
+				} finally {
+					uni.hideLoading();
+				}
+			}
+			// uploadFileToAliyun(filePath) {
+			// 	console.log('filePath', filePath);
+			// 	const loading = uni.showLoading({
+			// 		title: '上传中...',
+			// 		mask: true
+			// 	});
+
+			// 	try {
+			// 		const suffix = filePath.split('.').pop();
+			// 		let req = {
+			// 			prefix: 'resource/',
+			// 			suffix: suffix
+			// 		}
+
+			// 		getAliyunPolicy(req).then(res => {
+			// 			let that = this
+			// 			if (res.code == 0) {
+			// 				const policyData = res.data;
+			// 				console.log('policyData', policyData);
+			// 				const formData = {
+			// 					key: policyData.key,
+			// 					policy: policyData.policy,
+			// 					OSSAccessKeyId: policyData.accessid,
+			// 					signature: policyData.signature,
+			// 					success_action_status: '200',
+			// 					file: {
+			// 						name: policyData.key,
+			// 						uri: filePath
+			// 					}
+			// 				};
+			// 				uni.uploadFile({
+			// 					url: policyData.uploadUrl,
+			// 					filePath: filePath,
+			// 					name: 'file',
+			// 					formData: formData,
+			// 					header: {
+			// 						'Content-Type': 'multipart/form-data'
+			// 					},
+			// 					success(uploadRes) {
+			// 						console.log('uploadRes', uploadRes);
+			// 						if (uploadRes.statusCode === 200) {
+			// 							that.imageUrl = `${policyData.downloadUrl}/${policyData.key}`;
+			// 							uni.showToast({
+			// 								title: '上传成功',
+			// 								icon: 'success'
+			// 							});
+			// 							console.log('imageUrl', that.imageUrl);
+			// 							that.$emit('getFileUrl', that.imageUrl);
+			// 						} else {
+			// 							uni.showToast({
+			// 								title: '上传失败',
+			// 							});
+			// 							return false
+			// 						}
+			// 					},
+			// 					fail(err) {
+			// 						console.log('err', err);
+			// 					}
+			// 				});
+
+			// 			} else {
+			// 				uni.showToast({
+			// 					title: '获取凭证失败',
+			// 				});
+			// 				return false
+			// 			}
+			// 		})
+			// 	} catch (error) {
+			// 		uni.showToast({
+			// 			title: '上传失败',
+			// 			icon: 'none'
+			// 		});
+			// 		console.error('上传失败:', error);
+			// 	} finally {
+			// 		uni.hideLoading();
+			// 	}
+			// },
+		}
+	};
+</script>

+ 104 - 0
pages/admin/Jiazheng/bf/common/kechengLeixing.vue

@@ -0,0 +1,104 @@
+<template>
+	<uni-popup ref="popupKechengLeixingRef" type="top" :animation="false" :is-mask-click="false"
+		mask-background-color="rgba(0, 0, 0, 0.4)">
+		<view class="phone-filter-page">
+			<view class="icon-title-navBar-box">
+				<view @click="goUpPage" class="nav-bar-icon"></view>
+				<text class="nav-bar-title">筛选</text>
+			</view>
+			<view class="filter-body-box">
+				<radio-group @change="handleChange">
+					<!-- 报证机构 -->
+					<view class="filter-body-radio" v-for="item in data.list">
+						<label class="radio-name-box"
+							:class="{radioActive: activeSelect && activeSelect.id==item.id}">
+							<radio :value="`${item.id}`" :checked="item.checked" activeBackgroundColor="#3fd2a1" style="transform:scale(0.8)"/>
+							{{item.lable}}
+						</label>
+						<view class="phone-radio-group filter-radio-group">
+							<view class="phone-radio-item" v-for="citem in item.children"
+								:class="{radioActive: activeSelect && activeSelect.id == citem.id}"
+								@click.stop="handleSelect(citem,item)">
+								{{citem.lable}}
+							</view>
+						</view>
+					</view>
+				</radio-group>
+			</view>
+			<view class="filter-btn-box">
+				<button type="default" class="phone-white-btn filter-btn" @click="handleReset">重置</button>
+				<button type="default" class="phone-green-btn filter-btn" @click="handleConfirm">筛选</button>
+			</view>
+		</view>
+	</uni-popup>
+
+
+</template>
+
+<script setup>
+	import {
+		reactive,
+		ref
+	} from "vue";
+
+	const emits = defineEmits(['select', 'reset']);
+	const data = reactive({
+		list: []
+	})
+	const activeSelect = ref(null);
+
+	const popupKechengLeixingRef = ref(null);
+
+	function goUpPage() {
+		popupKechengLeixingRef.value.close();
+	}
+
+	function handleConfirm() {
+		emits('select', activeSelect.value)
+		popupKechengLeixingRef.value.close();
+	}
+
+	function handleReset() {
+		activeSelect.value = null;
+		emits('reset')
+		popupKechengLeixingRef.value.close();
+	}
+
+	function handleChange(myData) {
+		const activeD = myData.detail.value;
+		data.list.forEach(item => {
+			if (item.id != activeD) {
+				item.checked = false
+			} else {
+				item.checked = true;
+				activeSelect.value = item;
+			}
+
+		})
+	}
+
+	function handleSelect(myData) {
+		data.list.forEach(item => {
+			item.checked = false
+		})
+		activeSelect.value = myData;
+	}
+
+	function showPopup({
+		data: myData
+	}) {
+		data.list = myData;
+		popupKechengLeixingRef.value.open('top')
+	}
+
+
+	defineExpose({
+		showPopup
+	})
+</script>
+
+<style lang="scss">
+	.active {
+		color: red
+	}
+</style>

+ 113 - 0
pages/admin/Jiazheng/bf/common/search.vue

@@ -0,0 +1,113 @@
+<template>
+	<uni-popup ref="searchPopup" type="top" :animation="false" :is-mask-click="true"
+	 mask-background-color="rgba(0, 0, 0, 0.4)">
+	   <view class="select-search-row">
+		   <view class="select-search-body">
+			  <view class="select-jt-box" @click="toggleMenu">
+				<view class="selected-item">{{ selectedOption.label }}</view>
+				<view class="arrow" :class="{ 'arrow-up': isMenuOpen, 'arrow-down': !isMenuOpen }"></view>
+			  </view>
+			  <view class="select-list-box" v-if="isMenuOpen">
+				<view
+				  v-for="(option, index) in options"
+				  :key="option.value"
+				  class="menu-item"
+				  @click="selectOption(option)"
+				>
+				  {{ option.label }}
+				</view>
+			  </view>
+			  <input type="text" class="search-input" v-model="searchInput" :placeholder="searchPlaceholder" />
+			  <view class="search-icon" @click="handleSearch">
+			  	<uni-icons type="search" size="24" color="#fff"></uni-icons>
+			  </view>	
+			</view>
+		</view>
+		<view class="search-clear-box" v-if="searchInput" @click="searchReset">
+			<icon></icon>
+			<text>清空搜索</text>
+		</view>
+  </uni-popup>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+const $emit = defineEmits(['search-btn','reset-search'])
+const searchPopup = ref(null); // 索引
+
+
+const options = ref([
+	  { label: '全部', value: 1 },
+	  { label: '姓名', value: 2 },
+	  { label: '手机号', value: 3 }
+	]);
+const searchPlaceholder= ref('请输入姓名、手机号等关键字');
+const searchInput= ref('');
+// 存储当前选中的选项对象
+const selectedOption = ref(options.value[0]);
+ 
+// 存储菜单是否打开的状态
+const isMenuOpen = ref(false);
+ 
+// 切换菜单打开/关闭状态的函数
+const toggleMenu = () => {
+  isMenuOpen.value = !isMenuOpen.value;
+};
+ 
+// 选择选项的函数
+const selectOption = (option) => {
+  selectedOption.value = option;
+  searchInput.value = '';
+  if(option.label==="全部"){
+	  searchPlaceholder.value = '请输入姓名、手机号等关键字';
+  }else{
+	  searchPlaceholder.value = '请输入'+ option.label;
+  }
+  
+  isMenuOpen.value = false; // 选择后关闭菜单
+};
+
+function validatePhoneNumber(value){
+	const phoneRegex = /^1[3-9]\d{9}$/;
+	if (phoneRegex.test(value)) {
+		return '手机号';
+	} else {
+		return '姓名';
+	}
+}
+
+// 打开弹窗
+function handleShow() {
+	searchPopup.value.open();
+}
+// 取消
+function handleClose() {
+	searchInput.value = '';
+	searchPopup.value.close();
+}
+// 确认
+function handleSearch(){
+	let searchKey = '';
+	if(selectedOption.value.label==="全部"){
+		searchKey = validatePhoneNumber(searchInput.value)
+	}else{
+		searchKey = selectedOption.value.label;
+	}
+	// 搜索 key和 data
+	$emit('search-btn',searchKey,searchInput);
+	searchPopup.value.close();
+}
+
+// 清空搜索
+function searchReset(){
+	searchInput.value = '';
+	$emit('reset-search');
+}
+
+
+defineExpose({
+	handleShow,
+	handleClose
+})
+</script>
+

+ 42 - 0
pages/admin/Jiazheng/bf/common/search2.vue

@@ -0,0 +1,42 @@
+<template>
+	<uni-popup ref="searchPopup" type="top" :animation="false" :is-mask-click="true"
+	 mask-background-color="rgba(0, 0, 0, 0.4)">
+	   <view class="select-search-row">
+		   <view class="select-search-body">
+			  <input type="text" class="search-input" v-model="searchInput" placeholder="请输入课程名称" />
+			  <view class="search-icon" @click="handleSearch">
+			  	<uni-icons type="search" size="24" color="#fff"></uni-icons>
+			  </view>	
+			</view>
+		</view>
+  </uni-popup>
+</template>
+
+<script setup>
+import { ref } from 'vue';
+const $emit = defineEmits(['search-btn'])
+const searchPopup = ref(null); // 索引
+
+const searchInput= ref('');
+ 
+// 打开弹窗
+function handleShow() {
+	searchPopup.value.open();
+}
+// 取消
+function handleClose() {
+	searchInput.value = '';
+	searchPopup.value.close();
+}
+// 确认
+function handleSearch(){
+	$emit('search-btn',searchInput);
+	searchPopup.value.close();
+}
+
+defineExpose({
+	handleShow,
+	handleClose
+})
+</script>
+

+ 148 - 0
pages/admin/Jiazheng/bf/common/share.vue

@@ -0,0 +1,148 @@
+<template>
+	<button @click="showShareMenu" type="default" class="phone-white-btn bz-tel-btn fx-btn-box">分享</button>
+	<!-- 答题卡 -->
+	<uni-popup ref="downPopupRef" background-color="#fff" :animation="false" :is-mask-click="true" :mask-click="false">
+		<view class="share-haibao-box">
+			<view class="phone-line-title">分享</view>
+			<view class="share-list-box">
+				<view class="share-item-box" @click="getImage">
+					<view class="share-icon-box">
+						<icon></icon>
+					</view>
+					<text>下载图片</text>
+				</view>
+			</view>
+		</view>
+	</uni-popup>
+
+</template>
+
+<script>
+	import {
+		jiazhengSharePic
+	} from "@/api/jiazheng.js"
+	export default {
+		data() {
+			return {
+				imageUrl: ''
+			};
+		},
+		props: {
+			id: {
+				type: Number,
+
+			}
+		},
+		methods: {
+
+			showShareMenu() {
+				this.$refs.downPopupRef.open('bottom')
+			},
+
+			getImage() {
+				console.log('id', this.id);
+				jiazhengSharePic({
+					id: this.id
+				}).then(res => {
+					console.log('res', res);
+					if (res.code == 0 && res.data) {
+						this.imageUrl = res.data
+						this.downloadImage()
+					} else {
+						uni.showToast({
+							title: '获取图片失败',
+							icon: 'none'
+						});
+						return false
+					}
+				})
+			},
+
+
+			downloadImage() {
+				// #ifdef H5
+				this.downloadImageForH5();
+				// #endif
+
+				// #ifdef APP-PLUS
+				this.downloadImageForApp();
+				// #endif
+			},
+
+
+			downloadImageForH5() {
+
+				const link = document.createElement('a');
+				link.href = this.imageUrl;
+				link.download = 'image.jpg';
+				document.body.appendChild(link);
+				link.click();
+				document.body.removeChild(link);
+				uni.showToast({
+					title: '图片已下载,请手动保存到相册。',
+					icon: 'none'
+				});
+			},
+
+			downloadImageForApp() {
+				uni.showLoading({
+					title: '下载中...',
+					mask: true
+				});
+
+				uni.downloadFile({
+					url: this.imageUrl,
+					success: (res) => {
+						if (res.statusCode === 200) {
+							const tempFilePath = res.tempFilePath; // 下载后的临时文件路径
+							this.saveImageToAlbum(tempFilePath); // 保存到相册
+						} else {
+							uni.showToast({
+								title: '下载失败',
+								icon: 'none'
+							});
+						}
+					},
+					fail: (err) => {
+						console.error('下载失败:', err);
+						uni.showToast({
+							title: '下载失败',
+							icon: 'none'
+						});
+					},
+					complete: () => {
+						uni.hideLoading();
+					}
+				});
+			},
+
+
+			saveImageToAlbum(tempFilePath) {
+				// #ifdef APP-PLUS
+				this.saveImage(tempFilePath);
+				// #endif
+			},
+			saveImage(tempFilePath) {
+				uni.saveImageToPhotosAlbum({
+					filePath: tempFilePath,
+					success: () => {
+						uni.showToast({
+							title: '保存成功',
+							icon: 'success'
+						});
+							this.$refs.downPopupRef.close()
+					},
+					fail: (err) => {
+						console.error('保存失败:', err);
+						uni.showToast({
+							title: '保存失败',
+							icon: 'none'
+						});
+							this.$refs.downPopupRef.close()
+					}
+				});
+			}
+		}
+	};
+</script>
+

+ 690 - 0
pages/admin/Jiazheng/bf/gerenZiliao.vue

@@ -0,0 +1,690 @@
+<template>
+	<view class="jz-content-box">
+		<view class="upload-img-box">
+			<jiazhengUpload @getFileUrl="getFileUrl" changjingType="shenfenzheng"></jiazhengUpload>
+		</view>
+		<view class="form-label-input">
+			<view class="phone-form-label"><text class="form-label-require">*</text>手机号</view>
+			<uni-easyinput type="number" v-model="formData.userName" placeholder="请输入手机号" maxlength="11" />
+		</view>
+
+		<view class="form-label-input">
+			<view class="phone-form-label"><text class="form-label-require">*</text>姓名</view>
+			<uni-easyinput v-model="formData.realName" placeholder="请输入姓名" />
+		</view>
+
+		<view class="form-label-input">
+			<view class="phone-form-label">
+				<text class="form-label-require">*</text>
+				<text v-if="formData.idtype ==1">身份证号</text>
+				<text v-if="formData.idtype ==2">护照号</text>
+				<icon @click="idCardChange" class="change-icon">切换</icon>
+			</view>
+			<uni-easyinput @blur="idCardBlur" v-model="formData.idcard" placeholder="请输入身份证号或护照号" maxlength="18" />
+		</view>
+
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require">*</text>生日</view>
+			<uni-datetime-picker type="line" v-model="formData.birthday">
+				<view class="form-radio-select">
+					<view>{{formData.birthday}}</view>
+					<icon></icon>
+				</view>
+			</uni-datetime-picker>
+		</view>
+
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require">*</text>籍贯</view>
+			<picker mode="multiSelector" :range="multiArray" :range-key="'label'" :value="multiIndex"
+				@columnchange="bindMultiPickerColumnChange" @change="onPickerConfirm" class="select-picker-box">
+				<view class="form-radio-select">
+					<view>
+						{{formData.jiguanShengName === formData.jiguanShiName ? formData.jiguanShengName  : `${formData.jiguanShengName} ${formData.jiguanShiName}`}}
+					</view>
+					<icon></icon>
+				</view>
+			</picker>
+		</view>
+		<view class="form-label-input">
+			<view class="phone-form-label"><text class="form-label-require">*</text>身份证地址</view>
+			<uni-easyinput v-model="formData.hujiDizhi" placeholder="请输入身份证地址" />
+		</view>
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require">*</text>民族</view>
+			<picker :range="minzuList" mode='selector' :value="formData.minzuIndex" range-key="name"
+				@change="minzuChange" @cancel="minzuCancel" class="select-picker-box">
+				<view class="form-radio-select">
+					<view>{{ formData.minzu.name }}</view>
+					<icon></icon>
+				</view>
+			</picker>
+		</view>
+		<view class="form-label-radio">
+			<view class="phone-form-label"><text class="form-label-require">*</text>性别</view>
+			<view class="form-radio-group">
+				<view class="form-radio-item" :class="{genderActive: formData.gender==1}" @click="genderSelect(1)">
+					男</view>
+				<view class="form-radio-item" :class="{genderActive: formData.gender==2}" @click="genderSelect(2)">
+					女</view>
+			</view>
+		</view>
+		<view class="form-label-radio form-top-margin flex-start-row">
+			<view class="phone-form-label"><text class="form-label-require">*</text>学历</view>
+			<dataChecked :list="xueliList" :selectedIds='formData.xueli.id' mode="single" :showAdd="false"
+				@change="selectChangeXueliList" />
+		</view>
+		<view class="form-label-radio flex-start-row">
+			<view class="phone-form-label"><text class="form-label-require"></text>婚姻 </view>
+			<dataChecked :list="hunyinList" mode="single" :selectedIds='formData.hunyin.id' :showAdd="false"
+				@change="selectChangeHunyinList" />
+		</view>
+
+
+		<view class="form-label-input">
+			<view class="phone-form-label"><text class="form-label-require"></text>通讯地址</view>
+			<view @click="openMap" class="input-text-row">
+				<view v-if="formData.jingdu&&formData.weidu">{{formData.juzhuDizhi}}</view>
+				<view v-if="formData.jingdu ==''&&formData.weidu ==''">{{formData.juzhuDizhi}} <text
+						v-if="formData.juzhuDizhi" style="color: #3fd2a1;">(无经纬度)</text></view>
+				<icon></icon>
+			</view>
+		</view>
+
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require"></text>星座</view>
+			<picker :range="xingzuoList" mode='selector' :value="formData.xingzuoIndex" range-key="name"
+				@change="xingzuoChange" @cancel="xingzuoCancel" class="select-picker-box">
+				<view class="form-radio-select">
+					<view>{{ formData.xingzuo.name  }}</view>
+					<icon></icon>
+				</view>
+			</picker>
+		</view>
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require"></text>属相</view>
+			<picker :range="shuxiangList" mode='selector' :value="formData.shuxiangIndex" range-key="name"
+				@change="shuxiangChange" @cancel="shuxiangCancel" class="select-picker-box">
+				<view class="form-radio-select">
+					<view>{{ formData.shuxiang.name  }}</view>
+					<icon></icon>
+				</view>
+			</picker>
+		</view>
+
+		<view class="form-label-switch">
+			<view class="phone-form-label"> <text class="form-label-require"></text>星座属相展示到简历 </view>
+			<view>展示
+				<switch @change="switchXingzuoChange" :checked="formData.xingzuoFlag" color="#3fd2a1"
+					style="transform:scale(0.7)" />
+			</view>
+		</view>
+
+		<view class="agree-section-box form-top-margin">
+			<checkbox-group @change="handleAgree">
+				<label class="checkbox">
+					<checkbox :checked="formData.agree" color="#3fd2a1" style="transform:scale(0.65)" />
+					<text>已征得本人同意,将其个人资料信息录入平台</text>
+				</label>
+			</checkbox-group>
+			<button type="default" v-if="status =='add'" @click="goNext" class="phone-green-btn">下一步</button>
+			<button type="default" v-if="status =='edit'" @click="editSave" class="phone-green-btn">保存</button>
+		</view>
+		<uni-popup ref="popupMap" background-color="#fff" :is-mask-click="false" :mask-click="false">
+			<customMap style="100vh" @xuanzeAdress="xuanzeAdress" @currentWeizhi="currentWeizhi" @close="mapClose">
+			</customMap>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import dataChecked from './common/dataChecked.vue';
+	import jiazhengUpload from "./common/jiazhengUpload.vue"
+	import customMap from "@/components/customMap/customMap.vue"
+	import {
+		getJiazhengXueli,
+		getJiazhengHunyin,
+		getJiazhengMinzu,
+		getJiazhengShuxiang,
+		getJiazhengXingzuo,
+		getJiazhengJiguan,
+		jiazhengIdcard,
+		jiazhengCheck
+	} from "@/api/jiazheng.js";
+	export default {
+		components: {
+			dataChecked,
+			jiazhengUpload,
+			customMap
+		},
+		props: {
+			status: {
+				type: String,
+			}
+		},
+		data() {
+			return {
+				formData: {
+					userName: '',
+					realName: '',
+					idcard: '',
+					icon: '',
+					birthday: '',
+					hujiDizhi: '',
+					idtype: '1',
+					gender: '',
+					juzhuDizhi: '',
+					jingdu: '',
+					weidu: '',
+					shenfenzhengUrl: '',
+					minzu: {},
+					shuxiang: {
+
+					},
+					xingzuo: {
+
+					},
+					hunyin: {
+						name: '',
+
+					},
+					xueli: {
+
+					},
+					jiguanObj: {},
+					jiguanShengId: '',
+					jiguanShiId: '',
+					jiguanShiName: '',
+					jiguanShengName: '',
+					agree: false,
+					xingzuoIndex: 0,
+					minzuIndex: 0,
+					shuxiangIndex: 0,
+					xingzuoFlag: false
+
+				},
+				selectedIds: [],
+				ceshidata: '',
+				xueliList: [],
+				hunyinList: [],
+				shuxiangList: [],
+				xingzuoList: [],
+				minzuList: [],
+				//	areaTree: [],
+				multiArray: [
+					[],
+					[]
+				], // 初始化两列数据
+				multiIndex: [0, 0], // 初始化选中索引
+				allData: [], // 存储后端返回的完整数据
+
+			}
+		},
+		created() {
+			uni.showLoading({
+				title: '加载中'
+			});
+			this.initRequests()
+		},
+		methods: {
+			xuanzeAdress(data) {
+				console.log('data', data);
+				this.formData.juzhuDizhi = data
+				this.mapClose()
+			},
+			currentWeizhi(data) {
+				console.log('data', data);
+				this.formData.jingdu = data.lng
+				this.formData.weidu = data.lat
+				this.mapClose()
+			},
+			openMap() {
+				this.$refs.popupMap.open('top')
+			},
+			mapClose() {
+				this.$refs.popupMap.close()
+			},
+			idCardBlur() {
+				let req = {
+					idcard: this.formData.idcard,
+				};
+				jiazhengCheck(req).then(res => {
+					if (res.code == 0) {
+						console.log(res);
+						if (res.data.userId != 0) {
+							this.$nextTick(() => {
+								this.formData.userName = res.data.userName
+								this.formData.realName = res.data.realName
+								this.formData.idcard = res.data.idcard
+								this.formData.idtype = res.data.idtype
+								this.formData.jiguanObj.jiguanShengId = res.data.jiguanShengId
+								this.formData.jiguanShengName = res.data.jiguanShengName
+								this.formData.jiguanObj.jiguanShiId = res.data.jiguanShiId
+								this.formData.jiguanShiName = res.data.jiguanShiName
+								this.formData.juzhuDizhi = res.data.juzhuDizhi
+								this.formData.birthday = res.data.birthday
+								this.formData.minzu = this.dataForId(this.minzuList, res.data.minzu) || ''
+								this.formData.gender = res.data.gender
+								this.formData.xueli = this.dataForId(this.xueliList, res.data.xueli) || ''
+								this.formData.hunyin = this.dataForId(this.hunyinList, res.data.hunyin) ||
+									''
+								this.formData.hujiDizhi = res.data.hujiDizhi
+								this.formData.juzhuDizhi = res.data.juzhuDizhi
+								this.formData.xingzuo = this.dataForId(this.xingzuoList, res.data
+									.xingzuo) || ''
+								this.formData.shuxiang = this.dataForId(this.shuxiangList, res.data
+									.xingzuo) || ''
+								this.formData.xingzuoFlag = res.data.xingzuoFlag
+								this.$emit('idCardBlur', res.data);
+							});
+						} else {
+
+						}
+					} else {
+						this.$message.error('');
+						return false;
+					}
+				});
+			},
+
+
+			async initRequests() {
+				try {
+					await Promise.all([
+						this.getXueli(),
+						this.getHunyin(),
+						this.getMinzu(),
+						this.getXingzuo(),
+						this.getShuxiang(),
+						this.getJiguan(),
+					]);
+					uni.hideLoading();
+					if (this.status == 'edit') {
+						this.$emit('finishDom', 'gerenZiliao');
+					}
+				} catch (e) {
+					uni.hideLoading();
+					uni.showToast({
+						title: `请求失败!`,
+						icon: 'none',
+						duration: 2000
+					})
+				}
+			},
+			editinfo(data) {
+				this.$nextTick(() => {
+					this.formData.userName = data.userName
+					this.formData.realName = data.realName
+					this.formData.idcard = data.idcard
+					this.formData.jingdu = data.jingdu
+					this.formData.weidu = data.weidu
+					this.formData.idtype = data.idtype
+					this.formData.jiguanObj.jiguanShengId = data.jiguanShengId
+					this.formData.jiguanShengName = data.jiguanShengName
+					this.formData.jiguanObj.jiguanShiId = data.jiguanShiId
+					this.formData.jiguanShiName = data.jiguanShiName
+					this.formData.juzhuDizhi = data.juzhuDizhi
+					this.formData.birthday = data.birthday
+					this.formData.minzu = this.dataForId(this.minzuList, data.minzu) || ''
+					this.formData.gender = data.gender
+					this.formData.xueli = this.dataForId(this.xueliList, data.xueli) || ''
+					this.formData.hunyin = this.dataForId(this.hunyinList, data.hunyin) || ''
+					this.formData.hujiDizhi = data.hujiDizhi
+					this.formData.juzhuDizhi = data.juzhuDizhi
+					this.formData.xingzuo = this.dataForId(this.xingzuoList, data.xingzuo) || ''
+					this.formData.shuxiang = this.dataForId(this.shuxiangList, data.xingzuo) || ''
+					this.formData.xingzuoFlag = data.xingzuoFlag
+
+				})
+			},
+			dataForId(list, id) {
+				return list.find(item => item.id == id);
+			},
+
+			idCardChange(data) {
+				this.formData.idtype = this.formData.idtype == 1 ? 2 : 1;
+			},
+			getJiguan() {
+				getJiazhengJiguan({}).then(res => {
+					//	this.areaTree = res.data
+					//	this.pickerData = this.formatData(res.data);
+					this.allData = res.data;
+					const provinces = this.allData.map(province => ({
+						label: province.lable,
+						value: province.id,
+						children: province.children,
+					}));
+
+					const cities = this.allData[0].children.map(city => ({
+						label: city.lable,
+						value: city.id,
+					}));
+					// 回显已选中的城市(假设已选中的城市 id 是 1301)
+					//this.setSelectedCity(1301);
+
+					this.multiArray = [provinces, cities];
+					//console.log('this.pickerData', this.pickerData);
+				}).catch(error => {
+					console.error('获取技能类型失败:', error);
+				});
+			},
+
+
+
+			bindMultiPickerColumnChange(e) {
+				const {
+					column,
+					value
+				} = e.detail;
+
+				// 更新 multiIndex
+				this.multiIndex[column] = value;
+
+				// 如果是第一列(省份)发生变化,更新第二列(城市)
+				if (column === 0) {
+					const selectedProvince = this.multiArray[0][value];
+					const cities = selectedProvince.children.map(city => ({
+						label: city.lable,
+						value: city.id,
+					}));
+
+					// 更新 multiArray 和 multiIndex
+					this.multiArray[1] = cities;
+					this.multiIndex[1] = 0; // 重置城市列为第一个选项
+				}
+
+				// 强制更新视图
+				//this.$forceUpdate();
+			},
+			// 确认选择时获取完整数据
+			onPickerConfirm() {
+				const [provinceIndex, cityIndex] = this.multiIndex;
+
+				const selectedProvince = this.multiArray[0][provinceIndex];
+				const selectedCity = this.multiArray[1][cityIndex];
+				console.log("选中的省份完整数据:", selectedProvince);
+				console.log("选中的城市完整数据:", selectedCity);
+				this.formData.jiguanShengId = selectedProvince ? selectedProvince.value : ''
+				this.formData.jiguanShiId = selectedCity ? selectedCity.value : ''
+				this.formData.jiguanShiName = selectedCity ? selectedCity.label : ''
+				this.formData.jiguanShengName = selectedProvince ? selectedProvince.label : ''
+				this.formData.jiguanObj.jiguanShengId = selectedProvince ? selectedProvince.value : ''
+				this.formData.jiguanObj.jiguanShiId = selectedCity ? selectedCity.value : ''
+
+			},
+			setSelectedCity(cityId) {
+				for (let i = 0; i < this.allData.length; i++) {
+					const province = this.allData[i];
+					for (let j = 0; j < province.children.length; j++) {
+						const city = province.children[j];
+						if (city.id === cityId) {
+							// 设置选中的省份和城市索引
+							this.multiIndex = [i, j];
+
+							// 更新 multiArray 的第二列(城市)
+							const cities = province.children.map(city => ({
+								label: city.lable,
+								value: city.id,
+							}));
+							this.multiArray[1] = cities;
+
+							// 强制更新视图
+							this.$forceUpdate();
+							return;
+						}
+					}
+				}
+			},
+
+			checkAllFields() {
+				const requiredFields = [{
+						key: 'userName',
+						name: '手机号'
+					},
+					{
+						key: 'realName',
+						name: '姓名'
+					},
+					{
+						key: 'idcard',
+						name: '身份证号'
+					},
+					{
+						key: 'birthday',
+						name: '生日'
+					},
+					// {
+					// 	key: 'hometown',
+					// 	name: '家乡',
+					// 	type: 'array'
+					// },
+					// {
+					// 	key: 'hujiDizhi',
+					// 	name: '身份证地址'
+					// },
+					{
+						key: 'gender',
+						name: '性别'
+					},
+					// {
+					// 	key: 'juzhuDizhi',
+					// 	name: '通讯地址'
+					// },
+					{
+						key: 'minzu',
+						name: '民族',
+						type: 'object'
+					},
+					{
+						key: 'jiguanObj',
+						name: '籍贯',
+						type: 'object'
+					},
+					{
+						key: 'xueli',
+						name: '学历',
+						type: 'object'
+					},
+					// {
+					// 	key: 'shuxiang',
+					// 	name: '属相',
+					// 	type: 'object'
+					// },
+					// {
+					// 	key: 'xingzuo',
+					// 	name: '星座',
+					// 	type: 'object'
+					// },
+				]
+
+				for (const field of requiredFields) {
+					const value = this.formData[field.key]
+
+					// 根据不同类型进行存在验证
+					if (field.type === 'array' && !value?.length) {
+						this.showAlert(field.name)
+						return false
+					}
+					if (field.type === 'object' && !Object.keys(value).length) {
+						this.showAlert(field.name)
+						return false
+					}
+					if (field.type === 'boolean' && value !== true) {
+						this.showAlert(field.name)
+						return false
+					}
+					if (!field.type && !value?.toString().trim()) {
+						this.showAlert(field.name)
+						return false
+					}
+				}
+				return true
+			},
+			showAlert(fieldName) {
+				uni.showToast({
+					title: `${fieldName}不能为空`,
+					icon: 'none',
+					duration: 2000
+				})
+			},
+
+			getXueli() {
+				getJiazhengXueli({}).then(res => {
+					this.xueliList = res.data
+					//	console.log('xueliList', this.xueliList);
+				}).catch(error => {
+					console.error('获取技能类型失败:', error);
+				});
+			},
+			getXingzuo() {
+				getJiazhengXingzuo({}).then(res => {
+					this.xingzuoList = res.data
+					//			console.log('xingzuoList', this.xingzuoList);
+				}).catch(error => {
+					console.error('获取技能类型失败:', error);
+				});
+			},
+			getShuxiang() {
+				getJiazhengShuxiang({}).then(res => {
+					this.shuxiangList = res.data
+					//		console.log('shuxiangList', this.shuxiangList);
+				}).catch(error => {
+					console.error('获取技能类型失败:', error);
+				});
+			},
+			getHunyin() {
+				getJiazhengHunyin({}).then(res => {
+					this.hunyinList = res.data
+					//	console.log('hunyinList', this.hunyinList);
+				}).catch(error => {
+					console.error('获取技能类型失败:', error);
+				});
+			},
+			getMinzu() {
+				getJiazhengMinzu({}).then(res => {
+					this.minzuList = res.data
+					//		console.log('minzuList', this.minzuList);
+				}).catch(error => {
+					console.error('获取技能类型失败:', error);
+				});
+			},
+			getFileUrl(data) {
+				this.formData.shenfenzhengUrl = data
+				console.log('data', data);
+				jiazhengIdcard({
+					url: this.formData.shenfenzhengUrl
+				}).then(res => {
+					console.log('res', res);
+					if (res.code == 0) {
+
+
+
+
+						this.formData.realName = res.data.name
+						this.formData.idtype = '1'
+						this.formData.gender = res.data.genderId
+						this.formData.minzu.name = res.data.minzuName
+						this.formData.minzu.id = res.data.minzuId
+						this.formData.birthday = res.data.birthDate
+						this.formData.hujiDizhi = res.data.address
+						this.formData.idcard = res.data.idNumber
+						this.formData.shuxiang.id = res.data.shuxiangId
+						this.formData.shuxiang.name = res.data.shuxiangName
+						this.formData.xingzuo.id = res.data.xingzuoId
+						this.formData.xingzuo.name = res.data.xingzuoName
+						this.formData.jiguanShengId = res.data.jiguanShengId
+						this.formData.jiguanShiId = res.data.jiguanShiId
+						this.formData.jiguanShengName = res.data.jiguanShengName
+						this.formData.jiguanShiName = res.data.jiguanShiName
+						this.formData.jiguanObj.jiguanShengId = res.data.jiguanShengId
+						this.formData.jiguanObj.jiguanShiId = res.data.jiguanShiId
+					}
+				})
+			},
+			minzuChange(e) {
+				const index = e.detail.value
+				this.formData.minzu = this.minzuList[index]
+				//console.log('this.formData.minzu', this.formData.minzu);
+
+			},
+			minzuCancel() {
+				this.formData.minzuIndex = 0
+			},
+			xingzuoChange(e) {
+				const index = e.detail.value
+				this.formData.xingzuo = this.xingzuoList[index]
+				//	console.log('this.formData.xingzuo', this.formData.xingzuo);
+
+			},
+			xingzuoCancel() {
+				this.formData.xingzuoIndex = 0
+			},
+			shuxiangChange(e) {
+				const index = e.detail.value
+				this.formData.shuxiang = this.shuxiangList[index]
+				//console.log('this.formData.shuxiang', this.formData.shuxiang);
+
+			},
+			shuxiangCancel() {
+				this.formData.shuxiangIndex = 0
+			},
+			selectChangeXueliList(data) {
+				if (data.length > 0) {
+					this.formData.xueli = data[0]
+				} else {
+					this.formData.xueli = {}
+				}
+			},
+			genderSelect(data) {
+				this.formData.gender = data
+			},
+			selectChangeHunyinList(data) {
+				console.log('data', data[0]);
+				if (data.length > 0) {
+					this.formData.hunyin = data[0]
+				} else {
+					this.formData.hunyin = {}
+				}
+
+			},
+			switchXingzuoChange(e) {
+				this.formData.xingzuoFlag = e.detail.value
+			},
+			goNext() {
+				console.log('formData', this.formData);
+
+				if (!this.checkAllFields()) {
+					return false
+				}
+				if (!this.formData.agree) {
+					uni.showToast({
+						title: "请勾选本人同意!",
+						icon: 'none',
+						duration: 2000
+					})
+					return false
+				}
+				this.$emit('goNext', this.formData, 0);
+			},
+			editSave() {
+				console.log('formData', this.formData);
+
+				if (!this.checkAllFields()) {
+					return false
+				}
+				if (!this.formData.agree) {
+					uni.showToast({
+						title: "请勾选本人同意!",
+						icon: 'none',
+						duration: 2000
+					})
+					return false
+				}
+				this.$emit('editSave', this.formData);
+			},
+
+			handleAgree(e) {
+				this.formData.agree = e.detail.value.length > 0
+			},
+		}
+	}
+</script>

+ 457 - 0
pages/admin/Jiazheng/bf/index.vue

@@ -0,0 +1,457 @@
+<template>
+	<view class="admin-jiazheng-list">
+		<view class="phone-navBar-box">
+			<view @click="goUpPage" class="nav-bar-icon"></view>
+			<text class="nav-bar-title">家政人员</text>
+			<uni-icons class="nav-bar-right-icon bar-ml10" type="search" size="20" @click="toggle('top')"></uni-icons>
+		</view>
+		<view class="jiazheng-search-box">
+			<view @click.stop="clickAlltype" class="select-item-box">
+				<text class="select-text">{{data.zyName}}</text>
+				<icon :class="allJtClass" />
+			</view>
+
+			<view class="jiazheng-search-right">
+				<!--  当前点击 增加 saixuan-active-->
+				<view @click="updateTimeClick" :class="shaixuanStyleUpdate">
+					<text>更新时间</text>
+					<icon :class="updataJtClass" />
+				</view>
+				<view @click="luruTimeClick" :class="shaixuanStyleluru">
+					<!-- class切换  saixuan-jt-default  saixuan-jt-click-->
+					<text>录入时间</text>
+					<icon :class="luruJtClass" />
+				</view>
+				<view @click="juliClick" :class="shaixuanStylejuli">
+					<!-- class切换  saixuan-jt-default  saixuan-jt-click-->
+					<text :class="data.weizhiFlag?'':'saixuan-disabled'">距离排序</text>
+					<icon :class="juliJtClass" />
+				</view>
+			</view>
+		</view>
+		<view class="all-type-box" v-show="isOpen" @click="clickAlltype">
+			<dataChecked :list="allType" mode="single" :defaultCount="99" :showAdd="false"
+				@change="selectChangeSkill" />
+		</view>
+		<view>
+			<scroll-view scroll-y="true" refresher-enabled="true" :refresher-triggered="data.loading"
+				:refresher-threshold="50" @scrolltolower="onScrolltolower" refresher-background="transparent" @refresherrefresh="onRefresh"
+		
+				class="jz-scroll-view">
+				<uni-list class="admin-list-box">
+					<view class="jz-new-btn-box">
+						<button type="default" class="phone-green-btn" @click="addJiazhengRenyuan">新增人员</button>
+					</view>
+
+					<uni-list-item v-for="item in data.list" class="jz-list-item-box">
+						<template v-slot:body>
+							<view class="card-head-row">
+								<view class="head-name">{{item.realName}}</view>
+								<button type="default" class="phone-green-btn bz-bind-btn"
+									@click.stop="kechengBind(item)">课程绑定</button>
+									<button type="default" class="phone-green-btn bz-tel-btn"
+										@click.stop="telephone(item)">打电话</button>
+								<share :id="item.id" ref="shareRef">分享</share>
+
+							</view>
+							<view @click="lookUserInfo(item)" class="card-body-row">
+								<view class="card-img-box">
+									<img :src="item.icon" v-if="item.icon">
+									<icon class="phone-default-userImg" v-else></icon>
+								</view>
+								<view class="body-content-row">
+									<view class="content-text-row">
+										<view> {{item.age}}岁<text v-if="item.jingyan"> | {{item.jingyan}}经验</text>
+										</view>
+										<view class="text-status">{{item.zhuangtai}}</view>
+									</view>
+									<view class="content-text-row">
+										{{item.jiguanShengName === item.jiguanShiName ? item.jiguanShengName  : `${item.jiguanShengName} ${item.jiguanShiName}`}}人
+									</view>
+						
+									<view v-if="item.zyNames.length>0"  class="content-lx-box">
+										<view class="content-lx-item" v-for="item2 in item.zyNames" :key="item2">
+											{{item2}}
+										</view>
+									</view>
+									<!-- <view class="content-text-row">{{item.jiguan}}</view> -->
+								</view>
+							</view>
+						</template>
+					</uni-list-item>
+					<uni-load-more :status="data.state" @click="getMore(0)"
+						:contentText="data.contentText"></uni-load-more>
+				</uni-list>
+			</scroll-view>
+		</view>
+		<view>
+			<search-dialog ref="searchDialogRef" @search-btn="dialogSearchBtn"
+				@reset-search="dialogSearchReset"></search-dialog>
+		</view>
+		<customTabbarAdminVue :current-tab="1"></customTabbarAdminVue>
+	</view>
+</template>
+
+<script setup>
+	import {
+		ref,
+		reactive
+	} from "vue";
+	import {
+		onLoad
+	} from "@dcloudio/uni-app";
+	import {
+		getJiazhengList,
+		getJiazhengJineng,
+		getJiazhengZhiyeAll,
+		getJiazhengLeixing
+	} from "@/api/jiazheng.js"
+	import dataChecked from './common/dataChecked.vue';
+	import searchDialog from "./common/search.vue";
+	import share from "./common/share.vue";
+	import customTabbarAdminVue from "@/components/custom-tabbar/custom-tabbar-admin.vue";
+	const searchDialogRef = ref(null);
+	const shareRef = ref(null);
+	let allType = ref([])
+	let data = reactive({
+		zyId: '',
+		zyName: '全部职业',
+		page: 0,
+		size: 10,
+		realName: '',
+		sortRule: '', //排序规则(1降序,2升序
+		sortRule: '', //排序类型(1更新时间,2录入时间)
+		userName: '',
+		weidu: '',
+		jingdu: '',
+		weizhiFlag: false,
+		id: '',
+		list: [], // 考试列表
+		loading: false,
+		state: 'more',
+		contentText: {
+			contentdown: '查看更多',
+			contentrefresh: '加载中',
+			contentnomore: '没有更多'
+		}
+	})
+	let isOpen = ref(false)
+	let defauleImg = ref('@/static/images/my/user-default-img.png')
+	const allJtClass = 'select-jt-default';
+	let updataJtClass = ref('');
+	let luruJtClass = ref('');
+	let juliJtClass = ref('');
+	let shaixuanStyleUpdate = ref('saixuan-item-box');
+	let shaixuanStyleluru = ref('saixuan-item-box');
+	let shaixuanStylejuli = ref('saixuan-item-box');
+	const isOpenSelect = ref(false);
+	const selectedOption = ref('');
+	let isFirstClickUpdate = ref('true')
+	let isFirstClickluru = ref('true')
+	let isFirstClickjuli = ref('true')
+
+	function updateTimeClick() {
+		data.sortType = 1
+		const isFirst = isFirstClickUpdate.value == 'true';
+		const isSecond = isFirstClickUpdate.value == 'false';
+		if (isFirst) {
+			shaixuanStyleUpdate.value = 'saixuan-item-box saixuan-active';
+			updataJtClass.value = 'saixuan-jt-default';
+			isFirstClickUpdate.value = 'false';
+			data.sortRule = 1
+		} else if (isSecond) {
+			shaixuanStyleUpdate.value = 'saixuan-item-box saixuan-active';
+			updataJtClass.value = 'saixuan-jt-click';
+			isFirstClickUpdate.value = 'empty';
+			data.sortRule = 2
+		} else {
+			shaixuanStyleUpdate.value = 'saixuan-item-box';
+			updataJtClass.value = '';
+			isFirstClickUpdate.value = 'true';
+			data.sortRule = 0
+		}
+		data.page = 0;
+		refreshData()
+	}
+
+	function onScrolltolower(){
+		getMore()
+	}
+	
+	
+	function luruTimeClick() {
+		data.sortType = 2
+		const isFirst = isFirstClickluru.value == 'true';
+		const isSecond = isFirstClickluru.value == 'false';
+		if (isFirst) {
+			shaixuanStyleluru.value = 'saixuan-item-box saixuan-active';
+			luruJtClass.value = 'saixuan-jt-default';
+			isFirstClickluru.value = 'false';
+			data.sortRule = 1
+		} else if (isSecond) {
+			shaixuanStyleluru.value = 'saixuan-item-box saixuan-active';
+			luruJtClass.value = 'saixuan-jt-click';
+			isFirstClickluru.value = 'empty';
+			data.sortRule = 2
+		} else {
+			shaixuanStyleluru.value = 'saixuan-item-box';
+			luruJtClass.value = '';
+			isFirstClickluru.value = 'true';
+			data.sortRule = 0
+		}
+		data.page = 0;
+		refreshData()
+	}
+
+	function juliClick() {
+		if (!data.weizhiFlag) {
+			uni.showToast({
+				title: `当前位置经纬度获取失败,请重新进入该页面!`,
+				icon: 'none',
+				duration: 2000
+			})
+			return false
+		}
+		data.sortType = 3
+		const isFirst = isFirstClickjuli.value == 'true';
+		const isSecond = isFirstClickjuli.value == 'false';
+		if (isFirst) {
+			shaixuanStylejuli.value = 'saixuan-item-box saixuan-active';
+			juliJtClass.value = 'saixuan-jt-default';
+			isFirstClickjuli.value = 'false';
+			data.sortRule = 1
+		} else if (isSecond) {
+			shaixuanStylejuli.value = 'saixuan-item-box saixuan-active';
+			juliJtClass.value = 'saixuan-jt-click';
+			isFirstClickjuli.value = 'empty';
+			data.sortRule = 2
+		} else {
+			shaixuanStylejuli.value = 'saixuan-item-box';
+			juliJtClass.value = '';
+			isFirstClickjuli.value = 'true';
+			data.sortRule = 0
+		}
+		data.page = 0;
+		refreshData()
+	}
+
+	function dialogSearchBtn(name, searchData) {
+		switch (name) {
+			case '姓名':
+				dialogSearchReset();
+				data.realName = searchData.value;
+				break;
+			case '手机号':
+				data.userName = searchData.value;
+				break;
+		}
+		data.page = 0;
+		refreshData();
+
+	}
+
+	function dialogSearchReset() {
+		data.userName = '';
+		data.realName = '';
+	}
+	const clickAlltype = (data) => {
+		isOpen.value = !isOpen.value;
+	}
+
+	const toggle = (data, index) => {
+		searchDialogRef.value.handleShow();
+	}
+	const addJiazhengRenyuan = () => {
+		let pageInfo = {
+			status: 'add'
+		}
+		uni.redirectTo({
+			url: "/pages/admin/Jiazheng/jiazhengUserManager?pageInfo=" + JSON.stringify(pageInfo)
+		})
+	}
+	const lookUserInfo = (data) => {
+		let pageInfo = {
+			status: 'edit',
+			id: data.id,
+			userId: data.userId
+		}
+		uni.redirectTo({
+			url: `/pages/admin/Jiazheng/jiazhengUserInfo?pageInfo=` + JSON.stringify(pageInfo)
+		})
+	}
+
+	function goUpPage() {
+		uni.redirectTo({
+			url: `/pages/admin/ShouYe/shouye`
+		})
+	}
+
+	function onRefresh() {
+		data.page = 0;
+		data.list = [];
+		data.loading = true;
+		refreshData();
+	}
+
+	function telephone(data) {
+		console.log('data', data);
+		if (data.userName) {
+			uni.makePhoneCall({
+				phoneNumber: data.userName
+			});
+		} else {
+			uni.showToast({
+				title: `无电话号`,
+				icon: 'none',
+				duration: 2000
+			})
+			return false
+		}
+
+	}
+	function kechengBind(data){
+		uni.redirectTo({
+			url: `/pages/admin/Jiazheng/kechengBind?id=`+ data.id
+		})
+	}
+
+	function selectChangeSkill(item) {
+		if (item.length > 0) {
+			data.zyId = item[0].id
+			data.zyName = item[0].name
+			console.log('selectChangeSkill', item);
+			data.page = 0;
+			refreshData()
+		}
+	}
+
+	function refreshData() {
+		const opt = {
+			"zyId": data.zyId == '全部职业' ? '' : data.zyId,
+			"page": 1,
+			"realName": data.realName,
+			"size": 10,
+			"sortRule": data.sortRule,
+			"sortType": data.sortType,
+			"userName": data.userName,
+			"jingdu": data.jingdu,
+			"weidu": data.weidu
+		}
+		data.list = [];
+		// 数学
+		data.state = 'loading';
+		data.page++;
+		opt.page = data.page;
+
+		getJiazhengList(opt).then(res => {
+			data.list = data.list.concat(res.data.data);
+			data.list = data.list.map(item => {
+				const newItem = {
+					...item
+				};
+				if(item.zyNames ==''){
+					newItem.zyNames = []
+				}else{
+				newItem.zyNames = item.zyNames.split(',');
+				}
+				return newItem;
+			})
+			data.loading = false;
+
+			if (res.data.total > data.list.length) {
+				data.state = 'more';
+				data.loading = false;
+			} else {
+				data.state = 'no-more';
+				data.loading = false;
+			}
+		}).catch(err => {
+			data.state = 'more';
+			data.loading = false;
+		})
+	}
+
+	function getMore() {
+		const opt = {
+			"zyId": data.zyId == '全部职业' ? '' : data.zyId,
+			"page": 1,
+			"realName": data.realName,
+			"size": 10,
+			"sortRule": data.sortRule,
+			"sortType": data.sortType,
+			"userName": data.userName,
+			"jingdu": data.jingdu,
+			"weidu": data.weidu
+		}
+		if (data.state == 'no-more') return;
+		data.state = 'loading';
+		data.page++;
+		opt.page = data.page;
+		getJiazhengList(opt).then(res => {
+			data.list = data.list.concat(res.data.data);
+			data.list = data.list.map(item => {
+				const newItem = {
+					...item
+				};
+				if(item.zyNames ==''){
+					newItem.zyNames = []
+				}else{
+				newItem.zyNames = item.zyNames.split(',');
+				}
+				return newItem;
+			})
+			console.log('data.list', data.list);
+			data.loading = false;
+
+			if (res.data.total > data.list.length) {
+				data.state = 'more';
+				data.loading = false;
+			} else {
+				data.state = 'no-more';
+				data.loading = false;
+			}
+		}).catch(err => {
+			data.state = 'more';
+			data.loading = false;
+		})
+	}
+
+	function getLeixing() {
+		let req = {}
+		getJiazhengZhiyeAll(req).then(res => {
+			res.data.unshift({id:'',name:'全部职业'});
+			allType = res.data
+		//	allType = dataConversionObject(res.data)
+			console.log('allType', allType);
+		})
+	}
+
+	function dataConversionObject(data) {
+		let newList
+		newList = data.map((name, index) => ({
+			id: index,
+			name: name
+		}));
+		return newList
+	}
+
+	function getCurrentWeizhi() {
+		console.log('1231231');
+		uni.getLocation({
+			type: 'wgs84',
+			success: function(res) {
+				console.log('res', res)
+				data.jingdu = res.longitude
+				data.weidu = res.latitude
+				data.weizhiFlag = true
+				console.log('当前位置的经度:' + res.longitude);
+				console.log('当前位置的纬度:' + res.latitude);
+			}
+		});
+	}
+	onLoad(() => {
+		getMore()
+		getLeixing()
+		getCurrentWeizhi()
+	})
+</script>

+ 182 - 0
pages/admin/Jiazheng/bf/jiazhengUserInfo.vue

@@ -0,0 +1,182 @@
+<template>
+	<view class="phone-jianli-page">
+		<view class="phone-navBar-box">
+			<view @click="goUpPage" class="nav-bar-icon"></view>
+			<text class="nav-bar-title">家政人员信息</text>
+			<!-- 删除↓ wgy看这 -->
+			<i class="nav-bar-right-icon right-icon-delete-btn" @click="deleteUser"></i>
+		</view>
+		<view class="jianli-wrap-box">
+			<view class="jianli-head-box">
+				<view class="head-img-box">
+					<img class="head-img" :src="jianliInfo.icon" v-if="jianliInfo.icon">
+					<icon class="phone-default-userImg" v-else></icon>
+					<view class="head-status" v-if="jianliInfo.zhuangtai">{{jianliInfo.zhuangtai}}</view>
+				</view>
+				<view class="head-content-box">
+					<view class="name-row">{{jianliInfo.realName}}</view>
+					<view>
+						{{jianliInfo.jiguanShengName === jianliInfo.jiguanShiName ? jianliInfo.jiguanShengName  : `${jianliInfo.jiguanShengName} ${jianliInfo.jiguanShiName}`}}人
+					</view>
+					<view>
+						<text>{{jianliInfo.nianling}}岁</text>
+						<text v-if="jianliInfo.jingyan"> | {{jianliInfo.jingyan}}</text>
+					</view>
+				</view>
+			</view>
+
+			<view class="jianli-body-box">
+				<view v-if="jianliInfo.zyNames" class="leixing-row">
+					<view class="jbxx-label">职 业:</view>
+					<text class="leixing-content">{{jianliInfo.zyNames}}</text>
+				</view>
+				<view class="body-jbxx-box">
+					<view class="jbxx-title">基本信息</view>
+					<view>
+						<view class="jbxx-label">学 历:</view>{{jianliInfo.xueli}}
+					</view>
+					<view>
+						<view class="jbxx-label">民 族:</view>{{jianliInfo.minzu}}
+					</view>
+					<view v-if="jianliInfo.xingzuoFla =='true'">
+						<view class="jbxx-label">属 相:</view>{{jianliInfo.shuxiang}}
+					</view>
+					<view v-if="jianliInfo.xingzuoFla =='true'">
+						<view class="jbxx-label">星 座:</view>{{jianliInfo.xingzuo}}
+					</view>
+					<view>
+						<view class="jbxx-label">性 别:</view>{{jianliInfo.gender}}
+					</view>
+					<view>
+						<view class="jbxx-label">婚姻状况:</view>{{jianliInfo.hunyin}}
+					</view>
+					<view>
+						<view class="jbxx-label">现住地址:</view>{{jianliInfo.juzhuDizhi}}
+					</view>
+					<view>
+						<view class="jbxx-label">家政公司:</view>{{jianliInfo.jzName}}
+					</view>
+				</view>
+			</view>
+			<view class="jbxx-tip">{{jianliInfo.tips}} </view>
+			<view class="jianli-bottom-box">
+				<view @click="goJiazhengManage">
+					<icon class="bottom-icon zl-icon"></icon>
+					<text class="bottom-text">资料编辑</text>
+				</view>
+				<view @click="callPhone">
+					<icon class="bottom-icon tel-icon"></icon>
+					<text class="bottom-text">拨打电话</text>
+				</view>
+			</view>
+		</view>
+		<common-dialog ref="deleteDialogRef" :title="deleteTitle" :content="deleteConcent"
+			@confirm-btn="deleteQuerenBtn"></common-dialog>
+	</view>
+</template>
+<script>
+	import {
+		ref
+	} from "vue";
+	import {
+		getJiazhengJianli,
+		jiazhengUserDelete
+	} from "@/api/jiazheng.js";
+	import commonDialog from '@/components/dialog/commonDialog.vue';
+	export default {
+		data() {
+			return {
+				pageInfo: {},
+				jianliInfo: {},
+				deleteConcent: '你确定要执行这个操作吗?',
+				deleteTitle: '删除',
+				deleteIndex: '',
+			}
+		},
+		components: {
+			commonDialog
+		},
+		onLoad(options) {
+			let data = JSON.parse(options.pageInfo)
+			this.pageInfo.status = data.status
+			this.pageInfo.id = data.id
+			this.pageInfo.userId = data.userId
+			this.pageInfo.from = data.from
+			this.getJianliInfo()
+		},
+		methods: {
+			deleteUser() {
+				this.$refs.deleteDialogRef.handleShow()
+			},
+			deleteQuerenBtn() {
+				jiazhengUserDelete({
+					ids: [this.pageInfo.id]
+				}).then(res => {
+					if (res.code == 0) {
+						uni.showToast({
+							title: "成功",
+							icon: 'none',
+							duration: 2000
+						})
+						this.goUpPage()
+					}
+				})
+			},
+			getJianliInfo() {
+				let req = {
+					id: this.pageInfo.id,
+					userId: this.pageInfo.userId
+				}
+				getJiazhengJianli(req).then(res => {
+					console.log('res', res);
+					if (res.code == 0) {
+						this.jianliInfo = {
+							...res.data
+						};
+						// if(this.jianliInfo.zyNames){
+							
+						// }
+					}
+				})
+			},
+			callPhone() {
+				if (this.jianliInfo.userName) {
+					uni.makePhoneCall({
+						phoneNumber: this.jianliInfo.userName
+					});
+				} else {
+					uni.showToast({
+						title: `无电话号`,
+						icon: 'none',
+						duration: 2000
+					})
+					return false
+				}
+
+			},
+			goJiazhengManage() {
+				let pageInfo = {
+					status: 'edit',
+					id: this.pageInfo.id,
+					userId: this.pageInfo.userId
+				}
+				uni.redirectTo({
+					url: "/pages/admin/Jiazheng/jiazhengUserManager?pageInfo=" + JSON.stringify(pageInfo)
+				})
+			},
+			goUpPage() {
+				if (this.pageInfo.from == 'banzheng') {
+					uni.redirectTo({
+						url: "/pages/admin/banzheng/list"
+					})
+				} else {
+					uni.redirectTo({
+						url: "/pages/admin/Jiazheng/index"
+					})
+				}
+
+			},
+
+		}
+	}
+</script>

+ 545 - 0
pages/admin/Jiazheng/bf/jiazhengUserManager.vue

@@ -0,0 +1,545 @@
+<template>
+	<view class="admin-jiazheng-page">
+		<view class="icon-title-navBar-box">
+			<view @click="goUpPage" class="nav-bar-icon"></view>
+			<text class="nav-bar-title">家政人员</text>
+		</view>
+		<v-tabs v-model="current" :tabs="tabs" :scroll="false" @change="changeTab" field="name"
+			class="admin-tab-box"></v-tabs>
+		<gerenZiliao ref="gerenZiliao" :status='status' @idCardBlur="idCardBlur" @finishDom='finishDom'
+			@editSave="editSaveGerenziliao" @goNext="gerenziliaoNext" v-show="current ==0"></gerenZiliao>
+		<qiuzhiXinxi ref="qiuzhiXinxi" :status='status' @editSave="editSaveQiuzhixinxi" @goNext="goNextQiuzhixinxi"
+			v-show="current ==1">
+		</qiuzhiXinxi>
+		<zhaopianZiliao ref="zhaopianZiliao" :status='status' @editSave="editSaveZhaopianziliao"
+			@goNext="goNextZhaopianZiliao" v-show="current ==2"></zhaopianZiliao>
+		<banzhengXinxi ref="banzhengXinxi" :status='status' @goBack="goBack" @addSave="addSave" @editSave="editSave"
+			v-show="current ==3">
+		</banzhengXinxi>
+		<banzhengXinxiList :list="editInfo.kaozhengList" v-show="banzhengXinxiFlag" @editBanzheng="editBanzheng"
+			@addBanzheng="addBanzheng" @deleteBanzheng="deleteBanzheng" ref="banzhengXinxiList"></banzhengXinxiList>
+		<common-dialog ref="commonDialogRef" :title="deleteTitle" :content="deleteConcent"
+			@confirm-btn="deleteQuerenBtn"></common-dialog>
+	</view>
+</template>
+
+<script>
+	import {
+		ref
+	} from "vue";
+	import banzhengXinxi from './banzhengXinxi.vue';
+	import banzhengXinxiList from './banzhengXinxiList.vue';
+	import qiuzhiXinxi from './qiuzhiXinxi.vue';
+	import zhaopianZiliao from './zhaopianZiliao.vue';
+	import commonDialog from '@/components/dialog/commonDialog.vue';
+	import gerenZiliao from './gerenZiliao.vue';
+	import {
+		getJiazhengInfo,
+		jiazhengAdd,
+		jiazhengUpdate,
+		jiazhengKaozhengAdd,
+		jiazhengKaozhengDelete,
+		jiazhengKaozhengUpdate
+	} from "@/api/jiazheng.js";
+	export default {
+		data() {
+			return {
+				current: 0,
+				//	tabs: ['个人资料', '求职信息', '照片资料', '办证信息']
+				tabs: [],
+				allData: {
+					"birthday": "",
+					"gender": '',
+					"hujiDizhi": "",
+					"hunyin": '',
+					"icon": "",
+					"idcard": "",
+					"idcardUrl1": "",
+					"idcardUrl2": "",
+					"idtype": '',
+					"jiankangDate": "",
+					"jibiexinzi": "",
+					"jiguanShengId": '',
+					"jiguanShiId": '',
+					"jineng": "",
+					"jingli": "",
+					"jingyan": "",
+					"juzhuDizhi": "",
+					"kaozhengList": [],
+					//"leixing": "",
+					"minzu": '',
+					"qiwangxinzi": "",
+					"realName": "",
+					"shenghuoUrls": "",
+					"shuxiang": '',
+					"tijianDate": "",
+					"tijianUrls": "",
+					"userId": '',
+					"userName": "",
+					"xingzuo": '',
+					"xingzuoFlag": false,
+					"xueli": '',
+					"zhengshuUrls": "",
+					"zhuangtai": '',
+					"jingdu": '',
+					"weidu": ''
+
+				},
+				status: '',
+				id: '',
+				userId: '',
+				banzhengXinxiFlag: false,
+				editInfo: {},
+				deleteConcent: '你确定要执行这个操作吗?',
+				deleteTitle: '删除',
+				deleteIndex: '',
+				deleteId: '',
+				from: '',
+			}
+		},
+		components: {
+			banzhengXinxi,
+			banzhengXinxiList,
+			qiuzhiXinxi,
+			gerenZiliao,
+			commonDialog,
+			zhaopianZiliao
+		},
+		watch: {
+			// 监听外部传入的selectedIds变化,更新selectedData
+			current: {
+				handler(newVal) {
+					console.log('newValnewValnewVal', this.current);
+					if (newVal == 1 && this.status == 'add') {
+						console.log('this.$refs.qiuzhiXinxi', this.$refs.qiuzhiXinxi);
+						this.$refs.qiuzhiXinxi.zhuangtai = 1
+					}
+
+				}
+			},
+
+		},
+		onLoad(options) {
+			let pageInfo = JSON.parse(options.pageInfo)
+			this.status = pageInfo.status
+			this.from = pageInfo.from
+			this.dataHandle(pageInfo)
+		},
+		methods: {
+			goBack() {
+				this.banzhengXinxiFlag = true
+			},
+			editBanzheng(data, index) {
+				console.log('dataasdf', data);
+				this.current = 3
+				this.banzhengXinxiFlag = false
+				this.$refs.banzhengXinxi.editinfo(data, index)
+				this.$refs.banzhengXinxi.currentMove('edit')
+			},
+			addBanzheng(data, index) {
+				this.banzhengXinxiFlag = false
+				this.current = 3
+				this.$refs.banzhengXinxi.resetFun()
+				this.$refs.banzhengXinxi.currentMove('editAdd')
+			},
+			deleteBanzheng(data, index) {
+				console.log('data', data);
+				console.log('index', index);
+				console.log('data.statusBanzheng', data.statusBanzheng);
+				this.deleteId = data.id
+				this.deleteIndex = index
+				if (data.statusBanzheng == '办证完成') {
+					uni.showToast({
+						title: "办证状态为办证完成禁止删除",
+						icon: 'none',
+						duration: 2000
+					})
+					return false
+				}
+				this.$refs.commonDialogRef.handleShow()
+			},
+			deleteQuerenBtn() {
+				jiazhengKaozhengDelete({
+					ids: [this.deleteId]
+				}).then(res => {
+					if (res.code == 0) {
+						uni.showToast({
+							title: "成功",
+							icon: 'none',
+							duration: 2000
+						})
+						this.editInfo.kaozhengList.splice(this.deleteIndex, 1);
+						if (this.editInfo.kaozhengList.length == 0) {
+							this.banzhengXinxiFlag = true
+						}
+					}
+				})
+			},
+			idCardBlur(data) {
+				if(this.status == 'edit'){
+					this.$refs.qiuzhiXinxi.editinfo(data)
+					this.$refs.zhaopianZiliao.editinfo(data)
+				}
+			},
+			dataHandle(pageInfo) {
+				if (this.status == 'add') {
+					this.tabs = [{
+							id: 1,
+							name: '个人资料',
+							disabled: false
+						},
+						{
+							id: 2,
+							name: '求职信息',
+							disabled: true
+						},
+						{
+							id: 3,
+							name: '照片资料',
+							disabled: true
+						},
+						{
+							id: 4,
+							name: '办证信息',
+							disabled: true
+						},
+					]
+				} else {
+					this.id = pageInfo.id
+					this.userId = pageInfo.userId
+					this.tabs = [{
+							id: 1,
+							name: '个人资料',
+							disabled: false
+						},
+						{
+							id: 2,
+							name: '求职信息',
+							disabled: false
+						},
+						{
+							id: 3,
+							name: '照片资料',
+							disabled: false
+						},
+						{
+							id: 4,
+							name: '办证信息',
+							disabled: false
+						},
+					]
+
+				}
+			},
+			finishDom() {
+				let req = {
+					id: this.id,
+					userId: this.userId
+				}
+				getJiazhengInfo(req).then(res => {
+					if (res.code == 0) {
+						this.$refs.gerenZiliao.editinfo(res.data)
+						this.editInfo = JSON.parse(JSON.stringify(res.data));
+						this.allData = JSON.parse(JSON.stringify(res.data));
+						this.allData.id = this.id
+						console.log('this.allData this.allData ', this.allData);
+					} else {
+						uni.showToast({
+							icon: 'none',
+							title: '获取详情失败'
+						})
+						return false
+					}
+				})
+			},
+			changeTab(data) {
+				console.log('data', data);
+				if (this.status == 'edit' && data == 3) {
+					this.banzhengXinxiFlag = true
+					return false
+				} else {
+					this.banzhengXinxiFlag = false
+				}
+				if (this.status == 'add') {
+					if (this.current >= 0) {
+						this.current--;
+						this.updateTabs();
+					}
+				}
+				this.current = data
+				if (this.status != 'edit') {
+					return false
+				}
+				switch (Number(data)) {
+					case 0:
+						this.$refs.gerenZiliao.editinfo(this.editInfo)
+						break;
+					case 1:
+						this.$refs.qiuzhiXinxi.editinfo(this.editInfo)
+						break;
+					case 2:
+						this.$refs.zhaopianZiliao.editinfo(this.editInfo)
+						break;
+					case 3:
+						this.$refs.banzhengXinxi.editinfo()
+						break;
+					default:
+						break;
+				}
+
+
+			},
+			gerenZiliaoDataHandle(data, flag) {
+				console.log('gerenZiliaoDataHandle', data);
+				console.log('gerenZiliaoDataHandle', data.hunyin.id);
+				this.allData.userName = data.userName
+				this.allData.realName = data.realName
+				this.allData.idcard = data.idcard
+				this.allData.idtype = data.idtype
+				this.allData.jiguanShengId = data.jiguanObj.jiguanShengId
+				this.allData.jiguanShiId = data.jiguanObj.jiguanShiId
+				this.allData.juzhuDizhi = data.juzhuDizhi
+				this.allData.birthday = data.birthday
+				this.allData.minzu = data.minzu.id
+				this.allData.gender = data.gender
+				this.allData.xueli = data.xueli.id
+				this.allData.hunyin = data.hunyin.id
+				this.allData.hujiDizhi = data.hujiDizhi
+				this.allData.xingzuo = data.xingzuo.id
+				this.allData.shuxiang = data.shuxiang.id
+				this.allData.xingzuoFlag = data.xingzuoFlag
+				this.allData.jingdu = data.jingdu
+				this.allData.weidu = data.weidu
+				if (flag == 'edit') {
+					jiazhengUpdate(this.allData).then(res => {
+						uni.showToast({
+							title: "保存成功!",
+							icon: 'none',
+							duration: 2000
+						})
+					})
+				}
+			},
+			gerenziliaoNext(data, num) {
+				this.gerenZiliaoDataHandle(data)
+				// this.current = num + 1
+				// this.tabs = this.tabs.map((item, i) => {
+				// 	if (i == this.current) item.disabled = false
+				// 	return item
+				// })
+				if (this.current < this.tabs.length - 1) {
+					this.current++;
+					this.updateTabs();
+				}
+
+			},
+			editSaveGerenziliao(data) {
+				this.gerenZiliaoDataHandle(data, 'edit')
+			},
+			qiuzhiXinxiDataHandle(data, flag) {
+			//	this.allData.leixing = data.leixing
+				this.allData.jingyan = data.jingyan
+				this.allData.jineng = data.jineng
+				this.allData.zhuangtai = data.zhuangtai
+				this.allData.jibiexinzi = data.jibiexinzi
+				this.allData.qiwangxinzi = data.qiwangxinzi
+				this.allData.jingli = data.jingli
+				if (flag == 'edit') {
+					jiazhengUpdate(this.allData).then(res => {
+						uni.showToast({
+							title: "保存成功!",
+							icon: 'none',
+							duration: 2000
+						})
+					})
+				}
+			},
+			goNextQiuzhixinxi(data, num) {
+				this.qiuzhiXinxiDataHandle(data)
+
+				if (this.current < this.tabs.length - 1) {
+					this.current++;
+					this.updateTabs();
+				}
+
+
+
+				// this.current = num + 1
+				// this.tabs = this.tabs.map((item, i) => {
+				// 	if (i == this.current) item.disabled = false
+				// 	return item
+				// })
+			},
+			updateTabs() {
+				console.log('this.tabsthis.tabs', this.tabs);
+				console.log('this.current', this.tabs);
+
+				this.tabs = this.tabs.map((item, i) => {
+					// 当前页签及之前的页签 disabled 为 false,之后的页签 disabled 为 true
+					item.disabled = i >= this.current;
+					return item;
+				});
+			},
+			editSaveQiuzhixinxi(data) {
+				this.qiuzhiXinxiDataHandle(data, 'edit')
+			},
+
+			goNextZhaopianZiliao(data, num) {
+				this.zhaopianziliaoDataHandle(data)
+				// this.current = num + 1
+				// this.tabs = this.tabs.map((item, i) => {
+				// 	if (i == this.current) item.disabled = false
+				// 	return item
+				// })
+				if (this.current < this.tabs.length - 1) {
+					this.current++;
+					this.updateTabs();
+				}
+
+			},
+			zhaopianziliaoDataHandle(data, flag) {
+				this.allData.icon = data.icon
+				this.allData.idcardUrl1 = data.idcardUrl1
+				this.allData.idcardUrl2 = data.idcardUrl2
+				this.allData.shenghuoUrls = data.shenghuoUrls
+				this.allData.zhengshuUrls = data.zhengshuUrls
+				this.allData.tijianDate = data.tijianDate
+				this.allData.jiankangDate = data.jiankangDate
+				this.allData.tijianUrls = data.tijianUrls
+				if (flag == 'edit') {
+					jiazhengUpdate(this.allData).then(res => {
+						uni.showToast({
+							title: "保存成功!",
+							icon: 'none',
+							duration: 2000
+						})
+					})
+				}
+			},
+			editSaveZhaopianziliao(data) {
+				this.zhaopianziliaoDataHandle(data, 'edit')
+			},
+			addSave(data) {
+				if (this.status == 'add') {
+					this.submitJiazheng(data)
+				} else {}
+
+
+			},
+			submitJiazheng(data) {
+			//	debugger
+				console.log('this.allData', this.allData);
+
+				if (data != '') {
+				//	debugger
+					this.allData.kaozhengList.push(data)
+				}
+				if (this.allData.kaozhengList.length > 0 && this.allData.icon == '') {
+					uni.showToast({
+						title: "当录入办证信息时候,头像必填",
+						icon: 'none',
+						duration: 2000
+					})
+					this.allData.kaozhengList = []
+					return false
+				}
+				jiazhengAdd(this.allData).then(res => {
+					if (res.code == 0) {
+						uni.showToast({
+							title: "成功",
+							icon: 'none',
+							duration: 2000
+						})
+						uni.navigateTo({
+							url: `/pages/admin/Jiazheng/index`
+						})
+					} else {
+						uni.showToast({
+							title: "失败",
+							icon: 'none',
+							duration: 2000
+						})
+						return false
+					}
+
+				})
+
+			},
+			editSave(data, flag, index) {
+			//	debugger
+				console.log('this.allData', this.allData);
+				console.log('this.editInfo', this.editInfo);
+				if (flag == 'edit') {
+					jiazhengKaozhengUpdate(data).then(res => {
+						if (res.code == 0) {
+							uni.showToast({
+								title: "保存成功!",
+								icon: 'none',
+								duration: 2000
+							})
+							this.banzhengXinxiFlag = true
+							this.editInfo.kaozhengList[index].canxunshijian = data.canxunshijian
+							this.editInfo.kaozhengList[index].jgId = data.jgId
+							this.editInfo.kaozhengList[index].jgName = data.jgName
+							this.editInfo.kaozhengList[index].jzId = data.jzId
+							this.editInfo.kaozhengList[index].needKaoshi = data.needKaoshi
+							this.editInfo.kaozhengList[index].needKecheng = data.needKecheng
+							this.editInfo.kaozhengList[index].needKecheng = data.needKecheng
+							this.editInfo.kaozhengList[index].shicaochengji = data.shicaochengji
+							this.editInfo.kaozhengList[index].statusBanzheng = data.statusBanzheng
+							this.editInfo.kaozhengList[index].statusKaoshi = data.statusKaoshi
+							this.editInfo.kaozhengList[index].zongkeshi = data.zongkeshi
+							this.editInfo.kaozhengList[index].id = data.id
+							this.editInfo.kaozhengList[index].zyId = data.zyId
+							this.editInfo.kaozhengList[index].zyLevel = data.zyLevel
+							this.editInfo.kaozhengList[index].zyLevelName = data.zyLevelName
+							this.editInfo.kaozhengList[index].zyName = data.zyName
+						}
+
+					})
+				} else if (flag == 'editAdd') {
+					data.userId = this.userId
+					if (this.allData.icon == '') {
+						uni.showToast({
+							title: "当录入办证信息时候,头像必填",
+							icon: 'none',
+							duration: 2000
+						})
+						return false
+					}
+					jiazhengKaozhengAdd(data).then(res => {
+						if (res.code == 0) {
+							data.id = res.data
+							this.allData.kaozhengList.push(data)
+							this.editInfo.kaozhengList.push(data)
+							console.log('this.editInfo.kaozhengList', this.editInfo.kaozhengList);
+							this.banzhengXinxiFlag = true
+						}
+					})
+
+				}
+				// if (data != '') {
+				// 	this.allData.kaozhengList.push(data)
+				// }
+				// if(this.status =='add'){
+				// 	this.submitJiazheng()
+				// }else{
+
+				// }
+			},
+			goUpPage() {
+				if(this.from =='banzheng'){
+					uni.redirectTo({
+						url: "/pages/admin/banzheng/list"
+					})
+				}else{
+					uni.navigateTo({
+						url: `/pages/admin/Jiazheng/index`
+					})
+				}
+				
+			}
+
+		}
+	}
+</script>

+ 306 - 0
pages/admin/Jiazheng/bf/kechengBind.vue

@@ -0,0 +1,306 @@
+<template>
+	<view class="phone-list-page kc-bind-page">
+		<view class="phone-navBar-box">
+			<view @click="goUpPage" class="nav-bar-icon"></view>
+			<text class="nav-bar-title">家政人员</text>
+			<uni-icons v-show="current ==0" class="nav-bar-right-icon bar-ml10" type="search" @click="searchBtn"
+				size="20"></uni-icons>
+			<uni-icons v-show="current ==1" style="opacity: 0;" class="nav-bar-right-icon bar-ml10" type="search"
+				size="20"></uni-icons>
+		</view>
+		<v-tabs v-model="current" :tabs="tabs" :scroll="false" @change="changeTab" field="name"
+			class="admin-tab-box"></v-tabs>
+		<view v-if="current ==0" class="jiazheng-search-box">
+			<view @click.stop="clickAlltype" class="select-item-box">
+				<text class="select-text">{{leixing}}</text>
+				<icon class="select-jt-default" />
+			</view>
+			<view>课程剩余数量:{{kechengNumber||0}}</view>
+		</view>
+		<view class="kc-bind-scroll-view scroll-top-border" v-if="current ==0">
+
+			<uni-list class="admin-list-box">
+				<uni-list-item v-for="item in list" class="admin-list-item-box">
+					<template v-slot:body>
+						<view @click="lookUserInfo(item)" class="kecheng-list-card">
+							<img :src="item.pic">
+							<view class="item-card-row">
+								<view class="ks-item-top">
+									<view class="kc-name">{{item.name}}</view>
+								</view>
+								<view class="ks-totalTm kc-fenlei">
+									<icon class="phone-fenlei-icon" />分类:{{item.kcClassifyName}}
+								</view>
+								<button class="kc-bind-btn phone-green-btn" type="default" size="mini"
+									@click.stop="toAdd(item)">绑定</button>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+		</view>
+		<view class="kc-notbind-scroll-view scroll-top-border" v-if="current ==1">
+			<uni-list class="admin-list-box">
+				<uni-list-item v-for="item in listYx" class="admin-list-item-box">
+					<template v-slot:body>
+
+						<view @click="lookUserInfo(item)" class="kecheng-list-card">
+							<img :src="item.pic" v-if="item.pic">
+							<view class="item-card-row">
+								<view class="ks-item-top">
+									<view class="kc-name">{{item.name}}</view>
+								</view>
+								<!-- <view class="ks-totalTm kc-fenlei">
+									<icon class="phone-fenlei-icon" />分类:{{item.kcClassifyName}}
+								</view> -->
+								<view class="bind-btn-row">
+									<button type="default" size="mini" class="kc-bind-btn phone-green-btn"
+										@click="toReset(item)">重置</button>
+									<button type="default" size="mini" class="kc-bind-btn phone-white-btn"
+										@click="toDelete(item)">删除</button>
+								</view>
+							</view>
+						</view>
+					</template>
+				</uni-list-item>
+			</uni-list>
+		</view>
+		<common-dialog ref="commonDialogRef" :title="deleteTitle" :content="deleteConcent"
+			@confirm-btn="deleteQuerenBtn"></common-dialog>
+		<kechengLeixingVue ref="kclxRef" @select="handleSelectLeixing" @reset="handleResetLeixing"></kechengLeixingVue>
+		<searchVue ref="searchRef" @search-btn="handleSearchFromBtn"></searchVue>
+	</view>
+</template>
+
+<script>
+	import {
+		ref
+	} from "vue";
+	import {
+		kcSelectList,
+		jiazhengKcList,
+		jiazhengKcAdd,
+		jiazhengKcDelete,
+		getAdminClassify,
+		kechengReset,
+		chaxunNumberKecheng
+	} from "@/api/jiazheng.js";
+	import commonDialog from '@/components/dialog/commonDialog.vue';
+	import kechengLeixingVue from "./common/kechengLeixing.vue";
+		import {toast} from "@/utils/common";
+	import searchVue from "./common/search2.vue";
+	import {
+		debounce
+	} from "@/utils/common";
+	export default {
+		data() {
+			return {
+				leixing: '全部类型',
+				leixingList: [],
+				selectClassify: null,
+				kcClassifyId: 0,
+				id: '',
+				kechengNumber: '',
+				addFlag: false,
+				name: '',
+				current: 0,
+				list: [],
+				listYx: [],
+				deleteTitle: '删除',
+				kcId: '',
+				deleteConcent: '你确定要执行这个操作吗',
+				tabs: [{
+						id: 1,
+						name: '未绑定课程',
+
+					},
+					{
+						id: 2,
+						name: '已绑定课程',
+
+					},
+				],
+			}
+		},
+		components: {
+			commonDialog,
+			kechengLeixingVue,
+			searchVue
+		},
+		onLoad(options) {
+			this.id = options.id
+			this.getList()
+			this.getKechengClassify()
+			this.chaxunNumber()
+		},
+		methods: {
+			chaxunNumber() {
+				chaxunNumberKecheng({
+					id: this.id
+				}).then(res => {
+					if (res.code == 0) {
+						this.kechengNumber = res.data
+						this.addFlag = this.kechengNumber > 0;
+					} else {
+						uni.showToast({
+							title: '失败'
+						});
+						return false
+					}
+				})
+			},
+			toReset(data) {
+				let req = {
+					kcId: data.kcId,
+					id: this.id
+				}
+				kechengReset(req).then(res => {
+					if (res.code == 0) {
+						this.getList()
+						uni.showToast({
+							title: '成功',
+							icon: 'success'
+						});
+					} else {
+						uni.showToast({
+							title: '失败'
+
+						});
+						return false
+					}
+				})
+			},
+			searchBtn() {
+				this.$refs.searchRef.handleShow()
+			},
+
+			handleSearchFromBtn(textD) {
+				this.name = textD;
+				this.getList()
+			},
+			handleResetLeixing() {
+				this.selectClassify = null;
+				this.leixing = '全部类型';
+				this.getList()
+			},
+			handleSelectLeixing(item) {
+				this.leixing = item.lable;
+				this.selectClassify = item;
+				this.getList()
+			},
+			clickAlltype() {
+				this.$refs.kclxRef.showPopup({
+					data: this.leixingList
+				})
+			},
+			getKechengClassify() {
+				getAdminClassify().then(res => {
+					res.data.children.forEach(item => {
+						item.checked = false;
+					})
+					this.leixingList = res.data.children || [];
+				})
+			},
+			toAdd(data) {
+				if (!this.addFlag) {
+
+					toast('课程剩余数量不足')
+					return false
+				}
+				debounce(
+					this.jzAdd(data), 500)
+
+			},
+
+			jzAdd(data) {
+				let req = {
+					kcIds: [data.kcId],
+					id: this.id
+				}
+				jiazhengKcAdd(req).then(res => {
+					if (res.code == 0) {
+						this.getList()
+						this.chaxunNumber()
+						uni.showToast({
+							title: '添加成功',
+							icon: 'success'
+						});
+					} else {
+						uni.showToast({
+							title: '添加失败',
+							icon: 'success'
+						});
+						return false
+					}
+				})
+			},
+			deleteQuerenBtn() {
+				let req = {
+					kcIds: [this.kcId],
+					id: this.id
+				}
+				jiazhengKcDelete(req).then(res => {
+					if (res.code == 0) {
+						this.getYxList()
+						uni.showToast({
+							title: '删除成功',
+							icon: 'success'
+						});
+					} else {
+						uni.showToast({
+							title: '删除失败',
+							icon: 'success'
+						});
+						return false
+					}
+				})
+			},
+			toDelete(data) {
+				this.kcId = data.kcId
+				this.$refs.commonDialogRef.handleShow();
+			},
+			changeTab(data) {
+				this.current = data
+				if (this.current == 0) {
+					this.getList()
+				} else {
+					this.chaxunNumber()
+					this.getYxList()
+				}
+
+				console.log('data', data);
+			},
+			goUpPage() {
+				uni.redirectTo({
+					url: "/pages/admin/Jiazheng/index"
+				})
+			},
+			getList() {
+				let req = {
+					id: this.id,
+					"kcClassifyId": this.selectClassify && this.selectClassify.id || 0,
+					name: this.name
+				}
+				kcSelectList(req).then(res => {
+					if (res.code == 0) {
+						this.list = res.data
+					} else {
+						return false
+					}
+				})
+			},
+			getYxList() {
+				let req = {
+					id: this.id,
+				}
+				jiazhengKcList(req).then(res => {
+					if (res.code == 0) {
+						this.listYx = res.data
+					} else {
+						return false
+					}
+				})
+			}
+		}
+	}
+</script>

+ 283 - 0
pages/admin/Jiazheng/bf/qiuzhiXinxi.vue

@@ -0,0 +1,283 @@
+<template>
+	<view class="jz-content-box">
+		<!-- <view class="form-label-radio form-top-margin flex-start-row">
+			<view class="phone-form-label"> <text class="form-label-require">*</text>类型</view>
+			<dataChecked :list="typeList" mode="multiple" :defaultCount="9" :selectedNames="leixing"
+				@change="selectChangeType" @add="addType" />
+		</view> -->
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require"></text>经验</view>
+			<picker :range="jingyanList" mode='selector' :value="jingyanIndex" range-key="name" @change="jingyanChange"
+				@cancel="jingyanCancel" class="select-picker-box">
+				<view class="form-radio-select">
+					<view>{{ jingyan }}</view>
+					<icon></icon>
+				</view>
+			</picker>
+		</view>
+		<view class="form-label-radio flex-start-row">
+			<view class="phone-form-label"><text class="form-label-require">*</text>技能</view>
+			<dataChecked :list="skillList" mode="multiple" :defaultCount="9" :selectedNames="jineng"
+				@change="selectChangeSkill" @add="addSkill" />
+		</view>
+		<view class="form-label-radio form-top-margin flex-start-row">
+			<view class="phone-form-label"><text class="form-label-require">*</text>状态</view>
+			<dataChecked :list="zhuangtaiList" mode="single" :selectedIds='zhuangtai' :showAdd="false"
+				@change="selectChangeZhuangtai" />
+		</view>
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require"></text>薪资级别</view>
+			<picker :range="xinziJibieList" mode='selector' @change="xinziJibieChange" @cancel="xinziJibieCancel"
+				class="select-picker-box">
+				<view class="form-radio-select">
+					<view>{{jibiexinzi}}</view>
+					<icon></icon>
+				</view>
+			</picker>
+		</view>
+
+		<view class="form-label-input">
+			<view class="phone-form-label"><text class="form-label-require"></text>期望薪资</view>
+			<input v-model="qiwangxinzi" placeholder="请输入期望薪资" />
+		</view>
+		<view class="form-label-input flex-start-row">
+			<view class="phone-form-label"><text class="form-label-require"></text>工作经历</view>
+			<textarea v-model="jingli" maxlength="-1" placeholder="请填写工作经历" class="form-textarea-box" />
+		</view>
+		<view class="page-btn-box">
+			<button type="default" v-if="status =='add'" @click="goNext" class="phone-green-btn">下一步</button>
+			<button type="default" v-if="status =='edit'" @click="editSave" class="phone-green-btn">保存</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import dataChecked from './common/dataChecked.vue';
+	import {
+		getJiazhengLeixing,
+		getJiazhengJineng,
+		getJiazhengZhuangtai,
+
+	} from "@/api/jiazheng.js";
+
+	export default {
+		components: {
+			dataChecked
+		},
+		// onLoad 是 uni-app 的页面生命周期钩子,不需要导入
+		created() {
+
+			this.initRequests()
+		},
+		props: {
+			status: {
+				type: String,
+			}
+		},
+		data() {
+			return {
+				formData: {},
+				// 从后端获取的技能列表
+				skillList: [],
+				typeList: [],
+				leixing: "",
+				jineng: "",
+				zhuangtaiList: [],
+				zhuangtai: '',
+				jingyan: "",
+				jingyanIndex: 0,
+				qiwangxinzi: '面议',
+				jingli: '',
+				xinziJibieList: ["一级", "二级", "三级", "四级", "五级", ],
+				jibiexinzi: "",
+				jingyanList: Array.from({
+					length: 51
+				}, (_, i) => i + '年'),
+			};
+		},
+		methods: {
+			async initRequests() {
+				await Promise.all([
+				//	this.getLeixing(),
+					this.getJineng(),
+					this.getZhuangtai()
+				]);
+			},
+			editinfo(data) {
+				this.$nextTick(() => {
+					console.log('data11111', data);
+				//	this.leixing = data.leixing
+					this.jingyan = data.jingyan
+					this.jineng = data.jineng
+					this.zhuangtai = data.zhuangtai
+					this.jibiexinzi = data.jibiexinzi
+					this.qiwangxinzi = data.qiwangxinzi
+					this.jingli = data.jingli
+
+				})
+			},
+
+			// 点击完成按钮的时候触发,
+			xinziJibieChange(e) {
+				//通过e.detail.value获取值,获取的是自定义数据的下标
+				const index = e.detail.value
+				this.jibiexinzi = this.xinziJibieList[index]
+				console.log('jibiexinzi', this.jibiexinzi);
+			},
+			xinziJibieCancel(e) {
+				console.log("您已取消选择");
+			},
+			jingyanChange(e) {
+				const index = e.detail.value
+				this.jingyan = this.jingyanList[index]
+			},
+			jingyanCancel() {
+				this.jingyanIndex = 0
+			},
+			getJineng() {
+				getJiazhengJineng({}).then(res => {
+					this.skillList = this.dataConversionObject(res.data)
+
+				}).catch(error => {
+					console.error('获取技能类型失败:', error);
+				});
+			},
+			getLeixing() {
+				getJiazhengLeixing({}).then(res => {
+					this.typeList = this.dataConversionObject(res.data)
+
+				}).catch(error => {
+					console.error('获取技能类型失败:', error);
+				});
+			},
+			getZhuangtai() {
+				getJiazhengZhuangtai({}).then(res => {
+					console.log('res', res);
+					this.zhuangtaiList = res.data
+					// this.typeList = this.dataConversionObject(res.data)
+					// console.log('this.typeList', this.typeList);
+				}).catch(error => {
+					console.error('获取技能类型失败:', error);
+				});
+			},
+			dataConversionObject(data) {
+				let newList
+				newList = data.map((name, index) => ({
+					id: index,
+					name: name
+				}));
+				return newList
+			},
+			dataConversionArray(data) {
+				let newList
+				newList = data.map((item, index) => {
+					return item.name
+				});
+				return newList
+			},
+			selectChangeType(data) {
+				//	console.log('typeData', data);
+				this.leixing = this.dataConversionArray(data).join(',')
+				console.log('this.leixing', this.leixing);
+			},
+			addType(newType) {
+				this.typeList.push({
+					...newType,
+				});
+			},
+			selectChangeSkill(data) {
+				this.jineng = this.dataConversionArray(data).join(',')
+				console.log('this.jineng', this.jineng);
+			},
+			addSkill(newSkill) {
+				this.skillList.push({
+					...newSkill,
+				});
+			},
+			selectChangeZhuangtai(data) {
+				console.log('zhuangtaiData', data);
+				if (data.length > 0) {
+					this.zhuangtai = data[0].id
+				}else{
+					this.zhuangtai = ''
+				}
+				console.log('zhuangtai', this.zhuangtai);
+				// const index = e.detail.value
+				// this.jingyan = this.jingyanList[index]
+			},
+			showAlert() {
+				uni.showToast({
+					title: "请勾选本人同意!",
+					icon: 'none',
+					duration: 2000
+				})
+				return false
+			},
+			yanzheng() {
+				this.formData = {
+				//	leixing: this.leixing,
+					jingyan: this.jingyan,
+					jineng: this.jineng,
+					zhuangtai: this.zhuangtai,
+					jibiexinzi: this.jibiexinzi,
+					qiwangxinzi: this.qiwangxinzi,
+					jingli: this.jingli,
+
+				}
+				// if (!this.formData.leixing) {
+				// 	uni.showToast({
+				// 		title: "请选择类型!",
+				// 		icon: 'none',
+				// 		duration: 2000
+				// 	})
+				// 	return false
+				// }
+				// if (!this.formData.jingyan) {
+				// 	uni.showToast({
+				// 		title: "请选择经验年限!",
+				// 		icon: 'none',
+				// 		duration: 2000
+				// 	})
+				// 	return false
+				// }
+				if (!this.formData.jineng) {
+					uni.showToast({
+						title: "请选择相应技能!",
+						icon: 'none',
+						duration: 2000
+					})
+					return false
+				}
+				if (!this.formData.zhuangtai) {
+					uni.showToast({
+						title: "请选择相应状态!",
+						icon: 'none',
+						duration: 2000
+					})
+					return false
+				}
+				return true
+			},
+			goNext() {
+				let ispass = this.yanzheng()
+				if (ispass) {
+					this.$emit('goNext', this.formData, 1);
+				}
+			},
+			editSave() {
+
+				let ispass = this.yanzheng()
+				console.log('this.formData', this.formData);
+				if (ispass) {
+					this.$emit('editSave', this.formData);
+				}
+			}
+		},
+		mounted() {
+			console.log('zxvasdfasdfasdfadsfadsfadsfasd');
+			// setTimeout(()=>{
+			// 			this.zhuangtai = '1'
+			// },1000)
+		}
+	};
+</script>

+ 247 - 0
pages/admin/Jiazheng/bf/zhaopianZiliao.vue

@@ -0,0 +1,247 @@
+<template>
+	<view class="jz-content-box">
+		<view class="upload-img-box">
+			<jiazhengUpload @getFileUrl="getTouxiang" :img='icon' bottomText="上传头像和生活照"></jiazhengUpload>
+		</view>
+		<view class="form-label-switch">
+			<view class="phone-form-label"><text class="form-label-require"></text>身份证照片</view>
+			<!-- 	<switch @change="switchSfzChange" color="#3fd2a1" style="transform:scale(0.7)" /> -->
+		</view>
+		<view class="ziliao-upload-box">
+			<view class="upload-item-box">
+				<jiazhengUpload @getFileUrl="getSfzTouxiang" :img='idcardUrl1' bottomText="上传身份证头像面"></jiazhengUpload>
+			</view>
+			<view class="upload-item-box">
+				<jiazhengUpload @getFileUrl="getSfzGuohui" :img='idcardUrl2' bottomText="上传身份证国徽面"></jiazhengUpload>
+			</view>
+		</view>
+		<view class="form-label-switch form-top-margin">
+			<view class="phone-form-label"><text class="form-label-require"></text>体检报告</view>
+			<!-- <switch @change="switchGzChange" color="#3fd2a1" style="transform:scale(0.7)" /> -->
+		</view>
+		<view class="zhaopianZiliao-shenfenzhengImg">
+			<view class="ziliao-upload-box">
+				<view v-for="(item, index) in tijianbaogaoList" :key="index" v-if="tijianbaogaoList.length>0" class="ziliao-image-box">
+					<img class="ziliao-image" :src="item" alt="">
+					<view @click="deleteTijianbaogao(item,index)" class="ziliao-image-close"></view>
+				</view>
+				<jiazhengUpload changjingType="more" @getFileUrl="getTijianbaogao"></jiazhengUpload>
+			</view>
+		</view>
+
+		<view class="form-label-switch form-top-margin">
+			<view class="phone-form-label"><text class="form-label-require"></text>工作生活照</view>
+			<!-- <switch @change="switchGzChange" color="#3fd2a1" style="transform:scale(0.7)" /> -->
+		</view>
+		<view class="zhaopianZiliao-shenfenzhengImg">
+			<view class="ziliao-upload-box">
+				<view v-for="(item, index) in shenghuizhaoList" :key="index" v-if="shenghuizhaoList.length>0" class="ziliao-image-box">
+					<img class="ziliao-image" :src="item" alt="">
+					<view @click="deleteShenghuoZhao(item,index)" class="ziliao-image-close"></view>
+				</view>
+				<jiazhengUpload changjingType="more" @getFileUrl="getGzShenghuozhao"></jiazhengUpload>
+			</view>
+		</view>
+		<view class="form-label-switch form-top-margin">
+			<view class="phone-form-label"><text class="form-label-require"></text>资格类照片</view>
+			<!-- 	<switch @change="switchZgChange" color="#3fd2a1" style="transform:scale(0.7)" /> -->
+		</view>
+		<view class="zhaopianZiliao-shenfenzhengImg">
+			<view class="ziliao-upload-box">
+				<view v-for="(item, index) in zigezhaoList" :key="index" v-if="zigezhaoList.length>0" class="ziliao-image-box">
+					<img class="ziliao-image" :src="item" alt="">
+					<view @click="deleteZigeZhao(item,index)" class="ziliao-image-close"></view>
+				</view>
+				<jiazhengUpload changjingType="more" @getFileUrl="getZigezhao"></jiazhengUpload>
+			</view>
+		</view>
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require"></text>最近体检日期</view>
+			<uni-datetime-picker class="form-radio-picker" type="date" @change="changeTijian">
+				<view class="form-radio-select">
+					<view>{{tijianDate}}</view>
+					<icon></icon>
+				</view>
+			</uni-datetime-picker>
+		</view>
+
+		<view class="form-label-select">
+			<view class="phone-form-label"><text class="form-label-require"></text>健康证日期</view>
+			<uni-datetime-picker class="form-radio-picker" type="date" @change="changeJiankang">
+				<view class="form-radio-select">
+					<view>{{jiankangDate}}</view>
+					<icon></icon>
+				</view>
+			</uni-datetime-picker>
+		</view>
+
+		<!-- 	<view class="zpzl-tip-box form-top-margin">
+			<view>体检报告文件</view>
+			<view class="red-tip">(*如未经同意,体检报告均不展示在简历中;在系统中预约的体检,如有电子报告,会自动关联到简历中) </view>
+			<view>
+				<checkbox-group>
+					<checkbox :checked="tijianbaogaoFlag" @click="changeTijianbaogao" color="#3fd2a1"
+						style="transform:scale(0.65)" />
+					已经同意,上传个人体检报告
+				</checkbox-group>
+			</view>
+			<view class="scbg-tip">
+				还没有上传的体验报告<br>
+				可点击下方上传体检报告
+			</view>
+			<button type="default" class="phone-green-btn scbg-btn">+从手机上传体检报告(pdf)</button>
+		</view> -->
+
+		<view class="page-btn-box">
+			<button type="default" v-if="status =='add'" @click="goNext" class="phone-green-btn">下一步</button>
+			<button type="default" v-if="status =='edit'" @click="editSave" class="phone-green-btn">保存</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		getAliyunPolicy
+	} from "@/api/jiazheng.js"
+	import jiazhengUpload from "./common/jiazhengUpload.vue"
+
+	export default {
+		data() {
+
+			return {
+				shenghuizhaoList: [],
+				tijianbaogaoList: [],
+				zigezhaoList: [],
+				icon: '',
+				idcardUrl1: '',
+				idcardUrl2: '',
+				shenghuoUrls: '',
+				tijianDate: '',
+				tijianUrls: '',
+				jiankangDate: '',
+				tijianbaogaoFlag: false,
+				zhengshuUrls: '',
+			}
+		},
+		props: {
+			status: {
+				type: String,
+			}
+		},
+		components: {
+			jiazhengUpload
+		},
+		methods: {
+			editinfo(data) {
+				console.log('data', data);
+				this.$nextTick(() => {
+					this.icon = data.icon
+					this.idcardUrl1 = data.idcardUrl1
+					this.idcardUrl2 = data.idcardUrl2
+					this.shenghuizhaoList = data.shenghuoUrls == '' ? '' : data.shenghuoUrls.split(",")
+					this.zigezhaoList = data.zhengshuUrls == '' ? '' : data.zhengshuUrls.split(",")
+					this.tijianbaogaoList = data.tijianUrls == '' ? '' : data.tijianUrls.split(",")
+					this.tijianDate = data.tijianDate
+					this.jiankangDate = data.jiankangDate
+
+				})
+			},
+			getTouxiang(data) {
+				this.icon = data
+				console.log('getTouxiang', data);
+			},
+			getSfzTouxiang(data) {
+				this.idcardUrl1 = data
+				console.log('getSfzTouxiang', data);
+			},
+			getSfzGuohui(data) {
+				this.idcardUrl2 = data
+				console.log('getSfzGuohui', data);
+			},
+			getGzShenghuozhao(data) {
+				console.log('getGzShenghuozhao', data);
+				this.shenghuizhaoList.push(data);
+			},
+			getTijianbaogao(data) {
+				console.log('getTijianbaogao', data);
+				this.tijianbaogaoList.push(data);
+			},
+			getZigezhao(data) {
+				console.log('getZigezhao', data);
+				this.zigezhaoList.push(data);
+			},
+			deleteZigeZhao(data, index) {
+				this.zigezhaoList.splice(index, 1);
+			},
+			deleteTijianbaogao(data, index) {
+				this.tijianbaogaoList.splice(index, 1);
+			},
+			deleteShenghuoZhao(data, index) {
+				this.shenghuizhaoList.splice(index, 1);
+			},
+			changeTijian(data) {
+				console.log('data', data);
+				this.tijianDate = data
+
+			},
+			changeJiankang(data) {
+				console.log('data', data);
+				this.jiankangDate = data
+
+			},
+			changeTijianbaogao(data) {
+				this.tijianbaogaoFlag = !this.tijianbaogaoFlag
+			},
+			switchSfzChange(data) {
+				console.log('data', data);
+			},
+			switchGzChange(data) {
+				console.log('data', data);
+			},
+			switchZgChange(data) {
+				console.log('data', data);
+			},
+
+			goNext() {
+				this.formData = {
+					icon: this.icon,
+					idcardUrl1: this.idcardUrl1,
+					idcardUrl2: this.idcardUrl2,
+					tijianbaogaoFlag: this.tijianbaogaoFlag,
+					shenghuoUrls:  this.shenghuizhaoList?this.shenghuizhaoList.join(','):'',
+					zhengshuUrls:  this.zigezhaoList?this.zigezhaoList.join(','):'',
+					tijianUrls:  this.tijianbaogaoList?this.tijianbaogaoList.join(','):'',
+					tijianDate: this.tijianDate,
+					jiankangDate: this.jiankangDate,
+
+
+				}
+				console.log('this.formData', this.formData);
+				this.$emit('goNext', this.formData, 2);
+			},
+			editSave() {
+				this.formData = {
+					icon: this.icon,
+					idcardUrl1: this.idcardUrl1,
+					idcardUrl2: this.idcardUrl2,
+					tijianbaogaoFlag: this.tijianbaogaoFlag,
+					shenghuoUrls: this.shenghuizhaoList.length > 0 ? this.shenghuizhaoList.join(',') : '',
+					zhengshuUrls: this.zigezhaoList.length > 0 ? this.zigezhaoList.join(',') : '',
+					tijianDate: this.tijianDate,
+					jiankangDate: this.jiankangDate,
+					tijianUrls:  this.tijianbaogaoList?this.tijianbaogaoList.join(','):'',
+
+				}
+				console.log('this.formData', this.formData);
+				this.$emit('editSave', this.formData);
+			},
+
+		},
+		created() {
+			// setTimeout(()=>{
+			// 	 this.$refs.datePicker.show()
+			// },1000)
+
+		},
+	};
+</script>