This commit is contained in:
zoujiandong 2023-09-15 11:14:43 +08:00
parent a7381e2363
commit ac1a9a0e45
9 changed files with 92 additions and 1559 deletions

View File

@ -1,24 +0,0 @@
import request from '../../utils/request'
const url = '/admin/doctor/pending';
export function getDoctorList(params){
return request({
url:'/admin/doctor/pending',
method: 'get',
params
})
}
export function getDoctorDetail(id){
return request({
url:'/admin/doctor/pending/'+id,
method: 'get'
})
}
export function checkDoctor(data,id){
return request({
url:'/admin/doctor/pending/'+id,
method: 'put',
data
})
}

View File

@ -1,24 +0,0 @@
import request from '../../utils/request'
const url = '/admin/doctor/multi';
export function getDoctorList(params){
return request({
url:'/admin/doctor/multi',
method: 'get',
params
})
}
export function getDoctorDetail(id){
return request({
url:'/admin/doctor/multi/'+id,
method: 'get'
})
}
export function checkDoctor(data,id){
return request({
url:'/admin/doctor/multi/'+id,
method: 'put',
data
})
}

89
src/api/patient/list.js Normal file
View File

@ -0,0 +1,89 @@
import request from '../../utils/request'
const url = '/admin/doctor';
export function getDoctorList(params){
return request({
url:'/admin/doctor',
method: 'get',
params
})
}
export function addDoctor(data) {
return request({
url,
method: 'post',
data
})
}
export function removeDoctor(data) {
return request({
url,
method: 'delete',
data
})
}
export function updateDoctor(data, id) {
return request({
url: `${url}/${id}`,
method: 'put',
data
})
}
export function getDoctorDetail(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
})
}

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

