登录成功后,进入登录页自动跳转首页,加入多点管理
This commit is contained in:
parent
e9c038d4ed
commit
23c4fe9f9e
@ -19,6 +19,7 @@
|
|||||||
"codemirror": "^6.0.1",
|
"codemirror": "^6.0.1",
|
||||||
"cropperjs": "^1.5.13",
|
"cropperjs": "^1.5.13",
|
||||||
"dayjs": "^1.11.9",
|
"dayjs": "^1.11.9",
|
||||||
|
"file-saver": "^2.0.5",
|
||||||
"i": "^0.3.7",
|
"i": "^0.3.7",
|
||||||
"js-cookie": "^3.0.5",
|
"js-cookie": "^3.0.5",
|
||||||
"npm": "^9.6.6",
|
"npm": "^9.6.6",
|
||||||
@ -26,7 +27,8 @@
|
|||||||
"spinkit": "^2.0.1",
|
"spinkit": "^2.0.1",
|
||||||
"vue": "^3.2.47",
|
"vue": "^3.2.47",
|
||||||
"vue-codemirror": "^6.1.1",
|
"vue-codemirror": "^6.1.1",
|
||||||
"vue-router": "^4.1.6"
|
"vue-router": "^4.1.6",
|
||||||
|
"xlsx": "^0.18.5"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@arco-design/web-vue": "^2.45.3",
|
"@arco-design/web-vue": "^2.45.3",
|
||||||
|
|||||||
24
src/api/doctor/multipoint.js
Normal file
24
src/api/doctor/multipoint.js
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
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
|
||||||
|
})
|
||||||
|
}
|
||||||
@ -47,9 +47,9 @@ const handleLogout = () => {
|
|||||||
title: '提示',
|
title: '提示',
|
||||||
content: '确定注销并退出登陆系统吗?',
|
content: '确定注销并退出登陆系统吗?',
|
||||||
hideCancel: false,
|
hideCancel: false,
|
||||||
onOk: () => {
|
onOk:async() => {
|
||||||
const store = useUserStore();
|
const store = useUserStore();
|
||||||
store.userLogut();
|
await store.userLogut();
|
||||||
window.sessionStorage.removeItem('token');
|
window.sessionStorage.removeItem('token');
|
||||||
clearLocalStorage();
|
clearLocalStorage();
|
||||||
proxy.$router.push('/login');
|
proxy.$router.push('/login');
|
||||||
|
|||||||
@ -75,7 +75,7 @@ router.beforeEach(async (to, from, next) => {
|
|||||||
// 判断用户Token是否获取
|
// 判断用户Token是否获取
|
||||||
if (to.name !== 'login' && !store.token) {
|
if (to.name !== 'login' && !store.token) {
|
||||||
next({ name: 'login' });
|
next({ name: 'login' });
|
||||||
} else {
|
}else {
|
||||||
// 判断判断权限有无获取
|
// 判断判断权限有无获取
|
||||||
if (store.token && permissionStore.addRouters.length==0) {
|
if (store.token && permissionStore.addRouters.length==0) {
|
||||||
//store.getUserInfo();
|
//store.getUserInfo();
|
||||||
@ -88,7 +88,10 @@ router.beforeEach(async (to, from, next) => {
|
|||||||
// next(to.fullPath);
|
// next(to.fullPath);
|
||||||
// 如果 addRoute 并未完成,路由守卫会一层一层的执行执行,直到 addRoute 完成,找到对应的路由
|
// 如果 addRoute 并未完成,路由守卫会一层一层的执行执行,直到 addRoute 完成,找到对应的路由
|
||||||
next({ ...to, replace: true });
|
next({ ...to, replace: true });
|
||||||
} else {
|
}else if(to.name == 'login' && store.token && permissionStore.addRouters.length>0){
|
||||||
|
const menuList= permissionStore.menuList;
|
||||||
|
next({ path: menuList[0].children[0].path });
|
||||||
|
} else {
|
||||||
next();
|
next();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -43,7 +43,7 @@ export const useUserStore = defineStore('user', {
|
|||||||
// const res = await getAppConfig();
|
// const res = await getAppConfig();
|
||||||
// setLocalStorage('sysConfig', res.data);
|
// setLocalStorage('sysConfig', res.data);
|
||||||
//res.data;
|
//res.data;
|
||||||
let data={sys_app_logo: "https://doc-image.zhangwj.com/img/go-admin.png", sys_app_name: "go-admin管理系统"};
|
let data={sys_app_logo: "https://doc-image.zhangwj.com/img/go-admin.png", sys_app_name: "互联网医院后台管理"};
|
||||||
setLocalStorage('sysConfig', data);
|
setLocalStorage('sysConfig', data);
|
||||||
this.sysConfig =data
|
this.sysConfig =data
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
235
src/utils/exportExcel.js
Normal file
235
src/utils/exportExcel.js
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
|
||||||
|
import { saveAs } from 'file-saver';
|
||||||
|
|
||||||
|
//因为版本问题,高版本使用第一种
|
||||||
|
import * as XLSX from 'xlsx'; // vue3可用
|
||||||
|
|
||||||
|
|
||||||
|
function generateArray(table) {
|
||||||
|
var out = [];
|
||||||
|
var rows = table.querySelectorAll('tr');
|
||||||
|
var ranges = [];
|
||||||
|
for (var R = 0; R < rows.length; ++R) {
|
||||||
|
var outRow = [];
|
||||||
|
var row = rows[R];
|
||||||
|
var columns = row.querySelectorAll('td');
|
||||||
|
for (var C = 0; C < columns.length; ++C) {
|
||||||
|
var cell = columns[C];
|
||||||
|
var colspan = cell.getAttribute('colspan');
|
||||||
|
var rowspan = cell.getAttribute('rowspan');
|
||||||
|
var cellValue = cell.innerText;
|
||||||
|
if (cellValue !== '' && cellValue == +cellValue) cellValue = +cellValue;
|
||||||
|
|
||||||
|
//Skip ranges
|
||||||
|
ranges.forEach(function (range) {
|
||||||
|
if (
|
||||||
|
R >= range.s.r &&
|
||||||
|
R <= range.e.r &&
|
||||||
|
outRow.length >= range.s.c &&
|
||||||
|
outRow.length <= range.e.c
|
||||||
|
) {
|
||||||
|
for (var i = 0; i <= range.e.c - range.s.c; ++i) outRow.push(null);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
//Handle Row Span
|
||||||
|
if (rowspan || colspan) {
|
||||||
|
rowspan = rowspan || 1;
|
||||||
|
colspan = colspan || 1;
|
||||||
|
ranges.push({
|
||||||
|
s: {
|
||||||
|
r: R,
|
||||||
|
c: outRow.length,
|
||||||
|
},
|
||||||
|
e: {
|
||||||
|
r: R + rowspan - 1,
|
||||||
|
c: outRow.length + colspan - 1,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
//Handle Value
|
||||||
|
outRow.push(cellValue !== '' ? cellValue : null);
|
||||||
|
|
||||||
|
//Handle Colspan
|
||||||
|
if (colspan) for (var k = 0; k < colspan - 1; ++k) outRow.push(null);
|
||||||
|
}
|
||||||
|
out.push(outRow);
|
||||||
|
}
|
||||||
|
return [out, ranges];
|
||||||
|
}
|
||||||
|
|
||||||
|
function datenum(v, date1904) {
|
||||||
|
if (date1904) v += 1462;
|
||||||
|
var epoch = Date.parse(v);
|
||||||
|
return (epoch - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function sheet_from_array_of_arrays(data, opts) {
|
||||||
|
var ws = {};
|
||||||
|
var range = {
|
||||||
|
s: {
|
||||||
|
c: 10000000,
|
||||||
|
r: 10000000,
|
||||||
|
},
|
||||||
|
e: {
|
||||||
|
c: 0,
|
||||||
|
r: 0,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
for (var R = 0; R != data.length; ++R) {
|
||||||
|
for (var C = 0; C != data[R].length; ++C) {
|
||||||
|
if (range.s.r > R) range.s.r = R;
|
||||||
|
if (range.s.c > C) range.s.c = C;
|
||||||
|
if (range.e.r < R) range.e.r = R;
|
||||||
|
if (range.e.c < C) range.e.c = C;
|
||||||
|
var cell = {
|
||||||
|
v: data[R][C],
|
||||||
|
};
|
||||||
|
if (cell.v == null) continue;
|
||||||
|
var cell_ref = XLSX.utils.encode_cell({
|
||||||
|
c: C,
|
||||||
|
r: R,
|
||||||
|
});
|
||||||
|
|
||||||
|
if (typeof cell.v === 'number') cell.t = 'n';
|
||||||
|
else if (typeof cell.v === 'boolean') cell.t = 'b';
|
||||||
|
else if (cell.v instanceof Date) {
|
||||||
|
cell.t = 'n';
|
||||||
|
cell.z = XLSX.SSF._table[14];
|
||||||
|
cell.v = datenum(cell.v);
|
||||||
|
} else cell.t = 's';
|
||||||
|
|
||||||
|
ws[cell_ref] = cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (range.s.c < 10000000) ws['!ref'] = XLSX.utils.encode_range(range);
|
||||||
|
return ws;
|
||||||
|
}
|
||||||
|
|
||||||
|
function Workbook() {
|
||||||
|
if (!(this instanceof Workbook)) return new Workbook();
|
||||||
|
this.SheetNames = [];
|
||||||
|
this.Sheets = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
function s2ab(s) {
|
||||||
|
var buf = new ArrayBuffer(s.length);
|
||||||
|
var view = new Uint8Array(buf);
|
||||||
|
for (var i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xff;
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function export_table_to_excel(id) {
|
||||||
|
var theTable = document.getElementById(id);
|
||||||
|
var oo = generateArray(theTable);
|
||||||
|
var ranges = oo[1];
|
||||||
|
|
||||||
|
/* original data */
|
||||||
|
var data = oo[0];
|
||||||
|
var ws_name = 'SheetJS';
|
||||||
|
|
||||||
|
var wb = new Workbook(),
|
||||||
|
ws = sheet_from_array_of_arrays(data);
|
||||||
|
|
||||||
|
/* add ranges to worksheet */
|
||||||
|
// ws['!cols'] = ['apple', 'banan'];
|
||||||
|
ws['!merges'] = ranges;
|
||||||
|
|
||||||
|
/* add worksheet to workbook */
|
||||||
|
wb.SheetNames.push(ws_name);
|
||||||
|
wb.Sheets[ws_name] = ws;
|
||||||
|
|
||||||
|
var wbout = XLSX.write(wb, {
|
||||||
|
bookType: 'xlsx',
|
||||||
|
bookSST: false,
|
||||||
|
type: 'binary',
|
||||||
|
});
|
||||||
|
|
||||||
|
saveAs(
|
||||||
|
new Blob([s2ab(wbout)], {
|
||||||
|
type: 'application/octet-stream',
|
||||||
|
}),
|
||||||
|
'test.xlsx'
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export function export_json_to_excel({
|
||||||
|
multiHeader = [],
|
||||||
|
header,
|
||||||
|
data,
|
||||||
|
filename,
|
||||||
|
merges = [],
|
||||||
|
autoWidth = true,
|
||||||
|
bookType = 'xlsx',
|
||||||
|
} = {}) {
|
||||||
|
/* original data */
|
||||||
|
filename = filename || 'excel-list';
|
||||||
|
data = [...data];
|
||||||
|
data.unshift(header);
|
||||||
|
|
||||||
|
for (let i = multiHeader.length - 1; i > -1; i--) {
|
||||||
|
data.unshift(multiHeader[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var ws_name = 'SheetJS';
|
||||||
|
var wb = new Workbook(),
|
||||||
|
ws = sheet_from_array_of_arrays(data);
|
||||||
|
|
||||||
|
if (merges.length > 0) {
|
||||||
|
if (!ws['!merges']) ws['!merges'] = [];
|
||||||
|
merges.forEach((item) => {
|
||||||
|
ws['!merges'].push(XLSX.utils.decode_range(item));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (autoWidth) {
|
||||||
|
/*设置worksheet每列的最大宽度*/
|
||||||
|
const colWidth = data.map((row) =>
|
||||||
|
row.map((val) => {
|
||||||
|
/*先判断是否为null/undefined*/
|
||||||
|
if (val == null) {
|
||||||
|
return {
|
||||||
|
wch: 10,
|
||||||
|
};
|
||||||
|
} else if (val.toString().charCodeAt(0) > 255) {
|
||||||
|
/*再判断是否为中文*/
|
||||||
|
return {
|
||||||
|
wch: val.toString().length * 2,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
wch: val.toString().length,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
})
|
||||||
|
);
|
||||||
|
/*以第一行为初始值*/
|
||||||
|
let result = colWidth[0];
|
||||||
|
for (let i = 1; i < colWidth.length; i++) {
|
||||||
|
for (let j = 0; j < colWidth[i].length; j++) {
|
||||||
|
if (result[j]['wch'] < colWidth[i][j]['wch']) {
|
||||||
|
result[j]['wch'] = colWidth[i][j]['wch'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ws['!cols'] = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* add worksheet to workbook */
|
||||||
|
wb.SheetNames.push(ws_name);
|
||||||
|
wb.Sheets[ws_name] = ws;
|
||||||
|
|
||||||
|
var wbout = XLSX.write(wb, {
|
||||||
|
bookType: bookType,
|
||||||
|
bookSST: false,
|
||||||
|
type: 'binary',
|
||||||
|
});
|
||||||
|
saveAs(
|
||||||
|
new Blob([s2ab(wbout)], {
|
||||||
|
type: 'application/octet-stream',
|
||||||
|
}),
|
||||||
|
`${filename}.${bookType}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
@ -95,7 +95,7 @@
|
|||||||
<a-radio :value="1">停用</a-radio>
|
<a-radio :value="1">停用</a-radio>
|
||||||
</a-radio-group>
|
</a-radio-group>
|
||||||
</a-form-item> -->
|
</a-form-item> -->
|
||||||
<a-form-item field="is_admin" label="是否是管理员">
|
<a-form-item field="is_admin" label="是否管理员">
|
||||||
<a-radio-group v-model="modalForm.is_admin">
|
<a-radio-group v-model="modalForm.is_admin">
|
||||||
<a-radio :value="0">否</a-radio>
|
<a-radio :value="0">否</a-radio>
|
||||||
<a-radio :value="1">是</a-radio>
|
<a-radio :value="1">是</a-radio>
|
||||||
@ -204,7 +204,7 @@
|
|||||||
const modalForm = reactive({
|
const modalForm = reactive({
|
||||||
sort: 0,
|
sort: 0,
|
||||||
role_status: '',
|
role_status: '',
|
||||||
is_admin: '',
|
is_admin: null,
|
||||||
menu_ids:[]
|
menu_ids:[]
|
||||||
});
|
});
|
||||||
const scopeForm = reactive({});
|
const scopeForm = reactive({});
|
||||||
@ -215,9 +215,9 @@
|
|||||||
required: true,
|
required: true,
|
||||||
message: '请输入角色名称'
|
message: '请输入角色名称'
|
||||||
}],
|
}],
|
||||||
roleKey: [{
|
is_admin: [{
|
||||||
required: true,
|
required: true,
|
||||||
message: '请输入权限字符'
|
message: '请选择是否是管理员'
|
||||||
}],
|
}],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -11,8 +11,8 @@
|
|||||||
<a-form-item field="iden_auth_status" label="审核状态">
|
<a-form-item field="iden_auth_status" label="审核状态">
|
||||||
<a-select v-model="queryForm.iden_auth_status" placeholder="请选择审核状态" :style="{ width: '180px' }">
|
<a-select v-model="queryForm.iden_auth_status" placeholder="请选择审核状态" :style="{ width: '180px' }">
|
||||||
<!-- 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败) -->
|
<!-- 医生多点执业认证状态(0:未认证 1:认证通过 2:审核中 3:认证失败) -->
|
||||||
<a-option :value="0">未认证</a-option>
|
<!-- <a-option :value="0">未认证</a-option>
|
||||||
<a-option :value="1">认证通过</a-option>
|
<a-option :value="1">认证通过</a-option> -->
|
||||||
<a-option :value="2">审核中</a-option>
|
<a-option :value="2">审核中</a-option>
|
||||||
<a-option :value="3">认证失败</a-option>
|
<a-option :value="3">认证失败</a-option>
|
||||||
</a-select>
|
</a-select>
|
||||||
@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
<!-- table -->
|
<!-- table -->
|
||||||
<a-table :columns="columns" :data="tableData"
|
<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 }"
|
:pagination="{ 'show-total': true, 'show-jumper': true, 'show-page-size': true, total: pager.total, current: currentPage }"
|
||||||
row-key="doctor_id"
|
row-key="doctor_id"
|
||||||
@selection-change="(selection) => {deleteData = selection;}" @page-change="handlePageChange"
|
@selection-change="(selection) => {deleteData = selection;}" @page-change="handlePageChange"
|
||||||
@ -109,7 +110,7 @@
|
|||||||
<a-form-item field="idCard" label="身份证号:" >
|
<a-form-item field="idCard" label="身份证号:" >
|
||||||
<div class="box" v-show="!showEye">
|
<div class="box" v-show="!showEye">
|
||||||
<div class="cardNum">{{modalForm.user_doctor_info.card_num_mask}}</div>
|
<div class="cardNum">{{modalForm.user_doctor_info.card_num_mask}}</div>
|
||||||
<icon-eye-invisible class="eye" @click="()=>{showEye=true}" />
|
<icon-eye-invisible class="eye" @click="handelDecryptCard(modalForm.user_id)" />
|
||||||
</div>
|
</div>
|
||||||
<div class="box" v-show="showEye">
|
<div class="box" v-show="showEye">
|
||||||
<div class="cardNum">{{id_card_num}}</div>
|
<div class="cardNum">{{id_card_num}}</div>
|
||||||
@ -376,8 +377,8 @@
|
|||||||
<a-col :span="24">
|
<a-col :span="24">
|
||||||
<a-form-item field="" label="" no-style>
|
<a-form-item field="" label="" no-style>
|
||||||
<a-space >
|
<a-space >
|
||||||
<a-button type="primary" @click="handleCheck('ok')">审核通过</a-button>
|
<a-button type="primary" v-has="'admin:sysDoctorExamine:ok'" @click="handleCheck('ok')">审核通过</a-button>
|
||||||
<a-button type="primary" status="danger" @click="handleCheck(deny)">审核拒绝</a-button>
|
<a-button type="primary" status="danger" v-has="'admin:sysDoctorExamine:deny'" @click="handleCheck(deny)">审核拒绝</a-button>
|
||||||
</a-space>
|
</a-space>
|
||||||
<!-- <a-space v-if="modalSatus=='edit'">
|
<!-- <a-space v-if="modalSatus=='edit'">
|
||||||
<a-button type="primary" status="warning">拉黑</a-button>
|
<a-button type="primary" status="warning">拉黑</a-button>
|
||||||
@ -578,11 +579,6 @@
|
|||||||
})
|
})
|
||||||
modalForm.department_custom_name = arr[0].department_custom_name
|
modalForm.department_custom_name = arr[0].department_custom_name
|
||||||
}
|
}
|
||||||
watch(() => modalForm.user_id, (value) => {
|
|
||||||
if (value) {
|
|
||||||
handelDecryptCard(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
//详情
|
//详情
|
||||||
const handleDetail = async (record) => {
|
const handleDetail = async (record) => {
|
||||||
@ -695,6 +691,7 @@
|
|||||||
const id_card_num = ref('');
|
const id_card_num = ref('');
|
||||||
//解密身份证号码
|
//解密身份证号码
|
||||||
const handelDecryptCard = async (user_id) => {
|
const handelDecryptCard = async (user_id) => {
|
||||||
|
showEye.value=true
|
||||||
const { data, code, message } = await decryptCard({
|
const { data, code, message } = await decryptCard({
|
||||||
user_id
|
user_id
|
||||||
});
|
});
|
||||||
|
|||||||
@ -58,9 +58,10 @@
|
|||||||
|
|
||||||
<!-- table -->
|
<!-- table -->
|
||||||
<a-table :columns="columns" :data="tableData" :scroll="{ x: 1500 }"
|
<a-table :columns="columns" :data="tableData" :scroll="{ x: 1500 }"
|
||||||
|
:row-selection="{ type: 'checkbox', showCheckedAll: true }"
|
||||||
:pagination="{ 'show-total': true, 'show-jumper': true, 'show-page-size': true, total: pager.total, current: currentPage }"
|
:pagination="{ 'show-total': true, 'show-jumper': true, 'show-page-size': true, total: pager.total, current: currentPage }"
|
||||||
row-key="doctor_id"
|
row-key="doctor_id"
|
||||||
@selection-change="(selection) => {deleteData = selection;}" @page-change="handlePageChange"
|
@selection-change="(selection) => {deleteData = selection;console.log(selection)}" @page-change="handlePageChange"
|
||||||
@page-size-change="handlepage_sizeChange">
|
@page-size-change="handlepage_sizeChange">
|
||||||
<template #doctor_id="{record,rowIndex}">
|
<template #doctor_id="{record,rowIndex}">
|
||||||
<div>{{(rowIndex+1)+(pager.page-1)*10}}</div>
|
<div>{{(rowIndex+1)+(pager.page-1)*10}}</div>
|
||||||
@ -157,7 +158,7 @@
|
|||||||
<a-form-item field="idCard" label="身份证号:" v-else>
|
<a-form-item field="idCard" label="身份证号:" v-else>
|
||||||
<div class="box" v-show="!showEye && modalSatus!='add'">
|
<div class="box" v-show="!showEye && modalSatus!='add'">
|
||||||
<div class="cardNum">{{modalForm.user_doctor_info.card_num_mask}}</div>
|
<div class="cardNum">{{modalForm.user_doctor_info.card_num_mask}}</div>
|
||||||
<icon-eye-invisible class="eye" @click="()=>{showEye=true}" />
|
<icon-eye-invisible class="eye" @click="handelDecryptCard(modalForm.user_id)" />
|
||||||
</div>
|
</div>
|
||||||
<div class="box" v-show="showEye && modalSatus!='add'">
|
<div class="box" v-show="showEye && modalSatus!='add'">
|
||||||
<div class="cardNum">{{id_card_num}}</div>
|
<div class="cardNum">{{id_card_num}}</div>
|
||||||
@ -169,7 +170,7 @@
|
|||||||
<a-row :gutter="24" v-if="modalSatus!='add'">
|
<a-row :gutter="24" v-if="modalSatus!='add'">
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
<a-form-item field="user.mobile" label="联系电话:">
|
<a-form-item field="user.mobile" label="联系电话:">
|
||||||
<a-input v-model="modalForm.user.mobile" placeholder="请输入联系电话" />
|
<a-input v-model="modalForm.user.mobile" placeholder="请输入联系电话" :disabled="modalSatus=='edit'" />
|
||||||
</a-form-item>
|
</a-form-item>
|
||||||
</a-col>
|
</a-col>
|
||||||
<a-col :span="12">
|
<a-col :span="12">
|
||||||
@ -602,11 +603,6 @@
|
|||||||
const id_card_front_list = ref([]);
|
const id_card_front_list = ref([]);
|
||||||
const id_card_back_list = ref([]);
|
const id_card_back_list = ref([]);
|
||||||
const sign_image_list = ref([]);
|
const sign_image_list = ref([]);
|
||||||
watch(() => modalForm.user_id, (value) => {
|
|
||||||
if (value) {
|
|
||||||
handelDecryptCard(value);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
watch(() => license_cert_list.value, (value) => {
|
watch(() => license_cert_list.value, (value) => {
|
||||||
let arr = []
|
let arr = []
|
||||||
value.forEach((item) => {
|
value.forEach((item) => {
|
||||||
@ -784,7 +780,7 @@
|
|||||||
{ title: '医院', dataIndex: 'hospital_name', width: '150', slotName: 'hospital_name' },
|
{ title: '医院', dataIndex: 'hospital_name', width: '150', slotName: 'hospital_name' },
|
||||||
{ title: '职称', dataIndex: 'doctor_title', slotName: 'doctor_title' },
|
{ title: '职称', dataIndex: 'doctor_title', slotName: 'doctor_title' },
|
||||||
{ title: '开启服务', dataIndex: 'inquiry_service', slotName: 'inquiry_service' },
|
{ title: '开启服务', dataIndex: 'inquiry_service', slotName: 'inquiry_service' },
|
||||||
{ title: '多点审核状态', dataIndex: 'multi_point_status', slotName: 'multi_point_status' },
|
{ title: '多点审核状态', dataIndex: 'multi_point_status', slotName: 'multi_point_status',width:140 },
|
||||||
{ title: '是否推荐', dataIndex: 'is_recommend', slotName: 'is_recommend' },
|
{ title: '是否推荐', dataIndex: 'is_recommend', slotName: 'is_recommend' },
|
||||||
{ title: '申请人', dataIndex: 'user_name' },
|
{ title: '申请人', dataIndex: 'user_name' },
|
||||||
{ title: '审核状态', dataIndex: 'iden_auth_status', slotName: 'iden_auth_status' },
|
{ title: '审核状态', dataIndex: 'iden_auth_status', slotName: 'iden_auth_status' },
|
||||||
@ -955,7 +951,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
//done();
|
//done();
|
||||||
getDoctorInfo(pager);
|
//getDoctorInfo(pager);
|
||||||
} else {
|
} else {
|
||||||
console.log(valid)
|
console.log(valid)
|
||||||
proxy.$message.error('表单校验失败');
|
proxy.$message.error('表单校验失败');
|
||||||
@ -1042,6 +1038,7 @@
|
|||||||
const id_card_num = ref('');
|
const id_card_num = ref('');
|
||||||
//解密身份证号码
|
//解密身份证号码
|
||||||
const handelDecryptCard = async (user_id) => {
|
const handelDecryptCard = async (user_id) => {
|
||||||
|
showEye.value=true;
|
||||||
const { data, code, message } = await decryptCard({
|
const { data, code, message } = await decryptCard({
|
||||||
user_id
|
user_id
|
||||||
});
|
});
|
||||||
|
|||||||
624
src/views/doctor/doctor-multipoint/index.vue
Normal file
624
src/views/doctor/doctor-multipoint/index.vue
Normal file
@ -0,0 +1,624 @@
|
|||||||
|
<template>
|
||||||
|
<div class="app-container">
|
||||||
|
<a-form :model="queryForm" ref="queryFormRef" layout="inline">
|
||||||
|
|
||||||
|
<a-form-item field="doctorName" 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' }">
|
||||||
|
<!-- 医生多点执业认证状态(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>
|
||||||
|
<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:detail'" 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.address" label="医院地址:">
|
||||||
|
<a-input v-model="modalForm.hospital.address" placeholder="请输入医院地址" />
|
||||||
|
</a-form-item>
|
||||||
|
</a-col>
|
||||||
|
<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-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(); modalForm.doctor_id = null;}">
|
||||||
|
<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_expertise && data.doctor_expertise.length > 0) {
|
||||||
|
let arr = [];
|
||||||
|
data.doctor_expertise.forEach((item) => {
|
||||||
|
arr.push(item.expertise_id)
|
||||||
|
})
|
||||||
|
modalForm.cur_doctor_expertise = arr;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
proxy.$notification.error(message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
//开启服务处理
|
||||||
|
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 });
|
||||||
|
} else {
|
||||||
|
proxy.$notification.error(message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// 查询医生信息
|
||||||
|
const handleQuery = async () => {
|
||||||
|
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;
|
||||||
|
} else {
|
||||||
|
proxy.$notification.error(message);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//切换小眼睛
|
||||||
|
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;
|
||||||
|
} else {
|
||||||
|
proxy.$notification.error(message);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const hospitalData = ref([]);
|
||||||
|
//获取医院列表
|
||||||
|
const handleHospitalList = () => {
|
||||||
|
hospitalList().then((res) => {
|
||||||
|
const { data, code, message } = res;
|
||||||
|
if (code == 200) {
|
||||||
|
hospitalData.value = data;
|
||||||
|
} else {
|
||||||
|
proxy.$notification.error(message);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
const expertiseData = ref([]);
|
||||||
|
// 获取专长列表
|
||||||
|
const handlExpertiseList = () => {
|
||||||
|
expertiseList().then((res) => {
|
||||||
|
const { data, code, message } = res;
|
||||||
|
if (code == 200) {
|
||||||
|
expertiseData.value = data;
|
||||||
|
} else {
|
||||||
|
proxy.$notification.error(message);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
// 异步关闭Modal需要调用 done()
|
||||||
|
const handleSubmit = (done) => {
|
||||||
|
proxy.$refs.checkFormRef.validate(async (valid) => {
|
||||||
|
if (!valid) {
|
||||||
|
const {code,message,data}= await checkDoctor({
|
||||||
|
multi_point_status:3,
|
||||||
|
multi_point_fail_reason:''
|
||||||
|
},modalForm.doctor_id);
|
||||||
|
if (code == 200) {
|
||||||
|
proxy.$notification.success("提交成功");
|
||||||
|
} else {
|
||||||
|
proxy.$notification.error(message);
|
||||||
|
}
|
||||||
|
done();
|
||||||
|
} else {
|
||||||
|
console.log(valid)
|
||||||
|
proxy.$message.error('表单校验失败');
|
||||||
|
done(false);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
//审核
|
||||||
|
const handleCheck= async(type)=>{
|
||||||
|
if(type=="ok"){
|
||||||
|
|
||||||
|
const {code,message,data}= await checkDoctor({
|
||||||
|
multi_point_status:1
|
||||||
|
},modalForm.doctor_id);
|
||||||
|
if (code == 200) {
|
||||||
|
proxy.$notification.success("审核通过");
|
||||||
|
} else {
|
||||||
|
proxy.$notification.error(message);
|
||||||
|
}
|
||||||
|
}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>
|
||||||
@ -1,11 +1,34 @@
|
|||||||
<template>
|
<template>
|
||||||
<div>
|
<button @click="excel" type="primary" >导出当前表</button>
|
||||||
<upload></upload>
|
|
||||||
</div>
|
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script setup>
|
||||||
|
import {ref,reactive} from "vue"
|
||||||
|
const dog = reactive([
|
||||||
|
{id:1,name:"小黄"},
|
||||||
|
{id:2,name:"小黑"},
|
||||||
|
{id:3,name:"小狗"}
|
||||||
|
])
|
||||||
|
function excel(){
|
||||||
|
//获取表头
|
||||||
|
const header = Object.keys(dog[0]) //Object.keys 会把数据转换为数组,传入对象就取 键
|
||||||
|
//获取具体数据
|
||||||
|
const data = dog.map(item=>{
|
||||||
|
return header.map(key=>{
|
||||||
|
return item[key]
|
||||||
|
})
|
||||||
|
})
|
||||||
|
import("@/utils/exportExcel.js").then(excel=>{
|
||||||
|
excel.export_json_to_excel({
|
||||||
|
header,//表头内容 数组格式
|
||||||
|
data,//具体数据 这是个二维数组,乱填页面会卡死
|
||||||
|
filename:'', //文件名称
|
||||||
|
autoWidth:true,//单元格是否自适应
|
||||||
|
bookType:"xlsx"//文件的类型
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user