提交 b4848d8a 编写于 作者: qian.jie's avatar qian.jie

工作站显示

Merge branch 'develop' of 192.168.110.53:com.pica.cloud.education.frontend/pica-admin-consultation into feature/jq
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
此差异已折叠。
import request from 'mn-template/plugins/http'; import request from 'mn-template/plugins/http';
export const conditionUpdate = async(data) => {
return request({
url: '/diagnose/socket/condition/update',
data: data,
method: 'post',
});
};
export const doctorListAnd = async(data) => { export const doctorListAnd = async(data) => {
return request({ return request({
...@@ -20,4 +13,45 @@ export const doctorListRest = async (data) => { ...@@ -20,4 +13,45 @@ export const doctorListRest = async (data) => {
url: `diagnose/admin/diagnose/reset/operate/doctorList/${data.uid}`, url: `diagnose/admin/diagnose/reset/operate/doctorList/${data.uid}`,
method: 'get', method: 'get',
}); });
}; };
\ No newline at end of file export const conditionUpdate = async (data) => {
return request({
url: '/diagnose/socket/condition/update',
data: data,
method: 'post',
});
};
// 轮循 获取卡边正常信息和异常信息
export const conditionNewList = async (data) => {
return request({
url: '/diagnose/admin/diagnose/operator/newList',
data: data,
method: 'post',
});
};
// 诊断建议
export const doctorAdviceList = async (data) => {
return request({
url: `/diagnose/admin/diagnose/doctorAdvice/list/${data.diagnoseLogId}`,
method: 'get',
});
};
// 手动呼叫
export const manualCall = async (data) => {
return request({
url: '/diagnose/admin/diagnose/manual/call',
data: data,
method: 'post',
});
};
// 查询当前上级医生下排队的信息
export const waitPersonNum = async (doctorId) => {
return request({
url: `/admin/diagnose/queueList/${doctorId}`,
method: 'post',
});
};
此差异已折叠。
.inquiry-wrap {
box-sizing: border-box;
margin-bottom: 10px;
padding: 20px;
background: #ffffff;
border-radius: 18px;
user-select: none;
position: relative;
.line {
display: flex;
justify-content: space-between;
font-size: 14px;
color: #999999;
.left {
.time {
color: #ff5e57;
font-size: 18px;
margin-top: 3px;
}
}
.right {
margin-left: 23px;
.orderno {
display: flex;
align-items: center;
margin-top: 3px;
.num {
font-size: 18px;
color: #02120f;
}
.copy {
font-size: 12px;
margin-left: 16px;
padding: 0 5px;
border: 1px solid #d9d9d9;
border-radius: 15px;
color: #212121;
}
}
.grey {
color: #6a7990;
}
.org {
color: #ff5e57;
}
}
.superior-doctor {
width: 49%;
display: flex;
justify-content: flex-start;
align-items: flex-start;
.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: 6px;
.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 {
align-items: center;
flex-direction: row;
height: auto;
line-height: 30px;
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;
}
}
}
}
.basic-doctor {
width: 49%;
display: flex;
justify-content: flex-start;
.basic-user-img,
.basic-user-info {
padding-right: 6px;
.info-name-wrap {
display: flex;
align-items: center;
justify-content: space-between;
.info-name {
max-width: 85px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
font-size: 18px;
color: #02120f;
font-weight: bold;
}
}
.info-container {
align-items: center;
flex-direction: row;
height: auto;
line-height: 30px;
line-height: 25px;
.info-phone {
color: #666;
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;
}
}
}
}
}
.no-info {
width: 100%;
height: auto;
color: #ff5e57;
}
.inquiry-user-status {
width: 100%;
padding: 4px 0;
height: auto;
overflow: hidden;
.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: 45%;
height: 35px;
background: rgba(68, 146, 132, 0.09);
border-radius: 23px;
text-align: center;
line-height: 35px;
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;
}
}
.line-btn-enter {
background: #0d9078;
color: #fff;
.call-box {
display: flex;
align-items: center;
justify-content: center;
text-align: center;
img {
margin-right: 14px;
}
}
}
.isManuacall {
background: #ff5e57;
}
.noIsCall {
background: #0d9078;
}
}
.mt30 {
margin-top: 30px;
}
.line-second {
margin-top: 13px;
justify-content: flex-start;
align-items: center;
}
.mt20 {
margin-top: 20px;
}
.line-position {
position: absolute;
top: 96%;
left: 0;
width: 100%;
height: auto;
background: #fff;
.wait {
display: flex;
margin: 0px 20px;
font-size: 14px;
justify-content: space-between;
border-bottom: 1px solid #e9e9e9;
.wait-info {
display: flex;
height: 40px;
align-items: center;
.header {
width: 20px;
height: 20px;
img {
width: 100%;
height: auto;
}
}
.name {
color: #02120f;
padding-left: 5px;
line-height: 16px;
}
.connect {
color: #ff5e57;
margin-left: 5px;
}
.order {
color: #999999;
span {
color: #212121;
}
}
}
&:last-of-type {
border-bottom: none;
}
}
}
.wait-person {
width: 300px;
height: auto;
display: flex;
}
}
<template>
<div class="inquiry-wrap">
<div class="line">
<!--上级医生头信息 -->
<div class="superior-doctor">
<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>&nbsp;&nbsp; {{ item.department }}</span>
</div>
<ul class="info-container">
<li class="info-phone">
{{ item.doctorMobile }}
</li>
<li class="inquiry-user-status">
<!-- 只有-->
<span
:class="
doctorCallStatus === '已拨打完成'
? 'status-cll-user-finish'
: 'status-cll-user-answer'
"
>{{ doctorCallStatus }}</span>
<span
v-if="doctorCallKfStatus == 1"
class="status-cll-user-answer"
>正在呼叫</span>
<span
v-else
class="status-cll-user-answer"
> 未呼叫</span>
</li>
</ul>
</div>
</div>
<!-- 助诊医生头信息 -->
<div
v-if="item.userId"
class="basic-doctor"
>
<ul class="basic-user-img">
<li
v-if="
diagnoseTypeIcon == 'voice' &&
(item.returnStatus == 1 || item.returnStatus == 3) &&
userTrtcEntryStatus != 1
"
class="offline"
>
<img
:src="offline"
alt=""
>
</li>
<li class="avatar">
<el-avatar :src="item.userImageUrl" />
</li>
</ul>
<ul class="basic-user-info">
<li class="info-name-wrap">
<span class="info-name">
{{ item.userName }}
</span>
<span> &nbsp;助诊医生</span>
</li>
<li class="info-container">
<div class="info-phone">
{{ item.userMobile }}
</div>
<div
v-if="userCallKfStatus == 1"
class="info-calling"
>
呼叫中
</div>
</li>
<li class="inquiry-user-status">
<span
:class="
userCallStatus === '已拨打完成'
? 'status-cll-user-finish'
: 'status-cll-user-answer'
"
>{{ userCallStatus }}</span>
</li>
</ul>
</div>
<!-- 未开始接诊 或停止接诊-->
<div
v-else
class="no-info"
>
<div
v-if="item.acceptStatus == 4"
class="doctor-late"
>
未开始接诊
</div>
<div
v-if="item.acceptStatus == 1"
class="doctor-stop"
>
暂停接诊
</div>
</div>
</div>
<!-- 预约时间,复制单号 -->
<div class="line line-second">
<div class="left">
<div>预约时间</div>
<div
v-if="appointBeginTime && appointEndTime"
class="time"
>
<span>{{ appointBeginTime }}</span> -
<span>{{ appointEndTime }}</span>
</div>
<div
v-else
class="time"
>
</div>
</div>
<div class="right">
<div>问诊单号</div>
<ul class="orderno">
<li class="num">
{{ item.diagnoseLogId || '空' }}
</li>
<li
v-if="item.diagnoseLogId"
class="copy"
@click="copyDiagnoseLogId"
>
复制
</li>
</ul>
</div>
</div>
<!-- 当前排队 -->
<div class="line mt30 line-last">
<div
class="line-btn"
@click="waitPersonFun"
>
<div>
当前排队{{ item.queueCount || '0' }}<i
class="el-icon-arrow-down el-icon--right"
/>
</div>
</div>
<div
class="line-btn line-btn-enter"
:class="{ isManuacall: isManuacall, noIsCall: !isManuacall }"
@click="openChat"
>
<div
v-if="doctorCallKfStatus == 1"
class="call-box"
>
<img
:src="callImg"
alt="call"
>
电话呼叫中
<!-- manuacallIng 正在拨打 isManuacall ? manuacallIng : manuacall-->
</div>
<div
v-else
class="call-box"
@click="manualDialing(1)"
>
<img
:src="callImg"
alt="call"
>
电话呼叫
</div>
</div>
</div>
<!-- 排队详细 -->
<div
v-if="isShowWait"
class="line-position"
>
<ul
v-for="(item, index) in waitPersonList"
:key="index"
class="wait"
>
<li class="wait-info">
<div class="header">
<img
:src="item.userImageUrl"
alt="headImg"
>
</div>
<div class="name">
{{ item.userName }}
</div>
<div
v-if="item.failCount"
class="connect"
>
连接失败 {{ item.failCount }}
</div>
</li>
<li class="wait-info">
<div class="order">
问诊单号 <span>{{ item.diagnoseLogId || '空' }}</span>
</div>
</li>
</ul>
</div>
</div>
</template>
<script>
import index from './index';
export default index;
</script>
<style lang="scss" scoped>
@import 'index';
</style>
<template>
<div>
<div
ref="agmentSelect"
class="serviceSchedule_select"
>
<el-cascader
ref="cascader"
v-model="departmentId"
filterable
clearable
class="serviceSchedule-cascader"
:options="allTilst"
placeholder="选择科室"
:show-all-levels="false"
@change="changeDepartment"
>
<template slot-scope="{ data }">
<span :style="{ fontSize: '15px', color: '#606266' }">{{
data.label
}}</span>
<span
:style="{
fontSize: '10px',
color: '#606266',
marginLeft: '10px',
opacity: '0.7',
}"
>{{ data.text }}</span>
</template>
</el-cascader>
</div>
</div>
</template>
<script>
import { departmentAll } from '@/api/diagnosis';
import {
previewWork,
} from '@/api/serviceSchedule';
export default {
name: 'Index',
components: {
},
data() {
return {
maxDiaNum: 10,
dateTime: '',
interfaceOptions: [],
innerform: [],
props: {
// props定义的值根据接口返回的数据定的
label: 'value',
value: 'no',
children: 'interface',
},
departmentId: '',
allTilst: [],
allList: {},
};
},
watch: {},
created() {
this.departmentAll();
},
mounted() {},
methods: {
getInputNumber(value) {
console.log(value, 'getInputNumbergetInputNumber');
},
departmentAll() {
departmentAll().then((res) => {
if (res.code == '000000') {
console.log(res, 'res111');
this.allList = res.data || {};
this.showListALL();
}
});
},
showListALL() {
const arr = [];
const { departmentMapList, parentDepartmentList } = this.allList;
parentDepartmentList.map((item) => {
const obj = {
label: item.departmentName,
value: item.departmentId,
children: [],
};
departmentMapList.map((info) => {
if (info.parentDepartmentId === obj.value) {
const children = [];
info.diagnoseDepartmentRespList.map((detail) => {
const secondObj = {
label: detail.departmentName,
value: detail.departmentId,
text: '',
};
let secondChildren = '';
(detail.departmentDeseaseRespList || []).map((res) => {
secondChildren += res.deseaseName + ' ';
});
secondObj.text = secondChildren ? `(${secondChildren})` : '';
children.push(secondObj);
});
obj.children = children;
}
});
arr.push(obj);
});
console.log(arr);
this.allTilst = arr;
},
// 获取选择的值
changeDepartment() {
const checkedNodes = this.$refs['cascader'].getCheckedNodes();
if (checkedNodes.length > 0) {
this.departmentId = checkedNodes[0].value;
this.$emit('select-department', this.departmentId);
console.log(this.departmentId);
} else {
this.departmentId = '';
}
},
getNowDate(value) {
this.dateTime = value;
},
search() {
if (!this.dateTime || !this.departmentId) {
return this.$message({
message: '科室和时间都需要选择哦!',
type: 'warning',
});
}
const params = {
dateTime: this.dateTime,
departmentId: this.departmentId,
};
previewWork({ ...params }).then((res) => {
if (res.code === '000000' && res.data) {
this.calendarOptions.resources = (res.data.doctorList || []).map(
(item) => {
return {
id: item.doctorId,
title: item.doctorName,
};
}
);
const dutyRosterPreList = (res.data.dutyRosterPreList || []).map(
(item, index) => {
return {
id: index,
resourceId: item.doctorId,
end: item.endTime,
start: item.startTime,
color: '#FFEDE9',
};
}
);
const dutyWorkList = (res.data.dutyWorkList || []).map(
(item, index) => {
return {
id: index,
resourceId: item.doctorId,
end: item.endTime,
start: item.startTime,
color: '#E7F4F5',
};
}
);
if (res.data) {
this.calendarOptions.events = [].concat(
dutyRosterPreList,
dutyWorkList
);
}
const calendarApi = this.$refs.fullCalendar.getApi();
this.getWidth = `${
(this.calendarOptions.resources.length + 1) * 150
}px`;
this.getMaxWidth = `${
this.calendarOptions.resources.length * 150 + 100
}px`;
calendarApi.gotoDate(this.dateTime);
console.log(this.calendarOptions.resources);
console.log(this.calendarOptions.events);
} else {
this.calendarOptions.events = [];
this.calendarOptions.resources = [];
}
});
},
},
};
</script>
<style lang="scss">
.serviceSchedule-cascader {
.el-input {
.el-input__inner {
width: 183px;
height: 41px;
background: #ffffff;
border-radius: 7px;
border: 1px solid #D9D9D9;
}
.el-input__suffix {
display: flex;
align-items: center;
}
}
input::-webkit-input-placeholder {
color: #89888b;
}
}
.serviceSchedule_dateTime {
.el-input__inner {
// width: 150px;
height: 32px;
background: #ffffff;
border-radius: 16px;
border: 1px solid rgba(0, 0, 0, 0.15);
}
.el-input__icon {
display: flex;
align-items: center;
}
input::-webkit-input-placeholder {
color: #89888b;
}
}
</style>
...@@ -295,7 +295,7 @@ ...@@ -295,7 +295,7 @@
font-weight: 400; font-weight: 400;
color: #666666; color: #666666;
border-radius: 9px; border-radius: 9px;
border: 1px solid #D9D9D9; border: 1px solid #d9d9d9;
margin-right: 8px; margin-right: 8px;
} }
.info-phone { .info-phone {
......
...@@ -391,7 +391,6 @@ ...@@ -391,7 +391,6 @@
} }
}, },
}, },
created() {}, created() {},
mounted() { mounted() {
if (this.item.returnStatus == 1 || this.item.returnStatus == 3) { if (this.item.returnStatus == 1 || this.item.returnStatus == 3) {
...@@ -405,7 +404,6 @@ ...@@ -405,7 +404,6 @@
} }
} }
}, },
methods: { methods: {
manualDialing(type) { manualDialing(type) {
this.$confirm('确认要电话通知该医生吗?', '提示', { this.$confirm('确认要电话通知该医生吗?', '提示', {
...@@ -579,7 +577,6 @@ ...@@ -579,7 +577,6 @@
}, },
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.inquiry-wrap { .inquiry-wrap {
box-sizing: border-box; box-sizing: border-box;
......
const roundCard = {
namespaced: true,
state: {
socketClient: null,
},
actions: {
initCard(context, payload) {
const { rootState } = context;
console.log(context, payload, 'context, payload111', rootState);
// const { list, allSize, countRespList } = socket;
// console.log('-rootState', rootState, socket);
// const { currentTabStatus } = rootState.main;
// context.commit('main/updateCurrentCalList', countRespList, {
// root: true,
// });
// context.commit('main/updateAllSize', allSize, { root: true });
// if (list) {
// const l = list[0] || [];
// if (currentTabStatus == 99) {
// context.commit('main/updateCurrentDiagList', list, { root: true });
// } else {
// if (currentTabStatus == l.returnStatus) {
// context.commit('main/updateCurrentDiagList', list, {
// root: true,
// });
// }
// if (l.length == 0) {
// context.commit('main/updateCurrentDiagList', list, {
// root: true,
// });
// }
// }
// } else {
// context.commit('main/updateCurrentDiagList', [], { root: true });
// }
},
},
mutations: {
},
};
export default roundCard;
...@@ -7,6 +7,7 @@ const socket = { ...@@ -7,6 +7,7 @@ const socket = {
actions: { actions: {
initSocket(context, payload) { initSocket(context, payload) {
const { rootState } = context; const { rootState } = context;
console.log(context, payload, 'context, payload111');
const socketClient = io.connect(payload.url, { const socketClient = io.connect(payload.url, {
query: { query: {
loginUserNum: `diagnose_list_socket_${payload.userId}`, loginUserNum: `diagnose_list_socket_${payload.userId}`,
...@@ -54,6 +55,11 @@ const socket = { ...@@ -54,6 +55,11 @@ const socket = {
} }
}); });
socketClient.on('diagnose_call_push_event', (socket) => { socketClient.on('diagnose_call_push_event', (socket) => {
console.log(
socket,
'socketsocket',
window._VM.$store.state.main.soketQuest
);
const l = window._VM.$store.state.main.noticeList; const l = window._VM.$store.state.main.noticeList;
if (l.length >= 5) { if (l.length >= 5) {
l.shift(); l.shift();
......
...@@ -124,9 +124,9 @@ ...@@ -124,9 +124,9 @@
.show-work-set { .show-work-set {
margin-top: 100px; margin-top: 100px;
} }
.maxNum-first-show{ .maxNum-first-show {
margin-top: 20px; margin-top: 20px;
.show-sep-num{ .show-sep-num {
color: red; color: red;
} }
} }
......
...@@ -51,7 +51,6 @@ ...@@ -51,7 +51,6 @@
</div> </div>
</div> </div>
</div> </div>
<div <div
v-else v-else
class="nodata-container" class="nodata-container"
...@@ -82,7 +81,6 @@ ...@@ -82,7 +81,6 @@
</div> </div>
</div> </div>
</template> </template>
<script> <script>
import { createNamespacedHelpers } from 'vuex'; import { createNamespacedHelpers } from 'vuex';
const { mapState } = createNamespacedHelpers('main'); const { mapState } = createNamespacedHelpers('main');
......
...@@ -71,7 +71,7 @@ module.exports = { ...@@ -71,7 +71,7 @@ module.exports = {
port: 8080, port: 8080,
proxy: { proxy: {
'/proxy': { '/proxy': {
target: 'https://dev-sc.yunqueyi.com/', target: 'https://test1-sc.yunqueyi.com/',
ws: false, ws: false,
changeOrigin: true, changeOrigin: true,
secure: true, secure: true,
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册