Merge branch 'dev'
This commit is contained in:
commit
82c6b9a1ce
@ -1,2 +1,3 @@
|
||||
BASE_URL= "https://vue3.go-admin.dev"
|
||||
VITE_BASE_URL= "http://dev.hospital.admin.api.igandanyiyuan.com"
|
||||
VITE_IMG_URL="https://img.applets.igandanyiyuan.com"
|
||||
@ -1,2 +1,3 @@
|
||||
BASE_URL= "https://vue3.go-admin.dev"
|
||||
VITE_BASE_URL= "//prod.hospital.admin.api.igandanyiyuan.com"
|
||||
VITE_BASE_URL= "//prod.hospital.admin.api.igandanyiyuan.com"
|
||||
VITE_IMG_URL="https://oss.prod.applets.igandanyiyuan.com"
|
||||
@ -1,2 +1,3 @@
|
||||
BASE_URL= "https://vue3.go-admin.dev"
|
||||
VITE_BASE_URL= "http://dev.hospital.admin.api.igandanyiyuan.com"
|
||||
VITE_IMG_URL="https://img.applets.igandanyiyuan.com"
|
||||
@ -2,6 +2,7 @@
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
</head>
|
||||
|
||||
67
src/api/order/list.js
Normal file
67
src/api/order/list.js
Normal file
@ -0,0 +1,67 @@
|
||||
import request from '../../utils/request'
|
||||
const url = '/admin/order/inquiry';
|
||||
export function getOrderList(params){
|
||||
return request({
|
||||
url:'/admin/order/inquiry',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
export function getList(){
|
||||
return request({
|
||||
url:'https://twx.igandan.org/book/drughand/getDrugList',
|
||||
method: 'GET',
|
||||
dataType: 'json'
|
||||
})
|
||||
}
|
||||
export function getOrderDetail(id){
|
||||
return request({
|
||||
url:`${url}/${id}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function productList(params){ //药品列表
|
||||
return request({
|
||||
url:'/admin/order/product',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
export function getProductDetail(id){//药品列表
|
||||
return request({
|
||||
url:`/admin/order/product/${id}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function cancelInquiry(id,data){//取消问诊
|
||||
return request({
|
||||
url:`/admin/order/inquiry/cancel/${id}`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
export function cancelProduct(id,data){//取消药品
|
||||
return request({
|
||||
url:`/admin/order/product/cancel/${id}`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
export function reportPrePscription(id){//上报处方
|
||||
return request({
|
||||
url:`/admin/order/report/pre/${id}`,
|
||||
method: 'post'
|
||||
})
|
||||
}
|
||||
export function lookAddress(id){//解密收货人地址
|
||||
return request({
|
||||
url:`/decrypt/order/product/consignee/${id}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function inquiryCase(id){//病例详情
|
||||
return request({
|
||||
url:`/admin/case/inquiry/${id}`,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
89
src/api/patient/list.js
Normal file
89
src/api/patient/list.js
Normal file
@ -0,0 +1,89 @@
|
||||
import request from '../../utils/request'
|
||||
|
||||
const url = '/admin/patient';
|
||||
|
||||
|
||||
export function getPatientList(params){
|
||||
return request({
|
||||
url:'/admin/patient',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
export function addPatient(data) {
|
||||
return request({
|
||||
url,
|
||||
method: 'post',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function removePatient(data) {
|
||||
return request({
|
||||
url,
|
||||
method: 'delete',
|
||||
data
|
||||
})
|
||||
}
|
||||
|
||||
export function updatePatient(data, id) {
|
||||
return request({
|
||||
url: `${url}/${id}`,
|
||||
method: 'put',
|
||||
data
|
||||
})
|
||||
}
|
||||
export function getPatientDetail(id){
|
||||
return request({
|
||||
url:'/admin/doctor/'+id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function departmentList(){ //获取科室列表
|
||||
return request({
|
||||
url:'/basic/department/custom/list',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function decryptCard(params){
|
||||
return request({
|
||||
url:'/decrypt/card/num',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
export function decryptBank(doctor_id){
|
||||
return request({
|
||||
url:'/decrypt/bank/'+doctor_id,
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
|
||||
export function hospitalList(params){ //获取医院地址列表
|
||||
return request({
|
||||
url:'/basic/hospital/list',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
export function expertiseList(){ //获取专长列表
|
||||
return request({
|
||||
url:'/basic/expertise/list',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function bankList(){ //获取银行列表
|
||||
return request({
|
||||
url:'/basic/bank/list',
|
||||
method: 'get'
|
||||
})
|
||||
}
|
||||
export function areaList(params){ //获取银行列表
|
||||
return request({
|
||||
url:'/basic/area/list',
|
||||
method: 'get',
|
||||
params
|
||||
})
|
||||
}
|
||||
|
||||
BIN
src/assets/hasuse.png
Normal file
BIN
src/assets/hasuse.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
src/assets/nowork.png
Normal file
BIN
src/assets/nowork.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 21 KiB |
BIN
src/assets/unuse.png
Normal file
BIN
src/assets/unuse.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
@ -23,7 +23,7 @@
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { ref, reactive, toRefs, watch, unref, getCurrentInstance } from 'vue';
|
||||
import { ref, reactive, toRefs, watch, getCurrentInstance } from 'vue';
|
||||
import { Message } from '@arco-design/web-vue';
|
||||
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
85
src/components/confirmModal.vue
Normal file
85
src/components/confirmModal.vue
Normal file
@ -0,0 +1,85 @@
|
||||
<template>
|
||||
<a-modal v-model:visible="okVisible" :modal-style="{width:'420px'}" body-class="okmodal" @ok="handleConfirm"
|
||||
@cancel="handleClose" >
|
||||
<template #title>
|
||||
提示
|
||||
</template>
|
||||
<a-form :model="form" :rules="rules" ref="modalFormRef" size="medium" label-align="left" auto-label-width>
|
||||
<a-form-item field="cancel_remarks" label="理由" >
|
||||
<a-textarea v-model.trim="form.cancel_remarks" allow-clear placeholder="请输入取消订单理由"></a-textarea>
|
||||
</a-form-item>
|
||||
</a-form>
|
||||
<template #footer>
|
||||
<a-button @click="handleClose"><template #icon><icon-close /></template>取消</a-button>
|
||||
<a-button type="primary" @click="handleConfirm"><template #icon><icon-check /></template>确认</a-button>
|
||||
</template>
|
||||
|
||||
</a-modal>
|
||||
</template>
|
||||
<script setup>
|
||||
import { reactive, toRefs, getCurrentInstance } from 'vue';
|
||||
import { Message } from '@arco-design/web-vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const form = reactive({
|
||||
cancel_remarks: ''
|
||||
});
|
||||
const props = defineProps({
|
||||
// 是否显示
|
||||
okVisible: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
id:{
|
||||
type: String,
|
||||
default:'',
|
||||
},
|
||||
dealType:{
|
||||
type: String,
|
||||
default:'',
|
||||
},
|
||||
title:{
|
||||
type: String,
|
||||
default:'',
|
||||
},
|
||||
api: {
|
||||
type: Function,
|
||||
},
|
||||
});
|
||||
const emits = defineEmits(['closeChange']);
|
||||
const {okVisible,title,id,api} = toRefs(props);
|
||||
|
||||
// Akiraka 20230210 关闭弹窗
|
||||
const handleClose = () => {
|
||||
emits('closeChange',false);
|
||||
// alert(flag)
|
||||
}
|
||||
// Akiraka 20230210 删除数据校验
|
||||
const rules = reactive({
|
||||
cancel_remarks: [{ required: true, message: '请输入取消订单理由' }]
|
||||
});
|
||||
// Akiraka 20230210 确认按钮 => 开始数据检查
|
||||
const handleConfirm = () => {
|
||||
proxy.$refs.modalFormRef.validate(async(valid) => {
|
||||
if (!valid) {
|
||||
const {code}= await api.value(id.value,form);
|
||||
if(code==200){
|
||||
Message.success("取消成功");
|
||||
proxy.$refs.modalFormRef.resetFields();
|
||||
}else{
|
||||
proxy.$notification.error(response.message);
|
||||
}
|
||||
emits('closeChange',true);
|
||||
// api.value(id.value,form).then(response => {
|
||||
// // Akiraka 20230210 关闭弹窗
|
||||
// if(response.code==200){
|
||||
// Message.success("取消成功");
|
||||
// proxy.$refs.modalFormRef.resetFields();
|
||||
// }else{
|
||||
// proxy.$notification.error(response.message);
|
||||
// }
|
||||
// emits('closeChange',true);
|
||||
// })
|
||||
}
|
||||
})
|
||||
}
|
||||
</script>
|
||||
995
src/components/doctorModal.vue
Normal file
995
src/components/doctorModal.vue
Normal file
@ -0,0 +1,995 @@
|
||||
<template>
|
||||
<!-- Modal -->
|
||||
<a-modal v-model:visible="doctorVisible" fullscreen :title="modalTitle" title-align="start" :footer="false"
|
||||
@cancel="handleClose">
|
||||
<div class="titlebox">
|
||||
<div class="bar"></div>
|
||||
<div class="name">医生信息</div>
|
||||
</div>
|
||||
<a-form :model="modalForm" :disabled="modalSatus=='detail' || modalForm.iden_auth_status==2
|
||||
" :rules="rules" ref="modalFormRef" :auto-label-width="true">
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="avatar" label="医生头像:">
|
||||
<a-space size="large">
|
||||
<a-image width="80" height="80" class="headImg" :src="modalForm.avatar">
|
||||
</a-image>
|
||||
</a-space>
|
||||
<a-upload action="/" :fileList="file ? [file] : []" class="upload" :auto-upload="false"
|
||||
@change="onChangeFile" accept="image/*" @before-upload="beforeUpload" :show-file-list="false"
|
||||
v-if="modalSatus!='detail'" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12" v-if="modalSatus=='add'" style="margin-top: 10px;">
|
||||
<a-form-item field="user.mobile" label="联系电话:">
|
||||
<a-input v-model="modalForm.user.mobile" placeholder="请输入联系电话" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="user_name" label="医生名字:">
|
||||
<a-input v-model="modalForm.user_name" placeholder="请输入医生名字" :disabled="modalSatus=='edit'" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="card_num" label="身份证号:" v-if="modalSatus=='add'">
|
||||
<a-input v-model="modalForm.card_num" placeholder="请输入身份证号" />
|
||||
</a-form-item>
|
||||
<a-form-item field="idCard" label="身份证号:" v-else>
|
||||
<div class="box" v-show="!showEye && modalSatus!='add'">
|
||||
<div class="cardNum">{{modalForm.user_doctor_info.card_num_mask}}</div>
|
||||
<icon-eye-invisible class="eye" @click="handelDecryptCard(modalForm.user_id)" />
|
||||
</div>
|
||||
<div class="box" v-show="showEye && modalSatus!='add'">
|
||||
<div class="cardNum">{{id_card_num}}</div>
|
||||
<icon-eye class="eye" @click="()=>{showEye=false}" />
|
||||
</div>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalSatus!='add'">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="user.mobile" label="联系电话:">
|
||||
<a-input v-model="modalForm.user.mobile" placeholder="请输入联系电话" :disabled="modalSatus=='edit'" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="multi_point_status" label="多点执业:">
|
||||
<span v-if="modalForm.multi_point_status==1">可处方</span>
|
||||
<span v-else>不可处方</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="hospital_id" label="医院名称:">
|
||||
<a-space direction="vertical" size="large">
|
||||
<a-select :style="{width:'400px'}" allow-search placeholder="请选择所在医院" v-model="hospital_name"
|
||||
:loading="loading" @change="changeHospital" @search="handleHospitalList">
|
||||
<a-option size="large" style="max-width:500px" v-for="item in hospitalData" :key="item.hospital_id"
|
||||
:value="item.hospital_id" :label="item.hospital_name">
|
||||
{{item.hospital_name+'('+item.province+item.city+item.county+')'}}
|
||||
</a-option>
|
||||
</a-select>
|
||||
</a-space>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="hospital.address" label="医院地址:">
|
||||
<a-input v-model="modalForm.hospital.address" placeholder="请输入医院地址" :disabled="true" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="department_custom_id" label="所在科室:">
|
||||
<a-select placeholder="请选择所在科室" v-model="modalForm.department_custom_id" >
|
||||
<a-option v-for="item in departmentData" :key="item.department_custom_id"
|
||||
:value="item.department_custom_id" :label="item.department_custom_name">
|
||||
{{item.department_custom_name}}
|
||||
</a-option>
|
||||
</a-select>
|
||||
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="department_custom_name" label="科室名称:">
|
||||
<a-input v-model="modalForm.department_custom_name" placeholder="请输入科室名称" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="doctor_title" label="职 称 :">
|
||||
<a-select placeholder="请选择所在职称" v-model="modalForm.doctor_title">
|
||||
<a-option v-for="item in doctor_title_data" :key="item.doctor_title" :value="item.doctor_title"
|
||||
:label="item.doctor_title_name">{{item.doctor_title_name}}</a-option>
|
||||
</a-select>
|
||||
<!-- <a-input v-model="doctor_title_name" placeholder="请输入职称" /> -->
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="department_custom_mobile" label="科室电话:">
|
||||
<a-input v-model="modalForm.department_custom_mobile" placeholder="请输入科室电话" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<!-- <a-row :gutter="24">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="user_doctor_info.qualification_cert_num" label="资格证编码:">
|
||||
<a-input v-model="modalForm.user_doctor_info.qualification_cert_num" placeholder="请输入资格证编码" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
||||
</a-row> -->
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="cur_doctor_expertise" label="专长:">
|
||||
<a-select multiple placeholder="请选择专长" v-model="modalForm.cur_doctor_expertise">
|
||||
<a-option v-for="item in expertiseData" :key="item.expertise_id" :value="item.expertise_id"
|
||||
:label="item.expertise_name">{{item.expertise_name}}</a-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="be_good_at" label="擅长信息:">
|
||||
<a-textarea :auto-size="{minRows:2}" :max-length="{length:1000,errorOnly:true}" allow-clear
|
||||
show-word-limit v-model="modalForm.be_good_at"
|
||||
placeholder="请填写医生擅长信息。内容为医生专业领域、擅长疾病、研究方法等信息(字数在10-1000字)" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="brief_introduction" label="个人简介:">
|
||||
<a-textarea :auto-size="{minRows:2}" :max-length="{length:1000,errorOnly:true}" allow-clear
|
||||
show-word-limit v-model="modalForm.brief_introduction"
|
||||
placeholder="请填写医生从业经历,职称和所获荣誉等信息(字数在10-1000字)" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider />
|
||||
<div class="titlebox">
|
||||
<div class="bar"></div>
|
||||
<div class="name">是否推荐</div>
|
||||
</div>
|
||||
<a-row :gutter="24" style="margin-top: 35px;">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="is_recommend" label="状态:">
|
||||
<a-space size="large">
|
||||
<a-switch checked-color="#14C9C9" :checked-value="1" :unchecked-value="0"
|
||||
v-model="modalForm.is_recommend" />
|
||||
</a-space>
|
||||
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12" v-if="modalForm.is_recommend==1">
|
||||
<div>理由:平台合作</div>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider />
|
||||
<div class="titlebox">
|
||||
<div class="bar"></div>
|
||||
<div class="name">平台合作</div>
|
||||
</div>
|
||||
<a-row :gutter="24" style="margin-top: 35px;">
|
||||
<a-col :span="4">
|
||||
<a-form-item field="is_platform_deep_cooperation" label="平台深度合作医生:">
|
||||
<a-space size="large">
|
||||
<a-switch checked-color="#14C9C9" :checked-value="1" :unchecked-value="0"
|
||||
v-model="modalForm.is_platform_deep_cooperation" />
|
||||
</a-space>
|
||||
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="20">
|
||||
<a-form-item field="is_sys_diagno_cooperation" label="先思达合作医生:">
|
||||
<a-space size="large">
|
||||
<a-switch checked-color="#14C9C9" :checked-value="1" :unchecked-value="0"
|
||||
v-model="modalForm.is_sys_diagno_cooperation" />
|
||||
</a-space>
|
||||
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider />
|
||||
<div class="titlebox">
|
||||
<div class="bar"></div>
|
||||
<div class="name">银行卡信息</div>
|
||||
</div>
|
||||
<a-row :gutter="24" style="margin-top: 35px;">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="doctor_bank_card.province_id" label="开户银行所在地:">
|
||||
<a-space size="large" style="margin-right: 12px;">
|
||||
省<a-select placeholder="请选择省份" :style="{minWidth:'120px'}" v-model="modalForm.doctor_bank_card.province_id" @change="changeProvice">
|
||||
<a-option v-for="item in provinceData" :key="item.area_id" :value="Number(item.area_id)"
|
||||
:label="item.area_name">{{item.area_name}}</a-option>
|
||||
</a-select>
|
||||
</a-space>
|
||||
<a-space size="large" style="margin-right: 12px;">
|
||||
市<a-select placeholder="请选择城市" :style="{minWidth:'140px'}" v-model="modalForm.doctor_bank_card.city_id"
|
||||
@change="changeCity">
|
||||
<a-option v-for="item in cityData" :key="item.area_id" :value="Number(item.area_id)"
|
||||
:label="item.area_name">{{item.area_name}}</a-option>
|
||||
</a-select>
|
||||
</a-space>
|
||||
<a-space size="large">
|
||||
区<a-select placeholder="请选择地区" :style="{minWidth:'140px'}"
|
||||
v-model="modalForm.doctor_bank_card.county_id">
|
||||
<a-option v-for="item in countryData" :key="item.area_id" :value="Number(item.area_id)"
|
||||
:label="item.area_name">{{item.area_name}}</a-option>
|
||||
</a-select>
|
||||
</a-space>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="doctor_bank_card.bank_id" label="开户银行:">
|
||||
<a-space size="large">
|
||||
<a-select v-model="modalForm.doctor_bank_card.bank_id" :style="{width:'220px'}">
|
||||
<a-option v-for="item in bankData" :key="item.bank_id" :value="item.bank_id"
|
||||
:label="item.bank_name"></a-option>
|
||||
</a-select>
|
||||
</a-space>
|
||||
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="bank_card_code" label="银行卡号:">
|
||||
<a-input v-model="modalForm.bank_card_code" placeholder="请输入银行卡号" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider />
|
||||
<div class="titlebox">
|
||||
<div class="bar"></div>
|
||||
<div class="name">医师证件</div>
|
||||
</div>
|
||||
<a-row :gutter="24" style="margin-top: 35px;"
|
||||
v-if="(modalForm.user_doctor_info.license_cert && modalForm.user_doctor_info.license_cert.length>0) || modalSatus!='detail'">
|
||||
|
||||
<a-col :span="24">
|
||||
<div class="titletip"><span
|
||||
class="arco-form-item-label-required-symbol red">*</span>医师执业证<span>(点击图片查看大图)</span></div>
|
||||
<a-form-item field="license_cert" :hide-label="true" :validate-trigger="['change']">
|
||||
<a-image-preview-group infinite>
|
||||
<a-space v-show="modalSatus=='detail'">
|
||||
<a-image width="120" height="120" fit="cover" v-for="item in modalForm.user_doctor_info.license_cert"
|
||||
show-loader :src="item" />
|
||||
</a-space>
|
||||
</a-image-preview-group>
|
||||
<upload v-show="modalSatus!='detail'" :isMultiple="true" :fileList="license_cert_list"
|
||||
:dataType="'license_cert_list'" @changeData="changeData"></upload>
|
||||
<!-- <a-upload v-show="modalSatus!='detail'" list-type="picture-card" @change="onChangeFile" accept="image/*"
|
||||
:file-list="license_cert_list" @before-upload="beforeUpload" action="/" :auto-upload="false"
|
||||
image-preview /> -->
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" style="margin-top: 35px;"
|
||||
v-if="(modalForm.user_doctor_info.qualification_cert && modalForm.user_doctor_info.qualification_cert.length>0) || modalSatus!='detail'">
|
||||
<a-col :span="24">
|
||||
<div class="titletip"><span
|
||||
class="arco-form-item-label-required-symbol red">*</span>医师资格证<span>(点击图片查看大图)</span></div>
|
||||
<a-form-item field="qualification_cert" label="" :hide-label="true">
|
||||
<a-image-preview-group infinite>
|
||||
<a-space v-show="modalSatus=='detail'">
|
||||
<a-image width="120" height="120" fit="cover"
|
||||
v-for="item in modalForm.user_doctor_info.qualification_cert" show-loader :src="item" />
|
||||
</a-space>
|
||||
</a-image-preview-group>
|
||||
<upload v-show="modalSatus!='detail'" :isMultiple="true" :fileList="qualification_cert_list"
|
||||
:dataType="'qualification_cert_list'" @changeData="changeData"></upload>
|
||||
|
||||
<!-- <a-upload v-show="modalSatus!='detail'" list-type="picture-card" :auto-upload="false"
|
||||
@change="onChangeFile" accept="image/*" :file-list="qualification_cert_list"
|
||||
@before-upload="beforeUpload" action="/" image-preview /> -->
|
||||
</a-form-item>
|
||||
<a-form-item field="user_doctor_info.qualification_cert_num" v-show="modalSatus=='detail'" label="资格证编号:" :hide-label="true">
|
||||
<div class="codbox">
|
||||
<div class="labelname">资格证编号:</div>
|
||||
<a-input v-model="modalForm.user_doctor_info.qualification_cert_num" style="width:500px" placeholder="请输入资格证编码" />
|
||||
</div>
|
||||
</a-form-item>
|
||||
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" style="margin-top: 35px;"
|
||||
v-if="(modalForm.user_doctor_info.work_cert && modalForm.user_doctor_info.work_cert.length>0) || modalSatus!='detail'">
|
||||
<a-col :span="24">
|
||||
<div class="titletip"><span
|
||||
class="arco-form-item-label-required-symbol red">*</span>医师职称证<span>(点击图片查看大图)</span></div>
|
||||
<a-form-item field="work_cert" label="" :hide-label="true">
|
||||
<a-image-preview-group infinite>
|
||||
<a-space v-show="modalSatus=='detail'">
|
||||
<a-image width="120" height="120" fit="cover" v-for="item in modalForm.user_doctor_info.work_cert"
|
||||
show-loader :src="item" />
|
||||
</a-space>
|
||||
</a-image-preview-group>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" style="margin-top: 35px;"
|
||||
v-if="modalForm.user_doctor_info.id_card_front || modalSatus!='detail' ">
|
||||
<a-col :span="24">
|
||||
<div class="titletip">医师身份证正面<span>(点击图片查看大图)</span></div>
|
||||
<a-form-item field="id_card_front" label="" no-style>
|
||||
<a-image-preview-group infinite>
|
||||
<a-space v-show="modalSatus=='detail'">
|
||||
<a-image width="120" height="120" fit="cover" show-loader
|
||||
:src="modalForm.user_doctor_info.id_card_front" />
|
||||
</a-space>
|
||||
</a-image-preview-group>
|
||||
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" style="margin-top: 35px;"
|
||||
v-if="modalForm.user_doctor_info.id_card_back || modalSatus!='detail' ">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="id_card_back" label="" no-style>
|
||||
<div class="titletip">医师身份证反面<span>(点击图片查看大图)</span></div>
|
||||
<a-image-preview-group infinite>
|
||||
<a-space v-show="modalSatus=='detail'">
|
||||
<a-image width="120" height="120" fit="cover" show-loader
|
||||
:src="modalForm.user_doctor_info.id_card_back" />
|
||||
</a-space>
|
||||
</a-image-preview-group>
|
||||
|
||||
<!-- <a-upload v-show="modalSatus!='detail'" :file-list="id_card_back_list" list-type="picture-card" action="/"
|
||||
:auto-upload="false" image-preview /> -->
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" style="margin-top: 35px;"
|
||||
v-if="modalForm.user_doctor_info.sign_image || modalSatus!='detail'">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="sign_image" label="" no-style>
|
||||
<div class="titletip">医师手写签名<span>(点击图片查看大图)</span></div>
|
||||
|
||||
<a-image-preview-group infinite>
|
||||
<a-space v-show="modalSatus=='detail'">
|
||||
<a-image width="120" height="120" fit="cover" show-loader
|
||||
:src="modalForm.user_doctor_info.sign_image" />
|
||||
</a-space>
|
||||
</a-image-preview-group>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" style="margin-top: 35px;" v-if="modalForm.qr_code && modalSatus!='add'">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="qr_code" label="" no-style>
|
||||
<div class="titletip">医师二维码<span>(点击图片查看大图)</span></div>
|
||||
<a-image-preview-group infinite>
|
||||
<a-space>
|
||||
<a-image width="120" height="120" fit="cover" show-loader :src="modalForm.qr_code" />
|
||||
</a-space>
|
||||
</a-image-preview-group>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider v-show="modalSatus!='detail'" />
|
||||
</a-form>
|
||||
<div class="titlebox" v-if="modalSatus!='detail'">
|
||||
<div class="bar"></div>
|
||||
<div class="name">操作</div>
|
||||
</div>
|
||||
<a-row :gutter="24" style="margin-top: 35px;" v-if="modalSatus!='detail'">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="" label="" no-style>
|
||||
<a-space v-if="modalSatus!='detail'" style="margin-right: 8px;">
|
||||
<a-button type="primary" @click="()=>okVisible=true">保存</a-button>
|
||||
</a-space>
|
||||
<!-- <a-space v-if="modalSatus=='edit'">
|
||||
<a-button type="primary" status="warning">拉黑</a-button>
|
||||
<a-button type="primary" status="danger">删除</a-button>
|
||||
</a-space> -->
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-modal>
|
||||
</template>
|
||||
<script setup>
|
||||
import { Message } from '@arco-design/web-vue';
|
||||
import { reactive, ref, getCurrentInstance,watch,toRefs,onMounted } from 'vue';
|
||||
import { getDoctorDetail, departmentList, decryptCard, hospitalList, expertiseList, areaList, bankList, decryptBank } from '@/api/doctor/list';
|
||||
import { ossSign, ossUpload } from '@/api/oss';
|
||||
import dayjs from 'dayjs'
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
// 是否显示
|
||||
doctorVisible: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
doctor_id:{
|
||||
type: String,
|
||||
default: '',
|
||||
}
|
||||
});
|
||||
const emits = defineEmits(['doctorVisibleChange']);
|
||||
const {doctorVisible,doctor_id} = toRefs(props);
|
||||
const modalTitle=ref('医生详情');
|
||||
const modalSatus=ref('detail');
|
||||
const loading = ref(false);
|
||||
watch(()=>props.doctorVisible,(value)=>{
|
||||
if(value){
|
||||
doctorVisible.value=value
|
||||
}
|
||||
})
|
||||
watch(()=>props.doctor_id,(value)=>{
|
||||
if(doctor_id){
|
||||
doctor_id.value=value
|
||||
handleDoctorDetail(value);
|
||||
}
|
||||
|
||||
})
|
||||
// Akiraka 20230210 关闭弹窗
|
||||
const handleClose = () => {
|
||||
emits('doctorVisibleChange', doctorVisible.value = false);
|
||||
// Akiraka 20230210 关闭弹窗
|
||||
doctorVisible.value = false;
|
||||
}
|
||||
const modalForm = reactive({
|
||||
hospital: {
|
||||
address: '',
|
||||
hospital_name: '',
|
||||
hospital_id: ''
|
||||
},
|
||||
user_doctor_info: {
|
||||
|
||||
},
|
||||
doctor_bank_card: {
|
||||
bank_card_province_id: '',
|
||||
bank_card_city_id: '',
|
||||
bank_card_county_id: '',
|
||||
bank_id: ''
|
||||
},
|
||||
user: {},
|
||||
doctor_id: '',
|
||||
license_cert: [],
|
||||
qualification_cert: [],
|
||||
work_cert: [],
|
||||
department_custom_name: '',
|
||||
user_id: '',
|
||||
status: 1,
|
||||
id_card_front: '',
|
||||
id_card_back: '',
|
||||
sign_image: '',
|
||||
card_num: null,
|
||||
cur_doctor_expertise: [],
|
||||
avatar: 'https://img.applets.igandanyiyuan.com/basic/file/doctor_avatar.png',
|
||||
bank_card_code: '',
|
||||
});
|
||||
const hospital_name = ref('');
|
||||
watch(() => modalForm.hospital, () => {
|
||||
if (modalForm.hospital && modalForm.hospital.hospital_name) {
|
||||
hospital_name.value = modalForm.hospital.hospital_name + '(' + modalForm.hospital.province + modalForm.hospital.city + modalForm.hospital.county + ')'
|
||||
} else {
|
||||
hospital_name.value = ''
|
||||
}
|
||||
}, {
|
||||
deep: true
|
||||
})
|
||||
//const doctor_expertise=ref([]);
|
||||
//证书计算
|
||||
const transArr = (arr) => {
|
||||
let newArr = [];
|
||||
if (arr instanceof Array) {
|
||||
arr.forEach((item) => {
|
||||
newArr.push({ url: item })
|
||||
});
|
||||
} else if (typeof arr == "string") {
|
||||
newArr.push({ url: arr })
|
||||
}
|
||||
return newArr
|
||||
};
|
||||
|
||||
const changeData = (value) => {
|
||||
switch (value.type) {
|
||||
case 'license_cert_list':
|
||||
if (value.dealType == "add") {
|
||||
license_cert_list.value.push({
|
||||
url: value.url
|
||||
})
|
||||
} else {
|
||||
license_cert_list.value.splice(license_cert_list.value.findIndex(item => item.url === value.url), 1)
|
||||
}
|
||||
break;
|
||||
case 'qualification_cert_list':
|
||||
if (value.dealType == "add") {
|
||||
qualification_cert_list.value.push({
|
||||
url: value.url
|
||||
})
|
||||
} else {
|
||||
qualification_cert_list.value.splice(qualification_cert_list.value.findIndex(item => item.url === value.url), 1)
|
||||
}
|
||||
break;
|
||||
case 'work_cert_list':
|
||||
if (value.dealType == "add") {
|
||||
work_cert_list.value.push({
|
||||
url: value.url
|
||||
})
|
||||
} else {
|
||||
work_cert_list.value.splice(work_cert_list.value.findIndex(item => item.url === value.url), 1)
|
||||
}
|
||||
break;
|
||||
case 'id_card_front_list':
|
||||
if (value.dealType == "add") {
|
||||
id_card_front_list.value.push({
|
||||
url: value.url
|
||||
})
|
||||
} else {
|
||||
id_card_front_list.value.splice(id_card_front_list.value.findIndex(item => item.url === value.url), 1)
|
||||
}
|
||||
break;
|
||||
case 'id_card_back_list':
|
||||
if (value.dealType == "add") {
|
||||
id_card_back_list.value.push({
|
||||
url: value.url
|
||||
})
|
||||
} else {
|
||||
id_card_back_list.value.splice(id_card_back_list.value.findIndex(item => item.url === value.url), 1)
|
||||
}
|
||||
break;
|
||||
case 'sign_image_list':
|
||||
if (value.dealType == "add") {
|
||||
sign_image_list.value.push({
|
||||
url: value.url
|
||||
})
|
||||
} else {
|
||||
sign_image_list.value.splice(sign_image_list.value.findIndex(item => item.url === value.url), 1)
|
||||
}
|
||||
|
||||
}
|
||||
// console.log(value);
|
||||
// console.log([`${value.type}.value`]);
|
||||
|
||||
//[value.type].value=[value.type].value.concat([{url:value.url}]);
|
||||
}
|
||||
//
|
||||
const license_cert_list = ref([]);
|
||||
const qualification_cert_list = ref([]);
|
||||
const work_cert_list = ref([]);
|
||||
const id_card_front_list = ref([]);
|
||||
const id_card_back_list = ref([]);
|
||||
const sign_image_list = ref([]);
|
||||
watch(() => license_cert_list.value, (value) => {
|
||||
let arr = []
|
||||
value.forEach((item) => {
|
||||
arr.push(item.url)
|
||||
});
|
||||
|
||||
modalForm.license_cert = arr;
|
||||
|
||||
}, { deep: true });
|
||||
watch(() => qualification_cert_list.value, (value) => {
|
||||
let arr = []
|
||||
value.forEach((item) => {
|
||||
arr.push(item.url)
|
||||
});
|
||||
modalForm.qualification_cert = arr;
|
||||
}, { deep: true });
|
||||
|
||||
watch(() => work_cert_list.value, (value) => {
|
||||
let arr = []
|
||||
value.forEach((item) => {
|
||||
arr.push(item.url)
|
||||
});
|
||||
modalForm.work_cert = arr;
|
||||
}, { deep: true });
|
||||
|
||||
watch(() => id_card_front_list.value, (value) => {
|
||||
if (value.length > 0) {
|
||||
modalForm.id_card_front = value[0].url;
|
||||
} else {
|
||||
modalForm.id_card_front = ''
|
||||
}
|
||||
}, { deep: true });
|
||||
watch(() => id_card_back_list.value, (value) => {
|
||||
value.length > 0 ? modalForm.id_card_back = value[0].url : modalForm.id_card_back = ''
|
||||
}, { deep: true });
|
||||
watch(() => sign_image_list.value, (value) => {
|
||||
if (value.length > 0) {
|
||||
modalForm.sign_image = value[0].url;
|
||||
} else {
|
||||
modalForm.sign_image = ''
|
||||
}
|
||||
}, { deep: true });
|
||||
// Rules
|
||||
const rules = {
|
||||
avatar: [{ required: true, message: '请上传医生头像' }],
|
||||
user_name: [
|
||||
{ required: true, message: '请输入医生名字' },
|
||||
{
|
||||
validator: (value, cb) => {
|
||||
let reg = /^([\u4e00-\u9fa5\·]{2,10})$/;
|
||||
if (!reg.test(value)) {
|
||||
cb('姓名要求在2-10个汉字');
|
||||
}
|
||||
}
|
||||
}],
|
||||
card_num: [
|
||||
{ required: true, message: '请输入身份证号' },
|
||||
{
|
||||
validator: (value, cb) => {
|
||||
let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
|
||||
if (!reg.test(value)) {
|
||||
cb('身份证号码格式不正确');
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
'user.mobile': [
|
||||
{ required: true, message: '请输入手机号' },
|
||||
{
|
||||
validator: (value, cb) => {
|
||||
let reg = /^1[3456789]\d{9}$/;
|
||||
if (!reg.test(value)) {
|
||||
cb('手机号码格式不正确');
|
||||
}
|
||||
}
|
||||
}],
|
||||
'hospital.address': [{ required: true, message: '请输入医院地址' }],
|
||||
'hospital_id': [{ required: true, message: '请选择医院名称' }],
|
||||
'department_custom_mobile': [{
|
||||
required: true, message: '请输入科室电话'
|
||||
}],
|
||||
department_custom_id: [{ required: true, message: '请选择所在科室' }],
|
||||
department_custom_name: [{ required: true, message: '请输入科室名称' }],
|
||||
doctor_title: [{ required: true, message: '请选择职称' }],
|
||||
// 'user_doctor_info.qualification_cert_num': [{ required: true, message: '请输入资格证编码' }],
|
||||
cur_doctor_expertise: [
|
||||
{ type: 'array', required: true, message: '请选择专长' },
|
||||
{
|
||||
validator: (value, cb) => {
|
||||
if (value.length > 10) {
|
||||
cb("专长不能超过10项")
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
be_good_at: [{ required: true, message: '请输入擅长内容', maxLength: 1000, minLength: 2 }],
|
||||
brief_introduction: [{ required: true, message: '请输入简介', maxLength: 1000, minLength: 2 }],
|
||||
license_cert: [
|
||||
{
|
||||
validator: (value, cb) => {
|
||||
return new Promise(resolve => {
|
||||
window.setTimeout(() => {
|
||||
if (license_cert_list.value.length < 2) {
|
||||
cb("至少上传2张医师执业证照片")
|
||||
}
|
||||
resolve()
|
||||
}, 1000)
|
||||
})
|
||||
|
||||
}
|
||||
}],
|
||||
qualification_cert: [
|
||||
{
|
||||
validator: (value, cb) => {
|
||||
return new Promise(resolve => {
|
||||
window.setTimeout(() => {
|
||||
if (qualification_cert_list.value.length == 0) {
|
||||
cb("请上传医师资格证")
|
||||
}
|
||||
resolve()
|
||||
}, 1000)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
],
|
||||
work_cert: [
|
||||
{
|
||||
validator: (value, cb) => {
|
||||
return new Promise(resolve => {
|
||||
window.setTimeout(() => {
|
||||
if (work_cert_list.value.length == 0) {
|
||||
cb("请上传医师职称证")
|
||||
}
|
||||
resolve()
|
||||
}, 1000)
|
||||
})
|
||||
|
||||
}
|
||||
}
|
||||
],
|
||||
};
|
||||
const doctor_title_data = [
|
||||
{
|
||||
doctor_title: 1,
|
||||
doctor_title_name: '主任医师'
|
||||
},
|
||||
{
|
||||
doctor_title: 2,
|
||||
doctor_title_name: '主任中医师'
|
||||
},
|
||||
{
|
||||
doctor_title: 3,
|
||||
doctor_title_name: '副主任医师'
|
||||
},
|
||||
{
|
||||
doctor_title: 4,
|
||||
doctor_title_name: '副主任中医师'
|
||||
},
|
||||
{
|
||||
doctor_title: 5,
|
||||
doctor_title_name: '主治医师'
|
||||
},
|
||||
{
|
||||
doctor_title: 6,
|
||||
doctor_title_name: '住院医师'
|
||||
}
|
||||
]
|
||||
//详情
|
||||
const handleDoctorDetail = async (doctor_id) => {
|
||||
|
||||
const { code, data, message } = await getDoctorDetail(doctor_id);
|
||||
|
||||
if (code == 200) {
|
||||
Object.assign(modalForm, data);
|
||||
if (!data.hospital) {
|
||||
modalForm.hospital = {};
|
||||
}
|
||||
if(data.doctor_title==0){
|
||||
modalForm.doctor_title='';
|
||||
}
|
||||
if(data.hospital_id==0){
|
||||
modalForm.hospital_id='';
|
||||
}
|
||||
if(data.department_custom_id==0){
|
||||
modalForm.department_custom_id=''
|
||||
}
|
||||
if (!data.user_doctor_info) {
|
||||
data.user_doctor_info = {};
|
||||
modalForm.user_doctor_info = {};
|
||||
}
|
||||
if (data.doctor_expertise && data.doctor_expertise.length > 0) {
|
||||
let arr = [];
|
||||
data.doctor_expertise.forEach((item) => {
|
||||
arr.push(item.expertise_id)
|
||||
})
|
||||
handleDecryptBank();
|
||||
if (data.doctor_bank_card && data.doctor_bank_card.province_id) {
|
||||
handelAreaList('', data.doctor_bank_card.province_id, 3);
|
||||
}
|
||||
if (data.doctor_bank_card && data.doctor_bank_card.city_id) {
|
||||
handelAreaList('', data.doctor_bank_card.city_id, 4);
|
||||
}
|
||||
if(data.doctor_bank_card){
|
||||
let obj=data.doctor_bank_card;
|
||||
for (const key in obj) {
|
||||
if(obj[key]==0){
|
||||
modalForm.doctor_bank_card[key]=''
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
modalForm.cur_doctor_expertise = arr;
|
||||
}
|
||||
}
|
||||
};
|
||||
const departmentData = ref([]);
|
||||
//获取科室列表
|
||||
const getDepartmentList = () => {
|
||||
departmentList().then((res) => {
|
||||
const { data, code, message } = res;
|
||||
if (code == 200) {
|
||||
departmentData.value = data;
|
||||
}
|
||||
});
|
||||
}
|
||||
//切换小眼睛
|
||||
const showEye = ref(false);
|
||||
const id_card_num = ref('');
|
||||
//解密身份证号码
|
||||
const handelDecryptCard = async (user_id) => {
|
||||
showEye.value = true;
|
||||
const { data, code, message } = await decryptCard({
|
||||
user_id
|
||||
});
|
||||
if (code == 200) {
|
||||
id_card_num.value = data;
|
||||
}
|
||||
};
|
||||
const hospitalData = ref([]);
|
||||
const changeHospital = (value) => {
|
||||
let arr = hospitalData.value.filter((item) => item.hospital_id == value);
|
||||
modalForm.hospital_id = arr[0].hospital_id;
|
||||
modalForm.hospital = arr[0];
|
||||
}
|
||||
//获取医院列表
|
||||
const handleHospitalList = (value) => {
|
||||
loading.value = true;
|
||||
hospitalList({
|
||||
hospital_name: value,
|
||||
}).then((res) => {
|
||||
const { data, code, message } = res;
|
||||
if (code == 200) {
|
||||
|
||||
hospitalData.value = data;
|
||||
loading.value = false;
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
const expertiseData = ref([]);
|
||||
// 获取专长列表
|
||||
|
||||
// 获取专长列表
|
||||
const handlExpertiseList = () => {
|
||||
expertiseList().then((res) => {
|
||||
const { data, code, message } = res;
|
||||
if (code == 200) {
|
||||
expertiseData.value = data;
|
||||
}
|
||||
})
|
||||
}
|
||||
const provinceData = ref([]);
|
||||
const cityData = ref([]);
|
||||
const countryData = ref([]);
|
||||
//获取区域列表
|
||||
const handelAreaList = (area_id = '', parent_id = '', area_type) => {
|
||||
areaList({
|
||||
area_id,
|
||||
area_type,
|
||||
parent_id
|
||||
}).then((res) => {
|
||||
const { data, code, message } = res;
|
||||
if (code == 200) {
|
||||
if (area_type == 2) {
|
||||
provinceData.value = data;
|
||||
}
|
||||
if (area_type == 3) {
|
||||
cityData.value = data;
|
||||
};
|
||||
if (area_type == 4) {
|
||||
countryData.value = data;
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
})
|
||||
}
|
||||
//切换省份
|
||||
const changeProvice = (value) => {
|
||||
modalForm.doctor_bank_card.city_id = '';
|
||||
modalForm.doctor_bank_card.county_id = '';
|
||||
handelAreaList('', value, 3);
|
||||
};
|
||||
//切换省份
|
||||
const changeCity = (value) => {
|
||||
modalForm.doctor_bank_card.county_id = '';
|
||||
handelAreaList("", value, 4);
|
||||
|
||||
}
|
||||
const handleDecryptBank = () => {
|
||||
decryptBank(modalForm.doctor_id).then((res) => {
|
||||
const { data, code, message } = res;
|
||||
if (code == 200) {
|
||||
modalForm.bank_card_code = data;
|
||||
}
|
||||
})
|
||||
}
|
||||
const bankData = ref([])
|
||||
const handleBankList = () => {
|
||||
bankList().then((res) => {
|
||||
const { data, code, message } = res;
|
||||
if (code == 200) {
|
||||
bankData.value = data;
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
//获取oss签名
|
||||
const getOssSign = async (scene, File) => {
|
||||
const { data, code, message } = await ossSign({
|
||||
user_type: 4,
|
||||
scene,
|
||||
});
|
||||
if (code == 200) {
|
||||
let { access_id, dir, policy, signature, host } = data;
|
||||
//let index = File.lastIndexOf("/");
|
||||
let filename = File.name;
|
||||
let time = dayjs().format("YYYYMMDDHHmmss")
|
||||
let formData = new FormData();
|
||||
formData.append('OSSAccessKeyId', access_id);
|
||||
formData.append('policy', policy);
|
||||
formData.append('signature', signature);
|
||||
formData.append('key', dir + time + filename);
|
||||
formData.append('success_action_status', 200);
|
||||
formData.append('file', File, filename);
|
||||
ossUpload(host, formData).then((res) => {
|
||||
modalForm.avatar = host + "/" + dir + time + filename;
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
//上传前验证
|
||||
const beforeUpload = (file, type) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (file.size >= 10 * 1024 * 1024) {
|
||||
proxy.$notification.error("图片大小不能超过10M");
|
||||
reject('cancel')
|
||||
} else {
|
||||
resolve(true)
|
||||
}
|
||||
});
|
||||
};
|
||||
const filterOption = (value, options) => {
|
||||
console.log(value, options)
|
||||
}
|
||||
//上传文件
|
||||
const onChangeFile = (fileList) => {
|
||||
|
||||
getOssSign(1, fileList[0].file);
|
||||
}
|
||||
onMounted(()=>{
|
||||
handleHospitalList();
|
||||
getDepartmentList();
|
||||
handlExpertiseList();
|
||||
handelAreaList("", "", 2);
|
||||
handleBankList();
|
||||
})
|
||||
</script>
|
||||
<style scoped>
|
||||
.hospital_name {
|
||||
width: 140px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
|
||||
.headImg {
|
||||
margin-right: 20px;
|
||||
border-radius: 50%;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
}
|
||||
|
||||
.arco-form-item-layout-horizontal:first-child,
|
||||
.arco-form-item-layout-horizontal:nth-child(2) {
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.upload {
|
||||
margin-left: 20px;
|
||||
}
|
||||
|
||||
.eye {
|
||||
margin-left: 20px;
|
||||
cursor: pointer;
|
||||
font-size: 18px;
|
||||
}
|
||||
|
||||
.box {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.cert .arco-form-item-label-col {
|
||||
flex: 0 0 8px !important;
|
||||
}
|
||||
|
||||
.red {
|
||||
display: inline-block;
|
||||
margin-right: 5px;
|
||||
font-size: 14px;
|
||||
color: red;
|
||||
margin-top: 5px;
|
||||
}
|
||||
|
||||
.cardNum {
|
||||
width: 148px;
|
||||
}
|
||||
.codbox{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
</style>
|
||||
67
src/components/isOkModal.vue
Normal file
67
src/components/isOkModal.vue
Normal file
@ -0,0 +1,67 @@
|
||||
<template>
|
||||
<a-modal v-model:visible="isVisible" :modal-style="{width:'420px'}" body-class="okmodal" @ok="handleConfirm"
|
||||
@cancel="handleClose" >
|
||||
<template #title>
|
||||
提示
|
||||
</template>
|
||||
{{ title }}
|
||||
<!-- <template #footer>
|
||||
<a-button @click="handleClose"><template #icon><icon-close /></template>取消</a-button>
|
||||
<a-button type="primary" @click="handleConfirm"><template #icon><icon-check /></template>确认</a-button>
|
||||
</template> -->
|
||||
|
||||
</a-modal>
|
||||
</template>
|
||||
<script setup>
|
||||
import {toRefs, getCurrentInstance } from 'vue';
|
||||
import { Message } from '@arco-design/web-vue';
|
||||
const { proxy } = getCurrentInstance();
|
||||
const props = defineProps({
|
||||
// 是否显示
|
||||
isVisible: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
id:{
|
||||
type: String,
|
||||
default:'',
|
||||
},
|
||||
// 更新接口
|
||||
api: {
|
||||
type: Function,
|
||||
},
|
||||
title:{
|
||||
type: String,
|
||||
default:'',
|
||||
}
|
||||
});
|
||||
const emits = defineEmits(['closeChangeOk']);
|
||||
const {isVisible,title,id,api} = toRefs(props);
|
||||
// Akiraka 20230210 关闭弹窗
|
||||
const handleClose = () => {
|
||||
emits('closeChangeOk',false);
|
||||
// alert(flag)
|
||||
}
|
||||
|
||||
// Akiraka 20230210 确认按钮 => 开始数据检查
|
||||
const handleConfirm = async () => {
|
||||
const {code}=api.value(id.value);
|
||||
if(code==200){
|
||||
Message.success("成功");
|
||||
proxy.$refs.modalFormRef.resetFields();
|
||||
}else{
|
||||
proxy.$notification.error(response.message);
|
||||
}
|
||||
emits('closeChangeOk',true);
|
||||
// api.value(id.value).then(response => {
|
||||
// // Akiraka 20230210 关闭弹窗
|
||||
// if(response.code==200){
|
||||
// Message.success("成功");
|
||||
// proxy.$refs.modalFormRef.resetFields();
|
||||
// }else{
|
||||
// proxy.$notification.error(response.message);
|
||||
// }
|
||||
// emits('closeChangeOk',true);
|
||||
// })
|
||||
}
|
||||
</script>
|
||||
259
src/components/patientModal.vue
Normal file
259
src/components/patientModal.vue
Normal file
@ -0,0 +1,259 @@
|
||||
<template>
|
||||
<a-modal
|
||||
v-model:visible="patientVisible"
|
||||
fullscreen
|
||||
:title="modalTitle"
|
||||
title-align="start"
|
||||
:footer="false"
|
||||
@cancel="handleClose"
|
||||
>
|
||||
<div class="titlebox">
|
||||
<div class="bar"></div>
|
||||
<div class="name">基本信息</div>
|
||||
</div>
|
||||
<a-form
|
||||
:model="data"
|
||||
:disabled="modalSatus == 'detail'"
|
||||
ref="modalFormRef"
|
||||
:auto-label-width="true"
|
||||
>
|
||||
<a-row :gutter="24" style="margin-top: 35px">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="avatar" label="真实姓名:">
|
||||
<span
|
||||
>{{ data.name }}({{ data.sex == 1 ? '男,' : '女,'
|
||||
}}{{ data.age }}岁)</span
|
||||
>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<!-- <a-col :span="12" >
|
||||
<a-form-item field="mobile" label="手机号码:">
|
||||
<span>{{data.mobile}}</span>
|
||||
</a-form-item>
|
||||
</a-col> -->
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12" v-if="data.disease_class_name">
|
||||
<a-form-item field="avatar" label="所患疾病:">
|
||||
<span>{{ data.disease_class_name }}</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12" v-if="data.diagnosis_date">
|
||||
<a-form-item field="mobile" label="确诊日期:" >
|
||||
<span v-if="parseTime(data.diagnosis_date)">{{parseTime(data.diagnosis_date,'{y}-{m}-{d}') }}</span>
|
||||
<span v-else>-</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12" v-if="data.disease_desc">
|
||||
<a-form-item field="mobile" label="病情主诉:" >
|
||||
<span>{{ data.disease_desc }}</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider />
|
||||
<div class="titlebox">
|
||||
<div class="bar"></div>
|
||||
<div class="name">其他信息</div>
|
||||
</div>
|
||||
<a-col style="margin-top: 35px;">
|
||||
<div class="box" v-if="otherList.length>0">
|
||||
<div class="row" v-for="(item,index) in otherList" :key="item.type">
|
||||
<div class="num">{{index+1}}、</div>
|
||||
<div class="qabox" v-if="item.infoType==1">
|
||||
<div class="qa">
|
||||
{{item.name}}
|
||||
<text class="answer" v-if="item.status==1">是</text><text class="answer" v-else>否</text>
|
||||
</div>
|
||||
<div class="radiotip" v-if="(item.status==1 && item.desc)">
|
||||
<text>{{item.nameTip}}</text>
|
||||
{{item.desc}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="qabox" v-else-if="item.infoType==2">
|
||||
<div class="qa">
|
||||
{{item.name}}
|
||||
<text class="answer" v-if="item.status==1">从不</text>
|
||||
<text class="answer" v-else-if="item.status==2">偶尔</text>
|
||||
<text class="answer" v-else-if="item.status==3">经常 </text>
|
||||
<text class="answer" v-else-if="item.status==4">每天</text>
|
||||
<text class="answer" v-else>
|
||||
<text v-if="item.type=='smoke'">已戒烟</text>
|
||||
<text v-else>已戒酒</text>
|
||||
</text>
|
||||
</div>
|
||||
</div>
|
||||
<div class="qabox" v-else-if="item.infoType==3">
|
||||
<div class="qa">
|
||||
{{item.name}}
|
||||
<text class="answer" v-if="item.status==1">从不</text>
|
||||
<text class="answer" v-else-if="item.status==2">偶尔</text>
|
||||
<text class="answer" v-else-if="item.status==3">经常 </text>
|
||||
<text class="answer" v-else-if="item.status==4">每天</text>
|
||||
</div>
|
||||
<div class="radiotip" v-if="(item.status && item.status!=1)">
|
||||
<text>{{item.nameTip}}</text>
|
||||
{{item.desc}}
|
||||
</div>
|
||||
</div>
|
||||
<div class="qabox" v-else-if="item.infoType==4">
|
||||
<div class="qa">
|
||||
{{item.name}}
|
||||
<text class="answer" >{{item.desc}}</text>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>暂无数据!</div>
|
||||
</a-col>
|
||||
</a-form>
|
||||
</a-modal>
|
||||
</template>
|
||||
<script setup>
|
||||
import {
|
||||
reactive,
|
||||
ref,
|
||||
getCurrentInstance,
|
||||
watch,
|
||||
toRefs,
|
||||
|
||||
} from 'vue';
|
||||
import { parseTime } from '@/utils/parseTime';
|
||||
const otherList=ref([]);
|
||||
const props = defineProps({
|
||||
// 是否显示
|
||||
patientVisible: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
data: {
|
||||
type: Object,
|
||||
},
|
||||
});
|
||||
const emits = defineEmits(['patientVisibleChange']);
|
||||
const { patientVisible, data } = toRefs(props);
|
||||
const modalTitle = ref('就诊人详情');
|
||||
const modalSatus = ref('detail');
|
||||
const loading = ref(false);
|
||||
|
||||
watch(
|
||||
() => props.patientVisible,
|
||||
(value) => {
|
||||
if (value) {
|
||||
patientVisible.value = value;
|
||||
}
|
||||
}
|
||||
);
|
||||
watch(()=>props.data,(data)=>{
|
||||
let filter1=[];
|
||||
let filter2=[];
|
||||
let arr=[
|
||||
{
|
||||
type:"taboo",
|
||||
name:'是否服用过您想购买的药品且无相关禁忌:',
|
||||
nameTip:'',
|
||||
status:data.is_taboo,
|
||||
desc:"",
|
||||
infoType:1
|
||||
},
|
||||
{
|
||||
type:"allergy_history",
|
||||
name:'是否有过敏史:',
|
||||
nameTip:'过敏史:',
|
||||
infoType:1,
|
||||
status:data.is_allergy_history,
|
||||
desc:data.allergy_history
|
||||
},
|
||||
{
|
||||
type:"family_history",
|
||||
name:'是否有家族史:',
|
||||
nameTip:'家族史:',
|
||||
infoType:1,
|
||||
status:data.is_family_history,
|
||||
desc:data.family_history
|
||||
},
|
||||
{
|
||||
infoType:1,
|
||||
type:"pregnant",
|
||||
name:'是否处于备孕、妊娠、哺乳期:',
|
||||
nameTip:'',
|
||||
status:data.is_pregnant,
|
||||
desc:data.pregnant
|
||||
},
|
||||
{ infoType:1,
|
||||
type:"operation",
|
||||
name:'是否做过手术:',
|
||||
nameTip:'手术史',
|
||||
status:data.is_operation,
|
||||
desc:data.operation
|
||||
},
|
||||
{
|
||||
infoType:2,
|
||||
type:"drink_wine",
|
||||
name:'是否有饮酒史:',
|
||||
nameTip:'',
|
||||
status:data.drink_wine_status,
|
||||
desc:''
|
||||
},
|
||||
{
|
||||
infoType:2,
|
||||
type:"smoke",
|
||||
name:'是否有吸烟史:',
|
||||
nameTip:'',
|
||||
status:data.smoke_status,
|
||||
desc:''
|
||||
},
|
||||
{
|
||||
infoType:3,
|
||||
type:"chemical",
|
||||
name:'是否有接触过化学物:',
|
||||
nameTip:'接触过的化学物:',
|
||||
status:data.chemical_compound_status,
|
||||
desc:data.chemical_compound_describe
|
||||
},
|
||||
{
|
||||
infoType:4,
|
||||
type:'hospital',
|
||||
name:'确诊医院:',
|
||||
status:'',
|
||||
nameTip:'',
|
||||
desc:data.diagnosis_hospital
|
||||
},
|
||||
{
|
||||
type:"takeMedince",
|
||||
name:'是否服药:',
|
||||
nameTip:'正在服药:',
|
||||
status:data.is_take_medicine,
|
||||
desc:data.drugs_name,
|
||||
infoType:1
|
||||
}
|
||||
]
|
||||
if(data.sex==1){
|
||||
filter1=arr.filter((item)=>{
|
||||
return item.type!="pregnant"
|
||||
});
|
||||
}else{
|
||||
filter1=arr;
|
||||
}
|
||||
if(!data.diagnosis_hospital){
|
||||
filter2=filter1.filter((item)=>{
|
||||
return item.type!="hospital"
|
||||
});
|
||||
}else{
|
||||
filter2=filter1
|
||||
}
|
||||
let newarr=filter2.filter((item)=>{
|
||||
return item.status!=null
|
||||
});
|
||||
console.log(newarr)
|
||||
otherList.value=newarr;
|
||||
},{immediate:true,deep:true})
|
||||
// Akiraka 20230210 关闭弹窗
|
||||
const handleClose = () => {
|
||||
emits('patientVisibleChange', (patientVisible.value = false));
|
||||
// Akiraka 20230210 关闭弹窗
|
||||
patientVisible.value = false;
|
||||
//otherList.value=[];
|
||||
};
|
||||
</script>
|
||||
224
src/components/prescription.vue
Normal file
224
src/components/prescription.vue
Normal file
@ -0,0 +1,224 @@
|
||||
<template>
|
||||
<div class="container">
|
||||
<img src="../assets/hasuse.png" alt="" srcset="" class="status">
|
||||
<div class="header">
|
||||
<div class="chufang">普通处方</div>
|
||||
<div class="title">
|
||||
成都金牛欣欣相照互联网医院
|
||||
</div>
|
||||
<div class="title titlename">电子处方签</div>
|
||||
<div class="sicknum">处方号:<span>{{data.prescription_code}}</span></div>
|
||||
</div>
|
||||
<div class="table">
|
||||
<div class="row">
|
||||
<div class="left">
|
||||
<div class="name">日期:</div>
|
||||
<div class="desc">{{data.doctor_created_time}}</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="name">科室:</div>
|
||||
<div class="desc">内科</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="left">
|
||||
<div class="name">姓名:</div>
|
||||
<div class="desc">陈晓丽</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="name">性别:</div>
|
||||
<div class="desc">女</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="left">
|
||||
<div class="name">过敏史:</div>
|
||||
<div class="desc">无</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="left">
|
||||
<div class="name">初步判断:</div>
|
||||
<div class="desc">急性扁桃体炎</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="left">
|
||||
<div class="name">医生建议:</div>
|
||||
<div class="desc">急性扁桃体炎急性扁桃体炎急性扁桃体炎急性扁桃体炎急性扁桃体炎急性扁桃体炎急性扁桃体炎急性扁桃体炎急性扁桃体炎急性扁桃体炎急</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="rp">
|
||||
<div class="text">Rp</div>
|
||||
<div class="line"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="yaofang">
|
||||
<div class="row">
|
||||
<div class="name">我是电动车颗粒(50mg*11袋)</div>
|
||||
<div class="num">x1盒</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="name">用量:一次100mg 一日两次</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="name">用法:口服</div>
|
||||
</div>
|
||||
<div class="squre">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="signbox">
|
||||
<div class="row">
|
||||
<div class="left">
|
||||
<div class="name">医生签名:</div>
|
||||
<div class="desc">xxx</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="name">药师签名:</div>
|
||||
<div class="desc">xxx</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="left">
|
||||
<div class="name">配药人员:</div>
|
||||
<div class="desc">xxx</div>
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="name">复核人员:</div>
|
||||
<div class="desc">xxx</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tips">注意:处方有效期为3天,经本院审方中心审核通过后具有效力。</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup>
|
||||
import { toRefs} from 'vue';
|
||||
const props = defineProps({
|
||||
// 数组名称
|
||||
data: {
|
||||
type: Object,
|
||||
}
|
||||
|
||||
});
|
||||
const {data} = toRefs(props);
|
||||
</script>
|
||||
<style scoped>
|
||||
.container{
|
||||
box-shadow: 0 0 10px 0 #ccc;
|
||||
overflow: hidden;
|
||||
width:600px;
|
||||
height:auto;
|
||||
position: relative;
|
||||
border-radius:5px;
|
||||
padding:15px;
|
||||
background-color: #fff;;
|
||||
margin: 10px 0;
|
||||
}
|
||||
.header{
|
||||
position: relative;
|
||||
margin:48px 10px 0;
|
||||
font-size: 18px;
|
||||
text-align: center;
|
||||
border-bottom: 1px dashed #000;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
.status{
|
||||
position: absolute;
|
||||
width:140px;
|
||||
height:140px;
|
||||
z-index:9;
|
||||
top:20px;
|
||||
left:20px;
|
||||
}
|
||||
.titlename{
|
||||
margin-top: 15px;
|
||||
}
|
||||
.chufang{
|
||||
left:10px;
|
||||
position: absolute;
|
||||
top:-30px;
|
||||
width: 40px;
|
||||
font-size:20px;
|
||||
}
|
||||
.sicknum{
|
||||
text-align: right;
|
||||
font-size: 14px;
|
||||
margin:0 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.sicknum span{
|
||||
font-size: 13px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.table{
|
||||
margin:0 10px;
|
||||
}
|
||||
.table .row{
|
||||
margin: 8px 0;
|
||||
display: flex;
|
||||
font-size: 14px;
|
||||
}
|
||||
.row .left,.row .right{
|
||||
flex:1;
|
||||
display: flex;
|
||||
}
|
||||
.row .left .name,.row .right .name{
|
||||
white-space:nowrap;
|
||||
}
|
||||
.desc{
|
||||
flex:1;
|
||||
font-weight: bold;
|
||||
margin-left: 12px;
|
||||
}
|
||||
.rp{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
.text{
|
||||
margin-right: 8px;
|
||||
}
|
||||
.line{
|
||||
flex:1;
|
||||
height:1px;
|
||||
background:#000;
|
||||
}
|
||||
.yaofang{
|
||||
margin:15px 10px 0;
|
||||
}
|
||||
.yaofang .row{
|
||||
font-size: 14px;
|
||||
display: flex;
|
||||
margin:5px 0px;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.squre{
|
||||
margin-top: -20px;
|
||||
position: relative;
|
||||
width: 100%;
|
||||
height:0;
|
||||
padding-bottom: 50%;
|
||||
background:red;
|
||||
border-bottom:1px solid #000;
|
||||
background:linear-gradient(to bottom right,rgba(0,0,0,0) 0%,rgba(0,0,0,0)calc(50% - 1px),rgba(0,0,0,1)50%,rgba(0,0,0,0)calc(50% + 1px),rgba(0,0,0,0)100%)
|
||||
}
|
||||
.signbox{
|
||||
margin-top: 10px;
|
||||
}
|
||||
.signbox .row{
|
||||
font-size: 14px;
|
||||
margin:5px 10px;
|
||||
display: flex;
|
||||
}
|
||||
.tips{
|
||||
margin:15px 10px;
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
.yaofang .row{
|
||||
line-height: 22px;
|
||||
}
|
||||
</style>
|
||||
29
src/components/tableUnit.vue
Normal file
29
src/components/tableUnit.vue
Normal file
@ -0,0 +1,29 @@
|
||||
<template>
|
||||
|
||||
<a-table :columns="columns" :data="data" :pagination="pagination">
|
||||
<template #url="{ record }" wx:if="record.url">
|
||||
<a :href="record.url" target="_blank">查看处方</a>
|
||||
</template>
|
||||
</a-table>
|
||||
</template>
|
||||
<script setup>
|
||||
import { watch,toRefs } from 'vue';
|
||||
const props = defineProps({
|
||||
// 数组名称
|
||||
data: {
|
||||
type: Array,
|
||||
},
|
||||
pagination:{
|
||||
type: Boolean,
|
||||
default:true
|
||||
},
|
||||
columns:{
|
||||
type: Array
|
||||
}
|
||||
});
|
||||
|
||||
const { data, columns,pagination} = toRefs(props);
|
||||
// watch(()=>props.data,(value)=>{
|
||||
// data.value=value;
|
||||
// },{immediate:true})
|
||||
</script>
|
||||
@ -7,7 +7,6 @@ import '@arco-design/web-vue/dist/arco.css';
|
||||
import router from './router/';
|
||||
import { parseTime } from '@/utils/parseTime';
|
||||
import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
|
||||
|
||||
// Directive
|
||||
import permission from '@/directive/permission/permission';
|
||||
|
||||
|
||||
63
src/utils/format.js
Normal file
63
src/utils/format.js
Normal file
@ -0,0 +1,63 @@
|
||||
export const formatDoctorTitle=(val)=>{
|
||||
//医生职称(1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师)
|
||||
let data={1:'主任医师', 2:'主任中医师', 3:'副主任医师', 4:'副主任中医师', 5:'主治医师',6:'住院医师'}
|
||||
if(val){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
export const formatPrescriptionStatus=(val)=>{
|
||||
//处方状态(1:待审核 2:待使用 3:已失效 4:已使用)
|
||||
let data={1:'待审核', 2:'待使用', 3:'已失效', 4:'已使用'}
|
||||
if(val){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
export const formatPharmacistStatus=(val)=>{
|
||||
//pharmacist_audit_status药师审核状态(0:审核中 1:审核成功 2:审核驳回)
|
||||
let data={0:'审核中', 1:'审核成功', 2:'审核驳回'}
|
||||
if(val || val==0){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
export const formatOrderCancelReason=(val)=>{
|
||||
//取消订单原因(1:医生未接诊 2:主动取消 3:无可分配医生 4:客服取消 5:支付超时)
|
||||
let data={1:'医生未接诊', 2:'主动取消', 3:'无可分配医生',4:'客服取消',5:'支付超时'}
|
||||
if(val){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
export const formatProductCancelReason=(val)=>{
|
||||
//1:主动取消 2:复核失败/库存不足 3:支付超时 4:客服取消
|
||||
let data={1:'主动取消', 2:'复核失败/库存不足', 3:'支付超时',4:'客服取消'}
|
||||
if(val){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
export const formatCheckCancelReason=(val)=>{
|
||||
//1:主动取消 2:客服取消 3:支付超时
|
||||
let data={1:'主动取消', 2:'客服取消/库存不足', 3:'支付超时'}
|
||||
if(val){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
export const fromatReportStatus=(val)=>{
|
||||
//上报处方平台状态(0:未上报 1:已上报 2:上报失败))
|
||||
let data={0:'未上报', 1:'已上报', 2:'上报失败'}
|
||||
if(val || val==0){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
@ -9,7 +9,7 @@ const service = axios.create({
|
||||
timeout: 8000,
|
||||
headers:{
|
||||
'Content-Type':'application/json',
|
||||
'Authorization':''
|
||||
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@ -93,7 +93,7 @@
|
||||
<a-row :gutter="24">
|
||||
|
||||
<a-col :span="12" v-if="modalForm.menu_type !== 3 && modalForm.menu_type">
|
||||
<a-form-item field="menu_title" label="路由名称">
|
||||
<a-form-item field="menu_name" label="路由名称">
|
||||
<a-input v-model="modalForm.menu_name" placeholder="请输入路由名称" />
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
<a-input v-model="queryForm.department_custom_name" placeholder="请输入科室名称" @press-enter="handleQuery" />
|
||||
</a-form-item> -->
|
||||
<a-form-item field="doctor_title" label="医生职称">
|
||||
<a-select v-model="queryForm.doctor_title" placeholder="请选择医生职称" :style="{ width: '182px' }">
|
||||
<a-select v-model="queryForm.doctor_title" placeholder="请选择医生职称" :style="{ width: '182px' }">
|
||||
<!-- 医生职称(1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师) -->
|
||||
<a-option :value="1">主任医师</a-option>
|
||||
<a-option :value="2">主任中医师</a-option>
|
||||
@ -26,7 +26,7 @@
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item field="inquiry_service" label="服务类型">
|
||||
<a-select v-model="queryForm.inquiry_service" placeholder="请选择服务类型" :style="{ width: '182px' }">
|
||||
<a-select v-model="queryForm.inquiry_service" placeholder="请选择服务类型" :style="{ width: '182px' }">
|
||||
<!-- 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 -->
|
||||
<a-option :value="1">专家问诊</a-option>
|
||||
<a-option :value="2">快速问诊</a-option>
|
||||
@ -35,7 +35,7 @@
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item field="multi_point_status" label="多点认证">
|
||||
<a-select v-model="queryForm.multi_point_status" placeholder="请选择多点认证状态" :style="{ width: '182px' }">
|
||||
<a-select v-model="queryForm.multi_point_status" placeholder="请选择多点认证状态" :style="{ width: '182px' }">
|
||||
<!-- 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败) -->
|
||||
<a-option :value="0">未认证</a-option>
|
||||
<a-option :value="1">认证通过</a-option>
|
||||
@ -44,7 +44,7 @@
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item field="iden_auth_status" label="审核状态">
|
||||
<a-select v-model="queryForm.iden_auth_status" placeholder="请选择审核状态" :style="{ width: '182px' }">
|
||||
<a-select v-model="queryForm.iden_auth_status" placeholder="请选择审核状态" :style="{ width: '182px' }">
|
||||
<!-- 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败) -->
|
||||
<a-option :value="0">未认证</a-option>
|
||||
<a-option :value="1">认证通过</a-option>
|
||||
@ -53,7 +53,7 @@
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item field="idcard_status" label="实名认证">
|
||||
<a-select v-model="queryForm.idcard_status" placeholder="请选择实名认证状态" :style="{ width: '182px' }">
|
||||
<a-select v-model="queryForm.idcard_status" placeholder="请选择实名认证状态" :style="{ width: '182px' }">
|
||||
<!-- 实名认证状态(0:未认证 1:认证通过 2:认证失败) -->
|
||||
<a-option :value="0">未认证</a-option>
|
||||
<a-option :value="1">认证通过</a-option>
|
||||
@ -61,20 +61,26 @@
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item field="is_recommend" label="首页推荐">
|
||||
<a-select v-model="queryForm.is_recommend" placeholder="请选择是否首页推荐" :style="{ width: '182px' }">
|
||||
<a-select v-model="queryForm.is_recommend" placeholder="请选择是否首页推荐" :style="{ width: '182px' }">
|
||||
<!-- 实名认证状态(0:未认证 1:认证通过 2:认证失败) -->
|
||||
<a-option :value="0">否</a-option>
|
||||
<a-option :value="1">是</a-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item field="is_platform_deep_cooperation" label="深度合作">
|
||||
<a-select v-model="queryForm.is_platform_deep_cooperation" placeholder="请选择是否是平台深度合作" :style="{ width: '182px' }">
|
||||
<a-select v-model="queryForm.is_platform_deep_cooperation" placeholder="请选择是否是平台深度合作" :style="{ width: '182px' }">
|
||||
<!-- 实名认证状态(0:未认证 1:认证通过 2:认证失败) -->
|
||||
<a-option :value="0">否</a-option>
|
||||
<a-option :value="1">是</a-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item field="is_sys_diagno_cooperation" label="先思达合作">
|
||||
<a-select v-model="queryForm.is_sys_diagno_cooperation" placeholder="请选择是否是先思达合作" :style="{ width: '168px' }">
|
||||
<!-- 实名认证状态(0:未认证 1:认证通过 2:认证失败) -->
|
||||
<a-option :value="0">否</a-option>
|
||||
<a-option :value="1">是</a-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
|
||||
<a-form-item>
|
||||
<a-space>
|
||||
<a-button type="primary" @click="handleQuery"><icon-search /> 搜索</a-button>
|
||||
|
||||
1064
src/views/order/medince-list/index.vue
Normal file
1064
src/views/order/medince-list/index.vue
Normal file
File diff suppressed because it is too large
Load Diff
750
src/views/order/order-list/index.vue
Normal file
750
src/views/order/order-list/index.vue
Normal file
@ -0,0 +1,750 @@
|
||||
<template>
|
||||
<div class="app-container">
|
||||
<a-form :model="queryForm" ref="queryFormRef" layout="inline">
|
||||
|
||||
<a-form-item field="inquiry_no" label="订单编号">
|
||||
<a-input :style="{ width: '182px' }" v-model="queryForm.inquiry_no" placeholder="请输入订单编号" @press-enter="handleQuery" />
|
||||
</a-form-item>
|
||||
<a-form-item field="doctor_name" label="医生姓名">
|
||||
<a-input :style="{ width: '182px' }" v-model="queryForm.doctor_name" placeholder="请输入医生姓名" @press-enter="handleQuery" />
|
||||
</a-form-item>
|
||||
<a-form-item field="patient_name" label="就诊人姓名">
|
||||
<a-input :style="{ width: '182px' }" v-model="queryForm.patient_name" placeholder="请输入就诊人姓名" @press-enter="handleQuery" />
|
||||
</a-form-item>
|
||||
<!-- <a-form-item field="department_custom_name" label="科室名称">
|
||||
<a-input v-model="queryForm.department_custom_name" placeholder="请输入科室名称" @press-enter="handleQuery" />
|
||||
</a-form-item> -->
|
||||
<a-form-item field="mobile" label="电话号码">
|
||||
<a-input
|
||||
:style="{ width: '182px' }"
|
||||
v-model="queryForm.mobile"
|
||||
placeholder="请输入医生或者患者电话号码"
|
||||
@press-enter="handleQuery"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item field="inquiry_status" label="订单状态">
|
||||
<a-select v-model="queryForm.inquiry_status" placeholder="请选择订单状态" :style="{ width: '182px' }">
|
||||
<!-- 1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) -->
|
||||
<a-option value="1">待支付</a-option>
|
||||
<a-option value="2">待分配</a-option>
|
||||
<a-option value="3">待接诊</a-option>
|
||||
<a-option value="4">已接诊</a-option>
|
||||
<a-option value="5">已完成</a-option>
|
||||
<a-option value="6">已结束</a-option>
|
||||
<a-option value="7">已取消</a-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-form-item field="inquiry_type" label="服务类型">
|
||||
<a-select v-model="queryForm.inquiry_type" placeholder="请选择服务类型" :style="{ width: '182px' }">
|
||||
<!-- 1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 -->
|
||||
<a-option :value="1">专家问诊</a-option>
|
||||
<a-option :value="2">快速问诊</a-option>
|
||||
<a-option :value="3">公益问诊</a-option>
|
||||
<a-option :value="4">问诊购药</a-option>
|
||||
<a-option :value="5">糖组检测</a-option>
|
||||
</a-select>
|
||||
</a-form-item>
|
||||
<a-row>
|
||||
<a-form-item field="pay_range_time" label="支付时间范围">
|
||||
<a-range-picker style="width: 330px;" v-model="queryForm.pay_range_time" />
|
||||
</a-form-item>
|
||||
<a-form-item field="complete_range_time" label="完成时间范围">
|
||||
<a-range-picker style="width: 330px;" v-model="queryForm.complete_range_time" />
|
||||
</a-form-item>
|
||||
<a-form-item field="end_range_time" label="结束时间范围">
|
||||
<a-range-picker style="width: 330px;" v-model="queryForm.end_range_time" />
|
||||
</a-form-item>
|
||||
<a-form-item field="cancel_range_time" label="取消时间范围">
|
||||
<a-range-picker
|
||||
style="width: 330px"
|
||||
v-model="queryForm.cancel_range_time"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item field="reception_range_time" label="接诊时间范围">
|
||||
<a-range-picker
|
||||
style="width: 330px"
|
||||
v-model="queryForm.reception_range_time"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item field="create_range_time" label="创建时间范围">
|
||||
<a-range-picker
|
||||
style="width: 330px"
|
||||
v-model="queryForm.create_range_time"
|
||||
/>
|
||||
</a-form-item>
|
||||
<a-form-item>
|
||||
<a-space>
|
||||
<a-button type="primary" @click="handleQuery"><icon-search /> 搜索</a-button>
|
||||
<a-button @click="handleResetQuery"><icon-loop /> 重置</a-button>
|
||||
</a-space>
|
||||
</a-form-item>
|
||||
</a-row>
|
||||
</a-form>
|
||||
|
||||
<a-divider />
|
||||
|
||||
<!-- table -->
|
||||
<a-table
|
||||
:columns="columns"
|
||||
:scroll="{ x: 1600 }"
|
||||
:data="tableData"
|
||||
:pagination="{ 'show-total': true, 'show-jumper': true, 'show-page-size': true, total: pager.total, current: currentPage }"
|
||||
:row-selection="{ type: 'checkbox', showCheckedAll: true }"
|
||||
row-key="post_id"
|
||||
@selection-change="(selection) => {deleteData = selection;}"
|
||||
@page-change="handlePageChange"
|
||||
@page-size-change="handlepage_sizeChange"
|
||||
>
|
||||
<template #post_id="{record,rowIndex}">
|
||||
<div>{{(rowIndex+1)+(pager.page-1)*10}}</div>
|
||||
</template>
|
||||
<template #inquiry_pay_channel="{record}">
|
||||
<div v-if="record.inquiry_pay_channel==1">小程序支付</div>
|
||||
<div v-else-if="record.inquiry_pay_channel==2">微信扫码</div>
|
||||
<div v-else-if="record.inquiry_pay_channel==3">模拟支付</div>
|
||||
</template>
|
||||
<!-- 1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消) -->
|
||||
<template #inquiry_status="{record}">
|
||||
<div v-if="record.inquiry_status==1">待支付</div>
|
||||
<div v-else-if="record.inquiry_status==2">待分配</div>
|
||||
<div v-else-if="record.inquiry_status==3">待接诊</div>
|
||||
<div v-else-if="record.inquiry_status==4">已接诊</div>
|
||||
<div v-else-if="record.inquiry_status==5">已完成</div>
|
||||
<div v-else-if="record.inquiry_status==6">已结束</div>
|
||||
<div v-else-if="record.inquiry_status==7">已取消</div>
|
||||
</template>
|
||||
<template #amount_total="{ record }">
|
||||
{{(record.amount_total) }}元
|
||||
</template>
|
||||
<template #payment_amount_total="{ record }">
|
||||
{{(record.payment_amount_total) }}元
|
||||
</template>
|
||||
<template #patient_name="{ record }">
|
||||
<div class="ta-patient" :title="record.patient_name">{{record.patient_name}}({{record.patient_sex==1?'男,':'女,'}}{{record.patient_age}}岁)</div>
|
||||
</template>
|
||||
|
||||
<template #pay_time="{ record }">
|
||||
{{ parseTime(record.pay_time) }}
|
||||
</template>
|
||||
|
||||
<template #action="{ record }">
|
||||
<a-space>
|
||||
<a-button v-has="'admin:sysOrderList:detail'" type="text"
|
||||
@click="handleDetail(record)"><icon-book />详情</a-button>
|
||||
<!-- <a-button v-has="'admin:sysPost:remove'" type="text" @click="() => { deleteVisible = true; deleteData = [record.post_id]; }"><icon-delete /> 删除</a-button> -->
|
||||
</a-space>
|
||||
</template>
|
||||
</a-table>
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- Modal -->
|
||||
<a-modal v-model:visible="modalVisible" fullscreen :title="modalTitle" title-align="start" :footer="false"
|
||||
@close="() => {$refs.modalFormRef.resetFields(); modalForm.doctor_id = null;}">
|
||||
<div class="titlebox">
|
||||
<div class="bar"></div>
|
||||
<div class="name">订单信息</div>
|
||||
</div>
|
||||
<a-form :model="modalForm" :disabled="true" :rules="rules" ref="modalFormRef" :auto-label-width="true">
|
||||
<a-row :gutter="24" style="margin-top: 35px;">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="inquiry_no" label="订单编号:">
|
||||
<span>{{ modalForm.inquiry_no }}</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="inquiry_status" label="订单状态:" >
|
||||
<span>{{ formatInquiryStatus(modalForm.inquiry_status) }}</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" >
|
||||
<a-col :span="12">
|
||||
<a-form-item field="user.created_at" label="下单时间:">
|
||||
<span >{{modalForm.created_at}}</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="pay_time" label="支付时间:">
|
||||
<span v-if="parseTime(modalForm.pay_time)">{{parseTime(modalForm.pay_time)}}</span>
|
||||
<span v-else>-</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="amount_total" label="订单金额:">
|
||||
<span>{{modalForm.amount_total}}元</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="coupon_amount_total" label="优惠卷:">
|
||||
<span v-if="modalForm.coupon_amount_total>0">{{modalForm.coupon_amount_total}}元</span>
|
||||
<span v-else>无</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="payment_amount_total" label="实付金额:">
|
||||
<span>{{modalForm.payment_amount_total}}元</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="inquiry_type" label="问诊类型:">
|
||||
<span>{{formatInquiryType(modalForm.inquiry_type)}}</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalForm.cancel_reason">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="department_custom_name" label="备 注 :">
|
||||
<span>{{ formatOrderCancelReason(modalForm.cancel_reason)}}</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider />
|
||||
<div class="titlebox" v-if="modalForm.order_inquiry_refund">
|
||||
<div class="bar"></div>
|
||||
<div class="name">退款信息</div>
|
||||
</div>
|
||||
<a-row :gutter="24" style="margin-top: 35px;" v-if="modalForm.order_inquiry_refund">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="inquiry_refund_no" label="退款编号:">
|
||||
<span>{{modalForm.order_inquiry_refund.inquiry_refund_no}}</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="escrow_trade_no" label=" 第三方订单编号:">
|
||||
<span>{{modalForm.escrow_trade_no}}</span>
|
||||
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalForm.order_inquiry_refund">
|
||||
<a-col :span="12">
|
||||
<a-form-item field="inquiry_refund_no" label="退款金额:">
|
||||
<span>{{modalForm.order_inquiry_refund.refund_total}}元</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :span="12">
|
||||
<a-form-item field="escrow_trade_no" label="退款状态:">
|
||||
<span>{{formatRefundStatus(modalForm.order_inquiry_refund.inquiry_refund_status)}}</span>
|
||||
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalForm.order_inquiry_refund">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="inquiry_refund_no" label="退款时间:">
|
||||
<span v-if="parseTime(modalForm.order_inquiry_refund.success_time)">{{modalForm.order_inquiry_refund.success_time}}</span>
|
||||
<span v-else>-</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalForm.order_inquiry_refund">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="inquiry_refund_no" label="退款原因:">
|
||||
<span>{{modalForm.order_inquiry_refund.refund_reason}}</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider v-if="modalForm.order_inquiry_refund"/>
|
||||
<div class="titlebox">
|
||||
<div class="bar"></div>
|
||||
<div class="name">医生信息</div>
|
||||
<a-space style="margin-right: 8px;flex:1;display: flex;justify-content: flex-end;" v-if="modalForm.user_doctor">
|
||||
<a-button type="primary" @click="openDcotor">查看医生完整信息</a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
<a-row :gutter="24" style="margin-top: 35px;" >
|
||||
<a-col :span="24">
|
||||
<a-form-item field="license_cert" :hide-label="true" >
|
||||
<div class="doctorInfo" v-if="modalForm.user_doctor">
|
||||
<a-space size="large">
|
||||
<a-image width="80" height="80" class="headImg" :src="modalForm.user_doctor.avatar" v-if="modalForm.user_doctor.avatar">
|
||||
</a-image>
|
||||
<a-image width="80" height="80" class="headImg" src="https://img.applets.igandanyiyuan.com/basic/file/doctor_avatar.png" v-else>
|
||||
</a-image>
|
||||
</a-space>
|
||||
<div class="infobox">
|
||||
<div class="name">{{modalForm.user_doctor.user_name}} {{formatDoctorTitle(modalForm.user_doctor.doctor_title)}}</div>
|
||||
<div class="hospital">{{modalForm.user_doctor.hospital.hospital_name}} {{modalForm.user_doctor.department_custom_name}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="doctorInfo" v-else>暂未分配到医生</div>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider v-if="modalForm.user_doctor"/>
|
||||
<div class="titlebox" >
|
||||
<div class="bar"></div>
|
||||
<div class="name">就诊人信息</div>
|
||||
<a-space style="margin-right: 8px;flex:1;display: flex;justify-content: flex-end;">
|
||||
<a-button type="primary" status="warning" @click="openPatient">查看就诊人完整信息</a-button>
|
||||
</a-space>
|
||||
</div>
|
||||
<a-row :gutter="24" style="margin-top: 35px" v-if="modalForm.order_inquiry_case">
|
||||
<a-col :span="24">
|
||||
<a-form-item label="就诊人姓名:">
|
||||
<span>{{modalForm.patient_name}} ({{modalForm.patient_sex==1?'男':'女'}} {{modalForm.patient_age}}岁)</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalForm.order_inquiry_case">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="inquiry_no" label="确诊疾病:">
|
||||
<span> <span>{{modalForm.order_inquiry_case.disease_class_name}} {{modalForm.user_doctor.department_custom_name}}</span></span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalForm.order_inquiry_case && modalForm.order_inquiry_case.disease_desc">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="inquiry_no" label="病情描述:">
|
||||
{{modalForm.order_inquiry_case.disease_desc}}
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-divider />
|
||||
<div class="titlebox" v-if="modalForm.order_evaluation">
|
||||
<div class="bar"></div>
|
||||
<div class="name">评价信息</div>
|
||||
</div>
|
||||
<a-row :gutter="24" v-if="modalForm.order_evaluation" style="margin-top: 35px;">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="inquiry_no" label="回复质量:">
|
||||
<span><a-rate v-model="comment.reply_quality" readonly /></span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalForm.order_evaluation">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="inquiry_no" label="服务态度:">
|
||||
<span><a-rate v-model="comment.service_attitude" readonly /></span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalForm.order_evaluation">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="inquiry_no" label="回复速度:">
|
||||
<span><a-rate v-model="comment.reply_progress" readonly /></span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<a-row :gutter="24" v-if="modalForm.order_evaluation">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="inquiry_no" label="评价内容:">
|
||||
<span>
|
||||
{{ comment.content }}
|
||||
</span>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
<!-- <a-row :gutter="24" style="margin-top: 35px;" v-if="modalForm.order_evaluation">
|
||||
<a-col :span="24">
|
||||
<a-form-item field="" label="" no-style>
|
||||
<div class="infobox commentbox">
|
||||
<div class="row">
|
||||
<div class="nameDesc">回复质量:</div>
|
||||
<div class="desc"><a-rate :default-value="modalForm.order_evaluation.reply_quality" readonly /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nameDesc">服务态度:</div>
|
||||
<div class="desc"><a-rate :default-value="modalForm.order_evaluation.service_attitude" readonly /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nameDesc">回复速度:</div>
|
||||
<div class="desc"><a-rate :default-value="modalForm.order_evaluation.reply_progress" readonly /></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="nameDesc">评价内容:</div>
|
||||
<div class="desc">{{ modalForm.order_evaluation.content }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row> -->
|
||||
<a-divider v-if="modalForm.order_evaluation"/>
|
||||
</a-form>
|
||||
|
||||
<div class="titlebox" >
|
||||
<div class="bar"></div>
|
||||
<div class="name">操作</div>
|
||||
</div>
|
||||
<a-row :gutter="24" style="margin-top: 35px;" >
|
||||
<a-col :span="24">
|
||||
<a-form-item field="" label="" no-style>
|
||||
<!-- <a-space style="margin-right: 8px;">
|
||||
<a-button type="primary" @click="openInquiryRecord">问诊记录</a-button>
|
||||
</a-space> -->
|
||||
<a-space style="margin-right: 8px;" v-if="modalForm.inquiry_status==4 || modalForm.inquiry_status==5">
|
||||
<a-button type="primary" status="danger" v-has="'admin:sysOrderList:cancel'" @click="()=>{okVisible=true;cur_inruiry_id=modalForm.order_inquiry_id;}">取消问诊</a-button>
|
||||
</a-space>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
</a-row>
|
||||
</a-modal>
|
||||
|
||||
<!-- 医生详情弹框 -->
|
||||
<doctorModal :doctorVisible="doctorVisible" :doctor_id="doctor_id" @doctorVisibleChange="() => {doctorVisible = false;doctor_id='';}"></doctorModal>
|
||||
|
||||
<!-- 患者详情弹窗 -->
|
||||
<patientModal :patientVisible="patientVisible" :data="patientData" @patientVisibleChange="() => {patientVisible = false;}"></patientModal>
|
||||
|
||||
<confirmModal :okVisible="okVisible" :api="cancelInquiry" :title="'确定取消此订单吗?'" :dealType="'order_inquiry_id'" :id="cur_inruiry_id" @closeChange="handelCloseChange"></confirmModal>
|
||||
</div>
|
||||
|
||||
|
||||
</template>
|
||||
|
||||
<script setup>
|
||||
import { reactive, ref, getCurrentInstance, onMounted, nextTick, watch } from 'vue';
|
||||
import { getOrderList,getOrderDetail,cancelInquiry,inquiryCase} from '@/api/order/list';
|
||||
import { parseTime } from '@/utils/parseTime';
|
||||
import {formatDoctorTitle,formatOrderCancelReason} from "@/utils/format"
|
||||
|
||||
// Akiraka 20230210 删除数据
|
||||
const deleteData = ref([])
|
||||
// Akiraka 20230210 删除对话框
|
||||
const deleteVisible = ref(false)
|
||||
|
||||
const doctorVisible=ref(false);
|
||||
const okVisible=ref(false);
|
||||
const cur_inruiry_id=ref('');
|
||||
const doctor_id=ref('');
|
||||
const patientVisible=ref(false);
|
||||
const patientData=reactive({
|
||||
});
|
||||
const comment=reactive({
|
||||
|
||||
})
|
||||
// Akiraka 20230210 监听删除事件
|
||||
watch(() => deleteVisible.value ,(value) => {
|
||||
|
||||
if ( value == false ) {
|
||||
getOrderInfo(pager);
|
||||
}
|
||||
})
|
||||
const { proxy } = getCurrentInstance();
|
||||
|
||||
const currentPage = ref(1);
|
||||
// Pager
|
||||
const pager = {
|
||||
total: 0,
|
||||
page: 1,
|
||||
page_size: 10,
|
||||
};
|
||||
// form
|
||||
const queryForm = reactive({
|
||||
range_time:null
|
||||
});
|
||||
const modalForm = reactive({
|
||||
sort: 0,
|
||||
status: 1,
|
||||
order_inquiry_refund:{},
|
||||
order_evaluation:null
|
||||
|
||||
});
|
||||
watch(()=>queryForm.end_range_time,(value)=>{
|
||||
if(value){
|
||||
let[startTime,endTime]=value
|
||||
queryForm.finish_time=startTime+"&"+endTime;
|
||||
}else{
|
||||
queryForm.finish_time=''
|
||||
};
|
||||
console.log(queryForm.finish_time)
|
||||
})
|
||||
watch(()=>queryForm.pay_range_time,(value)=>{
|
||||
if(value){
|
||||
let[startTime,endTime]=value
|
||||
queryForm.pay_time=startTime+"&"+endTime;
|
||||
}else{
|
||||
queryForm.pay_time=''
|
||||
};
|
||||
})
|
||||
watch(()=>queryForm.complete_range_time,(value)=>{
|
||||
if(value){
|
||||
let[startTime,endTime]=value
|
||||
queryForm.complete_time=startTime+"&"+endTime;
|
||||
}else{
|
||||
queryForm.complete_time=''
|
||||
};
|
||||
})
|
||||
watch(()=>queryForm.cancel_range_time,(value)=>{
|
||||
if(value){
|
||||
let[startTime,endTime]=value
|
||||
queryForm.cancel_time=startTime+"&"+endTime;
|
||||
}else{
|
||||
queryForm.cancel_time=''
|
||||
};
|
||||
})
|
||||
watch(()=>queryForm.reception_range_time,(value)=>{
|
||||
if(value){
|
||||
let[startTime,endTime]=value
|
||||
queryForm.reception_time=startTime+"&"+endTime;
|
||||
}else{
|
||||
queryForm.reception_time=''
|
||||
};
|
||||
})
|
||||
watch(()=>queryForm.create_range_time,(value)=>{
|
||||
if(value){
|
||||
let[startTime,endTime]=value
|
||||
queryForm.created_at=startTime+"&"+endTime;
|
||||
}else{
|
||||
queryForm.created_at=''
|
||||
};
|
||||
})
|
||||
// Rules
|
||||
const rules = {
|
||||
post_name: [{ required: true, message: '请输入岗位名称' }]
|
||||
};
|
||||
|
||||
// Modal
|
||||
const modalVisible = ref(false);
|
||||
const modalTitle = ref('默认标题');
|
||||
|
||||
// Batch Del List
|
||||
let batchList = [];
|
||||
|
||||
// Table Columns
|
||||
const columns = [
|
||||
{ title: '排序', dataIndex: 'post_id',slotName: 'post_id',width: 90 },
|
||||
{ title: '订单编号', dataIndex: 'inquiry_no',width:200 },
|
||||
{ title: '医生姓名', dataIndex: 'doctor_name',width:100 },
|
||||
{ title: '就诊人', dataIndex: 'patient_name',slotName:'patient_name',width:200},
|
||||
{ title: '联系电话', dataIndex: 'patient_mobile',width: 130 },
|
||||
{ title: '订单金额', dataIndex: 'amount_total',slotName:'amount_total',width:100 },
|
||||
{ title: '实付金额', dataIndex: 'payment_amount_total',slotName:'payment_amount_total',width:100 },
|
||||
{ title: '支付方式', dataIndex: 'inquiry_pay_channel',slotName: 'inquiry_pay_channel'},
|
||||
{ title: '订单状态', dataIndex: 'inquiry_status', slotName:'inquiry_status' },
|
||||
{ title: '支付时间', dataIndex: 'pay_time', slotName: 'pay_time',width:200 },
|
||||
{ title: '操作', slotName: 'action',fixed: "right", width: 100 },
|
||||
];
|
||||
|
||||
// Table Data
|
||||
const tableData = ref([]);
|
||||
|
||||
// 新增
|
||||
const handleAdd = () => {
|
||||
modalVisible.value = true;
|
||||
modalTitle.value = '新增岗位';
|
||||
};
|
||||
|
||||
// 修改
|
||||
const handleUpdate = async (record) => {
|
||||
modalVisible.value = true;
|
||||
modalTitle.value = '修改岗位';
|
||||
|
||||
await nextTick();
|
||||
Object.assign(modalForm, record);
|
||||
};
|
||||
|
||||
// Modal ok
|
||||
// 异步关闭Modal需要调用 done()
|
||||
// const handleSubmit = (done) => {
|
||||
// proxy.$refs.modalFormRef.validate(async (valid) => {
|
||||
// if (!valid) {
|
||||
// let res;
|
||||
// if (!modalForm.post_id) {
|
||||
// const { code, message } = await addPost(modalForm);
|
||||
// if (code == 200 ) {
|
||||
// proxy.$notification.success('新增成功');
|
||||
// } else {
|
||||
// proxy.$notification.error(message);
|
||||
// }
|
||||
// } else {
|
||||
// console.log("post_id:"+modalForm.post_id)
|
||||
|
||||
// const { code, message } = await updatePost(modalForm, modalForm.post_id);
|
||||
// if (code == 200 ) {
|
||||
// proxy.$notification.success('更新成功');
|
||||
// } else {
|
||||
// proxy.$notification.error(message);
|
||||
// }
|
||||
// }
|
||||
// done();
|
||||
// getOrderInfo(pager);
|
||||
// } else {
|
||||
// proxy.$message.error('表单校验失败');
|
||||
// done(false);
|
||||
// }
|
||||
// });
|
||||
// };
|
||||
|
||||
|
||||
/**
|
||||
* 分页改变
|
||||
* @param {Number} [page]
|
||||
*/
|
||||
const handlePageChange = (page) => {
|
||||
pager.page = page;
|
||||
|
||||
// 修改当前页码
|
||||
currentPage.value = page;
|
||||
getOrderInfo({ ...pager, ...queryForm });
|
||||
};
|
||||
|
||||
// 每页数据量
|
||||
const handlepage_sizeChange = (page_size) => {
|
||||
pager.page_size = page_size;
|
||||
getOrderInfo({ ...pager, ...queryForm });
|
||||
};
|
||||
|
||||
// 获取岗位信息
|
||||
const getOrderInfo = async (params = {}) => {
|
||||
const { data, code, message } = await getOrderList(params);
|
||||
if ( code == 200 ) {
|
||||
tableData.value = data.data;
|
||||
Object.assign(pager, { total: data.total, page: data.page, page_size: data.page_size });
|
||||
} else {
|
||||
proxy.$notification.error(message);
|
||||
}
|
||||
};
|
||||
|
||||
// 查询岗位信息
|
||||
const handleQuery = async () => {
|
||||
pager.page=1;
|
||||
const params = {
|
||||
page: pager.page,
|
||||
page_size: pager.page_size,
|
||||
...queryForm,
|
||||
};
|
||||
getOrderInfo(params);
|
||||
};
|
||||
|
||||
|
||||
//获取订单详情
|
||||
const handleDetail = async (record) => {
|
||||
modalVisible.value = true;
|
||||
modalTitle.value = '问诊订单详情';
|
||||
Object.assign(patientData,{});
|
||||
const { code, data, message } = await getOrderDetail(record.order_inquiry_id);
|
||||
|
||||
if (code == 200) {
|
||||
Object.assign(modalForm, data);
|
||||
let result=data.order_evaluation;
|
||||
if(data.order_inquiry_case && data.order_inquiry_case.inquiry_case_id){
|
||||
const caseInfo= await inquiryCase(data.order_inquiry_case.inquiry_case_id);
|
||||
Object.assign(patientData,caseInfo.data);
|
||||
|
||||
}
|
||||
if(result){
|
||||
Object.assign(comment,{
|
||||
reply_progress:result.reply_progress/20,
|
||||
reply_quality:result.reply_quality/20,
|
||||
service_attitude:result.service_attitude/20,
|
||||
content:result.content
|
||||
})
|
||||
}
|
||||
}
|
||||
};
|
||||
const formatInquiryStatus=(val)=>{
|
||||
//问诊订单状态(1:待支付 2:待分配 3:待接诊 4:已接诊 5:已完成 6:已结束 7:已取消)
|
||||
let data={1:'待支付', 2:'待分配', 3:'待接诊', 4:'已接诊', 5:'已完成', 6:'已结束', 7:'已取消'}
|
||||
if(val){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
const formatRefundStatus=(val)=>{
|
||||
//问诊订单退款状态(0:无退款 1:申请退款 2:退款中 3:退款成功 4:拒绝退款 5:退款关闭 6:退款异常)
|
||||
let data={0:'无退款', 1:'申请退款', 2:'退款中',3:'退款成功', 4:'拒绝退款', 5:'退款关闭', 6:'退款异常'}
|
||||
if(val || val==0){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
const formatInquiryType=(val)=>{
|
||||
//订单类型(1:专家问诊 2:快速问诊 3:公益问诊 4:问诊购药 5:检测)
|
||||
let data={1:'专家问诊', 2:'快速问诊', 3:'公益问诊', 4:'问诊购药', 5:'糖组检测'}
|
||||
if(val){
|
||||
return data[val]
|
||||
}else{
|
||||
return ''
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
const openDcotor=()=>{
|
||||
doctor_id.value=modalForm.doctor_id;
|
||||
doctorVisible.value=true;
|
||||
}
|
||||
const openPatient=()=>{
|
||||
//patientData=modalForm.order_inquiry_case;
|
||||
|
||||
// console.log(patientData);
|
||||
patientVisible.value=true;
|
||||
}
|
||||
const openInquiryRecord=()=>{
|
||||
alert("开发中");
|
||||
}
|
||||
//关闭确认框
|
||||
const handelCloseChange=(data)=>{
|
||||
cur_inruiry_id.value="";
|
||||
okVisible.value=false;
|
||||
console.log(data)
|
||||
if(data){
|
||||
modalVisible.value=false;
|
||||
getOrderInfo({ ...pager, ...queryForm });
|
||||
}
|
||||
}
|
||||
// 重置搜索
|
||||
const handleResetQuery = () => {
|
||||
proxy.$refs.queryFormRef.resetFields();
|
||||
currentPage.value=1;
|
||||
handleQuery();
|
||||
//getOrderInfo(queryForm);
|
||||
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
getOrderInfo(pager);
|
||||
});
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
.action {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.doctorInfo{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
}
|
||||
.row{
|
||||
line-height:32px;
|
||||
display: flex;
|
||||
}
|
||||
.row .nameDesc{
|
||||
text-align: right;
|
||||
width:120px;
|
||||
color:#000;
|
||||
}
|
||||
.row .desc{
|
||||
color:#666;
|
||||
}
|
||||
.ta-patient{
|
||||
width: 200px;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
text-overflow: ellipsis;
|
||||
}
|
||||
.infobox{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: space-between;
|
||||
}
|
||||
.headImg {
|
||||
margin-right: 20px;
|
||||
border-radius: 50%;
|
||||
width: 80px;
|
||||
height: 80px;
|
||||
}
|
||||
.arco-form-item-content{
|
||||
word-break: break-all;
|
||||
}
|
||||
</style>
|
||||
1541
src/views/patient/patient-list/index.vue
Normal file
1541
src/views/patient/patient-list/index.vue
Normal file
File diff suppressed because it is too large
Load Diff
@ -48,11 +48,11 @@ export default defineConfig({
|
||||
port: 1798,
|
||||
//secure: false,
|
||||
proxy: {
|
||||
// '/api': {
|
||||
// target: 'https://vue3.go-admin.dev',
|
||||
// changeOrigin: true, //开启跨域
|
||||
// rewrite: (path) => path.replace(/^\/api/, '')
|
||||
// },
|
||||
'/book': {
|
||||
target: 'http://twx.igandan.org',
|
||||
changeOrigin: true, //开启跨域
|
||||
rewrite: (path) => path.replace(/^\/book/, '')
|
||||
},
|
||||
'/admin': {
|
||||
target: 'http://dev.hospital.admin.igandanyiyuan.com',
|
||||
changeOrigin: true, //开启跨域
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user