123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665 |
- 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()
- //
- }
- },
- })
|