diff --git a/hooks/useUser.js b/hooks/useUser.js index 97aa6a4..d1524dd 100644 --- a/hooks/useUser.js +++ b/hooks/useUser.js @@ -5,10 +5,10 @@ export default function useUser() { const store = userStore(); const { drugStore, familyProfile, logined, myProfile, patientList, storeId, userInfo } = storeToRefs(store); - const { getAuthCode, getFamilyProfile, getStore, loadPatientList, login, loginout, getProfileData } = store; + const { getAuthCode, getFamilyProfile, getStore, loadPatientList, login, loginout, getProfileData, setTemporaryPatient } = store; return { drugStore, familyProfile, logined, myProfile, patientList, storeId, userInfo, - getAuthCode, getFamilyProfile, getStore, loadPatientList, login, loginout, getProfileData + getAuthCode, getFamilyProfile, getStore, loadPatientList, login, loginout, getProfileData, setTemporaryPatient }; // const { userInfo, logined, maskName, maskMobile, maskCertNo, cards, card, idCardInfo, storeId, drugStore, getFamilyProfile, familyProfile } = storeToRefs(store); // const { login, loginout, getAuthCode, getStore } = store; diff --git a/package.json b/package.json index 8a1710d..fc88523 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ "title": "【开发】支付宝", "env": { "UNI_PLATFORM": "mp-alipay", - "API_BASE_URL": "http://192.168.170.62:8080", + "API_BASE_URL": "http://192.168.31.146:8080", "CORP_ID": "4G7H8J2K9L0M1N3P5Q6R7S8T9U", "APP_ID": "2021004129669493", "ORDER_SOURCE": "ALIPAY_MINI", diff --git a/pages/consult/index.vue b/pages/consult/index.vue index dd6182b..8b44ebc 100644 --- a/pages/consult/index.vue +++ b/pages/consult/index.vue @@ -3,7 +3,8 @@ 选择就诊人 - + @@ -49,7 +50,7 @@ import { computed, ref, watch } from "vue"; import { onLoad, onShow } from "@dcloudio/uni-app"; import useElder from "@/hooks/useElder"; import useUser from "@/hooks/useUser"; -import { bindHisPatient, getHisCustomer } from "@/utils/api"; +import { bindHisPatient, getHisCustomer, getScannedCard } from "@/utils/api"; import { set } from "@/utils/cache"; import { toast } from "@/utils/widget"; @@ -64,6 +65,7 @@ const { myProfile, familyProfile, getProfileData, + storeId, patientList: storePatientList, loadPatientList, } = useUser(); @@ -76,11 +78,14 @@ const titleMap = { const selectedPatientId = ref(""); const preferredCertNo = ref(""); const feeType = ref(""); +const scanning = ref(false); const patientList = computed(() => { - const list = [...storePatientList.value].sort((a, b) => { - return new Date(a.createTime).getTime() - new Date(b.createTime).getTime(); - }); + const list = storePatientList.value + .filter(patient => !patient.isTemporary) + .sort((a, b) => { + return new Date(a.createTime).getTime() - new Date(b.createTime).getTime(); + }); return feeType.value === "YB" ? list.filter(patient => patient.isSelf) : list; }); @@ -128,6 +133,49 @@ function selectDefaultPatient() { watch(patientList, selectDefaultPatient, { immediate: true }); +function scanCode() { + return new Promise((resolve, reject) => { + uni.scanCode({ + onlyFromCamera: true, + scanType: ["qrCode"], + success: resolve, + fail: reject, + }); + }); +} + +async function scanInsuranceCode() { + if (scanning.value) return; + scanning.value = true; + try { + const scanResult = await scanCode(); + const id = typeof scanResult.result === "string" ? scanResult.result.trim() : ""; + if (!/^[a-f\d]{24}$/i.test(id)) { + toast("医保二维码无效"); + return; + } + const res = await getScannedCard({ id, storeId: storeId.value }); + if (!res || !res.success || !res.data) { + toast((res && res.message) || "获取医保信息失败"); + return; + } + if (!res.data.Name || !res.data.IDNum || !res.data.CardNum || !res.data.CardIDCode) { + toast("医保信息不完整,请重新读卡"); + return; + } + set("current-scanned-card", res.data, 300); + uni.navigateTo({ + url: `/pages/member/detail?type=ybQrcode&feeType=${feeType.value}`, + }); + } catch (error) { + if (!error || !/cancel/i.test(error.errMsg || error.message || "")) { + toast(error.message || error.errMsg || error || "扫码失败"); + } + } finally { + scanning.value = false; + } +} + async function nextStep() { if (!currentProfile.value) { toast("请选择就诊人"); diff --git a/pages/home/home.vue b/pages/home/home.vue index 31b12cc..baa092d 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -56,6 +56,8 @@ + @@ -69,6 +71,7 @@ import ybPlugin from "@/utils/insurance-plugin"; import fullPage from "@/components/full-page.vue"; import confirmPopup from "./confirm-popup.vue"; +import storePopup from "./store-popup.vue"; const mainMenuList = [ { @@ -106,13 +109,14 @@ const menuList = [ }, ]; -const { userInfo, logined, login, loginout, getAuthCode } = useUser(); +const { userInfo, logined, login, loginout, getAuthCode, drugStore, getStore } = useUser(); const statusBarHeight = ref(20); const count = ref({ rxUnpay: 0 }); const confirmVisible = ref(false); const confirmResolve = ref(null); const confirmReject = ref(null); const feeType = ref(""); +const visible = ref(false) function goBack() { uni.navigateBack(); @@ -137,14 +141,19 @@ async function handleMainMenuClick(item) { confirmVisible.value = true; } -function handleConfirmYes() { +async function handleConfirmYes() { confirmVisible.value = false; - confirmAuth(); + await getStore(); + visible.value = true if (confirmResolve.value) { confirmResolve.value(); cleanupConfirmPromise(); } } +function confirmStoreInfo() { + visible.value = false + confirmAuth(); +} function handleConfirmNo() { confirmVisible.value = false; diff --git a/pages/member/detail.vue b/pages/member/detail.vue index 732465e..781178a 100644 --- a/pages/member/detail.vue +++ b/pages/member/detail.vue @@ -9,8 +9,7 @@