index.ts 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919
  1. // index.ts
  2. import { api_schoolAreaDetail, api_schoolAreaList, api_sysAreaQueryAllProvince, api_userBeneficiarySave, api_userBeneficiaryUpdate } from "../../api/new";
  3. import { GRADE_ENUM } from '../../utils/util'
  4. const classList: any = [];
  5. for (let i = 1; i <= 40; i++) {
  6. classList.push({ text: i + '班', value: i });
  7. }
  8. /** 获取年级 */
  9. const getGradeList = (gradeYear?: string, instrumentCode?: string) => {
  10. let tempList: any = [];
  11. const five = [
  12. { text: '一年级', value: 1, instrumentCode },
  13. { text: '二年级', value: 2, instrumentCode },
  14. { text: '三年级', value: 3, instrumentCode },
  15. { text: '四年级', value: 4, instrumentCode },
  16. { text: '五年级', value: 5, instrumentCode }
  17. ];
  18. const one = [{ text: '六年级', value: 6, instrumentCode }];
  19. const three = [
  20. { text: '七年级', value: 7, instrumentCode },
  21. { text: '八年级', value: 8, instrumentCode },
  22. { text: '九年级', value: 9, instrumentCode }
  23. ];
  24. if (gradeYear === 'FIVE_YEAR_SYSTEM') {
  25. tempList.push(...[...five]);
  26. } else if (gradeYear === 'SIX_YEAR_SYSTEM') {
  27. tempList.push(...[...five, ...one]);
  28. } else if (gradeYear === 'THREE_YEAR_SYSTEM') {
  29. tempList.push(...[...three]);
  30. } else if (gradeYear === 'FORE_YEAR_SYSTEM') {
  31. tempList.push(...[...one, ...three]);
  32. } else {
  33. tempList.push(...[...five, ...one, ...three]);
  34. }
  35. return tempList;
  36. };
  37. // 获取应用实例
  38. const app = getApp<IAppOption>()
  39. // pages/orders/orders.ts
  40. Page({
  41. /**
  42. * 页面的初始数据
  43. */
  44. data: {
  45. goodsImgList: [
  46. 'https://oss.dayaedu.com/ktyq/1739524049205.png',
  47. 'https://oss.dayaedu.com/ktyq/1739523564827.png',
  48. 'https://oss.dayaedu.com/ktyq/1739523574402.png',
  49. 'https://oss.dayaedu.com/ktyq/1739523583463.png'
  50. ],
  51. current: 0,
  52. popupShow: false,
  53. showService: false,
  54. isFromPreviewImage: false,
  55. showBuyer: false, // 收益人
  56. cacheArea: [] as { cityCode: string, shiftCityCode: string }[], // 临时存储的对应关系
  57. phone: '',
  58. name: '',
  59. gender: '',
  60. schoolAreaId: '',
  61. schoolAreaName: '',
  62. currentClassTxt: '', // 班级
  63. currentClass: null,
  64. currentGradeTxt: '', // 年级
  65. currentGradeNum: null,
  66. cityCode: null,
  67. cityName: "",
  68. provinceCode: null,
  69. provinceName: "",
  70. regionCode: null,
  71. regionName: "",
  72. showGender: false,
  73. genderList: [{
  74. name: '男',
  75. value: '1',
  76. className: 'one-gender cancel-gender'
  77. }, {
  78. name: '女',
  79. value: '0',
  80. className: 'two-gender cancel-gender'
  81. }],
  82. userBeneficiaryId: '', // 选中用户的编号
  83. userBeneficiaryInfo: {
  84. name: '',
  85. phoneNumber: '',
  86. schoolInfo: ''
  87. },
  88. showArea: false,
  89. showAreaAfterLeave: false,
  90. areaList: [] as any,
  91. showSchool: false,
  92. showSchoolAfterLeave: false, // 离开后
  93. /** 学校列表 */
  94. schoolAreaList: [] as any,
  95. schoolAreaIndex: 0,
  96. /** 临时切换时选择的学校编号 */
  97. tempChangeSchoolAreaId: '',
  98. schoolLoading: false,
  99. /** 搜索学校 */
  100. searchName: '',
  101. /** 学校类型 */
  102. schoolInstrumentSetType: '',
  103. /** 年级 */
  104. gradeGradeList: [] as any,
  105. gradeGradeIndex: 0,
  106. showGradeClass: false,
  107. showGradeClassAfterLeave: false, // 离开后
  108. /** 班级 */
  109. classList: [] as any,
  110. classIndex: 0,
  111. showClass: false,
  112. showClassAfterLeave: false, // 离开后
  113. buyerLoading: false,
  114. currentIndex: 0,
  115. },
  116. /**
  117. * 生命周期函数--监听页面加载
  118. */
  119. onLoad() {
  120. // this.onInit()
  121. },
  122. isLogin() {
  123. // 判断是否登录
  124. if (!app.globalData.isLogin) {
  125. wx.navigateTo({
  126. url: '../login/login',
  127. })
  128. return false
  129. }
  130. return true
  131. },
  132. /** 我的订单 */
  133. onOrder() {
  134. // 判断是否登录
  135. if (!this.isLogin()) {
  136. return
  137. }
  138. wx.navigateTo({
  139. url: '../orders/orders',
  140. })
  141. },
  142. /** 申请加入 */
  143. onBuyGoods() {
  144. // 判断是否登录
  145. if (!this.isLogin()) {
  146. return
  147. }
  148. wx.navigateTo({
  149. url: '../select-goods/index',
  150. })
  151. },
  152. /** 客服 */
  153. onService() {
  154. this.setData({
  155. showService: true
  156. })
  157. },
  158. changePop(event: { detail: any }) {
  159. this.setData({
  160. showService: event.detail
  161. })
  162. },
  163. onBuyShop() {
  164. // 判断是否登录
  165. if (!this.isLogin()) {
  166. return
  167. }
  168. this.setData({
  169. popupShow: true
  170. })
  171. },
  172. onClose() {
  173. this.setData({
  174. popupShow: false,
  175. currentIndex: 1,
  176. userBeneficiaryId: '',
  177. userBeneficiaryInfo: {
  178. name: '',
  179. phoneNumber: '',
  180. schoolInfo: ''
  181. }
  182. })
  183. },
  184. onPreivewGoodsImg(e: { currentTarget: { dataset: any } }) {
  185. wx.previewImage({
  186. current: e.currentTarget.dataset.src,
  187. urls: this.data.goodsImgList,
  188. success: () => {
  189. this.setData({
  190. isFromPreviewImage: true
  191. })
  192. }
  193. })
  194. },
  195. onPreivewGoods(e: { currentTarget: { dataset: any } }) {
  196. wx.previewImage({
  197. current: e.currentTarget.dataset.src,
  198. urls: [e.currentTarget.dataset.src],
  199. success: () => {
  200. this.setData({
  201. isFromPreviewImage: true
  202. })
  203. }
  204. })
  205. },
  206. /**
  207. * 生命周期函数--监听页面显示
  208. */
  209. onShow() {
  210. },
  211. onShareAppMessage() {
  212. return {
  213. title: '翼时代器乐数字Ai',
  214. path: '/pages/index/index',
  215. imageUrl: 'https://oss.dayaedu.com/ktyq/1733312164991.png'
  216. }
  217. },
  218. onShareTimeline() {
  219. return {
  220. title: '器乐数字AI工具',
  221. path: '/pages/index/index',
  222. imageUrl: 'https://oss.dayaedu.com/ktyq/1733312164991.png'
  223. }
  224. },
  225. onSelectBuyer() {
  226. // 从缓存里面获取用户信息
  227. this.getUserDetail()
  228. if (this.data.areaList.length <= 0) {
  229. this.getAreas()
  230. }
  231. this.getSchools()
  232. this.setData({
  233. showBuyer: true
  234. })
  235. },
  236. onCloseBuyer() {
  237. this.setData({
  238. showBuyer: false
  239. }, () => {
  240. if (!this.data.userBeneficiaryId) {
  241. this.onSetCatch(this.data)
  242. }
  243. })
  244. },
  245. async getUserDetail() {
  246. try {
  247. // const { data } = await api_userBeneficiaryDetail({
  248. // id: this.data.userBeneficiaryId
  249. // })
  250. // console.log(data, 'data')
  251. const information = wx.getStorageSync('buyerInfomation')
  252. const users = information ? JSON.parse(information) : null
  253. if (users) {
  254. this.setData({
  255. phone: users.phone,
  256. name: users.name,
  257. gender: users.gender,
  258. schoolAreaId: users.schoolAreaId,
  259. schoolAreaName: users.schoolAreaName,
  260. currentGradeTxt: users.currentGradeTxt,
  261. currentClass: users.currentClass,
  262. currentClassTxt: users.currentClassTxt,
  263. currentGradeNum: users.currentGradeNum,
  264. cityCode: users.cityCode,
  265. cityName: users.cityName,
  266. provinceCode: users.provinceCode,
  267. provinceName: users.provinceName,
  268. regionCode: users.regionCode,
  269. regionName: users.regionName,
  270. schoolAreaIndex: users.schoolAreaIndex,
  271. gradeGradeIndex: users.gradeGradeIndex,
  272. classIndex: users.classIndex
  273. }, () => {
  274. this.getSchoolAreaDetail()
  275. })
  276. }
  277. } catch {
  278. //
  279. }
  280. },
  281. /** 获取省市区 */
  282. async getAreas() {
  283. try {
  284. const { data } = await api_sysAreaQueryAllProvince({})
  285. this.setData({
  286. areaList: this.formateArea(data.data)
  287. })
  288. } catch {
  289. //
  290. }
  291. },
  292. formateArea(area: any[]) {
  293. const province_list: { [_: string]: string } = {};
  294. const city_list: { [_: string]: string } = {};
  295. const county_list: { [_: string]: string } = {};
  296. area.forEach((item: any) => {
  297. province_list[item.code] = item.name;
  298. });
  299. area.forEach((item: any) => {
  300. item.areas && item.areas.forEach((city: any, index: number) => {
  301. let code = city.code + ""
  302. // 某些数据不标准 这里需要转换一下
  303. if (code[4] !== "0" || code[5] !== "0") {
  304. // 现在把区域的数据改为市的
  305. const newCode = code.substring(0, 2) + (index < 10 ? `a${index}` : index < 20 ? `b${index - 10}` : index < 30 ? `c${index - 20}` : `d${index - 30}`) + "00";
  306. this.data.cacheArea.push({
  307. cityCode: code,
  308. shiftCityCode: newCode
  309. })
  310. code = newCode
  311. }
  312. city_list[code] = city.name;
  313. });
  314. });
  315. area.forEach((item: any) => {
  316. item.areas && item.areas.forEach((city: any) => {
  317. city.areas && city.areas.forEach((county: any) => {
  318. county_list[county.code] = county.name;
  319. });
  320. });
  321. });
  322. return {
  323. province_list,
  324. city_list,
  325. county_list
  326. };
  327. },
  328. // 转换
  329. formateCityCode(reverse?: boolean) {
  330. if (!this.data.regionCode && this.data.cityCode) {
  331. const cityCodeObj = this.data.cacheArea.find((item: any) => {
  332. return item[reverse ? "cityCode" : "shiftCityCode"] == this.data.cityCode
  333. })
  334. return cityCodeObj ? cityCodeObj[reverse ? "shiftCityCode" : "cityCode"] : ""
  335. }
  336. return this.data.cityCode
  337. },
  338. /** 获取学校列表 */
  339. async getSchools(name?: string) {
  340. this.setData({
  341. schoolLoading: true
  342. })
  343. try {
  344. // 判断是否有地区信息
  345. if (!this.data.provinceCode || !this.data.cityCode) {
  346. return
  347. }
  348. const citycode = this.formateCityCode()
  349. const { data } = await api_schoolAreaList({
  350. name,
  351. testFlag: true,
  352. provinceCode: this.data.provinceCode,
  353. cityCode: citycode,
  354. regionCode: this.data.regionCode
  355. })
  356. const result = data.data || []
  357. const tempList: any[] = []
  358. result.forEach((item: any) => {
  359. tempList.push({
  360. text: item.name,
  361. value: item.id
  362. })
  363. })
  364. let tempSchoolId = ''
  365. if (tempList.length > 0) {
  366. const first = tempList[0]
  367. tempSchoolId = first.value || ''
  368. }
  369. this.setData({
  370. schoolAreaList: tempList,
  371. tempChangeSchoolAreaId: tempSchoolId
  372. })
  373. } catch {
  374. //
  375. }
  376. this.setData({
  377. schoolLoading: false
  378. })
  379. },
  380. onCheckedGender() {
  381. this.setData({
  382. showGender: true
  383. })
  384. },
  385. onCloseGender() {
  386. this.setData({
  387. showGender: false,
  388. })
  389. },
  390. onSelectGender(e: any) {
  391. const genderList = this.data.genderList
  392. const gender = e.detail.value
  393. genderList.forEach((item: any, index: number) => {
  394. if (item.value === gender) {
  395. item.className = index === 0 ? 'one-gender select-gender' : 'two-gender select-gender'
  396. } else {
  397. item.className = index === 0 ? 'one-gender cancel-gender' : 'two-gender cancel-gender'
  398. }
  399. })
  400. console.log(e, genderList, gender, '1212')
  401. this.setData({
  402. gender,
  403. genderList
  404. })
  405. },
  406. /** 获取学校详情 */
  407. async getSchoolAreaDetail() {
  408. if (!this.data.schoolAreaId) return
  409. const { data } = await api_schoolAreaDetail({ id: this.data.schoolAreaId })
  410. const result = data.data || {}
  411. let tempGradeGradeList: any = []
  412. let tempClassList: any = []
  413. let schoolInstrumentSetType = ''
  414. if (result.school) {
  415. const schoolInfo = result.school || {};
  416. const schoolInstrumentList = schoolInfo.schoolInstrumentList || [];
  417. // forms.schoolInstrumentSetType = schoolInfo.instrumentSetType;
  418. if (schoolInfo.instrumentSetType === 'SCHOOL') {
  419. tempGradeGradeList = getGradeList(schoolInfo.gradeYear)
  420. tempClassList = classList
  421. schoolInstrumentSetType = schoolInfo.instrumentSetType
  422. } else if (schoolInfo.instrumentSetType === 'GRADE') {
  423. const gradeList: any = []
  424. schoolInstrumentList.forEach((item: any) => {
  425. gradeList.push({
  426. text: GRADE_ENUM[item.gradeNum],
  427. value: item.gradeNum,
  428. instrumentId: item.instrumentId
  429. })
  430. });
  431. gradeList.sort((a: any, b: any) => a.value - b.value);
  432. tempGradeGradeList = gradeList
  433. tempClassList = classList
  434. schoolInstrumentSetType = schoolInfo.instrumentSetType
  435. } else if (schoolInfo.instrumentSetType === 'CLASS') {
  436. // // 班级
  437. const tempGradeList: any[] = [];
  438. schoolInstrumentList.forEach((item: any) => {
  439. if (!tempGradeList.includes(item.gradeNum)) {
  440. tempGradeList.push(item.gradeNum);
  441. }
  442. });
  443. const lastGradeList: any[] = [];
  444. tempGradeList.forEach((temp: any) => {
  445. const list = {
  446. text: GRADE_ENUM[temp],
  447. value: temp,
  448. instrumentId: '',
  449. instrumentCode: '',
  450. instrumentName: '',
  451. classList: [] as any
  452. };
  453. schoolInstrumentList.forEach((item: any) => {
  454. if (temp === item.gradeNum) {
  455. list.instrumentId = item.instrumentId;
  456. list.instrumentCode = item.instrumentCode;
  457. list.instrumentName = item.instrumentName;
  458. list.classList.push({
  459. text: item.classNum + '班',
  460. value: item.classNum,
  461. instrumentCode: item.instrumentCode
  462. });
  463. }
  464. });
  465. // 排序班级
  466. list.classList.sort((a: any, b: any) => a.value - b.value);
  467. lastGradeList.push(list);
  468. });
  469. lastGradeList.sort((a: any, b: any) => a.value - b.value);
  470. tempGradeGradeList = lastGradeList
  471. tempClassList = lastGradeList[this.data.gradeGradeIndex]?.classList || []
  472. schoolInstrumentSetType = schoolInfo.instrumentSetType
  473. } else {
  474. tempGradeGradeList = getGradeList()
  475. tempClassList = classList
  476. schoolInstrumentSetType = ''
  477. }
  478. } else {
  479. tempGradeGradeList = getGradeList()
  480. tempClassList = classList
  481. schoolInstrumentSetType = ''
  482. }
  483. // 格式化年级班级 - 如果后台改了学校配置,本地保存了缓存,判断年级、班级是否存在
  484. const gradeIndex = this.data.gradeGradeIndex
  485. const classIndex = this.data.classIndex
  486. if ((tempGradeGradeList.length || 0) - 1 < gradeIndex) {
  487. tempClassList = tempGradeGradeList[0]?.classList || []
  488. this.setData({
  489. gradeGradeList: tempGradeGradeList,
  490. classList: tempClassList,
  491. schoolInstrumentSetType: schoolInstrumentSetType,
  492. gradeGradeIndex: 0,
  493. classIndex: 0,
  494. // currentClass: null,
  495. // currentClassTxt: '',
  496. // currentGradeNum: null,
  497. // currentGradeTxt: ''
  498. })
  499. } else if ((tempClassList.length || 0) - 1 < classIndex) {
  500. this.setData({
  501. gradeGradeList: tempGradeGradeList,
  502. classList: tempClassList,
  503. schoolInstrumentSetType: schoolInstrumentSetType,
  504. classIndex: 0,
  505. // currentClass: null,
  506. // currentClassTxt: '',
  507. })
  508. } else {
  509. this.setData({
  510. gradeGradeList: tempGradeGradeList,
  511. classList: tempClassList,
  512. schoolInstrumentSetType: schoolInstrumentSetType
  513. })
  514. }
  515. },
  516. /** 选择男女 */
  517. onCheckGender(e: any) {
  518. const { dataset } = e.target
  519. this.setData({
  520. gender: dataset.gender
  521. })
  522. },
  523. /** 显示选择地区 */
  524. onShowAreaList() {
  525. this.setData({
  526. showArea: true
  527. })
  528. },
  529. /** 关闭选择地区 */
  530. onCloseAreaList() {
  531. this.setData({
  532. showArea: false
  533. })
  534. },
  535. /** 选择地区关闭后 */
  536. onAreaAfterLeave() {
  537. this.setData({
  538. showAreaAfterLeave: true
  539. })
  540. },
  541. /** 选择地区打开前 */
  542. onAreaBeforeEnter() {
  543. this.setData({
  544. showAreaAfterLeave: false
  545. })
  546. },
  547. /** 确定选择地区 */
  548. submitArea(e: any) {
  549. const selectedOptions: any = e.detail.values
  550. this.setData({
  551. provinceCode: selectedOptions[0].code,
  552. cityCode: selectedOptions[1].code,
  553. regionCode: selectedOptions[2]?.code || null,
  554. provinceName: selectedOptions[0].name || '',
  555. cityName: selectedOptions[1].name || '',
  556. regionName: selectedOptions[2]?.name || '',
  557. showArea: false,
  558. searchName: '',
  559. schoolAreaId: '',
  560. schoolAreaName: '',
  561. schoolAreaIndex: 0,
  562. currentGradeNum: null,
  563. currentGradeTxt: '',
  564. gradeGradeIndex: 0,
  565. currentClass: null,
  566. currentClassTxt: '',
  567. classIndex: 0
  568. }, () => {
  569. this.getSchools()
  570. })
  571. },
  572. /** 关闭选择学校 */
  573. onCloseSchool() {
  574. this.setData({
  575. showSchool: false
  576. })
  577. },
  578. /** 选择学校关闭后 */
  579. onSchoolAfterLeave() {
  580. this.setData({
  581. showSchoolAfterLeave: true
  582. })
  583. },
  584. /** 选择学校打开前 */
  585. onSchoolBeforeEnter() {
  586. this.setData({
  587. showSchoolAfterLeave: false
  588. })
  589. },
  590. /** 选择学校 */
  591. onSelectSchool() {
  592. if (!this.data.provinceName) {
  593. wx.showToast({
  594. title: '请选择地区',
  595. icon: 'none'
  596. })
  597. return
  598. }
  599. this.setData({
  600. showSchool: true
  601. })
  602. },
  603. /** 确定选择学校 */
  604. onSubmitSchool() {
  605. if(this.data.tempChangeSchoolAreaId === this.data.schoolAreaId) {
  606. this.setData({
  607. showSchool: false
  608. })
  609. return
  610. }
  611. const detail = this.data.schoolAreaList.find((item: any) => item.value === this.data.tempChangeSchoolAreaId)
  612. const detailIndex = this.data.schoolAreaList.findIndex((item: any) => item.value === this.data.tempChangeSchoolAreaId)
  613. // console.log(detail, detailIndex, this.data.tempChangeSchoolAreaId)
  614. if (detailIndex === -1) return
  615. this.setData({
  616. schoolAreaName: detail.text,
  617. schoolAreaId: detail.value,
  618. schoolAreaIndex: detailIndex,
  619. showSchool: false,
  620. currentGradeNum: null,
  621. currentGradeTxt: '',
  622. gradeGradeIndex: 0,
  623. currentClass: null,
  624. currentClassTxt: '',
  625. classIndex: 0
  626. }, () => {
  627. this.getSchoolAreaDetail()
  628. })
  629. },
  630. onChangeSchool(e: any) {
  631. const { value } = e.detail.value
  632. this.setData({
  633. tempChangeSchoolAreaId: value
  634. })
  635. },
  636. onSearch() {
  637. this.setData({
  638. schoolAreaIndex: 0
  639. }, () => {
  640. this.getSchools(this.data.searchName);
  641. })
  642. },
  643. onSearchChange(e: any) {
  644. this.setData({
  645. searchName: e.detail
  646. })
  647. },
  648. /** 选择年级班级 */
  649. onSelectGradeClass() {
  650. if (!this.data.schoolAreaId) {
  651. wx.showToast({
  652. title: '请选择学校',
  653. icon: 'none'
  654. })
  655. return
  656. }
  657. this.setData({
  658. showGradeClass: true
  659. })
  660. },
  661. /** 年级班级 */
  662. onCloseGradeClass() {
  663. this.setData({
  664. showGradeClass: false
  665. })
  666. },
  667. onGradeClassBeforeEnter() {
  668. this.setData({
  669. showGradeClassAfterLeave: false
  670. })
  671. },
  672. onGradeClassAfterLeave() {
  673. this.setData({
  674. showGradeClassAfterLeave: true
  675. })
  676. },
  677. /** 确认选择年级班级 */
  678. onSubmitGradeClass(e: any) {
  679. const selectedOptions: any = e.detail.value
  680. const selectedIndexs: any = e.detail.index
  681. if (this.data.schoolInstrumentSetType === "CLASS") {
  682. const gradeDetail = this.data.gradeGradeList;
  683. const classList = gradeDetail?.find((item: any) => item.value === selectedOptions.value)
  684. console.log(classList, "classList")
  685. if (classList) {
  686. this.setData({
  687. classIndex: 0,
  688. classList: classList.classList
  689. })
  690. }
  691. }
  692. this.setData({
  693. currentGradeTxt: selectedOptions.text,
  694. currentGradeNum: selectedOptions.value,
  695. gradeGradeIndex: selectedIndexs,
  696. showGradeClass: false,
  697. currentClass: null,
  698. currentClassTxt: ''
  699. })
  700. },
  701. /** 选择班级 */
  702. onSelectClass() {
  703. if (!this.data.schoolAreaId) {
  704. wx.showToast({
  705. title: '请选择所在年级',
  706. icon: 'none'
  707. })
  708. return
  709. }
  710. this.setData({
  711. showClass: true
  712. })
  713. },
  714. /** 班级 */
  715. onCloseClass() {
  716. this.setData({
  717. showClass: false
  718. })
  719. },
  720. onClassBeforeEnter() {
  721. this.setData({
  722. showClassAfterLeave: false
  723. })
  724. },
  725. onClassAfterLeave() {
  726. this.setData({
  727. showClassAfterLeave: true
  728. })
  729. },
  730. /** 确认选择班级 */
  731. onSubmitClass(e: any) {
  732. const selectedOptions: any = e.detail.value
  733. const selectedIndexs: any = e.detail.index
  734. this.setData({
  735. currentClassTxt: selectedOptions.text,
  736. currentClass: selectedOptions.value,
  737. classIndex: selectedIndexs,
  738. showClass: false
  739. })
  740. },
  741. messageName(value: string) {
  742. const nameReg = /^[\u4E00-\u9FA5]+$/
  743. if (!value) {
  744. return '请填写享用者姓名';
  745. } else if (!nameReg.test(value)) {
  746. return '享用者姓名必须为中文';
  747. } else if (value.length < 2 || value.length > 14) {
  748. return '享用者姓名必须为2~14个字';
  749. } else {
  750. return ''
  751. }
  752. },
  753. /** 最终提交 */
  754. async onSubmitBuyer() {
  755. try {
  756. const params = this.data
  757. if (this.messageName(params.name)) {
  758. wx.showToast({
  759. title: this.messageName(params.name),
  760. icon: "none"
  761. })
  762. return
  763. }
  764. if (!params.phone || !/^1[3456789]\d{9}$/.test(params.phone)) {
  765. wx.showToast({
  766. title: '请填写正确的电话号码',
  767. icon: "none"
  768. })
  769. return
  770. }
  771. if (!params.gender) {
  772. wx.showToast({
  773. title: '请选择性别',
  774. icon: 'none'
  775. })
  776. return
  777. }
  778. if (!params.provinceCode || !params.cityCode) {
  779. wx.showToast({
  780. title: '请选择学校地区',
  781. icon: "none"
  782. })
  783. return
  784. }
  785. if (!params.schoolAreaId) {
  786. wx.showToast({
  787. title: '请选择所在学校',
  788. icon: "none"
  789. })
  790. return
  791. }
  792. if (!params.currentGradeNum) {
  793. wx.showToast({
  794. title: '请选择所在年级',
  795. icon: "none"
  796. })
  797. return
  798. }
  799. if (!params.currentClass) {
  800. wx.showToast({
  801. title: '请选择所在班级',
  802. icon: "none"
  803. })
  804. return
  805. }
  806. const objs = {
  807. phone: params.phone,
  808. name: params.name,
  809. gender: params.gender,
  810. currentGradeNum: params.currentGradeNum,
  811. currentClass: params.currentClass,
  812. schoolAreaId: params.schoolAreaId,
  813. defaultStatus: false
  814. }
  815. const userBeneficiary = {
  816. name: params.name,
  817. phoneNumber: params.phone,
  818. schoolInfo: (params.provinceName || '') + (params.cityName || '') + (params.regionName || '') + params.schoolAreaName + params.currentGradeTxt + params.currentClassTxt
  819. }
  820. let userBeneficiaryId = ''
  821. this.setData({
  822. buyerLoading: true
  823. })
  824. if (params.userBeneficiaryId) {
  825. const { data } = await api_userBeneficiaryUpdate({
  826. id: params.userBeneficiaryId,
  827. ...objs
  828. })
  829. wx.showToast({
  830. title: '保存成功',
  831. icon: 'none'
  832. })
  833. userBeneficiaryId = data.data.id
  834. } else {
  835. const { data } = await api_userBeneficiarySave({
  836. ...objs
  837. })
  838. wx.showToast({
  839. title: '保存成功',
  840. icon: 'none'
  841. })
  842. userBeneficiaryId = data.data.id
  843. }
  844. this.setData({
  845. userBeneficiaryId,
  846. userBeneficiaryInfo: userBeneficiary
  847. })
  848. this.onSetCatch(params)
  849. this.onCloseBuyer()
  850. } catch {
  851. //
  852. }
  853. this.setData({
  854. buyerLoading: false
  855. })
  856. },
  857. /** 设置缓存 */
  858. onSetCatch(params: any) {
  859. wx.setStorageSync('buyerInfomation', JSON.stringify({
  860. phone: params.phone,
  861. name: params.name,
  862. gender: params.gender,
  863. schoolAreaId: params.schoolAreaId,
  864. schoolAreaName: params.schoolAreaName,
  865. currentGradeTxt: params.currentGradeTxt,
  866. currentClass: params.currentClass,
  867. currentClassTxt: params.currentClassTxt,
  868. currentGradeNum: params.currentGradeNum,
  869. cityCode: params.cityCode,
  870. cityName: params.cityName,
  871. provinceCode: params.provinceCode,
  872. provinceName: params.provinceName,
  873. regionCode: params.regionCode,
  874. regionName: params.regionName,
  875. schoolAreaIndex: params.schoolAreaIndex,
  876. gradeGradeIndex: params.gradeGradeIndex,
  877. classIndex: params.classIndex
  878. }))
  879. }
  880. })