123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489 |
- import { connect } from 'herculex';
- import { checkPhone, checkIdCard } from './check';
- import { editCard, createCard, createPatient, patientUpdate, getPatientList, getLoginUserCardList } from './service';
- import doLogin from '../../utils/doLogin';
- import history from '../../utils/history';
- import loadOcr from '../../utils/loadOcr';
- import getEncryptStr from '../../utils/getEncryptStr';
- import { reportCmPV_YL } from '../../utils/cloudMonitorHelper';
- const caIcon = 'https://gw.alipayobjects.com/mdn/rms_373ab8/afts/img/A*w6MrS5tmnFAAAAAAAAAAAAAAARQnAQ';
- const bookIcon = 'https://gw.alipayobjects.com/mdn/rms_373ab8/afts/img/A*nta9QpHSTvkAAAAAAAAAAAAAARQnAQ';
- const getDefaultForm = () => ({
- id: '',
- name: '',
- sex: '男',
- idCardNo: '',
- relationShip: '',
- phoneNumber: '',
- idCardType: '身份证',
- /* 新增卡字段 */
- type: '',
- cardNum: '',
- defaultCard: '',
- phoneRsa: '',
- fullNameRsa: '',
- idcardNoRsa: ''
- });
- const copy = data => JSON.parse(JSON.stringify(data));
- Component(connect({
- mapStateToProps: {
- userInfo: ({
- $global
- }) => $global.userInfo || {}
- }
- })({
- props: {
- componentData: {}
- },
- data: {
- caIcon,
- bookIcon,
- show: false,
- routeState: null,
- medicCardsList: [],
- isAuthSuccess: false,
- editForm: getDefaultForm(),
- genders: [{
- label: '男',
- value: '男'
- }, {
- label: '女',
- value: '女'
- }],
- certTypes: [{
- id: 1,
- name: '身份证'
- }]
- },
- didMount() {
- const {
- componentData
- } = this.props;
- const {
- editForm,
- routeState
- } = componentData || {};
- const state = {};
- if (routeState) {
- state.routeState = routeState;
- }
- /* 编辑 */
- if (editForm) {
- state.editForm = this.initData(editForm);
- }
- this.setData(state);
- /* 埋点服务预警 */
- reportCmPV_YL({
- title: '在线建档'
- });
- },
- methods: {
- isEditCard() {
- const {
- $routeConfig
- } = this.$page;
- const {
- query
- } = $routeConfig;
- return query.editType === 'card';
- },
- initData(data) {
- const _data = {};
- const defaultData = getDefaultForm();
- Object.keys(defaultData).forEach(key => {
- const value = data[key] || defaultData[key];
- if (value) _data[key] = value;
- });
- return _data;
- },
- onClosePopup() {
- this.setData({
- show: false
- });
- },
- onTap() {
- this.onClosePopup();
- },
- async onRelationChange({
- id,
- name
- }) {
- let isAuthSuccess = false;
- const {
- editForm: _editForm
- } = this.data;
- let editForm = copy(_editForm);
- /* 如果是从本人切换到其他关系上的需要清空数据 */
- if (_editForm.relationShip === '本人' && id !== 1) {
- editForm = getDefaultForm();
- }
- editForm.relationShip = name;
- /* 如果为本人,唤起授权 */
- if (id === 1) {
- const {
- userInfo
- } = this.data; // 判断用户是否已经登陆
- if (userInfo.isLogin) {
- isAuthSuccess = true;
- } else {
- isAuthSuccess = await doLogin.call(this, {
- scopes: 'auth_user'
- });
- }
- if (isAuthSuccess) {
- const {
- phone,
- gender = 'm',
- idCardNo,
- fullName,
- phoneRsa,
- fullNameRsa,
- idcardNoRsa
- } = this.data.userInfo;
- editForm.name = fullName;
- editForm.idCardNo = idCardNo;
- editForm.phoneNumber = phone;
- editForm.phoneRsa = phoneRsa;
- editForm.fullNameRsa = fullNameRsa;
- editForm.idcardNoRsa = idcardNoRsa;
- editForm.sex = gender === 'm' ? '男' : '女';
- }
- }
- this.setData({
- isAuthSuccess,
- editForm: { ...editForm
- }
- });
- },
- /* 一键清除 */
- clearInput(value, key) {
- // eslint-disable-next-line no-param-reassign
- value = value || '';
- const {
- editForm
- } = this.data;
- const oldValue = editForm[key] || '';
- return oldValue.indexOf('*') < 0 ? value : '';
- },
- /* 输入姓名 */
- onNameInput({
- detail
- }) {
- this.setData({
- 'editForm.name': this.clearInput(detail.value, 'name')
- });
- },
- /* 选择性别 */
- onSexChange(item) {
- this.setData({
- 'editForm.sex': item
- });
- },
- /* 选择证件类别 */
- onCertTypeChange({
- detail
- }) {
- const {
- value
- } = detail;
- const {
- certTypes = []
- } = this.data;
- const {
- name = ''
- } = certTypes[value];
- this.setData({
- 'editForm.certTypes': name
- });
- },
- /* 输入身份证 */
- onCardNoInput({
- detail
- }) {
- this.setData({
- 'editForm.idCardNo': this.clearInput(detail.value, 'idCardNo')
- });
- },
- /* 输入电话号码 */
- onPhoneInput({
- detail
- }) {
- this.setData({
- 'editForm.phoneNumber': this.clearInput(detail.value, 'phoneNumber')
- });
- },
- async onCardChange({
- cardNum
- }) {
- this.resolveFn && this.resolveFn(cardNum);
- },
- showTip(msg) {
- my.showToast({
- content: msg,
- duration: 3000
- });
- return false;
- },
- showSuccess(msg) {
- my.showToast({
- type: 'success',
- content: msg,
- duration: 1500
- });
- },
- showError(msg) {
- my.showToast({
- type: 'fail',
- content: msg,
- duration: 1500
- });
- },
- vailForm(form) {
- const {
- idCardNo = '',
- phoneNumber = ''
- } = form;
- const {
- sex,
- name,
- idCardType,
- relationShip
- } = form;
- const rest = {
- sex,
- name,
- idCardType,
- relationShip
- };
- const values = Object.values(rest);
- if (values.filter(v => !!v).length !== values.length) {
- return this.showTip('将页面上的信息填写完整!');
- }
- if (!checkIdCard(idCardNo)) {
- return this.showTip('身份证格式不正确!');
- }
- if (!checkPhone(phoneNumber)) {
- return this.showTip('手机号格式不正确!');
- }
- return true;
- },
- /*
- * 获取非脱敏的字段
- * */
- restForm(form) {
- const _form = {};
- Object.keys(form).forEach(key => {
- const value = form[key] || '';
- if (value.indexOf('*') < 0) _form[key] = value;
- });
- return _form;
- },
- // 保存就诊人
- async patientSave() {
- const {
- editForm,
- isAuthSuccess
- } = this.data;
- /* 如果不是本人,校验字段 */
- if (!isAuthSuccess) {
- if (!this.vailForm(editForm)) return;
- }
- /* 获取非脱敏的字段 */
- const form = this.restForm(editForm);
- /* 不是编辑的情况,才需要选择就诊卡 */
- if (!editForm.id && !this.isEditCard()) {
- form.bindCardNum = await this.onCheckCard(form);
- }
- await this.onSubmit(this.initData(form));
- },
- /* 提交 */
- async onSubmit(_form) {
- const {
- routeState
- } = this.data;
- /* 加密数据 */
- const form = { ..._form,
- idCardNo: await getEncryptStr(_form.idCardNo),
- phoneNumber: await getEncryptStr(_form.phoneNumber)
- };
- let msg = '';
- try {
- my.showLoading();
- const isEditCard = this.isEditCard();
- /* 如果有id 或者绑定的卡id为编辑 */
- if (form.id || form.cardNum) {
- if (isEditCard) {
- msg = '就诊卡编辑成功';
- await editCard(form);
- } else {
- msg = '就诊人编辑成功';
- await patientUpdate(form);
- }
- } else if (isEditCard) {
- msg = '就诊卡添加成功';
- await createCard(form);
- } else {
- msg = '就诊人添加成功';
- await createPatient(form);
- }
- this.goNav(routeState);
- this.showSuccess(msg);
- } catch (e) {
- this.showError(e.msg);
- }
- my.hideLoading();
- },
- goNav(state) {
- if (state) {
- const {
- routeType = 'push',
- ...rest
- } = state;
- /* routeType push/replace */
- if (history[routeType]) {
- history[routeType](rest);
- }
- } else {
- my.navigateBack();
- }
- },
- /* 获取就诊卡 */
- async onCheckCard() {
- const {
- editForm,
- isAuthSuccess
- } = this.data;
- my.showLoading();
- const {
- idCardNo
- } = editForm;
- return new Promise(async resolve => {
- const medicCardsList = isAuthSuccess ? await getLoginUserCardList() : await this.getCardByIdCardNo(idCardNo);
- /* 如果卡大于一张 */
- if (medicCardsList.length <= 1) {
- return resolve('');
- }
- my.hideLoading();
- this.resolveFn = resolve;
- this.setData({
- show: true,
- medicCardsList
- });
- });
- },
- /* 根据idCardNo查询某个就诊人的就诊卡 */
- async getCardByIdCardNo(idCardNo) {
- const value = await getEncryptStr(idCardNo);
- const list = await getPatientList({
- idCardNo: value
- });
- if (!list.length) return [];
- const {
- medicCards = []
- } = list[0];
- return medicCards;
- },
- choosePhoneContact() {
- my.choosePhoneContact({
- success: ({
- mobile
- }) => {
- this.setData({
- 'editForm.phoneNumber': mobile.replace(/(\s|-|\+)/g, '')
- });
- }
- });
- },
- async onLaunchOcr() {
- const {
- readIDCard,
- IDCardTypes
- } = await loadOcr();
- readIDCard({
- bizId: 'ocr_01',
- type: IDCardTypes.FRONT
- }).then(res => {
- if (res.error) {
- return Promise.reject(res.error);
- }
- const {
- num: {
- data: idCardNo
- },
- name: {
- data: realName
- },
- sex: {
- data: userSex
- }
- } = res.data;
- this.setData({
- 'editForm.sex': userSex,
- 'editForm.name': realName,
- 'editForm.idCardNo': idCardNo
- });
- }).catch(e => {
- this.showTip(e.message || '识别身份证失败');
- });
- }
- }
- }));
|