2024-12-30 09:45:52 +08:00

1792 lines
67 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="app-container">
<a-form :model="queryForm" ref="queryFormRef" layout="inline">
<a-form-item field="user_name" label="医生名字">
<a-input :style="{ width: '182px' }" v-model="queryForm.user_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="hospital_name" label="所属医院">
<a-input :style="{ width: '182px' }" v-model="queryForm.hospital_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="doctor_title" label="医生职称">
<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>
<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-select>
</a-form-item>
<a-form-item field="inquiry_service" label="服务类型">
<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>
<a-option :value="3">公益问诊</a-option>
<a-option :value="4">问诊购药</a-option>
</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' }">
<!-- 医生多点执业认证状态0:未认证 1:认证通过 2:审核中 3:认证失败) -->
<a-option :value="0">未认证</a-option>
<a-option :value="1">认证通过</a-option>
<a-option :value="2">审核中</a-option>
<a-option :value="3">认证失败</a-option>
</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' }">
<!-- 医生多点执业认证状态0:未认证 1:认证通过 2:审核中 3:认证失败) -->
<a-option :value="0">未认证</a-option>
<a-option :value="1">认证通过</a-option>
<a-option :value="2">审核中</a-option>
<a-option :value="3">认证失败</a-option>
</a-select>
</a-form-item>
<a-form-item field="idcard_status" label="实名认证">
<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>
<a-option :value="2">认证失败</a-option>
</a-select>
</a-form-item>
<a-form-item field="is_recommend" label="首页推荐">
<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' }">
<!-- 实名认证状态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 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-form>
<a-divider />
<!-- action -->
<div class="action">
<a-space>
<a-button v-has="'admin:sysDoctorList:add'" type="primary" @click="handleAdd"><icon-plus /> 新增 </a-button>
<a-button v-has="'admin:sysDoctorList:selectExport'" type="primary" @click="handlExport(2)"><icon-export />
选择数据导出 </a-button>
<a-button v-has="'admin:sysDoctorList:searchExport'" type="primary" @click="handlExport(1)"><icon-export />
当前搜索全部导出</a-button>
<a-button v-has="'admin:sysDoctorList:allExport'" type="primary" @click="handlExport(3)"><icon-export />
全部导出</a-button>
</a-space>
</div>
<!-- table -->
<a-table :columns="columns" ref="tableRef" :data="tableData" :scroll="{ x: 2000 }"
: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; console.log(selection) }"
@page-change="handlePageChange" @page-size-change="handlepage_sizeChange"
@selectAll="(checked) => { console.log(checked) }">
<template #doctor_id="{ record, rowIndex }">
<div>{{ (rowIndex + 1) + (pager.page - 1) * pager.page_size }}</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 #hospital_name="{ record }">
<div class="hospital_name" :title="record.hospital_name">{{ record.hospital_name }}</div>
</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 #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-if="record.multi_point_status == 3" color="red">认证失败</a-tag>
</template>
<template #is_recommend="{ record }">
<a-tag v-if="record.is_recommend == 0" color="gray">否</a-tag>
<a-tag v-else color="green">是</a-tag>
</template>
<template #is_platform_deep_cooperation="{ record }">
<a-tag v-if="record.is_platform_deep_cooperation == 0" color="gray">否</a-tag>
<a-tag v-else color="green">是</a-tag>
</template>
<template #idcard_status="{ record }">
<!-- 实名认证状态0:未认证 1:认证通过2:认证失败) -->
<a-tag v-if="record.idcard_status == 0" color="gray">未认证</a-tag>
<a-tag v-else-if="record.idcard_status == 1" color="green">认证通过</a-tag>
<a-tag v-else-if="record.idcard_status == 2" color="red">认证失败</a-tag>
</template>
<template #status="{ record }">
<!-- 状态0:禁用 1:正常 2:删除) -->
<a-tag v-if="record.status == 0" color="#ffb400">禁用</a-tag>
<a-tag v-else-if="record.status == 1" color="green">正常</a-tag>
<a-tag v-else color="red">删除</a-tag>
</template>
<template #action="{ record }">
<a-space>
<a-button v-has="'admin:sysDoctorList:detail'" type="text"
@click="handleDetail(record)"><icon-book />详情</a-button>
<a-button v-has="'admin:sysDoctorList:edit'" type="text" @click="handleUpdate(record)"><icon-edit />
修改</a-button>
<!-- <a-button v-has="'admin:sysDoctorList:remove'" type="text"
@click="() => { deleteVisible = true; deleteData = [record.doctor_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"
@before-ok="handleSubmit"
@close="() => { $refs.modalFormRef.resetFields(); modalForm.doctor_id = null; showEye = false }">
<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" @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-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="user.email" label="邮箱:">
<a-input v-model="modalForm.user.email" 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" v-if="modalForm.doctor_bank_card">
<div class="bar"></div>
<div class="name">银行卡信息</div>
</div>
<a-row :gutter="24" style="margin-top: 35px;" v-if="modalForm.doctor_bank_card">
<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" v-if="modalForm.doctor_bank_card">
<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 v-if="modalForm.doctor_bank_card" />
<div class="titlebox"
v-if="((modalForm.user_doctor_info.license_cert && modalForm.user_doctor_info.license_cert.length > 0) && (modalForm.user_doctor_info.qualification_cert && modalForm.user_doctor_info.qualification_cert.length > 0) && (modalForm.user_doctor_info.work_cert && modalForm.user_doctor_info.work_cert.length > 0) && modalForm.user_doctor_info.id_card_front && modalForm.user_doctor_info.id_card_back && modalForm.user_doctor_info.sign_image && modalForm.qr_code) || modalSatus != 'detail'">
<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>
<upload v-show="modalSatus != 'detail'" :isMultiple="true" :fileList="work_cert_list"
:dataType="'work_cert_list'" @changeData="changeData"></upload>
<!-- <a-upload v-show="modalSatus!='detail'" list-type="picture-card" :auto-upload="false"
@change="onChangeFile" accept="image/*" :file-list="work_cert_list"
@before-upload="beforeUpload('avatar')" action="/" image-preview /> -->
</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>
<upload v-show="modalSatus != 'detail'" :isMultiple="false" :fileList="id_card_front_list"
:dataType="'id_card_front_list'" @changeData="changeData"></upload>
<!-- <a-upload v-show="modalSatus!='detail'" :file-list="id_card_front_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.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>
<upload v-show="modalSatus != 'detail'" :isMultiple="false" :fileList="id_card_back_list"
:dataType="'id_card_back_list'" @changeData="changeData"></upload>
<!-- <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>
<upload v-show="modalSatus != 'detail'" :isMultiple="false" :fileList="sign_image_list"
:dataType="'sign_image_list'" @changeData="changeData"></upload>
<!-- <a-upload v-show="modalSatus!='detail'" :file-list="sign_image_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.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-if="((modalForm.user_doctor_info.license_cert && modalForm.user_doctor_info.license_cert.length > 0) && (modalForm.user_doctor_info.qualification_cert && modalForm.user_doctor_info.qualification_cert.length > 0) && (modalForm.user_doctor_info.work_cert && modalForm.user_doctor_info.work_cert.length > 0) && modalForm.user_doctor_info.id_card_front && modalForm.user_doctor_info.id_card_back && modalForm.user_doctor_info.sign_image && modalForm.qr_code) || modalSatus != 'detail'" />
<div class="titlebox" v-if="modalForm.iden_auth_status == 1 && modalForm.user_ca_cert">
<div class="bar"></div>
<div class="name">CA证书配置</div>
</div>
<a-row :gutter="24" style="margin-top: 35px;" v-if="modalForm.iden_auth_status == 1 && modalForm.user_ca_cert">
<a-col :span="24">
<a-form-item field="" label="" no-style>
<div v-if="modalForm.user_ca_cert">
证书有效期:{{ parseTime(modalForm.user_ca_cert.cert_application_time, '{y}-{m}-{d}') }}-{{ parseTime(modalForm.user_ca_cert.cert_expire_time, '{y}-{m}-{d}') }}
</div>
<a-space style="margin-top: 15px;">
<a-button type="primary" @click="() => { okVisible = true; okStatus = 6; }"
v-has="'admin:sysDoctorList:applyCA'">证书申请</a-button>
<a-button type="primary" status="success" @click="() => { okVisible = true; okStatus = 2; }"
v-has="'admin:sysDoctorList:updateCA'">证书续期</a-button>
<!-- <a-button type="primary" status="danger" @click="()=>{okVisible=true;okStatus=3;}" v-has="'admin:sysDoctorList:removeCA'">证书注销</a-button> -->
</a-space>
<a-divider />
<div class="title">签章配置</div>
<a-space style="margin-top: 15px;">
<a-button type="primary" status="success" @click="() => { okVisible = true; okStatus = 4; }"
v-has="'admin:sysDoctorList:applySign'"
:disabled="(modalForm.user_ca_cert && modalForm.user_ca_cert.is_sign_config == 1) ? true : false">签章申请</a-button>
<!-- <a-button type="primary" status="danger" @click="()=>{okVisible=true;okStatus=5;}">签章更新</a-button> -->
</a-space>
</a-form-item>
</a-col>
</a-row>
</a-form>
<a-divider v-show="modalSatus != 'detail'" v-if="modalForm.iden_auth_status == 1 && modalForm.user_ca_cert" />
<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="saveBefore" v-has="'admin:sysDoctorList:save'">保存</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>
<!-- Akiraka 20230223 删除与批量删除 开始 -->
<DeleteModal :data="deleteData" :visible="deleteVisible" :apiDelete="removeDoctor"
@deleteVisibleChange="() => deleteVisible = false" :cancelText="okStatus == 7 ? '未修改备案' : '取消'" />
<!-- Akiraka 20230223 删除与批量删除 结束 -->
<a-modal v-model:visible="okVisible" :modal-style="{ width: '320px' }" body-class="okmodal" @ok="handleSubmit"
@cancel="() => okVisible = false">
<template #title>
提示
</template>
<div v-if="okStatus == 1">确定保存当前信息</div>
<div v-else-if="okStatus == 2">确定重新续期CA证书</div>
<div v-else-if="okStatus == 3">确定注销CA证书</div>
<div v-else-if="okStatus == 4">确定申请签章</div>
<div v-else-if="okStatus == 5">确定更新签章</div>
<div v-else-if="okStatus == 6">确定申请CA证书</div>
<div v-else-if="okStatus == 7">修改职称或者执业证/资格证需要先在四川省互联网医疗服务监管平台修改备案信息成功后才可保存 (谨慎操作) </div>
</a-modal>
</div>
</template>
<script setup>
import { reactive, ref, getCurrentInstance, onMounted, nextTick, watch } from 'vue';
import { getDoctorList, addDoctor, removeDoctor, updateDoctor, getDoctorDetail, departmentList, decryptCard, hospitalList, expertiseList, areaList, bankList, decryptBank, exportDoctor } from '@/api/doctor/list';
import { applyCA, updateCA, removeCA, updateSign, applySign } from '@/api/doctor/ca';
import { ossSign, ossUpload } from '@/api/oss';
import { parseTime } from '@/utils/parseTime';
import { Message } from '@arco-design/web-vue';
import { downloadFile } from '@/utils/downloadFile';
import dayjs from 'dayjs'
// Akiraka 20230210 删除数据
const deleteData = ref([])
// Akiraka 20230210 删除对话框
const deleteVisible = ref(false)
// Akiraka 20230210 监听删除事件
const okVisible = ref(false);
const okStatus = ref(1); //1保isChange_license存 2证书续期 3//证书注销 //4申请签章 //5更新签章 //7 更改科室职称执业证/资格证
watch(() => deleteVisible.value, (value) => {
if (value == false) {
getDoctorInfo(pager);
}
})
const oldTitle = ref('');//旧职称
const isChange_license = ref(false);
const isChange_qualification = ref(false);
const tableRef = ref();
const showCheckedAll = ref(true);
const file = ref();
const oldFrontImg = ref(''), oldBackImg = ref(''), oldSignImg = ref('');
const { proxy } = getCurrentInstance();
const currentPage = ref(1);
const loading = ref(false);
// Pager
const pager = {
total: 0,
page: 1,
page_size: 10,
};
// form
const queryForm = reactive({
inquiry_service: ''
});
const modalForm = reactive({
hospital: {
address: '',
hospital_name: '',
hospital_id: ''
},
user_doctor_info: {
card_num_mask: ''
},
user_ca_cert: null,
doctor_bank_card: {
province_id: '',
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
});
if (modalForm.doctor_id) {
isChange_license.value = true;
}
} 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
})
if (modalForm.doctor_id) {
isChange_qualification.value = true;
}
} 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(() => queryForm.create_range_time, (value) => {
if (value) {
let [startTime, endTime] = value
queryForm.created_at = startTime + "&" + endTime;
} else {
queryForm.created_at = ''
};
})
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: '请上传医生头像' }, {
validator: (value, cb) => {
if (value == 'https://img.applets.igandanyiyuan.com/basic/file/doctor_avatar.png') {
cb('请上传新的医生头像');
}
}
}],
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.email': [
{ required: true, message: '请输入邮箱' },
{
validator: (value, cb) => {
let reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
if (!reg.test(value)) {
cb('邮箱格式不正确');
}
}
}],
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("请上传医师资格证")
}
if (qualification_cert_list.value.length < 2) {
cb("至少上传2张医师资格证")
}
resolve()
}, 1000)
})
}
}
],
work_cert: [
{
validator: (value, cb) => {
return new Promise(resolve => {
window.setTimeout(() => {
if (work_cert_list.value.length == 0) {
cb("请上传医师职称证")
}
resolve()
}, 1000)
})
}
}
],
// is_platform_deep_cooperation:[{required: true, message: '请选择是否是平台深度合作'}],
// is_platform_deep_cooperation:[{required: true, message: '请选择是否是平台深度合作'}],
//is_recommend
};
// 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: '住院医师'
}
]
// 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', width: 125 },
{ title: '医院', dataIndex: 'hospital_name', width: '300', slotName: 'hospital_name' },
{ title: '职称', dataIndex: 'doctor_title', slotName: 'doctor_title' },
{ title: '开启服务', dataIndex: 'inquiry_type' },
{ title: '多点审核状态', dataIndex: 'multi_point_status', slotName: 'multi_point_status', width: 140 },
{ title: '是否推荐', dataIndex: 'is_recommend', slotName: 'is_recommend' },
{ title: '深度合作', dataIndex: 'is_platform_deep_cooperation', slotName: 'is_platform_deep_cooperation' },
{ title: '申请人', dataIndex: 'created_by' },
{ title: '身份认证', dataIndex: 'iden_auth_status', slotName: 'iden_auth_status' },
{ title: '实名认证', dataIndex: 'idcard_status', slotName: 'idcard_status' },
{ title: '状态', dataIndex: 'status', slotName: 'status' },
// { title: '创建时间', dataIndex: 'created_at', slotName: 'created_at' },
{ title: '操作', slotName: 'action', fixed: "right", width: 180 },
];
// Table Data
const tableData = ref([]);
//弹框状态
const modalSatus = ref('add');
//改变科室
const changeSelect = (value) => {
let arr = departmentData.value.filter((item) => {
return item.department_custom_id == value
})
modalForm.department_custom_name = arr[0].department_custom_name
}
// 新增Satus
const handleAdd = () => {
modalVisible.value = true;
modalTitle.value = '新增医生';
modalSatus.value = 'add';
modalForm.doctor_id = null;
modalForm.hospital = {
address: '',
hospital_name: '',
hospital_id: ''
};
modalForm.user_ca_cert = null;
modalForm.user = {};
modalForm.license_cert = '';
modalForm.qualification_cert = '';
modalForm.work_cert = '';
modalForm.user_doctor_info = {};
modalForm.id_card_front = '';
modalForm.id_card_back = '';
modalForm.sign_image = '';
modalForm.doctor_bank_card = {
}
license_cert_list.value = [];
qualification_cert_list.value = [];
work_cert_list.value = [];
id_card_front_list.value = [];
id_card_back_list.value = []
sign_image_list.value = [];
//$refs.modalFormRef.resetFields();
};
//详情
const handleDetail = async (record) => {
modalVisible.value = true;
modalTitle.value = '医生详情';
modalSatus.value = 'detail';
const { code, data, message } = await getDoctorDetail(record.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);
} else {
modalForm.doctor_bank_card = {}
}
if (data.doctor_bank_card && data.doctor_bank_card.city_id) {
handelAreaList('', data.doctor_bank_card.city_id, 4);
} else {
modalForm.doctor_bank_card = {}
}
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 handleUpdate = async (record) => {
modalVisible.value = true;
modalTitle.value = '修改医生';
modalSatus.value = 'edit';
const { code, data, message } = await getDoctorDetail(record.doctor_id);
if (code == 200) {
Object.assign(modalForm, data);
handleDecryptBank();
if (data.doctor_bank_card && data.doctor_bank_card.province_id) {
handelAreaList('', data.doctor_bank_card.province_id, 3);
} else {
modalForm.doctor_bank_card = {}
}
if (data.doctor_bank_card && data.doctor_bank_card.city_id) {
handelAreaList('', data.doctor_bank_card.city_id, 4);
} else {
modalForm.doctor_bank_card = {}
}
if (!data.user_doctor_info) {
data.user_doctor_info = {};
modalForm.user_doctor_info = {};
}
if (!data.hospital) {
modalForm.hospital = {};
}
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] = ''
}
}
}
if (data.doctor_title == 0) {
modalForm.doctor_title = '';
}
oldTitle.value = data.doctor_title;
if (data.hospital_id == 0) {
modalForm.hospital_id = '';
}
if (data.department_custom_id == 0) {
modalForm.department_custom_id = ''
}
let { license_cert, qualification_cert, work_cert, id_card_front, id_card_back, sign_image } = data.user_doctor_info;
license_cert_list.value = transArr(license_cert);
qualification_cert_list.value = transArr(qualification_cert);
work_cert_list.value = transArr(work_cert);
id_card_front_list.value = id_card_front ? transArr(id_card_front) : [];
id_card_back_list.value = id_card_back ? transArr(id_card_back) : [];
sign_image_list.value = sign_image ? transArr(sign_image) : [];
oldFrontImg.value = id_card_front;
oldBackImg.value = id_card_back;
oldSignImg.value = sign_image;
if (modalForm.iden_auth_status == 2) {
Message.warning('正在审核中,暂时不能修改');
}
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;
}
}
//await nextTick();
};
//申请证书
const handleApplyCA = () => {
applyCA(modalForm.user_doctor_info.user_id).then(data => {
if (data.code == 200) {
Message.success('证书申请成功');
handleUpdate({ doctor_id: modalForm.doctor_id })
}
})
}
const handleUpdateCA = () => {
updateCA(modalForm.user_doctor_info.user_id).then(data => {
if (data.code == 200) {
Message.success('证书更新成功');
handleUpdate({ doctor_id: modalForm.doctor_id })
}
})
}
const handleRemoveCA = () => {
removeCA(modalForm.user_doctor_info.user_id).then(data => {
if (data.code == 200) {
Message.success('证书注销成功');
handleUpdate({ doctor_id: modalForm.doctor_id })
}
})
}
const handleApplySign = () => {
applySign({
type: 2,
user_id: modalForm.user_doctor_info.user_id
}).then(data => {
if (data.code == 200) {
Message.success('签章申请成功');
}
})
}
const handleUpdateSign = () => {
updateSign(modalForm.user_doctor_info.user_id).then(data => {
if (data.code == 200) {
Message.success('签章更新成功');
}
})
}
//开启服务处理
// 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 : "暂无"
// }
// Modal ok
// 异步关闭Modal需要调用 done()
const saveBefore = () => {
if ((oldTitle.value != modalForm.doctor_title || isChange_license.value || isChange_qualification.value) && modalForm.doctor_id) {
okStatus.value = 7
} else {
okStatus.value = 1
}
okVisible.value = true;
}
const handleSubmit = (done) => {
if (okStatus.value == 1 || okStatus.value == 7) {
proxy.$refs.modalFormRef.validate(async (valid) => {
if (!valid) {
let res;
let modalData = {
card_name: modalForm.user_name,
mobile: modalForm.user.mobile,
email: modalForm.user.email,
is_recommend: modalForm.is_recommend,
avatar: modalForm.avatar,
doctor_title: modalForm.doctor_title,
department_custom_id: modalForm.department_custom_id,
department_custom_name: modalForm.department_custom_name,
department_custom_mobile: modalForm.department_custom_mobile,
hospital_id: modalForm.hospital_id,
be_good_at: modalForm.be_good_at,
brief_introduction: modalForm.brief_introduction,
license_cert: modalForm.license_cert,
qualification_cert: modalForm.qualification_cert,
work_cert: modalForm.work_cert,
qualification_cert_num: modalForm.user_doctor_info.qualification_cert_num,
id_card_front: modalForm.id_card_front,
id_card_back: modalForm.id_card_back,
sign_image: modalForm.sign_image,
card_num: modalForm.card_num,
doctor_expertise: modalForm.cur_doctor_expertise,
is_platform_deep_cooperation: modalForm.is_platform_deep_cooperation,
is_sys_diagno_cooperation: modalForm.is_sys_diagno_cooperation,
bank_card_code: modalForm.bank_card_code,
bank_card_province_id: modalForm.doctor_bank_card.province_id ? modalForm.doctor_bank_card.province_id : 0,
bank_card_city_id: modalForm.doctor_bank_card.city_id ? modalForm.doctor_bank_card.city_id : 0,
bank_card_county_id: modalForm.doctor_bank_card.county_id ? modalForm.doctor_bank_card.county_id : 0,
bank_id: modalForm.doctor_bank_card.bank_id
}
if (!modalForm.doctor_id) {
if (modalForm.id_card_front && modalForm.id_card_back && modalForm.sign_image) {
if (modalForm.doctor_bank_card) {
if (!modalForm.doctor_bank_card.province_id || !modalForm.doctor_bank_card.city_id || !modalForm.doctor_bank_card.county_id) {
proxy.$notification.error("请选择开户银行所在地省市区信息");
return false
};
if (!modalForm.doctor_bank_card.bank_id) {
proxy.$notification.error("请选择开户银行");
return false
};
};
if (!modalForm.bank_card_code) {
proxy.$notification.error("请输入银行卡号");
return false
}
if (modalForm.bank_card_code) {
const reg = /^[0-9]{9,19}$/;
if (!reg.test(modalForm.bank_card_code)) {
proxy.$notification.error("请输入正确的银行卡号");
return false
}
}
}
proxy.$loading.show();
const { code, message } = await addDoctor(modalData);
if (code == 200) {
proxy.$notification.success('新增成功');
modalVisible.value = false;
}
proxy.$loading.hide();
} else {
if (oldFrontImg.value && !modalForm.id_card_front) {
proxy.$notification.error("请上传医师身份证正面照片");
return false
};
if (oldBackImg.value && !modalForm.id_card_back) {
proxy.$notification.error("请上传医师身份证反面照片");
return false
};
if (oldSignImg.value && !modalForm.sign_image) {
proxy.$notification.error("请上传医师手写签名照片");
return false
};
if (modalForm.id_card_front && modalForm.id_card_back && modalForm.sign_image) {
if (modalForm.doctor_bank_card) {
if (!modalForm.doctor_bank_card.province_id || !modalForm.doctor_bank_card.city_id || !modalForm.doctor_bank_card.county_id) {
proxy.$notification.error("请选择开户银行所在地省市区信息");
return false
};
if (!modalForm.doctor_bank_card.bank_id) {
proxy.$notification.error("请选择开户银行");
return false
};
};
if (!modalForm.bank_card_code) {
proxy.$notification.error("请输入银行卡号");
return false
}
if (modalForm.bank_card_code) {
const reg = /^[0-9]{9,19}$/;
if (!reg.test(modalForm.bank_card_code)) {
proxy.$notification.error("请输入正确的银行卡号");
return false
}
}
}
proxy.$loading.show();
const { code, message } = await updateDoctor(modalData, modalForm.doctor_id);
if (code == 200) {
proxy.$notification.success('更新成功');
modalVisible.value = false;
isChange_license.value = false;
isChange_qualification.value = false;
}
proxy.$loading.hide();
}
//done();
getDoctorInfo(pager);
} else {
console.log(valid)
Message.error('表单校验失败');
//done(false);
}
});
} else if (okStatus.value == 2) {
//证书续期
handleUpdateCA();
} else if (okStatus.value == 3) {
//证书注销
handleRemoveCA();
} else if (okStatus.value == 4) {
//签章申请
handleApplySign();
} else if (okStatus.value == 5) {
//签章更新
handleUpdateSign();
} else if (okStatus.value == 6) {
handleApplyCA();
}
};
// 批量删除
const handleBatchDelete = () => {
if (batchList.length !== 0) {
proxy.$modal.warning({
title: '提示',
content: '是否批量删除以下选中的数据?',
hideCancel: false,
onOk: async () => {
const res = await removeDoctor({ ids: batchList });
Message.success(res.message);
getDoctorInfo(pager);
},
onCancel: () => {
Message.info('已取消批量删除数据');
},
});
} else {
Message.error('请勾选需要删除的数据!');
}
};
/**
* 分页改变
* @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 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;
}
})
}
// 重置搜索
const handleResetQuery = () => {
proxy.$refs.queryFormRef.resetFields();
pager.page = 1;
pager.page_size = 10;
currentPage.value = 1;
getDoctorInfo({ ...pager, ...queryForm });
}
//获取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);
}
const handlExport = async (type) => {
proxy.$loading.show();
let fromData = null;
if (type == 1) {
fromData = {
type,
...queryForm
}
} else if (type == 2) {
if (deleteData.value.length == 0) {
proxy.$message.warning('请勾选数据');
proxy.$loading.hide();
return false;
};
let id = '';
deleteData.value.forEach((item) => {
if (id) {
id += "," + item
} else {
id = item;
}
})
fromData = {
type,
id
}
} else if (type == 3) {
//tableRef.value.selectAll(false)
fromData = {
type
}
}
const { code, data } = await exportDoctor(fromData);
if (code == 200) {
downloadFile(data, '医生列表');
}
proxy.$loading.hide();
}
//ca证书
onMounted(() => {
getDoctorInfo(pager);
handleHospitalList();
getDepartmentList();
handlExpertiseList();
handelAreaList("", "", 2);
handleBankList();
});
</script>
<style lang="scss" scoped>
.action {
margin-bottom: 12px;
}
.okmodal div {
text-align: center;
}
.hospital_name {
width: 290px;
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>