| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- // components/popup-user-auth/popup-user-auth.ts
- import { openPrivacyContract } from "../../lib/wx/open-api";
- import { login } from "../../lib/logic";
- import { usePhoneNumber } from "../../lib/use/use-phone";
- import { getSceneRegisterMethod, setSceneRegisterMethod } from "../../lib/request/common";
- let submitting = false;
- Component({
- properties: {
- visible: { type: Boolean, value: false },
- overlay: { type: Boolean, value: true },
- scene: { type: String, value: '' },
- cardno: { type: String, value: '' },
- phone: { type: String, value: '' },
- },
- data: {
- title: '完善信息',
- privacyContract: { agree: false, name: "《隐私政策》", show: false },
- loading: false,
- submitting: false,
- cardnoProps: { prefix: '', suffix: '', fill: '', length: 0 },
- phoneProps: { prefix: '', suffix: '', fill: '', length: 0 },
- },
- observers: {
- cardno(value: string) {
- if (!value) return;
- const length = 18;
- const tag = '*';
- if (!value.includes(tag)) value = value.padEnd(length, tag);
- const [_, prefix = '', fill = '', suffix = ''] = value.match(/(\d+)?(\*+)?(\d+)?/) || [];
- this.setData({ cardnoProps: { prefix, suffix, fill: '', length: fill.length === length ? 0 : fill.length } });
- if (this.data.cardnoProps.length) this.setData({ visible: true });
- },
- phone(value: string) {
- if (!value) return;
- const length = 11;
- const tag = '*';
- if (!value.includes(tag)) value = value.padEnd(length, tag);
- const [_, prefix = '', fill = '', suffix = ''] = value.match(/(\d+)?(\*+)?(\d+)?/) || [];
- this.setData({ phoneProps: { prefix, suffix, fill: '', length: fill.length === length ? 0 : fill.length } });
- if (this.data.phoneProps.length) this.setData({ visible: true });
- },
- scene(value: string) { this.init(value); }
- },
- methods: {
- async init(scene: string) {
- if (!scene) return;
- await login();
- const data = await getSceneRegisterMethod(scene);
- this.setData({ ...data });
- this.triggerEvent('loaded', { visible: this.data.visible, scene });
- if (data.patientId) this.register(data.patientId);
- },
- getPhoneNumberHandle(event: WechatMiniprogram.ButtonGetPhoneNumber) {
- this.setData({ loading: true });
- const { getPhoneNumber } = usePhoneNumber();
- getPhoneNumber(event, (value) => {
- this.setData({ "phoneProps.fill": value, loading: false })
- })
- },
- openPrivacyContract: openPrivacyContract,
- onPrivacySetting({ detail }: { detail: WechatMiniprogram.GetPrivacySettingSuccessCallbackResult; }) {
- this.setData({
- "privacyContract.name": detail.privacyContractName,
- // 'privacyContract.agree': !detail.needAuthorization,
- });
- },
- onAgreeChange(event: any) {
- const agree = event?.detail?.checked;
- if (agree) this.setData({ "privacyContract.show": true });
- else this.setData({ "privacyContract.agree": agree });
- },
- onAgree() {
- this.setData({ "privacyContract.agree": true });
- },
- onDisagree() {
- this.setData({ "privacyContract.agree": false });
- },
- register(patientId: string) {
- if (!patientId) return;
- wx.setStorageSync("patientId", patientId);
- this.setData({ 'visible': false });
- this.triggerEvent('register', { patientId });
- },
- async onSubmit(event: WechatMiniprogram.FormSubmit) {
- if (this.data.submitting || submitting) return;
- submitting = true;
- try {
- const data = { agemust: this.data.privacyContract.agree ? 'Y' : 'N', phone: '' } as any;
- if (data.agemust === "N") {
- this.setData({ "privacyContract.show": true });
- throw `请阅读并同意${this.data.privacyContract.name}`;
- }
- const phone = this.data.phoneProps;
- if (phone.length && phone.fill.length !== phone.length) throw `手机号码请补充完整`;
- else if (!phone.fill) throw `请获取手机号码`;
- else data.phone = `${phone.prefix}${phone.fill}${phone.suffix}`;
- const cardno = this.data.cardnoProps;
- if (cardno.length && cardno.fill.length !== cardno.length) throw `身份证号请补充完整`;
- else if (cardno.length) data.cardno = `${phone.prefix}${phone.fill}${phone.suffix}`;
- if (this.data.scene) data.scene = decodeURIComponent(this.data.scene);
- this.setData({ "submitting": submitting });
- const { patientId } = await setSceneRegisterMethod(data);
- this.register(patientId);
- } catch (error) {
- if (typeof error === 'string') this.triggerEvent('message', { type: 'warning', content: error });
- else if (error.errMsg) {
- this.triggerEvent('message', { type: 'error', content: error.errMsg });
- if (!this.data.phoneProps.length) this.setData({ "phoneProps.fill": '', loading: false });
- }
- }
- setTimeout(() => {
- submitting = false;
- this.setData({ "submitting": submitting });
- }, 100);
- },
- }
- })
|