user-certification.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. import DictionariesBehavior from "../../../../core/behavior/dictionaries.behavior";
  2. import PageContainerBehavior from "../../../../core/behavior/page-container.behavior";
  3. import tickleBehavior, { getTickleContext } from "../../../../core/behavior/tickle.behavior";
  4. import { openPrivacyContract } from "../../../../lib/wx/open-api";
  5. // module/user/pages/user-certification/user-certification.ts
  6. import { createUserInfoMethod, verifyCardnoMethod } from "../../request"
  7. import { usePhoneNumber } from "../../../../lib/use/use-phone";
  8. Component({
  9. behaviors: [
  10. PageContainerBehavior,
  11. DictionariesBehavior,
  12. tickleBehavior,
  13. ],
  14. lifetimes: {
  15. attached() {
  16. const channel = this.getOpenerEventChannel();
  17. channel.on('navigateBack', (data) => { this.setData(data); })
  18. const { getPhoneNumber, updateStatus, updateValue } = usePhoneNumber();
  19. this.getPhoneNumber = <any>getPhoneNumber;
  20. updateStatus(status => this.setData({ 'loading': status === 'loading' }));
  21. updateValue(value => this.setData({ 'model.phone': value }));
  22. }
  23. },
  24. properties: {
  25. hide: { type: Boolean, value: false },
  26. },
  27. data: {
  28. loading: false,
  29. verifying: false,
  30. model: {} as AnyObject,
  31. name: '',
  32. cardno: '',
  33. age: '',
  34. sex: '',
  35. privacyContract: { agree: false, name: '《隐私政策》', show: false },
  36. },
  37. /**
  38. * 组件的方法列表
  39. */
  40. methods: {
  41. getPhoneNumber() { /** usePhoneNumber 中实现 */ },
  42. openPrivacyContract: openPrivacyContract,
  43. onPrivacySetting({ detail }: { detail: WechatMiniprogram.GetPrivacySettingSuccessCallbackResult }) {
  44. this.setData({
  45. 'privacyContract.name': detail.privacyContractName,
  46. // 'privacyContract.agree': !detail.needAuthorization,
  47. })
  48. },
  49. onAgreeChange(event: any) {
  50. console.log(event);
  51. const agree = event?.detail?.checked;
  52. if (agree) this.setData({ 'privacyContract.show': true });
  53. else this.setData({ 'privacyContract.agree': agree });
  54. },
  55. onAgree() {
  56. console.log('onAgree-->');
  57. this.setData({ 'privacyContract.agree': true });
  58. },
  59. async verifyCardno(event: WechatMiniprogram.InputConfirm) {
  60. const value = event.detail.value;
  61. if (value.length !== 18) { wx.showToast({ title: '请输入正确的身份证号', icon: 'none' }); }
  62. else {
  63. this.setData({ verifying: true });
  64. try {
  65. const data = await verifyCardnoMethod(value);
  66. this.setData({ 'age': data.age, 'sex': data.sex });
  67. } catch (error) {
  68. this.setData({ 'cardno': '', 'age': '', 'sex': '' });
  69. wx.showToast({ title: error.errMsg, icon: 'error' });
  70. }
  71. this.setData({ verifying: false });
  72. }
  73. },
  74. async onSubmit(event: WechatMiniprogram.FormSubmit) {
  75. const data = { ...this.data.model, ...event.detail.value };
  76. if (!data.cardno) data.cardno = this.data.cardno;
  77. if (data.sex == null) data.sex = this.data.sex;
  78. if (!data.agemust) data.agemust = this.data.privacyContract.agree ? 'Y' : 'N';
  79. console.log(data);
  80. // if (!data.phone) return getTickleContext.call(this).showWarnMessage('请获取手机号码');
  81. if (!data.name) return getTickleContext.call(this).showWarnMessage('请输入姓名');
  82. if (data.cardno?.length !== 18) return getTickleContext.call(this).showWarnMessage('请输入正确的身份证号');
  83. if (data.sex === '1' && !data.womenSpecialPeriod) return getTickleContext.call(this).showWarnMessage('请至少选择一项女性特殊期');
  84. if (!data.height) return getTickleContext.call(this).showWarnMessage('请输入身高');
  85. if (!data.weight) return getTickleContext.call(this).showWarnMessage('请输入体重');
  86. console.log(data);
  87. if (data.agemust === 'N') {
  88. this.setData({ 'privacyContract.show': true })
  89. return wx.showToast({ title: `请阅读并同意${this.data.privacyContract.name}`, icon: 'none' })
  90. }
  91. wx.showLoading({ title: '保存中' });
  92. try {
  93. const { patientId } = await createUserInfoMethod(<any>data);
  94. // await wx.navigateBack();
  95. // if (patientId) this.getOpenerEventChannel().emit('update', { patientId });
  96. wx.setStorageSync('patientId', patientId);
  97. wx.redirectTo({ url: `/module/chats/pages/index/index?component=questionnaire` });
  98. } catch (error) {
  99. getTickleContext.call(this).showErrorMessage(error.errMsg);
  100. }
  101. wx.hideLoading()
  102. }
  103. },
  104. })