3.9提交
This commit is contained in:
parent
1fa822ed72
commit
40f5ddf4a5
@ -2,7 +2,7 @@
|
||||
<view class="emptybox">
|
||||
<view class="empty-image-wrap" :style="imageWrapStyle">
|
||||
<up-image
|
||||
:src="props.emptyImg || emptyImg"
|
||||
:src="emptyImage || emptyImg"
|
||||
:width="renderWidth"
|
||||
:height="renderHeight"
|
||||
:mode="imgMode"
|
||||
@ -16,7 +16,7 @@
|
||||
import { computed } from 'vue';
|
||||
import emptyImg from "@/static/icon_empty.png"
|
||||
const props = defineProps({
|
||||
emptyImg: {
|
||||
emptyImage: {
|
||||
type: String,
|
||||
default: ''
|
||||
},
|
||||
|
||||
@ -1698,7 +1698,7 @@
|
||||
"list": [
|
||||
{
|
||||
"name": "",
|
||||
"path": "/pages_app/myAccount/myAccount",
|
||||
"path": "pages_chat/outPatient/outPatient",
|
||||
"query": ""
|
||||
}
|
||||
]
|
||||
|
||||
@ -8,12 +8,12 @@
|
||||
<!-- 反馈输入区域 -->
|
||||
<view class="feedback-input-container">
|
||||
<view class="input-area">
|
||||
<text class="input-placeholder" v-show="!feedbackText">欢迎对我们的软件提供建议,帮助我们更好更快的改进"肝胆相照"APP (200字以内)</text>
|
||||
<!-- <text class="input-placeholder" v-show="!feedbackText">欢迎对我们的软件提供建议,帮助我们更好更快的改进"肝胆相照"APP (200字以内)</text> -->
|
||||
<textarea
|
||||
class="feedback-textarea"
|
||||
v-model="feedbackText"
|
||||
:maxlength="200"
|
||||
placeholder=""
|
||||
placeholder="尊敬的医生您好,若在交流过程中发现患者发布不适当内容,请您及时填写相关信息,我们将第一时间处理,谢谢您的支持。"
|
||||
@input="onInput"
|
||||
></textarea>
|
||||
<!-- <view class="voice-button" @click="toggleVoiceInput">
|
||||
@ -24,7 +24,7 @@
|
||||
|
||||
<!-- 底部提交按钮 -->
|
||||
<view class="submit-container">
|
||||
<button class="submit-btn" @click="submitFeedback" :disabled="!feedbackText.trim()">
|
||||
<button class="submit-btn" @click="submitFeedback" >
|
||||
提交
|
||||
</button>
|
||||
</view>
|
||||
@ -200,10 +200,10 @@
|
||||
.submit-btn {
|
||||
width: 100%;
|
||||
height: 88rpx;
|
||||
background-color: #ffffff;
|
||||
border: 2rpx solid #e0e0e0;
|
||||
background-color: #fff;
|
||||
border: 2rpx solid #8B2316;
|
||||
border-radius: 8rpx;
|
||||
color: #ff0000;
|
||||
color: #8B2316;
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
display: flex;
|
||||
|
||||
@ -32,9 +32,7 @@
|
||||
<view class="section-header">分组成员</view>
|
||||
|
||||
<view class="add-member" @click="addMember">
|
||||
<view class="add-circle">
|
||||
<up-icon name="plus" size="34" color="#bfbfbf" />
|
||||
</view>
|
||||
<up-image :src="addImg" width="120rpx" height="120rpx" />
|
||||
<text class="add-text">添加组患者</text>
|
||||
</view>
|
||||
<!-- 已选中的成员 -->
|
||||
@ -68,6 +66,7 @@
|
||||
import navTo from '@/utils/navTo.js'
|
||||
import docUrl from '@/utils/docUrl.js'
|
||||
import delImg from "@/static/iv_delete.png"
|
||||
import addImg from "@/static/addpatient.png"
|
||||
import api from '@/api/api.js'
|
||||
import unidialog from '@/components/dialog/dialog.vue'
|
||||
const groupUuid = ref('')
|
||||
@ -208,13 +207,13 @@
|
||||
padding-bottom: 160rpx;
|
||||
}
|
||||
.save-text{
|
||||
background:#8B2316;
|
||||
color:#8B2316;
|
||||
font-size: 30rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 15rpx 25rpx;
|
||||
color:#fff;
|
||||
|
||||
border-radius: 12rpx;
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<view class="group-manage-page">
|
||||
<view class="nabox">
|
||||
<view class="navbox">
|
||||
<view class="status_bar"></view>
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
@ -31,7 +31,7 @@
|
||||
|
||||
<!-- 所有分组 -->
|
||||
<view class="all-groups-section">
|
||||
<view class="section-title">所有分组(选择分组)</view>
|
||||
<view class="section-title"><text calss="red">所有分组</text>(选择分组)</view>
|
||||
<view class="tag-list">
|
||||
<view
|
||||
class="tag-item"
|
||||
@ -170,7 +170,7 @@ const saveGroups = () => {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
min-height: 300rpx;
|
||||
padding: 30rpx;
|
||||
border-bottom: 1rpx solid #f0f0f0;
|
||||
border-bottom: 20rpx solid #f0f0f0;
|
||||
}
|
||||
|
||||
.all-groups-section {
|
||||
@ -178,9 +178,12 @@ const saveGroups = () => {
|
||||
}
|
||||
|
||||
.section-title {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
font-size: 30rpx;
|
||||
color: #999;
|
||||
margin-bottom: 20rpx;
|
||||
.red{
|
||||
color: #8b2316;
|
||||
}
|
||||
}
|
||||
|
||||
.tag-list {
|
||||
|
||||
@ -7,7 +7,8 @@
|
||||
left-icon="left"
|
||||
title="常用银行卡"
|
||||
@clickLeft="goBack"
|
||||
right-text="添加"
|
||||
right-icon="plusempty"
|
||||
right-icon-color="#8B2316"
|
||||
@clickRight="addBankCard"
|
||||
color="#8B2316"
|
||||
|
||||
@ -27,6 +28,7 @@
|
||||
>
|
||||
<template v-slot:right>
|
||||
<view class="swipe-right">
|
||||
|
||||
<view class="card-delete-btn" @click.stop="handleDeleteBankCard(card)">删除</view>
|
||||
</view>
|
||||
</template>
|
||||
@ -50,7 +52,11 @@
|
||||
</uni-swipe-action-item>
|
||||
</uni-swipe-action>
|
||||
</view>
|
||||
<empty v-if="bankCards.length === 0" imgWidth="50%" empty-img="/static/empty_bank.png" empty-desc="使用常用卡,支付更快捷"></empty>
|
||||
<view class="empty-container" v-if="bankCards.length === 0">
|
||||
<image :src="emptyBankImg" class="empty-image"></image>
|
||||
<text class="empty-text">使用常用卡,支付更快捷</text>
|
||||
</view>
|
||||
<!-- <empty v-if="bankCards.length === 0" :imgWidth="'218rpx'" :imgHeight="'164rpx'" :emptyImage="emptyBankImg" emptyDesc="使用常用卡,支付更快捷"></empty> -->
|
||||
|
||||
<!-- 底部导航指示器 -->
|
||||
<view class="bottom-indicator"></view>
|
||||
@ -62,6 +68,7 @@ import { ref, onMounted } from 'vue';
|
||||
import navTo from '@/utils/navTo';
|
||||
import api from '@/api/api';
|
||||
import empty from "@/components/empty/empty.vue"
|
||||
import emptyBankImg from "@/static/empty_bank.png"
|
||||
const bankCards = ref([]);
|
||||
const openedSwipeUuid = ref('');
|
||||
import { onLoad,onBackPress } from '@dcloudio/uni-app';
|
||||
@ -199,6 +206,23 @@ onMounted(() => {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.empty-container {
|
||||
height:800rpx;
|
||||
min-width:600rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
.empty-image {
|
||||
width: 218rpx;
|
||||
height: 164rpx;
|
||||
}
|
||||
.empty-text {
|
||||
margin-top: 20rpx;
|
||||
font-size: 30rpx;
|
||||
color: #999;
|
||||
}
|
||||
}
|
||||
.bank-card-page {
|
||||
min-height: 100vh;
|
||||
background: #F5F5F5;
|
||||
@ -241,6 +265,7 @@ onMounted(() => {
|
||||
border-radius: 16rpx;
|
||||
padding: 30rpx;
|
||||
display: flex;
|
||||
margin-bottom: 20rpx;
|
||||
align-items: center;
|
||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
|
||||
|
||||
|
||||
@ -366,15 +366,16 @@ const onConfirmSms = async () => {
|
||||
});
|
||||
if (res.code === 200) {
|
||||
uni.showToast({ title: '银行卡添加成功', icon: 'none' });
|
||||
if (returnTo.value) {
|
||||
uni.redirectTo({
|
||||
url: returnTo.value
|
||||
});
|
||||
} else {
|
||||
navTo({
|
||||
url: '/pages_app/idcardAuth/bankCardList'
|
||||
});
|
||||
}
|
||||
uni.navigateBack();
|
||||
// if (returnTo.value) {
|
||||
// uni.redirectTo({
|
||||
// url: returnTo.value
|
||||
// });
|
||||
// } else {
|
||||
// navTo({
|
||||
// url: '/pages_app/idcardAuth/bankCardList'
|
||||
// });
|
||||
// }
|
||||
} else {
|
||||
uni.showToast({ title: res.msg || '银行卡添加失败', icon: 'none' });
|
||||
}
|
||||
@ -599,7 +600,7 @@ const onCancelSms = () => {
|
||||
box-sizing: border-box;
|
||||
|
||||
&.card-number-input.is-filled {
|
||||
font-weight: 600;
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -13,7 +13,8 @@
|
||||
></uni-nav-bar>
|
||||
</view>
|
||||
|
||||
<!-- 账户余额区域 -->
|
||||
<view class="contentbox">
|
||||
<!-- 账户余额区域 -->
|
||||
<view class="account-summary">
|
||||
<view class="profile-section">
|
||||
<image class="profile-avatar" :src="avatar" mode="aspectFill"></image>
|
||||
@ -61,9 +62,10 @@
|
||||
<uni-icons type="right" size="25" color="#999"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部指示器 -->
|
||||
<view class="bottom-indicator"></view>
|
||||
<!-- <view class="bottom-indicator"></view> -->
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@ -73,7 +75,7 @@ import api from '@/api/api.js'
|
||||
import docUrl from '@/utils/docUrl'
|
||||
import withdrawalsIcon from '@/static/withdrawals.png'
|
||||
import accountIcon from '@/static/account_icon.png'
|
||||
import { onLoad,onBackPress } from '@dcloudio/uni-app';
|
||||
import { onLoad,onBackPress,onShow } from '@dcloudio/uni-app';
|
||||
const from = ref('');
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
@ -93,7 +95,7 @@ const withdrawalBalanceFee = ref(0)
|
||||
const lessWithdrawalBalance = ref(0)
|
||||
const avatar = ref('')
|
||||
|
||||
onMounted(() => {
|
||||
onShow(() => {
|
||||
getMyAccount()
|
||||
|
||||
let userInfo= uni.getStorageSync('userInfo')
|
||||
@ -164,6 +166,14 @@ const getMyAccount = async () => {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.contentbox{
|
||||
position: fixed;
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
|
||||
}
|
||||
.my-account-page {
|
||||
background-color: #f5f5f5;
|
||||
min-height: 100vh;
|
||||
@ -172,13 +182,11 @@ const getMyAccount = async () => {
|
||||
|
||||
// 账户余额区域样式
|
||||
.account-summary {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
background: linear-gradient(135deg, #8B2316, #A0522D);
|
||||
// margin: 30rpx;
|
||||
// border-radius: 20rpx;
|
||||
padding: 30rpx 40rpx 10rpx;
|
||||
text-align: center;
|
||||
box-shadow: 0 8rpx 24rpx rgba(139, 35, 22, 0.3);
|
||||
position: relative;
|
||||
|
||||
.profile-section {
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="info-label">支付方式:</text>
|
||||
<text class="info-value">{{ detail.payType || "--" }}</text>
|
||||
<text class="info-value">{{ detail.payType}}</text>
|
||||
</view>
|
||||
<view class="info-row">
|
||||
<text class="info-label">支付时间:</text>
|
||||
@ -77,7 +77,7 @@ const formatAmount = (value) => {
|
||||
if (value === undefined || value === null || value === "") return "";
|
||||
const num = Number(value);
|
||||
if (Number.isNaN(num)) return "";
|
||||
const amount = num > 1000 ? num / 100 : num;
|
||||
const amount = num / 100;
|
||||
return `${amount.toFixed(2)}元`;
|
||||
};
|
||||
|
||||
@ -90,13 +90,15 @@ const formatStatus = (raw) => {
|
||||
};
|
||||
|
||||
const formatPayType = (raw) => {
|
||||
if (raw === undefined || raw === null || raw === "") return "免费";
|
||||
const text = String(raw).toLowerCase();
|
||||
if (text === "0" || text === "free") return "免费";
|
||||
if (text === "1" || text.includes("wx") || text.includes("wechat")) return "微信";
|
||||
if (text === "2" || text.includes("ali")) return "支付宝";
|
||||
if (text === "3" || text.includes("balance")) return "余额";
|
||||
return String(raw);
|
||||
if(raw=='balance'){
|
||||
return '余额支付';
|
||||
}else if(raw=='FREE'){
|
||||
return '免费'
|
||||
}else if(raw=='USEWELFARENUM'){
|
||||
return '免费次数';
|
||||
}else if(raw=='wx'){
|
||||
return '微信支付';
|
||||
}
|
||||
};
|
||||
|
||||
const fetchCoursewareDetail = async () => {
|
||||
@ -115,10 +117,11 @@ const fetchCoursewareDetail = async () => {
|
||||
author: data.provider_name || data.author || data.nickname || "",
|
||||
amountText: formatAmount(data.pay_amount || data.total_fee || data.amount || data.price || 0),
|
||||
createTime: formatDateTime(data.create_date || data.create_time || data.order_time || ""),
|
||||
payType: formatPayType(data.pay_type_name || data.pay_type || data.payment_method || ""),
|
||||
payType: formatPayType(data.pay_channel),
|
||||
payTime: formatDateTime(data.pay_date || data.pay_time || ""),
|
||||
};
|
||||
} catch (error) {
|
||||
|
||||
uni.showToast({
|
||||
title: "获取详情失败",
|
||||
icon: "none",
|
||||
@ -152,8 +155,8 @@ onLoad((options) => {
|
||||
}
|
||||
|
||||
.download-no {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
font-size: 30rpx;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.pay-status {
|
||||
@ -192,8 +195,8 @@ onLoad((options) => {
|
||||
}
|
||||
|
||||
.info-label {
|
||||
font-size: 18rpx;
|
||||
color: #333;
|
||||
font-size: 30rpx;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
|
||||
@ -49,12 +49,15 @@
|
||||
<scroll-view
|
||||
scroll-y
|
||||
class="courseware-list"
|
||||
:scroll-top="listScrollTop"
|
||||
:scroll-into-view="scrollIntoViewId"
|
||||
refresher-enabled
|
||||
@refresherrefresh="onRefresh"
|
||||
:refresher-triggered="refreshing"
|
||||
@scrolltolower="onLoadMore"
|
||||
:lower-threshold="100"
|
||||
>
|
||||
<view id="courseware-top"></view>
|
||||
<!-- 空状态 -->
|
||||
<view v-if="coursewareList.length === 0 && !loading" class="empty-state">
|
||||
<text>{{ activeTab === 'download' ? '暂无下载数据' : '暂无分享数据' }}</text>
|
||||
@ -62,21 +65,22 @@
|
||||
|
||||
<view class="courseware-item" v-for="(item, index) in coursewareList" :key="index" @click="onItemClick(item)">
|
||||
<view class="item-content">
|
||||
<view class="courseware-provider" v-if="activeTab === 'share'">
|
||||
<text class="label">下载医生:</text>
|
||||
<text class="value">{{ item.providername }}</text>
|
||||
</view>
|
||||
<view class="courseware-name">
|
||||
<text class="label">课件名称:</text>
|
||||
<text class="value">{{ item.name }}</text>
|
||||
</view>
|
||||
<view class="courseware-provider" v-if="item.providername">
|
||||
<text class="label">{{ activeTab === 'download' ? '提供者' : '下载者' }}:</text>
|
||||
<text class="value">{{ item.providername }}</text>
|
||||
</view>
|
||||
|
||||
<view class="courseware-time">
|
||||
<text class="label">时间:</text>
|
||||
<text class="value">{{ item.time }}</text>
|
||||
</view>
|
||||
<view class="courseware-status" v-if="activeTab === 'download'">
|
||||
<text class="label">状态:</text>
|
||||
<text class="value status-paid">{{ item.status }}</text>
|
||||
<text class="value status-paid">{{item.status}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -95,13 +99,15 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from 'vue';
|
||||
import { ref, onMounted, nextTick } from 'vue';
|
||||
import api from '@/api/api';
|
||||
import navTo from '@/utils/navTo.js';
|
||||
import { onLoad,onBackPress } from '@dcloudio/uni-app';
|
||||
import downLoadImg from "@/static/course_download.png"
|
||||
import moneyImg from "@/static/course_yuan.png"
|
||||
const activeTab = ref('download');
|
||||
const listScrollTop = ref(0);
|
||||
const scrollIntoViewId = ref('');
|
||||
const refreshing = ref(false);
|
||||
const loading = ref(false);
|
||||
const noMore = ref(false);
|
||||
@ -126,7 +132,16 @@ onLoad((options) => {
|
||||
onMounted(() => {
|
||||
onRefresh();
|
||||
});
|
||||
|
||||
const getStatusText = (status) => {
|
||||
console.log(status);
|
||||
if(status === 'paid'){
|
||||
return '已支付';
|
||||
}else if(status === 'unpaid'){
|
||||
return '未支付';
|
||||
}else{
|
||||
return '已分享';
|
||||
}
|
||||
};
|
||||
const goBack = () => {
|
||||
if(!from.value){
|
||||
plus.runtime.quit();
|
||||
@ -143,6 +158,11 @@ onLoad((options) => {
|
||||
})
|
||||
const switchTab = (tab) => {
|
||||
activeTab.value = tab;
|
||||
listScrollTop.value = 0;
|
||||
scrollIntoViewId.value = '';
|
||||
nextTick(() => {
|
||||
scrollIntoViewId.value = 'courseware-top';
|
||||
});
|
||||
// 切换标签时重置数据
|
||||
page.value = 1;
|
||||
noMore.value = false;
|
||||
@ -182,7 +202,7 @@ const onRefresh = () => {
|
||||
uuid: item.uuid,
|
||||
order_id: item.order_id,
|
||||
type: item.type,
|
||||
providername: item.providername
|
||||
providername: item.downloadername
|
||||
}));
|
||||
|
||||
// 判断是否还有更多数据
|
||||
@ -354,7 +374,7 @@ const onLoadMore = () => {
|
||||
.courseware-list {
|
||||
// height: calc(100vh - 180rpx - 116rpx - 80rpx);
|
||||
position: fixed;
|
||||
top: 336rpx; // 调整顶部位置,为固定的摘要栏腾出空间
|
||||
top: calc(var(--status-bar-height) + 44px + 124rpx + 80rpx); // 调整顶部位置,为固定的摘要栏腾出空间
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
@ -83,10 +83,14 @@ import emptyImg from "@/static/icon_empty.png"
|
||||
import api from '@/api/api.js';
|
||||
import { onBackPress,onLoad } from '@dcloudio/uni-app';
|
||||
const from=ref('');
|
||||
const user_uuid=ref('');
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
from.value = options.from;
|
||||
}
|
||||
let userInfo= uni.getStorageSync('userInfo')
|
||||
user_uuid.value = userInfo.uuid;
|
||||
loadFirstTwoPages();
|
||||
});
|
||||
onBackPress(() => {
|
||||
if(!from.value){
|
||||
@ -154,6 +158,7 @@ const getFlowerList = () => {
|
||||
|
||||
api.getFlowerList({
|
||||
page: page.value,
|
||||
user_uuid: user_uuid.value,
|
||||
}).then(res => {
|
||||
console.log('接口返回数据:', res);
|
||||
if (res.code === 200 && res.data) {
|
||||
@ -369,9 +374,7 @@ const testLoadMore = () => {
|
||||
onLoadMore();
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
await loadFirstTwoPages();
|
||||
});
|
||||
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
</view>
|
||||
<view class="history-content">
|
||||
<view class="history-time">{{ formatDate(item.createDate) }}</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="status-info">
|
||||
<up-image :src="goImg" width="30rpx" height="30rpx" v-if="item.status==2"></up-image>
|
||||
@ -174,6 +174,7 @@ const getApplyList = async () => { // 申请列表
|
||||
}
|
||||
const res = await api.applyListOperate(data);
|
||||
if(res.code === 200){
|
||||
|
||||
uni.showToast({
|
||||
title: '操作成功',
|
||||
icon: 'none',
|
||||
@ -181,6 +182,11 @@ const getApplyList = async () => { // 申请列表
|
||||
});
|
||||
getApplyList();
|
||||
getRelationRecordLately();
|
||||
if(status == 2){
|
||||
navTo({
|
||||
url: `/pages_app/patientRemark/patientRemark?uuid=${uuid}`
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
onShow(() => {
|
||||
@ -332,8 +338,8 @@ const addPatient = () => {
|
||||
|
||||
.reminder-text {
|
||||
flex: 1;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
font-size: 32rpx;
|
||||
color: #999;
|
||||
line-height: 1.5;
|
||||
}
|
||||
}
|
||||
@ -478,14 +484,14 @@ const addPatient = () => {
|
||||
flex: 1;
|
||||
|
||||
.nickname {
|
||||
font-size: 28rpx;
|
||||
font-size: 30rpx;
|
||||
font-weight: normal;
|
||||
color: #8B2316;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.history-text {
|
||||
font-size: 28rpx;
|
||||
font-size: 30rpx;
|
||||
color: #333;
|
||||
line-height: 1.4;
|
||||
margin-bottom: 20rpx;
|
||||
|
||||
@ -88,11 +88,11 @@
|
||||
<text class="action-text">发消息</text>
|
||||
</view>
|
||||
<view class="action" @click="goMakePlan">
|
||||
<up-image :src="planImg" width="44rpx" height="44rpx" ></up-image>
|
||||
<up-image :src="recordImg" width="44rpx" height="44rpx" ></up-image>
|
||||
<text class="action-text">制定随访计划</text>
|
||||
</view>
|
||||
<view class="action" @click="recordIllness">
|
||||
<up-image :src="recordImg" width="44rpx" height="44rpx" ></up-image>
|
||||
<up-image :src="planImg" width="44rpx" height="44rpx" ></up-image>
|
||||
<text class="action-text">记录病情</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -22,16 +22,16 @@
|
||||
<!-- 筛选排序栏 -->
|
||||
<view class="filter-sort-bar">
|
||||
<view class="sort-section" @click="toggleGroupSort">
|
||||
<text class="sort-label">{{ groupSortTitle }}</text>
|
||||
<text class="sort-label" :class="{ 'is-selected': groupSortSelected }">{{ groupSortTitle }}</text>
|
||||
<view class="imgbox">
|
||||
<up-image :src="upImg" width="26rpx" height="26rpx" ></up-image>
|
||||
<up-image :src="groupSortIcon" width="26rpx" height="26rpx" ></up-image>
|
||||
</view>
|
||||
</view>
|
||||
<view class="divider"></view>
|
||||
<view class="current-sort" @click="toggleInnerSort">
|
||||
<text class="sort-text">{{ innerSortTitle }}</text>
|
||||
<text class="sort-text" :class="{ 'is-selected': innerSortSelected }">{{ innerSortTitle }}</text>
|
||||
<view class="imgbox">
|
||||
<up-image :src="upImg" width="26rpx" height="26rpx" ></up-image>
|
||||
<up-image :src="innerSortIcon" width="26rpx" height="26rpx" ></up-image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -105,12 +105,15 @@ import upImg from "@/static/triangle_green_theme.png"
|
||||
import downImg from "@/static/triangle_normal.png"
|
||||
import groupRightImg from "@/static/groupright_big.png"
|
||||
import groupDownImg from "@/static/groupup_big.png"
|
||||
import normalImg from "@/static/triangle_normal.png"
|
||||
import api from '@/api/api.js';
|
||||
import docUrl from '@/utils/docUrl'
|
||||
import dayjs from 'dayjs'
|
||||
import navTo from '@/utils/navTo.js'
|
||||
const list_sort = ref(0);
|
||||
const group_sort = ref(0);
|
||||
const groupSortSelected = ref(false);
|
||||
const innerSortSelected = ref(false);
|
||||
const from = ref('');
|
||||
onLoad((options) => {
|
||||
if(options.from){
|
||||
@ -148,9 +151,17 @@ const formatYMD = (val) => {
|
||||
return d.isValid() ? d.format('YYYY-MM-DD') : '';
|
||||
};
|
||||
|
||||
// 排序栏标题
|
||||
const groupSortTitle = computed(() => group_sort.value === 0 ? '按首字母' : '分组人数');
|
||||
const innerSortTitle = computed(() => list_sort.value === 0 ? '按首字母' : '随访时间');
|
||||
// 排序栏标题/图标(初始化为默认文案+灰色图标,选择后展示具体文案+主题图标)
|
||||
const groupSortTitle = computed(() => {
|
||||
if (!groupSortSelected.value) return '分组排序';
|
||||
return group_sort.value === 0 ? '按首字母' : '分组人数';
|
||||
});
|
||||
const innerSortTitle = computed(() => {
|
||||
if (!innerSortSelected.value) return '组内排序';
|
||||
return list_sort.value === 0 ? '按首字母' : '随访时间';
|
||||
});
|
||||
const groupSortIcon = computed(() => groupSortSelected.value ? upImg : normalImg);
|
||||
const innerSortIcon = computed(() => innerSortSelected.value ? upImg : normalImg);
|
||||
|
||||
|
||||
const fetchGroupList = async () => {
|
||||
@ -261,6 +272,7 @@ const chooseGroupSort = (type) => {
|
||||
selectedGroupSort.value = type;
|
||||
// 修改接口字段:按首字母=0,分组人数=1
|
||||
group_sort.value = type === 'letter' ? 0 : 1;
|
||||
groupSortSelected.value = true;
|
||||
closeGroupSort();
|
||||
fetchGroupList();
|
||||
};
|
||||
@ -282,6 +294,7 @@ const chooseInnerSort = (type) => {
|
||||
selectedInnerSort.value = type;
|
||||
// 组内排序:按首字母=0,随访时间=1
|
||||
list_sort.value = type === 'letter' ? 0 : 1;
|
||||
innerSortSelected.value = true;
|
||||
closeInnerSort();
|
||||
fetchGroupList();
|
||||
};
|
||||
@ -327,7 +340,7 @@ const createNew = () => {
|
||||
|
||||
.popup-panel {
|
||||
position: fixed;
|
||||
top: 220rpx; /* 紧贴筛选栏 */
|
||||
top: calc(var(--status-bar-height) + 44px + 82rpx); /* 紧贴筛选栏 */
|
||||
left: 0;
|
||||
right: 0;
|
||||
background: #fff;
|
||||
@ -498,7 +511,10 @@ const createNew = () => {
|
||||
|
||||
.sort-label {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
color: #999;
|
||||
&.is-selected {
|
||||
color: #8B2316;
|
||||
}
|
||||
}
|
||||
|
||||
.sort-icon.down {
|
||||
@ -524,7 +540,10 @@ const createNew = () => {
|
||||
|
||||
.sort-text {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
color: #999;
|
||||
&.is-selected {
|
||||
color: #8B2316;
|
||||
}
|
||||
}
|
||||
|
||||
.sort-icon.up {
|
||||
@ -542,7 +561,7 @@ const createNew = () => {
|
||||
}
|
||||
|
||||
.patient-list-section {
|
||||
top: 240rpx;
|
||||
top: calc(var(--status-bar-height) + 44px + 100rpx);
|
||||
width:100%;
|
||||
bottom:0;
|
||||
position: fixed;
|
||||
|
||||
@ -99,12 +99,7 @@
|
||||
|
||||
|
||||
<view class="listbox">
|
||||
<!-- 使用 up-index-list 索引组件,数据动态渲染 -->
|
||||
<up-index-list :index-list="indexList" v-show="loadFinish" >
|
||||
|
||||
<!-- 特殊操作项 -->
|
||||
<template #header>
|
||||
<view class="special-actions" >
|
||||
<view class="special-actions" >
|
||||
<view class="action-item" @click="addNewPatient">
|
||||
<view class="action-icon new-patient">
|
||||
<uni-icons type="person" size="24" color="#ffffff"></uni-icons>
|
||||
@ -127,13 +122,14 @@
|
||||
<uni-icons type="right" size="20" color="#999"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
<!-- 使用 up-index-list 索引组件,数据动态渲染 -->
|
||||
<up-index-list :index-list="indexList" v-show="loadFinish" v-if="patientList.length > 0">
|
||||
<template v-for="group in patientGroups" :key="group.letter" >
|
||||
<up-index-item >
|
||||
<up-index-anchor :text="group.letter" />
|
||||
<up-index-anchor :text="group.letter" v-if="group.items.length > 0"/>
|
||||
|
||||
<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" v-if="group.items.length > 0">
|
||||
<template v-if="item.placeholder">
|
||||
<view class="patient-avatar-placeholder">
|
||||
<uni-icons type="person" size="32" color="#ffffff" @click="goPatientDetail(item.uuid)"></uni-icons>
|
||||
@ -149,10 +145,11 @@
|
||||
</view>
|
||||
</view>
|
||||
<view class="patient-status">
|
||||
<uni-icons type="compose" size="20" color="#8B2316" @click.stop="editPatient(item.uuid)"></uni-icons>
|
||||
<up-image :src="editImg" width="35rpx" height="35rpx" @click.stop="editPatient(item.uuid)"></up-image>
|
||||
<text class="follow-date">随访于{{ item.joinDateYMD }}</text>
|
||||
</view>
|
||||
</view>
|
||||
<empty v-if="group.items.length === 0" :emptyDesc="'您暂无随访患者'"></empty>
|
||||
</view>
|
||||
</up-index-item>
|
||||
</template>
|
||||
@ -252,6 +249,7 @@
|
||||
import { onShow,onLoad,onBackPress} from "@dcloudio/uni-app";
|
||||
import dayImg from "@/static/visit_data11.png"
|
||||
import planImg from "@/static/visitplan.png"
|
||||
import editImg from "@/static/edit_patitent.png"
|
||||
import api from '@/api/api.js';
|
||||
import navTo from '@/utils/navTo.js';
|
||||
import docUrl from '@/utils/docUrl.js';
|
||||
@ -274,6 +272,7 @@
|
||||
import pinyin from 'pinyin';
|
||||
import dayjs from 'dayjs'
|
||||
import lineImg from "@/static/item_visitplan_fg.png"
|
||||
import empty from '@/components/empty/empty.vue'
|
||||
const loadFinish = ref(false);
|
||||
//import ConversationList from './conversation-list/index.vue'
|
||||
const title = ref('患者消息');
|
||||
@ -398,7 +397,12 @@
|
||||
}
|
||||
const letters = Array.from(map.keys()).sort((a,b) => a.localeCompare(b));
|
||||
patientGroups.value = letters.map(l => ({ letter: l, items: map.get(l) }));
|
||||
console.log(patientGroups.value)
|
||||
rebuildIndexList();
|
||||
if(source.length === 0){
|
||||
console.log(111122)
|
||||
indexList.value=[]
|
||||
}
|
||||
nextTick(() => {
|
||||
setTimeout(() => {
|
||||
uni.hideLoading();
|
||||
@ -615,14 +619,15 @@
|
||||
break;
|
||||
case 'list':
|
||||
title.value = '患者列表';
|
||||
if (patientDataLoaded.value) {
|
||||
loadFinish.value = true;
|
||||
break;
|
||||
}
|
||||
// if (patientDataLoaded.value) {
|
||||
// loadFinish.value = true;
|
||||
// break;
|
||||
// }
|
||||
uni.showLoading({
|
||||
title: '加载中...',
|
||||
mask: true
|
||||
});
|
||||
getApplyList();
|
||||
patientListByGBK();
|
||||
// 显示患者列表
|
||||
break;
|
||||
@ -878,7 +883,7 @@
|
||||
}
|
||||
|
||||
.tab-text {
|
||||
font-size: 28rpx;
|
||||
font-size: 32rpx;
|
||||
color: #999999;
|
||||
transition: color 0.3s;
|
||||
}
|
||||
@ -913,6 +918,10 @@
|
||||
:deep(.u-index-list__scroll-view){
|
||||
height:calc(100vh - var(--status-bar-height) - 44px - 103rpx);
|
||||
}
|
||||
:deep(.hide-index-bar .u-index-list__sidebar),
|
||||
:deep(.hide-index-bar .u-index-list__index-box) {
|
||||
display: none !important;
|
||||
}
|
||||
// position: fixed;
|
||||
width: 100%;
|
||||
|
||||
|
||||
@ -27,18 +27,21 @@
|
||||
</view>
|
||||
<view class="form-block">
|
||||
<view class="label">描述</view>
|
||||
<textarea class="textarea" v-model.trim="note" :placeholder="groupInfo.note || '补充患者关键信息,方便随访患者'" placeholder-class="ph" auto-height maxlength="140"/>
|
||||
<view class="textarea-wrap">
|
||||
<textarea class="textarea" v-model.trim="note" :placeholder="groupInfo.note || '补充患者关键信息,方便随访患者'" placeholder-class="ph" auto-height maxlength="100"/>
|
||||
<view class="textarea-count">已输入{{ noteLength }}/100</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="bottom-bar">
|
||||
<button class="save-btn" @click="updateNicknameNote">保存</button>
|
||||
<button class="save-btn" @click="updateNicknameNote">完成</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { ref, computed } from 'vue'
|
||||
import api from '@/api/api.js'
|
||||
import navTo from '@/utils/navTo.js'
|
||||
import { onLoad, onShow } from '@dcloudio/uni-app'
|
||||
@ -48,6 +51,7 @@
|
||||
const patientUuid = ref('')
|
||||
const patientCardData = ref({})
|
||||
const groupInfo = ref({})
|
||||
const noteLength = computed(() => (note.value || '').length)
|
||||
|
||||
const goBack = () => {
|
||||
uni.navigateBack()
|
||||
@ -104,7 +108,13 @@
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.contentbox{
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 125rpx;
|
||||
overflow-y: scroll;
|
||||
z-index: 1;
|
||||
}
|
||||
.remark-page{
|
||||
height: 100vh;
|
||||
@ -144,12 +154,24 @@
|
||||
.textarea{
|
||||
background: #f8f8f8;
|
||||
border-radius: 12rpx;
|
||||
padding: 24rpx;
|
||||
padding: 24rpx 24rpx 58rpx;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
min-height: 180rpx;
|
||||
min-height: 250rpx;
|
||||
box-sizing: border-box;
|
||||
width: 100%;
|
||||
line-height: 1.6;
|
||||
}
|
||||
.textarea-wrap{
|
||||
position: relative;
|
||||
}
|
||||
.textarea-count{
|
||||
position: absolute;
|
||||
right: 20rpx;
|
||||
bottom: 16rpx;
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
}
|
||||
.ph{
|
||||
color: #bfbfbf;
|
||||
}
|
||||
@ -166,7 +188,7 @@
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 92rpx;
|
||||
background: #8B2316;
|
||||
background: #3ec7c0;
|
||||
color: #fff;
|
||||
border: none;
|
||||
border-radius: 12rpx;
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="cell" @click="goGroup">
|
||||
<view class="cell" @click="goRemark">
|
||||
<text class="cell-left">设置分组</text>
|
||||
<view class="cell-right">
|
||||
<text class="cell-desc">{{ groupInfo.name || '通过分组给患者分类' }}</text>
|
||||
@ -53,11 +53,12 @@
|
||||
<uni-icons type="right" size="20" color="#999"></uni-icons>
|
||||
</view>
|
||||
</view>
|
||||
<view class="danger-action">
|
||||
<button class="danger-btn" @click="visible=true">解除随访</button>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="danger-block">
|
||||
<text class="danger-text" @click="visible=true">解除随访</text>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<unidialog :visible="visible" :content="message" @close="visible=false" @confirm="deleteFollowUp" ></unidialog>
|
||||
</template>
|
||||
@ -108,8 +109,10 @@
|
||||
patient_uuid: patientUuid.value
|
||||
}).then(res => {
|
||||
if(res.code == 200){
|
||||
patientName.value = res.group.nickname || res.patient.realName
|
||||
message.value = `解除[${patientName.value}]的随访关系?`
|
||||
console.log(res.patient)
|
||||
patientName.value = res.patient.nickname?res.patient.nickname:res.patient.realname;
|
||||
console.log(patientName.value)
|
||||
message.value = `确认解除[${patientName.value}]的随访关系?`
|
||||
patientCardData.value = res
|
||||
groupInfo.value = res.group || {}
|
||||
}
|
||||
@ -124,9 +127,9 @@
|
||||
title: '解除成功',
|
||||
icon: 'none'
|
||||
})
|
||||
uni.redirectTo({
|
||||
url: '/pages_app/patientMsg/patientMsg'
|
||||
})
|
||||
setTimeout(() => {
|
||||
uni.navigateBack()
|
||||
}, 1000)
|
||||
}
|
||||
visible.value = false
|
||||
})
|
||||
@ -143,7 +146,7 @@
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
bottom: 0rpx;
|
||||
background: #fff;
|
||||
.cell{
|
||||
display: flex;
|
||||
@ -168,14 +171,20 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.danger-block{
|
||||
margin-top: 30rpx;
|
||||
.danger-action{
|
||||
margin-top: 30rpx;
|
||||
background: #fff;
|
||||
padding: 40rpx 0;
|
||||
|
||||
padding: 20rpx 30rpx calc(20rpx + env(safe-area-inset-bottom));
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
.align-center{ align-items: center; }
|
||||
.danger-text{
|
||||
.danger-btn{
|
||||
width: 100%;
|
||||
height: 92rpx;
|
||||
line-height: 92rpx;
|
||||
border: 1rpx solid #8B2316;
|
||||
background: #fff;
|
||||
border-radius: 12rpx;
|
||||
color: #8B2316;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
|
||||
@ -46,8 +46,8 @@ import empty from '@/components/empty/empty.vue'
|
||||
import api from '@/api/api.js'
|
||||
import navTo from '@/utils/navTo'
|
||||
const title = ref('执业地点管理')
|
||||
import editImg from '@/static/images/edit_icon.png'
|
||||
import deleteImg from '@/static/images/delete_icon.png'
|
||||
import editImg from '@/static/edit_icon.png'
|
||||
import deleteImg from '@/static/delete_icon.png'
|
||||
const addressList = ref([])
|
||||
|
||||
const getTypeTag = (type) => {
|
||||
@ -175,11 +175,11 @@ const addNew = () => {
|
||||
.action {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8rpx;
|
||||
|
||||
}
|
||||
|
||||
.icon { font-size: 26rpx; }
|
||||
.text { font-size: 26rpx; color: #666; }
|
||||
.text { font-size: 26rpx; color: #666; margin-left: 8rpx;margin-top: 3rpx;}
|
||||
|
||||
.bottom-actions {
|
||||
position: fixed;
|
||||
|
||||
@ -293,6 +293,7 @@ import { ref, getCurrentInstance, computed, onUnmounted, onMounted } from 'vue'
|
||||
import { ALLOW_AT, events, REPLY_MSG_TYPE_MAP } from '@/utils/im/constants'
|
||||
import { emojiMap } from '@/utils/im/emoji'
|
||||
import { t } from '@/utils/im/i18n'
|
||||
import { pathToBase64 } from "image-tools";
|
||||
import { handleNoPermission } from '@/utils/im/permission'
|
||||
import { customNavigateTo } from '@/utils/im/customNavigate'
|
||||
import MessageOneLine from '@/components/MessageOneLine.vue'
|
||||
@ -811,26 +812,80 @@ const handleSendImageMsg = () => {
|
||||
stopAllAudio()
|
||||
uni.chooseImage({
|
||||
count: 1,
|
||||
sizeType: ['compressed'],
|
||||
//sizeType: ['compressed'],
|
||||
sourceType: ['album','camera'],
|
||||
crop: {
|
||||
width: 800,
|
||||
height:800,
|
||||
resize: true,
|
||||
quality:100,
|
||||
},
|
||||
success: (res) => {
|
||||
console.log('第一步成功');
|
||||
console.log(res.tempFilePaths)
|
||||
// const imgMsg = uni.$UIKitNIM.V2NIMMessageCreator.createImageMessage(
|
||||
// res.tempFilePaths[0]
|
||||
// )
|
||||
if(props.isGroupSend){
|
||||
const fileManager = uni.getFileSystemManager();
|
||||
fileManager.readFile({
|
||||
filePath: res.tempFilePaths[0],
|
||||
encoding: 'base64',
|
||||
success: (res) => {
|
||||
emits('send',{
|
||||
content:res.data,
|
||||
msg_type:2,
|
||||
console.log('第二步成功');
|
||||
uni.getImageInfo({
|
||||
src: res.tempFilePaths[0],
|
||||
success: (result) => {
|
||||
console.log('第三步成功');
|
||||
console.log(result);
|
||||
if(result.width > 1000){
|
||||
uni.compressImage({
|
||||
src: res.tempFilePaths[0],
|
||||
quality:100,
|
||||
success: (res2) => {
|
||||
console.log('第四 步成功');
|
||||
pathToBase64(res2.tempFilePath)
|
||||
.then((base64) => {
|
||||
console.log('转base64成功');
|
||||
console.log(base64);
|
||||
let img=base64.split(",")[1];
|
||||
emits('send',{
|
||||
content:img,
|
||||
msg_type:2,
|
||||
})
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log('chooseImage', error);
|
||||
});
|
||||
}
|
||||
})
|
||||
},
|
||||
fail: (error) => {
|
||||
console.log('chooseImage', error)
|
||||
}
|
||||
})
|
||||
}else{
|
||||
pathToBase64(res.tempFilePaths[0])
|
||||
.then((base64) => {
|
||||
console.log('转base64成功');
|
||||
console.log(base64);
|
||||
let img=base64.split(",")[1];
|
||||
emits('send',{
|
||||
content:img,
|
||||
msg_type:2
|
||||
})
|
||||
})
|
||||
.catch((error) => {
|
||||
console.log('chooseImage', error);
|
||||
});
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// const fileManager = uni.getFileSystemManager();
|
||||
// fileManager.readFile({
|
||||
// filePath: res.tempFilePaths[0],
|
||||
// encoding: 'base64',
|
||||
// success: (res) => {
|
||||
// emits('send',{
|
||||
// content:res.data,
|
||||
// msg_type:2,
|
||||
// })
|
||||
// },
|
||||
// fail: (error) => {
|
||||
// console.log('chooseImage', error)
|
||||
// }
|
||||
// })
|
||||
}else{
|
||||
const conversationId = ensureConversationId()
|
||||
if (!conversationId) return
|
||||
|
||||
@ -63,7 +63,6 @@
|
||||
:title="'执业地点'"
|
||||
:cancelText="'返回修改'"
|
||||
:confirmText="'确认发布'"
|
||||
|
||||
@close="noticeVisible=false"
|
||||
@confirm="noticeConfirm"
|
||||
>
|
||||
@ -71,7 +70,7 @@
|
||||
<view class="ppt-content">
|
||||
<view class="notice-row">
|
||||
<view class="name">医院:</view>
|
||||
<view class="value" v-if="reason==1">{{ form.hospital_name }}</view>
|
||||
<view class="value">{{ form.hospital_name }}</view>
|
||||
|
||||
</view>
|
||||
<view class="notice-row">
|
||||
|
||||
@ -102,14 +102,9 @@
|
||||
</view>
|
||||
|
||||
<!-- 空状态 -->
|
||||
<view class="card" v-else>
|
||||
<view class="card-header">
|
||||
<text class="label">群发消息记录</text>
|
||||
</view>
|
||||
<view class="card-body">
|
||||
<view class="line">暂无群发消息记录</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<empty :emptyDesc="'暂无群发消息记录'" v-else></empty>
|
||||
|
||||
|
||||
<!-- 加载状态 -->
|
||||
<view class="loading-state" v-if="loading">
|
||||
@ -152,6 +147,7 @@ import api from '@/api/api.js'
|
||||
import { onShow,onBackPress,onLoad } from '@dcloudio/uni-app'
|
||||
import docUrl from '@/utils/docUrl.js'
|
||||
import navTo from '@/utils/navTo.js'
|
||||
import empty from '@/components/empty/empty.vue'
|
||||
const currentTime = ref('')
|
||||
const patientCount = ref(1)
|
||||
const patientName = ref('测试')
|
||||
|
||||
@ -54,7 +54,11 @@ const addOutPatientA = () => {
|
||||
}).then(res => {
|
||||
console.log(res)
|
||||
if(res.code==0){
|
||||
uni.navigateBack()
|
||||
uni.showToast({ title: '提交成功', icon: 'none' })
|
||||
setTimeout(() => {
|
||||
uni.navigateBack();
|
||||
}, 1000);
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@ -137,16 +137,55 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<unidialog
|
||||
:visible="noticeVisible"
|
||||
:title="'门诊安排'"
|
||||
:cancelText="'返回修改'"
|
||||
:confirmText="'确认发布'"
|
||||
@close="noticeVisible=false"
|
||||
@confirm="noticeConfirm"
|
||||
>
|
||||
<template v-slot:content>
|
||||
<view class="ppt-content">
|
||||
<view class="notice-row">
|
||||
<view class="name">门诊时间:</view>
|
||||
<view class="value" style="display: flex;align-items: center;gap: 10rpx;">
|
||||
<text class="weekday-text">{{ getWeekdayText(selectedWeekday) }}</text>
|
||||
<text class="time-text">{{ getTimePeriodText(selectedTimePeriod) }}</text>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
<view class="notice-row">
|
||||
<view class="name">门诊地点:</view>
|
||||
<view class="value">
|
||||
<text class="value-text">{{ selectedLocation.hospital_name }};</text>
|
||||
<text class="value-text">{{ selectedLocation.office_name }};</text>
|
||||
<text class="value-text">{{ selectedLocation.location }};</text>
|
||||
<text class="value-text">
|
||||
{{ getTypeText(selectedLocation.type) }}
|
||||
</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</unidialog>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app";
|
||||
import unidialog from '@/components/dialog/dialog.vue'
|
||||
import api from "@/api/api.js";
|
||||
import navTo from '@/utils/navTo'
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
const title = ref('增加门诊安排')
|
||||
const uuid=ref('')
|
||||
const noticeVisible=ref(false)
|
||||
const noticeConfirm = () => {
|
||||
noticeVisible.value = false
|
||||
submit()
|
||||
}
|
||||
// 响应式数据
|
||||
const selectedWeekday = ref(null)
|
||||
const selectedTimePeriod = ref('')
|
||||
@ -155,6 +194,14 @@ const selectedLocation = ref({})
|
||||
const map = { 1: '普通门诊', 2: '专家门诊', 3: '特需门诊', 4: '专科/专病门诊' }
|
||||
return map[type] || '普通门诊'
|
||||
}
|
||||
const getWeekdayText = (weekday) => {
|
||||
const map = { 1: '周一', 2: '周二', 3: '周三', 4: '周四', 5: '周五', 6: '周六', 7: '周日' }
|
||||
return map[weekday]
|
||||
}
|
||||
const getTimePeriodText = (timePeriod) => {
|
||||
const map = { a: '上午', b: '下午', c: '晚上', d: '全天' }
|
||||
return map[timePeriod]
|
||||
}
|
||||
onShow(()=>{
|
||||
listWorkPlace()
|
||||
})
|
||||
@ -166,8 +213,13 @@ const workPlaceList=ref([])
|
||||
const listWorkPlace=async()=>{
|
||||
const res = await api.listWorkPlace()
|
||||
if(res.code == 200){
|
||||
workPlaceList.value = res.data
|
||||
|
||||
workPlaceList.value = res.data;
|
||||
for(let i=0;i<workPlaceList.value.length;i++){
|
||||
if(workPlaceList.value[i].uuid == selectedLocation.value.uuid){
|
||||
chooseLocation(workPlaceList.value[i]);
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
const selectWeekday = (weekday) => {
|
||||
@ -197,7 +249,7 @@ const updateOutPatient=async()=>{
|
||||
type:1,
|
||||
week: selectedWeekday.value,
|
||||
day: selectedTimePeriod.value,
|
||||
workplace_uuid: selectedLocation.value
|
||||
workplace_uuid: selectedLocation.value.uuid
|
||||
})
|
||||
|
||||
if(res.code == 200){
|
||||
@ -213,12 +265,20 @@ const selectTimePeriod = (period) => {
|
||||
}
|
||||
|
||||
const chooseLocation = (item) => {
|
||||
console.log(item)
|
||||
selectedLocation.value = item
|
||||
}
|
||||
const getType=(type)=>{
|
||||
const map = { 1: 'a', 2: 'b', 3: 'c', 4: 'd' }
|
||||
return map[type]
|
||||
}
|
||||
const submit=()=>{
|
||||
if(uuid.value){
|
||||
updateOutPatient()
|
||||
}else{
|
||||
addOutPatient()
|
||||
}
|
||||
}
|
||||
const confirmPublish = () => {
|
||||
if (!selectedWeekday.value) {
|
||||
uni.showToast({
|
||||
@ -244,11 +304,7 @@ const confirmPublish = () => {
|
||||
return
|
||||
}
|
||||
|
||||
if(uuid.value){
|
||||
updateOutPatient()
|
||||
}else{
|
||||
addOutPatient()
|
||||
}
|
||||
noticeVisible.value = true
|
||||
}
|
||||
|
||||
onLoad((options)=>{
|
||||
@ -256,7 +312,8 @@ const confirmPublish = () => {
|
||||
uuid.value = options.uuid;
|
||||
selectedWeekday.value = options.week;
|
||||
selectedLocation.value.uuid = options.workplace_uuid;
|
||||
selectedTimePeriod.value = getType(options.type);
|
||||
selectedTimePeriod.value =options.type;
|
||||
|
||||
if(uuid.value){
|
||||
title.value = '编辑门诊安排'
|
||||
}
|
||||
@ -264,6 +321,13 @@ const confirmPublish = () => {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.value .weekday-text{
|
||||
color:red
|
||||
}
|
||||
.value .time-text{
|
||||
color:red;
|
||||
margin-left: 10rpx;
|
||||
}
|
||||
.add-schedule-page {
|
||||
min-height: 100vh;
|
||||
background-color: #fff;
|
||||
@ -329,6 +393,26 @@ const confirmPublish = () => {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
.notice-row{
|
||||
margin-bottom: 20rpx;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
|
||||
.name{
|
||||
width: 160rpx;
|
||||
white-space: nowrap;
|
||||
text-align: right;
|
||||
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
.value{
|
||||
flex: 1;
|
||||
font-size: 28rpx;
|
||||
text-align: left;
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.nav-title {
|
||||
font-size: 34rpx;
|
||||
@ -362,7 +446,6 @@ const confirmPublish = () => {
|
||||
.title-text {
|
||||
font-size: 32rpx;
|
||||
color: #8B2316;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.required-mark {
|
||||
@ -543,6 +626,5 @@ const confirmPublish = () => {
|
||||
.btn-text {
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
>
|
||||
<template #right>
|
||||
<view class="nav-right">
|
||||
<up-icon name="share" color="#8B2316" size="24"></up-icon>
|
||||
<up-icon name="share" color="#8B2316" size="24" @click="shareToggle"></up-icon>
|
||||
<up-image :src="siteImg" width="36rpx" height="36rpx" @click="goSite"></up-image>
|
||||
</view>
|
||||
</template>
|
||||
@ -34,7 +34,15 @@
|
||||
</view>
|
||||
|
||||
<!-- 主内容区域 -->
|
||||
<view class="content-area">
|
||||
<!-- <view class="content-area"> -->
|
||||
<scroll-view
|
||||
class="content-scroll"
|
||||
scroll-y
|
||||
refresher-enabled
|
||||
:refresher-triggered="isRefreshing"
|
||||
@refresherrefresh="onRefresh"
|
||||
@scrolltolower="onScrollToLower"
|
||||
>
|
||||
<!-- 停诊公告卡片 -->
|
||||
<view v-if="currentTab === 'suspension'">
|
||||
<view class="announcement-card" v-for="announcement in stopOutPatientList" :key="announcement.uuid">
|
||||
@ -106,11 +114,11 @@
|
||||
</view>
|
||||
<view class="schedule-actions">
|
||||
<view class="action-btn edit-btn" @click="editSchedule(schedule)">
|
||||
<text class="action-icon">✎</text>
|
||||
<up-image :src="editImg" width="30rpx" height="30rpx"></up-image>
|
||||
<text class="action-text">编辑</text>
|
||||
</view>
|
||||
<view class="action-btn delete-btn" @click="deleteSchedule(schedule.uuid)">
|
||||
<text class="action-icon">🗑</text>
|
||||
<up-image :src="deleteImg" width="30rpx" height="30rpx"></up-image>
|
||||
<text class="action-text">删除</text>
|
||||
</view>
|
||||
</view>
|
||||
@ -120,8 +128,12 @@
|
||||
<view v-else class="empty-state">
|
||||
<empty :emptyDesc="'暂无门诊安排'"></empty>
|
||||
</view>
|
||||
<view v-if="outPatientList.length > 0" class="load-more-tip">
|
||||
<text>{{ outPatientLoading ? '加载中...' : (hasMoreOutPatient ? '上拉加载更多' : '没有更多数据了') }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</scroll-view>
|
||||
<!-- </view> -->
|
||||
|
||||
<!-- 底部操作按钮 -->
|
||||
<view class="bottom-actions">
|
||||
@ -134,6 +146,36 @@
|
||||
<view class="floating-edit-btn" @click="editAnnouncement">
|
||||
<up-image :src="sendImg" width="88rpx" height="88rpx"></up-image>
|
||||
</view>
|
||||
|
||||
<!-- 分享弹窗 -->
|
||||
<uni-popup ref="shareRef" type="bottom" safeArea backgroundColor="#fff">
|
||||
<view class="share-popup">
|
||||
<view class="share-title">分享到</view>
|
||||
<view class="share-content">
|
||||
<view class="share-item" @click="shareToWechat">
|
||||
<view class="share-icon wechat-icon">
|
||||
<image class="share-img" :src="wxImg" mode="aspectFill" />
|
||||
</view>
|
||||
<text class="share-text">微信</text>
|
||||
</view>
|
||||
<view class="share-item" @click="shareToMoments">
|
||||
<view class="share-icon moments-icon">
|
||||
<image class="share-img" :src="friendImg" mode="aspectFill" />
|
||||
</view>
|
||||
<text class="share-text">朋友圈</text>
|
||||
</view>
|
||||
<view class="share-item" @click="shareToWeibo">
|
||||
<view class="share-icon weibo-icon">
|
||||
<image class="share-img" :src="sinaImg" mode="aspectFill" />
|
||||
</view>
|
||||
<text class="share-text">新浪微博</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="share-cancel" @click="closeShare">
|
||||
<text>取消</text>
|
||||
</view>
|
||||
</view>
|
||||
</uni-popup>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
@ -142,12 +184,27 @@ import { ref, reactive } from 'vue'
|
||||
import api from '@/api/api'
|
||||
import {onShow,onUnload,onLoad,onBackPress} from '@dcloudio/uni-app'
|
||||
import navTo from '@/utils/navTo'
|
||||
import other_host from '@/utils/otherHost'
|
||||
import siteImg from '@/static/zhiyedidian.png'
|
||||
import empty from '@/components/empty/empty.vue'
|
||||
import sendImg from '@/static/send_feed.png'
|
||||
import dateBg from '@/static/data_sign.png'
|
||||
import editImg from '@/static/edit_icon.png'
|
||||
import deleteImg from '@/static/delete_icon.png'
|
||||
import sinaImg from "@/static/share_sina.png"
|
||||
import wxImg from "@/static/share_weixin.png"
|
||||
import friendImg from "@/static/share_wxc.png"
|
||||
import logoImg from "@/static/weiboShare.png"
|
||||
const SHARE_TITLE = ref('医生门诊详情')
|
||||
const SHARE_SUMMARY = '肝胆相照®肝胆病在线服务平台'
|
||||
const page=ref(1);
|
||||
const isRefreshing = ref(false)
|
||||
const outPatientLoading = ref(false)
|
||||
const hasMoreOutPatient = ref(true)
|
||||
const addressList = ref([]);
|
||||
const shareRef = ref()
|
||||
const shareLink = ref('')
|
||||
|
||||
// 响应式数据
|
||||
const from = ref('');
|
||||
const currentTab = ref('suspension')
|
||||
@ -167,16 +224,61 @@ onLoad((options) => {
|
||||
if(options.from){
|
||||
from.value = options.from;
|
||||
}
|
||||
fetchList();
|
||||
try {
|
||||
const userInfo = uni.getStorageSync('userInfo') || {}
|
||||
console.log(userInfo.realName)
|
||||
const expertUuid = userInfo.uuid;
|
||||
shareLink.value = other_host+'/wxPatient/index.htm#/outPatient?link=share&expertUuid='+expertUuid+'&from=doctor'
|
||||
SHARE_TITLE.value = userInfo.realName+'医生门诊详情'
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
}
|
||||
});
|
||||
const getListOutPatient = async () => {
|
||||
const res = await api.listOutPatient({
|
||||
page:page.value,
|
||||
});
|
||||
if(res.code == 200){
|
||||
outPatientList.value = res.data.list.list;
|
||||
console.log(res.data.note)
|
||||
note.value = res.data.note.note;
|
||||
const getListOutPatient = async (reset = false) => {
|
||||
if (outPatientLoading.value) return;
|
||||
if (!reset && !hasMoreOutPatient.value) return;
|
||||
|
||||
if (reset) {
|
||||
page.value = 1;
|
||||
hasMoreOutPatient.value = true;
|
||||
}
|
||||
|
||||
outPatientLoading.value = true;
|
||||
try {
|
||||
const res = await api.listOutPatient({
|
||||
page:page.value,
|
||||
});
|
||||
if(res.code == 200){
|
||||
const pageData = res.data?.list || {};
|
||||
const newList = Array.isArray(pageData.list) ? pageData.list : [];
|
||||
|
||||
if (reset) {
|
||||
outPatientList.value = newList;
|
||||
} else {
|
||||
outPatientList.value = [...outPatientList.value, ...newList];
|
||||
}
|
||||
|
||||
// 兼容不同分页字段结构
|
||||
if (typeof pageData.totalPage === 'number' && typeof pageData.pageNumber === 'number') {
|
||||
hasMoreOutPatient.value = pageData.pageNumber < pageData.totalPage;
|
||||
} else if (typeof pageData.last_page === 'number' && typeof pageData.current_page === 'number') {
|
||||
hasMoreOutPatient.value = pageData.current_page < pageData.last_page;
|
||||
} else if (typeof pageData.pages === 'number' && typeof pageData.pageNum === 'number') {
|
||||
hasMoreOutPatient.value = pageData.pageNum < pageData.pages;
|
||||
} else if (typeof pageData.isLastPage === 'boolean') {
|
||||
hasMoreOutPatient.value = !pageData.isLastPage;
|
||||
} else {
|
||||
hasMoreOutPatient.value = newList.length > 0;
|
||||
}
|
||||
|
||||
if (hasMoreOutPatient.value) {
|
||||
page.value += 1;
|
||||
}
|
||||
console.log(res.data.note)
|
||||
note.value = res.data?.note?.note || '';
|
||||
}
|
||||
} finally {
|
||||
outPatientLoading.value = false;
|
||||
}
|
||||
}
|
||||
const stopOutPatientList = ref([]);
|
||||
@ -229,8 +331,9 @@ const getWeekdayByWeek = (week) => {
|
||||
const getTimePeriod = (day) => {
|
||||
const timeMap = {
|
||||
'a': '上午',
|
||||
'p': '下午',
|
||||
'd': '晚上'
|
||||
'b': '下午',
|
||||
'c': '晚上',
|
||||
'd': '全天'
|
||||
};
|
||||
return timeMap[day] || '晚上';
|
||||
}
|
||||
@ -254,11 +357,129 @@ const goBack = () => {
|
||||
}
|
||||
}
|
||||
|
||||
const share = () => {
|
||||
uni.showToast({
|
||||
title: '分享功能',
|
||||
icon: 'none'
|
||||
})
|
||||
const shareToggle = () => {
|
||||
shareRef.value && shareRef.value.open()
|
||||
}
|
||||
|
||||
const closeShare = () => {
|
||||
shareRef.value && shareRef.value.close()
|
||||
}
|
||||
|
||||
const shareToWechat = () => {
|
||||
// #ifdef APP-PLUS
|
||||
uni.downloadFile({
|
||||
url: 'https://doc.igandan.com/app/html/img/2016/20160714132557.png',
|
||||
success: function (res) {
|
||||
uni.compressImage({
|
||||
src: res.tempFilePath,
|
||||
quality: 60,
|
||||
success: function (res2) {
|
||||
uni.share({
|
||||
provider: "weixin",
|
||||
scene: "WXSceneSession",
|
||||
type: 0,
|
||||
title: SHARE_TITLE.value,
|
||||
summary: SHARE_SUMMARY,
|
||||
href: shareLink.value,
|
||||
imageUrl: res2.tempFilePath,
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
// #endif
|
||||
|
||||
// #ifdef H5
|
||||
if (navigator.share) {
|
||||
navigator
|
||||
.share({
|
||||
title: SHARE_TITLE.value,
|
||||
text: SHARE_SUMMARY,
|
||||
url: shareLink.value,
|
||||
})
|
||||
.catch(() => {});
|
||||
} else {
|
||||
uni.setClipboardData({
|
||||
data: `${SHARE_TITLE.value}:${shareLink.value}`,
|
||||
success: () => {
|
||||
uni.showToast({ title: "已复制到剪贴板", icon: "success" });
|
||||
},
|
||||
});
|
||||
}
|
||||
// #endif
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
uni.showShareMenu({
|
||||
withShareTicket: true,
|
||||
menus: ["shareAppMessage", "shareTimeline"],
|
||||
});
|
||||
// #endif
|
||||
closeShare();
|
||||
}
|
||||
|
||||
const shareToMoments = () => {
|
||||
// #ifdef APP-PLUS
|
||||
uni.downloadFile({
|
||||
url: 'https://doc.igandan.com/app/html/img/2016/20160714132557.png',
|
||||
success: function (res) {
|
||||
uni.compressImage({
|
||||
src: res.tempFilePath,
|
||||
quality: 60,
|
||||
success: function (res2) {
|
||||
uni.share({
|
||||
provider: "weixin",
|
||||
scene: "WXSceneTimeline",
|
||||
type: 0,
|
||||
title: SHARE_TITLE.value,
|
||||
summary: SHARE_SUMMARY,
|
||||
href: shareLink.value,
|
||||
imageUrl: res2.tempFilePath,
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
});
|
||||
// #endif
|
||||
|
||||
// #ifdef H5
|
||||
uni.setClipboardData({
|
||||
data: `${SHARE_TITLE.value}:${shareLink.value}`,
|
||||
success: () => {
|
||||
uni.showToast({ title: "已复制到剪贴板,可分享到朋友圈", icon: "success" });
|
||||
},
|
||||
});
|
||||
// #endif
|
||||
|
||||
// #ifdef MP-WEIXIN
|
||||
uni.showShareMenu({
|
||||
withShareTicket: true,
|
||||
menus: ["shareAppMessage", "shareTimeline"],
|
||||
});
|
||||
// #endif
|
||||
closeShare();
|
||||
}
|
||||
|
||||
const shareToWeibo = () => {
|
||||
// #ifdef APP-PLUS
|
||||
uni.share({
|
||||
provider: "sinaweibo",
|
||||
type: 0,
|
||||
title: SHARE_TITLE.value,
|
||||
summary: SHARE_SUMMARY,
|
||||
href: shareLink.value,
|
||||
imageUrl: logoImg,
|
||||
});
|
||||
// #endif
|
||||
|
||||
// #ifdef H5
|
||||
uni.setClipboardData({
|
||||
data: `${SHARE_TITLE.value}:${shareLink.value}`,
|
||||
success: () => {
|
||||
uni.showToast({ title: "已复制到剪贴板,可分享到微博", icon: "success" });
|
||||
},
|
||||
});
|
||||
// #endif
|
||||
closeShare();
|
||||
}
|
||||
const fetchList = async () => {
|
||||
const res = await api.listWorkPlace({})
|
||||
@ -276,8 +497,8 @@ const addNew = () => {
|
||||
|
||||
onShow(() => {
|
||||
getStopOutPatientList();
|
||||
getListOutPatient();
|
||||
|
||||
getListOutPatient(true);
|
||||
fetchList();
|
||||
|
||||
})
|
||||
|
||||
@ -286,7 +507,7 @@ const switchTab = (tab) => {
|
||||
if(tab=='suspension'){
|
||||
getStopOutPatientList();
|
||||
}else{
|
||||
getListOutPatient();
|
||||
getListOutPatient(true);
|
||||
}
|
||||
}
|
||||
|
||||
@ -344,7 +565,7 @@ const editAnnouncement = () => {
|
||||
|
||||
// 刷新数据
|
||||
const refreshData = () => {
|
||||
getListOutPatient();
|
||||
getListOutPatient(true);
|
||||
getStopOutPatientList();
|
||||
}
|
||||
|
||||
@ -355,16 +576,18 @@ const addSchedule = () => {
|
||||
title: '请先点击右上角设置执业地点',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
navTo({
|
||||
|
||||
}else{
|
||||
navTo({
|
||||
url: '/pages_chat/outManage/outManage'
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const editSchedule = (schedule) => {
|
||||
uni.navigateTo({
|
||||
url: `/pages_chat/outManage/outManage?uuid=${schedule.uuid}&workplace_uuid=${schedule.workplace_uuid}&week=${schedule.week}&type=${schedule.type}`
|
||||
url: `/pages_chat/outManage/outManage?uuid=${schedule.uuid}&workplace_uuid=${schedule.workplace_uuid}&week=${schedule.week}&type=${schedule.day}`
|
||||
})
|
||||
}
|
||||
|
||||
@ -382,7 +605,7 @@ const deleteSchedule = async (uuid) => {
|
||||
title: '删除成功',
|
||||
icon: 'none'
|
||||
});
|
||||
getListOutPatient();
|
||||
getListOutPatient(true);
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: deleteRes.msg || '删除失败',
|
||||
@ -399,6 +622,24 @@ const deleteSchedule = async (uuid) => {
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const onRefresh = async () => {
|
||||
isRefreshing.value = true;
|
||||
try {
|
||||
if (currentTab.value === 'suspension') {
|
||||
await getStopOutPatientList();
|
||||
} else {
|
||||
await getListOutPatient(true);
|
||||
}
|
||||
} finally {
|
||||
isRefreshing.value = false;
|
||||
}
|
||||
}
|
||||
|
||||
const onScrollToLower = () => {
|
||||
if (currentTab.value !== 'outpatient') return;
|
||||
getListOutPatient(false);
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@ -525,7 +766,10 @@ const deleteSchedule = async (uuid) => {
|
||||
|
||||
/* 标签页样式 */
|
||||
.tab-container {
|
||||
margin-top: calc(var(--status-bar-height) + 44px);
|
||||
position: fixed;
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
left: 0;
|
||||
right: 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background-color: #fff;
|
||||
@ -556,9 +800,16 @@ const deleteSchedule = async (uuid) => {
|
||||
}
|
||||
|
||||
/* 主内容区域 */
|
||||
.content-area {
|
||||
padding: 30rpx;
|
||||
min-height: calc(100vh - 400rpx);
|
||||
|
||||
.content-scroll {
|
||||
top: calc(var(--status-bar-height) + 44px + 118rpx);
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
bottom: 152rpx;
|
||||
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* 停诊公告卡片 */
|
||||
@ -566,7 +817,7 @@ const deleteSchedule = async (uuid) => {
|
||||
background-color: #fff;
|
||||
border-radius: 16rpx;
|
||||
|
||||
margin-bottom: 20rpx;
|
||||
margin:0 30rpx 20rpx;
|
||||
position: relative;
|
||||
.date-bg{
|
||||
position: absolute;
|
||||
@ -683,16 +934,22 @@ const deleteSchedule = async (uuid) => {
|
||||
.schedule-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20rpx;
|
||||
margin:0rpx 30rpx 0;
|
||||
}
|
||||
.load-more-tip {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
color: #999;
|
||||
font-size: 24rpx;
|
||||
padding: 20rpx 0 30rpx;
|
||||
}
|
||||
|
||||
.schedule-card {
|
||||
background-color: #fff;
|
||||
border-radius: 12rpx;
|
||||
|
||||
margin-bottom: 20rpx;
|
||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
|
||||
|
||||
gap: 30rpx;
|
||||
}
|
||||
.cell-content {
|
||||
padding: 0 30rpx;
|
||||
@ -797,7 +1054,7 @@ const deleteSchedule = async (uuid) => {
|
||||
.action-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8rpx;
|
||||
|
||||
padding: 10rpx 20rpx;
|
||||
border-radius: 8rpx;
|
||||
cursor: pointer;
|
||||
@ -805,14 +1062,7 @@ const deleteSchedule = async (uuid) => {
|
||||
|
||||
.edit-btn {
|
||||
white-space: nowrap;
|
||||
background-color: #f8f9fa;
|
||||
border: 1rpx solid #dee2e6;
|
||||
}
|
||||
|
||||
.schedule-actions .delete-btn {
|
||||
|
||||
background-color: #fff5f5;
|
||||
border: 1rpx solid #fed7d7;
|
||||
|
||||
}
|
||||
|
||||
.action-icon {
|
||||
@ -823,6 +1073,8 @@ const deleteSchedule = async (uuid) => {
|
||||
white-space: nowrap;
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
margin-top: 5rpx;
|
||||
margin-left: 8rpx;
|
||||
}
|
||||
|
||||
.edit-btn .action-text {
|
||||
@ -830,7 +1082,7 @@ const deleteSchedule = async (uuid) => {
|
||||
}
|
||||
|
||||
.delete-btn .action-text {
|
||||
color: #e74c3c;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* 底部操作按钮 */
|
||||
@ -839,6 +1091,7 @@ const deleteSchedule = async (uuid) => {
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 1;
|
||||
padding: 30rpx;
|
||||
background-color: #fff;
|
||||
border-top: 1rpx solid #eee;
|
||||
@ -875,4 +1128,69 @@ const deleteSchedule = async (uuid) => {
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
|
||||
/* 分享弹窗样式 */
|
||||
.share-popup {
|
||||
background-color: #fff;
|
||||
border-radius: 20rpx 20rpx 0 0;
|
||||
padding: 40rpx 0 0;
|
||||
}
|
||||
|
||||
.share-title {
|
||||
text-align: center;
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
margin-bottom: 40rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.share-content {
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
padding: 0 40rpx 40rpx;
|
||||
}
|
||||
|
||||
.share-item {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.share-icon {
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.share-img {
|
||||
width: 100rpx;
|
||||
height:100rpx;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.weibo-icon {
|
||||
background-color: #e6162d;
|
||||
}
|
||||
|
||||
.share-text {
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.share-cancel {
|
||||
height: 100rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
border-top: 1rpx solid #f0f0f0;
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
}
|
||||
</style>
|
||||
|
||||
@ -216,7 +216,7 @@
|
||||
/* 列表区域 */
|
||||
.list {
|
||||
position: fixed;
|
||||
top: calc(var(--status-bar-height) + 44px + 272rpx); /* 导航栏 + 添加入口高度(约) */
|
||||
top: calc(var(--status-bar-height) + 44px + 140rpx); /* 导航栏 + 添加入口高度(约) */
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<view class="stop-page">
|
||||
<view class="stop-page" :class="{ 'picker-open': !showBottom }">
|
||||
<navBar :title="title" />
|
||||
|
||||
<view class="content-area">
|
||||
@ -29,14 +29,14 @@
|
||||
|
||||
<view class="range-list" v-if="reason!=3">
|
||||
<view class="range-row" v-for="(item,idx) in ranges" :key="idx">
|
||||
<uni-datetime-picker type="daterange" value="item" :start="start" @change="(e)=>handleChange(e,idx)" />
|
||||
<uni-datetime-picker type="daterange" value="item" :start="start" @change="(e)=>handleChange(e,idx)" @show="closeBottom" @close="openBottom" @maskClick="openBottom"/>
|
||||
<uni-icons type="minus" size="30" color="#8B2316" @click="removeRange(idx)" v-if="idx > 0"></uni-icons>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view class="range-list" v-if="reason==3">
|
||||
<view class="range-row" v-for="(item,idx) in ranges" :key="idx">
|
||||
<uni-datetime-picker type="date" value="item[0]" :start="start" @change="(e)=>handleChangeDate(e,idx)" />
|
||||
<uni-datetime-picker type="date" value="item[0]" :start="start" @change="(e)=>handleChangeDate(e,idx)" @show="closeBottom" @close="openBottom" @maskClick="openBottom"/>
|
||||
<view class="rowbox">
|
||||
<uni-data-select v-model="item[1]" placeholder="请选择时段" :localdata="rangeData" @change="(e)=>changeRangeData(e,idx)"></uni-data-select>
|
||||
</view>
|
||||
@ -55,7 +55,7 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="bottom-actions">
|
||||
<view class="bottom-actions" v-if="showBottom">
|
||||
<view class="confirm-btn" @click="submit">
|
||||
<text class="btn-text">确定发布</text>
|
||||
</view>
|
||||
@ -120,29 +120,46 @@ const noticeConfirm = () => {
|
||||
noticeVisible.value = false
|
||||
addStopPatient()
|
||||
}
|
||||
|
||||
const showBottom = ref(true)
|
||||
const title = ref('发布停诊')
|
||||
const reason = ref(1)
|
||||
const ranges = ref([[]])
|
||||
const ranges = ref([{}])
|
||||
const remark = ref('')
|
||||
const remarkPh = '您可以在这里填写想告诉患者的停诊补充信息,最多填写300个字哦~'
|
||||
const start = ref(new Date().getTime())
|
||||
const end = ref( Date.now()+10*365*24*3600*1000)
|
||||
const selectReason = (val) => { reason.value = val }
|
||||
const selectReason = (val) => {
|
||||
reason.value = val;
|
||||
if(val==3){
|
||||
ranges.value=[{}];
|
||||
}
|
||||
}
|
||||
const addRange = () => { ranges.value.push([]) }
|
||||
const rangeData=ref([{text:'上午',value:'上午'},{text:'下午',value:'下午'},{text:'晚上',value:'晚上'},{text:'全天',value:'全天'}])
|
||||
|
||||
|
||||
const closeBottom = () => {
|
||||
showBottom.value = false
|
||||
}
|
||||
const openBottom = () => {
|
||||
showBottom.value = true
|
||||
}
|
||||
const handleChange = (e,idx) => {
|
||||
console.log(e)
|
||||
ranges.value[idx] =e;
|
||||
openBottom();
|
||||
console.log(showBottom.value)
|
||||
}
|
||||
const handleChangeDate = (e,idx) => {
|
||||
console.log(e)
|
||||
ranges.value[idx][0] =e;
|
||||
openBottom();
|
||||
console.log(showBottom.value)
|
||||
}
|
||||
const changeRangeData = (e,idx) => {
|
||||
console.log(e)
|
||||
ranges.value[idx][1] =e;
|
||||
|
||||
}
|
||||
const addStopPatient = async () => {
|
||||
let date_arr=[]
|
||||
@ -152,6 +169,7 @@ const addStopPatient = async () => {
|
||||
param2:item[1]
|
||||
})
|
||||
})
|
||||
//console.log(date_arr)
|
||||
const res = await api.addStopPatient({
|
||||
type: reason.value,
|
||||
date_list: date_arr,
|
||||
@ -168,8 +186,8 @@ const recordVoice = () => {
|
||||
}
|
||||
|
||||
const submit = () => {
|
||||
console.log(ranges.value);
|
||||
let invalid=invalid = ranges.value.some(r => !r[0] || !r[1])
|
||||
|
||||
let invalid=ranges.value.some(r => !r[0] || !r[1])
|
||||
if (invalid) {
|
||||
if(reason.value==3){
|
||||
uni.showToast({ title: '请选择停诊时间或者时间段', icon: 'none' })
|
||||
@ -186,6 +204,14 @@ const submit = () => {
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.range-list{
|
||||
position: relative;
|
||||
z-index:99;
|
||||
:deep(.uni-date-btn--ok){
|
||||
position: relative;
|
||||
z-index:9999;
|
||||
}
|
||||
}
|
||||
.ppt-content{
|
||||
|
||||
.tip{
|
||||
@ -236,17 +262,32 @@ const submit = () => {
|
||||
position: relative;
|
||||
z-index:99;
|
||||
}
|
||||
/* iOS 端日期弹层容易被滚动容器裁切,强制提高层级并贴底展示 */
|
||||
:deep(.uni-calendar__mask){
|
||||
z-index: 9998 !important;
|
||||
}
|
||||
:deep(.uni-calendar--fixed){
|
||||
z-index: 9999 !important;
|
||||
bottom: 0 !important;
|
||||
}
|
||||
:deep(.uni-date-btn--ok){
|
||||
position: relative;
|
||||
z-index: 10000 !important;
|
||||
}
|
||||
}
|
||||
.content-area {
|
||||
position: fixed;
|
||||
overflow-y: scroll;
|
||||
padding: 30rpx;
|
||||
width: 100%;
|
||||
z-index:1;
|
||||
z-index:2;
|
||||
box-sizing: border-box;
|
||||
top: calc(var(--status-bar-height) + 44px);
|
||||
bottom:152rpx;
|
||||
}
|
||||
.stop-page.picker-open .content-area{
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
.form-section { margin-bottom: 40rpx; }
|
||||
.section-head { display: flex; justify-content: space-between; align-items: center; }
|
||||
@ -268,7 +309,7 @@ const submit = () => {
|
||||
.remark {box-sizing: border-box; width: 100%; min-height: 220rpx; background: #f2f2f2; border-radius: 10rpx; padding: 20rpx; color: #333; }
|
||||
.voice-btn { position: absolute; right: 20rpx; bottom: 20rpx; width: 88rpx; height: 88rpx; border-radius: 50%; background: #8B2316; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 40rpx; }
|
||||
|
||||
.bottom-actions { position: fixed; left: 0; right: 0; bottom: 0; background: #fff; padding: 30rpx; border-top: 1rpx solid #eee; }
|
||||
.bottom-actions { position: fixed; left: 0; right: 0; bottom: 0; background: #fff; padding: 30rpx; border-top: 1rpx solid #eee; z-index:1;}
|
||||
.confirm-btn { background: #8B2316; border-radius: 12rpx; padding: 24rpx 0; text-align: center; }
|
||||
.btn-text { color: #fff; font-size: 32rpx; }
|
||||
</style>
|
||||
|
||||
BIN
static/addpatient.png
Normal file
BIN
static/addpatient.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.6 KiB |
BIN
static/edit_patitent.png
Normal file
BIN
static/edit_patitent.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 KiB |
Loading…
x
Reference in New Issue
Block a user