index.ts 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639
  1. import { api_schoolAreaDetail, api_schoolAreaList, api_sysAreaQueryAllProvince, api_userBeneficiarySave, api_userBeneficiaryUpdate } from "../../api/new";
  2. import { GRADE_ENUM } from "../../utils/util";
  3. const classList: any = [];
  4. for (let i = 1; i <= 40; i++) {
  5. classList.push({ text: i + '班', value: i });
  6. }
  7. /** 获取年级 */
  8. const getGradeList = (gradeYear?: string, instrumentCode?: string) => {
  9. let tempList: any = [];
  10. const five = [
  11. { text: '一年级', value: 1, instrumentCode },
  12. { text: '二年级', value: 2, instrumentCode },
  13. { text: '三年级', value: 3, instrumentCode },
  14. { text: '四年级', value: 4, instrumentCode },
  15. { text: '五年级', value: 5, instrumentCode }
  16. ];
  17. const one = [{ text: '六年级', value: 6, instrumentCode }];
  18. const three = [
  19. { text: '七年级', value: 7, instrumentCode },
  20. { text: '八年级', value: 8, instrumentCode },
  21. { text: '九年级', value: 9, instrumentCode }
  22. ];
  23. if (gradeYear === 'FIVE_YEAR_SYSTEM') {
  24. tempList.push(...[...five]);
  25. } else if (gradeYear === 'SIX_YEAR_SYSTEM') {
  26. tempList.push(...[...five, ...one]);
  27. } else if (gradeYear === 'THREE_YEAR_SYSTEM') {
  28. tempList.push(...[...three]);
  29. } else if (gradeYear === 'FORE_YEAR_SYSTEM') {
  30. tempList.push(...[...one, ...three]);
  31. } else {
  32. tempList.push(...[...five, ...one, ...three]);
  33. }
  34. return tempList;
  35. };
  36. // pages/buyerInformation/index.ts
  37. Page({
  38. /**
  39. * 页面的初始数据
  40. */
  41. data: {
  42. phone: '',
  43. name: '',
  44. gender: '1',
  45. schoolAreaId: '',
  46. schoolAreaName: '',
  47. currentGradeClassTxt: '',
  48. currentClass: null,
  49. currentGradeNum: null,
  50. cityCode: null,
  51. cityName: "",
  52. provinceCode: null,
  53. provinceName: "",
  54. regionCode: null,
  55. regionName: "",
  56. userBeneficiaryId: '', // 选中用户的编号
  57. showArea: false,
  58. areaList: [] as any,
  59. showSchool: false,
  60. showSchoolAfterLeave: false, // 离开后
  61. /** 学校列表 */
  62. schoolAreaList: [] as any,
  63. schoolAreaIndex: 0,
  64. /** 临时切换时选择的学校编号 */
  65. tempChangeSchoolAreaId: '',
  66. schoolLoading: false,
  67. /** 搜索学校 */
  68. searchName: '',
  69. /** 学校类型 */
  70. schoolInstrumentSetType: '',
  71. /** 年级班级 */
  72. gradeClassList: [] as any,
  73. gradeClassIndexs: [0, 0],
  74. showGradeClass: false,
  75. showGradeClassAfterLeave: false, // 离开后
  76. },
  77. /**
  78. * 生命周期函数--监听页面加载
  79. */
  80. onLoad(options: any) {
  81. if (options.userBeneficiaryId) {
  82. this.setData({
  83. userBeneficiaryId: options.userBeneficiaryId
  84. })
  85. }
  86. // 从缓存里面获取用户信息
  87. this.getUserDetail()
  88. this.getAreas()
  89. this.getSchools()
  90. },
  91. async getUserDetail() {
  92. try {
  93. // const { data } = await api_userBeneficiaryDetail({
  94. // id: this.data.userBeneficiaryId
  95. // })
  96. // console.log(data, 'data')
  97. const information = wx.getStorageSync('buyerInfomation')
  98. const users = information ? JSON.parse(information) : null
  99. if (users) {
  100. this.setData({
  101. phone: users.phone,
  102. name: users.name,
  103. gender: users.gender,
  104. schoolAreaId: users.schoolAreaId,
  105. schoolAreaName: users.schoolAreaName,
  106. currentGradeClassTxt: users.currentGradeClassTxt,
  107. currentClass: users.currentClass,
  108. currentGradeNum: users.currentGradeNum,
  109. cityCode: users.cityCode,
  110. cityName: users.cityName,
  111. provinceCode: users.provinceCode,
  112. provinceName: users.provinceName,
  113. regionCode: users.regionCode,
  114. regionName: users.regionName,
  115. schoolAreaIndex: users.schoolAreaIndex || 0,
  116. gradeClassIndexs: users.gradeClassIndexs || [0, 0]
  117. }, () => {
  118. this.getSchoolAreaDetail()
  119. })
  120. }
  121. } catch {
  122. //
  123. }
  124. },
  125. onBack() {
  126. // 如果有购买人编号,返回时则不缓存数据
  127. if (!this.data.userBeneficiaryId) {
  128. this.onSetCatch(this.data)
  129. }
  130. wx.navigateBack()
  131. },
  132. /**
  133. * 生命周期函数--监听页面初次渲染完成
  134. */
  135. onReady() {
  136. },
  137. /**
  138. * 生命周期函数--监听页面显示
  139. */
  140. onShow() {
  141. },
  142. /** 获取省市区 */
  143. async getAreas() {
  144. try {
  145. const { data } = await api_sysAreaQueryAllProvince({})
  146. this.setData({
  147. areaList: this.formateArea(data.data)
  148. })
  149. } catch {
  150. //
  151. }
  152. },
  153. formateArea(area: any[]) {
  154. const province_list: { [_: string]: string } = {};
  155. const city_list: { [_: string]: string } = {};
  156. const county_list: { [_: string]: string } = {};
  157. area.forEach((item: any) => {
  158. province_list[item.code] = item.name;
  159. });
  160. area.forEach((item: any) => {
  161. item.areas && item.areas.forEach((city: any) => {
  162. city_list[city.code] = city.name;
  163. });
  164. });
  165. area.forEach((item: any) => {
  166. item.areas && item.areas.forEach((city: any) => {
  167. city.areas && city.areas.forEach((county: any) => {
  168. county_list[county.code] = county.name;
  169. });
  170. });
  171. });
  172. return {
  173. province_list,
  174. city_list,
  175. county_list
  176. };
  177. },
  178. /** 获取学校列表 */
  179. async getSchools(name?: string) {
  180. this.setData({
  181. schoolLoading: true
  182. })
  183. try {
  184. // 判断是否有地区信息
  185. if (!this.data.provinceCode || !this.data.cityCode || !this.data.regionCode) {
  186. return
  187. }
  188. const { data } = await api_schoolAreaList({
  189. name,
  190. testFlag: true,
  191. provinceCode: this.data.provinceCode,
  192. cityCode: this.data.cityCode,
  193. regionCode: this.data.regionCode
  194. })
  195. const result = data.data || []
  196. const tempList: any[] = []
  197. result.forEach((item: any) => {
  198. tempList.push({
  199. text: item.name,
  200. value: item.id
  201. })
  202. })
  203. let tempSchoolId = ''
  204. if (tempList.length > 0) {
  205. const first = tempList[0]
  206. tempSchoolId = first.value || ''
  207. }
  208. this.setData({
  209. schoolAreaList: tempList,
  210. tempChangeSchoolAreaId: tempSchoolId
  211. })
  212. } catch {
  213. //
  214. }
  215. this.setData({
  216. schoolLoading: false
  217. })
  218. },
  219. /** 获取学校详情 */
  220. async getSchoolAreaDetail() {
  221. const { data } = await api_schoolAreaDetail({ id: this.data.schoolAreaId })
  222. const result = data.data || {}
  223. if (result.school) {
  224. const schoolInfo = result.school || {};
  225. const schoolInstrumentList = schoolInfo.schoolInstrumentList || [];
  226. // forms.schoolInstrumentSetType = schoolInfo.instrumentSetType;
  227. if (schoolInfo.instrumentSetType === 'SCHOOL') {
  228. const gradeClassList = [{
  229. values: getGradeList(schoolInfo.gradeYear),
  230. defaultIndex: this.data.gradeClassIndexs[0]
  231. }, {
  232. values: classList,
  233. defaultIndex: this.data.gradeClassIndexs[1]
  234. }]
  235. this.setData({
  236. gradeClassList,
  237. schoolInstrumentSetType: schoolInfo.instrumentSetType
  238. })
  239. } else if (schoolInfo.instrumentSetType === 'GRADE') {
  240. const gradeList: any = []
  241. schoolInstrumentList.forEach((item: any) => {
  242. gradeList.push({
  243. text: GRADE_ENUM[item.gradeNum],
  244. value: item.gradeNum,
  245. instrumentId: item.instrumentId
  246. })
  247. });
  248. gradeList.sort((a: any, b: any) => a.value - b.value);
  249. const gradeClassList = [{
  250. values: gradeList,
  251. defaultIndex: this.data.gradeClassIndexs[0]
  252. }, {
  253. values: classList,
  254. defaultIndex: this.data.gradeClassIndexs[1]
  255. }]
  256. this.setData({
  257. gradeClassList,
  258. schoolInstrumentSetType: schoolInfo.instrumentSetType
  259. })
  260. } else if (schoolInfo.instrumentSetType === 'CLASS') {
  261. // // 班级
  262. const tempGradeList: any[] = [];
  263. schoolInstrumentList.forEach((item: any) => {
  264. if (!tempGradeList.includes(item.gradeNum)) {
  265. tempGradeList.push(item.gradeNum);
  266. }
  267. });
  268. const lastGradeList: any[] = [];
  269. tempGradeList.forEach((temp: any) => {
  270. const list = {
  271. text: GRADE_ENUM[temp],
  272. value: temp,
  273. instrumentId: '',
  274. instrumentCode: '',
  275. instrumentName: '',
  276. classList: [] as any
  277. };
  278. schoolInstrumentList.forEach((item: any) => {
  279. if (temp === item.gradeNum) {
  280. list.instrumentId = item.instrumentId;
  281. list.instrumentCode = item.instrumentCode;
  282. list.instrumentName = item.instrumentName;
  283. list.classList.push({
  284. text: item.classNum + '班',
  285. value: item.classNum,
  286. instrumentCode: item.instrumentCode
  287. });
  288. }
  289. });
  290. // 排序班级
  291. list.classList.sort((a: any, b: any) => a.value - b.value);
  292. lastGradeList.push(list);
  293. });
  294. lastGradeList.sort((a: any, b: any) => a.value - b.value);
  295. // console.log(lastGradeList, 'lastGradeList')
  296. const gradeClassList = [{
  297. values: lastGradeList,
  298. defaultIndex: this.data.gradeClassIndexs[0]
  299. }, {
  300. values: lastGradeList[this.data.gradeClassIndexs[0]]?.classList || [],
  301. defaultIndex: this.data.gradeClassIndexs[1]
  302. }]
  303. this.setData({
  304. gradeClassList,
  305. schoolInstrumentSetType: schoolInfo.instrumentSetType
  306. })
  307. } else {
  308. const gradeClassList = [{
  309. values: getGradeList(),
  310. defaultIndex: this.data.gradeClassIndexs[0]
  311. }, {
  312. values: classList,
  313. defaultIndex: this.data.gradeClassIndexs[1]
  314. }]
  315. this.setData({
  316. gradeClassList,
  317. schoolInstrumentSetType: ''
  318. })
  319. }
  320. } else {
  321. const gradeClassList = [{
  322. values: getGradeList(),
  323. defaultIndex: this.data.gradeClassIndexs[0]
  324. }, {
  325. values: classList,
  326. defaultIndex: this.data.gradeClassIndexs[1]
  327. }]
  328. this.setData({
  329. gradeClassList,
  330. schoolInstrumentSetType: ''
  331. })
  332. }
  333. },
  334. /** 选择男女 */
  335. onCheckGender(e: any) {
  336. const { dataset } = e.target
  337. this.setData({
  338. gender: dataset.gender
  339. })
  340. },
  341. /** 显示选择地区 */
  342. onShowAreaList() {
  343. this.setData({
  344. showArea: true
  345. })
  346. },
  347. /** 关闭选择地区 */
  348. onCloseAreaList() {
  349. this.setData({
  350. showArea: false
  351. })
  352. },
  353. /** 确定选择地区 */
  354. submitArea(e: any) {
  355. const selectedOptions: any = e.detail.values
  356. this.setData({
  357. provinceCode: selectedOptions[0].code,
  358. cityCode: selectedOptions[1].code,
  359. regionCode: selectedOptions[2].code,
  360. provinceName: selectedOptions[0].name,
  361. cityName: selectedOptions[1].name,
  362. regionName: selectedOptions[2].name,
  363. showArea: false,
  364. searchName: '',
  365. schoolAreaId: '',
  366. schoolAreaName: '',
  367. schoolAreaIndex: 0,
  368. gradeClassIndexs: [0, 0],
  369. 'gradeClassList[0].defaultIndex': 0,
  370. 'gradeClassList[1].defaultIndex': 0,
  371. currentGradeNum: null,
  372. currentClass: null,
  373. currentGradeClassTxt: '',
  374. }, () => {
  375. this.getSchools()
  376. })
  377. },
  378. /** 关闭选择学校 */
  379. onCloseSchool() {
  380. this.setData({
  381. showSchool: false
  382. })
  383. },
  384. /** 选择学校关闭后 */
  385. onSchoolAfterLeave() {
  386. this.setData({
  387. showSchoolAfterLeave: true
  388. })
  389. },
  390. /** 选择学校打开前 */
  391. onSchoolBeforeEnter() {
  392. this.setData({
  393. showSchoolAfterLeave: false
  394. })
  395. },
  396. /** 选择学校 */
  397. onSelectSchool() {
  398. if (!this.data.provinceName) {
  399. wx.showToast({
  400. title: '请选择地区',
  401. icon: 'none'
  402. })
  403. return
  404. }
  405. this.setData({
  406. showSchool: true
  407. })
  408. },
  409. /** 确定选择学校 */
  410. onSubmitSchool() {
  411. const detail = this.data.schoolAreaList.find((item: any) => item.value === this.data.tempChangeSchoolAreaId)
  412. const detailIndex = this.data.schoolAreaList.findIndex((item: any) => item.value === this.data.tempChangeSchoolAreaId)
  413. // console.log(detail, detailIndex, this.data.tempChangeSchoolAreaId)
  414. if(detailIndex === -1) return
  415. this.setData({
  416. schoolAreaName: detail.text,
  417. schoolAreaId: detail.value,
  418. schoolAreaIndex: detailIndex,
  419. showSchool: false,
  420. gradeClassIndexs: [0, 0],
  421. 'gradeClassList[0].defaultIndex': 0,
  422. 'gradeClassList[1].defaultIndex': 0,
  423. currentGradeNum: null,
  424. currentClass: null,
  425. currentGradeClassTxt: '',
  426. }, () => {
  427. this.getSchoolAreaDetail()
  428. })
  429. },
  430. onChangeSchool(e: any) {
  431. const { value } = e.detail.value
  432. this.setData({
  433. tempChangeSchoolAreaId: value
  434. })
  435. },
  436. onSearch() {
  437. this.setData({
  438. schoolAreaIndex: 0
  439. }, () => {
  440. this.getSchools(this.data.searchName);
  441. })
  442. },
  443. onSearchChange(e: any) {
  444. this.setData({
  445. searchName: e.detail
  446. })
  447. },
  448. /** 选择年级班级 */
  449. onSelectGradeClass() {
  450. if (!this.data.schoolAreaId) {
  451. wx.showToast({
  452. title: '请选择学校',
  453. icon: 'none'
  454. })
  455. return
  456. }
  457. this.setData({
  458. showGradeClass: true
  459. })
  460. },
  461. /** 年级班级 */
  462. onCloseGradeClass() {
  463. this.setData({
  464. showGradeClass: false
  465. })
  466. },
  467. onGradeClassBeforeEnter() {
  468. this.setData({
  469. showGradeClassAfterLeave: false
  470. })
  471. },
  472. onGradeClassAfterLeave() {
  473. this.setData({
  474. showGradeClassAfterLeave: true
  475. })
  476. },
  477. /** 确认选择年级班级 */
  478. onSubmitGradeClass(e: any) {
  479. const selectedOptions: any = e.detail.value
  480. const selectedIndexs: any = e.detail.index
  481. // console.log(selectedOptions, e, 'selectedOptions')
  482. this.setData({
  483. currentGradeClassTxt: selectedOptions[0].text + selectedOptions[1].text,
  484. currentGradeNum: selectedOptions[0].value,
  485. currentClass: selectedOptions[1].value,
  486. 'gradeClassList[0].defaultIndex': selectedIndexs[0],
  487. 'gradeClassList[1].defaultIndex': selectedIndexs[1],
  488. gradeClassIndexs: selectedIndexs,
  489. showGradeClass: false
  490. })
  491. },
  492. /** 年级班级切换时 */
  493. onGradeClassChange(event: any) {
  494. const { picker, index, value } = event.detail;
  495. if (index !== 0) return
  496. // 第一列滚动时
  497. // console.log(this.data.gradeClassList, "this.data.gradeClassList")
  498. if (this.data.schoolInstrumentSetType === "CLASS") {
  499. const firstColumn = value[index]
  500. const gradeDetail = this.data.gradeClassList[0]?.values
  501. const classList = gradeDetail?.find((item: any) => item.value === firstColumn.value)
  502. if (classList) {
  503. picker.setColumnIndex(1, '0')
  504. picker.setColumnValues(1, classList.classList);
  505. }
  506. }
  507. },
  508. /** 最终提交 */
  509. async onSubmit() {
  510. try {
  511. const params = this.data
  512. if (!params.phone || !/^1[3456789]\d{9}$/.test(params.phone)) {
  513. wx.showToast({
  514. title: '请输入正确的手机号',
  515. icon: "none"
  516. })
  517. return
  518. }
  519. if (!params.name) {
  520. wx.showToast({
  521. title: '请输入学生姓名',
  522. icon: "none"
  523. })
  524. return
  525. }
  526. if (!params.provinceCode || !params.cityCode || !params.regionCode) {
  527. wx.showToast({
  528. title: '请选择地区',
  529. icon: "none"
  530. })
  531. return
  532. }
  533. if (!params.schoolAreaId) {
  534. wx.showToast({
  535. title: '请选择学校',
  536. icon: "none"
  537. })
  538. return
  539. }
  540. if (!params.currentGradeNum) {
  541. wx.showToast({
  542. title: '请选择年级',
  543. icon: "none"
  544. })
  545. return
  546. }
  547. const pages = getCurrentPages();
  548. const prevPage = pages[pages.length - 2]; // 获取上一个页面实例
  549. if (params.userBeneficiaryId) {
  550. const { data } = await api_userBeneficiaryUpdate({
  551. id: params.userBeneficiaryId,
  552. phone: params.phone,
  553. name: params.name,
  554. gender: params.gender,
  555. currentGradeNum: params.currentGradeNum,
  556. currentClass: params.currentClass,
  557. schoolAreaId: params.schoolAreaId,
  558. defaultStatus: false
  559. })
  560. wx.showToast({
  561. title: '提交成功',
  562. icon: 'none'
  563. })
  564. prevPage?.setData({ backParams: { userBeneficiaryId: data.data.id, name: params.name, phone: params.phone, schoolInfo: params.schoolAreaName + params.currentGradeClassTxt } });
  565. } else {
  566. const { data } = await api_userBeneficiarySave({
  567. "phone": params.phone,
  568. "name": params.name,
  569. "gender": params.gender,
  570. "currentGradeNum": params.currentGradeNum,
  571. "currentClass": params.currentClass,
  572. "schoolAreaId": params.schoolAreaId,
  573. defaultStatus: false
  574. })
  575. wx.showToast({
  576. title: '提交成功',
  577. icon: 'none'
  578. })
  579. prevPage?.setData({ backParams: { userBeneficiaryId: data.data.id, name: params.name, phone: params.phone, schoolInfo: params.schoolAreaName + params.currentGradeClassTxt } });
  580. }
  581. this.onSetCatch(params)
  582. wx.navigateBack()
  583. } catch {
  584. //
  585. }
  586. },
  587. /** 设置缓存 */
  588. onSetCatch(params: any) {
  589. wx.setStorageSync('buyerInfomation', JSON.stringify({
  590. phone: params.phone,
  591. name: params.name,
  592. gender: params.gender,
  593. schoolAreaId: params.schoolAreaId,
  594. schoolAreaName: params.schoolAreaName,
  595. currentGradeClassTxt: params.currentGradeClassTxt,
  596. currentClass: params.currentClass,
  597. currentGradeNum: params.currentGradeNum,
  598. cityCode: params.cityCode,
  599. cityName: params.cityName,
  600. provinceCode: params.provinceCode,
  601. provinceName: params.provinceName,
  602. regionCode: params.regionCode,
  603. regionName: params.regionName,
  604. schoolAreaIndex: params.schoolAreaIndex,
  605. gradeClassIndexs: params.gradeClassIndexs
  606. }))
  607. }
  608. })