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