9.23提交
This commit is contained in:
parent
ae08b222af
commit
70eeb19867
44
api/api.js
44
api/api.js
@ -508,8 +508,48 @@ const api = {
|
||||
deleteQuickReply(data){
|
||||
return request('/expertAPI/deleteQuickReply', data, 'post', false);
|
||||
},
|
||||
|
||||
|
||||
listOutPatient(data){
|
||||
return request('/expertAPI/listOutPatient', data, 'post', false);
|
||||
},
|
||||
stopOutPatientList(data){
|
||||
return request('/expertAPI/stopOutPatientList', data, 'post', false);
|
||||
},
|
||||
listWorkPlace(data){
|
||||
return request('/expertAPI/listWorkPlace', data, 'post', false);
|
||||
},
|
||||
addOutPatient(data){
|
||||
return request('/expertAPI/addOutPatient', data, 'post', false);
|
||||
},
|
||||
updateOutPatient(data){
|
||||
return request('/expertAPI/updateOutPatientA', data, 'post', false);
|
||||
},
|
||||
deleteOutPatient(data){
|
||||
return request('/expertAPI/deleteOutPatient', data, 'post', false);
|
||||
},
|
||||
addWorkPlace(data){
|
||||
return request('/expertAPI/addWorkPlace', data, 'post', false);
|
||||
},
|
||||
updateWorkPlace(data){
|
||||
return request('/expertAPI/editWorkPlace', data, 'post', false);
|
||||
},
|
||||
deleteWorkPlace(data){
|
||||
return request('/expertAPI/deleteWorkPlace', data, 'post', false);
|
||||
},
|
||||
hospitalList(data){
|
||||
return request('/expertAPI/hospitalList', data, 'post', false);
|
||||
},
|
||||
addStopPatient(data){
|
||||
return request('/expertAPI/addStopOutPatient', data, 'post', false);
|
||||
},
|
||||
deleteStopPatient(data){
|
||||
return request('/expertAPI/deleteStopOutPatient', data, 'post', false);
|
||||
},
|
||||
addOutPatientA(data){
|
||||
return request('/expertAPI/addOutPatientA', data, 'post', false);
|
||||
},
|
||||
delGroupSendMsg(data){
|
||||
return request('/expertAPI/delGroupSendMsg', data, 'post', false);
|
||||
},
|
||||
}
|
||||
|
||||
export default api
|
||||
60
pages.json
60
pages.json
@ -1107,6 +1107,46 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "outPatient/outPatient",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "addAddress/addAddress",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "editAddress/editAddress",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "outManage/outManage",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"path": "groupMessage/groupMessage",
|
||||
"style": {
|
||||
@ -1117,6 +1157,26 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
,{
|
||||
"path": "stopPatient/stopPatient",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
}
|
||||
,{
|
||||
"path": "note/note",
|
||||
"style": {
|
||||
"navigationStyle": "custom",
|
||||
"navigationBarTitleText": "uni-app分页",
|
||||
"app": {
|
||||
"bounce": "none"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
]
|
||||
}],
|
||||
|
||||
@ -699,7 +699,7 @@
|
||||
isRefreshing.value = false;
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
});
|
||||
}, 500);
|
||||
|
||||
@ -407,7 +407,7 @@
|
||||
meetingListBySearchU(filters).then(() => {
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
});
|
||||
});
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
<!-- 用户信息卡片 -->
|
||||
<view class="user-card"
|
||||
:style="{'background-image': `url(${myInfoBackGround || '/static/big_background_my.png'})`, 'background-size':'cover','background-repeat':'no-repeat'}">
|
||||
<view class="user-info">
|
||||
<view class="user-info" @click="goToPage('myInfo')">
|
||||
<image class="avatar" :src="avatar" mode="aspectFill"></image>
|
||||
<text class="username">{{username}}</text>
|
||||
</view>
|
||||
@ -54,7 +54,7 @@
|
||||
<up-image :src="sfImg" width="48rpx" height="48rpx"></up-image>
|
||||
<text>随访二维码</text>
|
||||
</view>
|
||||
<view class="service-item" @click="goToPage('qrcode')">
|
||||
<view class="service-item" @click="goToPage('plan')">
|
||||
<up-image :src="czjhImg" width="48rpx" height="48rpx"></up-image>
|
||||
<text>出诊计划</text>
|
||||
</view>
|
||||
@ -288,7 +288,7 @@
|
||||
console.log('签到');
|
||||
uni.showToast({
|
||||
title: '签到成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
};
|
||||
|
||||
@ -309,6 +309,12 @@
|
||||
case 'qrcode':
|
||||
url="/pages_app/myCode/myCode"
|
||||
break;
|
||||
case 'myInfo':
|
||||
url="/pages_app/personInfo/personInfo"
|
||||
break;
|
||||
case 'plan':
|
||||
url="/pages_chat/outPatient/outPatient"
|
||||
break;
|
||||
case 'myVideos':
|
||||
url="/pages_app/myVideo/myVideo"
|
||||
break;
|
||||
|
||||
@ -288,7 +288,7 @@
|
||||
await polularScienceArticleListByKeywordsNew(true);
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
});
|
||||
};
|
||||
|
||||
@ -103,7 +103,7 @@
|
||||
if (res.confirm) {
|
||||
uni.showToast({
|
||||
title: '购买成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -100,7 +100,7 @@ const sendCode = () => {
|
||||
type: 6
|
||||
}).then(res => {
|
||||
if (res.code === 200) {
|
||||
uni.showToast({ title: '验证码已发送', icon: 'success' });
|
||||
uni.showToast({ title: '验证码已发送', icon: 'none' });
|
||||
} else {
|
||||
uni.showToast({ title: res.msg || '验证码发送失败', icon: 'none' });
|
||||
}
|
||||
@ -125,7 +125,7 @@ const onConfirm = () => {
|
||||
oldMobile: uni.getStorageSync('userInfo').mobile
|
||||
}).then(res => {
|
||||
if (res.code === 200) {
|
||||
uni.showToast({ title: '更换手机号成功', icon: 'success' });
|
||||
uni.showToast({ title: '更换手机号成功', icon: 'none' });
|
||||
} else {
|
||||
uni.showToast({ title: res.msg || '更换手机号失败', icon: 'none' });
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@ const onConfirm = () => {
|
||||
password: newPwd.value
|
||||
}).then(res => {
|
||||
if (res.code === 200) {
|
||||
uni.showToast({ title: '修改密码成功', icon: 'success' });
|
||||
uni.showToast({ title: '修改密码成功', icon: 'none' });
|
||||
// 清除登录状态
|
||||
uni.clearStorageSync();
|
||||
setTimeout(() => {
|
||||
|
||||
@ -92,7 +92,7 @@
|
||||
}).then(res => {
|
||||
console.log(res);
|
||||
uni.hideLoading();
|
||||
uni.showToast({ title: '注销申请已提交', icon: 'success' });
|
||||
uni.showToast({ title: '注销申请已提交', icon: 'none' });
|
||||
setTimeout(() => {
|
||||
uni.navigateBack();
|
||||
}, 1500);
|
||||
|
||||
@ -73,7 +73,7 @@
|
||||
}).then(res => {
|
||||
console.log(res);
|
||||
uni.hideLoading();
|
||||
uni.showToast({ title: '提交成功', icon: 'success' });
|
||||
uni.showToast({ title: '提交成功', icon: 'none' });
|
||||
});
|
||||
uni.navigateBack();
|
||||
};
|
||||
|
||||
@ -84,7 +84,7 @@
|
||||
const ec = curr?.getOpenerEventChannel?.()
|
||||
ec?.emit && ec.emit('onVisitNoteSubmit', { note: note.value, idx: Number(idx.value) })
|
||||
} catch (e) {}
|
||||
uni.showToast({ title: '已添加', icon: 'success' })
|
||||
uni.showToast({ title: '已添加', icon: 'none' })
|
||||
setTimeout(() => goBack(), 600)
|
||||
}
|
||||
const noop = () => {}
|
||||
|
||||
@ -225,7 +225,7 @@ const refreshData = async () => {
|
||||
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('刷新失败:', error)
|
||||
@ -345,7 +345,7 @@ const downloadGuideline = (item) => {
|
||||
if (res.statusCode === 200) {
|
||||
uni.showToast({
|
||||
title: '下载成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
@ -237,7 +237,7 @@ const onNextStep = async () => {
|
||||
const res = {code:200}
|
||||
|
||||
if (res.code === 200) {
|
||||
uni.showToast({ title: '身份验证成功', icon: 'success' });
|
||||
uni.showToast({ title: '身份验证成功', icon: 'none' });
|
||||
currentStep.value = 2;
|
||||
isLoading.value = false;
|
||||
} else {
|
||||
@ -283,7 +283,7 @@ const onGetSmsCode = async () => {
|
||||
type: 3
|
||||
});
|
||||
if (res.code === 200) {
|
||||
uni.showToast({ title: '短信验证码发送成功', icon: 'success' });
|
||||
uni.showToast({ title: '短信验证码发送成功', icon: 'none' });
|
||||
// 开始60秒倒计时
|
||||
countdown.value = 60;
|
||||
if (countdownTimer) clearInterval(countdownTimer);
|
||||
@ -314,7 +314,7 @@ const onConfirmSms = async () => {
|
||||
id_name: formData.value.name
|
||||
});
|
||||
if (res.code === 200) {
|
||||
uni.showToast({ title: '银行卡添加成功', icon: 'success' });
|
||||
uni.showToast({ title: '银行卡添加成功', icon: 'none' });
|
||||
navTo({
|
||||
url: '/pages_app/idcardAuth/bankCardList'
|
||||
});
|
||||
|
||||
@ -627,7 +627,7 @@
|
||||
isRefreshing.value = false;
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
});
|
||||
}, 500);
|
||||
|
||||
@ -143,7 +143,7 @@
|
||||
uni.hideLoading();
|
||||
uni.showToast({
|
||||
title: '登录成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
|
||||
// 跳转到首页
|
||||
|
||||
@ -315,7 +315,7 @@ const onGetSmsCode = async () => {
|
||||
if (res.code === 200) {
|
||||
uni.showToast({
|
||||
title: '短信验证码发送成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
// 开始60秒倒计时
|
||||
countdown.value = 60
|
||||
@ -368,7 +368,7 @@ const onConfirmSms = async () => {
|
||||
if(res.code === 200){
|
||||
uni.showToast({
|
||||
title: '提现申请已提交',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
uni.navigateBack()
|
||||
}
|
||||
|
||||
@ -100,7 +100,7 @@ const onSave = () => {
|
||||
uni.hideLoading();
|
||||
uni.showToast({
|
||||
title: '保存成功',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
});
|
||||
},
|
||||
|
||||
@ -154,7 +154,7 @@ const deleteSelected = () => {
|
||||
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
} else {
|
||||
uni.showToast({
|
||||
|
||||
@ -168,7 +168,7 @@ const onRefresh = async () => {
|
||||
noMore.value = false;
|
||||
records.value = []; // 清空数据
|
||||
getFlowerList(); // 重新获取第一页数据
|
||||
uni.showToast({ title: '刷新成功', icon: 'success' });
|
||||
uni.showToast({ title: '刷新成功', icon: 'none' });
|
||||
} catch (error) {
|
||||
console.error('刷新失败:', error);
|
||||
uni.showToast({ title: '刷新失败', icon: 'error' });
|
||||
|
||||
@ -102,7 +102,7 @@ const rejectRequest = () => {
|
||||
if (res.confirm) {
|
||||
uni.showToast({
|
||||
title: '已拒绝申请',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
// 这里可以调用API拒绝申请
|
||||
}
|
||||
@ -118,7 +118,7 @@ const agreeRequest = () => {
|
||||
if (res.confirm) {
|
||||
uni.showToast({
|
||||
title: '已同意申请',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
// 这里可以调用API同意申请
|
||||
}
|
||||
|
||||
@ -236,7 +236,7 @@
|
||||
setTimeout(() => {
|
||||
uni.showToast({
|
||||
title: '签到成功 +2积分',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
|
||||
// 签到成功后刷新数据
|
||||
|
||||
@ -119,7 +119,7 @@
|
||||
api.exchangeWelfareCard({password: code}).then(res => {
|
||||
console.log(res)
|
||||
if (res.code == 200) {
|
||||
uni.showToast({ title: '兑换成功', icon: 'success' })
|
||||
uni.showToast({ title: '兑换成功', icon: 'none' })
|
||||
uni.navigateBack()
|
||||
}
|
||||
})
|
||||
|
||||
@ -467,7 +467,7 @@
|
||||
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@ -454,7 +454,7 @@
|
||||
await getApplyList();
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
});
|
||||
} catch (error) {
|
||||
@ -475,7 +475,7 @@
|
||||
await getFollowUpList(true);
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
});
|
||||
};
|
||||
@ -619,7 +619,8 @@
|
||||
<style lang="scss" scoped>
|
||||
.content {
|
||||
background-color: #f5f5f5;
|
||||
min-height: 100vh;
|
||||
height: 100vh;
|
||||
overflow-y: hidden;
|
||||
|
||||
}
|
||||
.linebox{
|
||||
@ -784,11 +785,12 @@
|
||||
.patient-list {
|
||||
|
||||
height:calc(100vh - 265rpx);
|
||||
|
||||
overflow-y: scroll;
|
||||
display: flex;
|
||||
flex-direction:column;
|
||||
background-color: #ffffff;
|
||||
margin-top: 20rpx;
|
||||
padding-bottom: 500rpx;
|
||||
position: relative;
|
||||
.listbox{
|
||||
flex:1;
|
||||
|
||||
@ -92,7 +92,7 @@
|
||||
return
|
||||
}
|
||||
// TODO: 调用保存接口
|
||||
uni.showToast({ title: '保存成功', icon: 'success' })
|
||||
uni.showToast({ title: '保存成功', icon: 'none' })
|
||||
setTimeout(() => goBack(), 700)
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -119,7 +119,7 @@
|
||||
if (res.confirm) {
|
||||
uni.showToast({
|
||||
title: '支付成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -116,7 +116,7 @@ const exchangeGoods = () => {
|
||||
if (res.confirm) {
|
||||
uni.showToast({
|
||||
title: '兑换成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -271,7 +271,7 @@
|
||||
page.value = 1;
|
||||
noMore.value = false;
|
||||
productsList.value = [...initialProducts];
|
||||
uni.showToast({ title: '刷新成功', icon: 'success' });
|
||||
uni.showToast({ title: '刷新成功', icon: 'none' });
|
||||
} finally {
|
||||
refreshing.value = false;
|
||||
}
|
||||
|
||||
@ -204,7 +204,7 @@
|
||||
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
} catch (error) {
|
||||
uni.showToast({
|
||||
|
||||
@ -249,7 +249,7 @@
|
||||
console.log(2)
|
||||
uni.showToast({
|
||||
title: '登录成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
console.log(3)
|
||||
uni.redirectTo({
|
||||
@ -262,7 +262,7 @@
|
||||
// uni.hideLoading();
|
||||
// uni.showToast({
|
||||
// title: '登录成功',
|
||||
// icon: 'success'
|
||||
// icon: 'none'
|
||||
// });
|
||||
|
||||
// // 跳转到首页
|
||||
|
||||
@ -278,7 +278,7 @@
|
||||
|
||||
uni.showToast({
|
||||
title: '添加成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
};
|
||||
|
||||
@ -296,7 +296,7 @@
|
||||
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@ -130,7 +130,7 @@
|
||||
}).then(res=>{
|
||||
console.log(res)
|
||||
if(res.code==200){
|
||||
uni.showToast({ title: '提交成功', icon: 'success' });
|
||||
uni.showToast({ title: '提交成功', icon: 'none' });
|
||||
setTimeout(()=>uni.navigateBack(),700);
|
||||
}
|
||||
})
|
||||
|
||||
@ -387,7 +387,7 @@
|
||||
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@ -45,7 +45,8 @@
|
||||
import docUrl from '@/utils/docUrl.js'
|
||||
import { onShow,onLoad} from "@dcloudio/uni-app";
|
||||
import api from '@/api/api.js'
|
||||
|
||||
import navTo from '@/utils/navTo.js'
|
||||
const from = ref('');
|
||||
const keyword = ref('')
|
||||
const selectedIds = ref([])
|
||||
const patientList = ref([])
|
||||
@ -65,7 +66,10 @@
|
||||
}
|
||||
|
||||
};
|
||||
onLoad(() => {
|
||||
onLoad((options) => {
|
||||
if(options.from == 'chatMsg'){
|
||||
from.value = 'chatMsg';
|
||||
}
|
||||
// 读取已选中的成员ID
|
||||
try {
|
||||
const preSelected = uni.getStorageSync('preSelectedIds')
|
||||
@ -118,11 +122,20 @@
|
||||
const ec = curr?.getOpenerEventChannel?.()
|
||||
ec?.emit && ec.emit('onPatientsSelected', payload);
|
||||
console.log(selectedDetail.value)
|
||||
uni.$emit('selectedChatPatientsSingle', { patients: selectedDetail.value });
|
||||
uni.$emit('selectedChatPatientsSingle', {patients: selectedDetail.value });
|
||||
} catch (e) {}
|
||||
// 兜底:使用本地存储
|
||||
try { uni.setStorageSync('patientsSelectedPayload', payload) } catch (e) {}
|
||||
uni.navigateBack()
|
||||
try {
|
||||
uni.setStorageSync('patientsSelectedPayload', payload) } catch (e) {}
|
||||
uni.setStorageSync('selectedChatPatientsSingle', {patients: selectedDetail.value })
|
||||
if(from.value == 'chatMsg'){
|
||||
navTo({
|
||||
url: '/pages_chat/groupSend/groupSend?from=chatMsg'
|
||||
})
|
||||
}else{
|
||||
uni.navigateBack()
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@ -188,7 +188,7 @@
|
||||
if (res.confirm) {
|
||||
uni.showToast({
|
||||
title: '缓存已清除',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -159,7 +159,7 @@ const deleteSelected = () => {
|
||||
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -178,7 +178,7 @@
|
||||
}).then(res=>{
|
||||
console.log(res)
|
||||
if(res.code==200){
|
||||
uni.showToast({ title: '已提交', icon: 'success' });
|
||||
uni.showToast({ title: '已提交', icon: 'none' });
|
||||
setTimeout(()=>uni.navigateBack(),700);
|
||||
}
|
||||
})
|
||||
@ -186,7 +186,7 @@
|
||||
const goBack=()=>uni.navigateBack();
|
||||
const submitPlan=()=>{
|
||||
addFollowUps();
|
||||
uni.showToast({ title: '已提交', icon: 'success' });
|
||||
uni.showToast({ title: '已提交', icon: 'none' });
|
||||
setTimeout(()=>uni.navigateBack(),1000);
|
||||
};
|
||||
const selectPatient=()=>{
|
||||
|
||||
@ -55,7 +55,7 @@
|
||||
const ec = curr?.getOpenerEventChannel?.()
|
||||
ec?.emit && ec.emit('onVisitNoteSubmit', { note: note.value, idx: Number(idx.value) })
|
||||
} catch (e) {}
|
||||
uni.showToast({ title: '已添加', icon: 'success' })
|
||||
uni.showToast({ title: '已添加', icon: 'none' })
|
||||
setTimeout(() => goBack(), 600)
|
||||
}
|
||||
const noop = () => {}
|
||||
|
||||
@ -109,7 +109,7 @@ const onSave = () => {
|
||||
content: content.value
|
||||
})
|
||||
|
||||
uni.showToast({ title: '保存成功', icon: 'success' })
|
||||
uni.showToast({ title: '保存成功', icon: 'none' })
|
||||
setTimeout(() => goBack(), 300)
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -495,7 +495,7 @@
|
||||
|
||||
uni.showToast({
|
||||
title: '添加成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
};
|
||||
|
||||
@ -513,7 +513,7 @@
|
||||
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@ -233,7 +233,7 @@ const refreshData = async () => {
|
||||
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('刷新失败:', error)
|
||||
@ -352,7 +352,7 @@ const downloadGuideline = (item) => {
|
||||
if (res.statusCode === 200) {
|
||||
uni.showToast({
|
||||
title: '下载成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
191
pages_chat/addAddress/addAddress.vue
Normal file
191
pages_chat/addAddress/addAddress.vue
Normal file
@ -0,0 +1,191 @@
|
||||
<template>
|
||||
<view class="address-manage-page">
|
||||
<!-- 导航栏 -->
|
||||
<navBar :title="title" />
|
||||
|
||||
<!-- 列表区域 -->
|
||||
<view class="list-container">
|
||||
<view v-for="item in addressList" :key="item.uuid" class="card">
|
||||
<view class="card-body">
|
||||
<view class="name">{{ item.hospital_name }}</view>
|
||||
<view class="dept">{{ item.office_name }}</view>
|
||||
<view class="city-and-tag">
|
||||
<text class="city">{{ item.location }}</text>
|
||||
<view class="tag">{{ getTypeTag(item.type) }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="card-actions">
|
||||
<view class="action" @click="edit(item)">
|
||||
<text class="icon">✎</text>
|
||||
<text class="text">编辑</text>
|
||||
</view>
|
||||
<view class="action" @click="remove(item)">
|
||||
<text class="icon">🗑</text>
|
||||
<text class="text">删除</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部新增按钮 -->
|
||||
<view class="bottom-actions">
|
||||
<view class="add-btn" @click="addNew">
|
||||
<text class="btn-text">新增执业地点</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { onShow } from '@dcloudio/uni-app'
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
import api from '@/api/api.js'
|
||||
import navTo from '@/utils/navTo'
|
||||
const title = ref('执业地点管理')
|
||||
const addressList = ref([])
|
||||
|
||||
const getTypeTag = (type) => {
|
||||
// 与设计稿一致:1=普通门诊;其他展示“专科/专病门诊”
|
||||
return type === 1 ? '普通门诊' : '专科/专病门诊'
|
||||
}
|
||||
|
||||
const fetchList = async () => {
|
||||
const res = await api.listWorkPlace({})
|
||||
if (res && res.code === 200 && Array.isArray(res.data)) {
|
||||
addressList.value = res.data
|
||||
}
|
||||
}
|
||||
|
||||
onShow(() => {
|
||||
fetchList()
|
||||
})
|
||||
|
||||
const edit = (item) => {
|
||||
navTo({
|
||||
url: '/pages_chat/editAddress/editAddress?uuid='+item.uuid+'&type='+item.type+'&hospital_uuid='+item.hospital_uuid+'&hospital_name='+item.hospital_name+'&office_name='+item.office_name+'&location='+item.location
|
||||
})
|
||||
}
|
||||
|
||||
const remove = (item) => {
|
||||
uni.showModal({
|
||||
title: '删除确认',
|
||||
content: '确定删除该执业地点吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
api.deleteWorkPlace({uuid:item.uuid}).then(res=>{
|
||||
if(res.code==200){
|
||||
uni.showToast({ title: '已删除', icon: 'none' })
|
||||
fetchList()
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const addNew = () => {
|
||||
navTo({
|
||||
url: '/pages_chat/editAddress/editAddress'
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.address-manage-page {
|
||||
min-height: 100vh;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
.list-container {
|
||||
padding: 24rpx;
|
||||
}
|
||||
|
||||
.card {
|
||||
background-color: #fff;
|
||||
border-radius: 16rpx;
|
||||
overflow: hidden;
|
||||
margin-bottom: 20rpx;
|
||||
box-shadow: 0 2rpx 8rpx rgba(0,0,0,0.04);
|
||||
}
|
||||
|
||||
.card-body {
|
||||
padding: 28rpx;
|
||||
}
|
||||
|
||||
.name {
|
||||
font-size: 36rpx;
|
||||
color: #333;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.dept {
|
||||
margin-top: 18rpx;
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.city-and-tag {
|
||||
margin-top: 18rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 16rpx;
|
||||
}
|
||||
|
||||
.city {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.tag {
|
||||
border: 2rpx solid #8B2316;
|
||||
color: #8B2316;
|
||||
border-radius: 24rpx;
|
||||
padding: 2rpx 18rpx;
|
||||
white-space: nowrap;
|
||||
font-size: 22rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.card-actions {
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
align-items: center;
|
||||
gap: 36rpx;
|
||||
padding: 20rpx 28rpx;
|
||||
border-top: 2rpx solid #f0f0f0;
|
||||
}
|
||||
|
||||
.action {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8rpx;
|
||||
}
|
||||
|
||||
.icon { font-size: 26rpx; }
|
||||
.text { font-size: 26rpx; color: #666; }
|
||||
|
||||
.bottom-actions {
|
||||
position: fixed;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: #fff;
|
||||
padding: 24rpx;
|
||||
border-top: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.add-btn {
|
||||
background: #8B2316;
|
||||
border-radius: 12rpx;
|
||||
padding: 24rpx 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn-text { color: #fff; font-size: 32rpx; font-weight: 600; }
|
||||
</style>
|
||||
|
||||
@ -268,7 +268,7 @@
|
||||
await polularScienceArticleListByKeywordsNew(true);
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
});
|
||||
};
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
<div class="msg-custom" :style="{ fontSize: (fontSize || 16) + 'px' }">
|
||||
<view
|
||||
class="customCell cloumn"
|
||||
v-if="JSON.parse(msg.attachment.raw).gdxz_ext_data == '[肝胆商城]'"
|
||||
v-if="JSON.parse(msg.attachment.raw).gdxz_ext_data == '[肝胆商城]' || JSON.parse(msg.attachment.raw).gdxz_type == '[肝胆商城]'"
|
||||
@click="goToDetail(JSON.parse(msg.attachment.raw).gdxz_url)"
|
||||
>
|
||||
<view class="title">{{ JSON.parse(msg.attachment.raw).gdxz_title }}</view>
|
||||
@ -18,7 +18,7 @@
|
||||
</view>
|
||||
<view
|
||||
class="customCell cloumn"
|
||||
v-else-if="JSON.parse(msg.attachment.raw).gdxz_ext_data == '[公益咨询]'"
|
||||
v-else-if="JSON.parse(msg.attachment.raw).gdxz_ext_data == '[公益咨询]' || JSON.parse(msg.attachment.raw).gdxz_type == '[公益咨询]'"
|
||||
@click="goDetail(JSON.parse(msg.attachment.raw).gdxz_id)"
|
||||
>
|
||||
<view class="title">{{ JSON.parse(msg.attachment.raw).gdxz_title }}</view>
|
||||
@ -34,7 +34,7 @@
|
||||
</view>
|
||||
<view
|
||||
class="customCell cloumn"
|
||||
v-else-if="JSON.parse(msg.attachment.raw).gdxz_ext_data == '[门诊公告]'"
|
||||
v-else-if="JSON.parse(msg.attachment.raw).gdxz_ext_data == '[门诊公告]' || JSON.parse(msg.attachment.raw).gdxz_type == '[门诊公告]'"
|
||||
@click="goToDetail(JSON.parse(msg.attachment.raw).gdxz_url)"
|
||||
>
|
||||
|
||||
@ -53,7 +53,7 @@
|
||||
class="customCell cloumn"
|
||||
v-else-if="
|
||||
JSON.parse(msg.attachment.raw).gdxz_ext_data == '[图文科普]' ||
|
||||
JSON.parse(msg.attachment.raw).gdxz_ext_data == '[视频科普]'
|
||||
JSON.parse(msg.attachment.raw).gdxz_ext_data == '[视频科普]' || JSON.parse(msg.attachment.raw).gdxz_type == '[患教科普]' || JSON.parse(msg.attachment.raw).gdxz_type == '[视频科普]'
|
||||
"
|
||||
@click="goToDetail(JSON.parse(msg.attachment.raw).gdxz_url)"
|
||||
>
|
||||
@ -73,7 +73,7 @@
|
||||
|
||||
<view
|
||||
class="customCell cloumn"
|
||||
v-else-if="JSON.parse(msg.attachment.raw).gdxz_ext_data == '[互联网医院]'"
|
||||
v-else-if="JSON.parse(msg.attachment.raw).gdxz_ext_data == '[互联网医院]' || JSON.parse(msg.attachment.raw).gdxz_type == '[互联网医院]'"
|
||||
@click="goToMiniProgram"
|
||||
>
|
||||
|
||||
|
||||
@ -56,7 +56,7 @@
|
||||
<div class="msg-button-group">
|
||||
<div
|
||||
@tap="handleAudioVisible"
|
||||
v-if="!(isWeb || isHarmonyOs)"
|
||||
v-if="!(isWeb || isHarmonyOs || isGroupSend)"
|
||||
class="msg-input-button"
|
||||
>
|
||||
<Icon
|
||||
@ -139,7 +139,7 @@
|
||||
class="send-more-panel"
|
||||
@click.stop="() => {}"
|
||||
>
|
||||
<div class="send-more-panel-item-wrapper">
|
||||
<div class="send-more-panel-item-wrapper" v-if="!(isGroupSend)">
|
||||
<div
|
||||
class="send-more-panel-item"
|
||||
@tap="(event:any) => handleSendVideoMsg('camera', event)"
|
||||
@ -148,7 +148,7 @@
|
||||
</div>
|
||||
<div class="icon-text">{{ t('shootText') }}</div>
|
||||
</div>
|
||||
<div class="send-more-panel-item-wrapper">
|
||||
<div class="send-more-panel-item-wrapper" v-if="!(isGroupSend)">
|
||||
<div
|
||||
class="send-more-panel-item"
|
||||
@tap="(event: any) => handleSendVideoMsg('album', event)"
|
||||
@ -306,6 +306,7 @@ import {
|
||||
isAndroidOrIosApp,
|
||||
isHarmonyOs,
|
||||
} from '@/utils/im/index'
|
||||
|
||||
// @ts-ignore
|
||||
import UniPopup from '@/components/uni-components/uni-popup/components/uni-popup/uni-popup.vue'
|
||||
// @ts-ignore
|
||||
@ -362,12 +363,14 @@ const props = withDefaults(
|
||||
defineProps<{
|
||||
conversationType: V2NIMConst.V2NIMConversationType
|
||||
to: string
|
||||
isGroupSend?: boolean
|
||||
replyMsgsMap?: {
|
||||
[key: string]: V2NIMMessageForUI
|
||||
}
|
||||
}>(),
|
||||
{}
|
||||
)
|
||||
const emits = defineEmits(['send'])
|
||||
/** 会话ID */
|
||||
const conversationId =
|
||||
props.conversationType ===
|
||||
@ -418,6 +421,22 @@ const handleCall = (type: number) => {
|
||||
})
|
||||
}
|
||||
}
|
||||
const outPatientList = ref([]);
|
||||
const getListOutPatient = async () => {
|
||||
const res = await api.listOutPatient({
|
||||
page:1,
|
||||
});
|
||||
if(res.code == 200){
|
||||
outPatientList.value = res.data.list.list;
|
||||
}
|
||||
}
|
||||
const stopOutPatientList = ref([]);
|
||||
const getStopOutPatientList = async () => {
|
||||
const res = await api.stopOutPatientList();
|
||||
if(res.code == 200){
|
||||
stopOutPatientList.value = res.data;
|
||||
}
|
||||
}
|
||||
onShow(() => {
|
||||
uni.$on('articelItem', (article) => {
|
||||
console.log('article', article);
|
||||
@ -433,6 +452,8 @@ onShow(() => {
|
||||
uni.$on('quickReply', (reply) => {
|
||||
inputText.value= reply;
|
||||
});
|
||||
getListOutPatient();
|
||||
getStopOutPatientList();
|
||||
});
|
||||
onUnload(() => {
|
||||
uni.$off('articelItem');
|
||||
@ -539,6 +560,7 @@ const onSelectSince = (type: string) => {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/** 点击@ 群成员 */
|
||||
const handleMentionItemClick = (member: MentionedMember) => {
|
||||
//@ts-ignore
|
||||
@ -619,8 +641,19 @@ const handleSendTextMsg = (type:string) => {
|
||||
let mallText='纽娃复合营养素固体饮料主要成分是:蜂花粉、乳清蛋白粉、灰树花粉、低聚木糖、蚕蛹氨基酸、麦芽粉、薏苡仁粉、烟酸、磷脂,以及其他调味品、辅助原料。科学配比制成,含有丰富的蛋白质、氨基酸、维生素、微量元素及其他营养元素,点击链接了解详情。'
|
||||
let text = type==='mall'?mallText:replaceEmoji(inputText.value)
|
||||
const textMsg = uni.$UIKitNIM.V2NIMMessageCreator.createTextMessage(text)
|
||||
let serverExtension={"gdxz_nickName":"测试","gdxz_sessionType":"general"};
|
||||
uni.$UIKitStore.msgStore
|
||||
//let serverExtension={"gdxz_nickName":"测试","gdxz_sessionType":"general"};
|
||||
if(props.isGroupSend){
|
||||
emits('send',{
|
||||
content:textMsg,
|
||||
msg_type:1,
|
||||
})
|
||||
inputText.value = ''
|
||||
isReplyMsg.value = false
|
||||
replyMsg.value = undefined
|
||||
selectedAtMembers.value = [];
|
||||
}else{
|
||||
|
||||
uni.$UIKitStore.msgStore
|
||||
.sendMessageActive({
|
||||
msg: textMsg as unknown as V2NIMMessage,
|
||||
conversationId,
|
||||
@ -648,6 +681,7 @@ const handleSendTextMsg = (type:string) => {
|
||||
senCustomMsg('mall');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/** 发送文件消息 */
|
||||
const handleSendFileMsg = () => {
|
||||
@ -763,7 +797,22 @@ const handleSendImageMsg = () => {
|
||||
const imgMsg = uni.$UIKitNIM.V2NIMMessageCreator.createImageMessage(
|
||||
res.tempFilePaths[0]
|
||||
)
|
||||
|
||||
if(props.isGroupSend){
|
||||
const fileManager = uni.getFileSystemManager();
|
||||
fileManager.readFile({
|
||||
filePath: res.tempFilePaths[0],
|
||||
encoding: 'base64',
|
||||
success: (res) => {
|
||||
emits('send',{
|
||||
content:res.data,
|
||||
msg_type:2,
|
||||
})
|
||||
},
|
||||
fail: (error) => {
|
||||
console.log('chooseImage', error)
|
||||
}
|
||||
})
|
||||
}else{
|
||||
uni.$UIKitStore.msgStore
|
||||
.sendMessageActive({
|
||||
msg: imgMsg as unknown as V2NIMMessage,
|
||||
@ -783,28 +832,43 @@ const handleSendImageMsg = () => {
|
||||
title: t('sendImageFailedText'),
|
||||
})
|
||||
})
|
||||
},
|
||||
/** uniapp 提供的chooseImage api 在鸿蒙上表现为不支持选择gif,在其他端支持 */
|
||||
fail: (error) => {
|
||||
}
|
||||
|
||||
},
|
||||
/** uniapp 提供的chooseImage api 在鸿蒙上表现为不支持选择gif,在其他端支持 */
|
||||
fail: (error) => {
|
||||
console.log('chooseImage', error)
|
||||
},
|
||||
/** 没有开启权限时,提示开启权限 */
|
||||
complete: handleNoPermission,
|
||||
})
|
||||
|
||||
}
|
||||
const senCustomMsg = (type:string) => {
|
||||
let rawStr="";
|
||||
let text="";
|
||||
let msg_type=0;
|
||||
let msg_content="";
|
||||
let doctor_id="";
|
||||
if(type == 'hospital'){
|
||||
doctor_id='';
|
||||
msg_type=8;
|
||||
msg_content="https://img.applets.igandanyiyuan.com/applet/admin/avatar/2023071813261420200708181049.png";
|
||||
text="[互联网医院]";
|
||||
rawStr=`{\"gdxz_content\":\"我已入驻肝胆相照互联网医院,复诊购药一站式服务,快来看看吧\",\"gdxz_ext_data\":\"[互联网医院]\",\"gdxz_id\":\"1681174885629431808\",\"gdxz_img\":\"https://img.applets.igandanyiyuan.com/applet/admin/avatar/2023071813261420200708181049.png\",\"gdxz_title\":\"肝胆相照互联网医院\",\"gdxz_type\":\"[互联网医院]\",\"gdxz_url\":\"\"}`;
|
||||
}else if(type == 'mall'){
|
||||
msg_type=6;
|
||||
msg_content="";
|
||||
text="[肝胆商城]";
|
||||
rawStr=`{\"gdxz_content\":\"肝胆相照®肝胆病在线公共服务平台\",\"gdxz_ext_data\":\"[肝胆商城]\",\"gdxz_id\":\"\",\"gdxz_img\":\"\",\"gdxz_title\":\"纽娃复合营养素固体饮料\",\"gdxz_type\":\"[肝胆商城]\",\"gdxz_url\":\"https://wx.igandan.com/shop_notify/setInfo?patient_uuid=${patient_uuid}&expert_uuid=${expert_uuid}\"}`;
|
||||
}else if(type == 'outpatient'){
|
||||
msg_type=5;
|
||||
msg_content="";
|
||||
text="[门诊公告]";
|
||||
rawStr=`{\"gdxz_content\":\"门诊详情\",\"gdxz_ext_data\":\"[门诊公告]\",\"gdxz_id\":\"\",\"gdxz_img\":\"\",\"gdxz_title\":\"${expert_name}医生门诊详情\",\"gdxz_type\":\"[门诊公告]\",\"gdxz_url\":\"https://dev-wx.igandan.com/wxPatient/index.htm#/outPatient?link=share&expertUuid=${expert_uuid}\"}`
|
||||
}else if(type == 'article'){
|
||||
msg_type=3;
|
||||
msg_content=articleInfo.value.uuid;
|
||||
text="[图文科普]";
|
||||
let content='"'+articleInfo.value.summary+'"';
|
||||
let id='"'+articleInfo.value.uuid+'"';
|
||||
@ -812,6 +876,8 @@ const senCustomMsg = (type:string) => {
|
||||
let path='"'+docUrl+articleInfo.value.path+'"';
|
||||
rawStr=`{\"gdxz_content\":${content},\"gdxz_ext_data\":\"[图文科普]\",\"gdxz_id\":${id},\"gdxz_img\":\"http://doc.igandan.org/app/book/pdf/2019/20190613152617.png\",\"gdxz_title\":${title},\"gdxz_type\":\"[图文科普]\",\"gdxz_url\":${path}}`
|
||||
}else if(type == 'video'){
|
||||
msg_type=4;
|
||||
msg_content=videoInfo.value.uuid;
|
||||
let content='"'+videoInfo.value.note+'"';
|
||||
let id='"'+videoInfo.value.uuid+'"';
|
||||
let title='"'+videoInfo.value.name+'"';
|
||||
@ -820,6 +886,12 @@ const senCustomMsg = (type:string) => {
|
||||
rawStr=`{\"gdxz_content\":${content},\"gdxz_ext_data\":\"[视频科普]\",\"gdxz_id\":${id},\"gdxz_img\":\"http://doc.igandan.org/app/book/pdf/2019/20190613152617.png\",\"gdxz_title\":${title},\"gdxz_type\":\"[视频科普]\",\"gdxz_url\":${path}}`
|
||||
}
|
||||
const customMsg = uni.$UIKitNIM.V2NIMMessageCreator.createCustomMessage(text,rawStr)
|
||||
if(props.isGroupSend){
|
||||
emits('send',{
|
||||
content:msg_content,
|
||||
msg_type:msg_type,
|
||||
})
|
||||
}else{
|
||||
uni.$UIKitStore.msgStore
|
||||
.sendMessageActive({
|
||||
msg: customMsg as unknown as V2NIMMessage,
|
||||
@ -839,6 +911,7 @@ const senCustomMsg = (type:string) => {
|
||||
title: '发送失败',
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const handleCustom = (type: string, event: any) => {
|
||||
@ -853,10 +926,18 @@ const handleCustom = (type: string, event: any) => {
|
||||
showMallModal.value = true
|
||||
patientListByGBK();
|
||||
}else if(type == 'outpatient'){
|
||||
senCustomMsg('outpatient');
|
||||
// navTo({
|
||||
// url: '/pages_chat/outpatient/outpatient',
|
||||
// })
|
||||
// navTo({
|
||||
// url: '/pages_chat/outpatient/outpatient',
|
||||
// })
|
||||
if( outPatientList.value.length==0 && stopOutPatientList.value.length==0 ){
|
||||
navTo({
|
||||
url: '/pages_chat/outpatient/outpatient',
|
||||
})
|
||||
}else{
|
||||
senCustomMsg('outpatient');
|
||||
}
|
||||
|
||||
|
||||
}else if(type == 'hospital'){
|
||||
senCustomMsg('hospital');
|
||||
}
|
||||
|
||||
178
pages_chat/editAddress/editAddress.vue
Normal file
178
pages_chat/editAddress/editAddress.vue
Normal file
@ -0,0 +1,178 @@
|
||||
<template>
|
||||
<view class="edit-address-page">
|
||||
<navBar :title="pageTitle" />
|
||||
|
||||
<view class="form-container">
|
||||
<!-- 医院(输入联想搜索) -->
|
||||
<view class="form-item">
|
||||
<view class="label">医院 <text class="required">*</text></view>
|
||||
<view class="value full">
|
||||
<input class="input" v-model.trim="form.hospital_name" placeholder="请输入医院名称" @input="onHospitalInput" @keydown.enter.prevent="onHospitalEnter" />
|
||||
<view v-if="showHospitalList" class="suggestion">
|
||||
<view v-for="h in hospitalList" :key="h.uuid" class="suggestion-item" @click="pickHospital(h)">
|
||||
{{ h.name }}
|
||||
</view>
|
||||
<view v-if="hospitalList.length===0" class="suggestion-empty">无匹配医院</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 分割线 -->
|
||||
<view class="divider"></view>
|
||||
|
||||
<!-- 科室 -->
|
||||
<view class="form-item">
|
||||
<view class="label">科室 <text class="required">*</text></view>
|
||||
<view class="value">
|
||||
<input class="input" v-model.trim="form.office_name" placeholder="请输入科室" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="divider"></view>
|
||||
|
||||
<!-- 地址 -->
|
||||
<view class="form-item">
|
||||
<view class="label">地址 <text class="required">*</text></view>
|
||||
<view class="value">
|
||||
<input class="input" v-model.trim="form.location" placeholder="请输入地址" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="divider big"></view>
|
||||
|
||||
<!-- 门诊类型 -->
|
||||
<view class="form-item column">
|
||||
<view class="label">门诊类型 <text class="required">*</text></view>
|
||||
<view class="type-row">
|
||||
<view class="type-btn" :class="{active: form.type==1}" @click="selectType(1)">普通门诊</view>
|
||||
<view class="type-btn" :class="{active: form.type==2}" @click="selectType(2)">专家门诊</view>
|
||||
<view class="type-btn" :class="{active: form.type==3}" @click="selectType(3)">特需门诊</view>
|
||||
<view class="type-btn" :class="{active: form.type==4}" @click="selectType(4)">专科/专病门诊</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="bottom-actions">
|
||||
<view class="submit-btn" @click="submit">
|
||||
<text class="btn-text">{{form.uuid?'确定修改':'确定新增'}}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { onLoad } from '@dcloudio/uni-app'
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
import api from '@/api/api.js'
|
||||
|
||||
const pageTitle = ref('新增执业地点')
|
||||
const form = ref({
|
||||
hospital_uuid: '',
|
||||
hospital_name: '',
|
||||
office_name: '',
|
||||
location: '',
|
||||
type: 4
|
||||
})
|
||||
|
||||
const selectType = (t) => { form.value.type = t }
|
||||
|
||||
// 医院联想搜索
|
||||
const hospitalList = ref([])
|
||||
const showHospitalList = ref(false)
|
||||
let hospitalTimer = null
|
||||
const onHospitalInput = (e) => {
|
||||
showHospitalList.value = true
|
||||
if (hospitalTimer) clearTimeout(hospitalTimer)
|
||||
hospitalTimer = setTimeout(() => {
|
||||
fetchHospitals(e.detail.value || form.value.hospital_name)
|
||||
}, 300)
|
||||
}
|
||||
const onHospitalEnter = () => {
|
||||
fetchHospitals(form.value.hospital_name)
|
||||
}
|
||||
const fetchHospitals = async (keyword) => {
|
||||
if (!keyword) { hospitalList.value = []; return }
|
||||
const res = await api.getHospitalList({ name: keyword })
|
||||
if (res && res.code === 200) {
|
||||
hospitalList.value = res.data || []
|
||||
}
|
||||
}
|
||||
const pickHospital = (h) => {
|
||||
form.value.hospital_uuid = h.uuid
|
||||
form.value.hospital_name = h.name
|
||||
showHospitalList.value = false
|
||||
}
|
||||
const validate = () => {
|
||||
if (!form.value.hospital_name) return '请选择医院'
|
||||
if (!form.value.office_name) return '请输入科室'
|
||||
if (!form.value.location) return '请输入地址'
|
||||
if (!form.value.type) return '请选择门诊类型'
|
||||
return ''
|
||||
}
|
||||
|
||||
const submit = async () => {
|
||||
const err = validate()
|
||||
if (err) { uni.showToast({ title: err, icon: 'none' }); return }
|
||||
// 示例更新接口;若不存在可替换为新增或本地处理
|
||||
try {
|
||||
const res =form.value.uuid?await api.updateWorkPlace(form.value) : await api.addWorkPlace(form.value)
|
||||
if (res.code === 200) {
|
||||
let title = form.value.uuid ? '修改成功' : '新增成功'
|
||||
uni.showToast({ title: title, icon: 'none' })
|
||||
uni.navigateBack()
|
||||
}
|
||||
} catch (e) {
|
||||
uni.showToast({ title: '提交失败', icon: 'none' })
|
||||
}
|
||||
}
|
||||
|
||||
onLoad((options) => {
|
||||
// 支持从列表/详情传参回填
|
||||
if (options) {
|
||||
if(options.uuid){
|
||||
form.value.uuid = options.uuid;
|
||||
form.value.type = options.type;
|
||||
form.value.hospital_uuid = options.hospital_uuid;
|
||||
form.value.hospital_name = options.hospital_name;
|
||||
form.value.office_name = options.office_name;
|
||||
form.value.location = options.location;
|
||||
}
|
||||
if(options.uuid){
|
||||
pageTitle.value = '修改执业地点'
|
||||
}
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.edit-address-page { min-height: 100vh; background: #fff; }
|
||||
.form-container { padding: 24rpx; }
|
||||
|
||||
.form-item { display: flex; align-items: center; justify-content: space-between; padding: 24rpx 0; }
|
||||
.form-item.column { flex-direction: column; align-items: flex-start; }
|
||||
.label { font-size: 30rpx; color: #333; }
|
||||
.required { color: #8B2316; margin-left: 6rpx; }
|
||||
.value { flex: 1; margin-left: 24rpx; }
|
||||
.value.full { width: 100%; margin-left: 0; position: relative; }
|
||||
.value-text { font-size: 30rpx; color: #333; }
|
||||
.value-text.placeholder { color: #999; }
|
||||
.input { width: 100%; font-size: 30rpx; color: #333; }
|
||||
|
||||
.suggestion { position: absolute; top: 84rpx; left: 0; right: 0; background: #fff; border: 2rpx solid #eee; border-radius: 10rpx; max-height: 480rpx; overflow-y: auto; z-index: 10; }
|
||||
.suggestion-item { padding: 20rpx 24rpx; font-size: 28rpx; color: #333; border-bottom: 2rpx solid #f5f5f5; }
|
||||
.suggestion-item:last-child { border-bottom: 0; }
|
||||
.suggestion-empty { padding: 20rpx 24rpx; font-size: 26rpx; color: #999; }
|
||||
|
||||
.divider { height: 2rpx; background: #eee; }
|
||||
.divider.big { margin-top: 10rpx; }
|
||||
|
||||
.type-row { display: grid; grid-template-columns: repeat(4, 1fr); gap: 20rpx; margin-top: 20rpx; width: 100%; }
|
||||
.type-btn { text-align: center; border: 2rpx solid #ddd; border-radius: 12rpx; height: 96rpx; line-height: 96rpx; color: #999; font-size: 24rpx;}
|
||||
.type-btn.active { border-color: #8B2316; color: #8B2316; background: url('@/static/addoutpa_true.png') right bottom/39rpx 39rpx no-repeat; }
|
||||
|
||||
.bottom-actions { position: fixed; left: 0; right: 0; bottom: 0; background: #fff; padding: 30rpx; border-top: 1rpx solid #eee; }
|
||||
.submit-btn { background: #8B2316; border-radius: 12rpx; padding: 24rpx 0; text-align: center; }
|
||||
.btn-text { color: #fff; font-size: 32rpx; font-weight: 600; }
|
||||
</style>
|
||||
|
||||
@ -22,19 +22,30 @@
|
||||
|
||||
<view class="card-header">
|
||||
<text class="label">{{ item.realname.split(',').length }}位患者:</text>
|
||||
<view class="close" @click="onClear">
|
||||
<view class="close" @click="delGroupSendMsg(item)">
|
||||
<text>×</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="line" >
|
||||
{{ item.realname }}
|
||||
</view>
|
||||
<view class="line phone" >
|
||||
<view class="line phone" v-if="item.msg_type==1">
|
||||
{{ item.msg_content }}
|
||||
</view>
|
||||
<view class="line phone" v-if="item.msg_type==3" @click="onDetail(item)">
|
||||
<view class="custom">
|
||||
<view class="title">{{JSON.parse(item.msg_content).summary }}</view>
|
||||
<view class="row">
|
||||
<view class="left">{{ docUrl+JSON.parse(item.msg_content).path }}</view>
|
||||
<view class="right">
|
||||
<image :src="docUrl+JSON.parse(item.msg_content).imgPath" ></image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="card-footer">
|
||||
<view class="btn-outline" @click="onResend">再发一条</view>
|
||||
<view class="btn-outline" @click="onResend(item)">再发一条</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -64,8 +75,8 @@
|
||||
</scroll-view>
|
||||
|
||||
<!-- 底部按钮 -->
|
||||
<view class="bottom-bar">
|
||||
<view class="btn-primary" @click="openModal">群发消息</view>
|
||||
<view class="bottom-bar" @click="openModal">
|
||||
<view class="btn-primary" >群发消息</view>
|
||||
</view>
|
||||
<!-- 弹窗与遮罩 -->
|
||||
<view v-if="showModal" class="mask" @click="closeModal"></view>
|
||||
@ -88,6 +99,8 @@ import { ref, onMounted } from 'vue'
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
import api from '@/api/api.js'
|
||||
import { onShow } from '@dcloudio/uni-app'
|
||||
import docUrl from '@/utils/docUrl.js'
|
||||
import navTo from '@/utils/navTo.js'
|
||||
const currentTime = ref('')
|
||||
const patientCount = ref(1)
|
||||
const patientName = ref('测试')
|
||||
@ -168,9 +181,13 @@ const onRefresh = async () => {
|
||||
await listGroupSendMsg(true);
|
||||
|
||||
refreshing.value = false;
|
||||
uni.showToast({ title: '刷新成功', icon: 'success' });
|
||||
uni.showToast({ title: '刷新成功', icon: 'none' });
|
||||
};
|
||||
|
||||
const onDetail = (item) => {
|
||||
navTo({
|
||||
url: `/pages_app/webview/webview?url=${encodeURIComponent(docUrl+JSON.parse(item.msg_content).path)}`,
|
||||
})
|
||||
}
|
||||
// 上拉加载更多
|
||||
const onLoadMore = async () => {
|
||||
if(!hasMore.value || loading.value) return;
|
||||
@ -197,19 +214,49 @@ const closeModal = () => {
|
||||
const onSelect = (type) => {
|
||||
showModal.value = false;
|
||||
if (type === 'single') {
|
||||
uni.showToast({ title: '单独选择', icon: 'none' });
|
||||
navTo({
|
||||
url: "/pages_app/selectPatient/selectPatient?from=chatMsg"
|
||||
})
|
||||
} else if (type === 'group') {
|
||||
uni.showToast({ title: '分组选择', icon: 'none' });
|
||||
navTo({
|
||||
url: '/pages_chat/patientGroup/patientGroup',
|
||||
})
|
||||
}
|
||||
};
|
||||
const onClear = () => {
|
||||
const delGroupSendMsg = (obj) => {
|
||||
// 清空选择的患者(占位)
|
||||
patientCount.value = 0
|
||||
patientName.value = ''
|
||||
patientPhone.value = ''
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '确定删除该群发消息吗?',
|
||||
success: (res) => {
|
||||
if(res.confirm){
|
||||
api.delGroupSendMsg({
|
||||
uuid: obj.uuid
|
||||
}).then(res => {
|
||||
if(res.code == 200){
|
||||
uni.showToast({ title: '删除成功', icon: 'none' })
|
||||
list.value = list.value.filter(item => obj.uuid != item.uuid)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
const onResend = () => {
|
||||
uni.showToast({ title: '已触发再发一条', icon: 'none' })
|
||||
const onResend = (obj) => {
|
||||
let arr=[];
|
||||
let idArr=obj.patient_uuid.split(',');
|
||||
obj.realname.split(',').forEach((item,index) => {
|
||||
arr.push({
|
||||
uuid: idArr[index],
|
||||
realName: item,
|
||||
})
|
||||
})
|
||||
uni.setStorageSync('selectedChatPatientsSingle', {
|
||||
patients: arr
|
||||
});
|
||||
navTo({
|
||||
url: `/pages_chat/groupSend/groupSend?from=chatMsg`
|
||||
})
|
||||
}
|
||||
const onSendGroup = () => {
|
||||
uni.showToast({ title: '已触发群发', icon: 'none' })
|
||||
@ -222,6 +269,46 @@ $brand: #8B2316;
|
||||
$brand-deep: #8B2316;
|
||||
$primary: #00cbc0;
|
||||
$red: #D32F2F;
|
||||
.custom{
|
||||
padding: 25rpx;
|
||||
border-radius: 16rpx;
|
||||
border: 2rpx solid #f0f0f0;
|
||||
width:80%;
|
||||
margin: 0 auto;
|
||||
.title{
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
.row{
|
||||
margin-top: 20rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.left{
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
display: -webkit-box;
|
||||
-webkit-line-clamp: 2;
|
||||
-webkit-box-orient: vertical;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
word-break: break-all;
|
||||
}
|
||||
.right{
|
||||
image{
|
||||
width: 150rpx;
|
||||
height: 150rpx;
|
||||
margin-left: 20rpx;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/* 遮罩与弹窗 */
|
||||
.mask {
|
||||
position: fixed;
|
||||
@ -286,9 +373,8 @@ $red: #D32F2F;
|
||||
.scroll-container {
|
||||
position: fixed;
|
||||
top: 140rpx;
|
||||
|
||||
width:100%;
|
||||
bottom: 200rpx;
|
||||
bottom: 107rpx;
|
||||
|
||||
}
|
||||
|
||||
@ -332,8 +418,8 @@ $red: #D32F2F;
|
||||
.label { font-size: 32rpx; color: #333; }
|
||||
.close {
|
||||
position: absolute;
|
||||
right: -15rpx;
|
||||
top: -18rpx;
|
||||
right: -30rpx;
|
||||
top: -36rpx;
|
||||
width: 100rpx;
|
||||
height: 100rpx;
|
||||
border-bottom-left-radius: 100rpx;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<view class="page">
|
||||
<view class="page" @touchstart="handleTapContent">
|
||||
<!-- 顶部导航 -->
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
@ -32,9 +32,9 @@
|
||||
<text class="label"
|
||||
>消息将发送给{{ selectedPatients.length }}位患者:</text
|
||||
>
|
||||
<view class="close" @click="onClear">
|
||||
<!-- <view class="close" @click="onClear">
|
||||
<text>×</text>
|
||||
</view>
|
||||
</view> -->
|
||||
</view>
|
||||
<view class="card-body">
|
||||
<view class="patient-list">
|
||||
@ -57,16 +57,7 @@
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部按钮 -->
|
||||
<view class="bottom-bar">
|
||||
<view style="height: 'auto'">
|
||||
<!-- <MessageInput
|
||||
:reply-msgs-map="replyMsgsMap"
|
||||
:conversation-type="conversationType"
|
||||
:to="to"
|
||||
/> -->
|
||||
</view>
|
||||
</view>
|
||||
|
||||
|
||||
<!-- 弹窗与遮罩 -->
|
||||
<view v-if="showModal" class="mask" @click="closeModal"></view>
|
||||
@ -82,21 +73,38 @@
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 底部按钮 -->
|
||||
<view class="bottom-bar">
|
||||
<view style="height:auto;width:100%">
|
||||
<MessageInput
|
||||
:isGroupSend="true"
|
||||
@send="send"
|
||||
/>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted } from "vue";
|
||||
import navBar from "@/components/navBar/navBar.vue";
|
||||
import api from "@/api/api.js";
|
||||
import { events } from "@/utils/im/constants";
|
||||
import { onShow,onLoad,onUnload } from "@dcloudio/uni-app";
|
||||
import navTo from "@/utils/navTo.js";
|
||||
import MessageInput from "@/pages_chat/chat/message/message-input.vue";
|
||||
const showModal = ref(false);
|
||||
const selectedPatients = ref([]);
|
||||
const from = ref('');
|
||||
const replyMsgsMap = ref({});
|
||||
const conversationType = ref("1");
|
||||
const msg_content = ref("");
|
||||
const msg_type = ref("1");
|
||||
const to = ref("");
|
||||
onLoad((options) => {
|
||||
if(options.from == 'chatMsg'){
|
||||
from.value = 'chatMsg';
|
||||
}
|
||||
})
|
||||
const toggleModal = () => {
|
||||
showModal.value = !showModal.value;
|
||||
}
|
||||
@ -110,6 +118,12 @@ const goBack = () => {
|
||||
}
|
||||
});
|
||||
}
|
||||
const send = (data) => {
|
||||
console.log(data);
|
||||
msg_content.value = data.content;
|
||||
msg_type.value = data.msg_type;
|
||||
addGroupSendMsg4YunXin();
|
||||
}
|
||||
const addGroupSendMsg4YunXin=async()=>{
|
||||
const res=await api.addGroupSendMsg4YunXin({
|
||||
patient_user_uuid: selectedPatients.value.map(item => item.uuid).join(','),
|
||||
@ -128,6 +142,12 @@ const addGroupSendMsg4YunXin=async()=>{
|
||||
onMounted(() => {
|
||||
// 初始化数据
|
||||
});
|
||||
const handleTapContent= () => {
|
||||
uni.$emit(events.CLOSE_PANEL)
|
||||
setTimeout(() => {
|
||||
uni.$emit(events.CLOSE_PANEL)
|
||||
}, 300)
|
||||
}
|
||||
|
||||
onShow(() => {
|
||||
try {
|
||||
@ -135,10 +155,16 @@ onShow(() => {
|
||||
console.log(data)
|
||||
selectedPatients.value = data.patients;
|
||||
});
|
||||
uni.$on('selectedChatPatientsSingle',(data)=>{
|
||||
if(from.value == 'chatMsg'){
|
||||
console.log(uni.getStorageSync('selectedChatPatientsSingle'))
|
||||
selectedPatients.value = uni.getStorageSync('selectedChatPatientsSingle').patients;
|
||||
}else{
|
||||
uni.$on('selectedChatPatientsSingle',(data)=>{
|
||||
console.log(data)
|
||||
selectedPatients.value = data.patients;
|
||||
});
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
console.error('接收已选患者失败', e);
|
||||
}
|
||||
@ -159,7 +185,7 @@ const onSelect = (type) => {
|
||||
showModal.value = false;
|
||||
if (type === "single") {
|
||||
navTo({
|
||||
url: "/pages_app/selectPatient/selectPatient"
|
||||
url: "/pages_app/selectPatient/selectPatient?from=chat"
|
||||
})
|
||||
// 这里可以跳转到患者选择页面
|
||||
} else if (type === "group") {
|
||||
@ -289,8 +315,7 @@ $red: #d32f2f;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
background: $primary;
|
||||
height: 100rpx;
|
||||
min-height: 100rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
261
pages_chat/note/note.vue
Normal file
261
pages_chat/note/note.vue
Normal file
@ -0,0 +1,261 @@
|
||||
<template>
|
||||
<view class="outpatient-info-page">
|
||||
|
||||
|
||||
<!-- 导航栏 -->
|
||||
<navBar title="门诊信息" />
|
||||
<!-- 主内容区域 -->
|
||||
<view class="content-area">
|
||||
<view class="input-container">
|
||||
<textarea
|
||||
class="text-input"
|
||||
v-model="outpatientInfo"
|
||||
placeholder="请输入门诊信息..."
|
||||
:maxlength="500"
|
||||
:auto-height="true"
|
||||
></textarea>
|
||||
|
||||
<!-- 语音输入按钮 -->
|
||||
<!-- <view class="voice-input-btn" @click="startVoiceInput">
|
||||
<text class="voice-icon">🎤</text>
|
||||
</view> -->
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部提交按钮 -->
|
||||
<view class="bottom-actions">
|
||||
<view class="submit-btn" @click="submitInfo">
|
||||
<text class="submit-text">提交</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
import api from '@/api/api'
|
||||
import {onLoad} from '@dcloudio/uni-app'
|
||||
onLoad((options) => {
|
||||
console.log(options.note)
|
||||
console.log(decodeURIComponent(options.note))
|
||||
outpatientInfo.value = decodeURIComponent(options.note);
|
||||
})
|
||||
// 响应式数据
|
||||
const outpatientInfo = ref('')
|
||||
const addOutPatientA = () => {
|
||||
api.addOutPatientA({
|
||||
note: outpatientInfo.value,
|
||||
type:2,
|
||||
week: "",
|
||||
workplace_uuid: "",
|
||||
day: "",
|
||||
uuid: "",
|
||||
}).then(res => {
|
||||
console.log(res)
|
||||
if(res.code==0){
|
||||
uni.navigateBack()
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 方法
|
||||
const goBack = () => {
|
||||
uni.navigateBack()
|
||||
}
|
||||
|
||||
const startVoiceInput = () => {
|
||||
uni.showToast({
|
||||
title: '语音输入功能',
|
||||
icon: 'none'
|
||||
})
|
||||
// 这里可以集成语音识别功能
|
||||
}
|
||||
|
||||
const submitInfo = () => {
|
||||
if (!outpatientInfo.value.trim()) {
|
||||
uni.showToast({
|
||||
title: '请输入门诊信息',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
addOutPatientA()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.outpatient-info-page {
|
||||
min-height: 100vh;
|
||||
background-color: #fff;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* 状态栏样式 */
|
||||
.status-bar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #fff;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.status-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
}
|
||||
|
||||
.network-type {
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.signal-bars {
|
||||
display: flex;
|
||||
align-items: end;
|
||||
gap: 2rpx;
|
||||
margin: 0 10rpx;
|
||||
}
|
||||
|
||||
.bar {
|
||||
width: 4rpx;
|
||||
background-color: #333;
|
||||
border-radius: 1rpx;
|
||||
}
|
||||
|
||||
.bar:nth-child(1) { height: 8rpx; }
|
||||
.bar:nth-child(2) { height: 12rpx; }
|
||||
.bar:nth-child(3) { height: 16rpx; }
|
||||
.bar:nth-child(4) { height: 20rpx; }
|
||||
|
||||
.battery-text {
|
||||
font-size: 24rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.battery-icon {
|
||||
font-size: 20rpx;
|
||||
}
|
||||
|
||||
/* 导航栏样式 */
|
||||
.nav-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #fff;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.nav-left {
|
||||
width: 60rpx;
|
||||
}
|
||||
|
||||
.back-arrow {
|
||||
font-size: 50rpx;
|
||||
color: #8B2316;
|
||||
}
|
||||
|
||||
.nav-center {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.nav-title {
|
||||
font-size: 34rpx;
|
||||
color: #8B2316;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.nav-right {
|
||||
width: 60rpx;
|
||||
}
|
||||
|
||||
/* 主内容区域 */
|
||||
.content-area {
|
||||
padding: 40rpx 30rpx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.input-container {
|
||||
position: relative;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.text-input {
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
min-height: 600rpx;
|
||||
padding: 30rpx;
|
||||
border: 2rpx solid #e0e0e0;
|
||||
border-radius: 12rpx;
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
background-color: #fff;
|
||||
resize: none;
|
||||
outline: none;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.text-input:focus {
|
||||
border-color: #8B2316;
|
||||
}
|
||||
|
||||
/* 语音输入按钮 */
|
||||
.voice-input-btn {
|
||||
position: absolute;
|
||||
bottom: 20rpx;
|
||||
right: 20rpx;
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
background-color: #8B2316;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0 4rpx 12rpx rgba(139, 35, 22, 0.3);
|
||||
}
|
||||
|
||||
.voice-icon {
|
||||
font-size: 36rpx;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* 底部提交按钮 */
|
||||
.bottom-actions {
|
||||
position: fixed;
|
||||
bottom: 20rpx;
|
||||
left:30rpx;
|
||||
right: 30rpx;
|
||||
background-color: #fff;
|
||||
|
||||
}
|
||||
|
||||
.submit-btn {
|
||||
|
||||
background-color: #fff;
|
||||
border: 2rpx solid #8B2316;
|
||||
border-radius: 12rpx;
|
||||
padding: 25rpx;
|
||||
color: #8B2316;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.submit-text {
|
||||
color: #8B2316;
|
||||
font-size: 32rpx;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
.submit-btn:active {
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
</style>
|
||||
547
pages_chat/outManage/outManage.vue
Normal file
547
pages_chat/outManage/outManage.vue
Normal file
@ -0,0 +1,547 @@
|
||||
<template>
|
||||
<view class="add-schedule-page">
|
||||
<!-- 导航栏 -->
|
||||
<navBar :title="title" />
|
||||
|
||||
<!-- 主内容区域 -->
|
||||
<view class="content-area">
|
||||
<!-- 门诊时间选择 -->
|
||||
<view class="form-section">
|
||||
<view class="section-title">
|
||||
<text class="title-text">门诊时间</text>
|
||||
<text class="required-mark">*</text>
|
||||
</view>
|
||||
|
||||
<!-- 星期选择 -->
|
||||
<view class="weekday-selection">
|
||||
<view class="weekday-row">
|
||||
<view
|
||||
class="weekday-btn"
|
||||
:class="{ active: selectedWeekday == 1 }"
|
||||
@click="selectWeekday(1)"
|
||||
>
|
||||
<text class="weekday-text">周一</text>
|
||||
</view>
|
||||
<view
|
||||
class="weekday-btn"
|
||||
:class="{ active: selectedWeekday == 2 }"
|
||||
@click="selectWeekday(2)"
|
||||
>
|
||||
<text class="weekday-text">周二</text>
|
||||
</view>
|
||||
<view
|
||||
class="weekday-btn"
|
||||
:class="{ active: selectedWeekday == 3 }"
|
||||
@click="selectWeekday(3)"
|
||||
>
|
||||
<text class="weekday-text">周三</text>
|
||||
</view>
|
||||
<view
|
||||
class="weekday-btn"
|
||||
:class="{ active: selectedWeekday == 4 }"
|
||||
@click="selectWeekday(4)"
|
||||
>
|
||||
<text class="weekday-text">周四</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="weekday-row">
|
||||
<view
|
||||
class="weekday-btn"
|
||||
:class="{ active: selectedWeekday == 5 }"
|
||||
@click="selectWeekday(5)"
|
||||
>
|
||||
<text class="weekday-text">周五</text>
|
||||
</view>
|
||||
<view
|
||||
class="weekday-btn"
|
||||
:class="{ active: selectedWeekday == 6 }"
|
||||
@click="selectWeekday(6)"
|
||||
>
|
||||
<text class="weekday-text">周六</text>
|
||||
</view>
|
||||
<view
|
||||
class="weekday-btn"
|
||||
:class="{ active: selectedWeekday== 7 }"
|
||||
@click="selectWeekday(7)"
|
||||
>
|
||||
<text class="weekday-text">周日</text>
|
||||
</view>
|
||||
<view class="weekday-btn empty"></view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 时间段选择 -->
|
||||
<view class="time-period-selection">
|
||||
<view
|
||||
class="time-btn"
|
||||
:class="{ active: selectedTimePeriod === 'a' }"
|
||||
@click="selectTimePeriod('a')"
|
||||
>
|
||||
<text class="time-text">上午</text>
|
||||
</view>
|
||||
<view
|
||||
class="time-btn"
|
||||
:class="{ active: selectedTimePeriod === 'b' }"
|
||||
@click="selectTimePeriod('b')"
|
||||
>
|
||||
<text class="time-text">下午</text>
|
||||
</view>
|
||||
<view
|
||||
class="time-btn"
|
||||
:class="{ active: selectedTimePeriod === 'c' }"
|
||||
@click="selectTimePeriod('c')"
|
||||
>
|
||||
<text class="time-text">晚上</text>
|
||||
</view>
|
||||
<view
|
||||
class="time-btn"
|
||||
:class="{ active: selectedTimePeriod === 'd' }"
|
||||
@click="selectTimePeriod('d')"
|
||||
>
|
||||
<text class="time-text">全天</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 门诊地点选择 -->
|
||||
<view class="form-section form-site">
|
||||
<view class="section-title">
|
||||
<text class="title-text">门诊地点</text>
|
||||
<text class="required-mark">*</text>
|
||||
</view>
|
||||
|
||||
<view class="location-card"
|
||||
v-for="item in workPlaceList"
|
||||
:key="item.uuid"
|
||||
:class="{ active:selectedLocation.uuid === item.uuid }"
|
||||
@click="chooseLocation(item)">
|
||||
<view class="location-content">
|
||||
<text class="hospital-name">{{ item.hospital_name }}</text>
|
||||
<text class="office-number">{{ item.office_name }}</text>
|
||||
<view class="location-bottom">
|
||||
<text class="location-text">{{ item.location }}</text>
|
||||
<view class="clinic-type-tag">
|
||||
{{ getTypeText(item.type) }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- <view class="check-icon">✓</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部确定按钮 -->
|
||||
<view class="bottom-actions">
|
||||
<view class="confirm-btn" @click="confirmPublish">
|
||||
<text class="btn-text">{{ uuid? '确定修改' : '确定发布' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { onLoad, onShow } from "@dcloudio/uni-app";
|
||||
import api from "@/api/api.js";
|
||||
import navTo from '@/utils/navTo'
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
const title = ref('增加门诊安排')
|
||||
const uuid=ref('')
|
||||
// 响应式数据
|
||||
const selectedWeekday = ref(null)
|
||||
const selectedTimePeriod = ref('')
|
||||
const selectedLocation = ref({})
|
||||
const getTypeText = (type) => {
|
||||
const map = { 1: '普通门诊', 2: '专家门诊', 3: '特需门诊', 4: '专科/专病门诊' }
|
||||
return map[type] || '普通门诊'
|
||||
}
|
||||
onShow(()=>{
|
||||
listWorkPlace()
|
||||
})
|
||||
// 方法
|
||||
const goBack = () => {
|
||||
uni.navigateBack()
|
||||
}
|
||||
const workPlaceList=ref([])
|
||||
const listWorkPlace=async()=>{
|
||||
const res = await api.listWorkPlace()
|
||||
if(res.code == 200){
|
||||
workPlaceList.value = res.data
|
||||
|
||||
}
|
||||
}
|
||||
const selectWeekday = (weekday) => {
|
||||
selectedWeekday.value = weekday
|
||||
}
|
||||
const addOutPatient=async()=>{
|
||||
const res = await api.addOutPatient({
|
||||
week: selectedWeekday.value,
|
||||
day: selectedTimePeriod.value,
|
||||
note:'',
|
||||
type:1,
|
||||
workplace_uuid: selectedLocation.value.uuid
|
||||
})
|
||||
if(res.code == 200){
|
||||
uni.showToast({
|
||||
title: '发布成功',
|
||||
icon: 'none'
|
||||
})
|
||||
uni.navigateBack()
|
||||
|
||||
}
|
||||
}
|
||||
const updateOutPatient=async()=>{
|
||||
const res = await api.updateOutPatient({
|
||||
uuid: uuid.value,
|
||||
note:'',
|
||||
type:1,
|
||||
week: selectedWeekday.value,
|
||||
day: selectedTimePeriod.value,
|
||||
workplace_uuid: selectedLocation.value
|
||||
})
|
||||
|
||||
if(res.code == 200){
|
||||
uni.showToast({
|
||||
title: '修改成功',
|
||||
icon: 'none'
|
||||
})
|
||||
uni.navigateBack()
|
||||
}
|
||||
}
|
||||
const selectTimePeriod = (period) => {
|
||||
selectedTimePeriod.value = period
|
||||
}
|
||||
|
||||
const chooseLocation = (item) => {
|
||||
selectedLocation.value = item
|
||||
}
|
||||
const getType=(type)=>{
|
||||
const map = { 1: 'a', 2: 'b', 3: 'c', 4: 'd' }
|
||||
return map[type]
|
||||
}
|
||||
const confirmPublish = () => {
|
||||
if (!selectedWeekday.value) {
|
||||
uni.showToast({
|
||||
title: '请选择门诊时间',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (!selectedTimePeriod.value) {
|
||||
uni.showToast({
|
||||
title: '请选择时间段',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if (!selectedLocation.value) {
|
||||
uni.showToast({
|
||||
title: '请选择门诊地点',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
if(uuid.value){
|
||||
updateOutPatient()
|
||||
}else{
|
||||
addOutPatient()
|
||||
}
|
||||
}
|
||||
|
||||
onLoad((options)=>{
|
||||
console.log(options)
|
||||
uuid.value = options.uuid;
|
||||
selectedWeekday.value = options.week;
|
||||
selectedLocation.value.uuid = options.workplace_uuid;
|
||||
selectedTimePeriod.value = getType(options.type);
|
||||
if(uuid.value){
|
||||
title.value = '编辑门诊安排'
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.add-schedule-page {
|
||||
min-height: 100vh;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
/* 状态栏样式 */
|
||||
.status-bar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #fff;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.status-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
}
|
||||
|
||||
.network-speed {
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.network-type {
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.wifi-icon, .battery-icon {
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
.battery {
|
||||
font-size: 24rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 导航栏样式 */
|
||||
.nav-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #fff;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.nav-left {
|
||||
width: 60rpx;
|
||||
}
|
||||
|
||||
.back-arrow {
|
||||
font-size: 50rpx;
|
||||
color: #8B2316;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.nav-center {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.nav-title {
|
||||
font-size: 34rpx;
|
||||
color: #8B2316;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.nav-right {
|
||||
width: 60rpx;
|
||||
}
|
||||
|
||||
/* 主内容区域 */
|
||||
.content-area {
|
||||
padding: 40rpx 30rpx;
|
||||
}
|
||||
|
||||
/* 表单区域 */
|
||||
.form-section {
|
||||
margin-bottom: 60rpx;
|
||||
}
|
||||
.form-site{
|
||||
margin-bottom: 120rpx;
|
||||
}
|
||||
.section-title {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.title-text {
|
||||
font-size: 32rpx;
|
||||
color: #8B2316;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.required-mark {
|
||||
color: #8B2316;
|
||||
font-size: 32rpx;
|
||||
margin-left: 4rpx;
|
||||
}
|
||||
|
||||
/* 星期选择样式 */
|
||||
|
||||
.weekday-row {
|
||||
display: flex;
|
||||
gap: 20rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.weekday-btn {
|
||||
flex: 1;
|
||||
height: 80rpx;
|
||||
border: 2rpx solid #ddd;
|
||||
border-radius: 8rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #fff;
|
||||
|
||||
}
|
||||
|
||||
.weekday-btn.active {
|
||||
border-color: #8B2316;
|
||||
background: url('@/static/addoutpa_true.png') no-repeat right bottom;
|
||||
background-size:39rpx 39rpx;
|
||||
//
|
||||
|
||||
}
|
||||
|
||||
.weekday-btn.empty {
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
.weekday-text {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.weekday-btn.active .weekday-text {
|
||||
color:#8B2316;
|
||||
}
|
||||
|
||||
/* 时间段选择样式 */
|
||||
.time-period-selection {
|
||||
padding-top: 20rpx;
|
||||
display: flex;
|
||||
border-top: 2rpx solid #f0f0f0;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.time-btn {
|
||||
flex: 1;
|
||||
height: 80rpx;
|
||||
border: 2rpx solid #ddd;
|
||||
border-radius: 8rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.time-btn.active {
|
||||
border-color: #8B2316;
|
||||
background: url('@/static/addoutpa_true.png') no-repeat right bottom;
|
||||
background-size:39rpx 39rpx;
|
||||
}
|
||||
|
||||
.time-text {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.time-btn.active .time-text {
|
||||
color:#8B2316;
|
||||
}
|
||||
|
||||
/* 门诊地点选择样式 */
|
||||
.location-card {
|
||||
border: 2rpx solid #999;
|
||||
border-radius: 12rpx;
|
||||
padding: 30rpx;
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
min-height: 200rpx;
|
||||
margin-bottom: 30rpx;
|
||||
|
||||
}
|
||||
.location-card.active{
|
||||
border: 2rpx solid #8B2316;
|
||||
background: url('@/static/addoutpa_true.png') no-repeat right bottom;
|
||||
background-size:77rpx 77rpx;
|
||||
}
|
||||
.location-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 15rpx;
|
||||
}
|
||||
|
||||
.hospital-name {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
line-height: 1.4;
|
||||
}
|
||||
|
||||
.office-number {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.location-bottom {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 15rpx;
|
||||
}
|
||||
|
||||
.location-text {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.clinic-type-tag {
|
||||
border: 2rpx solid #8B2316;
|
||||
border-radius: 20rpx;
|
||||
padding: 2rpx 16rpx;
|
||||
white-space: nowrap;
|
||||
background-color: transparent;
|
||||
font-size: 24rpx;
|
||||
color: #8B2316;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
|
||||
.check-icon {
|
||||
position: absolute;
|
||||
bottom: 20rpx;
|
||||
right: 20rpx;
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
background-color: #8B2316;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
color: #fff;
|
||||
font-size: 24rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* 底部按钮样式 */
|
||||
.bottom-actions {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: 30rpx;
|
||||
background-color: #fff;
|
||||
border-top: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.confirm-btn {
|
||||
background-color: #8B2316;
|
||||
border-radius: 12rpx;
|
||||
padding: 25rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn-text {
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
325
pages_chat/outPatient/addSchedule.vue
Normal file
325
pages_chat/outPatient/addSchedule.vue
Normal file
@ -0,0 +1,325 @@
|
||||
<template>
|
||||
<view class="add-schedule-page">
|
||||
<!-- 导航栏 -->
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="增加门诊安排"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="140rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
/>
|
||||
|
||||
<!-- 表单内容 -->
|
||||
<view class="form-container">
|
||||
<view class="form-item">
|
||||
<text class="form-label">选择日期</text>
|
||||
<picker mode="date" :value="formData.date" @change="onDateChange">
|
||||
<view class="picker-input">
|
||||
<text class="picker-text">{{ formData.date || '请选择日期' }}</text>
|
||||
<text class="picker-arrow">›</text>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">时间段</text>
|
||||
<picker mode="selector" :range="timePeriods" :value="timePeriodIndex" @change="onTimePeriodChange">
|
||||
<view class="picker-input">
|
||||
<text class="picker-text">{{ timePeriods[timePeriodIndex] || '请选择时间段' }}</text>
|
||||
<text class="picker-arrow">›</text>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">医院名称</text>
|
||||
<input class="form-input" placeholder="请输入医院名称" v-model="formData.hospital_name" />
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">诊室号</text>
|
||||
<input class="form-input" placeholder="请输入诊室号" v-model="formData.room_number" />
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">价格</text>
|
||||
<input class="form-input" placeholder="请输入价格" v-model="formData.price" type="number" />
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">门诊类型</text>
|
||||
<view class="checkbox-group">
|
||||
<view class="checkbox-item" @click="toggleSpecial">
|
||||
<view class="checkbox" :class="{ checked: formData.is_special }">
|
||||
<text class="checkbox-icon" v-if="formData.is_special">✓</text>
|
||||
</view>
|
||||
<text class="checkbox-text">特需门诊</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">备注信息</text>
|
||||
<textarea class="form-textarea" placeholder="请输入备注信息" v-model="formData.remarks" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部按钮 -->
|
||||
<view class="bottom-actions">
|
||||
<view class="save-btn" @click="saveSchedule">
|
||||
<text class="btn-text">保存</text>
|
||||
</view>
|
||||
<view class="publish-btn" @click="publishSchedule">
|
||||
<text class="btn-text">发布</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref } from 'vue'
|
||||
import api from '@/api/api'
|
||||
|
||||
// 响应式数据
|
||||
const formData = reactive({
|
||||
date: '',
|
||||
time_period: '',
|
||||
hospital_name: '',
|
||||
room_number: '',
|
||||
price: '',
|
||||
is_special: false,
|
||||
remarks: ''
|
||||
})
|
||||
|
||||
const timePeriods = ['上午', '下午', '晚上']
|
||||
const timePeriodIndex = ref(0)
|
||||
|
||||
// 方法
|
||||
const goBack = () => {
|
||||
uni.navigateBack()
|
||||
}
|
||||
|
||||
const onDateChange = (e) => {
|
||||
formData.date = e.detail.value
|
||||
}
|
||||
|
||||
const onTimePeriodChange = (e) => {
|
||||
timePeriodIndex.value = e.detail.value
|
||||
formData.time_period = timePeriods[e.detail.value]
|
||||
}
|
||||
|
||||
const toggleSpecial = () => {
|
||||
formData.is_special = !formData.is_special
|
||||
}
|
||||
|
||||
const saveSchedule = async () => {
|
||||
if (!formData.date || !formData.hospital_name) {
|
||||
uni.showToast({
|
||||
title: '请填写必要信息',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const res = await api.addOutPatient(formData)
|
||||
if (res.code === 200) {
|
||||
uni.showToast({
|
||||
title: '保存成功',
|
||||
icon: 'none'
|
||||
})
|
||||
setTimeout(() => {
|
||||
uni.navigateBack()
|
||||
}, 1500)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.msg || '保存失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
uni.showToast({
|
||||
title: '保存失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const publishSchedule = async () => {
|
||||
if (!formData.date || !formData.hospital_name) {
|
||||
uni.showToast({
|
||||
title: '请填写必要信息',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
uni.showModal({
|
||||
title: '确认发布',
|
||||
content: '确定要发布这条门诊安排吗?',
|
||||
success: async (res) => {
|
||||
if (res.confirm) {
|
||||
try {
|
||||
const publishRes = await api.publishOutPatient(formData)
|
||||
if (publishRes.code === 200) {
|
||||
uni.showToast({
|
||||
title: '发布成功',
|
||||
icon: 'none'
|
||||
})
|
||||
setTimeout(() => {
|
||||
uni.navigateBack()
|
||||
}, 1500)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: publishRes.msg || '发布失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
} catch (error) {
|
||||
uni.showToast({
|
||||
title: '发布失败',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.add-schedule-page {
|
||||
min-height: 100vh;
|
||||
background-color: #f5f5f5;
|
||||
padding-bottom: 120rpx;
|
||||
}
|
||||
|
||||
/* 表单容器 */
|
||||
.form-container {
|
||||
padding: 30rpx;
|
||||
}
|
||||
|
||||
.form-item {
|
||||
background-color: #fff;
|
||||
border-radius: 12rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.form-label {
|
||||
display: block;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.form-input {
|
||||
width: 100%;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
border: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.picker-input {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20rpx 0;
|
||||
}
|
||||
|
||||
.picker-text {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.picker-arrow {
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.checkbox-group {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.checkbox-item {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 15rpx;
|
||||
}
|
||||
|
||||
.checkbox {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
border: 2rpx solid #ddd;
|
||||
border-radius: 8rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
.checkbox.checked {
|
||||
background-color: #8B2316;
|
||||
border-color: #8B2316;
|
||||
}
|
||||
|
||||
.checkbox-icon {
|
||||
color: #fff;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
.checkbox-text {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.form-textarea {
|
||||
width: 100%;
|
||||
min-height: 120rpx;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
border: none;
|
||||
outline: none;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
/* 底部按钮 */
|
||||
.bottom-actions {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: 30rpx;
|
||||
background-color: #fff;
|
||||
border-top: 1rpx solid #eee;
|
||||
display: flex;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.save-btn {
|
||||
flex: 1;
|
||||
background-color: #6c757d;
|
||||
border-radius: 12rpx;
|
||||
padding: 25rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.publish-btn {
|
||||
flex: 1;
|
||||
background-color: #8B2316;
|
||||
border-radius: 12rpx;
|
||||
padding: 25rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn-text {
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
</style>
|
||||
825
pages_chat/outPatient/outPatient.vue
Normal file
825
pages_chat/outPatient/outPatient.vue
Normal file
@ -0,0 +1,825 @@
|
||||
<template>
|
||||
<view class="outpatient-page">
|
||||
<!-- 导航栏 -->
|
||||
<uni-nav-bar
|
||||
left-icon="left"
|
||||
title="出/停诊公告"
|
||||
@clickLeft="goBack"
|
||||
fixed
|
||||
color="#8B2316"
|
||||
height="140rpx"
|
||||
:border="false"
|
||||
backgroundColor="#eee"
|
||||
>
|
||||
<template #right>
|
||||
<view class="nav-right">
|
||||
<up-icon name="share" color="#8B2316" size="24"></up-icon>
|
||||
<up-icon name="map" color="#8B2316" size="24" @click="goSite"></up-icon>
|
||||
</view>
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
|
||||
<!-- 标签页 -->
|
||||
<view class="tab-container">
|
||||
<view class="tab-item" :class="{ active: currentTab === 'suspension' }" @click="switchTab('suspension')">
|
||||
<text class="tab-text">停诊公告</text>
|
||||
</view>
|
||||
<view class="tab-divider"></view>
|
||||
<view class="tab-item" :class="{ active: currentTab === 'outpatient' }" @click="switchTab('outpatient')">
|
||||
<text class="tab-text">门诊安排</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 主内容区域 -->
|
||||
<view class="content-area">
|
||||
<!-- 停诊公告卡片 -->
|
||||
<view v-if="currentTab === 'suspension'">
|
||||
<view class="announcement-card" v-for="announcement in stopOutPatientList" :key="announcement.uuid">
|
||||
<view class="card-header">
|
||||
<view class="date-tag">
|
||||
<view class="tag-dot"></view>
|
||||
<text class="tag-date">{{ formatDate(announcement.expire_date) }}</text>
|
||||
</view>
|
||||
<view class="delete-btn" @click="deleteAnnouncement(announcement.uuid)">
|
||||
<text class="delete-icon">−</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="card-content">
|
||||
<view class="info-row">
|
||||
<text class="info-label">停诊原因:</text>
|
||||
<text class="info-value">{{ getStopReason(announcement.type) }}</text>
|
||||
</view>
|
||||
|
||||
<view class="info-row">
|
||||
<text class="info-label">停诊时间:</text>
|
||||
<text class="info-value">{{ announcement.date_list[0]?.param1 }} ~ {{ announcement.date_list[0]?.param2 }}</text>
|
||||
</view>
|
||||
|
||||
<view class="info-row remarks-row">
|
||||
<text class="info-label">备注:</text>
|
||||
<view class="remarks-input" v-if="announcement.note">{{ announcement.note }}</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 空状态 -->
|
||||
<view v-if="stopOutPatientList.length === 0" class="empty-state">
|
||||
<text class="empty-text">暂无停诊公告</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 门诊安排内容 -->
|
||||
<view v-if="currentTab === 'outpatient'">
|
||||
<view v-if="outPatientList.length > 0" class="schedule-list">
|
||||
<!-- 门诊安排列表 -->
|
||||
<view class="schedule-card" v-for="schedule in outPatientList" :key="schedule.uuid">
|
||||
|
||||
<view class="cell-content">
|
||||
<view class="schedule-left">
|
||||
<view class="weekday">{{ getWeekdayByWeek(schedule.week) }}</view>
|
||||
<view class="time-period">{{ getTimePeriod(schedule.day) }}</view>
|
||||
</view>
|
||||
|
||||
<view class="schedule-right">
|
||||
<view class="hospital-info">
|
||||
<text class="hospital-name">{{ schedule.hospital_name || '首都医科大学附属北京佑安医院' }}</text>
|
||||
<view class="office-info">
|
||||
<text class="office-name">{{ schedule.office_name || '肝病科' }}</text>
|
||||
</view>
|
||||
<view class="location-info">
|
||||
<text class="location">{{ schedule.location || '北京' }}</text>
|
||||
<view class="type-tag" v-if="schedule.type">
|
||||
{{ getTypeText(schedule.type) }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
|
||||
|
||||
|
||||
</view>
|
||||
<view class="schedule-actions">
|
||||
<view class="action-btn edit-btn" @click="editSchedule(schedule)">
|
||||
<text class="action-icon">✎</text>
|
||||
<text class="action-text">编辑</text>
|
||||
</view>
|
||||
<view class="action-btn delete-btn" @click="deleteSchedule(schedule.uuid)">
|
||||
<text class="action-icon">🗑</text>
|
||||
<text class="action-text">删除</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
<view v-else class="empty-state">
|
||||
<text class="empty-text">暂无门诊安排</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部操作按钮 -->
|
||||
<view class="bottom-actions">
|
||||
<view class="publish-btn" @click="currentTab === 'suspension' ? publishNew() : addSchedule()">
|
||||
<text class="btn-text">{{ currentTab === 'suspension' ? '发布新的停诊' : '增加门诊安排' }}</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 浮动编辑按钮 -->
|
||||
<view class="floating-edit-btn" @click="editAnnouncement">
|
||||
<text class="edit-icon">✎</text>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive } from 'vue'
|
||||
import api from '@/api/api'
|
||||
import {onShow,onUnload,onLoad} from '@dcloudio/uni-app'
|
||||
import navTo from '@/utils/navTo'
|
||||
const page=ref(1);
|
||||
// 响应式数据
|
||||
const currentTab = ref('suspension')
|
||||
const remarks = ref('')
|
||||
|
||||
const note = ref('')
|
||||
|
||||
const outpatientSchedules = ref([])
|
||||
const outPatientList = ref([]);
|
||||
const getListOutPatient = async () => {
|
||||
const res = await api.listOutPatient({
|
||||
page:page.value,
|
||||
});
|
||||
if(res.code == 200){
|
||||
outPatientList.value = res.data.list.list;
|
||||
console.log(res.data.note)
|
||||
note.value = res.data.note.note;
|
||||
}
|
||||
}
|
||||
const stopOutPatientList = ref([]);
|
||||
const getStopOutPatientList = async () => {
|
||||
const res = await api.stopOutPatientList();
|
||||
if(res.code == 200){
|
||||
stopOutPatientList.value = res.data;
|
||||
}
|
||||
}
|
||||
|
||||
// 数据转换函数
|
||||
const formatDate = (timestamp) => {
|
||||
if (!timestamp) return '';
|
||||
const date = new Date(timestamp * 1000);
|
||||
const year = date.getFullYear();
|
||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||
const day = String(date.getDate()).padStart(2, '0');
|
||||
return `${year}-${month}-${day}`;
|
||||
}
|
||||
const goSite = () => {
|
||||
navTo({
|
||||
url: '/pages_chat/addAddress/addAddress'
|
||||
})
|
||||
}
|
||||
const getStopReason = (type) => {
|
||||
const reasonMap = {
|
||||
1: '出差',
|
||||
2: '休假',
|
||||
3: '临时安排',
|
||||
4: '其他'
|
||||
};
|
||||
return reasonMap[type] || '其他';
|
||||
}
|
||||
|
||||
// 获取星期几
|
||||
const getWeekday = (date) => {
|
||||
if (!date) return '周一';
|
||||
const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
|
||||
const d = new Date(date);
|
||||
return weekdays[d.getDay()];
|
||||
}
|
||||
|
||||
// 根据week字段获取星期几
|
||||
const getWeekdayByWeek = (week) => {
|
||||
const weekdays = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
|
||||
return weekdays[week] || '周一';
|
||||
}
|
||||
|
||||
// 根据day字段获取时间段
|
||||
const getTimePeriod = (day) => {
|
||||
const timeMap = {
|
||||
'a': '上午',
|
||||
'p': '下午',
|
||||
'd': '晚上'
|
||||
};
|
||||
return timeMap[day] || '晚上';
|
||||
}
|
||||
|
||||
// 根据type字段获取类型文本
|
||||
const getTypeText = (type) => {
|
||||
const typeMap = {
|
||||
1: '普通门诊',
|
||||
2: '专家门诊',
|
||||
3: '特需门诊',
|
||||
4: '专科/专病门诊'
|
||||
};
|
||||
return typeMap[type] || '普通门诊';
|
||||
}
|
||||
// 方法
|
||||
const goBack = () => {
|
||||
uni.navigateBack({
|
||||
delta: 1,
|
||||
fail() {
|
||||
uni.redirectTo({
|
||||
url: '/pages/index/index'
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const share = () => {
|
||||
uni.showToast({
|
||||
title: '分享功能',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
|
||||
const addNew = () => {
|
||||
uni.showToast({
|
||||
title: '添加新内容',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
onLoad((options) => {
|
||||
|
||||
})
|
||||
onShow(() => {
|
||||
getStopOutPatientList();
|
||||
getListOutPatient();
|
||||
|
||||
|
||||
})
|
||||
|
||||
const switchTab = (tab) => {
|
||||
currentTab.value = tab;
|
||||
if(tab=='suspension'){
|
||||
getStopOutPatientList();
|
||||
}else{
|
||||
getListOutPatient();
|
||||
}
|
||||
}
|
||||
|
||||
const deleteAnnouncement = async (uuid) => {
|
||||
uni.showModal({
|
||||
title: '确认删除',
|
||||
content: '确定要删除这条停诊公告吗?',
|
||||
success: async (res) => {
|
||||
if (res.confirm) {
|
||||
try {
|
||||
const deleteRes = await api.deleteStopPatient({ uuid });
|
||||
if (deleteRes.code === 200) {
|
||||
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'none'
|
||||
});
|
||||
getStopOutPatientList();
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: deleteRes.msg || '删除失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
uni.showToast({
|
||||
title: '删除失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
const publishNew = () => {
|
||||
if(stopOutPatientList.value.length>=2){
|
||||
uni.showToast({
|
||||
title: '最多发布2条停诊公告',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
// 跳转到发布新停诊页面
|
||||
navTo({
|
||||
url: '/pages_chat/stopPatient/stopPatient'
|
||||
})
|
||||
}
|
||||
|
||||
const editAnnouncement = () => {
|
||||
navTo({
|
||||
url: '/pages_chat/note/note?note='+note.value
|
||||
})
|
||||
}
|
||||
|
||||
// 刷新数据
|
||||
const refreshData = () => {
|
||||
getListOutPatient();
|
||||
getStopOutPatientList();
|
||||
}
|
||||
|
||||
// 门诊安排相关方法
|
||||
const addSchedule = () => {
|
||||
navTo({
|
||||
url: '/pages_chat/outManage/outManage'
|
||||
})
|
||||
}
|
||||
|
||||
const editSchedule = (schedule) => {
|
||||
uni.navigateTo({
|
||||
url: `/pages_chat/outManage/outManage?uuid=${schedule.uuid}&workplace_uuid=${schedule.workplace_uuid}&week=${schedule.week}&type=${schedule.type}`
|
||||
})
|
||||
}
|
||||
|
||||
const deleteSchedule = async (uuid) => {
|
||||
uni.showModal({
|
||||
title: '确认删除',
|
||||
content: '确定要删除这条门诊安排吗?',
|
||||
success: async (res) => {
|
||||
if (res.confirm) {
|
||||
try {
|
||||
const deleteRes = await api.deleteOutPatient({ uuid });
|
||||
if (deleteRes.code === 200) {
|
||||
outPatientList.value = outPatientList.value.filter(item => item.uuid !== uuid);
|
||||
uni.showToast({
|
||||
title: '删除成功',
|
||||
icon: 'none'
|
||||
});
|
||||
getListOutPatient();
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: deleteRes.msg || '删除失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
uni.showToast({
|
||||
title: '删除失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.outpatient-page {
|
||||
min-height: 100vh;
|
||||
background-color: #f5f5f5;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* 状态栏样式 */
|
||||
.status-bar {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #fff;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.status-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10rpx;
|
||||
}
|
||||
|
||||
.network-type {
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.signal-bars {
|
||||
display: flex;
|
||||
align-items: end;
|
||||
gap: 2rpx;
|
||||
margin: 0 10rpx;
|
||||
}
|
||||
|
||||
.bar {
|
||||
width: 4rpx;
|
||||
background-color: #333;
|
||||
border-radius: 1rpx;
|
||||
}
|
||||
|
||||
.bar:nth-child(1) { height: 8rpx; }
|
||||
.bar:nth-child(2) { height: 12rpx; }
|
||||
.bar:nth-child(3) { height: 16rpx; }
|
||||
.bar:nth-child(4) { height: 20rpx; }
|
||||
|
||||
.battery {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.battery-text {
|
||||
font-size: 24rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 导航栏样式 */
|
||||
.nav-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #fff;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.nav-left {
|
||||
width: 60rpx;
|
||||
}
|
||||
|
||||
.back-arrow {
|
||||
font-size: 50rpx;
|
||||
color: #8B2316;
|
||||
}
|
||||
|
||||
.nav-center {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.nav-title {
|
||||
font-size: 34rpx;
|
||||
color: #8B2316;
|
||||
}
|
||||
|
||||
.nav-right {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 20rpx;
|
||||
width: 60rpx;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.nav-icon {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.icon-share {
|
||||
font-size: 32rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.add-icon {
|
||||
background-color: #8B2316;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.icon-add {
|
||||
font-size: 28rpx;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
/* 标签页样式 */
|
||||
.tab-container {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background-color: #fff;
|
||||
padding: 0 30rpx;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.tab-item {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
padding: 30rpx 0;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.tab-item.active .tab-text {
|
||||
color: #8B2316;
|
||||
}
|
||||
|
||||
.tab-text {
|
||||
font-size: 30rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.tab-divider {
|
||||
width: 2rpx;
|
||||
height: 40rpx;
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
/* 主内容区域 */
|
||||
.content-area {
|
||||
padding: 30rpx;
|
||||
min-height: calc(100vh - 400rpx);
|
||||
}
|
||||
|
||||
/* 停诊公告卡片 */
|
||||
.announcement-card {
|
||||
background-color: #fff;
|
||||
border-radius: 16rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.card-header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
margin-bottom: 30rpx;
|
||||
}
|
||||
|
||||
.date-tag {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
background-color: #20c997;
|
||||
padding: 10rpx 20rpx;
|
||||
border-radius: 20rpx;
|
||||
gap: 10rpx;
|
||||
}
|
||||
|
||||
.tag-dot {
|
||||
width: 12rpx;
|
||||
height: 12rpx;
|
||||
background-color: #fff;
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
.tag-date {
|
||||
color: #fff;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
.announcement-card .delete-btn {
|
||||
width: 40rpx;
|
||||
height: 40rpx;
|
||||
background-color: #8B2316;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.delete-icon {
|
||||
color: #fff;
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
.card-content {
|
||||
/* 卡片内容样式 */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.info-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.info-label {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
margin-right: 20rpx;
|
||||
min-width: 120rpx;
|
||||
}
|
||||
|
||||
.info-value {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
flex: 1;
|
||||
}
|
||||
|
||||
.remarks-row {
|
||||
align-items: flex-start;
|
||||
}
|
||||
|
||||
.remarks-input {
|
||||
flex: 1;
|
||||
background-color: #fff;
|
||||
border-radius: 8rpx;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 空状态样式 */
|
||||
.empty-state {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 400rpx;
|
||||
}
|
||||
|
||||
.empty-text {
|
||||
font-size: 28rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
/* 门诊安排样式 */
|
||||
.schedule-list {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20rpx;
|
||||
}
|
||||
|
||||
.schedule-card {
|
||||
background-color: #fff;
|
||||
border-radius: 12rpx;
|
||||
|
||||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1);
|
||||
|
||||
gap: 30rpx;
|
||||
}
|
||||
.cell-content {
|
||||
padding: 0 30rpx;
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
}
|
||||
.schedule-left {
|
||||
height: 200rpx;
|
||||
border-right: 2rpx solid #f0f0f0;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
min-width: 120rpx;
|
||||
}
|
||||
|
||||
.weekday {
|
||||
font-size: 36rpx;
|
||||
color: #333;
|
||||
margin-bottom: 10rpx;
|
||||
}
|
||||
|
||||
.time-period {
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.schedule-right {
|
||||
flex: 1;
|
||||
height: 200rpx;
|
||||
margin-left: 30prx;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.hospital-name {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
line-height: 1.4;
|
||||
margin-bottom: 15rpx;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.office-info {
|
||||
margin-bottom: 15rpx;
|
||||
}
|
||||
|
||||
.office-name {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.location-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 15rpx;
|
||||
}
|
||||
|
||||
.location {
|
||||
font-size: 28rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.price-info {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 15rpx;
|
||||
}
|
||||
.hospital-info {
|
||||
padding-left: 30rpx;
|
||||
}
|
||||
.price {
|
||||
font-size: 32rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.type-tag {
|
||||
background-color: transparent;
|
||||
border: 2rpx solid #8B2316;
|
||||
border-radius: 20rpx;
|
||||
padding:2rpx 16rpx;
|
||||
font-size: 20rpx;
|
||||
color: #8B2316;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
|
||||
|
||||
.schedule-actions {
|
||||
padding: 30rpx;
|
||||
border-top: 2rpx solid #f0f0f0;
|
||||
display: flex;
|
||||
gap: 30rpx;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
|
||||
.action-btn {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 8rpx;
|
||||
padding: 10rpx 20rpx;
|
||||
border-radius: 8rpx;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.edit-btn {
|
||||
white-space: nowrap;
|
||||
background-color: #f8f9fa;
|
||||
border: 1rpx solid #dee2e6;
|
||||
}
|
||||
|
||||
.schedule-actions .delete-btn {
|
||||
|
||||
background-color: #fff5f5;
|
||||
border: 1rpx solid #fed7d7;
|
||||
}
|
||||
|
||||
.action-icon {
|
||||
font-size: 24rpx;
|
||||
}
|
||||
|
||||
.action-text {
|
||||
white-space: nowrap;
|
||||
font-size: 24rpx;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.edit-btn .action-text {
|
||||
color: #495057;
|
||||
}
|
||||
|
||||
.delete-btn .action-text {
|
||||
color: #e74c3c;
|
||||
}
|
||||
|
||||
/* 底部操作按钮 */
|
||||
.bottom-actions {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: 30rpx;
|
||||
background-color: #fff;
|
||||
border-top: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.publish-btn {
|
||||
background-color: #8B2316;
|
||||
border-radius: 12rpx;
|
||||
padding: 25rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn-text {
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
|
||||
/* 浮动编辑按钮 */
|
||||
.floating-edit-btn {
|
||||
position: fixed;
|
||||
bottom: 120rpx;
|
||||
right: 30rpx;
|
||||
width: 80rpx;
|
||||
height: 80rpx;
|
||||
background-color: #20c997;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0 4rpx 12rpx rgba(32, 201, 151, 0.3);
|
||||
}
|
||||
|
||||
.edit-icon {
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
}
|
||||
</style>
|
||||
258
pages_chat/outPatient/publishSuspension.vue
Normal file
258
pages_chat/outPatient/publishSuspension.vue
Normal file
@ -0,0 +1,258 @@
|
||||
<template>
|
||||
<view class="publish-page">
|
||||
<!-- 导航栏 -->
|
||||
<view class="nav-bar">
|
||||
<view class="nav-left" @click="goBack">
|
||||
<text class="back-arrow">‹</text>
|
||||
</view>
|
||||
<view class="nav-center">
|
||||
<text class="nav-title">发布停诊公告</text>
|
||||
</view>
|
||||
<view class="nav-right">
|
||||
<text class="save-btn" @click="saveAnnouncement">保存</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 表单内容 -->
|
||||
<view class="form-container">
|
||||
<view class="form-item">
|
||||
<text class="form-label">停诊日期</text>
|
||||
<picker mode="date" :value="formData.date" @change="onDateChange">
|
||||
<view class="picker-input">
|
||||
<text class="picker-text">{{ formData.date || '请选择日期' }}</text>
|
||||
<text class="picker-arrow">›</text>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">停诊原因</text>
|
||||
<input class="form-input" placeholder="请输入停诊原因" v-model="formData.reason" />
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">开始时间</text>
|
||||
<picker mode="date" :value="formData.startDate" @change="onStartDateChange">
|
||||
<view class="picker-input">
|
||||
<text class="picker-text">{{ formData.startDate || '请选择开始时间' }}</text>
|
||||
<text class="picker-arrow">›</text>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">结束时间</text>
|
||||
<picker mode="date" :value="formData.endDate" @change="onEndDateChange">
|
||||
<view class="picker-input">
|
||||
<text class="picker-text">{{ formData.endDate || '请选择结束时间' }}</text>
|
||||
<text class="picker-arrow">›</text>
|
||||
</view>
|
||||
</picker>
|
||||
</view>
|
||||
|
||||
<view class="form-item">
|
||||
<text class="form-label">备注信息</text>
|
||||
<textarea class="form-textarea" placeholder="请输入备注信息" v-model="formData.remarks" />
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 底部按钮 -->
|
||||
<view class="bottom-actions">
|
||||
<view class="publish-btn" @click="publishAnnouncement">
|
||||
<text class="btn-text">发布公告</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive } from 'vue'
|
||||
|
||||
// 响应式数据
|
||||
const formData = reactive({
|
||||
date: '',
|
||||
reason: '',
|
||||
startDate: '',
|
||||
endDate: '',
|
||||
remarks: ''
|
||||
})
|
||||
|
||||
// 方法
|
||||
const goBack = () => {
|
||||
uni.navigateBack()
|
||||
}
|
||||
|
||||
const onDateChange = (e) => {
|
||||
formData.date = e.detail.value
|
||||
}
|
||||
|
||||
const onStartDateChange = (e) => {
|
||||
formData.startDate = e.detail.value
|
||||
}
|
||||
|
||||
const onEndDateChange = (e) => {
|
||||
formData.endDate = e.detail.value
|
||||
}
|
||||
|
||||
const saveAnnouncement = () => {
|
||||
// 保存草稿
|
||||
uni.showToast({
|
||||
title: '保存成功',
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
|
||||
const publishAnnouncement = () => {
|
||||
if (!formData.date || !formData.reason) {
|
||||
uni.showToast({
|
||||
title: '请填写必要信息',
|
||||
icon: 'none'
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
uni.showModal({
|
||||
title: '确认发布',
|
||||
content: '确定要发布这条停诊公告吗?',
|
||||
success: (res) => {
|
||||
if (res.confirm) {
|
||||
// 发布公告
|
||||
uni.showToast({
|
||||
title: '发布成功',
|
||||
icon: 'none'
|
||||
})
|
||||
setTimeout(() => {
|
||||
uni.navigateBack()
|
||||
}, 1500)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.publish-page {
|
||||
min-height: 100vh;
|
||||
background-color: #f5f5f5;
|
||||
}
|
||||
|
||||
/* 导航栏样式 */
|
||||
.nav-bar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 20rpx 30rpx;
|
||||
background-color: #fff;
|
||||
border-bottom: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.nav-left {
|
||||
width: 60rpx;
|
||||
}
|
||||
|
||||
.back-arrow {
|
||||
font-size: 50rpx;
|
||||
color: #e74c3c;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.nav-center {
|
||||
flex: 1;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.nav-title {
|
||||
font-size: 34rpx;
|
||||
color: #e74c3c;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.nav-right {
|
||||
width: 60rpx;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.save-btn {
|
||||
font-size: 28rpx;
|
||||
color: #e74c3c;
|
||||
}
|
||||
|
||||
/* 表单容器 */
|
||||
.form-container {
|
||||
padding: 30rpx;
|
||||
}
|
||||
|
||||
.form-item {
|
||||
background-color: #fff;
|
||||
border-radius: 12rpx;
|
||||
padding: 30rpx;
|
||||
margin-bottom: 20rpx;
|
||||
}
|
||||
|
||||
.form-label {
|
||||
display: block;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
margin-bottom: 20rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.form-input {
|
||||
width: 100%;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
border: none;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
.picker-input {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20rpx 0;
|
||||
}
|
||||
|
||||
.picker-text {
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.picker-arrow {
|
||||
font-size: 24rpx;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.form-textarea {
|
||||
width: 100%;
|
||||
min-height: 120rpx;
|
||||
font-size: 28rpx;
|
||||
color: #333;
|
||||
border: none;
|
||||
outline: none;
|
||||
line-height: 1.5;
|
||||
}
|
||||
|
||||
/* 底部按钮 */
|
||||
.bottom-actions {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: 30rpx;
|
||||
background-color: #fff;
|
||||
border-top: 1rpx solid #eee;
|
||||
}
|
||||
|
||||
.publish-btn {
|
||||
background-color: #c0392b;
|
||||
border-radius: 12rpx;
|
||||
padding: 25rpx;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.btn-text {
|
||||
color: #fff;
|
||||
font-size: 32rpx;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
@ -17,7 +17,7 @@
|
||||
</template>
|
||||
</uni-nav-bar>
|
||||
<!-- 筛选排序栏 -->
|
||||
<view class="filter-sort-bar">
|
||||
<!-- <view class="filter-sort-bar">
|
||||
<view class="sort-section" @click="toggleGroupSort">
|
||||
<text class="sort-label">{{ groupSortTitle }}</text>
|
||||
<view class="imgbox">
|
||||
@ -31,7 +31,7 @@
|
||||
<up-image :src="upImg" width="26rpx" height="26rpx" ></up-image>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view> -->
|
||||
|
||||
<!-- 分组排序弹窗 -->
|
||||
<view v-if="showGroupSort" class="popup-panel">
|
||||
@ -578,7 +578,7 @@ const clearSelection = () => {
|
||||
}
|
||||
|
||||
.patient-list-section {
|
||||
top: 240rpx;
|
||||
top: 140rpx;
|
||||
width:100%;
|
||||
bottom:120rpx; // 预留底部操作栏高度
|
||||
position: fixed;
|
||||
|
||||
@ -65,6 +65,7 @@
|
||||
|
||||
<script setup>
|
||||
import { ref, onMounted, getCurrentInstance } from 'vue'
|
||||
import { onLoad,onShow} from '@dcloudio/uni-app'
|
||||
// @ts-ignore
|
||||
const delUuid=ref('');
|
||||
import UniPopup from '@/components/uni-components/uni-popup/components/uni-popup/uni-popup.vue'
|
||||
@ -87,7 +88,12 @@
|
||||
// @ts-ignore
|
||||
popupRef.value && popupRef.value.open('center')
|
||||
}
|
||||
|
||||
onShow(() => {Confirm
|
||||
getQuickReplyList()
|
||||
})
|
||||
onload(() => {
|
||||
getQuickReplyList()
|
||||
})
|
||||
const onSelect = (text) => {
|
||||
uni.$emit('quickReply', text);
|
||||
uni.navigateBack()
|
||||
@ -156,7 +162,6 @@
|
||||
onCancel()
|
||||
}
|
||||
|
||||
onMounted(() => {})
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
|
||||
@ -299,7 +299,7 @@
|
||||
await polularScienceArticleListByKeywordsNew(true);
|
||||
uni.showToast({
|
||||
title: '刷新成功',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 1500
|
||||
});
|
||||
};
|
||||
|
||||
139
pages_chat/stopPatient/stopPatient.vue
Normal file
139
pages_chat/stopPatient/stopPatient.vue
Normal file
@ -0,0 +1,139 @@
|
||||
<template>
|
||||
<view class="stop-page">
|
||||
<navBar :title="title" />
|
||||
|
||||
<view class="content-area">
|
||||
<!-- 停诊原因 -->
|
||||
<view class="form-section">
|
||||
<view class="section-title">
|
||||
<text class="title-text">停诊原因</text>
|
||||
<text class="required">*</text>
|
||||
</view>
|
||||
<view class="reason-row">
|
||||
<view class="reason-btn" :class="{active: reason===1}" @click="selectReason(1)">出差</view>
|
||||
<view class="reason-btn" :class="{active: reason===2}" @click="selectReason(2)">休假</view>
|
||||
<view class="reason-btn" :class="{active: reason===3}" @click="selectReason(3)">临时安排</view>
|
||||
<view class="reason-btn" :class="{active: reason===4}" @click="selectReason(4)">其他</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 停诊时间 -->
|
||||
<view class="form-section">
|
||||
<view class="section-head">
|
||||
<view class="section-title">
|
||||
<text class="title-text">停诊时间</text>
|
||||
<text class="required">*</text>
|
||||
</view>
|
||||
<view class="add-more" @click="addRange">+ 再次添加</view>
|
||||
</view>
|
||||
|
||||
<view class="range-list">
|
||||
<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-icons type="minus" size="30" color="#8B2316" @click="removeRange(idx)" v-if="idx > 0"></uni-icons>
|
||||
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 备注 -->
|
||||
<view class="form-section">
|
||||
<view class="section-title"><text class="title-text">备注</text></view>
|
||||
<view class="remark-box">
|
||||
<textarea v-model="remark" class="remark" maxlength="300" :placeholder="remarkPh"/>
|
||||
<!-- <view class="voice-btn" @click="recordVoice">🎤</view> -->
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="bottom-actions">
|
||||
<view class="confirm-btn" @click="submit">
|
||||
<text class="btn-text">确定发布</text>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref } from 'vue'
|
||||
import { onShow } from '@dcloudio/uni-app'
|
||||
import navBar from '@/components/navBar/navBar.vue'
|
||||
import api from '@/api/api'
|
||||
|
||||
const title = ref('发布停诊')
|
||||
const reason = ref(1)
|
||||
const ranges = ref([[]])
|
||||
const remark = ref('')
|
||||
const remarkPh = '您可以在这里填写想告诉患者的停诊补充信息,最多填写300个字哦~'
|
||||
const start = ref(new Date().getTime())
|
||||
const end = ref( Date.now()+10*365*24*3600*1000)
|
||||
const selectReason = (val) => { reason.value = val }
|
||||
const addRange = () => { ranges.value.push([]) }
|
||||
|
||||
const handleChange = (e,idx) => {
|
||||
console.log(e)
|
||||
ranges.value[idx] =e;
|
||||
}
|
||||
const addStopPatient = async () => {
|
||||
let date_arr=[]
|
||||
ranges.value.forEach(item=>{
|
||||
date_arr.push({
|
||||
param1:item[0],
|
||||
param2:item[1]
|
||||
})
|
||||
})
|
||||
const res = await api.addStopPatient({
|
||||
type: reason.value,
|
||||
date_list: date_arr,
|
||||
note: remark.value
|
||||
})
|
||||
if(res.code==200){
|
||||
uni.showToast({ title: '发布成功', icon: 'none' })
|
||||
uni.navigateBack()
|
||||
}
|
||||
}
|
||||
|
||||
const recordVoice = () => {
|
||||
uni.showToast({ title: '语音录入(示意)', icon: 'none' })
|
||||
}
|
||||
|
||||
const submit = () => {
|
||||
console.log(ranges.value)
|
||||
const invalid = ranges.value.some(r => r.length==0)
|
||||
if (invalid) {
|
||||
uni.showToast({ title: '请选择停诊起止时间', icon: 'none' })
|
||||
return
|
||||
}
|
||||
addStopPatient()
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.stop-page { min-height: 100vh; background: #fff; }
|
||||
.content-area { padding: 30rpx; }
|
||||
|
||||
.form-section { margin-bottom: 40rpx; }
|
||||
.section-head { display: flex; justify-content: space-between; align-items: center; }
|
||||
.section-title { display: flex; align-items: center; margin-bottom: 20rpx; }
|
||||
.title-text { font-size: 32rpx; color: #8B2316; font-weight: 600; }
|
||||
.required { color: #8B2316; margin-left: 6rpx; font-size: 28rpx; }
|
||||
|
||||
.reason-row { display: flex; gap: 20rpx; flex-wrap: wrap; }
|
||||
.reason-btn { flex: 1; text-align: center; height: 80rpx; line-height: 80rpx; border: 2rpx solid #ddd; border-radius: 10rpx; color: #666; }
|
||||
.reason-btn.active { border-color: #8B2316; color: #8B2316; background: url('@/static/addoutpa_true.png') right bottom/39rpx 39rpx no-repeat; }
|
||||
|
||||
.add-more { color: #8B2316; font-size: 28rpx; }
|
||||
.range-row { display: flex; align-items: center; gap: 20rpx; margin-bottom: 20rpx; }
|
||||
.date-input { flex: 1; height: 80rpx; border: 2rpx solid #ddd; border-radius: 10rpx; display: flex; align-items: center; padding: 0 24rpx; color: #333; }
|
||||
.placeholder { color: #999; }
|
||||
.to-text { color: #666; }
|
||||
|
||||
.remark-box { position: relative; }
|
||||
.remark { width: 100%; min-height: 220rpx; background: #f2f2f2; border-radius: 10rpx; padding: 20rpx; color: #333; }
|
||||
.voice-btn { position: absolute; right: 20rpx; bottom: 20rpx; width: 88rpx; height: 88rpx; border-radius: 50%; background: #8B2316; display: flex; align-items: center; justify-content: center; color: #fff; font-size: 40rpx; }
|
||||
|
||||
.bottom-actions { position: fixed; left: 0; right: 0; bottom: 0; background: #fff; padding: 30rpx; border-top: 1rpx solid #eee; }
|
||||
.confirm-btn { background: #8B2316; border-radius: 12rpx; padding: 24rpx 0; text-align: center; }
|
||||
.btn-text { color: #fff; font-size: 32rpx; font-weight: 600; }
|
||||
</style>
|
||||
|
||||
@ -616,7 +616,7 @@ const submitReply = (reviewId) => {
|
||||
|
||||
uni.showToast({
|
||||
title: '回复成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
@ -238,7 +238,7 @@ const confirmPayment = () => {
|
||||
payParams,
|
||||
// 支付成功
|
||||
(res) => {
|
||||
uni.showToast({ title: '支付成功', icon: 'success' })
|
||||
uni.showToast({ title: '支付成功', icon: 'none' })
|
||||
// 可以跳转到支付成功页,或者查询订单状态
|
||||
},
|
||||
// 支付失败
|
||||
|
||||
@ -140,7 +140,7 @@ const submitReview = () => {
|
||||
uni.hideLoading()
|
||||
uni.showToast({
|
||||
title: '评价提交成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
uni.navigateBack()
|
||||
|
||||
@ -176,7 +176,7 @@ const downloadInvoice = () => {
|
||||
if (res.statusCode === 200) {
|
||||
uni.showToast({
|
||||
title: '下载成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
|
||||
// 保存文件到本地
|
||||
|
||||
@ -162,7 +162,7 @@ export default {
|
||||
if (res.confirm) {
|
||||
uni.showToast({
|
||||
title: '提交成功',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
|
||||
// 延迟返回上一页
|
||||
|
||||
@ -217,7 +217,7 @@ const copyOrderNumber = (orderNumber) => {
|
||||
success: () => {
|
||||
uni.showToast({
|
||||
title: '订单号已复制',
|
||||
icon: 'success'
|
||||
icon: 'none'
|
||||
})
|
||||
}
|
||||
})
|
||||
@ -417,7 +417,7 @@ const payExcellencourseOrderContinue = (order) => {
|
||||
payParams,
|
||||
// 支付成功
|
||||
(res) => {
|
||||
uni.showToast({ title: '支付成功', icon: 'success' })
|
||||
uni.showToast({ title: '支付成功', icon: 'none' })
|
||||
// 可以跳转到支付成功页,或者查询订单状态
|
||||
getOrderList()
|
||||
},
|
||||
@ -456,7 +456,7 @@ const cancelExcellencourseOrder = (order) => {
|
||||
if (res.code == 200) {
|
||||
uni.showToast({
|
||||
title: '订单已取消',
|
||||
icon: 'success',
|
||||
icon: 'none',
|
||||
duration: 2000
|
||||
})
|
||||
// 成功后刷新订单列表
|
||||
|
||||
@ -85,7 +85,7 @@ const goExchange = (item) => {
|
||||
api.pointTicketExchange({uuid: item.uuid}).then(res => {
|
||||
console.log(res)
|
||||
if (res.code === 200 || res.code === '200') {
|
||||
uni.showToast({ title: '兑换成功', icon: 'success' })
|
||||
uni.showToast({ title: '兑换成功', icon: 'none' })
|
||||
getPointTicketList()
|
||||
}
|
||||
})
|
||||
|
||||
@ -198,7 +198,7 @@ const submit = () => {
|
||||
list.unshift(address)
|
||||
}
|
||||
uni.setStorageSync(STORAGE_KEY, list)
|
||||
uni.showToast({ title: '提交成功', icon: 'success' })
|
||||
uni.showToast({ title: '提交成功', icon: 'none' })
|
||||
setTimeout(() => { uni.navigateBack() }, 500)
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -67,7 +67,7 @@ const remove = (item) => {
|
||||
|
||||
const select = (item) => {
|
||||
uni.setStorageSync(SELECTED_KEY, item)
|
||||
uni.showToast({ title: '已选择该地址', icon: 'success' })
|
||||
uni.showToast({ title: '已选择该地址', icon: 'none' })
|
||||
setTimeout(() => uni.navigateBack(), 300)
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -147,7 +147,7 @@ const goAddress = () => {
|
||||
goods_api.createGoodsOrder(data).then(res => {
|
||||
console.log(res)
|
||||
if (res.code == 200) {
|
||||
uni.showToast({ title: '兑换成功', icon: 'success' })
|
||||
uni.showToast({ title: '兑换成功', icon: 'none' })
|
||||
uni.navigateBack()
|
||||
} else {
|
||||
uni.showToast({ title: res.msg, icon: 'none' })
|
||||
|
||||
BIN
static/addoutpa_true.png
Normal file
BIN
static/addoutpa_true.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.1 KiB |
@ -133,13 +133,18 @@ export const request = (url, data = {}, method = 'post', loading = false, conten
|
||||
})
|
||||
n(res)
|
||||
} else {
|
||||
uni.showToast({
|
||||
title: res.data.message,
|
||||
icon: 'none',
|
||||
});
|
||||
n(res)
|
||||
|
||||
if(url.indexOf('addOutPatientA')!=-1){
|
||||
e(res.data)
|
||||
}else{
|
||||
uni.showToast({
|
||||
title: res.data.message,
|
||||
icon: 'none'
|
||||
});
|
||||
n(res)
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
fail: function(err) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user