提交 3bff20e6 编写于 作者: xiaoping.di's avatar xiaoping.di

页面ui修改

......@@ -310,3 +310,10 @@ export const updateDepartmentId = async (data) => {
method: 'post',
});
};
export const doctorDeparList = async (data) => {
return request({
url: `/diagnose/admin/diagnose/department/and/doctorList/${data.uid}`,
method: 'get',
});
};
import request from 'mn-template/plugins/http';
export const doctorListAnd = async (data) => {
return request({
url: '/diagnose/admin/diagnose/operate/and/doctorList',
data: data,
method: 'post',
});
};
export const doctorListRest = async (data) => {
return request({
url: `diagnose/admin/diagnose/reset/operate/doctorList/${data.uid}`,
method: 'get',
});
};
export const conditionUpdate = async (data) => {
return request({
url: '/diagnose/socket/condition/update',
......
......@@ -2,16 +2,26 @@
<div
class="consultationlist"
style="user-select: none"
@click="goworkBench"
>
<div class="list">
<div class="name">
{{ operatorsItem.name || '' }}
</div>
<div class="details">
<!-- <div class="handle">待处理: <span> 暂无</span></div> -->
<div
class="details"
@click="goSelectDeart"
>
<div class="see">
<span>查看详情</span>
<span>查看选择科室</span>
<i class="el-icon-arrow-right" />
</div>
</div>
<div
class="details"
@click="goworkBench"
>
<div class="see">
<span>待处理详情</span>
<i class="el-icon-arrow-right" />
</div>
</div>
......@@ -20,7 +30,7 @@
</template>
<script>
import { conditionUpdate } from '@/api/workbench';
// import { conditionUpdate } from '@/api/workbench';
export default {
props: {
......@@ -43,25 +53,35 @@
},
methods: {
goworkBench() {
const p = {
dateTime: this.workbenchAdminDate,
operateUserId: this.operatorsItem.id,
pageNo: 1,
pageSize: 6,
returnStatus: 1,
};
this.$store.commit('main/clearRawCurrentCalList');
conditionUpdate(p).then((res) => {
if (res.code == '000000') {
this.$store.commit('main/updateSoketQuest', p);
this.$router.push({ path: '/workbench' });
} else {
this.$message({
message: res.message,
type: 'warning',
duration: 1000,
// const p = {
// dateTime: this.workbenchAdminDate,
// operateUserId: this.operatorsItem.id,
// pageNo: 1,
// pageSize: 6,
// returnStatus: 1,
// };
// this.$store.commit('main/clearRawCurrentCalList');
// conditionUpdate(p).then((res) => {
// if (res.code == '000000') {
// this.$store.commit('main/updateSoketQuest', p);
// this.$router.push({ path: '/workbench-new' });
// } else {
// this.$message({
// message: res.message,
// type: 'warning',
// duration: 1000,
// });
// }
// });
this.$router.push({
path: '/workbench-new',
query: { type: 1, id: this.operatorsItem.id },
});
}
},
goSelectDeart() {
this.$router.push({
path: '/workbench-new',
query: { id: this.operatorsItem.id },
});
},
},
......@@ -81,10 +101,10 @@
.details {
width: 120px;
height: 40px;
background: rgba(68, 146, 132, 0.24);
background: rgba(0, 189, 165, 0.13);
border-radius: 20px;
opacity: 0.44;
border: 1px solid #449284;
// opacity: 0.44;
border: 1px solid rgba(0, 189, 165, 0.13);
display: flex;
justify-content: space-evenly;
align-items: center;
......@@ -107,7 +127,10 @@
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #6a7990;
color: #0d9078;
}
i {
color: rgba(13, 144, 120, 1);
}
}
}
......
......@@ -203,7 +203,8 @@ export default {
).toFixed(0);
if (hoursRound > 0 && minutesRound > 0) {
return hoursRound + '小时' + minutesRound + '分' + seconds + '秒';
// return hoursRound + '小时' + minutesRound + '分' + seconds + '秒';
return hoursRound + '小时';
}
if (hoursRound == 0 && minutesRound > 0) {
return minutesRound + '分钟';
......
<template>
<div class="depart-doctor">
<el-tabs
v-model="activeMoutendName"
@tab-click="handleClick"
>
<el-tab-pane
v-for="item in departDoctorList"
:key="item.departmentId"
:label="
item.department +
' ' +
item.checkDoctorIdListByDepartment.length +
'/' +
item.allNum
"
:name="item.departmentId"
>
<el-checkbox
v-model="item.checkAll"
:indeterminate="item.isIndeterminate"
:disabled="item.allDisabled"
@change="
(value) => {
handleCheckAllChange(value, item);
}
"
>
全选
</el-checkbox>
<div style="margin: 10px 0" />
<el-checkbox-group
v-model="item.checkDoctorIdListByDepartment"
@change="
(val) => {
handleCheckedCitiesChange(val, item);
}
"
>
<el-checkbox
v-for="itemChild in item.diagnoseOperateDoctorRespList"
:key="itemChild.doctorId"
:label="itemChild.doctorId"
:disabled="itemChild.disabled"
>
{{ itemChild.doctorName + ' ' }}{{ ' ' + itemChild.doctorId }}
</el-checkbox>
</el-checkbox-group>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
export default {
props: {
departDoctorList: {
type: Array,
default() {
return [];
},
},
activeMoutendName: {
type: String,
default() {
return '';
},
},
},
data() {
return {};
},
computed: {},
watch: {},
created() {},
mounted() {},
methods: {
handleClick(value) {
console.log(value, 'value');
},
handleCheckAllChange(value, item) {
let itemNameList = [];
if (value) {
itemNameList = (item.diagnoseOperateDoctorRespList || []).map(
(item) => {
return item.doctorId;
}
);
}
item.checkDoctorIdListByDepartment = value ? itemNameList : [];
item.isIndeterminate = false;
this.$emit('getDepartlist', this.departDoctorList);
},
/**
* checkbox状态 (根据绑定值 checkAll 与 isIndeterminate 联动)
* 半选:checkAll: true或者false,isIndeterminate:true
* 全选:checkAll:true isIndeterminate:false
* 不选:checkAll:false isIndeterminate:false
*/
handleCheckedCitiesChange(value, item) {
const checkedCount = value.length;
item.checkAll =
checkedCount === item.diagnoseOperateDoctorRespList.length;
if (
checkedCount > 0 &&
checkedCount < item.diagnoseOperateDoctorRespList.length
) {
item.isIndeterminate = true;
item.checkAll = true;
} else {
item.isIndeterminate = false;
}
this.$emit('getDepartlist', this.departDoctorList);
},
},
};
</script>
<style lang="scss" scoped></style>
<template>
<div class="inquiry-wrap">
<div class="line">
<div class="left">
<div>
{{ item.diagnoseLogId }}介迁&nbsp;
<span class="dep">{{ item.department }}内科</span>
</div>
</div>
<div class="right">
<div
class="right-status"
:class="{ grey: item.returnStatus >= 5, org: item.returnStatus == 1 }"
>
{{ returnStatusText }}333
</div>
</div>
</div>
<div class="tag-container">
<div class="talk">
<i
class="talk-icon"
:class="diagnoseTypeIcon"
/><span>{{ diagnoseType }}444</span>
</div>
<div class="time">
<i class="appointment" /><span>{{ appointBeginTime }}555</span>-<span>{{ appointEndTime }}666</span>
</div>
</div>
<div class="line mt30">
<div class="inquiry-user-container">
<div class="inquiry-user">
<div class="inquiry-user-l">
<div class="inquiry-user-img">
<div
v-if="
diagnoseTypeIcon == 'voice' &&
(item.returnStatus == 1 || item.returnStatus == 3) &&
doctorTrtcEntryStatus != 1
"
class="offline"
>
<img
:src="offline"
alt=""
>
</div>
<div class="avatar">
<el-avatar :src="item.doctorImageUrl" />
</div>
</div>
<div class="inquiry-user-info">
<div class="info-name-wrap">
<span class="info-name">
{{ item.doctorName }}
</span>
<span>接诊医生</span>
</div>
<div class="info-container">
<div class="info-phone">
{{ item.doctorMobile }}777
</div>
<div
v-if="item.doctorCallTime"
class="info-call-time"
>
{{ pastDoctorCallTime }}前呼叫
</div>
<div
v-if="doctorCallKfStatus == 1"
class="info-calling"
>
<img
:src="infocallImg"
alt=""
>
</div>
</div>
</div>
</div>
<div class="manual-call-status">
<div class="manual-dialing">
<img
:src="isManuacall ? manuacallIng : manuacall"
alt=""
@click="manualDialing(1)"
>
</div>
<div
v-if="diagnoseTypeIcon == 'voice' && doctorTrtcEntryStatus == 2"
class="call-status"
>
<img
v-if="isCall"
:src="isDoctorChat ? callouting : callout"
alt=""
@click="drivingCall(item.doctorId, 2)"
>
</div>
</div>
</div>
<div class="inquiry-user-status">
<span
:class="
doctorCallStatus === '已拨打完成'
? 'status-cll-user-finish'
: 'status-cll-user-answer'
"
>{{ doctorCallStatus }}</span>
</div>
<div
class="line-btn"
@click="openChat"
>
<span
v-if="userCallKfStatus == 1 || doctorCallKfStatus == 1"
>正在呼叫医助,进入诊室</span>
<span v-else>进入诊室</span>
</div>
</div>
<div class="inquiry-user-container">
<div class="inquiry-user">
<div class="inquiry-user-l">
<div class="inquiry-user-img">
<div
v-if="
diagnoseTypeIcon == 'voice' &&
(item.returnStatus == 1 || item.returnStatus == 3) &&
userTrtcEntryStatus != 1
"
class="offline"
>
<img
:src="offline"
alt=""
>
</div>
<div class="avatar">
<el-avatar :src="item.userImageUrl" />
</div>
</div>
<div class="inquiry-user-info">
<div class="info-name-wrap">
<span class="info-name">
{{ item.userName }}
</span>
<span>助诊医生</span>
</div>
<div class="info-container">
<div class="info-phone">
{{ item.userMobile }}
</div>
<div
v-if="item.userCallTime"
class="info-call-time"
>
{{ pastUserCallTime }}前呼叫
</div>
<div
v-if="userCallKfStatus == 1"
class="info-calling"
>
<img
:src="infocallImg"
alt=""
>
</div>
</div>
</div>
</div>
<div class="manual-call-status">
<div class="manual-dialing">
<img
:src="isManuacallType ? manuacallIng : manuacall"
alt=""
@click="manualDialing(2)"
>
</div>
<div
v-if="diagnoseTypeIcon == 'voice' && userTrtcEntryStatus == 2"
class="call-status"
>
<img
v-if="isCall"
:src="isUserChat ? callouting : callout"
alt=""
@click="drivingCall(item.userId, 1)"
>
</div>
</div>
</div>
<div class="inquiry-user-status">
<span
:class="
userCallStatus === '已拨打完成'
? 'status-cll-user-finish'
: 'status-cll-user-answer'
"
>{{ userCallStatus }}</span>
</div>
<div
class="line-btn"
@click="openAdvice"
>
诊断建议
<div
v-if="item.adviceStatus && item.adviceStatus == 2"
class="line-btn-tap"
>
未写
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import {
teamDetail,
callDirect,
doctorAdviceList,
manualCall,
} from '@/api/diagnosis';
import { createNamespacedHelpers } from 'vuex';
const { mapState } = createNamespacedHelpers('main');
export default {
props: {
item: {
type: Object,
default: () => {
return {};
},
},
},
data() {
return {
infocallImg: require('@/assets/image/workbench/calling.png'),
callout: require('@/assets/image/workbench/appremind.png'),
callouting: require('@/assets/image/workbench/remindalready.png'),
offline: require('@/assets/image/workbench/offline.png'),
manuacall: require('@/assets/image/workbench/maulcall.png'),
manuacallIng: require('@/assets/image/workbench/calling.gif'),
timer: null,
isChat: false,
isUserChat: false,
isDoctorChat: false,
isCall: false,
isManuacall: false,
isManuacallType: false,
accId: '',
};
},
computed: {
...mapState({
showChat: (state) => state.showChat,
showAdvice: (state) => state.showAdvice,
}),
doctorCallStatus() {
switch (this.item.doctorCallStatus) {
case 1:
return '未拨打';
case 2:
return '已拨打未接听';
case 3:
return '被挂断';
case 4:
return '已拨打完成';
default:
return '';
}
},
userCallStatus() {
switch (this.item.userCallStatus) {
case 1:
return '未拨打';
case 2:
return '已拨打未接听';
case 3:
return '被挂断';
case 4:
return '已拨打完成';
default:
return '';
}
},
diagnoseType() {
switch (this.item.diagnoseType) {
case 1:
return '语音问诊';
case 2:
return '视频问诊';
case 3:
return '图文问诊';
default:
return '';
}
},
diagnoseTypeIcon() {
switch (this.item.diagnoseType) {
case 1:
return 'voice';
case 2:
return 'voice';
case 3:
return 'photo';
default:
return 'photo';
}
},
returnStatusText() {
switch (this.item.returnStatus) {
case 1:
return '待处理';
case 2:
return '待问诊';
case 3:
return '问诊进行中';
case 4:
return '问诊已完成';
case 5:
return '已取消';
default:
return '暂无';
}
},
appointBeginTime() {
return new Date(this.item.appointBeginTime).format('yyyy-MM-dd hh:mm');
},
appointEndTime() {
return new Date(this.item.appointEndTime).format('hh:mm');
},
userCallTime() {
return new Date(this.item.userCallTime).format('hh:mm');
},
// 助诊呼叫状态
userCallKfStatus() {
return this.item.userCallKfStatus;
},
// 接诊呼叫状态
doctorCallKfStatus() {
return this.item.doctorCallKfStatus;
},
// 接诊 在线状态
doctorTrtcEntryStatus() {
return this.item.doctorTrtcEntryStatus;
},
// 助诊 在线状态
userTrtcEntryStatus() {
return this.item.userTrtcEntryStatus;
},
pastUserCallTime() {
if (this.item.userCallTime) {
return this.formatDateData(this.item.userCallTime);
} else {
return null;
}
},
doctorCallTime() {
return new Date(this.item.doctorCallTime).format('hh:mm');
},
pastDoctorCallTime() {
if (this.item.doctorCallTime) {
return this.formatDateData(this.item.doctorCallTime);
} else {
return null;
}
},
nowtime() {
return new Date().getTime() - this.item.appointBeginTime;
},
},
watch: {
item(newVal, oldVal) {
console.log(newVal, oldVal, 'newVal, oldVal');
if (newVal !== oldVal) {
if (newVal.doctorTrtcEntryStatus == 2) {
this.isDoctorChat = false;
}
if (newVal.userTrtcEntryStatus == 2) {
this.isUserChat = false;
}
if (newVal.doctorCallStatus !== oldVal.doctorCallStatus) {
this.isManuacall = false;
}
if (newVal.userCallStatus !== oldVal.userCallStatus) {
this.isManuacallType = false;
}
}
},
},
created() {},
mounted() {
if (this.item.returnStatus == 1 || this.item.returnStatus == 3) {
const nowData = new Date().getTime();
const timeleft = this.item.appointBeginTime - nowData;
if (timeleft < 120000 && nowData < this.item.appointEndTime) {
clearInterval(this.timer);
this.down();
} else {
this.isCall = true;
}
}
},
methods: {
manualDialing(type) {
this.$confirm('确认要电话通知该医生吗?', '提示', {
confirmButtonText: '电话通知',
cancelButtonText: '取消',
type: 'warning',
})
.then(() => {
let userMobilePhone = '';
let userId = '';
let doctorId = '';
let doctorMobilePhone = '';
if (type === 1) {
userMobilePhone = null;
userId = null;
doctorId = this.item.doctorId;
doctorMobilePhone = this.item.doctorMobile;
} else {
userMobilePhone = this.item.userMobile;
userId = this.item.userId;
doctorId = null;
doctorMobilePhone = null;
}
const params = {
diagnoseId: this.item.diagnoseLogId,
doctorId: doctorId,
doctorMobilePhone: doctorMobilePhone,
userId: userId,
userMobilePhone: userMobilePhone,
};
manualCall(params).then((res) => {
if (res.code === '000000') {
if (type === 1) {
this.isManuacall = true;
} else {
this.isManuacallType = true;
}
}
});
})
.catch(() => {
this.$message({
type: 'info',
message: '取消拨打电话',
});
});
},
formatDateData(time) {
const now_data = new Date().getTime();
const my_time = now_data - time;
const hours = my_time / 1000 / 60 / 60;
const hoursRound = Math.floor(hours);
const minutes = my_time / 1000 / 60 - 60 * hoursRound;
const minutesRound = Math.floor(minutes);
const seconds = (
my_time / 1000 -
60 * 60 * hoursRound -
60 * minutesRound
).toFixed(0);
if (hoursRound > 0 && minutesRound > 0) {
return hoursRound + '小时' + minutesRound + '分' + seconds + '秒';
}
if (hoursRound == 0 && minutesRound > 0) {
return minutesRound + '分';
}
if (hoursRound == 0 && minutesRound == 0) {
return seconds + '秒';
}
},
down() {
this.timer = setInterval(() => {
const nowData = new Date().getTime();
const timeleft = this.item.appointBeginTime - nowData;
if (timeleft < 120000 && nowData < this.item.appointEndTime) {
this.isCall = true;
clearInterval(this.timer);
}
}, 1000);
},
getInfo(id) {
return teamDetail({
tid: this.item.imTeamId,
})
.then((res) => {
if (res.code == '000000') {
const { memberList } = res.data;
console.log('---memberList', memberList);
if (memberList) {
const accId = memberList.filter((val) => {
return val.id == id;
});
return accId[0].accId;
}
}
})
.catch(() => {});
},
// 主动呼叫 roletype 1:助诊医生 2:接诊医生
drivingCall(id, roletype) {
if (roletype == 1 && this.isUserChat) {
return false;
}
if (roletype == 2 && this.isDoctorChat) {
return false;
}
this.getInfo(id).then((res) => {
const params = {
imAccId: res,
imTeamId: this.item.imTeamId,
liveRoomId: this.item.roomId,
};
callDirect(params).then((res) => {
if (res.code === '000000') {
if (roletype == 1) {
this.isUserChat = true;
} else {
this.isDoctorChat = true;
}
} else {
this.$message({
message: res.message,
type: 'warning',
});
}
});
});
},
openChat() {
if (this.showChat) {
this.$message({
message: '不可同时进入多个诊室,请先退出已进入的诊室,再试。',
type: 'warning',
duration: 1000,
});
return false;
}
const i = this.item;
this.$store.dispatch('main/gotoInquiry', i);
},
openAdvice() {
if (this.showAdvice) {
this.$message({
message: '不可同时打开多个诊断建议,请先退出已打开的诊断建议,再试。',
type: 'warning',
duration: 1000,
});
return false;
}
// const i = 11;
doctorAdviceList({
diagnoseLogId: this.item.diagnoseLogId,
})
.then((res) => {
if (res.code == '000000') {
this.$store.commit('main/updateShowAdvice', true);
this.$store.commit('main/updateCurrentAdvice', res.data);
} else {
this.$message({
message: res.message,
type: 'warning',
duration: 1000,
});
}
})
.catch((err) => {
console.log(err);
});
},
},
};
</script>
<style lang="scss" scoped>
.inquiry-wrap {
box-sizing: border-box;
margin-bottom: 10px;
padding: 20px 32px;
background: #ffffff;
border-radius: 18px;
user-select: none;
// min-width: 610px;
border: 1px solid #cccccc;
.line {
display: flex;
justify-content: space-between;
.left {
color: #02120f;
font-size: 28px;
.dep {
font-size: 20px;
}
}
.right {
.right-status {
color: #0d9078;
font-size: 14px;
}
.right-time {
margin-top: 5px;
color: #6a7990;
font-size: 12px;
}
.grey {
color: #6a7990;
}
.org {
color: #ff5e57;
}
}
.inquiry-user-container {
width: 49%;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.inquiry-user {
width: calc(100% - 10px);
display: flex;
justify-content: space-between;
margin-bottom: 10px;
padding: 0 5px;
.inquiry-user-l {
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
.inquiry-user-img {
display: flex;
flex-direction: column;
justify-content: center;
position: relative;
width: 40px;
height: 40px;
.offline {
position: absolute;
left: -4px;
top: -4px;
z-index: 10;
}
.avatar {
position: absolute;
left: 0;
top: 0;
background: #dddddd;
border-radius: 36px;
display: flex;
flex-direction: column;
justify-content: center;
}
}
.inquiry-user-info {
font-size: 14px;
margin-left: 15px;
display: flex;
flex-direction: column;
justify-content: center;
.info-name-wrap {
display: flex;
align-items: center;
}
.info-name {
display: inline-block;
max-width: 85px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 18px;
color: #02120f;
font-weight: bold;
}
.info-container {
display: flex;
justify-content: flex-start;
align-items: center;
flex-direction: row;
height: 25px;
line-height: 25px;
.info-phone {
color: #6a7990;
font-size: 16px;
}
.info-call-time {
color: #ff5e57;
}
.info-calling {
width: 15px;
height: 25px;
display: flex;
justify-content: center;
align-items: center;
img {
width: 15px;
height: 15px;
}
}
}
}
}
.manual-call-status {
display: flex;
.manual-dialing {
margin-right: 5px;
cursor: pointer;
img {
width: 27px;
height: 48px;
}
}
.call-status {
// width: 45px;
// height: 46px;
img {
cursor: pointer;
width: 27px;
height: 48px;
}
}
}
}
}
.inquiry-user-status {
width: calc(100% - 130px);
padding-bottom: 15px;
height: 38px;
.status-cll-user-answer {
background: rgba(255, 94, 87, 0.07);
border-radius: 10px;
border: 1px solid rgba(255, 94, 87, 0.15);
padding: 0 4px;
height: 20px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #ff5e57;
line-height: 20px;
margin-right: 6px;
}
.status-cll-user-finish {
background: rgba(0, 189, 165, 0.07);
border-radius: 10px;
border: 1px solid rgba(0, 189, 165, 0.17);
padding: 0 4px;
height: 20px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #0d9078;
line-height: 20px;
margin-right: 6px;
}
}
.line-btn {
cursor: pointer;
position: relative;
width: 100%;
height: 37px;
background: rgba(68, 146, 132, 0.09);
border-radius: 23px;
border: 1px solid rgba(68, 146, 132, 0.31);
text-align: center;
line-height: 37px;
color: #0d9078;
font-size: 14px;
font-weight: bold;
.line-btn-tap {
position: absolute;
top: -10px;
right: 20px;
width: 48px;
height: 20px;
background: #0d9078;
border-radius: 7px 7px 7px 0px;
font-size: 14px;
color: #ffffff;
line-height: 20px;
}
span {
font-weight: bold;
}
}
}
.tag-container {
display: flex;
justify-content: flex-start;
.talk {
margin-right: 5px;
width: 120px;
height: 24px;
line-height: 24px;
background: #f0f2f5;
border-radius: 23px;
font-size: 14px;
color: #6a7990;
display: flex;
justify-content: center;
align-items: center;
.talk-icon {
margin-right: 5px;
}
}
.time {
display: flex;
justify-content: center;
align-items: center;
width: 217px;
height: 24px;
line-height: 24px;
background: #f0f2f5;
border-radius: 23px;
font-size: 14px;
color: #6a7990;
}
}
.mt30 {
margin-top: 30px;
}
.mt20 {
margin-top: 20px;
}
.appointment {
width: 12px;
height: 12px;
display: inline-block;
background: url('../../assets/image/workbench/appointment.png') no-repeat;
background-size: cover;
margin-right: 5px;
}
.video {
width: 12px;
height: 12px;
display: inline-block;
background: url('../../assets/image/workbench/video.png') no-repeat;
background-size: cover;
}
.photo {
width: 12px;
height: 12px;
display: inline-block;
background: url('../../assets/image/workbench/photo.png') no-repeat;
background-size: cover;
}
.voice {
width: 12px;
height: 12px;
display: inline-block;
background: url('../../assets/image/workbench/voice.png') no-repeat;
background-size: cover;
}
}
</style>
......@@ -7,8 +7,11 @@
<el-breadcrumb-item>首页</el-breadcrumb-item>
<el-breadcrumb-item>我的工作台</el-breadcrumb-item>
</el-breadcrumb>
<el-row style="margin-top: 30px">
<el-col :span="12">
<el-row
style="margin-top: 30px; display: flex; alignitems: center"
class="row-col-show"
>
<el-col :span="8">
<div class="left">
<el-row
type="flex"
......@@ -18,7 +21,6 @@
<el-col :span="12">
<el-date-picker
v-model="workbenchAdminDate"
style="margin-top: 10px"
type="date"
value-format="yyyy-MM-dd"
placeholder="选择日期"
......@@ -27,6 +29,15 @@
</el-row>
</div>
</el-col>
<el-col :span="12">
<div class="right">
<span class="totalNumShow">累计汇总数</span>
<span class="callDoctorShow">呼叫医助次数</span>
<span class="callDoctorNum">389</span>
<span class="laterDoctorShow">接诊医生迟到人数</span>
<span class="laterDoctorNum">167</span>
</div>
</el-col>
</el-row>
</div>
<!-- 问诊列表 -->
......@@ -101,7 +112,6 @@
.header {
padding: 30px;
width: 100%;
background: #ffffff;
.el-input__inner {
width: 173px;
......@@ -110,6 +120,46 @@
border-radius: 7px;
border: 1px solid #d9d9d9;
}
.row-col-show {
.el-col-12 {
.right {
display: flex;
width: 70%;
align-items: center;
justify-content: space-around;
.totalNumShow {
font-size: 16px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #212121;
}
.callDoctorShow {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #666666;
}
.callDoctorNum {
font-size: 24px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #212121;
}
.laterDoctorShow {
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #666666;
}
.laterDoctorNum {
font-size: 24px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #212121;
}
}
}
}
}
.detailslist {
display: flex;
......
......@@ -20,6 +20,11 @@
v-for="(item, index) in adminList"
:key="index"
class="checkbox-item"
@change="
(val) => {
setResert(val, item);
}
"
>
<el-checkbox :label="item.id">
{{ item.name }}
......@@ -40,19 +45,48 @@
</el-button>
</div>
</div>
<el-dialog
:visible.sync="showIsReset"
width="30%"
>
<div class="show-info-title">
<p>将永久删除名下</p>
<p>所有的科室及上级医生</p>
</div>
<div
class="work-info-botton"
style="text-align: center"
>
<span
slot="footer"
class="dialog-footer"
style="text-align: center"
>
<el-button
class="cancel-submit"
@click="cancelResert"
>取 消</el-button>
<el-button
class="contest"
type="primary"
:disabled="isClick"
@click="confirmResert"
>确定</el-button>
</span>
</div>
</el-dialog>
</div>
</template>
<script>
import {
setDiagnoseMatch,
operatorQuery,
sumbitMatch
} from '@/api/operation';
import { setDiagnoseMatch, operatorQuery, sumbitMatch } from '@/api/operation';
import { doctorListRest } from '@/api/workbench';
export default {
data() {
return {
checklist: [],
adminList: [],
showIsReset: false,
operateId: '',
};
},
mounted() {
......@@ -60,6 +94,12 @@
this.getAdminList();
},
methods: {
setResert(value, item) {
if (this.checklist.indexOf(item.id) == -1) {
this.showIsReset = true;
this.operateId = item.id;
}
},
cancel() {
this.$confirm('取消后将不保存本次操作内容', '确认取消吗?', {
confirmButtonText: '确定',
......@@ -103,6 +143,19 @@
}
});
},
cancelResert() {
this.showIsReset = false;
},
confirmResert() {
const param = {
uid: this.operateId,
};
doctorListRest(param).then((res) => {
if (res.code == '000000') {
this.showIsReset = false;
}
});
},
},
};
</script>
......@@ -139,5 +192,31 @@
align-items: center;
}
}
.show-info-title {
text-align: center;
padding: 30px;
font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #02120f;
}
.dialog-footer {
.contest {
min-width: 160px;
height: 40px;
background: #0d9078;
border-radius: 20px;
}
.cancel-submit {
min-width: 160px;
height: 40px;
border-radius: 20px;
border: 1px solid #0d9078;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #0d9078;
}
}
}
</style>
......@@ -22,27 +22,33 @@
</div>
<div class="workbench-content">
<div
v-if="currentDiagList.length"
class="workbench-li-c"
v-if="tabPositionValue == 3"
class="workbench-li-depar"
>
<div class="grid-c">
<department-doctor
:depart-doctor-list="departDoctorList"
:active-moutend-name="activeMoutendName"
@getDepartlist="getDepartlist"
/>
</div>
<div
v-if="tabPositionValue == '3'"
class="grid-c"
class="depart-footer"
style="text-align: right"
>
<el-checkbox-group
v-model="checkedValues"
@change="handleCheckedCitiesChange"
<el-button
class="rest-depar"
@click="restDepartList"
>
<el-checkbox
v-for="item in cityOptions"
:key="item.id"
:label="item.value"
重置所有科室
</el-button>
<el-button
type="primary"
class="con-depar"
@click="confirmDoctorList"
>
{{ item.value }}
</el-checkbox>
</el-checkbox-group>
<div class="search-botton">
<el-button>确定</el-button>
确定
</el-button>
</div>
</div>
<div
......@@ -92,8 +98,7 @@
</div>
</div>
</div>
<div
<!-- <div
v-else
class="nodata-container"
>
......@@ -104,8 +109,37 @@
<div class="nodata-title">
暂时没有问诊
</div>
</div> -->
<el-dialog
:visible.sync="showIsReset"
width="30%"
>
<div class="show-info-title">
<p>将永久删除名下</p>
<p>所有的科室及上级医生</p>
</div>
<div
class="work-info-botton"
style="text-align: center"
>
<span
slot="footer"
class="dialog-footer"
style="text-align: center"
>
<el-button
class="cancel-submit"
@click="cancelResert"
>取 消</el-button>
<el-button
class="contest"
type="primary"
:disabled="isClick"
@click="confirmResert"
>确定</el-button>
</span>
</div>
</el-dialog>
</div>
</template>
<script>
......@@ -113,10 +147,15 @@
const { mapState } = createNamespacedHelpers('main');
import storejs from 'storejs';
import consultationCard from '@/components/common/consultationCard/index.vue';
import DepartmentDoctor from '../../../components/common/department-doctor.vue';
import { conditionNewList } from '@/api/workbench';
import { doctorListAnd, doctorListRest } from '@/api/workbench';
import { doctorDeparList } from '@/api/diagnosis';
import _ from 'lodash';
export default {
components: {
consultationCard,
DepartmentDoctor,
},
data() {
return {
......@@ -251,7 +290,51 @@
userName: '郑志猛',
userOnlineStatus: 3,
},
{
userLastCallTime: '',
doctorLastCallTime: '2021-12-02 20:05:01',
doctorOnlineStatus: 3,
adviceStatus: 2,
appointBeginTime: '2021-12-02 20:00:00',
appointEndTime: '2021-12-02 21:00:00',
department: '呼吸内科',
departmentId: 12,
diagnoseLogId: 3824,
diagnoseType: 1,
doctorCallKfStatus: 2,
doctorCallStatus: 1,
doctorCallTime: null,
doctorId: 1006276946,
doctorImageUrl:
'https://test-file.yunqueyi.com//image/png/2019/04/08/20190408101124702-0db0bcea.png',
doctorMobile: '15821297620',
doctorName: '朱建波',
doctorTrtcEntryStatus: 2,
imStatus: 1,
imTeamId: '3942066774',
operateUserId: 221,
returnStatus: 2,
roomId: '520001207',
sort: null,
status: null,
userCallKfStatus: 2,
userCallStatus: 1,
userCallTime: null,
userId: 1006276934,
userImageUrl:
'https://test-file.yunqueyi.com//image/png/2019/04/08/20190408101124702-0db0bcea.png',
userMobile: '13817741327',
userName: '郑志猛',
userOnlineStatus: 3,
},
],
departDoctorList: [],
newCheckList: [],
cancelCheckList: [],
checkDoctorIdList: [],
activeMoutendName: '',
operatId: '',
showIsReset: false,
};
},
computed: {
......@@ -264,6 +347,8 @@
watch: {},
created() {
console.log('currentDiagList---------------------', this.currentDiagList);
this.operatId = this.$route.query.id;
this.tabPositionValue = this.$route.query.type || '3';
},
mounted() {
const s = storejs.get('soketQuest');
......@@ -284,12 +369,94 @@
// that.isShowCardData = false;
that.initCard();
}, 0);
}, 5000);
}, 4000);
this.doctorDeparList();
},
destroyed() {
window.clearInterval(this.timer);
},
methods: {
doctorDeparList() {
const userInfo = storejs.get('initSocketInfo');
const { userId } = userInfo;
const param = {
uid: userId,
};
doctorDeparList(param).then((res) => {
if (res.code == '000000') {
this.checkDoctorIdList = res.data.checkDoctorIdList || [];
this.departDoctorList =
res.data.diagnoseOperateDepartmentRespList || [];
this.activeMoutendName = (res.data
.diagnoseOperateDepartmentRespList || [])[0].departmentId;
}
});
},
restDepartList() {
this.showIsReset = true;
},
cancelResert() {
this.showIsReset = false;
},
confirmResert() {
const userInfo = storejs.get('initSocketInfo');
const { userId } = userInfo;
const param = {
uid: this.operatId ? this.operatId : userId,
};
doctorListRest(param).then((res) => {
if (res.code == '000000') {
this.showIsReset = false;
this.doctorDeparList();
}
});
},
getDepartlist(allCheckList) {
const checkAllList = allCheckList.map((item) => {
return item.checkDoctorIdListByDepartment;
});
const checkListFlat = checkAllList.flat(Infinity);
// 取消医生IDlist
const cancelList = _.difference(this.checkDoctorIdList, checkListFlat);
// 新增的医生ID list
const newCkList = _.difference(checkListFlat, this.checkDoctorIdList);
const checkAllDoctorList = allCheckList.map((item) => {
return item.diagnoseOperateDoctorRespList;
});
const checkAllDoctorListFlat = checkAllDoctorList.flat(Infinity);
this.newCheckList = newCkList
.map((item) =>
checkAllDoctorListFlat.find(
(itemChild) => itemChild.doctorId === item
)
)
.filter((item) => item);
this.cancelCheckList = cancelList
.map((item) =>
checkAllDoctorListFlat.find(
(itemChild) => itemChild.doctorId === item
)
)
.filter((item) => item);
},
confirmDoctorList() {
const userInfo = storejs.get('initSocketInfo');
const { userId, userName } = userInfo;
console.log(userId, userName, 'userInfo');
const params = {
cancelDoctorIdList: this.cancelCheckList || [],
insertDoctorIdList: this.newCheckList || [],
operateUserId: userId,
operateUserName: userName,
};
doctorListAnd(params).then((res) => {
if (res.code == '000000') {
console.log(res);
this.doctorDeparList();
}
});
},
initCard() {
console.log(this.isShowCardData);
const parms = {
......@@ -301,7 +468,7 @@
conditionNewList(parms)
.then((res) => {
if (res.code === '000000') {
this.handleData(res.data);
this.handleData(res.data.length > 0 ? res.data : this.mockData);
} else {
this.$message({
message: res.message,
......@@ -317,12 +484,14 @@
});
},
handleData(data) {
console.log(data, 'data');
this.currentDiagList = [];
data.forEach((item, index) => {
// item.diagnoseLogId = '--' + Math.random() * 10;
item['definitionRandom'] = Math.random() * 10;
this.$set(this.currentDiagList, index, item);
});
console.log('this.currentDiagList', this.currentDiagList);
this.isShowCardData = true;
// this.$nextTick(() => {
// });
......@@ -499,6 +668,76 @@
}
}
}
.pagination-container {
background-color: #fff;
height: 71px;
background: #ffffff;
border-radius: 18px;
display: flex;
justify-content: flex-end;
align-items: center;
margin-top: 10px;
padding: 0 20px;
}
.workbench-li-depar {
padding: 20px 10px;
width: 100%;
.grid-c {
display: grid;
grid-row-gap: 20px;
grid-column-gap: 20px;
padding: 25px 30px;
background: #fff;
border-radius: 10px;
overflow-y: auto;
.el-checkbox-group {
.el-checkbox {
width: 20%;
padding: 8px;
}
}
.search-botton {
display: flex;
justify-content: flex-end;
margin-right: 150px;
.el-button {
width: 180px;
height: 40px;
background: #0d9078;
border-radius: 20px;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #ffffff;
}
}
.workbench-li {
margin: 0 auto;
width: 100%;
}
}
}
.depart-footer {
margin-top: 20px;
.rest-depar {
min-width: 160px;
height: 40px;
border-radius: 20px;
border: 1px solid #0d9078;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #0d9078;
}
.con-depar {
min-width: 160px;
height: 40px;
background: #0d9078;
border-radius: 20px;
}
}
}
.nodata-container {
background-color: #fff;
padding: 0 20px;
......@@ -523,17 +762,30 @@
margin-top: 50px;
}
}
.pagination-container {
background-color: #fff;
height: 71px;
background: #ffffff;
border-radius: 18px;
display: flex;
justify-content: flex-end;
align-items: center;
margin-top: 10px;
padding: 0 20px;
.show-info-title {
text-align: center;
padding: 30px;
font-size: 18px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 500;
color: #02120f;
}
.dialog-footer {
.contest {
min-width: 160px;
height: 40px;
background: #0d9078;
border-radius: 20px;
}
.cancel-submit {
min-width: 160px;
height: 40px;
border-radius: 20px;
border: 1px solid #0d9078;
font-size: 14px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #0d9078;
}
}
}
......
......@@ -76,15 +76,17 @@
getNav() {
menuList({ systemType: this.systemType }).then((res) => {
if (res.code == '000000') {
const { vueMenuDtos, userId } = res.data;
const { vueMenuDtos, userId, userName } = res.data;
const i = {
isSuper: false,
userID: userId,
};
const u = this.getSocketUrl('test');
console.log(BUILD_ENV);
// u.url = 'https://test1-sockets.yunqueyi.com';
storejs.set('initSocketInfo', { url: u, userId: userId });
const u = this.getSocketUrl(BUILD_ENV);
storejs.set('initSocketInfo', {
url: u,
userId: userId,
userName: userName,
});
this.$store.dispatch('socket/initSocket', { url: u, userId: userId });
vueMenuDtos.map((item) => {
if (item.index.indexOf('administrators') > -1) {
......@@ -183,8 +185,6 @@
color: #fff;
background: #06232c;
}
}
}
</style>
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册