@ -1,868 +0,0 @@
<template>
<div class="app-container">
<a-form :model="queryForm" ref="queryFormRef" layout="inline">
<a-form-item field="user_name" label="医生名字">
<a-input v-model="queryForm.user_name" placeholder="请输入医生名字" @press-enter="handleQuery" />
</a-form-item>
<a-form-item field="mobile" label="电话号码">
<a-input v-model="queryForm.mobile" placeholder="请输入电话号码" @press-enter="handleQuery" />
</a-form-item>
<!-- <a-form-item field="iden_auth_status" label="审核状态">
<a-select v-model="queryForm.iden_auth_status" placeholder="请选择审核状态" :style="{ width: '180px' }">
<a-option :value="2">审核中</a-option>
<a-option :value="3">认证失败</a-option>
</a-select>
</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-form>
<!-- <a-divider /> -->
<!-- action -->
<!-- table -->
<a-table :columns="columns" :data="tableData"
:row-selection="{ type: 'checkbox', showCheckedAll: true }"
:pagination="{ 'show-total': true, 'show-jumper': true, 'show-page-size': true, total: pager.total, current: currentPage }"
row-key="doctor_id"
@selection-change="(selection) => {deleteData = selection;}" @page-change="handlePageChange"
@page-size-change="handlepage_sizeChange">
<template #doctor_id="{record,rowIndex}">
<div>{{(rowIndex+1)+(pager.page-1)*10}}</div>
</template>
<template #doctor_title="{ record }">
<!-- 医生职称1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师 -->
<div v-if="record.doctor_title==1">主任医师</div>
<div v-else-if="record.doctor_title==2">主任中医师</div>
<div v-else-if="record.doctor_title==3">副主任医师</div>
<div v-else-if="record.doctor_title==4">副主任中医师</div>
<div v-else-if="record.doctor_title==5">主治医师</div>
<div v-else-if="record.doctor_title==6">住院医师</div>
</template>
<template #created_at="{ record }">
{{ parseTime(record.created_at) }}
</template>
<template #hospital_name="{record}">
<div class="hospital_name" :title="record.hospital_name">{{record.hospital_name}}</div>
</template>
<template #inquiry_service="{ record }">
<span>{{filterService(record)}}</span>
</template>
<template #iden_auth_status="{ record }">
<!-- 身份认证状态0:未认证 1:认证通过 2:审核中 3:认证失败 -->
<a-tag v-if="record.iden_auth_status == 0" color="gray">未认证</a-tag>
<a-tag v-else-if="record.iden_auth_status == 1" color="green">认证通过</a-tag>
<a-tag v-else-if="record.iden_auth_status == 2" color="#ffb400">审核中</a-tag>
<a-tag v-else color="red">认证失败</a-tag>
</template>
<template #is_recommend="{ record }">
<!-- 身份认证状态0:未认证 1:认证通过 2:审核中 3:认证失败 -->
<a-tag v-if="record.is_recommend == 0" color="gray"></a-tag>
<a-tag v-else color="green"></a-tag>
</template>
<template #status="{ record }">
<!-- 状态0:禁用 1:正常 2:删除 -->
<a-switch v-model="record.status" checked-color="#14C9C9" :checked-value="1" unchecked-value="0" />
</template>
<template #action="{ record }">
<a-space>
<a-button v-has="'admin:sysDoctorExamine:check'" type="text"
@click="handleDetail(record)"><icon-book />审核</a-button>
</a-space>
</template>
</a-table>
<!-- Modal -->
<a-modal v-model:visible="modalVisible" body-class="myModal" 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" 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-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="请输入医生名字" />
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item field="idCard" label="身份证号:" >
<div class="box" v-show="!showEye">
<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">
<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" >
<a-col :span="12">
<a-form-item field="user.mobile" label="联系电话:">
<a-input v-model="modalForm.user.mobile" placeholder="请输入联系电话" />
</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.hospital_name" label="医院名称:">
<a-select placeholder="请选择所在医院" v-model="modalForm.hospital.hospital_name">
<a-option v-for="item in hospitalData" :key="item.hospital_id" :value="item.hospital_id"
:label="item.hospital_name">{{item.hospital_name}}</a-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item field="hospital.address" label="医院地址:">
<a-input v-model="modalForm.hospital.address" placeholder="请输入医院地址" />
</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" @change="changeSelect">
<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-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="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}" 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}" 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;"
v-if="(modalForm.user_doctor_info.license_cert && modalForm.user_doctor_info.license_cert.length>0)">
<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 >
<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>
</a-form-item>
</a-col>
</a-row>
<a-row class="codebox_cert" :gutter="24" style="margin-top: 35px;"
v-if="(modalForm.user_doctor_info.qualification_cert && modalForm.user_doctor_info.qualification_cert.length>0)">
<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 >
<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>
</a-form-item>
<div class="codbox">
<div class="labelname"><span
class="arco-form-item-label-required-symbol red">*</span>资格证编号</div>
<a-input v-model="modalForm.user_doctor_info.qualification_cert_num" style="width:500px" placeholder="请输入资格证编码" />
</div>
</a-col>
</a-row>
<!-- <a-row :gutter="24">
<a-col :span="24">
<a-form-item field="user_doctor_info.qualification_cert_num" label="资格证编码:">
</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)">
<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 >
<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">
<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 >
<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">
<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 >
<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-form-item>
</a-col>
</a-row>
<a-row :gutter="24" style="margin-top: 35px;"
v-if="modalForm.user_doctor_info.sign_image">
<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 >
<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">
<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 />
</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 >
<a-button type="primary" v-has="'admin:sysDoctorExamine:ok'" @click="handleCheck('ok')">审核通过</a-button>
<a-button type="primary" status="danger" v-has="'admin:sysDoctorExamine:deny'" @click="handleCheck(deny)">审核拒绝</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>
<!-- 审核失败弹框 -->
<a-modal :mask-closable="false" v-model:visible="modalCheckVisible" :title="'拒绝理由'" title-align="start"
@before-ok="handleSubmit" @close="() => { $refs.checkFormRef.resetFields();}">
<a-form :model="modalCheckForm" ref="checkFormRef"
:auto-label-width="true" :mask-closable="false" :rules="rules">
<a-form-item field="option" label="原因:">
<a-select multiple placeholder="请选择原因" v-model="modalCheckForm.option" @change="changeReason">
<a-option v-for="item in resasonData" :value="item" :label="item.label"></a-option>
</a-select>
</a-form-item>
<a-form-item v-for="(item,index) of modalCheckForm.reasons" :field="item.key" :label="item.label+':'" :key="index">
<a-textarea v-model="modalCheckForm[item.key]" :placeholder="'请输入'+item.label" />
</a-form-item>
</a-form>
</a-modal>
</div>
</template>
<script setup>
import { reactive, ref, getCurrentInstance, onMounted, nextTick, watch, computed } from 'vue';
import { getDoctorList,getDoctorDetail,checkDoctor} from '@/api/doctor/examine';
import {departmentList, decryptCard, hospitalList, expertiseList } from '@/api/doctor/list';
import dayjs from 'dayjs'
import { parseTime } from '@/utils/parseTime';
// Akiraka 20230210
const deleteData = ref([])
// Akiraka 20230210
const deleteVisible = ref(false)
const modalCheckVisible = ref(false)
// Akiraka 20230210
watch(() => deleteVisible.value, (value) => {
if (value == false) {
getDoctorInfo(pager);
}
});
const file = ref();
const { proxy } = getCurrentInstance();
const currentPage = ref(1);
// Pager
const pager = {
total: 0,
page: 1,
page_size: 10,
};
// form
const queryForm = reactive({
inquiry_service: ''
});
const modalCheckForm = reactive({
option:null,
reasons:[]
});
const modalForm = reactive({
hospital: {},
user_doctor_info: {
},
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'
});
// Modal
const modalVisible = ref(false);
const modalTitle = ref('默认标题');
//let obj = { 1: '', 2: '', 3: '', 4: '', 5: '', 6: '' };
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 resasonData=ref([
{
value:1,
label:'头像原因',
key:'avatar_reason',
content:''
},
{
value:2,
label:'科室电话原因',
key:'department_custom_mobile_reason',
content:''
},
{
value:3,
label:'科室名称原因',
key:'department_custom_name_reason',
content:''
},
{
value:4,
label:'医生简介原因',
key:'brief_introduction_reason',
content:''
},
{
value:5,
label:'擅长原因',
key:'be_good_at_reason'
},
{
value:6,
label:'医师执业证原因',
key:'license_cert_reason',
content:''
},
{
value:7,
label:'医师资格证原因',
key:'qualification_cert_reason',
content:''
},
{
value:8,
label:'医师职称证原因',
key:'work_cert_reason',
content:''
}
])
// rules
const rules = reactive({
option: [{
required: true,
message: '请选择原因'
}],
roleKey: [{
required: true,
message: '请输入权限字符'
}],
});
// Batch Del List
let batchList = [];
// Table Columns
const columns = [
{ title: '编号', dataIndex: 'doctor_id', slotName: 'doctor_id', width: '90' },
{ title: '医生名字', dataIndex: 'user_name' },
{ title: '手机号码', dataIndex: 'mobile' },
{ title: '医院', dataIndex: 'hospital_name', width: 160, slotName: 'hospital_name' },
{ title: '科室', dataIndex: 'department_custom_name',},
{ title: '职称', dataIndex: 'doctor_title', slotName: 'doctor_title' },
{ title: '申请时间', dataIndex: 'created_at', slotName: 'created_at' },
{ title: '审核状态', dataIndex: 'iden_auth_status', slotName: 'iden_auth_status' },
{ title: '操作', slotName: 'action' },
];
// Table Data
const tableData = ref([]);
//
const changeSelect = (value) => {
let arr = departmentData.value.filter((item) => {
return item.department_custom_id == value
})
modalForm.department_custom_name = arr[0].department_custom_name
}
//
const handleDetail = async (record) => {
modalVisible.value = true;
modalTitle.value = '医生详情';
const { code, data, message } = await getDoctorDetail(record.doctor_id);
if (code == 200) {
Object.assign(modalForm, data);
if (!data.user_doctor_info) {
data.user_doctor_info = {};
modalForm.user_doctor_info = {};
}
if (!data.hospital) {
modalForm.hospital = {};
}
if (!data.doctor_bank_card) {
modalForm.doctor_bank_card = {
province_id: '',
city_id: '',
county_id: '',
bank_id: ''
}
};
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.doctor_expertise && data.doctor_expertise.length > 0) {
let arr = [];
data.doctor_expertise.forEach((item) => {
arr.push(item.expertise_id)
})
modalForm.cur_doctor_expertise = arr;
}
}
};
const changeReason=(value)=>{
console.log(value)
modalCheckForm.reasons=value;
value.forEach((item,index)=>{
rules[item.key]=[{required: true,message: '请输入'+item.label}]
})
}
//
const filterService = (record) => {
let arr = [];
let str = '';
if (record.is_img_expert_reception == 1) {
arr.push("专家问诊");
}
if (record.is_img_welfare_reception == 1) {
arr.push("公益问诊")
}
if (record.is_img_quick_reception == 1) {
arr.push("快速问诊")
};
if (record.multi_point_status == 1) {
arr.push("问诊购药")
}
arr.forEach((item) => {
if (!str) {
str += item
} else {
str += ',' + item
}
})
return str ? str : "暂无"
}
/**
* 分页改变
* @param {Number} [page]
*/
const handlePageChange = (page) => {
pager.page = page;
//
currentPage.value = page;
getDoctorInfo({ ...pager, ...queryForm });
};
//
const handlepage_sizeChange = (page_size) => {
pager.page_size = page_size;
getDoctorInfo({ ...pager, ...queryForm });
};
//
const getDoctorInfo = async (params = {}) => {
const { data, code, message } = await getDoctorList(params);
if (code == 200) {
tableData.value = data.data;
Object.assign(pager, { total: data.total, page: data.page, page_size: data.page_size });
}
};
//
const handleQuery = async () => {
pager.page=1;
const params = {
page: pager.page,
page_size: pager.page_size,
...queryForm,
};
getDoctorInfo(params);
};
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 handleHospitalList = () => {
hospitalList().then((res) => {
const { data, code, message } = res;
if (code == 200) {
hospitalData.value = data;
}
});
}
const expertiseData = ref([]);
//
const handlExpertiseList = () => {
expertiseList().then((res) => {
const { data, code, message } = res;
if (code == 200) {
expertiseData.value = data;
}
})
}
// Modal done()
const handleSubmit = (done) => {
proxy.$refs.checkFormRef.validate(async (valid) => {
if (!valid) {
proxy.$loading.show();
const {code,message,data}= await checkDoctor(modalCheckForm,modalForm.doctor_id);
if (code == 200) {
proxy.$notification.success("提交成功");
getDoctorInfo(pager);
modalVisible.value=false;
}
proxy.$loading.hide();
done();
} else {
console.log(valid)
proxy.$message.error('表单校验失败');
done(false);
}
});
};
const getElementTop=(elem)=> {
let elemTop = elem.offsetTop; //
let parentElem = elem.offsetParent; //
while (parentElem) {
elemTop += parentElem.offsetTop;
parentElem = parentElem.offsetParent;
}
return elemTop;
}
//
const handleCheck= async(type)=>{
if(type=="ok"){
let id=modalForm.user_doctor_info.qualification_cert_num;
if(!id){
proxy.$message.error("请填写资格证编号");
let top=getElementTop(document.querySelector(".codebox_cert"));
document.querySelector(".myModal").scrollTo(0,top)
return false
}
proxy.$loading.show();
const {code,message,data}= await checkDoctor({
iden_auth_status:1,
qualification_cert_num:id
},modalForm.doctor_id);
if (code == 200) {
proxy.$notification.success("审核通过");
getDoctorInfo(pager);
proxy.$loading.hide();
modalVisible.value=false;
}
}else{
modalCheckForm.iden_auth_status=3;
modalCheckVisible.value=true;
}
}
//
const handleResetQuery = () => {
proxy.$refs.queryFormRef.resetFields();
getDoctorInfo(queryForm);
}
onMounted(() => {
getDoctorInfo(pager);
handleHospitalList();
getDepartmentList();
handlExpertiseList();
});
</script>
<style lang="scss" scoped>
.action {
margin-bottom: 12px;
}
.hospital_name {
width: 160px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.headImg {
margin-right: 20px;
border-radius: 50%;
}
.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

@ -1,641 +0,0 @@
<template>
<div class="app-container">
<a-form :model="queryForm" ref="queryFormRef" layout="inline">
<a-form-item field="user_name" label="医生名字">
<a-input v-model="queryForm.user_name" placeholder="请输入医生名字" @press-enter="handleQuery" />
</a-form-item>
<a-form-item field="mobile" label="电话号码">
<a-input v-model="queryForm.mobile" placeholder="请输入电话号码" @press-enter="handleQuery" />
</a-form-item>
<!-- <a-form-item field="multi_point_status" label="审核状态">
<a-select v-model="queryForm.multi_point_status" placeholder="请选择审核状态" :style="{ width: '180px' }">
<a-option :value="2">审核中</a-option>
<a-option :value="3">认证失败</a-option>
</a-select>
</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-form>
<!-- <a-divider /> -->
<!-- action -->
<!-- table -->
<a-table :columns="columns" :data="tableData"
:row-selection="{ type: 'checkbox', showCheckedAll: true }"
:pagination="{ 'show-total': true, 'show-jumper': true, 'show-page-size': true, total: pager.total, current: currentPage }"
row-key="doctor_id"
@selection-change="(selection) => {deleteData = selection;}" @page-change="handlePageChange"
@page-size-change="handlepage_sizeChange">
<template #doctor_id="{record,rowIndex}">
<div>{{(rowIndex+1)+(pager.page-1)*10}}</div>
</template>
<template #doctor_title="{ record }">
<!-- 医生职称1:主任医师 2:主任中医师 3:副主任医师 4:副主任中医师 5:主治医师 6:住院医师 -->
<div v-if="record.doctor_title==1">主任医师</div>
<div v-else-if="record.doctor_title==2">主任中医师</div>
<div v-else-if="record.doctor_title==3">副主任医师</div>
<div v-else-if="record.doctor_title==4">副主任中医师</div>
<div v-else-if="record.doctor_title==5">主治医师</div>
<div v-else-if="record.doctor_title==6">住院医师</div>
</template>
<template #created_at="{ record }">
{{ parseTime(record.created_at) }}
</template>
<template #hospital_name="{record}">
<div class="hospital_name" :title="record.hospital_name">{{record.hospital_name}}</div>
</template>
<template #inquiry_service="{ record }">
<span>{{filterService(record)}}</span>
</template>
<template #multi_point_status="{ record }">
<!-- 身份认证状态0:未认证 1:认证通过 2:审核中 3:认证失败 -->
<a-tag v-if="record.multi_point_status == 0" color="gray">未认证</a-tag>
<a-tag v-else-if="record.multi_point_status == 1" color="green">认证通过</a-tag>
<a-tag v-else-if="record.multi_point_status == 2" color="#ffb400">审核中</a-tag>
<a-tag v-else color="red">认证失败</a-tag>
</template>
<template #is_recommend="{ record }">
<!-- 身份认证状态0:未认证 1:认证通过 2:审核中 3:认证失败 -->
<a-tag v-if="record.is_recommend == 0" color="gray"></a-tag>
<a-tag v-else color="green"></a-tag>
</template>
<template #status="{ record }">
<!-- 状态0:禁用 1:正常 2:删除 -->
<a-switch v-model="record.status" checked-color="#14C9C9" :checked-value="1" unchecked-value="0" />
</template>
<template #action="{ record }">
<a-space>
<a-button v-has="'admin:sysDoctorMultipoint:check'" type="text"
@click="handleDetail(record)"><icon-book />审核</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" 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-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="请输入医生名字" />
</a-form-item>
</a-col>
<a-col :span="12">
<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="hospital.hospital_name" label="医院名称:">
<a-select placeholder="请选择所在医院" v-model="modalForm.hospital.hospital_name">
<a-option v-for="item in hospitalData" :key="item.hospital_id" :value="item.hospital_id"
:label="item.hospital_name">{{item.hospital_name}}</a-option>
</a-select>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item field="hospital.address" label="医院地址:">
<a-input v-model="modalForm.hospital.address" placeholder="请输入医院地址" />
</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" @change="changeSelect">
<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-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-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.id_card_front">
<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 >
<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">
<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 >
<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-form-item>
</a-col>
</a-row>
<a-row :gutter="24" style="margin-top: 35px;"
v-if="modalForm.user_doctor_info.sign_image">
<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 >
<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">
<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 />
</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 >
<a-button type="primary" v-has="'admin:sysDoctorMultipoint:ok'" @click="handleCheck('ok')">审核通过</a-button>
<a-button type="primary" v-has="'admin:sysDoctorMultipoint:deny'" status="danger" @click="handleCheck(deny)">审核拒绝</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>
<!-- 审核失败弹框 -->
<a-modal :mask-closable="false" v-model:visible="modalCheckVisible" :title="'拒绝理由'" title-align="start"
@before-ok="handleSubmit" @close="() => { $refs.checkFormRef.resetFields();}">
<a-form :model="modalCheckForm" ref="checkFormRef"
:auto-label-width="true" :mask-closable="false" :rules="rules">
<a-form-item field="multi_point_fail_reason" label="原因:">
<a-textarea v-model="modalCheckForm.multi_point_fail_reason" placeholder="请输入多点认证失败原因" />
</a-form-item>
</a-form>
</a-modal>
</div>
</template>
<script setup>
import { reactive, ref, getCurrentInstance, onMounted, nextTick, watch, computed } from 'vue';
import { getDoctorList,getDoctorDetail,checkDoctor} from '@/api/doctor/multipoint';
import {departmentList, decryptCard, hospitalList, expertiseList } from '@/api/doctor/list';
import dayjs from 'dayjs'
import { parseTime } from '@/utils/parseTime';
// Akiraka 20230210
const deleteData = ref([])
// Akiraka 20230210
const deleteVisible = ref(false)
const modalCheckVisible = ref(false)
// Akiraka 20230210
watch(() => deleteVisible.value, (value) => {
if (value == false) {
getDoctorInfo(pager);
}
});
const file = ref();
const { proxy } = getCurrentInstance();
const currentPage = ref(1);
// Pager
const pager = {
total: 0,
page: 1,
page_size: 10,
};
// form
const queryForm = reactive({
inquiry_service: ''
});
const modalCheckForm = reactive({
multi_point_fail_reason:'',
});
const modalForm = reactive({
hospital: {},
user_doctor_info: {
},
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'
});
// Modal
const modalVisible = ref(false);
const modalTitle = ref('默认标题');
//let obj = { 1: '', 2: '', 3: '', 4: '', 5: '', 6: '' };
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: '住院医师'
}
];
// rules
const rules = reactive({
multi_point_fail_reason: [{
required: true,
message: '请输入审核失败原因'
}],
});
// Batch Del List
let batchList = [];
// Table Columns
const columns = [
{ title: '编号', dataIndex: 'doctor_id', slotName: 'doctor_id', width: '90' },
{ title: '医生名字', dataIndex: 'user_name' },
{ title: '手机号码', dataIndex: 'mobile' },
{ title: '医院', dataIndex: 'hospital_name', width: 160, slotName: 'hospital_name' },
{ title: '科室', dataIndex: 'department_custom_name',},
{ title: '职称', dataIndex: 'doctor_title', slotName: 'doctor_title' },
{ title: '申请时间', dataIndex: 'created_at', slotName: 'created_at' },
{ title: '审核状态', dataIndex: 'multi_point_status', slotName: 'multi_point_status' },
{ title: '操作', slotName: 'action' },
];
// Table Data
const tableData = ref([]);
//
const changeSelect = (value) => {
let arr = departmentData.value.filter((item) => {
return item.department_custom_id == value
})
modalForm.department_custom_name = arr[0].department_custom_name
}
//
const handleDetail = async (record) => {
modalVisible.value = true;
modalTitle.value = '医生详情';
const { code, data, message } = await getDoctorDetail(record.doctor_id);
if (code == 200) {
Object.assign(modalForm, data);
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.hospital) {
modalForm.hospital = {};
}
if (!data.doctor_bank_card) {
modalForm.doctor_bank_card = {
province_id: '',
city_id: '',
county_id: '',
bank_id: ''
}
};
if (data.doctor_expertise && data.doctor_expertise.length > 0) {
let arr = [];
data.doctor_expertise.forEach((item) => {
arr.push(item.expertise_id)
})
modalForm.cur_doctor_expertise = arr;
}
}
};
//
const filterService = (record) => {
let arr = [];
let str = '';
if (record.is_img_expert_reception == 1) {
arr.push("专家问诊");
}
if (record.is_img_welfare_reception == 1) {
arr.push("公益问诊")
}
if (record.is_img_quick_reception == 1) {
arr.push("快速问诊")
};
if (record.multi_point_status == 1) {
arr.push("问诊购药")
}
arr.forEach((item) => {
if (!str) {
str += item
} else {
str += ',' + item
}
})
return str ? str : "暂无"
}
/**
* 分页改变
* @param {Number} [page]
*/
const handlePageChange = (page) => {
pager.page = page;
//
currentPage.value = page;
getDoctorInfo({ ...pager, ...queryForm });
};
//
const handlepage_sizeChange = (page_size) => {
pager.page_size = page_size;
getDoctorInfo({ ...pager, ...queryForm });
};
//
const getDoctorInfo = async (params = {}) => {
const { data, code, message } = await getDoctorList(params);
if (code == 200) {
tableData.value = data.data;
Object.assign(pager, { total: data.total, page: data.page, page_size: data.page_size });
}
};
//
const handleQuery = async () => {
pager.page=1;
const params = {
page: pager.page,
page_size: pager.page_size,
...queryForm,
};
getDoctorInfo(params);
};
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 handleHospitalList = () => {
hospitalList().then((res) => {
const { data, code, message } = res;
if (code == 200) {
hospitalData.value = data;
}
});
}
const expertiseData = ref([]);
//
const handlExpertiseList = () => {
expertiseList().then((res) => {
const { data, code, message } = res;
if (code == 200) {
expertiseData.value = data;
}
})
}
// Modal done()
const handleSubmit = (done) => {
proxy.$refs.checkFormRef.validate(async (valid) => {
if (!valid) {
proxy.$loading.show();
const {code,message,data}= await checkDoctor({
multi_point_status:3,
multi_point_fail_reason:modalCheckForm.multi_point_fail_reason
},modalForm.doctor_id);
if (code == 200) {
proxy.$loading.hide();
proxy.$notification.success("提交成功");
modalVisible.value=false;
}
done();
getDoctorInfo(pager);
} else {
console.log(valid)
proxy.$message.error('表单校验失败');
done(false);
}
});
};
//
const handleCheck= async(type)=>{
if(type=="ok"){
proxy.$loading.show();
const {code,message,data}= await checkDoctor({
multi_point_status:1
},modalForm.doctor_id);
if (code == 200) {
proxy.$notification.success("审核通过");
modalVisible.value=false;
};
proxy.$loading.hide();
getDoctorInfo(pager);
}else{
modalCheckVisible.value=true;
}
}
//
const handleResetQuery = () => {
proxy.$refs.queryFormRef.resetFields();
getDoctorInfo(queryForm);
}
onMounted(() => {
getDoctorInfo(pager);
handleHospitalList();
getDepartmentList();
handlExpertiseList();
});
</script>
<style lang="scss" scoped>
.action {
margin-bottom: 12px;
}
.hospital_name {
width: 160px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.headImg {
margin-right: 20px;
border-radius: 50%;
}
.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

@ -38,6 +38,7 @@
</a-form-item>
<a-form-item field="order_product_status" label="订单状态">
<a-select
:allow-clear="true"
v-model="queryForm.order_product_status"
placeholder="请选择订单状态"
:style="{ width: '182px' }"

View File

@ -23,7 +23,7 @@
/>
</a-form-item>
<a-form-item field="inquiry_service" label="订单状态">
<a-select v-model="queryForm.inquiry_status" placeholder="请选择订单状态" :style="{ width: '182px' }">
<a-select :allow-clear="true" 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>