import { api_schoolAreaDetail, api_schoolAreaList, api_sysAreaQueryAllProvince, api_userBeneficiarySave, api_userBeneficiaryUpdate } from "../../api/new"; import { GRADE_ENUM } from "../../utils/util"; const classList: any = []; for (let i = 1; i <= 40; i++) { classList.push({ text: i + '班', value: i }); } /** 获取年级 */ 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; }; // pages/buyerInformation/index.ts Page({ /** * 页面的初始数据 */ data: { phone: '', name: '', gender: '1', schoolAreaId: '', schoolAreaName: '', currentGradeClassTxt: '', currentClass: null, currentGradeNum: null, cityCode: null, cityName: "", provinceCode: null, provinceName: "", regionCode: null, regionName: "", userBeneficiaryId: '', // 选中用户的编号 showArea: false, areaList: [] as any, showSchool: false, showSchoolAfterLeave: false, // 离开后 /** 学校列表 */ schoolAreaList: [] as any, schoolAreaIndex: 0, /** 临时切换时选择的学校编号 */ tempChangeSchoolAreaId: '', schoolLoading: false, /** 搜索学校 */ searchName: '', /** 学校类型 */ schoolInstrumentSetType: '', /** 年级班级 */ gradeClassList: [] as any, gradeClassIndexs: [0, 0], showGradeClass: false, showGradeClassAfterLeave: false, // 离开后 }, /** * 生命周期函数--监听页面加载 */ onLoad(options: any) { if (options.userBeneficiaryId) { this.setData({ userBeneficiaryId: options.userBeneficiaryId }) } // 从缓存里面获取用户信息 this.getUserDetail() this.getAreas() this.getSchools() }, async getUserDetail() { try { // const { data } = await api_userBeneficiaryDetail({ // id: this.data.userBeneficiaryId // }) // console.log(data, 'data') const information = wx.getStorageSync('buyerInfomation') const users = information ? JSON.parse(information) : null if (users) { this.setData({ phone: users.phone, name: users.name, gender: users.gender, schoolAreaId: users.schoolAreaId, schoolAreaName: users.schoolAreaName, currentGradeClassTxt: users.currentGradeClassTxt, currentClass: users.currentClass, currentGradeNum: users.currentGradeNum, cityCode: users.cityCode, cityName: users.cityName, provinceCode: users.provinceCode, provinceName: users.provinceName, regionCode: users.regionCode, regionName: users.regionName, schoolAreaIndex: users.schoolAreaIndex || 0, gradeClassIndexs: users.gradeClassIndexs || [0, 0] }, () => { this.getSchoolAreaDetail() }) } } catch { // } }, onBack() { // 如果有购买人编号,返回时则不缓存数据 if (!this.data.userBeneficiaryId) { this.onSetCatch(this.data) } wx.navigateBack() }, /** * 生命周期函数--监听页面初次渲染完成 */ onReady() { }, /** * 生命周期函数--监听页面显示 */ onShow() { }, /** 获取省市区 */ 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) => { city_list[city.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 }; }, /** 获取学校列表 */ async getSchools(name?: string) { this.setData({ schoolLoading: true }) try { // 判断是否有地区信息 if (!this.data.provinceCode || !this.data.cityCode || !this.data.regionCode) { return } const { data } = await api_schoolAreaList({ name, testFlag: true, provinceCode: this.data.provinceCode, cityCode: this.data.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 || []; // forms.schoolInstrumentSetType = schoolInfo.instrumentSetType; if (schoolInfo.instrumentSetType === 'SCHOOL') { const gradeClassList = [{ values: getGradeList(schoolInfo.gradeYear), defaultIndex: this.data.gradeClassIndexs[0] }, { values: classList, defaultIndex: this.data.gradeClassIndexs[1] }] this.setData({ gradeClassList, schoolInstrumentSetType: schoolInfo.instrumentSetType }) } 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, defaultIndex: this.data.gradeClassIndexs[0] }, { values: classList, defaultIndex: this.data.gradeClassIndexs[1] }] this.setData({ gradeClassList, schoolInstrumentSetType: schoolInfo.instrumentSetType }) } 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') const gradeClassList = [{ values: lastGradeList, defaultIndex: this.data.gradeClassIndexs[0] }, { values: lastGradeList[this.data.gradeClassIndexs[0]]?.classList || [], defaultIndex: this.data.gradeClassIndexs[1] }] this.setData({ gradeClassList, schoolInstrumentSetType: schoolInfo.instrumentSetType }) } else { const gradeClassList = [{ values: getGradeList(), defaultIndex: this.data.gradeClassIndexs[0] }, { values: classList, defaultIndex: this.data.gradeClassIndexs[1] }] this.setData({ gradeClassList, schoolInstrumentSetType: '' }) } } else { const gradeClassList = [{ values: getGradeList(), defaultIndex: this.data.gradeClassIndexs[0] }, { values: classList, defaultIndex: this.data.gradeClassIndexs[1] }] this.setData({ gradeClassList, schoolInstrumentSetType: '' }) } }, /** 选择男女 */ 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 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: '', schoolAreaId: '', schoolAreaName: '', schoolAreaIndex: 0, gradeClassIndexs: [0, 0], 'gradeClassList[0].defaultIndex': 0, 'gradeClassList[1].defaultIndex': 0, currentGradeNum: null, currentClass: null, currentGradeClassTxt: '', }, () => { this.getSchools() }) }, /** 关闭选择学校 */ onCloseSchool() { this.setData({ showSchool: false }) }, /** 选择学校关闭后 */ onSchoolAfterLeave() { this.setData({ showSchoolAfterLeave: true }) }, /** 选择学校打开前 */ onSchoolBeforeEnter() { this.setData({ showSchoolAfterLeave: false }) }, /** 选择学校 */ onSelectSchool() { if (!this.data.provinceName) { wx.showToast({ title: '请选择地区', icon: 'none' }) return } this.setData({ showSchool: true }) }, /** 确定选择学校 */ onSubmitSchool() { const detail = this.data.schoolAreaList.find((item: any) => item.value === this.data.tempChangeSchoolAreaId) const detailIndex = this.data.schoolAreaList.findIndex((item: any) => item.value === this.data.tempChangeSchoolAreaId) // console.log(detail, detailIndex, this.data.tempChangeSchoolAreaId) if(detailIndex === -1) return this.setData({ schoolAreaName: detail.text, schoolAreaId: detail.value, schoolAreaIndex: detailIndex, showSchool: false, gradeClassIndexs: [0, 0], 'gradeClassList[0].defaultIndex': 0, 'gradeClassList[1].defaultIndex': 0, currentGradeNum: null, currentClass: null, currentGradeClassTxt: '', }, () => { this.getSchoolAreaDetail() }) }, onChangeSchool(e: any) { const { value } = e.detail.value this.setData({ tempChangeSchoolAreaId: value }) }, onSearch() { this.setData({ schoolAreaIndex: 0 }, () => { this.getSchools(this.data.searchName); }) }, onSearchChange(e: any) { this.setData({ searchName: e.detail }) }, /** 选择年级班级 */ onSelectGradeClass() { if (!this.data.schoolAreaId) { wx.showToast({ title: '请选择学校', icon: 'none' }) return } this.setData({ showGradeClass: true }) }, /** 年级班级 */ onCloseGradeClass() { this.setData({ showGradeClass: false }) }, onGradeClassBeforeEnter() { this.setData({ showGradeClassAfterLeave: false }) }, onGradeClassAfterLeave() { this.setData({ showGradeClassAfterLeave: true }) }, /** 确认选择年级班级 */ onSubmitGradeClass(e: any) { const selectedOptions: any = e.detail.value const selectedIndexs: any = e.detail.index // console.log(selectedOptions, e, 'selectedOptions') this.setData({ currentGradeClassTxt: selectedOptions[0].text + selectedOptions[1].text, currentGradeNum: selectedOptions[0].value, currentClass: selectedOptions[1].value, 'gradeClassList[0].defaultIndex': selectedIndexs[0], 'gradeClassList[1].defaultIndex': selectedIndexs[1], gradeClassIndexs: selectedIndexs, showGradeClass: false }) }, /** 年级班级切换时 */ onGradeClassChange(event: any) { const { picker, index, value } = event.detail; if (index !== 0) return // 第一列滚动时 // console.log(this.data.gradeClassList, "this.data.gradeClassList") if (this.data.schoolInstrumentSetType === "CLASS") { const firstColumn = value[index] const gradeDetail = this.data.gradeClassList[0]?.values const classList = gradeDetail?.find((item: any) => item.value === firstColumn.value) if (classList) { picker.setColumnIndex(1, '0') picker.setColumnValues(1, classList.classList); } } }, /** 最终提交 */ async onSubmit() { try { const params = this.data if (!params.phone || !/^1[3456789]\d{9}$/.test(params.phone)) { wx.showToast({ title: '请输入正确的手机号', icon: "none" }) return } if (!params.name) { wx.showToast({ title: '请输入学生姓名', icon: "none" }) return } if (!params.provinceCode || !params.cityCode || !params.regionCode) { wx.showToast({ title: '请选择地区', icon: "none" }) return } if (!params.schoolAreaId) { wx.showToast({ title: '请选择学校', icon: "none" }) return } if (!params.currentGradeNum) { wx.showToast({ title: '请选择年级', icon: "none" }) return } const pages = getCurrentPages(); const prevPage = pages[pages.length - 2]; // 获取上一个页面实例 if (params.userBeneficiaryId) { const { data } = await api_userBeneficiaryUpdate({ id: params.userBeneficiaryId, phone: params.phone, name: params.name, gender: params.gender, currentGradeNum: params.currentGradeNum, currentClass: params.currentClass, schoolAreaId: params.schoolAreaId, defaultStatus: false }) wx.showToast({ title: '提交成功', icon: 'none' }) prevPage?.setData({ backParams: { userBeneficiaryId: data.data.id, name: params.name, phone: params.phone, schoolInfo: params.schoolAreaName + params.currentGradeClassTxt } }); } else { const { data } = await api_userBeneficiarySave({ "phone": params.phone, "name": params.name, "gender": params.gender, "currentGradeNum": params.currentGradeNum, "currentClass": params.currentClass, "schoolAreaId": params.schoolAreaId, defaultStatus: false }) wx.showToast({ title: '提交成功', icon: 'none' }) prevPage?.setData({ backParams: { userBeneficiaryId: data.data.id, name: params.name, phone: params.phone, schoolInfo: params.schoolAreaName + params.currentGradeClassTxt } }); } this.onSetCatch(params) wx.navigateBack() } catch { // } }, /** 设置缓存 */ onSetCatch(params: any) { wx.setStorageSync('buyerInfomation', JSON.stringify({ phone: params.phone, name: params.name, gender: params.gender, schoolAreaId: params.schoolAreaId, schoolAreaName: params.schoolAreaName, currentGradeClassTxt: params.currentGradeClassTxt, currentClass: params.currentClass, currentGradeNum: params.currentGradeNum, cityCode: params.cityCode, cityName: params.cityName, provinceCode: params.provinceCode, provinceName: params.provinceName, regionCode: params.regionCode, regionName: params.regionName, schoolAreaIndex: params.schoolAreaIndex, gradeClassIndexs: params.gradeClassIndexs })) } })