Merge branch 'dev'

This commit is contained in:
zoujiandong 2023-09-18 08:55:40 +08:00
commit 82c6b9a1ce
25 changed files with 5260 additions and 18 deletions

View File

@ -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"

View File

@ -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"

View File

@ -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"

View File

@ -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
View 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
View 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
src/assets/nowork.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

BIN
src/assets/unuse.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

View File

@ -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();

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View File

@ -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
View 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 ''
}
}

View File

@ -9,7 +9,7 @@ const service = axios.create({
timeout: 8000,
headers:{
'Content-Type':'application/json',
'Authorization':''
}
});

View File

@ -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>

View File

@ -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>

File diff suppressed because it is too large Load Diff

View 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}}&nbsp;&nbsp;{{formatDoctorTitle(modalForm.user_doctor.doctor_title)}}</div>
<div class="hospital">{{modalForm.user_doctor.hospital.hospital_name}}&nbsp;&nbsp;{{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}}&nbsp;&nbsp;{{modalForm.patient_sex==1?'男':'女'}}&nbsp;&nbsp;{{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}}&nbsp;&nbsp;{{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>

File diff suppressed because it is too large Load Diff

View File

@ -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, //开启跨域