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

Merge branch 'release' of...

Merge branch 'release' of 192.168.110.53:com.pica.cloud.education.frontend/pica-admin-consultation into release
......@@ -17,4 +17,4 @@ VUE_APP_IS_LOCAL=true
VUE_APP_APPID=wxf4e66242d31c81c2
#本地token
VUE_APP_TOKEN=B638EE700AD348B8B432E7DF53A48E87
VUE_APP_TOKEN=94F2E2E006D74C6EB5CCFC15F67DE31A
......@@ -331,3 +331,9 @@ export const savePCDayCount = async (data) => {
method: 'post',
});
};
export const personnelList = async () => {
return request({
url: '/contents/admin/homepage/floor/personnelList',
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,14 @@
: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 +51,26 @@
<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,8 +149,9 @@
>
修改科室
</el-button>
<!-- 问诊方式不能为小程序问诊 scope.row.diagnoseChannel!==3隐藏发送消息 -->
<el-button
v-if="showBtn(scope.row, 3, 4, 5, 6, 21, 22, 23, 24, 25, 26)"
v-if="showBtn(scope.row, 3, 4, 5, 6, 21, 22, 23, 24, 25, 26) && scope.row.diagnoseChannel !== 3"
type="primary"
size="small"
class="btn"
......@@ -192,7 +215,7 @@
手动打回
</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"
......@@ -224,8 +247,7 @@
class="btn"
@click="callAssistant(scope.row,)"
>
{{scope.row.consultRoadType == 2 ? '呼叫居民' : '呼叫助诊医生'}}
{{ scope.row.consultRoadType == 2 ? '呼叫居民' : '呼叫助诊医生' }}
</el-button>
</template>
</el-table-column>
......@@ -252,6 +274,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,
......@@ -422,7 +447,18 @@
},
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
......@@ -81,6 +81,18 @@
value-format="yyyy-MM-dd HH:mm:ss"
/>
</el-form-item>
<el-form-item
label="订单金额"
prop="orderTotalPrice"
>
<el-input
v-model="formData.orderTotalPrice"
placeholder="请输入问诊价格"
disabled
class="set-width"
/>
(单位元)
</el-form-item>
<el-form-item
label="问诊价格"
prop="price"
......@@ -93,6 +105,33 @@
/>
(单位元)
</el-form-item>
<el-form-item
label="诊疗费"
prop="additionPrice"
>
<el-input
v-model="formData.additionPrice"
placeholder="请输入诊疗费"
disabled
class="set-width"
/>
(单位元)
</el-form-item>
<el-form-item label="问诊方式">
<el-select
v-model="formData.diagnoseChannel"
placeholder="请选择问诊方式"
class="set-width"
disabled
>
<el-option
v-for="item of diagnoseChannelList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="支付方式">
<el-select
v-model="formData.payType"
......@@ -645,7 +684,7 @@
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="确诊疾病">
<el-form-item label="诊断疾病(运营填)">
<el-input
v-model="formData.diagnoseDisease"
placeholder="请输入确诊疾病名称"
......@@ -673,14 +712,20 @@
<upload-img
ref="imgComponent"
:is-disable="editorType == 2"
:img-list="
formData.illnessImageUrls.filter((i) => {
return i && !i.url.includes('.pdf');
})
"
:img-list="formData.illnessImageUrls"
/>
</el-form-item>
<el-form-item label="检测报告">
<el-form-item label="病情视频">
<p class="img-title">
请上传患处视频、所用药品、与病情相关的线上诊疗记录视频、检查检测报告,请保证视频清晰完整,以便医生确认病情
</p>
<upload-video
ref="videoComponent"
:is-disable="editorType == 2"
:img-list="formData.illnessImageUrls"
/>
</el-form-item>
<el-form-item label="病情文件">
<div
v-for="item in formData.illnessPdfUrls"
:key="item.name"
......@@ -703,6 +748,14 @@
</div>
</div>
</el-form-item>
<el-form-item label="诊断疾病(医生填)">
<el-input
v-model="formData.diseaseName"
disabled
placeholder="请输入确诊疾病名称"
class="set-width"
/>
</el-form-item>
<el-form-item
label="诊断建议"
prop="diagnoseAdvice"
......@@ -713,13 +766,80 @@
<el-input
v-model="formData.diagnoseAdvice"
type="textarea"
placeholder="请输入更新建议(更新后原建议将被删除)"
placeholder="请填写您对患者病情的诊断描述和建议"
:disabled="editorType == 2"
maxlength="1000"
show-word-limit
/>
</el-form-item>
<el-form-item
label="中药建议"
prop="tcmAdvice"
>
<p class="old-diagnoseAdvice">
{{ oldTcmAdvice }}
</p>
<el-input
v-model="formData.tcmAdvice"
type="textarea"
placeholder="请输入建议使用的中药名称及用量、频次等"
:disabled="editorType == 2"
maxlength="1000"
show-word-limit
/>
</el-form-item>
<el-form-item label="系统录音/录像">
<el-form-item
label="西药建议"
prop="westernAdvice"
>
<p class="old-diagnoseAdvice">
{{ oldWesternAdvice }}
</p>
<el-input
v-model="formData.westernAdvice"
type="textarea"
placeholder="请输入建议使用的西药名称及用量、频次等"
:disabled="editorType == 2"
maxlength="1000"
show-word-limit
/>
</el-form-item>
<el-form-item
label="检查建议"
prop="inspectionAdvice"
>
<p class="old-diagnoseAdvice">
{{ oldInspectionAdvice }}
</p>
<el-input
v-model="formData.inspectionAdvice"
type="textarea"
placeholder="建议患者进一步作何检查"
:disabled="editorType == 2"
maxlength="1000"
show-word-limit
/>
</el-form-item>
<el-form-item
label="生活建议"
prop="lifeAdvice"
>
<p class="old-diagnoseAdvice">
{{ oldLifeAdvice }}
</p>
<el-input
v-model="formData.lifeAdvice"
type="textarea"
placeholder="生活作息、饮食、日常运动等方面的建议"
:disabled="editorType == 2"
maxlength="1000"
show-word-limit
/>
</el-form-item>
<el-form-item
v-if="formData.vodList.length > 0"
label="系统录音/录像"
>
<el-form-item
v-for="item in formData.vodList"
:key="item.url"
......@@ -739,6 +859,20 @@
'.mp4'
}}
</el-link>
<el-popover
trigger="hover"
placement="top"
width="1000"
>
<p>{{ item.text }}</p>
<div
slot="reference"
class="vod"
>
<span class="vod-txt">语音转文字:</span>
<span class="vod-text">{{ item.text }}</span>
</div>
</el-popover>
</el-form-item>
</el-form-item>
<el-form-item label="音频">
......@@ -829,6 +963,82 @@
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="跟进状态">
<el-select
v-model="formData.followStatus"
placeholder="请选择跟进状态"
class="set-width"
:disabled="editorType == 2"
>
<el-option
v-for="item of followStatusList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="计划跟进时间">
<el-date-picker
v-model="formData.followDate"
:disabled="editorType == 2"
class="set-width"
type="datetime"
placeholder="创建时间"
format="yyyy-MM-dd HH:mm:ss"
value-format="yyyy-MM-dd HH:mm:ss"
/>
</el-form-item>
<el-form-item label="治疗效果跟进状态">
<el-select
v-model="formData.treatmentFollowStatus"
placeholder="请选择治疗效果跟进状态"
class="set-width"
:disabled="editorType == 2"
>
<el-option
v-for="item of healingStatusList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="治疗效果跟进点">
<el-input
v-model="formData.treatmentFollow"
placeholder="请输入治疗效果跟进点"
type="textarea"
maxlength="1000"
:disabled="editorType == 2"
show-word-limit
/>
</el-form-item>
<el-form-item label="治疗效果跟进结果">
<el-select
v-model="formData.treatmentFollowResult"
placeholder="请选择治疗效果跟进结果"
class="set-width"
:disabled="editorType == 2"
>
<el-option
v-for="item of healingResultList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
<el-form-item label="药品跟进点">
<el-input
v-model="formData.drugFollow"
placeholder="请输入药品跟进点"
type="textarea"
maxlength="1000"
:disabled="editorType == 2"
show-word-limit
/>
</el-form-item>
<el-form-item label="药品跟进状态">
<el-select
v-model="formData.drugFollowStatus"
......@@ -844,11 +1054,37 @@
/>
</el-select>
</el-form-item>
<el-form-item label="药品跟进">
<el-form-item label="药品跟进结果">
<div class="flex">
<el-select
v-model="formData.drugFollowResult"
placeholder="请选择药品跟进结果"
class="set-width"
:disabled="editorType == 2"
>
<el-option
v-for="item of medicineFollowStatusList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<el-input
v-model="formData.drugFollowResultContent"
placeholder=""
class="set-width flex-1"
style="margin-left:30px"
:disabled="editorType == 2"
maxlength="1000"
show-word-limit
/>
</div>
</el-form-item>
<el-form-item label="检查跟进点">
<el-input
v-model="formData.drugFollow"
v-model="formData.checkFollow"
placeholder="请输入检查跟进点"
type="textarea"
placeholder="请输入可跟进的事项"
maxlength="1000"
:disabled="editorType == 2"
show-word-limit
......@@ -869,15 +1105,37 @@
/>
</el-select>
</el-form-item>
<el-form-item label="检查跟进">
<el-form-item label="检查跟进结果">
<div class="flex">
<el-select
v-model="formData.checkFollowResult"
placeholder="请选择检查跟进结果"
class="set-width"
:disabled="editorType == 2"
>
<el-option
v-for="item of checkFollowResultList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
<span
class="flex flex-1"
style="margin-left:30px"
>
检查结果
<el-input
v-model="formData.checkFollow"
type="textarea"
placeholder="请输入可跟进的事项"
v-model="formData.checkResult"
placeholder=""
show-word-limit
maxlength="1000"
class="set-width flex-1"
style="margin-left:12px"
:disabled="editorType == 2"
show-word-limit
/>
</span>
</div>
</el-form-item>
<el-form-item label="其他跟进状态">
<el-select
......@@ -989,6 +1247,7 @@ import {
} from '@/api/diagnosis';
import uploadImg from '@/components/editor/upload-img';
import uploadMusic from '@/components/editor/upload-music';
import uploadVideo from '@/components/editor/upload-video';
import {
CAR_LIST,
D_S_LIST,
......@@ -999,6 +1258,12 @@ import {
SOURCE_LIST,
STATUS_LIST,
TYPE_LIST,
DIAGNOSE_CHANNEL,
FOLLOW_STATUS_LIST,
MEDICINE_FOLLOW_STATUS_LIST,
HEALING_EFFECT_FOLLOW_STATUS,
HEALING_EFFECT_FOLLOW_RESULT,
CHECK_FOLLOW_RESULT
} from '@/utils/constants';
import { getBirth } from '@/utils/index';
......@@ -1010,6 +1275,7 @@ export default {
components: {
uploadImg,
uploadMusic,
uploadVideo
},
data() {
return {
......@@ -1021,6 +1287,10 @@ export default {
loading: true,
btnDisable: false,
oldDiagnoseAdvice: '', // 旧的诊断建议
oldTcmAdvice: '', // 旧的中药建议
oldWesternAdvice: '',
oldInspectionAdvice: '',
oldLifeAdvice: '',
formData: {
// 预约单信息
diagnoseType: '',
......@@ -1074,17 +1344,27 @@ export default {
diagnoseStage: '',
determineFlag: '',
diagnoseDisease: '',
diseaseName:'',
illnessDetail: '',
illnessImageUrls: [],
diagnoseAdvice: '',
illnessAudioUrls: [],
followFlag: 1,
drugFollow: '',
drugFollowStatus: '',
checkFollow: '',
checkFollowStatus: '',
otherFollowStatus: '',
otherFollow: '',
followStatus:'', // 跟进状态
followDate:'', // 计划跟进时间
drugFollow:'', // 药品跟进点
drugFollowResult:'', // 药品跟进结果
drugFollowResultContent:'', // 药品跟进结果描述
treatmentFollow:'', // 治疗效果跟进点
treatmentFollowStatus:'', // 治疗效果跟进状态
treatmentFollowResult:'', // 治疗效果跟进结果
checkFollow: '', // 检查跟进点
checkFollowResult: '', // 检查跟进结果
checkResult: '', // 检测结果
remark: '',
maritalStatus: 2,
createType: 1, // //创建方式1.系统创建 2.手动创建
......@@ -1106,10 +1386,15 @@ export default {
vodList: {
name: '',
url: '',
text: ''
},
additionPrice: null, // 诊疗费
orderTotalPrice: null,
diagnoseChannel: null
},
tyleList: TYPE_LIST,
payList: PAY_LIST,
diagnoseChannelList: DIAGNOSE_CHANNEL,
sourceList: SOURCE_LIST,
statusList: STATUS_LIST,
carList: CAR_LIST,
......@@ -1117,6 +1402,11 @@ export default {
relationList: RELATION_LIST,
doctorSourceList: D_S_LIST,
followList: FOLLW_LIST,
followStatusList: FOLLOW_STATUS_LIST,
medicineFollowStatusList: MEDICINE_FOLLOW_STATUS_LIST,
healingStatusList: HEALING_EFFECT_FOLLOW_STATUS,
healingResultList: HEALING_EFFECT_FOLLOW_RESULT,
checkFollowResultList: CHECK_FOLLOW_RESULT,
doctorList: [],
rules: {
appointBeginTime: [
......@@ -1273,6 +1563,8 @@ export default {
if (res.code == '000000') {
this.formData = res.data;
this.formData.price = this.priceFilter(this.formData.price);
this.formData.additionPrice = this.priceFilter(this.formData.additionPrice);
this.formData.orderTotalPrice = this.formData.price + this.formData.additionPrice;
this.formData.serviceFee = this.priceFilter(
this.formData.serviceFee
);
......@@ -1298,6 +1590,22 @@ export default {
this.oldDiagnoseAdvice = this.formData.diagnoseAdvice;
this.formData.diagnoseAdvice = '';
}
if (this.formData.tcmAdvice) {
this.oldTcmAdvice = this.formData.tcmAdvice;
this.formData.tcmAdvice = '';
}
if (this.formData.westernAdvice) {
this.oldWesternAdvice = this.formData.westernAdvice;
this.formData.westernAdvice = '';
}
if (this.formData.inspectionAdvice) {
this.oldInspectionAdvice = this.formData.inspectionAdvice;
this.formData.inspectionAdvice = '';
}
if (this.formData.lifeAdvice) {
this.oldLifeAdvice = this.formData.lifeAdvice;
this.formData.lifeAdvice = '';
}
if (!this.formData.sex) {
this.formData.sex = 1;
}
......@@ -1417,9 +1725,13 @@ export default {
this.formData.birthday = new Date(this.formData.birthdayStr);
// this.formData.birthday = this.formData.birthdayStr;
const params = JSON.parse(JSON.stringify(this.formData));
params.illnessImageUrls = this.$refs.imgComponent
const newImageList = this.$refs.imgComponent
? [...this.$refs.imgComponent.setNewArr()]
: [];
const newVideoList = this.$refs.videoComponent
? [...this.$refs.videoComponent.setNewArr()]
: [];
params.illnessImageUrls = newImageList.concat(newVideoList);
params.illnessAudioUrls = this.$refs.musicComponent
? [...this.$refs.musicComponent.setNewArr()]
: [];
......@@ -1428,6 +1740,18 @@ export default {
if (!params.diagnoseAdvice) {
params.diagnoseAdvice = this.oldDiagnoseAdvice;
}
if (!params.tcmAdvice) {
params.tcmAdvice = this.oldTcmAdvice;
}
if (!params.westernAdvice) {
params.westernAdvice = this.oldWesternAdvice;
}
if (!params.inspectionAdvice) {
params.inspectionAdvice = this.oldInspectionAdvice;
}
if (!params.lifeAdvice) {
params.lifeAdvice = this.oldLifeAdvice;
}
this.loading = true;
this.btnDisable = true;
diagnoseUpdate(params)
......@@ -1437,6 +1761,7 @@ export default {
if (res.code == '000000') {
this.$message.success('保存成功');
this.$router.back();
window.location.reload();
} else {
this.$message({
message: res.message,
......@@ -1474,7 +1799,6 @@ export default {
margin-bottom: 30px;
}
.img-title {
margin-top: 20px;
font-size: 14px;
color: #6d8bc7;
line-height: 40px;
......@@ -1497,6 +1821,27 @@ export default {
.log-info-pagin {
margin: 0 15px;
}
.vod {
display: flex;
flex-direction: row;
align-items: center;
&-txt {
width: 90px;
}
&-text {
width: 100%;
background: #ccc;
line-height: 20px;
-webkit-line-clamp: 5;
overflow: hidden;
display: -webkit-box;
-webkit-box-orient: vertical;
text-overflow: ellipsis;
white-space: normal;
}
}
}
.btn-wrap {
padding: 40px 0 60px;
......
......@@ -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') { // 图片
......
......@@ -37,9 +37,10 @@
class="t-b"
>
<el-select
v-model="searchParam.type"
v-model="searchParam.typeList"
placeholder="请选择问诊类型"
style="width: 220px"
multiple
>
<el-option
v-for="item of consultationTypeList"
......@@ -55,19 +56,6 @@
label="分诊科室"
class="t-b"
>
<!-- <el-select
v-model="searchParam.triageDepartmentId"
placeholder="请选择科室"
style="width: 220px"
filterable
>
<el-option
v-for="item of depList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select> -->
<el-cascader
ref="cascader"
v-model="searchParam.triageDepartmentId"
......@@ -131,6 +119,27 @@
</el-select>
</el-form-item>
</div>
<div>
<el-form-item
label="跟进运营"
class="t-b"
>
<el-select
v-model="searchParam.followOperatorId"
placeholder="请选择跟进运营"
clearable
filterable
style="width: 220px"
>
<el-option
v-for="item of allPersonnelList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</div>
</div>
<div class="form-li">
<div>
......@@ -152,9 +161,10 @@
class="t-b"
>
<el-select
v-model="searchParam.diagnoseType"
v-model="searchParam.diagnoseTypeList"
placeholder="请选择预约类型"
style="width: 220px"
multiple
>
<el-option
v-for="item of tyleList"
......@@ -222,6 +232,27 @@
</el-select>
</el-form-item>
</div>
<div>
<el-form-item
label="跟进状态"
class="t-b"
>
<el-select
v-model="searchParam.followStatusList"
placeholder="请选择跟进状态"
clearable
multiple
style="width: 220px"
>
<el-option
v-for="item of followStatusLists"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</div>
</div>
<div class="form-li">
<div>
......@@ -300,12 +331,28 @@
<el-input
v-model.trim="searchParam.patientName"
clearable
placeholder="仅可查询报告解读患者"
placeholder="请输入"
style="width: 220px"
@change="patientNameChange"
/>
</el-form-item>
</div>
<div>
<el-form-item
label="计划跟进时间"
class="t-b"
>
<el-date-picker
v-model="followDateTime"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="width: 220px"
/>
</el-form-item>
</div>
</div>
<div class="form-li">
<div>
......@@ -343,16 +390,6 @@
label="基层意向时间"
class="t-b"
>
<!-- <el-date-picker
v-model="assistantTime"
type="daterange"
value-format="yyyy-MM-dd"
range-separator="-"
start-placeholder="开始日期"
end-placeholder="结束日期"
style="width: 220px"
:picker-options="pickerOptions1"
/> -->
<el-date-picker
v-model="assistantTime"
type="daterange"
......@@ -370,10 +407,11 @@
class="t-b"
>
<el-select
v-model="searchParam.consultRoad"
v-model="searchParam.consultRoadList"
placeholder="请选择业务类型"
clearable
style="width: 220px"
multiple
>
<el-option
v-for="item of orderBusinessList"
......@@ -384,6 +422,27 @@
</el-select>
</el-form-item>
</div>
<div>
<el-form-item
label="问诊方式"
class="t-b"
>
<el-select
v-model="searchParam.diagnoseChannelList"
placeholder="请选择问诊方式"
clearable
multiple
style="width: 220px"
>
<el-option
v-for="item of newDiagnoseChannelList"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</div>
</div>
<div class="form-btn">
<div class="form-btn-li">
......@@ -539,6 +598,7 @@
:diagnosis-doctor-visible.sync="diagnosisDoctorVisible"
:diagnose-log-id="diagnoseLogId"
:diagnose-type="diagnoseType"
:diagnose-channel="diagnoseChannel"
:only-change-time="onlyChangeTime"
:doctor-id="doctorId"
:range-time-data="rangeTimeData"
......@@ -610,6 +670,7 @@ import {
getCountQuery,
getDepartments,
reMatchDoctor,
personnelList
} from '@/api/diagnosis';
import { DIAGNOS_LIST_NEW } from '@/utils/GeneralData/diagnosis-list-new';
import {
......@@ -623,6 +684,8 @@ import {
SOURCE_LIST,
TRIAGE_TAB_LIST,
TYPE_LIST,
DIAGNOSE_CHANNEL,
FOLLOW_STATUS_LIST
} from '@/utils/constants';
import { outbounNote } from '../../../api/diagnosis';
import { callAssistantDoctor, updateDiagnosis } from '../../../utils/diagnosis';
......@@ -671,17 +734,18 @@ export default {
orderRangeTime: '',
completeRangeTime: '',
assistantTime: '',
followDateTime:'',
depList: [],
tabrefresh: true,
searchParam: {
id: '',
type: '',
typeList: [],
operateName: '',
assistantVal: '',
receptionVal: '',
sort: null,
triageDepartmentId: '',
diagnoseType: '', // 预约问诊类型:1、音频 2、视频 3、图文
diagnoseTypeList: [], // 预约问诊类型:1、音频 2、视频 3、图文
createdTimeBegin: '',
createdTimeEnd: '',
operateTimeBegin: '',
......@@ -692,6 +756,8 @@ export default {
doneTimeEnd: '',
assistantBeginTime: '',
assistantEndTime: '',
followDateBegin:'',
followDateEnd:'',
pageSize: 15,
pageNo: 1,
menuType: 1, // 菜单类型:1、all 2、运营 3、待分诊 4、待接诊 5、外呼
......@@ -700,8 +766,11 @@ export default {
refundRemark: '',
orderPlacer: '',
matchingWay: null,
consultRoad: null,
consultRoadList: [],
diagnoseChannelList: [],
patientName: null,
followOperatorId:'', // 运营id
followStatusList:[], // 跟进状态
},
noteList: [],
alltabslist: [],
......@@ -710,6 +779,7 @@ export default {
sourceList: SOURCE_LIST,
priceList: ORDER_PRICE,
matchingWayList: MATCHING_LIST,
followStatusLists: FOLLOW_STATUS_LIST,
orderBusinessList: [
{
label: '中医实践',
......@@ -724,6 +794,7 @@ export default {
value: 2,
},
],
newDiagnoseChannelList: DIAGNOSE_CHANNEL,
nextPersonList: [
{
label: '基层医生',
......@@ -761,6 +832,7 @@ export default {
dialogFormVisible: false,
bizType: 0,
diagnoseType: 0,
diagnoseChannel: 0,
consultRoad: '',
doctorId: 0,
operateUserID: '',
......@@ -784,12 +856,9 @@ export default {
triageDepartment: '',
departmentId: '',
allTilst: [],
allPersonnelList:[],
allList: {},
consultationTypeList: [
{
label: '全部',
value: '',
},
{
label: '名医问诊',
value: 2,
......@@ -826,6 +895,7 @@ export default {
this.setTableHeight();
this.getOutboundNote();
this.departmentAll();
this.personnelList();
},
destroyed() {
clearInterval(this.timer);
......@@ -839,6 +909,13 @@ export default {
}
});
},
personnelList() {
personnelList().then((res) => {
if (res.code == '000000') {
this.allPersonnelList = res.data || {};
}
});
},
showListALL() {
const arr = [];
const { departmentMapList, parentDepartmentList } = this.allList;
......@@ -1087,12 +1164,14 @@ export default {
orderRangeTime,
completeRangeTime,
assistantTime,
followDateTime
} = this;
this.setTime('createdTimeBegin', 'createdTimeEnd', createRangeTime);
this.setTime('cancelTimeBegin', 'cancelTimeEnd', cancelRangeTime);
this.setTime('appointBeginTime', 'appointEndTime', orderRangeTime);
this.setTime('doneTimeBegin', 'doneTimeEnd', completeRangeTime);
this.setTime('assistantBeginTime', 'assistantEndTime', assistantTime);
this.setTime('followDateBegin', 'followDateEnd', followDateTime);
},
/**
* btime开始时间
......@@ -1129,6 +1208,24 @@ export default {
data.order == 'descending'
) {
this.searchParam.sort = 4;
} else if(data.prop == 'assistantTime') {
if (data.order == 'ascending') {
this.searchParam.sort = 5;
} else {
this.searchParam.sort = 6;
}
} else if (data.prop == 'receptionTime') {
if (data.order == 'ascending') {
this.searchParam.sort = 7;
} else {
this.searchParam.sort = 8;
}
} else if (data.prop == 'followDateTime') {
if (data.order == 'ascending') {
this.searchParam.sort = 9;
} else {
this.searchParam.sort = 10;
}
} else {
this.searchParam.sort = null;
}
......@@ -1175,9 +1272,10 @@ export default {
this.orderRangeTime = '';
this.completeRangeTime = '';
this.assistantTime = '';
this.followDateTime = '';
this.searchParam = Object.assign(this.searchParam, {
id: '',
type: '',
typeList: [],
operateName: '',
assistantVal: '',
receptionVal: '',
......@@ -1186,7 +1284,7 @@ export default {
refundRemark: '',
orderPlacer: '',
matchingWay: null,
diagnoseType: '', // 预约问诊类型:1、音频 2、视频 3、图文
diagnoseTypeList: [], // 预约问诊类型:1、音频 2、视频 3、图文
createdTimeBegin: '',
createdTimeEnd: '',
operateTimeBegin: '',
......@@ -1198,10 +1296,16 @@ export default {
doneTimeEnd: '',
assistantBeginTime: '',
assistantEndTime: '',
followDateBegin:'',
followDateEnd:'',
inNewTimeObj: {},
consultRoad: null,
consultRoadList: [],
patientName: null,
diagnoseChannelList: [],
followStatusList:[],
followOperatorId:''
});
this.getsearch();
},
// 导出
download() {
......@@ -1404,6 +1508,7 @@ export default {
this.diagnoseLogId = row.diagnoseLogId;
this.diagnoseType = row.diagnoseType;
this.consultRoad = row.consultRoad;
this.diagnoseChannel = row.diagnoseChannel;
if (row.doctorId == 0) {
this.doctorId = '';
} else {
......@@ -1416,12 +1521,21 @@ export default {
},
// 重新匹配医生
reMatchDot(row, type) {
if (row.diagnoseChannel === 3) {
this.rematchingOptions = [
'接诊医生爽约',
'上级医生日程改变,提前取消',
'操作失误,重新匹配医生',
];
} else {
this.rematchingOptions = [
'接诊医生爽约',
'上级医生日程改变,提前取消',
'操作失误,重新匹配医生',
'助诊医生爽约',
'科室不对'
];
}
// this.rematchingOptions=
// this.options=
this.rematchingVisible = true;
......
......@@ -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)}
}
......
因为 它太大了无法显示 源差异 。您可以改为 查看blob
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册