3.12晚上

This commit is contained in:
zoujiandong 2026-03-12 18:57:28 +08:00
parent 2831de027c
commit 4e3a30b863
14 changed files with 199 additions and 60 deletions

View File

@ -297,7 +297,7 @@ const onNextStep = async () => {
} }
} catch (error) { } catch (error) {
console.error('身份验证失败:', error); console.error('身份验证失败:', error);
uni.showToast({ title: '网络错误,请重试', icon: 'none' }); uni.showToast({ title: res.message, icon: 'none' });
isLoading.value = false; isLoading.value = false;
} }
} else if (currentStep.value === 2) { } else if (currentStep.value === 2) {

View File

@ -96,7 +96,13 @@ onMounted(() => {
} }
.detail-content { .detail-content {
margin-top: calc(var(--status-bar-height) + 44px); position: fixed;
left: 0;
right: 0;
top: calc(var(--status-bar-height) + 44px);
bottom: 0;
overflow-y: auto;
box-sizing: border-box;
background: #ffffff; background: #ffffff;
padding: 0 24rpx; padding: 0 24rpx;
} }
@ -110,14 +116,14 @@ onMounted(() => {
} }
.label { .label {
font-size: 38rpx; font-size: 30rpx;
color: #2c2c2c; color: #2c2c2c;
} }
.value { .value {
flex: 1; flex: 1;
text-align: right; text-align: right;
font-size: 38rpx; font-size: 30rpx;
color: #666666; color: #666666;
margin-left: 20rpx; margin-left: 20rpx;
word-break: break-all; word-break: break-all;

View File

@ -231,7 +231,7 @@ onMounted(() => {
border-bottom: 1rpx solid #ccc; border-bottom: 1rpx solid #ccc;
.header-cell { .header-cell {
font-size: 28rpx; font-size: 30rpx;
color: #333; color: #333;
font-weight: 500; font-weight: 500;
@ -281,7 +281,7 @@ onMounted(() => {
border-bottom: 1rpx solid #e5e5e5; border-bottom: 1rpx solid #e5e5e5;
.cell { .cell {
font-size: 26rpx; font-size: 30rpx;
&.business-type { &.business-type {
flex: 1; flex: 1;

View File

@ -450,7 +450,8 @@ $card: #ffffff;
justify-content: space-between; justify-content: space-between;
align-items: center; align-items: center;
padding: 26rpx 30rpx; padding: 26rpx 30rpx;
border-bottom: 2rpx solid #f2f2f2; background: #fff;
border-bottom: 2rpx solid #ccc;
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
@ -458,8 +459,8 @@ $card: #ffffff;
.name { text-align: left; } .name { text-align: left; }
.time { text-align: center; color: #666; } .time { text-align: center; color: #666; }
.qty { text-align: center; } .qty { text-align: center; }
.qty.plus { color: #2dbd85; } .qty.plus { color: #333; }
.qty.minus { color: #e34d4d; } .qty.minus { color: #333; }
} }
.empty-wrap { padding-top: 200rpx; display: flex; flex-direction: column; align-items: center; color: #bdbdbd; } .empty-wrap { padding-top: 200rpx; display: flex; flex-direction: column; align-items: center; color: #bdbdbd; }

View File

@ -1,10 +1,10 @@
<template> <template>
<navBar :title="from == 'msg' ? '新的患者' : '我的患者'" /> <navBar :title="'新的患者'" />
<view class="new-patient-page"> <view class="new-patient-page">
<!-- 提醒区域 --> <!-- 提醒区域 -->
<view class="reminder-section"> <view class="reminder-section">
<view class="reminder-icon"> <view class="reminder-icon">
<uni-icons type="notification" size="16" color="#ff9500"></uni-icons> <up-image :src="tipImg" width="35rpx" height="42rpx"></up-image>
</view> </view>
<text class="reminder-text">提醒: 为了避免不必要的纠纷,请您务必选择线下就诊过的患者</text> <text class="reminder-text">提醒: 为了避免不必要的纠纷,请您务必选择线下就诊过的患者</text>
</view> </view>
@ -15,7 +15,7 @@
<view class="pending-request" v-for="(item, index) in applyList" :key="index"> <view class="pending-request" v-for="(item, index) in applyList" :key="index">
<view class="request-item"> <view class="request-item">
<view class="avatar"> <view class="avatar">
<up-image :src="docUrl+item.photo" radius="10rpx" width="80rpx" height="80rpx" ></up-image> <up-image :src="docUrl+item.photo" radius="10rpx" width="120rpx" height="120rpx" ></up-image>
</view> </view>
<view class="request-content"> <view class="request-content">
<view class="request-time">{{ item.createDate }}</view> <view class="request-time">{{ item.createDate }}</view>
@ -23,7 +23,7 @@
<view class="action-buttons"> <view class="action-buttons">
<button class="reject-btn" @click="applyListOperate(item.uuid,3)">拒绝</button> <button class="reject-btn" @click="applyListOperate(item.uuid,3)">拒绝</button>
<button class="agree-btn" @click="applyListOperate(item.uuid,2)">同意</button> <button class="agree-btn" @click="applyListOperate(item.uuid,2,item.content)">同意</button>
</view> </view>
</view> </view>
</view> </view>
@ -36,11 +36,11 @@
<view class="history-list"> <view class="history-list">
<view class="history-item" v-for="(item, index) in historyList" :key="index"> <view class="history-item" v-for="(item, index) in historyList" :key="index">
<view class="avatar"> <view class="avatar">
<up-image v-if="docUrl+item.patient_photo" :src="docUrl + item.patient_photo" radius="10rpx" width="80rpx" height="80rpx"></up-image> <up-image v-if="docUrl+item.patient_photo" :src="docUrl + item.patient_photo" radius="10rpx" width="120rpx" height="120rpx"></up-image>
</view> </view>
<view class="history-content"> <view class="history-content">
<view class="history-time">{{ formatDate(item.createDate) }}</view> <view class="history-time">{{ formatDate2(item.create_date) }}</view>
<view class="nickname">昵称{{ item.nickname || item.patient_name }}</view> <view class="nickname">昵称{{ item.nickname || item.patient_name }}</view>
<view class="history-text">{{ item.content}}</view> <view class="history-text">{{ item.content}}</view>
<view class="status-info"> <view class="status-info">
@ -66,9 +66,11 @@ import { onLoad,onShow,onBackPress} from '@dcloudio/uni-app';
import goImg from "@/static/go_big.png" import goImg from "@/static/go_big.png"
import api from '@/api/api.js' import api from '@/api/api.js'
import docUrl from "@/utils/docUrl" import docUrl from "@/utils/docUrl"
import dayjs from 'dayjs'
import navTo from "@/utils/navTo.js" import navTo from "@/utils/navTo.js"
import empty from "@/components/empty/empty.vue" import empty from "@/components/empty/empty.vue"
import navBar from "@/components/navBar/navBar.vue" import navBar from "@/components/navBar/navBar.vue"
import tipImg from "@/static/sendgroup_tishi_big.png"
const from=ref(''); const from=ref('');
onLoad((options) => { onLoad((options) => {
if(options.from){ if(options.from){
@ -167,7 +169,7 @@ const getApplyList = async () => { // 申请列表
}); });
} }
}; };
const applyListOperate = async (uuid,status) => { const applyListOperate = async (uuid,status,content) => {
let data = { let data = {
uuid: uuid, uuid: uuid,
status: status status: status
@ -180,11 +182,12 @@ const getApplyList = async () => { // 申请列表
icon: 'none', icon: 'none',
duration: 1500 duration: 1500
}); });
let nickname = content.split('')[0].replace('我是', '');
getApplyList(); getApplyList();
getRelationRecordLately(); getRelationRecordLately();
if(status == 2){ if(status == 2){
navTo({ navTo({
url: `/pages_app/patientRemark/patientRemark?uuid=${uuid}` url: `/pages_app/patientRemark/patientRemark?uuid=${uuid}&&nickname=${nickname}`
}) })
} }
} }
@ -207,6 +210,9 @@ const formatDate = (dateString) => {
const minutes = String(date.getMinutes()).padStart(2, '0'); const minutes = String(date.getMinutes()).padStart(2, '0');
return `${year}-${month}-${day} ${hours}:${minutes}`; return `${year}-${month}-${day} ${hours}:${minutes}`;
}; };
const formatDate2 = (dateString) => {
return dayjs(dateString).format('YYYY-MM-DD HH:mm:ss');
}
// //
const getStatusText = (status) => { const getStatusText = (status) => {
@ -219,7 +225,7 @@ const getStatusText = (status) => {
const addPatient = () => { const addPatient = () => {
navTo({ navTo({
url:'/pages_app/myCode/myCode' url:'/pages_app/myCode/myCode?from=myPatient'
}); });
// //
}; };
@ -325,13 +331,15 @@ const addPatient = () => {
.reminder-section { .reminder-section {
display: flex; display: flex;
align-items: flex-start; align-items:center;
padding: 30rpx; padding: 30rpx;
margin-top: calc(var(--status-bar-height) + 44px); margin-top: calc(var(--status-bar-height) + 44px);
background-color: #ffffff; background-color: #ffffff;
margin-bottom: 20rpx;
.reminder-icon { .reminder-icon {
width: 35rpx;
height: 42rpx;
margin-right: 20rpx; margin-right: 20rpx;
margin-top: 4rpx; margin-top: 4rpx;
} }
@ -346,11 +354,12 @@ const addPatient = () => {
.follow-up-section { .follow-up-section {
background-color: #ffffff; background-color: #ffffff;
margin-bottom: 20rpx;
.section-title { .section-title {
padding: 30rpx 30rpx 20rpx; padding: 30rpx 30rpx 30rpx;
font-size: 32rpx; font-size: 32rpx;
background-color: #f0f0f0;
font-weight: normal; font-weight: normal;
color: #333; color: #333;
border-bottom: 1rpx solid #f0f0f0; border-bottom: 1rpx solid #f0f0f0;
@ -361,11 +370,12 @@ const addPatient = () => {
.request-item { .request-item {
display: flex; display: flex;
gap: 20rpx;
.avatar { .avatar {
width: 80rpx; width: 120rpx;
height: 80rpx; height: 120rpx;
margin-top: 30rpx;
background-color: #ffb6c1; background-color: #ffb6c1;
border-radius: 12rpx; border-radius: 12rpx;
display: flex; display: flex;
@ -373,8 +383,8 @@ const addPatient = () => {
justify-content: center; justify-content: center;
.avatar-icon { .avatar-icon {
width: 40rpx; width: 120rpx;
height: 40rpx; height: 120rpx;
background-color: #ffffff; background-color: #ffffff;
border-radius: 50%; border-radius: 50%;
} }
@ -382,7 +392,7 @@ const addPatient = () => {
.request-content { .request-content {
flex: 1; flex: 1;
margin-left: 20rpx;
.request-text { .request-text {
font-size: 28rpx; font-size: 28rpx;
color: #333; color: #333;
@ -444,18 +454,19 @@ const addPatient = () => {
margin-bottom: 120rpx; // margin-bottom: 120rpx; //
.section-title { .section-title {
padding: 30rpx 30rpx 20rpx; padding: 30rpx 30rpx 30rpx;
font-size: 32rpx; font-size: 32rpx;
font-weight: normal; font-weight: normal;
background-color: #f0f0f0;
color: #333; color: #333;
border-bottom: 1rpx solid #f0f0f0; border-bottom: 1rpx solid #f0f0f0;
} }
.history-list { .history-list {
margin-bottom: 100rpx; margin-bottom: 30rpx;
.history-item { .history-item {
display: flex; display: flex;
gap: 20rpx;
padding: 30rpx; padding: 30rpx;
border-bottom: 1rpx solid #f0f0f0; border-bottom: 1rpx solid #f0f0f0;
@ -464,8 +475,9 @@ const addPatient = () => {
} }
.avatar { .avatar {
width: 80rpx; width: 120rpx;
height: 80rpx; height: 120rpx;
margin-top: 30rpx;
background-color: #ffb6c1; background-color: #ffb6c1;
border-radius: 12rpx; border-radius: 12rpx;
display: flex; display: flex;
@ -482,7 +494,8 @@ const addPatient = () => {
.history-content { .history-content {
flex: 1; flex: 1;
margin-left: 20rpx;
min-width: 0;
.nickname { .nickname {
font-size: 30rpx; font-size: 30rpx;
font-weight: normal; font-weight: normal;
@ -491,9 +504,14 @@ const addPatient = () => {
} }
.history-text { .history-text {
display: block;
width: 100%;
font-size: 30rpx; font-size: 30rpx;
color: #333; color: #333;
line-height: 1.4; line-height: 1.4;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-bottom: 20rpx; margin-bottom: 20rpx;
} }

View File

@ -133,16 +133,16 @@
<up-index-item > <up-index-item >
<up-index-anchor :text="group.letter" /> <up-index-anchor :text="group.letter" />
<view class="group-section"> <view class="group-section">
<view class="patient-item" v-for="item in group.items" :key="item.uuid || item.id" > <view class="patient-item" v-for="item in group.items" :key="item.uuid || item.id" @longpress="onPatientItemLongPress(item)">
<!-- <template v-if="item.placeholder"> <!-- <template v-if="item.placeholder">
<view class="patient-avatar-placeholder"> <view class="patient-avatar-placeholder">
<uni-icons type="person" size="32" color="#ffffff" @click="goPatientDetail(item.uuid)"></uni-icons> <uni-icons type="person" size="32" color="#ffffff" @click="goPatientDetail(item.uuid)"></uni-icons>
</view> </view>
</template> --> </template> -->
<image class="patient-avatar" :src="item._avatarLoadError ? defaultImg : item.avatarUrl" mode="aspectFill" @error="handlePatientAvatarError(item)" @click="goPatientDetail(item.uuid)"></image> <image class="patient-avatar" :src="item._avatarLoadError ? defaultImg : item.avatarUrl" mode="aspectFill" @error="handlePatientAvatarError(item)" @click.stop="goPatientDetail(item.uuid)"></image>
<view class="patient-info" @click="goPatientDetail(item.uuid)"> <view class="patient-info" >
<text class="patient-name">{{ item.realName }}</text> <text class="patient-name">{{ item.realName }}</text>
<view class="patient-badge" v-if="item.badge"> <view class="patient-badge" v-if="item.badge">
<text class="badge-text">{{ item.badge }}</text> <text class="badge-text">{{ item.badge }}</text>
@ -269,21 +269,27 @@
</view> </view>
</view> </view>
</view> </view>
<unidialog :visible="visible" :content="message" @close="visible=false" @confirm="deleteFollowUpFromList"></unidialog>
</template> </template>
<script setup> <script setup>
import { ref, getCurrentInstance, computed, nextTick, shallowRef } from 'vue'; import { ref, getCurrentInstance, computed, nextTick, shallowRef } from 'vue';
import { onShow,onLoad,onBackPress} from "@dcloudio/uni-app"; import { onShow,onLoad,onBackPress,onHide} from "@dcloudio/uni-app";
import dayImg from "@/static/visit_data11.png" import dayImg from "@/static/visit_data11.png"
import planImg from "@/static/visitplan.png" import planImg from "@/static/visitplan.png"
import api from '@/api/api.js'; import api from '@/api/api.js';
import navTo from '@/utils/navTo.js'; import navTo from '@/utils/navTo.js';
import docUrl from '@/utils/docUrl.js'; import docUrl from '@/utils/docUrl.js';
import unidialog from '@/components/dialog/dialog.vue'
import defaultImg from "@/static/default.png" import defaultImg from "@/static/default.png"
import newPatientImg from "@/static/new_patient.png" import newPatientImg from "@/static/new_patient.png"
import delImg from "@/static/iv_delete.png" import delImg from "@/static/iv_delete.png"
const patientList = ref([]); const patientList = ref([]);
const visible = ref(false)
const message = ref('')
const selectedPatientUuid = ref('')
const selectedPatientName = ref('')
const patientDataLoaded = ref(false); const patientDataLoaded = ref(false);
const patientDataLoading = ref(false); const patientDataLoading = ref(false);
const firstLetterCache = new Map(); const firstLetterCache = new Map();
@ -293,6 +299,9 @@
plus.runtime.quit(); plus.runtime.quit();
return true; return true;
}); });
onHide(() => {
patientDataLoaded.value = false;
});
import alertImg from "@/static/patientgif.png" import alertImg from "@/static/patientgif.png"
const getNavHeight = () => { const getNavHeight = () => {
const systemInfo = uni.getSystemInfoSync(); const systemInfo = uni.getSystemInfoSync();
@ -318,6 +327,30 @@
url: `/pages_app/patientSetting/patientSetting?uuid=${uuid}` url: `/pages_app/patientSetting/patientSetting?uuid=${uuid}`
}) })
} }
const onPatientItemLongPress = (item) => {
if (!item || !item.uuid) return
selectedPatientUuid.value = item.uuid
selectedPatientName.value = item.realName || ''
message.value = `确认解除[${selectedPatientName.value || '该患者'}]的随访关系?`
visible.value = true
}
const deleteFollowUpFromList = async () => {
if (!selectedPatientUuid.value) {
visible.value = false
return
}
const res = await api.cancelRes({
patientUuid: selectedPatientUuid.value
})
if (res.code == 1) {
uni.showToast({
title: '解除成功',
icon: 'none'
})
patientListByGBK()
}
visible.value = false
}
const handlePatientAvatarError = (item) => { const handlePatientAvatarError = (item) => {
if (!item) return if (!item) return
item._avatarLoadError = true item._avatarLoadError = true
@ -766,6 +799,15 @@
followUpLoading.value = false; followUpLoading.value = false;
followUpRefreshing.value = false; followUpRefreshing.value = false;
getFollowUpList(true); getFollowUpList(true);
console.log("onShow");
console.log(activeTab.value);
if(activeTab.value == 'list'){
getApplyList();
switchTab('list');
}else if(activeTab.value == 'plan'){
switchTab('plan')
}
}); });
// //
@ -946,7 +988,7 @@
} }
.tab-text { .tab-text {
font-size: 28rpx; font-size: 32rpx;
color: #999999; color: #999999;
transition: color 0.3s; transition: color 0.3s;
} }

View File

@ -18,6 +18,12 @@
<view class="label">备注</view> <view class="label">备注</view>
<input class="input" v-model.trim="remark" :placeholder="groupInfo.nickname || '给患者添加备注名'" placeholder-class="ph" maxlength="20"/> <input class="input" v-model.trim="remark" :placeholder="groupInfo.nickname || '给患者添加备注名'" placeholder-class="ph" maxlength="20"/>
</view> </view>
<view class="row" v-if="nickname">
<view class="left">申请消息为我是{{ nickname }}</view>
<view class="right" @click="fillNickname">
填入
</view>
</view>
<view class="form-block" @click="goGroup"> <view class="form-block" @click="goGroup">
<view class="label">分组</view> <view class="label">分组</view>
<view class="iptbox readonly"> <view class="iptbox readonly">
@ -35,7 +41,7 @@
</view> </view>
<view class="bottom-bar"> <view class="bottom-bar">
<button class="save-btn" @click="updateNicknameNote">完成</button> <button class="save-btn" :class="{ disabled: isRemarkEmpty }" :disabled="isRemarkEmpty" @click="updateNicknameNote">完成</button>
</view> </view>
</view> </view>
</template> </template>
@ -52,6 +58,8 @@
const patientCardData = ref({}) const patientCardData = ref({})
const groupInfo = ref({}) const groupInfo = ref({})
const noteLength = computed(() => (note.value || '').length) const noteLength = computed(() => (note.value || '').length)
const isRemarkEmpty = computed(() => !(remark.value || '').trim())
const nickname = ref('')
const goBack = () => { const goBack = () => {
uni.navigateBack() uni.navigateBack()
@ -64,6 +72,9 @@
onLoad((options) => { onLoad((options) => {
patientUuid.value = options.uuid || '' patientUuid.value = options.uuid || ''
if(options.nickname){
nickname.value = options.nickname
}
}) })
onShow(() => { onShow(() => {
@ -84,6 +95,7 @@
}) })
} }
const updateNicknameNote = async() => { const updateNicknameNote = async() => {
if (isRemarkEmpty.value) return
const res = await api.updateNicknameNote({ const res = await api.updateNicknameNote({
patient_uuid: patientUuid.value, patient_uuid: patientUuid.value,
nickname: remark.value, nickname: remark.value,
@ -104,9 +116,28 @@
uni.showToast({ title: '保存成功', icon: 'none' }) uni.showToast({ title: '保存成功', icon: 'none' })
setTimeout(() => goBack(), 700) setTimeout(() => goBack(), 700)
} }
const fillNickname = () => {
remark.value = nickname.value
}
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.row{
margin-top: -20rpx;
display: flex;
background: #fff;
padding:0 30rpx;
align-items: center;
justify-content: space-between;
.left{
font-size: 28rpx;
color: #666;
}
.right{
font-size: 32rpx;
color: #3ec7c0;
}
}
.contentbox{ .contentbox{
top: calc(var(--status-bar-height) + 44px); top: calc(var(--status-bar-height) + 44px);
position: fixed; position: fixed;
@ -193,6 +224,10 @@
border: none; border: none;
border-radius: 12rpx; border-radius: 12rpx;
font-size: 32rpx; font-size: 32rpx;
&.disabled{
background: #d9d9d9;
color: #ffffff;
}
} }
} }
</style> </style>

View File

@ -113,17 +113,17 @@
</view> </view>
<unidialog <unidialog
:visible="pptVisible" :visible="pptVisible"
:showCancel="false" :cancelText="'取消'"
:showConfirm="true" :confirmText="'保存二维码'"
:confirmText="'知道了'"
@close="pptVisible=false" @close="pptVisible=false"
@confirm="pptConfirm" @confirm="pptConfirm"
> >
<template v-slot:content> <template v-slot:content>
<view class="ppt-content"> <view class="ppt-content">
<image :src="contactImg" width="80rpx" height="80rpx" class="contact-img" @longpress.stop.prevent="saveContactImgToAlbum"></image> <image :src="contactImg" width="80rpx" height="80rpx" class="contact-img"></image>
<view class="ppt-content-title"> <view class="ppt-content-title">
<text style="color:#666">APP下载课件为pdf格式扫码联系平台文献助手获取原版PPT</text> <text style="color:#666">APP下载课件为pdf格式扫码联系平台文献助手获取原版PPT</text>
</view> </view>
</view> </view>
</template> </template>
@ -160,6 +160,7 @@
const page = ref(1); const page = ref(1);
const pageSize = ref(10); const pageSize = ref(10);
const pptConfirm=()=>{ const pptConfirm=()=>{
saveContactImgToAlbum();
pptVisible.value=false; pptVisible.value=false;
//feedBack(); //feedBack();
} }

View File

@ -168,7 +168,8 @@ const nativeDownloadPopupInfo = ref({
imageLeft: 0, imageLeft: 0,
imageSize: 0, imageSize: 0,
buttonTop: 0, buttonTop: 0,
buttonH: 0 buttonH: 0,
leftButtonW: 0
}); });
let downloadLongPressTimer = null; let downloadLongPressTimer = null;
let downloadLongPressTriggered = false; let downloadLongPressTriggered = false;
@ -289,6 +290,7 @@ function createNativeDownloadPopup() {
const dialogTop = Math.round((screenH - dialogH) / 2); const dialogTop = Math.round((screenH - dialogH) / 2);
const buttonH = uni.upx2px(96); const buttonH = uni.upx2px(96);
const buttonTop = dialogH - buttonH; const buttonTop = dialogH - buttonH;
const leftButtonW = Math.round(dialogW / 2);
const titleTop = uni.upx2px(46); const titleTop = uni.upx2px(46);
const imageSize = uni.upx2px(280); const imageSize = uni.upx2px(280);
const imageTop = titleTop + uni.upx2px(72); const imageTop = titleTop + uni.upx2px(72);
@ -306,7 +308,8 @@ function createNativeDownloadPopup() {
imageLeft, imageLeft,
imageSize, imageSize,
buttonTop, buttonTop,
buttonH buttonH,
leftButtonW
}; };
nativeDownloadMaskView.value = new plus.nativeObj.View('native-download-mask', { nativeDownloadMaskView.value = new plus.nativeObj.View('native-download-mask', {
@ -394,10 +397,29 @@ function createNativeDownloadPopup() {
height: '1px' height: '1px'
}); });
nativeDownloadPopupView.value.drawText('知道了', { nativeDownloadPopupView.value.drawRect({ color: '#F0F0F0' }, {
left: leftButtonW + 'px',
top: buttonTop + 'px',
width: '1px',
height: buttonH + 'px'
});
nativeDownloadPopupView.value.drawText('取消', {
left: '0px', left: '0px',
top: buttonTop + 'px', top: buttonTop + 'px',
width: dialogW + 'px', width: leftButtonW + 'px',
height: buttonH + 'px'
}, {
size: uni.upx2px(32) + 'px',
color: '#666666',
align: 'center',
verticalAlign: 'middle'
});
nativeDownloadPopupView.value.drawText('保存二维码', {
left: leftButtonW + 'px',
top: buttonTop + 'px',
width: (dialogW - leftButtonW) + 'px',
height: buttonH + 'px' height: buttonH + 'px'
}, { }, {
size: uni.upx2px(32) + 'px', size: uni.upx2px(32) + 'px',
@ -433,18 +455,25 @@ function createNativeDownloadPopup() {
downloadLongPressTriggered = false; downloadLongPressTriggered = false;
return; return;
} }
const { relativeY } = point; const { relativeX, relativeY } = point;
if (relativeY >= info.buttonTop) { if (relativeY >= info.buttonTop) {
if (relativeX >= info.leftButtonW) {
//
saveNativePopupImageToAlbum();
closeNativeDownloadPopup(); closeNativeDownloadPopup();
} else {
//
closeNativeDownloadPopup();
}
} }
}; };
nativeDownloadMaskView.value.addEventListener('click', handleDownloadMaskClick, false); nativeDownloadMaskView.value.addEventListener('click', handleDownloadMaskClick, false);
nativeDownloadMaskView.value.addEventListener('touchstart', handleDownloadMaskClick, false); nativeDownloadMaskView.value.addEventListener('touchstart', handleDownloadMaskClick, false);
nativeDownloadPopupView.value.addEventListener('click', handleDownloadPanelClick, false); nativeDownloadPopupView.value.addEventListener('click', handleDownloadPanelClick, false);
nativeDownloadPopupView.value.addEventListener('touchstart', handleDownloadPanelTouchStart, false); // nativeDownloadPopupView.value.addEventListener('touchstart', handleDownloadPanelTouchStart, false);
nativeDownloadPopupView.value.addEventListener('touchend', handleDownloadPanelTouchEnd, false); // nativeDownloadPopupView.value.addEventListener('touchend', handleDownloadPanelTouchEnd, false);
nativeDownloadPopupView.value.addEventListener('touchcancel', handleDownloadPanelTouchEnd, false); // nativeDownloadPopupView.value.addEventListener('touchcancel', handleDownloadPanelTouchEnd, false);
// #endif // #endif
} }

View File

@ -7,7 +7,7 @@
<view class="form-item"> <view class="form-item">
<view class="label">医院 <text class="required">*</text></view> <view class="label">医院 <text class="required">*</text></view>
<view class="value full"> <view class="value full">
<input class="input" v-model.trim="form.hospital_name" placeholder="请输入医院名称" @input="onHospitalInput" @keydown.enter.prevent="onHospitalEnter" /> <input class="input hospital-input" v-model.trim="form.hospital_name" placeholder="请输入医院名称" @input="onHospitalInput" @keydown.enter.prevent="onHospitalEnter" />
<view v-if="showHospitalList" class="suggestion"> <view v-if="showHospitalList" class="suggestion">
<view v-for="h in hospitalList" :key="h.uuid" class="suggestion-item" @click="pickHospital(h)"> <view v-for="h in hospitalList" :key="h.uuid" class="suggestion-item" @click="pickHospital(h)">
{{ h.name }} {{ h.name }}
@ -229,7 +229,9 @@ onLoad((options) => {
.value-text { font-size: 30rpx; color: #333; } .value-text { font-size: 30rpx; color: #333; }
.value-text.placeholder { color: #999; } .value-text.placeholder { color: #999; }
.input { width: 100%; font-size: 30rpx; color: #333; } .input { width: 100%; font-size: 30rpx; color: #333; }
.hospital-input{
padding-left:24rpx;
}
.suggestion { position: absolute; top: 84rpx; left: 0; right: 0; background: #fff; border: 2rpx solid #eee; border-radius: 10rpx; max-height: 480rpx; overflow-y: auto; z-index: 10; } .suggestion { position: absolute; top: 84rpx; left: 0; right: 0; background: #fff; border: 2rpx solid #eee; border-radius: 10rpx; max-height: 480rpx; overflow-y: auto; z-index: 10; }
.suggestion-item { padding: 20rpx 24rpx; font-size: 28rpx; color: #333; border-bottom: 2rpx solid #f5f5f5; } .suggestion-item { padding: 20rpx 24rpx; font-size: 28rpx; color: #333; border-bottom: 2rpx solid #f5f5f5; }
.suggestion-item:last-child { border-bottom: 0; } .suggestion-item:last-child { border-bottom: 0; }

View File

@ -238,6 +238,7 @@ const addOutPatient=async()=>{
title: '发布成功', title: '发布成功',
icon: 'none' icon: 'none'
}) })
uni.$emit('updateOutPatient');
uni.navigateBack() uni.navigateBack()
} }

View File

@ -402,6 +402,7 @@ const getTypeText = (type) => {
} }
// //
const goBack = () => { const goBack = () => {
console.log(isEdit.value);
if(isEdit.value){ if(isEdit.value){
noticeVisible.value = true; noticeVisible.value = true;
}else{ }else{
@ -558,6 +559,7 @@ onShow(() => {
fetchList(); fetchList();
uni.$on('updateOutPatient',()=>{ uni.$on('updateOutPatient',()=>{
isEdit.value = true; isEdit.value = true;
console.log('更新');
}) })
}) })

View File

@ -176,6 +176,7 @@ const addStopPatient = async () => {
note: remark.value note: remark.value
}) })
if(res.code==200){ if(res.code==200){
uni.$emit('updateOutPatient')
uni.showToast({ title: '发布成功', icon: 'none' }) uni.showToast({ title: '发布成功', icon: 'none' })
uni.navigateBack() uni.navigateBack()
} }
@ -254,7 +255,8 @@ const submit = () => {
} }
} }
.rowbox{ .rowbox{
width: 250rpx; flex:1;
margin-left: 30rpx;
} }
.stop-page { .stop-page {
min-height: 100vh; background: #fff; min-height: 100vh; background: #fff;
@ -295,12 +297,12 @@ const submit = () => {
.title-text { font-size: 32rpx; color: #8B2316; } .title-text { font-size: 32rpx; color: #8B2316; }
.required { color: #8B2316; margin-left: 6rpx; font-size: 28rpx; } .required { color: #8B2316; margin-left: 6rpx; font-size: 28rpx; }
.reason-row { display: flex; gap: 20rpx; flex-wrap: wrap; } .reason-row { display: flex; flex-wrap: wrap; justify-content: space-between;}
.reason-btn { flex: 1; text-align: center; height: 80rpx; line-height: 80rpx; border: 2rpx solid #ddd; border-radius: 10rpx; color: #666; } .reason-btn { width:150rpx; text-align: center; height: 80rpx; line-height: 80rpx; border: 2rpx solid #ddd; border-radius: 10rpx; color: #666; }
.reason-btn.active { border-color: #8B2316; color: #8B2316; background: url('@/static/addoutpa_true.png') right bottom/39rpx 39rpx no-repeat; } .reason-btn.active { border-color: #8B2316; color: #8B2316; background: url('@/static/addoutpa_true.png') right bottom/39rpx 39rpx no-repeat; }
.add-more { color: #8B2316; font-size: 28rpx; } .add-more { color: #8B2316; font-size: 28rpx; }
.range-row { display: flex; align-items: center; gap: 20rpx; margin-bottom: 20rpx; } .range-row { display: flex; align-items: center; margin-bottom: 20rpx; }
.date-input { flex: 1; height: 80rpx; border: 2rpx solid #ddd; border-radius: 10rpx; display: flex; align-items: center; padding: 0 24rpx; color: #333; } .date-input { flex: 1; height: 80rpx; border: 2rpx solid #ddd; border-radius: 10rpx; display: flex; align-items: center; padding: 0 24rpx; color: #333; }
.placeholder { color: #999; } .placeholder { color: #999; }
.to-text { color: #666; } .to-text { color: #666; }

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB