import { api_schoolAreaDetail, api_schoolAreaList, api_sysAreaQueryAllProvince, api_userBeneficiarySave, api_userBeneficiaryUpdate, api_userBeneficiaryDetail } from "../../api/login"; const classList: any = []; for (let i = 1; i <= 40; i++) { classList.push({ text: i + '班', value: i }); } const GRADE_ENUM = { '1': '一年级', '2': '二年级', '3': '三年级', '4': '四年级', '5': '五年级', '6': '六年级', '7': '七年级', '8': '八年级', '9': '九年级' } as any; /** 获取年级 */ const getGradeList = (gradeYear?: string, instrumentCode?: string) => { let tempList: any = []; const five = [ { text: '一年级', value: 1, instrumentCode }, { text: '二年级', value: 2, instrumentCode }, { text: '三年级', value: 3, instrumentCode }, { text: '四年级', value: 4, instrumentCode }, { text: '五年级', value: 5, instrumentCode } ]; const one = [{ text: '六年级', value: 6, instrumentCode }]; const three = [ { text: '七年级', value: 7, instrumentCode }, { text: '八年级', value: 8, instrumentCode }, { text: '九年级', value: 9, instrumentCode } ]; if (gradeYear === 'FIVE_YEAR_SYSTEM') { tempList.push(...[...five]); } else if (gradeYear === 'SIX_YEAR_SYSTEM') { tempList.push(...[...five, ...one]); } else if (gradeYear === 'THREE_YEAR_SYSTEM') { tempList.push(...[...three]); } else if (gradeYear === 'FORE_YEAR_SYSTEM') { tempList.push(...[...one, ...three]); } else { tempList.push(...[...five, ...one, ...three]); } return tempList; }; Page({ data: { redirectUrl: "", id: "", phone: "", name: "", gender: "1", cacheArea: [] as { cityCode: string, shiftCityCode: string }[], // 临时存储的对应关系 showArea: false, areaList: [] as any, // 省市区 provinceCode: null, // 地区 cityCode: null, regionCode: null, provinceName: "", cityName: "", regionName: "", showSchool: false, schoolLoading: false, schoolAreaList: [] as any, tempChangeSchoolAreaId: '', // 临时改变的学校id schoolAreaId: '', //学校 schoolAreaName: '', schoolAreaIndex: 0, searchName: '', showGrade: false, //年级 gradeList: [] as any, gradeId: "", gradeName: "", gradeIndex: 0, showClass: false, //班级 classList: [] as any, classId: "", className: "", classIndex: 0, }, async onLoad(options: any) { const { redirectUrl, id } = options; this.setData({ redirectUrl, id }) if (this.data.id) { wx.showLoading({ title: '', }) await this.getUserDetail() wx.hideLoading() } else { this.getAreas() } }, async getUserDetail() { try { const { data } = await api_userBeneficiaryDetail(this.data.id) if (data.code === 200) { const params = data.data this.setData({ phone: params.phone, name: params.name, gender: params.gender + "", provinceCode: params.provinceCode, cityCode: params.cityCode, regionCode: params.regionCode, provinceName: params.provinceName, cityName: params.cityName, regionName: params.regionName, schoolAreaId: params.schoolAreaId, schoolAreaName: params.schoolAreaName, gradeId: params.currentGradeNum, gradeName: GRADE_ENUM[params.currentGradeNum], classId: params.currentClass, className: params.currentClass + "班" }) await this.getAreas() // 回显市区 this.setData({ cityCode: this.formateCityCode(true) }) await this.getSchools() await this.getSchoolAreaDetail() // 学校index const schoolAreaIndex = this.data.schoolAreaList.findIndex(((item: any) => { return item.value === this.data.schoolAreaId })) // 筛选出年级 赋值班级 const gradeIndex = (this.data.gradeList[0]?.values || []).findIndex((item: any) => { return item.value === params.currentGradeNum }) const gradeData = this.data.gradeList[0]?.values[gradeIndex] const classListData = gradeData?.classList || classList // 班级index const classIndex = classListData.findIndex(((item: any) => { return item.value === this.data.classId })) this.setData({ classList: [{ values: classListData }] }, () => { // 不知道为啥 直接写在上面 gradeIndex 不能回显 this.setData({ schoolAreaIndex, gradeIndex, classIndex }) }) } } catch (e: any) { } }, /** 选择男女 */ onCheckGender(e: any) { const { dataset } = e.target this.setData({ gender: dataset.gender }) }, /** 显示选择地区 */ onShowAreaList() { this.setData({ showArea: true }) }, /** 关闭选择地区 */ onCloseAreaList() { this.setData({ showArea: false }) }, /** 确定选择地区 */ submitArea(e: any) { const selectedOptions: any = e.detail.values if (!selectedOptions || !selectedOptions[0]) { wx.showToast({ title: '未选中值', icon: 'none' }) return } this.setData({ provinceCode: selectedOptions[0].code, cityCode: selectedOptions[1].code, regionCode: selectedOptions[2]?.code || "", provinceName: selectedOptions[0].name, cityName: selectedOptions[1].name, regionName: selectedOptions[2]?.name || "", showArea: false, searchName: "", tempChangeSchoolAreaId: '', schoolAreaId: '', schoolAreaName: '', gradeId: "", gradeName: "", classId: "", className: "" }, () => { this.getSchools() }) }, /** 获取省市区 */ async getAreas() { try { const { data } = await api_sysAreaQueryAllProvince({}) this.setData({ areaList: this.formateArea(data.data) }) } catch { // } }, formateArea(area: any[]) { const province_list: { [_: string]: string } = {}; const city_list: { [_: string]: string } = {}; const county_list: { [_: string]: string } = {}; area.forEach((item: any) => { province_list[item.code] = item.name; }); area.forEach((item: any) => { item.areas && item.areas.forEach((city: any, index: number) => { let code = city.code + "" // 某些数据不标准 这里需要转换一下 if (code[4] !== "0" || code[5] !== "0") { // 现在把区域的数据改为市的 const newCode = code.substring(0, 2) + (index < 10 ? `a${index}` : index < 20 ? `b${index - 10}` : index < 30 ? `c${index - 20}` : `d${index - 30}`) + "00"; this.data.cacheArea.push({ cityCode: code, shiftCityCode: newCode }) code = newCode } city_list[code] = city.name; }); }); area.forEach((item: any) => { item.areas && item.areas.forEach((city: any) => { city.areas && city.areas.forEach((county: any) => { county_list[county.code] = county.name; }); }); }); return { province_list, city_list, county_list }; }, // 转换 formateCityCode(reverse?: boolean) { if (!this.data.regionCode && this.data.cityCode) { const cityCodeObj = this.data.cacheArea.find((item: any) => { return item[reverse ? "cityCode" : "shiftCityCode"] == this.data.cityCode }) return cityCodeObj ? cityCodeObj[reverse ? "shiftCityCode" : "cityCode"] : "" } return this.data.cityCode }, /** 选择学校 */ onSelectSchool() { if (!this.data.provinceCode) { wx.showToast({ title: '请先选择学校地区', icon: 'none' }) return } this.setData({ showSchool: true }) }, /** 关闭选择学校 */ onCloseSchool() { this.setData({ showSchool: false }) }, onChangeSchool(e: any) { const { value } = e.detail.value this.setData({ tempChangeSchoolAreaId: value }) }, onSearchChange(e: any) { this.setData({ searchName: e.detail }) }, onSearch() { this.getSchools(this.data.searchName); }, /** 确定选择学校 */ onSubmitSchool() { if (!this.data.tempChangeSchoolAreaId) { wx.showToast({ title: '未选中值', icon: 'none' }) return } const schoolAreaIndex = this.data.schoolAreaList.findIndex((item: any) => item.value === this.data.tempChangeSchoolAreaId) const detail = this.data.schoolAreaList[schoolAreaIndex] this.setData({ schoolAreaIndex, schoolAreaName: detail.text, schoolAreaId: detail.value, showSchool: false, gradeId: "", gradeName: "", classId: "", className: "" }, () => { this.getSchoolAreaDetail() }) }, /** 获取学校列表 */ async getSchools(name?: string) { this.setData({ schoolLoading: true }) try { // 判断是否有地区信息 if (!this.data.provinceCode || !this.data.cityCode) { return } // 转换CityCode const citycode = this.formateCityCode() const { data } = await api_schoolAreaList({ name, testFlag: true, provinceCode: this.data.provinceCode, cityCode: citycode, regionCode: this.data.regionCode }) const result = data.data || [] const tempList: any[] = [] result.forEach((item: any) => { tempList.push({ text: item.name, value: item.id }) }) let tempSchoolId = '' if (tempList.length > 0) { const first = tempList[0] tempSchoolId = first.value || '' } this.setData({ schoolAreaList: tempList, tempChangeSchoolAreaId: tempSchoolId }) } catch { // } this.setData({ schoolLoading: false }) }, /** 获取学校详情 */ async getSchoolAreaDetail() { const { data } = await api_schoolAreaDetail({ id: this.data.schoolAreaId }) const result = data.data || {} if (result.school) { const schoolInfo = result.school || {}; const schoolInstrumentList = schoolInfo.schoolInstrumentList || []; if (schoolInfo.instrumentSetType === 'SCHOOL') { const gradeClassList = [{ values: getGradeList(schoolInfo.gradeYear), }] this.setData({ gradeList: gradeClassList }) } else if (schoolInfo.instrumentSetType === 'GRADE') { const gradeList: any = [] schoolInstrumentList.forEach((item: any) => { gradeList.push({ text: GRADE_ENUM[item.gradeNum], value: item.gradeNum, instrumentId: item.instrumentId }) }); gradeList.sort((a: any, b: any) => a.value - b.value); const gradeClassList = [{ values: gradeList }] this.setData({ gradeList: gradeClassList, }) } else if (schoolInfo.instrumentSetType === 'CLASS') { // // 班级 const tempGradeList: any[] = []; schoolInstrumentList.forEach((item: any) => { if (!tempGradeList.includes(item.gradeNum)) { tempGradeList.push(item.gradeNum); } }); const lastGradeList: any[] = []; tempGradeList.forEach((temp: any) => { const list = { text: GRADE_ENUM[temp], value: temp, instrumentId: '', instrumentCode: '', instrumentName: '', classList: [] as any }; schoolInstrumentList.forEach((item: any) => { if (temp === item.gradeNum) { list.instrumentId = item.instrumentId; list.instrumentCode = item.instrumentCode; list.instrumentName = item.instrumentName; list.classList.push({ text: item.classNum + '班', value: item.classNum, instrumentCode: item.instrumentCode }); } }); // 排序班级 list.classList.sort((a: any, b: any) => a.value - b.value); lastGradeList.push(list); }); lastGradeList.sort((a: any, b: any) => a.value - b.value); console.log(lastGradeList, 'lastGradeList') this.setData({ gradeList: [{ values: lastGradeList }] }) } else { const gradeClassList = [{ values: getGradeList(), }] this.setData({ gradeList: gradeClassList }) } } else { const gradeClassList = [{ values: getGradeList(), }] this.setData({ gradeList: gradeClassList }) } }, /** 选择年级 */ onSelectGrade() { if (!this.data.schoolAreaId) { wx.showToast({ title: '请先选择学校', icon: 'none' }) return } this.setData({ showGrade: true }) }, onCloseGrade() { this.setData({ showGrade: false }) }, /** 确认选择年级 */ onSubmitGrade(e: any) { const selectedOptions: any = e.detail.value if (!selectedOptions || !selectedOptions[selectedOptions.length - 1]) { wx.showToast({ title: '未选中值', icon: 'none' }) return } const gradeIndex = (this.data.gradeList[0]?.values || []).findIndex((item: any) => { return item.value === selectedOptions[0].value }) this.setData({ gradeId: selectedOptions[0].value, gradeName: selectedOptions[0].text, showGrade: false, gradeIndex, classId: "", className: "" }) this.setData({ classList: [{ values: selectedOptions[0].classList || classList }] }) }, /** 选择班级 */ onSelectClass() { if (!this.data.gradeId) { wx.showToast({ title: '请先选择年级', icon: 'none' }) return } this.setData({ showClass: true }) }, onCloseClass() { this.setData({ showClass: false }) }, /** 确认选择班级 */ onSubmitClass(e: any) { const selectedOptions: any = e.detail.value if (!selectedOptions || !selectedOptions[selectedOptions.length - 1]) { wx.showToast({ title: '未选中值', icon: 'none' }) return } // 班级index const classIndex = (this.data.classList[0]?.values || []).findIndex(((item: any) => { return item.value === selectedOptions[0].value })) this.setData({ classId: selectedOptions[0].value, className: selectedOptions[0].text, classIndex, showClass: false }) }, messageName(value: string) { const nameReg = /^[\u4E00-\u9FA5]+$/ if (!value) { return '请输入学生姓名'; } else if (!nameReg.test(value)) { return '学生姓名必须为中文'; } else if (value.length < 2 || value.length > 14) { return '学生姓名必须为2~14个字'; } else { return '' } }, /** 最终提交 */ async onSubmit() { try { const params = this.data if (!params.phone || !/^1[3456789]\d{9}$/.test(params.phone)) { wx.showToast({ title: '请输入正确的手机号', icon: "none" }) return } const mesName = this.messageName(params.name) if (mesName) { wx.showToast({ title: mesName, icon: "none" }) return } if (!params.provinceCode || !params.cityCode) { wx.showToast({ title: '请选择学校地区', icon: "none" }) return } if (!params.schoolAreaId) { wx.showToast({ title: '请选择学校', icon: "none" }) return } if (!params.gradeId) { wx.showToast({ title: '请选择年级', icon: "none" }) return } if (!params.classId) { wx.showToast({ title: '请选择班级', icon: "none" }) return } const pages = getCurrentPages(); const prevPage = pages[pages.length - 2]; // 获取上一个页面实例 wx.showLoading({ mask: true, title: "", }); // 编辑 if (params.id) { await api_userBeneficiaryUpdate({ id: params.id, phone: params.phone, name: params.name, gender: params.gender, currentGradeNum: params.gradeId, currentClass: params.classId, schoolAreaId: params.schoolAreaId, defaultStatus: false }) wx.showToast({ title: '保存成功', icon: 'none' }) } else { const { data } = await api_userBeneficiarySave({ "phone": params.phone, "name": params.name, "gender": params.gender, "currentGradeNum": params.gradeId, "currentClass": params.classId, "schoolAreaId": params.schoolAreaId, defaultStatus: false }) if (this.data.redirectUrl === "index") { prevPage.setData({ memberInfo: { id: data.data.id, name: params.name, phone: params.phone, schoolInfo: params.provinceName + params.cityName + (params.regionName || "") + params.schoolAreaName + params.gradeName + params.className } }); } wx.showToast({ title: '保存成功', icon: 'none' }) } wx.hideLoading() wx.navigateBack() } catch { wx.hideLoading() // } }, })