123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- import { connect } from 'herculex';
- import { getCommunityInfo, getVisitReason, visitRegistration } from '../utils';
- import { storageAPI } from "../../../../core/utils/jsapi";
- import { prefixPagePath, dynamicPageName } from "../../../../core/utils";
- import dayjs from 'dayjs';
- const app = getApp();
- Component(connect({
- mapStateToProps: {
- userInfo: state => state.$global.userInfo,
- passport: state => state.$global.passport,
- alipayUid: state => state.$global.getIn(['userInfo', 'alipayUid'], ''),
- accessMode: state => state.accessMode,
- reasons: state => state.reasons || [],
- reasonsError: state => state.reasonsError || false,
- errorType: state => state.errorType
- }
- })({
- props: {
- componentData: {}
- },
- data: {
- imgSrcPrefix: app.globalData.imgSrcPrefix,
- reportExpiresTime: 60,
- footer: [{
- text: '重新获取'
- }],
- subject: '请选择来访原因',
- showSecondReason: false,
- currentIndex: -1,
- buttonDisable: true,
- activatedStep: 1,
- //
- form: {
- communityCode: '',
- reason: '',
- description: '',
- reasonText: '',
- reasonLogo: '',
- extendFileds: '',
- longitude: '',
- latitude: '',
- buildingName: '',
- unitName: '',
- houseName: '',
- roomInfo: ''
- }
- },
- didUpdate(prevProps, prevData) {
- const {
- reasons,
- currentIndex,
- passport,
- form
- } = this.data;
- if (prevData.passport && prevData.passport.roomInfo !== passport.roomInfo && currentIndex > -1 && reasons[currentIndex].showFloor && passport.roomInfo) {
- this.setData({
- buttonDisable: reasons[currentIndex].childContent.required && !form.description,
- 'form.roomInfo': passport.roomInfo,
- 'form.buildingName': passport.buildingName,
- 'form.unitName': passport.unitName,
- 'form.houseName': passport.houseName
- });
- }
- },
- async didMount() {
- // 获取当前页面的参数信息
- const query = getCurrentPages().pop().options || {};
- const {
- communityCode,
- communityName,
- sceneCode
- } = query; // 获取拜访列表
- const res = await getVisitReason(sceneCode);
- const {
- reasons
- } = res;
- this.commit({
- reasons,
- reasonsError: !reasons
- });
- const [, {
- data = {}
- }] = await storageAPI.getStorage({
- key: 'passport'
- });
- let passport = {}; // 本地没有匹配passport的情况下,根据页面信息更新passport
- if (communityCode && !communityName) {
- // 请求communityName相关信息
- const res3 = await getCommunityInfo(communityCode);
- if (res3) {
- passport = { ...passport,
- ...res3,
- sceneCode
- };
- }
- } else {
- passport = {
- communityCode,
- communityName,
- sceneCode
- };
- }
- if (!communityCode && !this.data.passport.communityCode) {
- this.commit({
- errorType: 'NOCOMMUNITY',
- errorMsg: '小区不存在',
- errorBrief: '请扫描正确的二维码'
- });
- return;
- }
- if (!communityCode) return;
- if (data && !this.data.errorType) {
- passport = { ...data,
- ...passport
- }; // 检查本地passport是否过期, 没过期跳转到第三页面
- const reportExpiresTime = parseInt(this.props.componentData.componentExtInfo.reportExpiresTime || this.data.reportExpiresTime);
- if (passport.reason && passport.visitTime) {
- const nowTime = dayjs();
- const isReportExpires = nowTime.diff(dayjs(passport.visitTime), 'second') > reportExpiresTime;
- if (!isReportExpires || data.communityCode === communityCode) {
- this.commit('$global:updateState', {
- passport
- });
- return my.navigateTo({
- url: `${prefixPagePath}/${dynamicPageName}/index?pageCode=visitRegistrationPage`
- });
- } else {
- // 直接发起请求
- const formData = { ...passport,
- visitTime: dayjs().format()
- };
- const [err, res2 = {}] = await visitRegistration(formData);
- if (err || res2.result !== 'success') {
- const {
- communityCode: communityCode2,
- communityName: communityName2,
- sceneCode: sceneCode2
- } = passport;
- const jumpUrl = `${prefixPagePath}/${dynamicPageName}/index?pageCode=visitReasonPage&communityCode=${communityCode2}&communityName=${communityName2}&sceneCode=${sceneCode2}`;
- this.commit({
- errorType: 'SYSTEM_BUSY',
- errorMsg: '系统繁忙',
- errorBrief: '请稍后再试',
- operations: [{
- btnText: '重试',
- handleName: 'reload',
- url: jumpUrl
- }]
- });
- return;
- } // 更新passport信息,并跳转到第三页面
- const newPassport = { ...passport,
- qrCodeUrl: res2.qrCodeUrl || ''
- };
- this.commit('$global:updateState', {
- passport: newPassport
- }); // 更新storage
- await storageAPI.setStorage({
- key: 'passport',
- data: newPassport
- });
- return my.navigateTo({
- url: `${prefixPagePath}/${dynamicPageName}/index?pageCode=visitRegistrationPage`,
- success: () => {
- this.handleReset();
- }
- });
- }
- }
- }
- this.commit('$global:updateState', {
- passport
- });
- },
- methods: {
- // checkCertified() {
- // if (this.data.accessMode === 'realName' && this.data.userInfo.isCertified === 'F') {
- // this.commit({
- // errorType: 'NOCERTIFIED',
- // errorMsg: '还未完成实名认证',
- // errorBrief: '请先完成实名认证',
- // operations: [{ btnText: '去认证', handleName: 'jumpToAlipayPage', url: 'https://custweb.alipay.com/certify/personal/LIFE_PAY' }],
- // });
- // }
- // },
- async refreshReason() {
- // 获取当前页面的参数信息
- const query = getCurrentPages().pop().options || {};
- const {
- sceneCode
- } = query; // 获取拜访列表
- const res = await getVisitReason(sceneCode);
- const {
- reasons
- } = res;
- this.commit({
- reasons,
- reasonsError: !reasons
- });
- },
- onStepsItemClick() {
- const {
- passport
- } = this.data;
- const newPassport = { ...passport,
- roomInfo: ''
- };
- this.commit('$global:updateState', {
- passport: newPassport
- });
- my.navigateTo({
- url: `/antbuilder/industry/scanpass/pages/select-room/index?communityCode=${passport.communityCode}&communityName=${passport.communityName}&sceneCode=${passport.sceneCode}`
- });
- },
- // 选择来访原因
- handleReasons(e) {
- const {
- dataset
- } = e.target;
- const childContent = this.data.reasons[dataset.index].childContent || {};
- const buttonDisable = childContent.required || false; // eslint-disable-next-line no-mixed-operators
- const showSecondReason = childContent.childContentType === 'textarea' && childContent || childContent.childContentDatasource && childContent.childContentDatasource.length > 0;
- this.setData({
- 'form.reason': dataset.code,
- 'form.reasonText': dataset.title,
- currentIndex: dataset.index,
- showSecondReason,
- buttonDisable
- });
- },
- // 选择具体原因
- handleSecondReason(e) {
- const value = e.target.dataset.value || e.detail.value;
- const {
- reasons,
- currentIndex,
- form
- } = this.data;
- let buttonDisable = reasons[currentIndex].childContent.required && !value;
- if (reasons[currentIndex].showFloor && !form.roomInfo) {
- buttonDisable = true;
- }
- const reasonText = reasons[currentIndex].name + (e.target.dataset.title ? `-${e.target.dataset.title}` : '');
- const reasonLogo = e.target.dataset.logo;
- this.setData({
- 'form.description': value,
- 'form.reasonText': reasonText,
- 'form.reasonLogo': reasonLogo,
- buttonDisable
- });
- },
- // 提交登记
- async onSubmit() {
- const {
- form,
- passport = {},
- alipayUid
- } = this.data;
- const formData = {
- communityCode: passport.communityCode,
- sceneCode: passport.sceneCode || '',
- reason: form.reason,
- description: form.description,
- extendFileds: form.extendFileds || '',
- roomInfo: form.roomInfo,
- buildingName: form.buildingName,
- unitName: form.unitName,
- houseName: form.houseName,
- longitude: app.globalData.regionData.longitude,
- latitude: app.globalData.regionData.latitude
- };
- const [err, res = {}] = await visitRegistration(formData);
- if (err || res.result !== 'success') {
- const {
- communityCode,
- communityName,
- sceneCode
- } = passport;
- const jumpUrl = `${prefixPagePath}/${dynamicPageName}/index?pageCode=visitReasonPage&communityCode=${communityCode}&communityName=${communityName}&sceneCode=${sceneCode}`;
- this.commit({
- errorType: 'SYSTEM_BUSY',
- errorMsg: '系统繁忙',
- errorBrief: '请稍后再试',
- operations: [{
- btnText: '重试',
- handleName: 'reload',
- url: jumpUrl
- }]
- });
- return;
- } // 更新passport信息,并跳转到第三页面
- const newPassport = { ...passport,
- alipayUid,
- reason: form.reason,
- description: form.description,
- reasonText: form.reasonText,
- reasonLogo: form.reasonLogo,
- qrCodeUrl: res.qrCodeUrl || '',
- visitTime: dayjs().format()
- };
- this.commit('$global:updateState', {
- passport: newPassport
- }); // 更新storage
- await storageAPI.setStorage({
- key: 'passport',
- data: newPassport
- });
- my.navigateTo({
- url: `${prefixPagePath}/${dynamicPageName}/index?pageCode=visitRegistrationPage`,
- success: () => {
- this.handleReset();
- }
- });
- },
- // 重置表单
- handleReset() {
- this.setData({
- currentIndex: -1,
- showSecondReason: false,
- buttonDisable: true,
- activatedStep: 1,
- 'form.reason': '',
- 'form.description': '',
- 'form.reasonText': '',
- 'form.reasonLogo': '',
- 'form.roomInfo': '',
- 'form.buildingName': '',
- 'form.unitName': '',
- 'form.houseName': ''
- });
- }
- }
- }));
|