diff --git a/.env.development b/.env.development index 70e7c7a..9e539d9 100644 --- a/.env.development +++ b/.env.development @@ -1,4 +1,5 @@ MP_API_BASE_URL=https://patient.youcan365.com MP_CACHE_PREFIX=development MP_WX_APP_ID=wx6ee11733526b4f04 +MP_SHARE_WX_APP_VERSION=2 MP_TIM_SDK_APP_ID=1600126296 \ No newline at end of file diff --git a/.env.production b/.env.production index d08d18a..9161c39 100644 --- a/.env.production +++ b/.env.production @@ -2,4 +2,5 @@ MP_API_BASE_URL=https://ykt.youcan365.com MP_CACHE_PREFIX=production MP_WX_APP_ID=wx6ee11733526b4f04 MP_TIM_SDK_APP_ID=1600136080 -MP_CORP_ID=wpLgjyawAA8N0gWmXgyJq8wpjGcOT7fg \ No newline at end of file +MP_CORP_ID=wpLgjyawAA8N0gWmXgyJq8wpjGcOT7fg +MP_VERIFY_IM_CORP_ID=YES \ No newline at end of file diff --git a/App.vue b/App.vue index d9ca4e1..21114c2 100644 --- a/App.vue +++ b/App.vue @@ -196,6 +196,10 @@ page { padding-top: 10rpx; } +.pt-12 { + padding-top: 24rpx; +} + .pt-15 { padding-top: 30rpx; } @@ -251,6 +255,10 @@ page { margin-bottom: 20rpx; } +.mt-5 { + margin-top: 10rpx; +} + .mt-10 { margin-top: 20rpx; } @@ -326,19 +334,19 @@ page { } .text-sm { - font-size: 24rpx; + font-size: 26rpx; } .text-base { - font-size: 28rpx; + font-size: 30rpx; } .text-lg { - font-size: 32rpx; + font-size: 34rpx; } .text-xl { - font-size: 36rpx; + font-size: 38rpx; } .leading-normal { diff --git a/components/form-template/cell-style.css b/components/form-template/cell-style.css index 999e2e2..52e63c9 100644 --- a/components/form-template/cell-style.css +++ b/components/form-template/cell-style.css @@ -16,11 +16,11 @@ display: flex; align-items: center; text-align: right; - font-size: 28rpx; + font-size: 30rpx; } .form__placeholder { - font-size: 28rpx; + font-size: 30rpx; color: #666; } @@ -44,7 +44,7 @@ align-items: center; padding: 24rpx 30rpx; border-bottom: 1px solid #eee; - font-size: 28rpx; + font-size: 30rpx; } .form-row__label { diff --git a/components/form-template/form-cell/form-input.vue b/components/form-template/form-cell/form-input.vue index 80321eb..07267a4 100644 --- a/components/form-template/form-cell/form-input.vue +++ b/components/form-template/form-cell/form-input.vue @@ -61,7 +61,7 @@ function change(e) { .form-input { flex-grow: 1; - font-size: 28rpx; + font-size: 30rpx; } .appendText { diff --git a/components/form-template/form-cell/form-positive-find.vue b/components/form-template/form-cell/form-positive-find.vue new file mode 100644 index 0000000..ce04d01 --- /dev/null +++ b/components/form-template/form-cell/form-positive-find.vue @@ -0,0 +1,89 @@ + + + + \ No newline at end of file diff --git a/components/form-template/form-cell/form-textarea.vue b/components/form-template/form-cell/form-textarea.vue index 3b6b40b..762bcb2 100644 --- a/components/form-template/form-cell/form-textarea.vue +++ b/components/form-template/form-cell/form-textarea.vue @@ -66,12 +66,12 @@ function change(e) { .textarea-row { padding: 24rpx 30rpx; border-bottom: 1px solid #eee; - font-size: 28rpx; + font-size: 30rpx; } .form-textarea { width: 100%; - font-size: 28rpx; + font-size: 30rpx; border: 1px solid #eee; padding: 20rpx; border-radius: 8rpx; @@ -82,6 +82,6 @@ function change(e) { padding-top: 20rpx; text-align: right; color: #666; - font-size: 24rpx; + font-size: 26rpx; } \ No newline at end of file diff --git a/components/form-template/form-cell/form-upload.vue b/components/form-template/form-cell/form-upload.vue index 2fdcb00..1c559e5 100644 --- a/components/form-template/form-cell/form-upload.vue +++ b/components/form-template/form-cell/form-upload.vue @@ -6,11 +6,12 @@ + - + @@ -48,10 +49,73 @@ const files = computed(() => value.value.map(i => { url: i.url, name: i.name, type: i.type, - isImage: /image/i.test(i.type) + isImage: /image/i.test(i.type), + isPdf: /application\/pdf/i.test(i.type), } })) +function chooseType() { + uni.showActionSheet({ + itemList: ['图片', 'PDF'], + success: (res) => { + if (res.tapIndex === 0) { + addImage() + } else if (res.tapIndex === 1) { + addPdf() + } + } + }) +} + +function addPdf() { + wx.chooseMessageFile({ + count: 1, // 最多选择1个文件 + type: 'all', // 所有类型文件 + success: async (res) => { + const file = res.tempFiles[0]; + const { path, name, size } = file; + const type = checkFileValid(name, size); + // 检查文件类型和大小 + if (!type) return; + loading(); + const result = await upload(path); + hideLoading(); + if (result) { + change([...value.value, { url: result, type }]) + } else { + toast('上传失败') + } + }, + fail: (err) => { + if (/cancel/i.test(err.errMsg)) { + // toast('用户取消选择文件') + } else { + toast('上传失败') + } + } + }) +} + +function checkFileValid(fileName, fileSize) { + // 获取文件扩展名 + const ext = fileName.split('.').pop().toLowerCase(); + // 文件大小限制 (10MB) + const maxSize = 10 * 1024 * 1024; + if (fileSize > maxSize) { + toast('文件大小不能超过10MB') + return false; + } + + if (['jpg', 'jpeg', 'png'].includes(ext)) { + return 'image/png' + } + if (ext === 'pdf') { + return 'application/pdf' + } + toast('仅支持图片或PDF') + return false; +} + function addImage() { uni.chooseImage({ count: 1, @@ -64,6 +128,13 @@ function addImage() { } else { toast('上传失败') } + }, + fail: (err) => { + if (/cancel/i.test(err.errMsg)) { + // toast('用户取消选择文件') + } else { + toast('上传失败') + } } }) } @@ -97,7 +168,7 @@ function remove(idx) { .textarea-row { padding: 24rpx 30rpx; border-bottom: 1px solid #eee; - font-size: 28rpx; + font-size: 30rpx; } diff --git a/components/form-template/form-cell/index.vue b/components/form-template/form-cell/index.vue index e00418d..d4b9b87 100644 --- a/components/form-template/form-cell/index.vue +++ b/components/form-template/form-cell/index.vue @@ -1,5 +1,5 @@ + + diff --git a/pages/archive/verify-popup.vue b/pages/archive/verify-popup.vue index fd79241..bd5607e 100644 --- a/pages/archive/verify-popup.vue +++ b/pages/archive/verify-popup.vue @@ -95,7 +95,7 @@ watch(codes, n => { .code-cell { width: 120rpx; height: 120rpx; - font-size: 52rpx; + font-size: 54rpx; } .code-input { diff --git a/pages/article/article-cate-list.vue b/pages/article/article-cate-list.vue index ba03acc..ed8f0d5 100644 --- a/pages/article/article-cate-list.vue +++ b/pages/article/article-cate-list.vue @@ -397,15 +397,15 @@ onReachBottom(() => { } .text-xs { - font-size: 22rpx; + font-size: 24rpx; } .text-sm { - font-size: 28rpx; + font-size: 30rpx; } .text-base { - font-size: 32rpx; + font-size: 34rpx; } .font-bold { @@ -514,7 +514,7 @@ onReachBottom(() => { .article-title { color: #333333; - font-size: 32rpx; + font-size: 34rpx; font-weight: 500; line-height: normal; } @@ -523,7 +523,7 @@ onReachBottom(() => { max-width: 402rpx; color: #666666; text-align: justify; - font-size: 28rpx; + font-size: 30rpx; font-weight: 400; line-height: normal; } @@ -548,7 +548,7 @@ onReachBottom(() => { .loading-text { margin-top: 20rpx; - font-size: 28rpx; + font-size: 30rpx; color: #999; } @@ -558,7 +558,7 @@ onReachBottom(() => { align-items: center; justify-content: center; padding: 30rpx 0; - font-size: 24rpx; + font-size: 26rpx; color: #999; gap: 10rpx; } diff --git a/pages/article/article-detail.vue b/pages/article/article-detail.vue index a6f58fe..dfcd655 100644 --- a/pages/article/article-detail.vue +++ b/pages/article/article-detail.vue @@ -30,10 +30,13 @@ import { onLoad } from "@dcloudio/uni-app"; import FullPage from "@/components/full-page.vue"; import api from "@/utils/api.js"; +import { set } from "@/utils/cache"; +import { toast } from "@/utils/widget.js"; import { ref } from "vue"; import { storeToRefs } from "pinia"; import useAccountStore from "@/store/account.js"; const { account } = storeToRefs(useAccountStore()); +const { login } = useAccountStore() const loading = ref(true); const error = ref(""); const articleData = ref({ @@ -102,6 +105,7 @@ const loadArticle = async () => { if (res.success && res.data) { // 格式化日期 let date = ""; + if (res.data.createTime) { const d = new Date(res.data.createTime); const year = d.getFullYear(); @@ -115,6 +119,34 @@ const loadArticle = async () => { content: processRichTextContent(res.data.content || ""), date: date, }; + if (isWechatChannels(res.data)) { + uni.openChannelsActivity({ + finderUserName: res.data.wechatChannels.finderUserName, + feedId: res.data.wechatChannels.feedId, + fail: err => { + const errMsg = err.errMsg || ''; + if (/cancel/i.test(errMsg)) { + return + } + toast(`打开视频号失败:${errMsg}`) + } + }) + return + } + // if (res.data.link) { + // uni.openOfficialAccountArticle({ + // url: res.data.link, + // fail: err => { + // const errMsg = err.errMsg || ''; + // console.error(errMsg) + // console.log(errMsg) + // if (/cancel/i.test(errMsg)) { + // return + // } + // toast(`打开文章失败:${errMsg}`) + // } + // }) + // } } else { error.value = res.message || "加载文章失败"; } @@ -126,11 +158,41 @@ const loadArticle = async () => { } }; +function isWechatChannels(item) { + return item?.wechatChannels?.finderUserName && item?.wechatChannels?.feedId; +} + +async function handleSend(sendId) { + try { + await login(); + markArticleRead(sendId); + authToTeam(sendId) + } catch (e) { + console.log(e) + } +} + +// 通过发送记录 将微信用户关联到团队 +async function authToTeam(sendId) { + const res = await api("relateWechatAccountWithTeam", { + sendId, + openid: account.value?.openid, + unionid: account.value?.unionid, + appid: account.value?.appId, + }) + if (res.success) { + set('home-invite-team-info', { teamId: res.data }) + } +} + + onLoad((options) => { corpId.value = options.corpId; if (options.id) { articleId = options.id; - markArticleRead(options.sendId || ''); + if (options.sendId) { + handleSend(options.sendId) + } loadArticle(); } else { error.value = "文章信息不完整"; @@ -158,12 +220,12 @@ onLoad((options) => { .loading-text { margin-top: 20rpx; - font-size: 28rpx; + font-size: 30rpx; color: #999; } .error-text { - font-size: 28rpx; + font-size: 30rpx; color: #999; margin-bottom: 30rpx; text-align: center; @@ -175,7 +237,7 @@ onLoad((options) => { color: #fff; border: none; border-radius: 8rpx; - font-size: 28rpx; + font-size: 30rpx; } .article-content { @@ -189,7 +251,7 @@ onLoad((options) => { .article-title { display: block; - font-size: 36rpx; + font-size: 38rpx; font-weight: bold; color: #333; line-height: 1.6; @@ -198,7 +260,7 @@ onLoad((options) => { .article-date { display: block; - font-size: 24rpx; + font-size: 26rpx; color: #999; } diff --git a/pages/article/article-list.vue b/pages/article/article-list.vue index 91a6cb3..19f5e9b 100644 --- a/pages/article/article-list.vue +++ b/pages/article/article-list.vue @@ -84,6 +84,7 @@ import { storeToRefs } from "pinia"; import dayjs from "dayjs"; import api from "@/utils/api.js"; import useAccountStore from "@/store/account.js"; +import { toast } from "@/utils/widget.js"; import fullPage from "@/components/full-page.vue"; import EmptyData from "@/components/empty-data.vue"; @@ -138,6 +139,7 @@ const mapRowToView = (row) => { person: row?.customer?.name || "", team: row?.team?.name || "-", time: sendTime, + articleInfo: row?.articleInfo, }; }; @@ -196,8 +198,50 @@ const loadArticleList = async (reset = false) => { function goToDetail(item) { if (!item?.articleId) return; + // if (isWechatChannels(item.articleInfo)) { + // uni.openChannelsActivity({ + // finderUserName: item.articleInfo.wechatChannels.finderUserName, + // feedId: item.articleInfo.wechatChannels.feedId, + // success: () => { + // markArticleRead(item._id, item.articleId); + // }, + // fail: err => { + // const errMsg = err.errMsg || ''; + // if (/cancel/i.test(errMsg)) { + // return + // } + // toast(`打开视频号失败:${errMsg}`) + // } + // }) + // return + // } uni.navigateTo({ url: `/pages/article/article-detail?sendId=${item._id}&id=${item.articleId}&corpId=${corpId.value}` }); } + +function isWechatChannels(item) { + return item?.wechatChannels?.finderUserName && item?.wechatChannels?.feedId; +} + +async function markArticleRead(sendId, articleId) { + const unionid = account.value?.unionid; + if (!unionid || !articleId) return; + try { + const { success } = await api( + "addArticleReadRecord", + { corpId: corpId.value, articleId, unionid, sendId }, + false + ); + if (success) { + const idx = articles.value.findIndex(i => i._id === sendId); + if (idx !== -1) { + articles.value[idx].status = "YES"; + } + } + } catch (err) { + console.warn("markArticleRead failed:", err?.message || err); + } +}; + onLoad(opts => { corpId.value = opts.corpId; teamId.value = opts.teamId; @@ -350,15 +394,15 @@ onReachBottom(() => { } .text-xs { - font-size: 22rpx; + font-size: 24rpx; } .text-sm { - font-size: 28rpx; + font-size: 30rpx; } .text-base { - font-size: 32rpx; + font-size: 34rpx; } .font-bold { @@ -472,7 +516,7 @@ onReachBottom(() => { .loading-text { margin-top: 20rpx; - font-size: 28rpx; + font-size: 30rpx; color: #999; } @@ -482,7 +526,7 @@ onReachBottom(() => { align-items: center; justify-content: center; padding: 30rpx 0; - font-size: 24rpx; + font-size: 26rpx; color: #999; gap: 10rpx; } diff --git a/pages/article/send-article.vue b/pages/article/send-article.vue index 2d086c8..ac0d436 100644 --- a/pages/article/send-article.vue +++ b/pages/article/send-article.vue @@ -410,7 +410,7 @@ onMounted(() => { .search-input { flex: 1; margin-left: 16rpx; - font-size: 28rpx; + font-size: 30rpx; } .content { @@ -431,7 +431,7 @@ onMounted(() => { .category-item { padding: 20rpx 24rpx; - font-size: 28rpx; + font-size: 30rpx; color: #333; text-align: center; border-bottom: 1px solid #eee; @@ -466,7 +466,7 @@ onMounted(() => { .loading-text { margin-top: 20rpx; - font-size: 28rpx; + font-size: 30rpx; color: #999; } @@ -487,7 +487,7 @@ onMounted(() => { } .article-title { - font-size: 28rpx; + font-size: 30rpx; color: #333; line-height: 1.6; word-break: break-all; @@ -503,13 +503,13 @@ onMounted(() => { .article-date { flex: 1; - font-size: 24rpx; + font-size: 26rpx; color: #999; } .send-btn { flex-shrink: 0; - font-size: 26rpx; + font-size: 28rpx; padding: 8rpx 32rpx; height: auto; line-height: 1.4; @@ -521,7 +521,7 @@ onMounted(() => { align-items: center; justify-content: center; padding: 30rpx 0; - font-size: 24rpx; + font-size: 26rpx; color: #999; gap: 10rpx; } @@ -545,7 +545,7 @@ onMounted(() => { .preview-title { flex: 1; - font-size: 32rpx; + font-size: 34rpx; font-weight: bold; color: #333; } diff --git a/pages/health/list.vue b/pages/health/list.vue index fdebfd3..abfb968 100644 --- a/pages/health/list.vue +++ b/pages/health/list.vue @@ -40,6 +40,8 @@ class="mr-5 px-10 leading-normal text-white text-base bg-warning rounded-full">门诊信息 住院信息 + 体检报告 外院 @@ -51,7 +53,7 @@ - {{ row.label }}: + {{ row.label }}: {{ row.value && row.value.join ? row.value.join(', ') : '' }} @@ -96,7 +98,8 @@ import { toast } from '../../utils/widget'; const tempType = { outpatient: '门诊信息', - inhospital: '住院信息' + inhospital: '住院信息', + physicalExaminationTemplate: '体检报告' } const empty = ref(false) const { useLoad, useShow } = useGuard(); @@ -112,12 +115,13 @@ const page = ref(1); const more = ref(false) const loading = ref(false); const qrcode = computed(() => team.value && Array.isArray(team.value.qrcodes) ? team.value.qrcodes[0] : null) -const healthTempList = computed(() => qrcode.value && Array.isArray(qrcode.value.healthTempList) ? qrcode.value.healthTempList.map(i => ({ label: tempType[i.templateType], value: i.templateType })).filter(i => i.label) : []) +const healthTempList = computed(() => qrcode.value && Array.isArray(qrcode.value.healthTempList) ? qrcode.value.healthTempList.map(i => ({ enable: i.enable, label: tempType[i.templateType], value: i.templateType })).filter(i => i.label && i.enable) : []) const tempShowField = ref(null); const config = { outpatient: ["corp", "deptName", "doctor", "diagnosisName", "files"], inhospital: ["corp", "diagnosisName", "operation", "operationDate", "outhosDate", "files"], + physicalExaminationTemplate: ['inspectPakageName'] }; function addArchive() { @@ -197,7 +201,7 @@ async function getList() { memberId: customerId.value, page: page.value, pageSize: 20, - medicalType: ['outpatient', 'inhospital'] + medicalType: Object.keys(tempType) } if (type.value !== 'all') { params.medicalType = [type.value] diff --git a/pages/health/record.vue b/pages/health/record.vue index 7b5e3a5..24e1b93 100644 --- a/pages/health/record.vue +++ b/pages/health/record.vue @@ -43,6 +43,8 @@ const type = ref(''); const visible = ref(false); const timeTitle = ref(''); const canEdit = ref(false) +const nextTypes = ref([]); +const source = ref(''); const formData = computed(() => ({ ...record.value, ...form.value })); const displayFormItems = computed(() => { @@ -90,12 +92,31 @@ async function addHealthRecord() { const res = await api('addMedicalRecord', data); if (res && res.success) { await toast('保存成功'); - uni.navigateBack(); + const isFill = await fillNext(); + if (isFill) return; + if (source.value === 'afterArchive') { + uni.redirectTo({ + url: `/pages/archive/archive-result?corpId=${corpId.value}&teamId=${teamId.value}&customerId=${customerId.value}` + }) + } else { + uni.navigateBack(); + } } else { toast(res?.message || '保存失败'); } } +async function fillNext() { + const nextType = nextTypes.value[0]; + const types = nextTypes.value.slice(1); + if (nextType) { + const url = `/pages/health/record?type=${nextType}&teamId=${teamId.value}&corpId=${corpId.value}&customerId=${customerId.value}&nextTypes=${types.join(',')}&source=${source.value}` + uni.redirectTo({ url }); + return true + } + return false +} + async function updateHealthRecord() { if (Object.keys(form.value).length === 0) { uni.navigateBack(); @@ -162,6 +183,9 @@ onLoad(options => { customerId.value = options.customerId || ''; corpId.value = options.corpId; teamId.value = options.teamId; + source.value = options.source || ''; + const nextTypeStr = typeof options.nextTypes === 'string' ? options.nextTypes : ''; + nextTypes.value = nextTypeStr.split(','); uni.setNavigationBarTitle({ title: id.value ? '编辑健康档案' : '新增健康档案' }) }) useLoad(options => { diff --git a/pages/home/article-list.vue b/pages/home/article-list.vue index e4b6653..37c1954 100644 --- a/pages/home/article-list.vue +++ b/pages/home/article-list.vue @@ -125,7 +125,7 @@ watch( .module-title { color: #000000; - font-size: 36rpx; + font-size: 38rpx; font-style: normal; font-weight: 600; line-height: normal; @@ -162,7 +162,7 @@ watch( .article-title { color: #333333; - font-size: 32rpx; + font-size: 34rpx; font-weight: 500; line-height: normal; } @@ -171,7 +171,7 @@ watch( max-width: 402rpx; color: #666666; text-align: justify; - font-size: 28rpx; + font-size: 30rpx; font-weight: 400; line-height: normal; } diff --git a/pages/home/consult.vue b/pages/home/consult.vue index d3d6d05..f54ea88 100644 --- a/pages/home/consult.vue +++ b/pages/home/consult.vue @@ -207,7 +207,7 @@ defineExpose({ .consult-title { color: #000000; - font-size: 36rpx; + font-size: 38rpx; font-style: normal; font-weight: 600; line-height: normal; @@ -269,7 +269,7 @@ defineExpose({ } .item-label { - font-size: 28rpx; + font-size: 30rpx; color: #666d76; text-align: center; font-weight: 400; diff --git a/pages/home/customer-archive.vue b/pages/home/customer-archive.vue index e62ff57..8510348 100644 --- a/pages/home/customer-archive.vue +++ b/pages/home/customer-archive.vue @@ -4,7 +4,7 @@ 成员档案 - 档案管理 + 档案管理 @@ -14,9 +14,26 @@ - + - + + + {{ current.relationship }} + + + + {{ current.name }} + + + + + + + + + ({}), }, + referenceCustomerIds: { + type: Object, + default: () => ({}), + }, customers: { type: Array, default: () => [], @@ -103,6 +124,8 @@ const { account, externalUserId } = storeToRefs(useAccount()); const { getExternalUserId } = useAccount() const current = ref(null); const customers = ref([]); +const scrollLeft = ref(0); +const customersList = computed(() => customers.value.filter(i => i._id !== current.value?._id)) const canAuth = computed(() => { if (current.value && props.team && props.team.teamId) { @@ -157,16 +180,29 @@ function toHealthList() { } function toggle(i) { + if (current.value && current.value._id === i._id) return; current.value = i; + scrollLeft.value = scrollLeft.value === 0 ? 1 : 0; } function toManagePage() { const corpUserId = props.corpUserIds && props.corpUserIds[props.team.teamId] ? props.corpUserIds[props.team.teamId] : ""; + const referenceCustomerId = props.referenceCustomerIds && props.referenceCustomerIds[props.team.teamId] ? props.referenceCustomerIds[props.team.teamId] : ""; uni.navigateTo({ - url: `/pages/archive/archive-manage?corpUserId=${corpUserId}&corpId=${props.corpId}&teamId=${props.team.teamId}`, + url: `/pages/archive/archive-manage?corpUserId=${corpUserId}&corpId=${props.corpId}&teamId=${props.team.teamId}&referenceCustomerId=${referenceCustomerId}`, }); } +let timer = null; +function handleScroll(e) { + if (timer) clearTimeout(timer); + timer = setTimeout(() => { + scrollLeft.value = e.detail.scrollLeft; + }, 300); +} + + + async function auth() { await confirm(`是否授权${props.team.name}提供服务`); const corpUserId = await getResponsiblePerson(); @@ -249,7 +285,7 @@ defineExpose({ .module-title { color: #000000; - font-size: 36rpx; + font-size: 38rpx; font-weight: 600; line-height: normal; } @@ -277,7 +313,7 @@ defineExpose({ top: -2rpx; right: -10rpx; padding: 4rpx 16rpx; - font-size: 20rpx; + font-size: 22rpx; line-height: normal; color: #fff; border-top-left-radius: 16rpx; @@ -392,14 +428,14 @@ defineExpose({ .info-title { color: #213e80; - font-size: 32rpx; + font-size: 34rpx; font-weight: 400; line-height: 56rpx; } .info-subtitle { color: #78808f; - font-size: 24rpx; + font-size: 26rpx; } .arrow-icon-small { @@ -461,7 +497,7 @@ defineExpose({ } .add-archive-btn-text { - font-size: 28rpx; + font-size: 30rpx; color: #ffffff; font-weight: 500; } diff --git a/pages/home/home.vue b/pages/home/home.vue index 5c43a19..55e339b 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -2,11 +2,11 @@ - + - + @@ -26,7 +26,7 @@ + + \ No newline at end of file diff --git a/pages/login/login.vue b/pages/login/login.vue index 3e39656..23716f4 100644 --- a/pages/login/login.vue +++ b/pages/login/login.vue @@ -23,14 +23,14 @@ @@ -43,6 +43,7 @@ 《隐私政策》 + @@ -56,6 +57,7 @@ import { get, set } from "@/utils/cache"; import { toast } from "@/utils/widget"; import groupAvatar from "@/components/group-avatar.vue"; +import agreementPopup from "./agreement-popup.vue"; const env = __VITE_ENV__; const appid = env.MP_WX_APP_ID; @@ -64,6 +66,7 @@ const checked = ref(false); const redirectUrl = ref(""); const { account } = storeToRefs(useAccountStore()); const { login } = useAccountStore(); +const visible = ref(false) function attempRedirect(url) { return new Promise((resolve, reject) => { @@ -85,8 +88,9 @@ function attempSwitchTab(url) { }); } -function remind() { - toast("请先阅读并同意用户协议和隐私政策"); +function onAgree() { + visible.value = false; + checked.value = true; } function toAggreement(type) { @@ -102,7 +106,6 @@ function toHome() { } - async function bindTeam() { const res = await api('bindWxappWithTeam', { appid, corpId: team.value.corpId, teamId: team.value.teamId, openid: account.value.openid }); if (!res || !res.success) { @@ -118,7 +121,7 @@ async function bindTeam() { async function getPhoneNumber(e) { const phoneCode = e && e.detail && e.detail.code; - if (!account.value) { + if (!account.value || !account.value.mobile) { const res = await login(phoneCode); if (!res) return; } @@ -171,7 +174,7 @@ onLoad((opts) => { line-height: 80rpx; background: linear-gradient(270deg, #1b5cc8 2.26%, #0877f1 94.33%); color: #fff; - font-size: 30rpx; + font-size: 32rpx; border-radius: 48rpx; font-weight: 600; box-shadow: 0 4rpx 16rpx rgba(59, 124, 255, 0.08); @@ -256,14 +259,14 @@ onLoad((opts) => { } .doctor-name { - font-size: 40rpx; + font-size: 42rpx; font-weight: 600; color: #1d2129; margin-top: 40rpx; } .doctor-hospital { - font-size: 28rpx; + font-size: 30rpx; color: #78808f; font-weight: 400; margin-top: 20rpx; @@ -276,13 +279,13 @@ onLoad((opts) => { border-radius: 4rpx; border: 1rpx solid #1a3e8433; padding: 0 8rpx; - font-size: 22rpx; + font-size: 24rpx; font-weight: 400; margin-top: 20rpx; } .login-tip { - font-size: 32rpx; + font-size: 34rpx; color: #000000; font-weight: 500; text-align: center; @@ -307,7 +310,7 @@ onLoad((opts) => { line-height: 96rpx; background: linear-gradient(270deg, #1b5cc8 2.26%, #0877f1 94.33%); color: #fff; - font-size: 32rpx; + font-size: 34rpx; border-radius: 48rpx; font-weight: 600; box-shadow: 0 4rpx 16rpx rgba(59, 124, 255, 0.08); @@ -324,7 +327,7 @@ onLoad((opts) => { justify-content: center; align-items: center; color: #b2b7c2; - font-size: 22rpx; + font-size: 24rpx; margin-top: 40rpx; gap: 8rpx; } diff --git a/pages/login/redirect-page.vue b/pages/login/redirect-page.vue index ec90081..1c409a5 100644 --- a/pages/login/redirect-page.vue +++ b/pages/login/redirect-page.vue @@ -15,6 +15,8 @@ import useAccountStore from "@/store/account"; const env = __VITE_ENV__; const appid = env.MP_WX_APP_ID; const { account } = storeToRefs(useAccountStore()); +const { login } = useAccountStore(); + const loading = ref(false); @@ -27,7 +29,7 @@ function copy() { }) } -async function changeTeam({ teamId, corpId, corpUserId }) { +async function changeTeam({ teamId, corpId, corpUserId, qrid, referenceCustomerId }) { loading.value = true; const res = await api("getTeamData", { teamId, corpId, withCorpName: true }); loading.value = false; @@ -36,13 +38,19 @@ async function changeTeam({ teamId, corpId, corpUserId }) { team.value.corpName = res.data.corpName; set('home-invite-team-info', { teamId: team.value.teamId, - corpUserId: corpUserId || '' + corpUserId: corpUserId || '', + corpUserId, + qrid, + referenceCustomerId: referenceCustomerId || '' }); - if (account.value) { + await login() + if (account.value && account.value.mobile) { bindTeam(corpUserId) } else { set("invite-team-info", { corpUserId, + qrid, + referenceCustomerId, corpId: team.value.corpId, teamId: team.value.teamId, corpName: team.value.corpName, @@ -79,16 +87,21 @@ async function bindTeam(corpUserId) { } onLoad((options) => { - opts.value = JSON.stringify(options) - const href = - typeof options.q === "string" ? decodeURIComponent(options.q) : ""; - const [, url = ""] = href.split("?"); - const data = url.split("&").reduce((acc, cur) => { - const [key, value] = cur.split("="); - acc[key] = value; - return acc; - }, {}); - changeTeam(data); + if (options.q) { + opts.value = JSON.stringify(options) + const href = + typeof options.q === "string" ? decodeURIComponent(options.q) : ""; + const [, url = ""] = href.split("?"); + const data = url.split("&").reduce((acc, cur) => { + const [key, value] = cur.split("="); + acc[key] = value; + return acc; + }, {}); + changeTeam(data); + } else if (options.type === 'archive') { + changeTeam(options); + } + }); \ No newline at end of file + diff --git a/pages/message/components/consult-accept.vue b/pages/message/components/consult-accept.vue index a32bec6..0fd9a72 100644 --- a/pages/message/components/consult-accept.vue +++ b/pages/message/components/consult-accept.vue @@ -45,7 +45,7 @@ const handleReject = () => { } .accept-text { - font-size: 28rpx; + font-size: 30rpx; color: #333; line-height: 1.6; } @@ -60,7 +60,7 @@ const handleReject = () => { flex: 1; height: 80rpx; border-radius: 8rpx; - font-size: 28rpx; + font-size: 30rpx; border: none; display: flex; align-items: center; diff --git a/pages/message/components/consult-apply.vue b/pages/message/components/consult-apply.vue index bf86d75..dd32650 100644 --- a/pages/message/components/consult-apply.vue +++ b/pages/message/components/consult-apply.vue @@ -80,13 +80,13 @@ const handleApply = () => { } .apply-title { - font-size: 32rpx; + font-size: 34rpx; font-weight: 600; color: #333; } .apply-desc { - font-size: 24rpx; + font-size: 26rpx; color: #999; } @@ -99,7 +99,7 @@ const handleApply = () => { background-color: #1890ff; color: #fff; border-radius: 8rpx; - font-size: 28rpx; + font-size: 30rpx; font-weight: 500; border: none; display: flex; diff --git a/pages/message/components/consult-cancel.vue b/pages/message/components/consult-cancel.vue index 734d4ae..2676653 100644 --- a/pages/message/components/consult-cancel.vue +++ b/pages/message/components/consult-cancel.vue @@ -41,7 +41,7 @@ const handleCancel = () => { } .cancel-text { - font-size: 28rpx; + font-size: 30rpx; color: #333; line-height: 1.6; } @@ -55,7 +55,7 @@ const handleCancel = () => { .btn-reapply { width: 100%; heiger-radius: 8rpx; - font-size: 28rpx; + font-size: 30rpx; border: none; display: flex; align-items: center; diff --git a/pages/message/components/message-types.vue b/pages/message/components/message-types.vue index 34bebe4..6fbe11d 100644 --- a/pages/message/components/message-types.vue +++ b/pages/message/components/message-types.vue @@ -44,7 +44,7 @@ {{ getArticleData(message).title }} {{ getArticleData(message).desc }} - @@ -77,7 +77,12 @@ diff --git a/pages/rate/rate-detail.vue b/pages/rate/rate-detail.vue index 538103c..093bf72 100644 --- a/pages/rate/rate-detail.vue +++ b/pages/rate/rate-detail.vue @@ -244,7 +244,7 @@ onLoad(opts => { } @at-root &__txt { - font-size: 32rpx; + font-size: 34rpx; color: #666; } } diff --git a/pages/rate/rate-list.vue b/pages/rate/rate-list.vue index ca41d35..e4c5304 100644 --- a/pages/rate/rate-list.vue +++ b/pages/rate/rate-list.vue @@ -302,15 +302,15 @@ onShow(async () => { } .text-xs { - font-size: 22rpx; + font-size: 24rpx; } .text-sm { - font-size: 28rpx; + font-size: 30rpx; } .text-base { - font-size: 32rpx; + font-size: 34rpx; } .font-bold { @@ -424,7 +424,7 @@ onShow(async () => { .loading-text { margin-top: 20rpx; - font-size: 28rpx; + font-size: 30rpx; color: #999; } @@ -434,7 +434,7 @@ onShow(async () => { align-items: center; justify-content: center; padding: 30rpx 0; - font-size: 24rpx; + font-size: 26rpx; color: #999; gap: 10rpx; } diff --git a/pages/survey/components/survey-question.vue b/pages/survey/components/survey-question.vue index 13d37be..c6a497e 100644 --- a/pages/survey/components/survey-question.vue +++ b/pages/survey/components/survey-question.vue @@ -56,11 +56,13 @@ - - 提交 + + + 提交 + + diff --git a/pages/survey/fill.vue b/pages/survey/fill.vue index cf486f7..bfc8fb7 100644 --- a/pages/survey/fill.vue +++ b/pages/survey/fill.vue @@ -141,7 +141,7 @@ onLoad(opts => { @at-root &__customer { text-align: right; - font-size: 28rpx; + font-size: 30rpx; padding-bottom: 16rpx; margin-bottom: 24rpx; color: #333; @@ -150,7 +150,7 @@ onLoad(opts => { @at-root &__title { text-align: center; - font-size: 32rpx; + font-size: 34rpx; font-weight: 600; margin-bottom: 24rpx; } @@ -158,7 +158,7 @@ onLoad(opts => { @at-root &__desc { text-align: left; color: #666; - font-size: 28rpx; + font-size: 30rpx; margin-bottom: 24rpx; } @@ -169,7 +169,7 @@ onLoad(opts => { @at-root &__question { position: relative; - font-size: 32rpx; + font-size: 34rpx; margin-bottom: 24rpx; @at-root &--require::before { @@ -183,7 +183,7 @@ onLoad(opts => { @at-root &__input { padding: 10rpx 24rpx; - font-size: 28rpx; + font-size: 30rpx; border: 1px solid #eee; border-radius: 8rpx; } @@ -199,7 +199,7 @@ onLoad(opts => { margin-top: 30rpx; padding: 24rpx 30rpx; border-radius: 8rpx; - font-size: 28rpx; + font-size: 30rpx; color: #fff; background: #006eff; text-align: center; @@ -217,7 +217,7 @@ onLoad(opts => { @at-root &__label { flex-grow: 1; - font-size: 32rpx; + font-size: 34rpx; } } @@ -236,7 +236,7 @@ onLoad(opts => { } @at-root &__txt { - font-size: 32rpx; + font-size: 34rpx; color: #666; } } diff --git a/pages/survey/survey-list.vue b/pages/survey/survey-list.vue index 77f560a..95b5986 100644 --- a/pages/survey/survey-list.vue +++ b/pages/survey/survey-list.vue @@ -347,15 +347,15 @@ onReachBottom(() => { } .text-xs { - font-size: 22rpx; + font-size: 24rpx; } .text-sm { - font-size: 28rpx; + font-size: 30rpx; } .text-base { - font-size: 32rpx; + font-size: 34rpx; } .font-bold { @@ -469,7 +469,7 @@ onReachBottom(() => { .loading-text { margin-top: 20rpx; - font-size: 28rpx; + font-size: 30rpx; color: #999; } @@ -479,7 +479,7 @@ onReachBottom(() => { align-items: center; justify-content: center; padding: 30rpx 0; - font-size: 24rpx; + font-size: 26rpx; color: #999; gap: 10rpx; } diff --git a/pages/team/team-detail.vue b/pages/team/team-detail.vue index 24ec31c..7fef4e0 100644 --- a/pages/team/team-detail.vue +++ b/pages/team/team-detail.vue @@ -7,8 +7,16 @@ - {{ team.name }} - {{ corpName }} + + {{ team.name }} + + + 推荐 + + + + {{ team.licenseHospitalName || corpName }} @@ -54,7 +62,7 @@