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 @@
+
+
+
+
+ {{ name || '阳性发现' }}
+
+
+
+
+
+
+
+ {{ idx + 1 }}、阳性发现
+
+
+
+
+
+
+
+ 处理意见
+
+
+
+
+
+
+
+
+
\ 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 @@
-
+
+
手机号:
{{ customer.mobile }}
@@ -30,22 +30,29 @@
-
- 以上档案都不对,可以:
- 新增档案
-
+
+ 以上档案都不对,可以:
+ 新增档案
+
+
+
+
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 @@