提交 7dd7016a 编写于 作者: xinglee23's avatar xinglee23

feat: 新增小程序后台诊室跳转路径

......@@ -17,4 +17,4 @@ VUE_APP_IS_LOCAL=true
VUE_APP_APPID=wxf4e66242d31c81c2
#本地token
VUE_APP_TOKEN=26D1BA0C935C4C92BB5BB33EF61D4AD9
VUE_APP_TOKEN=E214A2D6B40345F98DE538DA793CF918
......@@ -96,7 +96,7 @@ export const getCountQuery = async (params) => {
return request({
url: '/diagnose/admin/diagnose/countQuery',
method: 'post',
data: params
data: params,
});
};
......@@ -331,3 +331,17 @@ export const savePCDayCount = async (data) => {
method: 'post',
});
};
export const personnelList = async () => {
return request({
url: '/contents/admin/homepage/floor/personnelList',
method: 'get',
});
};
// 根据订单id获取群ID和群用户名
export const getUserIdByDiagnoseLogId = async (diagnoseLogId) => {
return request({
url: `/admin/diagnose/team/${diagnoseLogId}`,
method: 'get',
});
};
......@@ -77,7 +77,7 @@
<span>未选定医生</span>
</div>
<div class="work-info-Num">
<div v-if="diagnoseType != 4">
<div v-if="diagnoseType != 4 && formData.diagnoseChannel != 3">
<span
class="work-info-Num-span"
>可选排班时间(预约已满需要沟通确定时间)</span>
......@@ -194,6 +194,10 @@
return {};
},
},
diagnoseChannel: {
type: Number,
default: 0,
},
},
data() {
return {
......@@ -218,7 +222,7 @@
receptionBeginTime: '',
receptionEndTime: '',
bizType: '',
diagnoseChannel: 1,
diagnoseChannel: null,
doctorDepartmentId: '',
},
doctorList: [],
......@@ -291,6 +295,7 @@
) {
this.refreshData();
}
this.formData.diagnoseChannel = !this.diagnoseChannel ? 1 : this.diagnoseChannel;
},
methods: {
getChooseTimeValue(value, index) {
......@@ -326,7 +331,6 @@
});
},
confirm() {
console.log(this.startTime, 'starrrr');
if (this.formData.receptionName == '') {
this.$message({
message: '请先选择接诊医生',
......@@ -335,7 +339,7 @@
});
return false;
}
if (this.startTime == '' && this.diagnoseType != 4) {
if (this.startTime == '' && this.diagnoseType != 4 && this.formData.diagnoseChannel != 3) {
this.$message({
message: '请选择排班时间',
type: 'warning',
......@@ -409,7 +413,6 @@
doctorChanged(value) {
const selected = this.doctorList.find((item) => item.doctorId === value);
if (selected) {
console.log(selected, 'selected');
this.formData.receptionId = value;
this.formData.receptionName = selected.doctorName;
this.formData.doctorTitle = selected.doctorTitle;
......
<template>
<div>
<el-upload
:action="actionurl"
action="#"
:headers="headers"
:disabled="isDisable"
list-type="picture-card"
......@@ -12,6 +12,7 @@
:on-exceed="handleExceed"
:file-list="imgArr"
:accept="accept"
:before-upload="beforeUploadFile"
>
<i class="el-icon-plus" />
</el-upload>
......@@ -26,7 +27,10 @@
</template>
<script>
import { getBaseUrl } from '@/utils/index';
import { doUpload, getFilePath } from '@/utils/qiniu-util';
import { openLoading, closeLoading } from '@/utils/utils';
let _this = null;
export default {
props: {
isDisable: {
......@@ -48,17 +52,20 @@
headers: {
token: localStorage.getItem('token'),
},
actionurl: '#',
accept: '.png,.jpeg',
accept: 'image/png,image/jpeg,image/jpg',
};
},
watch: {
imgList(newv) {
this.imgArr = newv;
const newImageList = newv?.filter(item => {
const videoUrl = item?.url.endsWith('.jpeg') || item?.url.endsWith('.png') || item?.url.endsWith('.jpg');
if(videoUrl) return item;
});
this.imgArr = newImageList;
},
},
created() {
this.actionurl = getBaseUrl('/diagnose/illness/file');
_this = this;
},
methods: {
handleRemove(file, fileList) {
......@@ -85,15 +92,34 @@
const newArr = [];
if (this.imgArr && this.imgArr.length) {
this.imgArr.forEach((item) => {
if (item.response) {
newArr.push(item.response.data);
} else if (item.url && item.from) {
if (item.url && item.status === 'success') {
newArr.push(item.url);
}
});
}
return newArr;
},
beforeUploadFile(file) {
openLoading(_this);
doUpload(
_this,
file,
getFilePath(file, null),
null,
null,
1
).then(function(res) {
closeLoading(_this);
const fileItem = {
name: res.name,
size: res.size,
status: 'success',
url: res.fullPath
};
_this.imgArr.push(fileItem);
_this.$message.success('上传成功');
});
},
},
};
</script>
......
......@@ -7,7 +7,7 @@
class="upload-demo"
:disabled="isDisable"
:before-upload="beforeMusicUpload"
:action="actionurl"
action="#"
:headers="headers"
:on-remove="handleRemove"
:on-success="sucess"
......@@ -26,7 +26,7 @@
slot="tip"
class="el-upload__tip"
>
音频格式:mp3
音频格式:mp3、mp4
</p>
<ul
slot="tip"
......@@ -48,7 +48,9 @@
</template>
<script>
import { getBaseUrl } from '@/utils/index';
import { doUpload, getFilePath } from '@/utils/qiniu-util';
import { openLoading, closeLoading } from '@/utils/utils';
let _this = null;
export default {
props: {
isDisable: {
......@@ -67,24 +69,28 @@
dialogImageUrl: '',
dialogVisible: false,
musicArr: [],
actionUrl: '',
headers: {
token: localStorage.getItem('token'),
},
loading: false,
accept: '.mp3,.mpeg',
accept: '.mp3,.mpeg,.mp4',
};
},
watch: {
musicList(newv) {
console.log(newv);
this.musicArr = newv || [];
const newVideoList = newv?.filter(item => {
const suffixUrl = item?.url.substring(item?.url.lastIndexOf('/') + 1); // 接口不返回name,上传数据列表名称展示为截取url最后“/”后面的内容
item.name = suffixUrl;
return item;
});
this.musicArr = newVideoList || [];
},
},
created() {
_this = this;
this.musicArr = this.musicList;
console.log(console.log('this.musicList', this.musicArr));
this.actionurl = getBaseUrl('/diagnose/illness/audio/upload');
},
methods: {
musicUrl(item) {
......@@ -114,14 +120,32 @@
this.loading = false;
},
// 上传mp3
beforeMusicUpload() {},
beforeMusicUpload(file) {
openLoading(_this);
doUpload(
_this,
file,
getFilePath(file, null),
null,
null,
''
).then(function(res) {
closeLoading(_this);
const fileItem = {
name: res.name ? res.name : res.fullPath,
size: res.size,
status: 'success',
url: res.fullPath
};
_this.musicArr.push(fileItem);
_this.$message.success('上传成功');
});
},
setNewArr() {
const newArr = [];
if (this.musicArr && this.musicArr.length) {
this.musicArr.forEach((item) => {
if (item.data) {
newArr.push(item.data.domainPath + item.data.path);
} else if (item.url && item.from) {
if (item.url && item.status === 'success') {
newArr.push(item.url);
}
});
......
<template>
<div class="upload">
<el-upload
action="#"
:headers="headers"
:disabled="isDisable"
:on-remove="handleRemove"
:on-success="sucess"
:on-exceed="handleExceed"
:file-list="imgArr"
accept="video/mp4"
:limit="15"
:before-upload="beforeUploadFile"
multiple
>
<el-button
size="small"
type="primary"
>
点击上传
</el-button>
</el-upload>
<div class="upload-main">
<video
v-for="(value, index) in imgArr"
:key="index"
:src="value.url"
class="upload-main__video"
controls
preload
/>
</div>
</div>
</template>
<script>
import { doUpload, getFilePath } from '@/utils/qiniu-util';
import { openLoading, closeLoading } from '@/utils/utils';
let _this = null;
export default {
props: {
isDisable: {
type: Boolean,
default: false,
},
imgList: {
type: Array,
default: () => {
return [];
},
},
},
data() {
return {
dialogImageUrl: '',
imgArr: [],
headers: {
token: localStorage.getItem('token'),
},
};
},
watch: {
imgList(newv) {
const newVideoList = newv?.filter(item => {
const videoUrl = item?.url.endsWith('.mp4');
if(videoUrl) {
const suffixUrl = item?.url.substring(item?.url.lastIndexOf('/') + 1); // 接口不返回name,上传数据列表名称展示为截取url最后“/”后面的内容
item.name = suffixUrl;
return item;
}
});
this.imgArr = newVideoList;
},
},
created() {
_this = this;
},
methods: {
handleRemove(file, fileList) {
console.log(file);
this.imgArr = fileList;
},
handleExceed(files, fileList) {
this.$message.warning(
`当前限制选择 3 个文件,本次选择了 ${files.length} 个文件,共选择了 ${
files.length + fileList.length
} 个文件`
);
},
sucess(response, file, fileList) {
console.log(response);
console.log(file);
this.imgArr = fileList;
},
setNewArr() {
const newArr = [];
if (this.imgArr && this.imgArr.length) {
this.imgArr.forEach((item) => {
if (item.url && item.status === 'success') {
newArr.push(item.url);
}
});
}
return newArr;
},
beforeUploadFile(file) {
openLoading(_this);
doUpload(
_this,
file,
getFilePath(file, null),
null,
null,
''
).then(function(res) {
closeLoading(_this);
const fileItem = {
name: res.name ? res.name : res.fullPath,
size: res.size,
status: 'success',
url: res.fullPath
};
_this.imgArr.push(fileItem);
_this.$message.success('上传成功');
});
}
},
};
</script>
<style lang="scss" scoped>
.upload {
&-main {
overflow-y: scroll;
&__video {
margin-top: 5px;
margin-right: 25px;
width: 200px;
height: 200px;
object-fit: fill;
}
}
}
/* 隐藏滚动条 */
::-webkit-scrollbar {
display: none;
}
</style>
......@@ -29,12 +29,16 @@
:label="item.label"
:show-overflow-tooltip="item.showtooltip"
:sortable="
item.prop == 'appointBeginTime' || item.prop == 'assistantBeginTime'
item.prop == 'appointBeginTime' ||
item.prop == 'assistantBeginTime' ||
item.prop == 'assistantTime' ||
item.prop == 'receptionTime'
? 'custom'
: false
"
min-width="170"
align="center"
:fixed="item.fixed || false"
>
<template slot-scope="scope">
<div v-if="scope.column.property == 'appointBeginTime'">
......@@ -49,6 +53,31 @@
<p>{{ scope.row.receptionBeginTime }}</p>
<p>{{ scope.row.receptionEndTime }}</p>
</div>
<div v-else-if="scope.column.property == 'assistantTime'">
<div
:style="{
color:
scope.row.diagnoseChannel === 3 && scope.row.status === 3
? 'red'
: '',
}"
>
<p
v-if="scope.row.diagnoseChannel === 3 && scope.row.status === 3"
>
距自动结束还剩
</p>
<p>{{ goTime(scope.row.assistantTime) }}</p>
</div>
</div>
<div v-else-if="scope.column.property == 'receptionTime'">
<div :style="{ color: isReceptionTime(scope) ? 'red' : '' }">
<p v-if="isReceptionTime(scope)">
距自动取消还剩
</p>
<p>{{ goTime(scope.row.receptionTime) }}</p>
</div>
</div>
<div v-else>
<p>{{ scope.row[scope.column.property] }}</p>
</div>
......@@ -127,6 +156,7 @@
>
修改科室
</el-button>
<!-- 问诊方式不能为小程序问诊 scope.row.diagnoseChannel!==3隐藏发送消息 -->
<el-button
v-if="showBtn(scope.row, 3, 4, 5, 6, 21, 22, 23, 24, 25, 26)"
type="primary"
......@@ -192,7 +222,11 @@
手动打回
</el-button>
<el-button
v-if="scope.row.diagnoseType !== 4 && showBtn(scope.row, 3, 26)"
v-if="
scope.row.diagnoseType !== 4 &&
showBtn(scope.row, 3, 26) &&
scope.row.diagnoseChannel !== 3
"
type="primary"
size="small"
class="btn"
......@@ -251,6 +285,9 @@
<script>
import { DIAGNOS_LIST_NEW } from '@/utils/GeneralData/diagnosis-list-new';
import TabSet from '@/components/common/tab-set';
import dayjs from 'dayjs';
import duration from 'dayjs/plugin/duration';
dayjs.extend(duration);
export default {
components: {
TabSet,
......@@ -406,9 +443,9 @@ export default {
this.$emit('changeTime', row);
},
// 发起问诊
call(row) {
this.$emit('call', row);
},
// call(row) {
// this.$emit("call", row);
// },
// 设为已完成
doneHandle(row) {
this.$emit('doneHandle', row);
......@@ -422,6 +459,23 @@ export default {
callAssistant(row) {
this.$emit('callAssistant', row);
},
// 转成时分秒
goTime(time) {
return dayjs.duration(time, 'seconds').format('HH:mm:ss');
},
isReceptionTime(scope) {
if (
scope.row.diagnoseChannel === 3 &&
(scope.row.status === 2 ||
scope.row.status === 21 ||
scope.row.status === 22 ||
scope.row.status === 23 ||
scope.row.status === 24 ||
scope.row.status === 25 ||
scope.row.status === 26)
)
return true;
},
},
};
</script>
......
......@@ -6,6 +6,9 @@
.flex{
display: flex;
}
.flex-1{
flex: 1;
}
.space-between{
display: flex;
justify-content: space-between;
......
export const DIAGNOS_LIST_NEW = [
{
prop: 'diagnoseLogId',
label: 'ID',
label: '问诊ID',
showtooltip: false,
fixed: 'left',
},
{
prop: 'orderNo',
label: '订单ID',
prop: 'userName',
label: '助诊医生',
showtooltip: false,
fixed: 'left',
},
{
prop: 'price',
label: '订单金额',
prop: 'doctorName',
label: '接诊医生',
showtooltip: false,
fixed: 'left',
},
{
prop: 'orderPlacer',
label: '下单人',
prop: 'triageDepartment',
label: '分诊科室',
showtooltip: false,
},
{
prop: 'patientName',
label: '患者姓名',
showtooltip: false,
},
{
prop: 'statusStr',
label: '状态',
showtooltip: false,
},
{
prop: 'price',
label: '订单金额',
showtooltip: false,
},
{
......@@ -37,13 +55,43 @@ export const DIAGNOS_LIST_NEW = [
with: '200',
},
{
prop: 'refundRemark',
label: '外呼状态',
prop: 'diagnoseChannelStr',
label: '问诊方式',
showtooltip: false,
},
{
prop: 'statusStr',
label: '状态',
prop: 'appointBeginTime',
label: '预约时间',
showtooltip: false,
},
{
prop: 'doneTime',
label: '完成时间',
showtooltip: false,
},
{
prop: 'createdTime',
label: '创建时间',
showtooltip: false,
},
{
prop: 'assistantBeginTime',
label: '助诊医生意向时间',
showtooltip: false,
},
{
prop: 'orderNo',
label: '订单ID',
showtooltip: false,
},
{
prop: 'orderPlacer',
label: '下单人',
showtooltip: false,
},
{
prop: 'refundRemark',
label: '外呼状态',
showtooltip: false,
},
{
......@@ -62,11 +110,15 @@ export const DIAGNOS_LIST_NEW = [
showtooltip: false,
},
{
prop: 'appointBeginTime',
label: '预约时间',
prop: 'assistantTime',
label: '问诊时长',
showtooltip: false,
},
{
prop: 'receptionTime',
label: '接诊时长',
showtooltip: false,
},
// appointBeginTime appointEndTime 预约时间
{
prop: 'operateUserId',
label: '运营人员ID',
......@@ -77,21 +129,11 @@ export const DIAGNOS_LIST_NEW = [
label: '运营人员',
showtooltip: false,
},
{
prop: 'userName',
label: '助诊医生',
showtooltip: false,
},
{
prop: 'userMobile',
label: '助诊电话',
showtooltip: false,
},
{
prop: 'assistantBeginTime',
label: '助诊医生意向时间',
showtooltip: false,
},
// assistantBeginTime assistantEndTime 助诊医生意向时间
{
prop: 'assistantRemark',
......@@ -103,21 +145,11 @@ export const DIAGNOS_LIST_NEW = [
label: '预约科室',
showtooltip: false,
},
{
prop: 'triageDepartment',
label: '分诊科室',
showtooltip: false,
},
{
prop: 'triageRemark',
label: '分诊备注',
showtooltip: true,
},
{
prop: 'doctorName',
label: '接诊医生',
showtooltip: false,
},
{
prop: 'outsideDoctor',
label: '站外医生姓名',
......@@ -134,11 +166,7 @@ export const DIAGNOS_LIST_NEW = [
showtooltip: false,
},
// receptionBeginTime receptionEndTime 接诊医生意向时间
{
prop: 'patientName',
label: '患者姓名',
showtooltip: false,
},
{
prop: 'age',
label: '患者年龄',
......@@ -199,26 +227,11 @@ export const DIAGNOS_LIST_NEW = [
label: '招募人',
showtooltip: false,
},
{
prop: 'diagnoseChannelStr',
label: '问诊方式',
showtooltip: false,
},
{
prop: 'doneTime',
label: '完成时间',
showtooltip: false,
},
{
prop: 'cancelTime',
label: '退款时间',
showtooltip: false,
},
{
prop: 'createdTime',
label: '创建时间',
showtooltip: false,
},
{
prop: 'followFlagStr',
label: '是否跟进',
......
......@@ -5,10 +5,6 @@
// 预约类型list
export const TYPE_LIST = [
{
label: '全部',
value: '',
},
{
label: '语音问诊',
value: 1,
......@@ -667,3 +663,104 @@ export const TABLE_COLUMN = [
showtooltip: true,
},
];
export const DIAGNOSE_CHANNEL = [
{
label: 'app问诊',
value: 1,
},
{
label: '线下问诊',
value: 2,
},
{
label: '小程序问诊',
value: 3,
},
];
// 跟进状态
export const FOLLOW_STATUS_LIST = [
{
label: '待跟进',
value: 1,
},
{
label: '跟进中',
value: 2,
},
{
label: '已完成',
value: 3,
},
];
// 药品跟进结果
export const MEDICINE_FOLLOW_STATUS_LIST = [
{
label: '成交中药',
value: 1,
},
{
label: '成交西药',
value: 2,
},
{
label: '自备中药',
value: 3,
},
{
label: '自备西药',
value: 4,
},
];
// 治疗效果跟进状态
export const HEALING_EFFECT_FOLLOW_STATUS = [
{
label: '待跟进',
value: 1,
},
{
label: '跟进中',
value: 2,
},
{
label: '跟进完成',
value: 3,
},
{
label: '长期跟进',
value: 4,
},
];
// 治疗效果跟进结果
export const HEALING_EFFECT_FOLLOW_RESULT = [
{
label: '效果显著',
value: 1,
},
{
label: '有效果,不明显',
value: 2,
},
{
label: '无效果',
value: 3,
},
{
label: '治疗后更差了',
value: 4,
},
];
// 检查跟进结果
export const CHECK_FOLLOW_RESULT = [
{
label: '成交',
value: 1,
},
{
label: '未成交',
value: 2,
},
{
label: '线下自己做',
value: 3,
},
];
\ No newline at end of file
......@@ -117,21 +117,49 @@
>
<span>该消息类型PC端暂不支持</span>
</div>
<!-- 安排接诊医生 -->
<div
v-if="item.showType === 13"
class="time-box"
>
<div class="physician-left">
{{ item.title }}
</div>
<div class="physician">
<div class="physician-right">
<div class="physician-right__top">
<span>{{ item.text.doctorName }}</span>
<span>{{ item.text.title }} {{ item.text.department }}</span>
</div>
<div class="physician-right__center">
{{ item.text.hospital }}
</div>
<div class="physician-right__center">
擅长:{{ item.text.goodAt }}
</div>
</div>
</div>
</div>
<!-- 语音消息 -->
<div
v-if="item.showType == 6"
class="audio-box"
>
<audio controls>
<!-- <audio controls>
<source
:src="item.url"
type="audio/mpeg"
>
</audio>
</audio> -->
<audio
controls
:src="item.url"
/>
</div>
<!-- 问诊开始与病例模块 -->
<!-- 问诊开始与病例模块 showType == 7-->
<!-- 患者病情 showType == 12-->
<div
v-if="item.showType == 7"
v-if="item.showType == 7 || item.showType == 12"
class="diagnosis-box"
>
<div class="title">
......@@ -641,7 +669,15 @@
showType = 11;
title = content.title;
text = content.content;
}else {
} else if(content.bizType === 29) { // 患者病情
showType = 12;
title = content.title;
text = JSON.parse(content.content);
} else if(content.bizType === 30) { // 接诊医生
showType = 13;
title = content.title;
text = JSON.parse(content.content);
} else {
showType = 5;
}
} else if( msg.type.toLowerCase() == 'image' || msg.type.toLowerCase() == 'picture') { // 图片
......
......@@ -342,8 +342,7 @@
}
}
}
.msg-content::-webkit-scrollbar
{
.msg-content::-webkit-scrollbar {
width: 0px;
height: 0px;
background-color: #fff;
......@@ -423,6 +422,37 @@
-o-animation: rotate 3s linear infinite;
animation: rotate 3s linear infinite;
}
.physician {
display: flex;
flex-direction: row;
align-items: flex-start;
justify-content: flex-start;
&-left {
font-size: 14px;
font-weight: 600;
padding-bottom: 10px;
}
&-right {
&__top {
span {
&:nth-child(1) {
font-size: 14px;
}
&:nth-child(2) {
font-size: 12px;
}
}
}
&__center {
color: #999999;
}
}
}
@-webkit-keyframes rotate{from{-webkit-transform: rotate(0deg)}
to{-webkit-transform: rotate(360deg)}
}
......
......@@ -70,7 +70,7 @@ module.exports = {
port: 8080,
proxy: {
'/proxy': {
target: 'https://test1-sc.yunqueyi.com/',
target: 'https://uat-sc.yunqueyi.com/',
ws: false,
changeOrigin: true,
secure: true,
......
此差异已折叠。
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册