This commit is contained in:
2025-08-07 16:38:25 +08:00
parent b761ae562f
commit c0aab3d94c
25 changed files with 4204 additions and 1480 deletions

View File

@@ -35,6 +35,18 @@
}
}
},
{
"path": "pages/medicalRecords/PendingApprovalIndex",
"style": {
"navigationBarTitleText": "待审核医案",
"enablePullDownRefresh": true, // 禁止下拉刷新
"app-plus": {
"bounce": "none",
"titleNView": false,
"popGesture": "none"
}
}
},
{
"path": "pages/articleList/index",
"style": {
@@ -59,6 +71,18 @@
}
}
},
{
"path": "pages/medicalRecords/evaluateDetail",
"style": {
"navigationBarTitleText": "医案",
"enablePullDownRefresh": true, // 禁止下拉刷新
"app-plus": {
"bounce": "none",
"titleNView": false,
"popGesture": "none"
}
}
},
{
"path": "pages/articleList/article",

View File

@@ -187,6 +187,7 @@ export default {
fileList1: [],
containerHeight: null,
pollInterval: null,
formData: {
message: "",
},
@@ -776,11 +777,12 @@ export default {
const poll = () => {
this.getMedicalDetail(() => {
// 停止轮询
clearInterval(pollInterval);
clearInterval(this.pollInterval);
this.pollInterval = null;
});
};
// 每5秒发送一次请求直到收到正确的响应
const pollInterval = setInterval(poll, 5000);
this. pollInterval = setInterval(poll, 5000);
//调用后端 SSE 接口,发送问题并接收实时回答
// this.startSSE(params);
@@ -1183,9 +1185,11 @@ export default {
},
},
onHide() {
this.closeWebSocket();
},
onUnload() {
this.pollInterval()
this.closeWebSocket();
},
};

View File

@@ -176,7 +176,8 @@ export default {
this.tabsList = [
{ id: 0, title: "草稿箱", statusTitle: '' },
{ id: 1, title: "待审核",statusTitle: '待审核',color:'#f59442' },
{ id: 3, title: "已通过",statusTitle: '已通过' ,color:'#22be98' },
{ id: 3, title: "质量检测中",statusTitle: '检测中' ,color:'#22be98' },
{ id: 4, title: "已通过",statusTitle: '已通过' ,color:'#22be98' },
{ id: 2, title: "未通过",statusTitle: '未通过',color:"#e78084" },
];
this.taihumedId = this.tabsList[0].id;

View File

@@ -0,0 +1,51 @@
<template>
<view>
<view class="department_item"
:class="deptLabelId == item.id ? 'department_active' : ''"
v-for="(item, index) in chatAssistants"
:key="index"
@click.stop="click_department(item, index)">
<text>{{ item.title }}</text>
<!-- 递归显示子菜单 -->
<view v-if="item.children && item.children.length > 0">
<department-menu :chat-assistants="item.children" @item-click="click_department"></department-menu>
</view>
</view>
</view>
</template>
<script>
import DepartmentMenu from "../commonComponents/DepartmentMenu.vue";
export default {
components: {
DepartmentMenu
},
props: {
chatAssistants: {
type: Array,
required: true
}
},
methods: {
click_department(item, index) {
this.$emit('item-click', item, index); // 向父组件传递点击事件
}
}
};
</script>
<style scoped>
.department_item {
padding-left: 10px; /* 左侧缩进 */
}
.department_active {
color: #ff4500; /* 选中的菜单项颜色 */
}
.department_item > .department_item {
padding-left: 20px; /* 子菜单项的缩进 */
}
</style>

View File

@@ -7,7 +7,7 @@
:backState="2000"
></z-nav-bar>
<view class="doctors_module" :style="`top: ${42 + statusBarHeight}px;`">
<view class="tab-bar">
<!-- <view class="tab-bar">
<view
class="tab-item left-tab"
:class="{ active: activeTab === 0 }"
@@ -22,9 +22,9 @@
>
名医天地
</view>
</view>
</view> -->
<template v-if="activeTab == 0">
<view class="cateList flexbox" style="background-color: #fff">
<view class="cateList flexbox" >
<common-sticky
itemStyle="width:33.3%; height: 38px;font-size:24rpx;"
:list="tabsList"
@@ -58,14 +58,15 @@
</view>
</template>
</view>
<!-- height: calc(100vh - ${activeTab==0?320:280}rpx);
margin-top: ${activeTab==0?280:180}rpx; -->
<scroll-view
scroll-y="true"
:scroll-top="scrollTop"
@scrolltolower="loadMore"
:style="`
height: calc(100vh - ${activeTab==0?320:280}rpx);
margin-top: ${activeTab==0?260:180}rpx;
height: calc(100vh - ${activeTab==0?280:280}rpx);
margin-top: ${activeTab==0?180:180}rpx;
padding-bottom: 140rpx;`
"
v-if="show == true"
@@ -93,14 +94,23 @@
></image>
<view class="item_right" v-if="currentCateIndex != 2">
<view class="item_top">
<!-- <view class="item_top">
<text
class="item_name"
v-if="item.taihuTalent && item.taihuTalent.length > 0"
>{{ item.taihuTalent[0].name }}</text
>
</view>
</view> -->
<text class="item_con">{{ item.title }}</text>
<view class="item_info hidden2" style="margin-top: 20rpx;">
<rich-text style="color: #666;"
:nodes="item.content"
v-if="item.content"
></rich-text
>
</view>
</view>
<view class="item_right" v-else>
@@ -424,7 +434,7 @@ else{
background-color: #fff;
}
.doctors_list {
margin: 0 30rpx 20rpx;
margin: 0 20rpx 20rpx;
}
.doctors_item {
border: 1rpx solid $themeColor;
@@ -602,4 +612,9 @@ else{
box-shadow: 0 0 8rpx rgba(0, 0, 0, 0.04),
/* 外部柔光阴影 */ inset -4rpx 0 6rpx rgba(0, 0, 0, 0.03); /* 内阴影模拟夹层效果 */
}
.hidden2{
line-height: 24px;
max-height: 48px;
height: auto;
}
</style>

View File

@@ -0,0 +1,473 @@
<template>
<view class="content" style="background-color: #d8e6ff57">
<z-nav-bar title="待审批医案" bgColor="#5188e5" fontColor="#fff">
</z-nav-bar>
<scroll-view
scroll-y="true"
:scroll-top="scrollTop"
@scrolltolower="loadMore"
style="
height: calc(100vh - 140rpx);
margin-top: 40rpx;
padding-bottom: 120rpx;
"
v-if="show == true"
>
<view class="doctors_list" id="top">
<view
class="doctors_item"
v-for="(item, index) in list"
:key="index"
@click="goToDetail(item)"
>
<view class="flex">
<view class="flex">
<view class="item_right">
<view style="display: flex; align-items: center">
<text class="card_label" v-if="statusTitle" :style="`background-color:${statusColor} ;`">{{ statusTitle }}</text>
<text class="item_time">{{ item.createTime }}</text></view
>
<view class="item_top">
<view class="item_name">{{ item.title }}</view>
<rich-text
class="item_content"
:nodes="item.information"
></rich-text>
<!-- <rich-text
class="item_content"
:nodes="item.chiefComplaint"
></rich-text> -->
</view>
<view style="margin-top: 20rpx" v-if="item.img">
<u-upload
:fileList="item.fileList1"
multiple
width="50"
height="50"
:disabled="true"
:previewFullImage="true"
@click.stop="handleClick"
>
</u-upload>
</view>
<view class="list_item_bt">
<text class="list_item_study">去评价</text>
</view>
<!-- <text class="item_con">{{ item.taihuTalent.map(talent => talent.name).join(' ') }}</text> -->
</view>
</view>
</view>
</view>
</view>
<text v-show="showText && count > list.length" class="show-more"
>加载更多</text
>
<text v-show="noMore" class="no-more">没有更多了</text>
</scroll-view>
<text class="null_text" v-else>{{ null_text }}</text>
<z-navigation></z-navigation>
</view>
</template>
<script>
import $http from "@/config/requestConfig.js";
import { mapState } from "vuex";
export default {
computed: {
...mapState(["userInfo"]),
},
data() {
return {
list: [],
null_text: "",
current: 1,
limit: 10,
courseName: "",
taihumedId: 3,
statusTitle: '',
statusColor: '',
timer: null,
showText: false,
noMore: false,
show: null,
count: 0,
scrollTop: 0, //滚动位置
isRefreshing: false, //刷新状态
};
},
onPullDownRefresh() {
this.isRefreshing = true;
console.log("下拉刷新");
setTimeout(() => {
this.current = 1;
this.list = [];
this.noMore = false;
this.getListData(3);
uni.stopPullDownRefresh();
this.isRefreshing = false;
console.log("下拉刷新已停止");
}, 800);
},
onLoad() {
uni.hideTabBar();
this.getTabData();
},
onShow() {
this.getListData(this.taihumedId);
},
methods: {
createFolder() {
uni.navigateTo({
url: `/pages/medicalRecords/medical?navTitle=创建医案&title=创建医案&type=add`,
});
},
//判断显示‘上/中/下’
formatContent(content) {
const keywords = ["上部", "中部", "下部"];
let result = [];
// 判断是否包含关键字
keywords.forEach((keyword) => {
if (content.includes(keyword)) {
result.push(keyword.substring(0, 1));
}
});
return result.join("");
},
//获取tab数据
getTabData() {
// this.$http.request({
// url: 'taihumed/course/getCourseTaihumedList',
// method: "POST",
// data: {},
// header: {
// "Content-Type": "application/json",
// },
// })
// .then(res=> {
// if (res.list&&res.list.length>0) {
this.tabsList = [ ];
this.taihumedId = 3;
this.statusTitle = '';
this.statusColor = '';
this.getListData(this.taihumedId);
// }
// });
},
//获取列表数据
getListData(taihumedId, type) {
// if (type) {
// this.current = 1;
// this.list = [];
// this.noMore = false;
// }
// if (this.noMore) {
// return false;
// }
uni.showLoading({
title: "加载中",
});
this.$http
.request({
url: "common/medicalRecords/getMedicalRecordsCheckList",
method: "POST",
data: {
},
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
uni.hideLoading();
// 过滤不包含自己的用户ID的对象
this.list = [...res.list].filter(item => {
// 判断是否有 stateInfo 属性且它不包含用户ID或者为空字符串
return !item.stateInfo || item.stateInfo === "" || !item.stateInfo.includes(this.userInfo.id.toString());
});
console.log('this.list at line 191:', this.list)
this.show = true;
this.count = this.list.length; //总数
let length = this.list.length;
if(length == 0){
this.show = false;
this.null_text = "暂无数据";
}
// if (res.medicalRecordsList && length > 0) {
// this.show = true;
// // //如果返回的数据少于每页数量,表示没有更多数据
// // if(this.count==length || length < this.limit ||this.count/this.current==this.limit){
// // this.noMore = true;
// // }
// // this.list = [...this.list, ...res.pageRes.records];
// // this.current += 1; //更新页码
// // //显示提示语
// // this.showText = true;
// // if(this.current==2||type){
// // this.scrollTop = 0
// // this.$nextTick(() => {
// // this.scrollTop = 0.1; // 确保触发滚动
// // })
// // }
// } else {
// this.show = false;
// this.null_text = "暂无数据";
// }
});
},
//加载更多
loadMore() {
this.getListData(this.taihumedId);
},
//切换tab状态
ordersTabCLi(data, index) {
this.currentCateIndex = index;
this.courseName = "";
this.taihumedId = data.id;
this.statusTitle = data.statusTitle;
this.statusColor = data.color;
//重置
this.list = [];
this.noMore = false;
this.show = false;
this.count = 0;
this.current = 1;
this.getListData(this.taihumedId);
},
//详情
goToDetail(item) {
if (this.isRefreshing) return;
var navTitle = "";
var type = "";
navTitle = "医案详情";
type = "detail";
uni.navigateTo({
url: `/pages/medicalRecords/evaluateDetail?navTitle=${navTitle}&title=${navTitle}&id=${item.id}&type=${type}&statusId=${this.taihumedId}&isEvaluate=1`,
});
},
},
};
</script>
<style lang="scss" scoped>
@import "@/static/mixin.scss";
.content {
height: 100%;
overflow: auto;
background-color: #fff;
}
.doctors_list {
margin: 0 20rpx 20rpx;
}
.doctors_item {
// border: 1rpx solid $themeColor;
border-radius: 15rpx;
margin-bottom: 20rpx;
padding: 12rpx 30rpx 60rpx;
display: flex;
align-items: center;
position: relative;
background-color: #fff;
box-shadow: 0 1px 8px #e3e1e1;
}
.item_image {
display: block;
width: 120rpx;
height: 120rpx;
flex-shrink: 0;
background: #f3f3f3;
}
.item_right {
width: calc(100%);
// margin-left: 30rpx;
// padding-bottom: 20rpx;
}
.item_top {
// display: flex;
// align-items: center;
// line-height: 30rpx;
margin-top: 8rpx;
}
.item_name {
font-size: 34rpx;
white-space: pre-wrap;
word-wrap: break-word; /* 避免长单词造成溢出 */
color: #333;
font-weight: bold;
margin-bottom: 8rpx;
}
.item_content {
h1 {
font-size: 28rpx;
line-height: 30px;
}
}
.item_title {
font-size: 32rpx;
color: #333;
}
.item_time {
font-size: 26rpx;
color: #aaacab;
}
.item_con {
font-size: 30rpx;
font-weight: bold;
color: #333;
margin-top: 10rpx;
line-height: 40rpx;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
}
.null_text {
display: block;
text-align: center;
font-size: 30rpx;
color: #999;
padding-top: 300rpx;
}
.doctors_module {
width: 100%;
position: fixed;
z-index: 99;
left: 0;
}
.cateList {
background: #f3f3f3;
}
.flex {
display: flex;
align-items: center;
width: 100%;
}
.name_search {
background-color: #fff;
padding: 20rpx 30rpx;
display: flex;
align-items: center;
/deep/.is-input-border {
background-color: #f3f3f3;
border-radius: 50rpx;
height: 60rpx;
line-height: 30rpx;
padding: 15rpx;
font-size: 28rpx;
color: #666;
}
/deep/.uni-easyinput__content-input {
}
.name-placeholder {
font-size: 28rpx;
text-align: center;
color: #666;
}
button {
background-color: $themeBgColor;
font-size: 26rpx;
line-height: 36rpx;
border-radius: 15rpx;
color: #fff;
padding: 5rpx 20rpx;
margin-left: 15rpx;
}
}
.show-more,
.no-more {
display: inline-block;
width: 100%;
font-size: 24rpx;
padding-top: 5rpx;
color: #ccc;
text-align: center;
}
.list_item_study {
line-height: 48rpx;
background: $themeBgColor;
color: #fff;
border-radius: 40rpx;
font-size: 24rpx;
padding: 0 20rpx;
}
.list_item_bt {
display: flex;
align-items: center;
position: absolute;
right: 20rpx;
bottom: 16rpx;
}
.list_item_price {
font-size: 30rpx;
font-weight: 500;
margin-right: 30rpx;
color: red;
line-height: 54rpx;
}
.top_right {
display: flex;
align-items: center;
margin-right: 30rpx;
text {
font-size: 28rpx;
color: #fff;
padding-left: 2rpx;
}
}
/deep/.u-upload__deletable {
display: none !important;
}
/deep/.u-upload__button {
display: none !important;
}
/* 状态样式 */
.card_label {
display: inline-block;
padding: 0px 16rpx;
background-color: #4caf50; /* 绿色背景 */
color: white;
// font-weight: bold;
font-size: 12px;
border-radius: 4px; /* 圆角 */
position: relative; /* 用于斜角效果 */
text-align: center;
transform: skew(-20deg); /* 倾斜效果 */
margin-right: 20rpx; /* 如果有多个标签时,之间保持间距 */
line-height: 38rpx;
}
/* 斜角效果 */
// .card_label::after {
// content: '';
// position: absolute;
// top: 0;
// right: -10px;
// width: 20px;
// height: 20px;
// background-color: inherit;
// transform: rotate(45deg); /* 旋转45度形成斜角 */
// z-index: -1;
// }
</style>

File diff suppressed because it is too large Load Diff

View File

@@ -11,7 +11,7 @@
<view class="doctors_module" :style="`top: ${42 + statusBarHeight}px;`">
<view class="cateList flexbox" style="background-color: #fff">
<common-sticky
itemStyle="width:25%; height: 38px;font-size:24rpx;"
itemStyle="width:20%; height: 38px;font-size:24rpx;"
:list="tabsList"
label="title"
:currentCateIndex="currentCateIndex"
@@ -43,6 +43,7 @@
<view class="doctors_list" id="top">
<view
class="doctors_item"
:style="taihumedId == 4 ? 'padding-bottom:80rpx;' : ''"
v-for="(item, index) in list"
:key="index"
@click="goToDetail(item)"
@@ -64,12 +65,75 @@
<view class="item_right">
<view style="display: flex; align-items: center">
<text class="card_label" v-if="statusTitle" :style="`background-color:${statusColor} ;`">{{ statusTitle }}</text>
<text
class="card_label"
v-if="statusTitle"
:style="`background-color:${statusColor} ;`"
>{{item.state==4?'质检未通过': statusTitle }}</text
>
<image
v-if="currentCateIndex == 3 && item.state == 6"
style="
height: 60rpx;
width: 60rpx;
position: absolute;
right: 16rpx;
top: 0rpx;
"
src="../../static/icon/aa.png"
mode="aspectFit"
></image>
<image
v-if="currentCateIndex == 3 && item.state == 5"
style="
height: 60rpx;
width: 60rpx;
position: absolute;
right: 16rpx;
top: 0rpx;
"
src="../../static/icon/bb.png"
mode="aspectFit"
></image>
<image
v-if="currentCateIndex == 4 && item.state == 4"
style="
height: 60rpx;
width: 60rpx;
position: absolute;
right: 16rpx;
top: 0rpx;
"
src="../../static/icon/cc.png"
mode="aspectFit"
></image>
<text class="item_time">{{ item.createTime }}</text></view
>
<view class="item_top">
<view class="item_name">{{ item.title }}</view>
<view
class="item_top"
:style="`${currentCateIndex == 4 ? 'opacity: 0.5;' : ''}${
currentCateIndex == 0 ? 'margin-top:0;' : ''
}`"
>
<view
class="item_name"
:style="
currentCateIndex != 3
? 'width:100%;'
: 'width:calc(100% - 100rpx);display: flex;align-items: center;'
"
>{{ item.title }}
<image
v-if="currentCateIndex == 3 && item.state == 6"
style="height: 50rpx; width: 50rpx; margin-left: 10rpx"
src="../../static/icon/jing2.png"
mode="aspectFit"
></image>
</view>
<rich-text
class="item_content"
:nodes="item.information"
@@ -79,7 +143,10 @@
:nodes="item.chiefComplaint"
></rich-text> -->
</view>
<view style="margin-top: 20rpx" v-if="item.img">
<view
style="margin-top: 20rpx"
v-if="item.img && taihumedId == 0"
>
<u-upload
:fileList="item.fileList1"
multiple
@@ -92,11 +159,43 @@
</u-upload>
</view>
<view class="list_item_bt">
<view
class="list_item_bt"
:style="
taihumedId == 4
? 'width: 100%;display: block;align-items: center;justify-content: space-between;right: 0;padding:0 20rpx;'
: ''
"
>
<view
@click.stop="changeShowFlag(item)"
v-if="taihumedId == 4"
:style="`color: ${
item.showFlag == 1 ? '#5188e5' : '#5e6d82'
};display: flex;align-items: center;`"
>
<text style="margin-right: 10rpx"
>是否在我的医案中展示</text
>
<uni-icons
:color="item.showFlag == 1 ? '#5188e5' : '#5e6d82'"
:type="
item.showFlag == 0 ? 'eye-slash-filled' : 'eye-filled'
"
size="24"
></uni-icons>
</view>
<!-- <view @click.stop="changeShowFlag(item)" v-if="taihumedId == 4" :style="`color: ${item.article_flag==1?'#5188e5':'#5e6d82'};display: flex;align-items: center;`">
<text style="margin-right: 10rpx;">是否在我的文章中展示</text>
<uni-icons :color="item.article_flag==1?'#5188e5':'#5e6d82'" :type="item.article_flag==0?'eye-slash-filled':'eye-filled'" size="24" ></uni-icons>
</view> -->
<text class="list_item_study" v-if="taihumedId == 0"
>编辑医案</text
>
<text class="list_item_study" v-else>医案详情</text>
<!-- <text class="list_item_study" :class="`medicalDetailButton${item.state}`" v-else>医案详情</text> -->
</view>
<!-- <text class="item_con">{{ item.taihuTalent.map(talent => talent.name).join(' ') }}</text> -->
</view>
@@ -116,9 +215,11 @@
<script>
import $http from "@/config/requestConfig.js";
import text from "uview-ui/libs/config/props/text";
export default {
data() {
return {
options: null,
tabsList: [],
currentCateIndex: 0,
list: [],
@@ -128,8 +229,8 @@ export default {
limit: 10,
courseName: "",
taihumedId: null,
statusTitle: '',
statusColor: '',
statusTitle: "",
statusColor: "",
timer: null,
showText: false,
@@ -194,14 +295,25 @@ export default {
// .then(res=> {
// if (res.list&&res.list.length>0) {
this.tabsList = [
{ id: 0, title: "草稿箱", statusTitle: '' },
{ id: 1, title: "待审核",statusTitle: '待审核',color:'#f59442' },
{ id: 3, title: "已通过",statusTitle: '已通过' ,color:'#22be98' },
{ id: 2, title: "通过",statusTitle: '未通过',color:"#e78084" },
{ id: 0, title: "草稿箱", statusTitle: "" },
{ id: 1, title: "待审核", statusTitle: "待审核", color: "#f59442" },
{ id: 3, title: "质检中", statusTitle: "检测中", color: "#17A2B8" },
{ id: 4, title: "通过", statusTitle: "", color: "#22be98" },
{ id: 2, title: "未通过", statusTitle: "审核未通过", color: "#e78084" },
];
if (uni.getStorageSync("medicalRecordsStatusId")) {
const statusId = uni.getStorageSync("medicalRecordsStatusId");
this.taihumedId = this.tabsList[statusId].id;
this.currentCateIndex = statusId;
this.statusTitle = this.tabsList[statusId].statusTitle;
this.statusColor = this.tabsList[statusId].color;
} else {
this.taihumedId = this.tabsList[0].id;
this.statusTitle = '';
this.statusColor = '';
this.currentCateIndex = 0;
this.statusTitle = "";
this.statusColor = "";
}
this.getListData(this.taihumedId);
// }
// });
@@ -224,7 +336,8 @@ export default {
url: "common/medicalRecords/medicalRecordsList",
method: "POST",
data: {
state: taihumedId,
state:
taihumedId == 4 ? "5,6" : taihumedId == 2 ? "2,4" : taihumedId,
},
header: {
"Content-Type": "application/json",
@@ -232,7 +345,7 @@ export default {
})
.then((res) => {
uni.hideLoading();
this.list=[...res.medicalRecordsList].filter(e=>e.data)
this.list = [...res.medicalRecordsList].filter((e) => e.data);
this.list = [...this.list].map((e) => {
return {
...e,
@@ -271,6 +384,23 @@ export default {
}
});
},
changeShowFlag(data) {
this.$http
.request({
url: "common/medicalRecords/saveMedicalRecords",
method: "POST",
data: {
...data,
showFlag: data.showFlag == 0 ? 1 : 0,
},
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
this.getListData(this.taihumedId);
});
},
//加载更多
loadMore() {
this.getListData(this.taihumedId);
@@ -309,13 +439,17 @@ export default {
navTitle = "医案详情";
type = "detail";
break;
case 4:
navTitle = "医案详情";
type = "detail";
break;
case 2:
navTitle = "医案详情";
type = "detail";
break;
}
uni.navigateTo({
url: `/pages/medicalRecords/medical?navTitle=${navTitle}&title=${navTitle}&id=${item.id}&type=${type}&statusId=${this.taihumedId}`,
url: `/pages/medicalRecords/medical?navTitle=${navTitle}&title=${navTitle}&id=${item.id}&type=${type}&statusId=${item.state}`,
});
},
},
@@ -336,7 +470,7 @@ export default {
// border: 1rpx solid $themeColor;
border-radius: 15rpx;
margin-bottom: 20rpx;
padding: 12rpx 30rpx 60rpx;
padding: 12rpx 30rpx 50rpx;
display: flex;
align-items: center;
position: relative;
@@ -528,4 +662,22 @@ export default {
// transform: rotate(45deg); /* 旋转45度形成斜角 */
// z-index: -1;
// }
.medicalDetailButton2,
.medicalDetailButton4 {
background: #f2f1f6 !important;
color: #635c5c;
}
.medicalDetailButton5,
.medicalDetailButton6 {
background: rgb(34, 190, 152) !important;
}
.medicalDetailButton1 {
background: #fff4e0 !important;
color: rgb(245, 148, 66);
}
.medicalDetailButton3 {
background: #82ddeb70 !important;
color: rgb(23, 162, 184);
}
</style>

View File

@@ -54,16 +54,13 @@
<!-- 固定的输入框部分 -->
<view style="height: calc(100% - 120rpx)">
<textarea
v-model="formData.message"
maxlength="-1"
style="
width: 100%;
min-height: calc(85vh - 100px) !important;
height: calc(85vh - 100px) !important;
max-height: calc(85vh - 100px) !important;
"
auto-height
placeholder="请输入医案到此处,将自动解析医案信息
@@ -104,7 +101,12 @@
class="message_wrap"
:class="`${options.type == 'detail' ? 'message_wrap_detail' : ''}`"
:style="`top: 1px;height:${
options.statusId == 1 || options.statusId == 3 ? '92vh' : '85vh'
options.statusId == 1 ||
options.statusId == 5 ||
options.statusId == 6 ||
options.statusId == 4
? '92vh'
: '85vh'
}`"
v-if="showMessages"
>
@@ -315,7 +317,6 @@ export default {
// this.tishi=true
}
uni.stopPullDownRefresh();
this.isRefreshing = false;
console.log("下拉刷新已停止");
@@ -383,16 +384,12 @@ export default {
}
}
if (
["妇科", "儿科"].includes(this.medicalForm.labelTitle)&&isNewSave!=1
) {
if (
this.medicalForm.labelTitle == "妇科"
["妇科", "儿科"].includes(this.medicalForm.labelTitle) &&
isNewSave != 1
) {
if (this.medicalForm.labelTitle == "妇科") {
const value = this.editableMap["personalAndFamilyHistory"] || "";
const hasKeywords =
value.includes("月经") || value.includes("婚育");
const hasKeywords = value.includes("月经") || value.includes("婚育");
if (!hasKeywords) {
// 包含“月经”或“婚育”
@@ -406,10 +403,7 @@ export default {
return false;
}
}
if (
this.medicalForm.labelTitle == "儿科"
) {
if (this.medicalForm.labelTitle == "儿科") {
const value = this.editableMap["pastHistory"] || "";
const hasKeywords = value.includes("疫苗");
if (!hasKeywords) {
@@ -465,6 +459,11 @@ export default {
url: `/pages/medicalRecords/medical?navTitle=编辑医案&title=编辑医案&id=${this.medicalId}&type=edit&statusId=0`,
});
} else {
if (type == "submit") {
uni.setStorageSync("medicalRecordsStatusId", 1);
} else {
uni.removeStorageSync("medicalRecordsStatusId");
}
uni.redirectTo({
url: "/pages/medicalRecords/index",
});
@@ -753,7 +752,7 @@ export default {
},
})
.then((res) => {
console.log('res at line 713:', res)
console.log("res at line 713:", res);
if (res.code == 0) {
this.medicalId = res.data;

View File

@@ -6,61 +6,118 @@
:scroll-into-view="scrollIntoView"
scroll-with-animation
>
<view
class="message-container-block"
:class="{
'message-container-detail': type == 'detail',
'content_detail_0': statusId == 0,
'content_detail_1': statusId == 1,
'content_detail_2': statusId == 2,
'content_detail_3': statusId == 3,
'content_detail_3_talents': page == 'talents',
content_detail_0: statusId == 0,
content_detail_1: statusId == 1,
content_detail_2: statusId == 2 || statusId == 4,
content_detail_3: statusId == 3,
content_detail_4: statusId == 5 || statusId == 6,
content_detail_3_talents: page == 'talents',
content_detail_none: isEvaluate == '1',
}"
>
<view class="loading-spinner" v-if="loading"></view>
<uni-notice-bar :color="medicalRecords.state==0?'#eb3c41':medicalRecords.state==2?'#e78083':''"
:background-color="medicalRecords.state==3?'#e7808330':medicalRecords.state==2?'#e7808330':''"
:text="`审核备注:${markInfo}`"
v-if="markInfo" style="margin-bottom: 0;"/>
<uni-notice-bar
:color="
medicalRecords.state == 0
? '#eb3c41'
: medicalRecords.state == 2 || medicalRecords.state == 4
? '#e78083'
: ''
"
:background-color="
medicalRecords.state == 6 || medicalRecords.state == 5
? '#e7808330'
: medicalRecords.state == 2 || medicalRecords.state == 4
? '#e7808330'
: ''
"
:text="`${medicalRecords.state == 4?'质检未通过':'审核备注'}${markInfo}`"
v-if="markInfo"
style="margin-bottom: 0"
/>
<view style="" class="detail_top" :class="{
'detail_top_0': statusId == 0,
'detail_top_1': statusId == 1,
'detail_top_2': statusId == 2,
'detail_top_3': statusId == 3,
'detail_top_3_talents': page == 'talents',
}" v-if="type == 'detail'">
<view class="detail_top_left" :style="`${page?'width:100%;padding-bottom:0':''}`">
<view
style=""
class="detail_top"
:class="{
detail_top_0: statusId == 0,
detail_top_1: statusId == 1,
detail_top_2: statusId == 2 || statusId == 4,
detail_top_3: statusId == 3,
detail_top_4: statusId == 5 || statusId == 6,
detail_top_3_talents: page == 'talents',
detail_top_none: isEvaluate == '1',
}"
v-if="type == 'detail'"
>
<view
class="detail_top_left"
:style="`${page ? 'width:100%;padding-bottom:0' : ''}`"
>
<view class="detail_top_item">
<view class="detail_top_item_name">{{ formData.title }}</view>
<view class="label_title">分类 : {{ formData.labelTitle }}</view>
<view class="detail_top_item_name">
{{ formData.title }}</view
>
<view
class="label_title"
:style="isEvaluate == '1' ? 'color:#000' : ''"
>分类 : {{ formData.labelTitle }}
</view>
</view>
</view>
<image
class="image_box"
v-if="statusId == 1&&!page"
v-if="statusId == 1 && !page && !isEvaluate"
src="../../static/icon/shenghezhong.png"
style=""
></image>
<image
class="image_box"
v-if="statusId == 2&&!page"
v-if="(statusId == 2) && !page && !isEvaluate"
src="../../static/icon/weitongguo.png"
style=""
></image>
<image
class="image_box"
v-if="statusId == 3&&!page"
style="width: 150rpx"
v-if="statusId == 3 && !page && !isEvaluate"
src="../../static/icon/jiancezhong.png"
></image>
<!-- <image
class="image_box"
v-if="(statusId == 5) && !page && !isEvaluate"
src="../../static/icon/yitongguo.png"
style="width: 150rpx;"
style="width: 150rpx"
></image
></view>
> -->
<image
class="image_box"
v-if="(statusId == 6) && !page && !isEvaluate"
src="../../static/icon/a_.png"
style="width: 170rpx;right:40rpx;top: 60rpx;"
></image
>
<image
class="image_box"
v-if="(statusId == 5) && !page && !isEvaluate"
src="../../static/icon/b_.png"
style="width: 200rpx;"
></image
>
<image
class="image_box"
v-if="(statusId == 4) && !page && !isEvaluate"
src="../../static/icon/c_.png"
style="width: 200rpx;right: -10rpx;"
></image
>
</view>
<view class="home_wrap" style="margin: 0" v-if="!loading">
<view
class="home_form"
@@ -182,6 +239,7 @@
justify-content: space-between;
margin-bottom: 14px;
"
:style="isEvaluate == '1' ? 'text-align: justify;' : ''"
>
<view style="width: calc(100%)">
<view
@@ -209,14 +267,20 @@
></view>
<!-- <view class="editor-wrapper"> -->
<rich-text style="color: #474343;"
<rich-text
style="color: #474343"
:nodes="editableMap[key]"
v-if="editableMap[key]"
></rich-text>
<rich-text nodes="<p>无</p>" v-else style="color: #474343;"></rich-text>
<rich-text
nodes="<p>无</p>"
v-else
style="color: #474343"
></rich-text>
<!-- </view> -->
</view>
<view v-if="fileList1.length>0"
<view
v-if="fileList1.length > 0"
class="form_item"
style="
display: block;
@@ -255,8 +319,6 @@
</view>
</view>
</view>
</view>
<!-- 搜索结果列表 -->
@@ -284,10 +346,18 @@ export default {
components: {
treeList,
},
props: ["loading", "form", "medicalRecords", "type", "statusId",'page'],
props: [
"loading",
"form",
"medicalRecords",
"type",
"statusId",
"page",
"isEvaluate",
],
data() {
return {
markInfo:'',
markInfo: "",
editorOptions: {
theme: "snow", // Quill 编辑器的主题
modules: {
@@ -389,8 +459,6 @@ export default {
onShow() {},
methods: {
onStatusChange(e) {
this.formats = e.detail;
},
@@ -460,7 +528,7 @@ export default {
// If an <h1> is found, remove it and process the rest
if (h1Match) {
// Remove the first <h1> and its content, then return the rest of the HTML
html = html.replace(h1Match[0], '');
html = html.replace(h1Match[0], "");
}
// Return the remaining HTML
@@ -743,26 +811,35 @@ export default {
this.chatName = item.name;
},
initRecordData(data) {
this.markInfo=''
this.markInfo = "";
this.formData.title = data.title ? data.title : "";
this.formData.labelId = data.labelId ? data.labelId : "";
this.formData.labelTitle = data.labelTitle ? data.labelTitle : "";
if (data.mark) {
this.markList = JSON.parse(data.mark);
const latest = this.markList.reduce((latest, current) => {
return new Date(current.time) > new Date(latest.time) ? current : latest;
return new Date(current.time) > new Date(latest.time)
? current
: latest;
});
if(data.state!=1&&data.state!=3&&latest){
this.markInfo=latest.mark?latest.mark:''
if (
data.state != 1 &&
data.state != 4 &&
data.state != 5 &&
data.state != 6 &&
data.state != 3 &&
latest
) {
this.markInfo = latest.mark ? latest.mark : "";
}
// medicalRecords.mark&&medicalRecords.state!=1&&medicalRecords.state!=3
}
if(data.state==4){
this.markInfo = '医案内容不够精准'
}
this.record = {
information: data.information
? data.information
@@ -1386,8 +1463,6 @@ if(data.state!=1&&data.state!=3&&latest){
}
}
.message_title {
text-align: center;
font-size: 34rpx;
@@ -1868,15 +1943,16 @@ h3 {
}
.content_detail_1 {
background: #fff4e026;
}
.content_detail_3{
background: linear-gradient(to bottom, #f6fcfb 0%, #fff 90%);
.content_detail_3 {
background: linear-gradient(to bottom, #f4fbfa 0%, #fff 90%);
}
.content_detail_4 {
background: linear-gradient(to bottom, #f6fcfb 0%, #fff 90%);
}
.content_detail_3_talents {
background: linear-gradient(to bottom, #e9f2fc 0%, #ffffff 90%);
}
// .content_detail_2{
@@ -1929,20 +2005,28 @@ h3 {
}
.detail_top_1 {
background: linear-gradient(to bottom, #fff4e0 0%, #fff4e026 90%);
}
.detail_top_2 {
background: linear-gradient(to bottom, #f2f1f6 0%, #fff 90%);
}
.detail_top_3 {
background: linear-gradient(to bottom, #67c2d070 0%, #f6fcfb 90%);
}
.detail_top_4 {
background: linear-gradient(to bottom, #22be973d 0%, #f6fcfb 90%);
}
.detail_top_3_talents {
background: linear-gradient(to bottom, #d8e6ff 0%, #e9f2fc 90%);
min-height: 260rpx;
}
.content_detail_none {
background: #d8e6ff57 !important;
}
.detail_top_none {
background: #d8e6ff0d !important;
min-height: auto;
.detail_top_left {
width: 100%;
}
}
</style>

View File

@@ -1,23 +1,45 @@
<template>
<view class="commonPage commonPageBox">
<view class="bg_top">
<u-icon @click="goSetting" class="setIcon" labelColor="#5188e5" labelPos="bottom" label="设置" name="setting"
:style="`top:${(20 + statusBarHeight) * 2}rpx`" color="#5188e5" size="22"></u-icon>
<u-icon
@click="goSetting"
class="setIcon"
labelColor="#5188e5"
labelPos="bottom"
label="设置"
name="setting"
:style="`top:${(20 + statusBarHeight) * 2}rpx`"
color="#5188e5"
size="22"
></u-icon>
</view>
<view class="mine_box" :style="`top:${(80 + statusBarHeight) * 2}rpx`">
<view class="per_mes">
<view class="per_mes_user">
<view style="display: flex; align-items: center; flex-direction: column">
<image @click="goUserInfo" :src="userMes.avatar" v-if="userMes.avatar&&userMes.avatar!=''"
class="per_mes_img color_shandow"></image>
<image src="../../static/image.png" v-if="userMes.avatar == null||userMes.avatar == ''"
class="per_mes_img color_shandow"></image>
<view
style="display: flex; align-items: center; flex-direction: column"
>
<image
@click="goUserInfo"
:src="userMes.avatar"
v-if="userMes.avatar && userMes.avatar != ''"
class="per_mes_img color_shandow"
></image>
<image
src="../../static/image.png"
v-if="userMes.avatar == null || userMes.avatar == ''"
class="per_mes_img color_shandow"
></image>
</view>
</view>
<view class="userInfoBox">
<view class="name">{{ userMes.nickname ? userMes.nickname : "未设置" }}</view>
<view class="phone" v-if="userMes.tel">手机号({{ userMes.tel }})</view>
<view class="name">{{
userMes.nickname ? userMes.nickname : "未设置"
}}</view>
<view class="phone" v-if="userMes.tel"
>手机号({{ userMes.tel }})</view
>
</view>
<br clear="both" />
</view>
@@ -53,12 +75,17 @@
<view class="chong_zhi boxShadow box_fillet chongzhi_box">
<view class="chong_list">
<view class="left">
<view class="chong_list_item" @click="onPageJump('/pages/wallet/account')">
<view
class="chong_list_item"
@click="onPageJump('/pages/wallet/account')"
>
<view class="pay_item_img">
天医币
<u-icon @click.native.stop="openInfo()"
<u-icon
@click.native.stop="openInfo()"
name="question-circle"
style="float: right; margin: 0 6rpx">
style="float: right; margin: 0 6rpx"
>
</u-icon>
</view>
@@ -67,16 +94,27 @@
</view>
</view>
<view class="chong_list_item" @click="onPageJump('/pages/wallet/points')" v-if="$platform=='android'">
<view class="pay_item_img">
积分
</view>
<view class="text" style="line-height:30rpx">{{userMes.jf ? userMes.jf : 0}}</view>
<view
class="chong_list_item"
@click="onPageJump('/pages/wallet/points')"
v-if="$platform == 'android'"
>
<view class="pay_item_img"> 积分 </view>
<view class="text" style="line-height: 30rpx">{{
userMes.jf ? userMes.jf : 0
}}</view>
</view>
</view>
<view class="chong_list_item" style="flex-direction:initial;margin-right:0;">
<view class="chong_btn" @click="onPageJump('/pages/wallet/recharge')"> </view>
<view
class="chong_list_item"
style="flex-direction: initial; margin-right: 0"
>
<view
class="chong_btn"
@click="onPageJump('/pages/wallet/recharge')"
> </view
>
</view>
</view>
</view>
@@ -84,10 +122,33 @@
<view class="list_box">
<view class="xiugai boxShadow box_fillet">
<common-list :dataList="pageList" @hancleClick="handleClickTab" label="name">
<common-list
:dataList="pageList"
@hancleClick="handleClickTab"
label="name"
>
<template slot="rightSlot" slot-scope="slotProps">
<text class="fdButtonBox aui-text-success"
style="line-height: 40rpx">{{ slotProps.row.content }}</text>
<text
class="fdButtonBox aui-text-success"
style="line-height: 40rpx"
>{{ slotProps.row.content }}</text
>
<text
class="fdButtonBox aui-text-success"
v-if="
slotProps.row.contentType &&
slotProps.row.contentType == 'shengpi' &&
shengpiNumber > 0
"
style="
line-height: 40rpx;
font-size: 40rpx;
color: #5188e5;
float: right;
"
>{{ shengpiNumber }}</text
>
</template>
</common-list>
</view>
@@ -106,9 +167,18 @@
</view>
<view class="bottom">
<view class="button_box" style=" align-items: center; justify-content: center;">
<u-button style="width: 200rpx; float: center" :plain="true" text="知道啦" color="#9b9b9b"
size="small" @click="infoShow = false"></u-button>
<view
class="button_box"
style="align-items: center; justify-content: center"
>
<u-button
style="width: 200rpx; float: center"
:plain="true"
text="知道啦"
color="#9b9b9b"
size="small"
@click="infoShow = false"
></u-button>
</view>
</view>
</view>
@@ -121,14 +191,12 @@
<script>
import $http from "@/config/requestConfig.js";
import {
mapState,
mapMutations
} from "vuex";
import { mapState, mapMutations } from "vuex";
export default {
data() {
return {
userMes: {},
shengpiNumber: 0,
pageList: [
// {
// name: "我的病历夹",
@@ -143,22 +211,23 @@ export default {
{
name: "我的订单",
url: "/pages/order/index",
type: "pageJump"
},
{
name: "我的文章",
url: "/pages/articleList/index",
type: "pageJump"
},
{
name: "我的医案",
url: "/pages/medicalRecords/index",
type: "pageJump"
type: "pageJump",
},
// {
// name: "我的文章",
// url: "/pages/articleList/index",
// type: "pageJump"
// },
// {
// name: "待审核医案",
// url: "/pages/medicalRecords/PendingApprovalIndex",
// type: "pageJump"
// },
{
name: "我的课程",
url: "/pages/curriculum/index/index",
type: "pageJump"
type: "pageJump",
},
{
name: "个人资料",
@@ -173,12 +242,12 @@ export default {
{
name: "问题反馈/申诉",
url: "/pages/user/workOrder",
type: "pageJump"
}
type: "pageJump",
},
],
infoShow: false, // 显示电子书相关
aiVipLog: null,
flag: null
flag: null,
};
},
computed: {
@@ -187,9 +256,15 @@ export default {
//第一次加载
onLoad(e) {
uni.hideTabBar();
this.getMedicalRecords();
this.getMedicalRecordsCanCheck();
},
//页面显示
onShow() {
if(uni.getStorageSync('medicalRecordsStatusId')){
uni.removeStorageSync('medicalRecordsStatusId');
}
this.getShengpiNumber()
this.getData();
this.getVipData();
},
@@ -227,17 +302,73 @@ export default {
});
}
},
//获取数据
getVipData() {
this.$http.request({
url: 'taihumed/aiVip/getUserAiVip',
getMedicalRecords() {
if (this.userInfo.id != undefined) {
this.$http
.post("common/medicalRecords/getMedicalRecordsRoleByUser")
.then((res) => {
console.log("res at line 237:", res);
if (res.code == 0 && res.roleFlag == 1) {
this.pageList.splice(1, 0, {
name: "我的医案",
url: "/pages/medicalRecords/index",
type: "pageJump",
});
}
});
}
},
getMedicalRecordsCanCheck() {
if (this.userInfo.id != undefined) {
this.$http.post("common/medicalRecords/canCheck").then((res) => {
console.log("res at line 237:", res);
if (res.code == 0 && res.flag == true) {
this.pageList.splice(1, 0, {
name: "待审批医案",
url: "/pages/medicalRecords/PendingApprovalIndex",
type: "pageJump",
contentType: "shengpi",
});
}
});
}
},
getShengpiNumber() {
this.$http
.request({
url: "common/medicalRecords/getMedicalRecordsCheckList",
method: "POST",
data: {},
header: {
"Content-Type": "application/json",
},
})
.then(res=> {
.then((res) => {
// 过滤不包含自己的用户ID的对象
var list = [...res.list].filter((item) => {
// 判断是否有 stateInfo 属性且它不包含用户ID或者为空字符串
return (
!item.stateInfo ||
item.stateInfo === "" ||
!item.stateInfo.includes(this.userInfo.id.toString())
);
});
this.shengpiNumber = list.length;
});
},
//获取数据
getVipData() {
this.$http
.request({
url: "taihumed/aiVip/getUserAiVip",
method: "POST",
data: {},
header: {
"Content-Type": "application/json",
},
})
.then((res) => {
if (res.code == 0) {
this.aiVipLog = res.aiVipLog;
this.flag = res.flag;
@@ -283,7 +414,6 @@ export default {
}
view {
.name {
width: 100%;
font-size: 30rpx;
@@ -778,7 +908,7 @@ export default {
}
.vip_info_bottom {
color: #3583C3;
color: #3583c3;
}
.vbg {
@@ -857,7 +987,6 @@ export default {
height: 24rpx;
}
.vip_infor {
}
.vip_infor_item {
display: block;

View File

@@ -1,48 +1,102 @@
<template>
<view class="content">
<z-nav-bar title="太湖英才" bgColor="#5188e5" fontColor="#fff" :backState="2000"></z-nav-bar>
<z-nav-bar
title="太湖英才"
bgColor="#5188e5"
fontColor="#fff"
:backState="2000"
></z-nav-bar>
<view class="talents_module" :style="`top: ${42 + statusBarHeight}px;`">
<view class="talents_tab">
<view class="tab_item" @click="toggleFilter('city')">
地区
<text :class="['arrow', activeFilter === 'city' ? 'up' : 'down']"></text>
<text
:class="['arrow', activeFilter === 'city' ? 'up' : 'down']"
></text>
</view>
<view class="tab_item" @click="toggleFilter('department')">
科室
<text :class="['arrow', activeFilter === 'department' ? 'up' : 'down']"></text>
<text
:class="['arrow', activeFilter === 'department' ? 'up' : 'down']"
></text>
</view>
</view>
<!-- 弹窗 -->
<view class="talents_tan" v-if="activeFilter">
<view class="tan_item tan_city" v-if="activeFilter == 'city'">
<scroll-view scroll-y="true" class="city_scroll scroll_left" :class="!cityStatus?'width50':''" :scroll-into-view="'country_' + selectedPath[0]">
<view class="city_item"
<scroll-view
scroll-y="true"
class="city_scroll scroll_left"
:class="!cityStatus ? 'width50' : ''"
:scroll-into-view="'country_' + selectedPath[0]"
>
<view
class="city_item"
:class="countryIndex == index ? 'active' : ''"
v-for="(item,index) in country" :key="index" :id="'country_' + item.areaId" @click="click_country(item,index)">
v-for="(item, index) in country"
:key="index"
:id="'country_' + item.areaId"
@click="click_country(item, index)"
>
<text>{{ item.title }}</text>
</view>
</scroll-view>
<scroll-view scroll-y="true" class="city_scroll scroll_center" :class="!cityStatus?'width50':''" :scroll-into-view="'province_' + selectedPath[1]">
<view class="city_item"
<scroll-view
scroll-y="true"
class="city_scroll scroll_center"
:class="!cityStatus ? 'width50' : ''"
:scroll-into-view="'province_' + selectedPath[1]"
>
<view
class="city_item"
:class="provinceIndex == index ? 'active' : ''"
v-for="(item,index) in province" :key="index" :id="'province_' + item.provId" @click="click_province(item,index)">
v-for="(item, index) in province"
:key="index"
:id="'province_' + item.provId"
@click="click_province(item, index)"
>
<text>{{ item.provName }}</text>
</view>
</scroll-view>
<scroll-view scroll-y="true" class="city_scroll scroll_right" v-if="cityStatus" :scroll-into-view="'city_' + selectedPath[2]">
<view class="city_item"
<scroll-view
scroll-y="true"
class="city_scroll scroll_right"
v-if="cityStatus"
:scroll-into-view="'city_' + selectedPath[2]"
>
<view
class="city_item"
:class="cityIndex == index ? 'active' : ''"
v-for="(item,index) in city" :key="index" :id="'city_' + item.cityId" @click="click_city(item,index)">
v-for="(item, index) in city"
:key="index"
:id="'city_' + item.cityId"
@click="click_city(item, index)"
>
<text>{{ item.cityName }}</text>
</view>
</scroll-view>
</view>
<view class="tan_item tan_department" v-if="activeFilter=='department'">
<!-- <view class="tan_item tan_department" v-if="activeFilter=='department'">
<view class="department_item"
:class="departmentIndex==index?'department_active':''"
v-for="(item,index) in chatAssistants" :key="index" @click="click_department(item.name,index)">
<text>{{item.name}}</text>
:class="deptLabelId==item.id?'department_active':''"
v-for="(item,index) in chatAssistants" :key="index" @click="click_department(item,index)">
<text>{{item.title}}</text>
</view>
</view> -->
<view
class="tan_item tan_department"
v-if="activeFilter == 'department'"
>
<view
class="department_item"
:class="deptLabelId == item.id ? 'department_active' : ''"
v-for="(item, index) in chatAssistants"
:key="index"
@click="click_department(item, index)"
>
<text>{{ item.title }}</text>
</view>
</view>
</view>
@@ -60,12 +114,23 @@
<!-- 遮罩层 -->
<view v-if="activeFilter" class="overlay" @click="closeFilter"></view>
<scroll-view scroll-y="true"
<scroll-view
scroll-y="true"
:scroll-top="scrollTop"
style="height: calc(100vh - 300rpx); margin-top: 185rpx; padding-bottom: 140rpx;"
v-if="list&&list.length>0">
style="
height: calc(100vh - 300rpx);
margin-top: 185rpx;
padding-bottom: 140rpx;
"
v-if="list && list.length > 0"
>
<view class="talents_list">
<view class="talents_item" v-for="(item,index) in list" :key="index" @click="goToDetail(item.id)">
<view
class="talents_item"
v-for="(item, index) in list"
:key="index"
@click="goToDetail(item.id)"
>
<image :src="item.icon" class="item_image" mode="aspectFit"></image>
<view class="item_right">
<view class="item_top">
@@ -84,16 +149,22 @@
<script>
import $http from "@/config/requestConfig.js";
import DepartmentMenu from "../component/commonComponents/DepartmentMenu.vue"; // 引入递归组件
export default {
components: {
DepartmentMenu,
},
data() {
return {
name: '',
region: '', //地区
department: '', //科室
name: "",
region: "", //地区
department: "", //科室
list: [],
null_text: '',
null_text: "",
deptLabelId: null,
departmentIndex: null,
activeFilter: '',
activeFilter: "",
chatAssistants: [], //科室数据
country: [], //国家数据
province: [], //省份数据
@@ -103,22 +174,22 @@ export default {
provinceIndex: null,
cityIndex: null,
countryTitle: '',
provinceTitle: '',
cityTitle: '',
countryTitle: "",
provinceTitle: "",
cityTitle: "",
//城市模块是否显示
cityStatus: false,
selectedPath: [], //存储选中路径
scrollTop: 0, //滚动位置
isRefreshing: false, //刷新状态
}
};
},
onPullDownRefresh() {
this.isRefreshing = true;
console.log("下拉刷新");
setTimeout(() => {
this.region = '';
this.region = "";
this.getData();
uni.stopPullDownRefresh();
this.isRefreshing = false;
@@ -137,118 +208,123 @@ export default {
//获取数据
getData(type) {
uni.showLoading({
title: '加载中'
})
this.$http.request({
url: 'common/taihuTalent/getTaihuTalents',
title: "加载中",
});
this.$http
.request({
url: "common/taihuTalent/getTaihuTalents",
method: "POST",
data: {
name: this.name,
region: this.region,
department: this.department
deptLabelId: this.deptLabelId ? this.deptLabelId : "",
},
header: {
"Content-Type": "application/json",
},
})
.then(res=> {
.then((res) => {
uni.hideLoading();
if (res.list && res.list.length > 0) {
this.list = res.list;
if (type) {
this.scrollTop = 0
this.scrollTop = 0;
this.$nextTick(() => {
this.scrollTop = 0.1; // 确保触发滚动
})
});
}
} else {
this.list = [];
this.null_text = '暂无数据';
this.null_text = "暂无数据";
}
});
},
//获取科室数据
getChatAssistants() {
this.$http.request({
url: 'common/ragFlowApi/getChatAssistants',
this.$http
.request({
url: "common/medicalRecords/getMedicalRecordsLabelList",
method: "POST",
data: {},
header: {
"Content-Type": "application/json",
},
})
.then(res=> {
if (res.list&&res.list.length>0) {
this.chatAssistants = res.list;
.then((res) => {
if (res.Medicals && res.Medicals.length > 0) {
this.chatAssistants = res.Medicals;
}
})
});
},
//获取国家
getAllBaseArea() {
this.$http.request({
url: 'common/baseArea/getAllBaseArea',
this.$http
.request({
url: "common/baseArea/getAllBaseArea",
method: "POST",
data: {},
header: {
"Content-Type": "application/json",
},
})
.then(res=> {
.then((res) => {
if (res.baseAreas && res.baseAreas.length > 0) {
this.country = res.baseAreas;
//如果第一位是中国默认请求
if(this.country[0].code=='86'){
if (this.country[0].code == "86") {
this.countryTitle = this.country[0].title;
this.getProvinceList();
}
}
})
});
},
//获取中国省份
getProvinceList() {
this.$http.request({
url: 'common/province/getProvinceList',
this.$http
.request({
url: "common/province/getProvinceList",
method: "POST",
data: {},
header: {
"Content-Type": "application/json",
},
})
.then(res=> {
.then((res) => {
if (res.provinceList && res.provinceList.length > 0) {
this.province = res.provinceList;
}
})
});
},
//获取城市
getCityList(provId) {
this.$http.request({
url: 'common/province/getCityList?provId='+provId,
this.$http
.request({
url: "common/province/getCityList?provId=" + provId,
method: "POST",
data: {},
header: {
"Content-Type": "application/json",
},
})
.then(res=> {
.then((res) => {
if (res.prov && res.prov.length > 0) {
this.city = res.prov;
this.cityStatus = true;
}
})
});
},
//点击国家
click_country(data, index) {
this.provinceIndex = null;
this.cityIndex = null;
this.city = [];
this.region = '';
this.cityTitle = '';
this.region = "";
this.cityTitle = "";
this.selectedPath = [data.areaId];
//只有中国有二级,如果没有二级则为海外国家
if(data.code!='86'){
if (data.code != "86") {
this.cityStatus = false;
if (this.countryTitle == data.title) {
this.countryIndex = null;
@@ -259,7 +335,7 @@ export default {
this.countryTitle = data.title;
this.region = data.title;
}
this.activeFilter = '';
this.activeFilter = "";
this.getData();
} else {
this.countryIndex = index;
@@ -267,7 +343,7 @@ export default {
this.getProvinceList();
}
console.log(this.countryIndex, this.countryTitle)
console.log(this.countryIndex, this.countryTitle);
},
//点击省份
click_province(data, index) {
@@ -275,60 +351,66 @@ export default {
this.cityIndex = null;
this.provinceTitle = data.provName;
this.selectedPath = [this.selectedPath[0], data.provId];
console.log(this.provinceTitle)
console.log(this.provinceTitle);
this.getCityList(data.provId);
},
//点击城市
click_city(data, index) {
this.selectedPath = [this.selectedPath[0], this.selectedPath[1], data.cityId];
this.selectedPath = [
this.selectedPath[0],
this.selectedPath[1],
data.cityId,
];
if (this.cityTitle == data.cityName) {
this.cityIndex = null;
this.cityTitle = '';
this.region = '';
this.cityTitle = "";
this.region = "";
} else {
this.cityIndex = index;
this.cityTitle = data.cityName;
this.region = this.provinceTitle + this.cityTitle;
}
this.activeFilter = '';
this.activeFilter = "";
this.getData();
console.log(this.region)
console.log(this.region);
},
//详情
goToDetail(id) {
if (this.isRefreshing) return;
uni.navigateTo({
url: '/pages/talents/detail?id='+id,
url: "/pages/talents/detail?id=" + id,
});
},
//点击
toggleFilter(type) {
this.activeFilter = this.activeFilter === type ? '' : type;
this.activeFilter = this.activeFilter === type ? "" : type;
},
//关闭
closeFilter() {
this.activeFilter = '';
this.activeFilter = "";
},
//点击科室类别
click_department(name, index){
if(this.department==name){
click_department(data, index) {
if (this.department == data.title) {
this.deptLabelId = null;
this.departmentIndex = null;
this.department = ''
this.department = "";
} else {
this.deptLabelId = data.id;
this.departmentIndex = index;
this.department = name;
this.department = data.title;
}
this.activeFilter = '';
this.activeFilter = "";
this.getData();
}
},
}
},
};
</script>
<style lang="scss" scoped>
@import '@/static/mixin.scss';
@import "@/static/mixin.scss";
.content {
height: 100%;
overflow: auto;
@@ -389,7 +471,6 @@ export default {
padding-top: 300rpx;
}
.talents_module {
width: 100%;
position: fixed;
@@ -445,7 +526,7 @@ export default {
display: flex;
justify-content: center;
width: 50%;
height: 85rpx;
min-height: 85rpx;
line-height: 85rpx;
border-bottom: 1rpx solid #f3f3f3;
border-right: 1rpx solid #f3f3f3;
@@ -461,7 +542,6 @@ export default {
border-bottom: 0;
}
.department_active {
text {
color: $themeColor;
font-weight: bold;
@@ -478,7 +558,8 @@ export default {
height: 395rpx;
}
.scroll_left,.scroll_center{
.scroll_left,
.scroll_center {
border-right: 1rpx solid #f3f3f3;
box-sizing: border-box;
}
@@ -521,7 +602,6 @@ export default {
color: #666;
}
/deep/.uni-easyinput__content-input {
}
.name-placeholder {
font-size: 28rpx;

BIN
static/icon/a.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

BIN
static/icon/a_.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

BIN
static/icon/aa.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

BIN
static/icon/b.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
static/icon/b_.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

BIN
static/icon/bb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
static/icon/c.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

BIN
static/icon/c_.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

BIN
static/icon/cc.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
static/icon/jiancezhong.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
static/icon/jing2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

BIN
static/icon/jingpin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB