Browse Source

代码优化

master
lizhi 3 years ago
parent
commit
e307877d2f
  1. 10
      src/api/platform/system/controller/doctor.ts
  2. 56
      src/api/platform/system/controller/hospital.ts
  3. 59
      src/api/platform/system/controller/institution.ts
  4. 58
      src/api/platform/system/controller/office.ts
  5. 8
      src/views/institution/address/AddressModal.vue
  6. 15
      src/views/institution/address/address.data.ts
  7. 72
      src/views/institution/doctor/doctor.data.ts
  8. 98
      src/views/institution/hospital/HospitalModal.vue
  9. 55
      src/views/institution/hospital/hospital.data.ts
  10. 166
      src/views/institution/hospital/index.vue
  11. 88
      src/views/institution/institution/InstitutionModal.vue
  12. 168
      src/views/institution/institution/index.vue
  13. 14
      src/views/institution/institution/institution.data.ts
  14. 89
      src/views/institution/office/OfficeModal.vue
  15. 169
      src/views/institution/office/index.vue
  16. 41
      src/views/institution/office/office.data.ts

10
src/api/platform/system/controller/doctor.ts

@ -17,17 +17,17 @@ enum Api {
export const queryById = (params: { id: String }) => export const queryById = (params: { id: String }) =>
defHttp.get<DoctorItem>({url: Api.QueryById + `/${params.id}`}); defHttp.get<DoctorItem>({url: Api.QueryById + `/${params.id}`});
/** 查询客户端列表 */ /** 查询医生列表 */
export const listDoctor = (params?: Partial<DoctorItem>) => defHttp.get<DoctorItemListResult>({ url: Api.list, params }, { isReturnResultResponse: true }); export const listDoctor = (params?: Partial<DoctorItem>) => defHttp.get<DoctorItemListResult>({ url: Api.list, params }, { isReturnResultResponse: true });
/** 新增客户端 */ /** 新增医生*/
export const addDoctor = (params: Partial<DoctorParams>) => defHttp.post({ url: Api.add, data: params }); export const addDoctor = (params: Partial<DoctorParams>) => defHttp.post({ url: Api.add, data: params });
/** 修改客户端 */ /** 修改医生 */
export const editDoctor = (params: Partial<DoctorParams>) => defHttp.put({ url: Api.edit, data: params }); export const editDoctor = (params: Partial<DoctorParams>) => defHttp.put({ url: Api.edit, data: params });
/** 查询客户端详细 */ /** 查询医生详细 */
export const getDoctor = (id: string) => defHttp.get<DoctorItem>({ url: `${Api.get}/${id}` }); export const getDoctor = (id: string) => defHttp.get<DoctorItem>({ url: `${Api.get}/${id}` });
/** 删除客户端 */ /** 删除医生 */
export const delDoctor = (id: string) => defHttp.delete({ url: `${Api.del}/${id}` }); export const delDoctor = (id: string) => defHttp.delete({ url: `${Api.del}/${id}` });

56
src/api/platform/system/controller/hospital.ts

@ -2,29 +2,45 @@ import {HospitalParams,HospitalItem,HospitalItemListResult} from '/@/api/platfor
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import {isDef} from '/@/utils/is'; import {isDef} from '/@/utils/is';
const prefix = '/system_proxy/system';
enum Api { enum Api {
QueryById = '/hospital/query', QueryById = '/system_proxy/system/hospital/query',
List = '/hospital/list', list = '/system_proxy/system/hospital/list',
Add = '/hospital/add', add = '/system_proxy/system/hospital/add',
Update = '/hospital/update', edit = '/system_proxy/system/hospital/update',
Remove = '/hospital/remove' del = '/system_proxy/system/hospital/remove',
get = '/system_proxy/system/hospital'
} }
export const queryById = (params: { id: String }) => // export const queryById = (params: { id: String }) =>
defHttp.get<HospitalItem>({url: prefix + Api.QueryById, params}); // defHttp.get<HospitalItem>({url: Api.QueryById, params});
//
// export const list = (params: HospitalParams) =>
// defHttp.get<HospitalItemListResult>({url: Api.list, params});
//
// export const set = (params: HospitalItem) => {
// if (isDef(params.id)){
// defHttp.put<HospitalItem>({url: Api.edit, params});
// }else {
// defHttp.post<HospitalItem>({url: Api.add, params});
// }
// };
// export const remove = (params: {ids: String}) =>
// defHttp.delete<boolean>({url: Api.Remove + `/${params.ids}`});
// export const remove = (id: string) => defHttp.delete({ url: `${Api.del}/${id}` });
export const queryById = (params: { id: String }) =>
defHttp.get<HospitalItem>({url: Api.QueryById, params});
/** 查询医院列表*/
export const list = (params: HospitalParams) => export const list = (params: HospitalParams) =>
defHttp.get<HospitalItemListResult>({url: prefix + Api.List, params}); defHttp.get<HospitalItemListResult>({url: Api.list, params});
// export const list = (params?:Partial<HospitalItem>) =>defHttp.get<HospitalItemListResult>({url: Api.list, params},{isReturnResultResponse: true});
export const set = (params: HospitalItem) => { /** 新增医院*/
if (isDef(params.id)){ export const addHospital = (params: Partial<HospitalParams>)=> defHttp.post({url: Api.add ,data: params});
defHttp.put<HospitalItem>({url: prefix + Api.Update, params}); /** 修改医院*/
}else { export const editHospital = (params: Partial<HospitalParams>) => defHttp.put({url: Api.edit, data: params});
defHttp.post<HospitalItem>({url: prefix + Api.Add, params}); /** 查询医院详细*/
} export const getHospital = (id: string) => defHttp.get<HospitalItem>({url: `${Api.get}/${id}` });
}; /** 删除项目 */
export const delHospital = (id: string) => defHttp.delete({ url: `${Api.del}/${id}` });
export const remove = (params: {ids: String}) =>
defHttp.delete<boolean>({url: prefix + Api.Remove + `/${params.ids}`});

59
src/api/platform/system/controller/institution.ts

@ -3,29 +3,50 @@ import {InstitutionParams,InstitutionItem,InstitutionItemListResult} from '/@/ap
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import {isDef} from '/@/utils/is'; import {isDef} from '/@/utils/is';
const prefix = '/system_proxy/system';
enum Api { enum Api {
QueryById = '/institution/query', QueryById = '/system_proxy/system/institution/query',
List = '/institution/list', list = '/system_proxy/system/institution/list',
Add = '/institution/add', add = '/system_proxy/system/institution/add',
Update = '/institution/update', edit = '/system_proxy/system/institution/update',
Remove = '/institution/remove' del = '/system_proxy/system/institution/remove',
get = '/system_proxy/system/institution'
} }
// export const queryById = (params: { id: String }) =>
// defHttp.get<InstitutionItem>({url: prefix + Api.QueryById, params});
//
// export const list = (params: InstitutionParams) =>
// defHttp.get<InstitutionItemListResult>({url: prefix + Api.List, params});
//
// export const set = (params: InstitutionItem) => {
// if (isDef(params.id)){
// defHttp.put<InstitutionItem>({url: prefix + Api.Update, params});
// }else {
// defHttp.post<InstitutionItem>({url: prefix + Api.Add, params});
// }
// };
//
// export const remove = (params: {ids: String}) =>
// defHttp.delete<boolean>({url: prefix + Api.Remove + `/${params.ids}`});
export const queryById = (params: { id: String }) => export const queryById = (params: { id: String }) =>
defHttp.get<InstitutionItem>({url: prefix + Api.QueryById, params}); defHttp.get<InstitutionItem>({url: Api.QueryById + `/${params.id}`});
/** 查询机构列表 */
// export const list = (params?: Partial<InstitutionItem>) => defHttp.get<InstitutionItemListResult>({ url: Api.list, params }, { isReturnResultResponse: true });
export const list = (params: InstitutionParams) => export const list = (params: InstitutionParams) =>
defHttp.get<InstitutionItemListResult>({url: prefix + Api.List, params}); defHttp.get<InstitutionItemListResult>({url: Api.list, params});
/** 新增机构*/
export const set = (params: InstitutionItem) => { export const addInstitution = (params: Partial<InstitutionParams>) => defHttp.post({ url: Api.add, data: params });
if (isDef(params.id)){
defHttp.put<InstitutionItem>({url: prefix + Api.Update, params}); /** 修改机构 */
}else { export const editInstitution = (params: Partial<InstitutionParams>) => defHttp.put({ url: Api.edit, data: params });
defHttp.post<InstitutionItem>({url: prefix + Api.Add, params});
} /** 查询机构详细 */
}; export const getInstitution = (id: string) => defHttp.get<InstitutionItem>({ url: `${Api.get}/${id}` });
export const remove = (params: {ids: String}) => /** 删除机构 */
defHttp.delete<boolean>({url: prefix + Api.Remove + `/${params.ids}`}); export const delInstitution= (id: string) => defHttp.delete({ url: `${Api.del}/${id}` });

58
src/api/platform/system/controller/office.ts

@ -1,30 +1,50 @@
import {OfficeParams,OfficeItem,OfficeItemListResult} from '/@/api/platform/system/entity/officeModel'; import {OfficeParams,OfficeItem,OfficeItemListResult} from '/@/api/platform/system/entity/officeModel';
import { defHttp } from '/@/utils/http/axios'; import { defHttp } from '/@/utils/http/axios';
import {isDef} from '/@/utils/is'; import {isDef} from '/@/utils/is';
import {HospitalItemListResult, HospitalParams} from "/@/api/platform/system/entity/hospitalModel";
const prefix = '/system_proxy/system';
enum Api { enum Api {
QueryById = '/office/getById', QueryById = '/system_proxy/system/office/getById',
List = '/office/list', list = '/system_proxy/system/office/list',
Add = '/office/add', add = '/system_proxy/system/office/add',
Update = '/office/update', edit = '/system_proxy/system/office/update',
Remove = '/office/remove' del = '/system_proxy/system/office/remove',
get = '/system_proxy/system/office'
} }
//
// export const queryById = (params: { id: String }) =>
// defHttp.get<OfficeItem>({url:Api.QueryById, params});
//
// export const list = (params: OfficeParams) =>
// defHttp.get<OfficeItemListResult>({url: Api.List, params});
//
// export const set = (params: OfficeItem) => {
// if (isDef(params.id)){
// defHttp.put<OfficeItem>({url:Api.Update, params});
// }else {
// defHttp.post<OfficeItem>({url: Api.Add, params});
// }
// };
//
// export const remove = (params: {ids: String}) =>
// defHttp.delete<boolean>({url:Api.Remove + `/${params.ids}`});
export const queryById = (params: { id: String }) => export const queryById = (params: { id: String }) =>
defHttp.get<OfficeItem>({url: prefix + Api.QueryById, params}); defHttp.get<OfficeItem>({url: Api.QueryById + `/${params.id}`});
/** 查询科室列表 */
// export const listOffice = (params?: Partial<OfficeItem>) => defHttp.get<OfficeItemListResult>({ url: Api.list, params }, { isReturnResultResponse: true });
export const listOffice = (params: OfficeItem) =>
defHttp.get<OfficeItemListResult>({url: Api.list, params});
/** 新增科室*/
export const addOffice = (params: Partial<OfficeParams>) => defHttp.post({ url: Api.add, data: params });
export const list = (params: OfficeParams) => /** 修改科室 */
defHttp.get<OfficeItemListResult>({url: prefix + Api.List, params}); export const editOffice = (params: Partial<OfficeParams>) => defHttp.put({ url: Api.edit, data: params });
export const set = (params: OfficeItem) => { /** 查询科室详细 */
if (isDef(params.id)){ export const getOffice = (id: string) => defHttp.get<OfficeItem>({ url: `${Api.get}/${id}` });
defHttp.put<OfficeItem>({url: prefix + Api.Update, params});
}else {
defHttp.post<OfficeItem>({url: prefix + Api.Add, params});
}
};
export const remove = (params: {ids: String}) => /** 删除科室 */
defHttp.delete<boolean>({url: prefix + Api.Remove + `/${params.ids}`}); export const delOffice = (id: string) => defHttp.delete({ url: `${Api.del}/${id}` });

8
src/views/institution/address/AddressModal.vue

@ -20,6 +20,7 @@
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal'; import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal';
import { listAddr, addAddr, editAddr, getAddr} from '/@/api/platform/system/controller/address'; import { listAddr, addAddr, editAddr, getAddr} from '/@/api/platform/system/controller/address';
import { listToTree } from '/@/utils/helper/treeHelper'; import { listToTree } from '/@/utils/helper/treeHelper';
import {isEmpty} from '/@/utils/is';
/** 通用变量统一声明区域 */ /** 通用变量统一声明区域 */
const tag = ref<Nullable<string>>(''); const tag = ref<Nullable<string>>('');
@ -45,6 +46,13 @@
treeData: [topAddr] treeData: [topAddr]
} }
}); });
await updateSchema({
field: 'id',
componentProps: {
disabled: tag.value == 'edit'
},
});
const addrId = data.record?.id; const addrId = data.record?.id;
const props: Partial<ModalProps> = { confirmLoading: false }; const props: Partial<ModalProps> = { confirmLoading: false };
// tag // tag

15
src/views/institution/address/address.data.ts

@ -7,7 +7,7 @@ import {Tag} from 'ant-design-vue';
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
{ {
title: '区域ID', title: '区域编码',
dataIndex: 'code', dataIndex: 'code',
width: 50, width: 50,
}, },
@ -41,10 +41,10 @@ export const searchFormSchema: FormSchema[] = [
}, },
{ {
field:'code', field:'code',
label:'区域ID', label:'区域编码',
component:'Input', component:'Input',
componentProps:{ componentProps:{
placeholder:'请输入区域ID', placeholder:'请输入区域编码',
}, },
colProps:{span:5} colProps:{span:5}
}, },
@ -100,12 +100,19 @@ export const addressFormSchema: FormSchema[] = [
} }
}, },
{ {
field: 'code', field: 'id',
label: '区域ID', label: '区域ID',
component: 'Input', component: 'Input',
helpMessage: ['区域ID'], helpMessage: ['区域ID'],
required: true required: true
}, },
{
field: 'code',
label: '区域代码',
component: 'Input',
required: true,
},
{ {
field:'sort', field:'sort',
label:'排序', label:'排序',

72
src/views/institution/doctor/doctor.data.ts

@ -3,9 +3,9 @@ import { FormSchema } from '/@/components/Table';
import {h, watch, watchEffect, watchSyncEffect} from 'vue'; import {h, watch, watchEffect, watchSyncEffect} from 'vue';
import {Tag} from 'ant-design-vue'; import {Tag} from 'ant-design-vue';
import { list as hospitalList } from '/@/api/platform/system/controller/hospital'; import { list as hospitalList } from '/@/api/platform/system/controller/hospital';
import {list as institutionList, list as institutalList} from '/@/api/platform/system/controller/institution'; import {list as institutionList} from '/@/api/platform/system/controller/institution';
import { list as officeList } from '/@/api/platform/system/controller/office'; import { listOffice as officeList } from '/@/api/platform/system/controller/office';
import {deepMerge} from "/@/utils"; import {deepMerge} from '/@/utils';
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
@ -118,17 +118,16 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 5 }, colProps: { span: 5 },
}, },
{ {
field: 'beginTime', field: 'dateRange',
label: '起始时间', label: '创建时间',
component: 'DatePicker', component: 'RangePicker',
colProps: { span: 5 }, componentProps: {
}, style: { width:'100%' },
{ valueFormat: 'YYYY-MM-DD',
field: 'endTime', placeholder: ['开始日期','结束日期']
label: '截止时间', },
component: 'DatePicker', colProps: { span: 8 }
colProps: { span: 5 }, }
},
]; ];
export const doctorFormSchema: FormSchema[] = [ export const doctorFormSchema: FormSchema[] = [
@ -148,7 +147,7 @@ export const doctorFormSchema: FormSchema[] = [
field: 'title', field: 'title',
label: '医生职称', label: '医生职称',
component: 'Input', component: 'Input',
required: false, required: true,
}, },
{ {
field: 'sex', field: 'sex',
@ -167,7 +166,14 @@ export const doctorFormSchema: FormSchema[] = [
field: 'phone', field: 'phone',
label: '医生电话', label: '医生电话',
component: 'Input', component: 'Input',
required: false, rules: [
{
pattern: new RegExp('^1[3|4|5|6|7|8|9][0-9]\\d{8}$'),
message: '请输入正确的手机号',
validateTrigger: 'change',
required: true
}
],
}, },
{ {
field: 'email', field: 'email',
@ -201,18 +207,18 @@ export const doctorFormSchema: FormSchema[] = [
renderComponentContent: ({ schema, values, model, field }) => { renderComponentContent: ({ schema, values, model, field }) => {
const organType = model.organType; const organType = model.organType;
watch(organType, watch(organType,
() => { () => {
const dataApi = organType=='1' ? hospitalList : institutionList; const dataApi = organType=='1' ? hospitalList : institutionList;
console.log(schema); console.log(schema);
schema.componentProps = deepMerge({ schema.componentProps = deepMerge({
api: dataApi, api: dataApi,
labelField: 'name', labelField: 'name',
valueField: 'id' valueField: 'id'
}); });
}, },
{ {
immediate: true, immediate: true,
} }
); );
} }
}, },
@ -220,7 +226,13 @@ export const doctorFormSchema: FormSchema[] = [
// field: 'officeId', // field: 'officeId',
// label: '所属科室', // label: '所属科室',
// component: 'ApiSelect', // component: 'ApiSelect',
// required: true, // componentProps: {
// mode: 'multiple',
// resultField: 'list',
// labelField: 'name',
// valueField: 'id',
// api: officeList,
// },
// }, // },
{ {
field: 'status', field: 'status',
@ -239,4 +251,4 @@ export const doctorFormSchema: FormSchema[] = [
field: 'remarks', field: 'remarks',
component: 'InputTextArea', component: 'InputTextArea',
} }
]; ];

98
src/views/institution/hospital/HospitalModal.vue

@ -1,65 +1,79 @@
<template> <template>
<BasicModal v-bind="$attrs" <BasicModal v-bind="$attrs"
:title="getTitle" width="720px"
@register="registerModal" @register="registerModal"
@ok="handleSubmit" @ok="handleSubmit"
> >
<BasicForm @register="registerForm"/> <BasicForm @register="registerForm"/>
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ref, computed, unref, toRaw} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {hospitalFormSchema} from './hospital.data';
import {BasicForm, useForm} from '/@/components/Form';
import {set} from '/@/api/platform/system/controller/hospital';
import {HospitalItem} from '/@/api/platform/system/entity/hospitalModel';
const isUpdate = ref(true);
// emit
const emit = defineEmits(['success', 'register']);
/** /**
* 表单 * 提供模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致
* 采用vben-动态表格表单封装组件编写,采用 setup 写法
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
* author entfrm开发团队-王翔
*/ */
const [registerForm, {resetFields, setFieldsValue, validate}] = useForm({ import { ref, unref } from 'vue';
labelWidth: 120, import { BasicForm, useForm } from '/@/components/Form/index';
import { hospitalFormSchema } from './hospital.data';
import {addHospital, delHospital,getHospital,editHospital} from '/@/api/platform/system/controller/hospital';
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal';
import { isEmpty } from '/@/utils/is';
/** 通用变量统一声明区域 */
const tag = ref<Nullable<string>>('');
/** https://v3.cn.vuejs.org/api/options-data.html#emits */
const emit = defineEmits(['success', 'register']);
const [registerForm, { resetFields, setFieldsValue, validate, clearValidate, updateSchema }] = useForm({
labelWidth: 100,
schemas: hospitalFormSchema, schemas: hospitalFormSchema,
showActionButtonGroup: false, showActionButtonGroup: false,
actionColOptions: { baseColProps: { span: 24 }
span: 23,
},
}); });
/** const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data: WindowInnerData = { _tag: '' }) => {
* 表单参数 //
*/ await resetFields();
const [registerModal, {setModalProps, closeModal}] = useModalInner( (data) => { await clearValidate();
resetFields(); //
setModalProps({confirmLoading: false}); tag.value = data._tag;
isUpdate.value = !!data?.isUpdate; const id = data.record?.id;
if (unref(isUpdate)) { const props: Partial<ModalProps> = { confirmLoading: false };
if(typeof data.record.addressIds == 'string'){ // tag
let addressIdsStr: string = data.record.addressIds; switch (unref(tag)) {
const addressIds:String[] = addressIdsStr.split(','); case 'add':
data.record.addressIds = addressIds; props.title = '新增医院';
} break;
setFieldsValue({ case 'edit':
...data.record, props.title = '编辑医院';
}); await setFieldsValue(await getHospital(id));
break;
} }
// :
setModalProps(props);
}); });
//
const getTitle = computed(() => (!unref(isUpdate) ? '新增医院' : '编辑医院')); /** 处理弹出框提交 */
async function handleSubmit() { async function handleSubmit() {
try { try {
const values = await validate(); //
setModalProps({confirmLoading: true}); const formData = await validate();
let val = toRaw<HospitalItem>(values); //
values.addressIds = toRaw(val.addressIds); setModalProps({ confirmLoading: true });
await set(values); // tag
switch (unref(tag)) {
case 'add':
await addHospital(formData);
break;
case 'edit':
await editHospital(formData);
break;
}
//
closeModal(); closeModal();
emit('success'); emit('success');
} finally { } finally {
setModalProps({confirmLoading: false}); setModalProps({ confirmLoading: false });
} }
} }
</script> </script>

55
src/views/institution/hospital/hospital.data.ts

@ -111,17 +111,41 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 5 }, colProps: { span: 5 },
}, },
{ {
field: 'beginTime', field: 'type',
label: '起始时间', label: '医院类型',
component: 'DatePicker', component: 'Select',
colProps: { span: 5 },
componentProps: {
options: [
{label: '合作医院',value: '1'},
{label: '其他医院',value: '0'},
]
},
colProps: {span: 7}
}, },
{ {
field: 'endTime', field: 'dateRange',
label: '截止时间', label: '创建时间',
component: 'DatePicker', component: 'RangePicker',
colProps: { span: 5 }, componentProps: {
}, style: { width:'100%' },
valueFormat: 'YYYY-MM-DD',
placeholder: ['开始日期','结束日期']
},
colProps: { span: 8 }
}
// {
// field: 'beginTime',
// label: '起始时间',
// component: 'DatePicker',
// colProps: { span: 5 },
// },
// {
// field: 'endTime',
// label: '截止时间',
// component: 'DatePicker',
// colProps: { span: 5 },
// },
]; ];
export const hospitalFormSchema: FormSchema[] = [ export const hospitalFormSchema: FormSchema[] = [
@ -160,7 +184,14 @@ export const hospitalFormSchema: FormSchema[] = [
field: 'contactsTel', field: 'contactsTel',
label: '联系人电话', label: '联系人电话',
component: 'Input', component: 'Input',
required: true rules: [
{
pattern: new RegExp('^1[3|4|5|6|7|8|9][0-9]\\d{8}$'),
message: '请输入正确的手机号',
validateTrigger: 'change',
required: true
}
],
}, },
{ {
field: 'contactsTitle', field: 'contactsTitle',
@ -219,8 +250,10 @@ export const hospitalFormSchema: FormSchema[] = [
labelField: 'name', labelField: 'name',
valueField: 'id', valueField: 'id',
api: institutionList, api: institutionList,
} },
required:true
}, },
{ {
label: '备注', label: '备注',
field: 'remarks', field: 'remarks',

166
src/views/institution/hospital/index.vue

@ -1,94 +1,136 @@
<template> <template>
<div> <div>
<BasicTable @register="registerTable"> <BasicTable @register="registerTable"
@selection-change="handleSelectionChange"
>
<template #toolbar> <template #toolbar>
<a-button type="primary" @click="handleCreate">新增医院</a-button> <a-button
type="primary"
@click="handleAdd()"
>新增医院</a-button>
<a-button type="primary"
:disabled="state.single"
@click="handleEdit()"
>修改医院</a-button>
<a-button type="primary"
:disabled="state.multiple"
@click="handleDel()"
>删除医院</a-button>
</template> </template>
<template #action="{ record }"> <template #action="{ record }">
<TableAction <TableAction :actions="[
:actions="[ {
{ label: '编辑',
icon: 'clarity:note-edit-line', icon: 'fa6-regular:pen-to-square',
onClick: handleEdit.bind(null, record), onClick: handleEdit.bind(null, record)
}, },
{ {
icon: 'ant-design:delete-outlined', label: '删除',
color: 'error', icon: 'ant-design:delete-outlined',
popConfirm: { color: 'error',
title: '是否确认删除', onClick: handleDel.bind(null, record)
confirm: handleDelete.bind(null, record), }]"
},
},
]"
/> />
</template> </template>
</BasicTable> </BasicTable>
<!--弹出窗体区域-->
<HospitalModal @register="registerModal" @success="handleSuccess"/> <HospitalModal @register="registerModal" @success="handleRefreshTable"/>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {BasicTable, useTable, TableAction} from '/@/components/Table'; /**
import {useModal} from '/@/components/Modal'; * 提供模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致
* 采用vben-动态表格表单封装组件编写,采用 setup 写法
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
* author entfrm开发团队-王翔
*/
import { reactive, toRaw } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import {list, delHospital} from '/@/api/platform/system/controller/hospital';
import { useModal } from '/@/components/Modal';
import { columns, searchFormSchema } from './hospital.data';
import { useMessage } from '/@/hooks/web/useMessage';
import HospitalModal from './HospitalModal.vue'; import HospitalModal from './HospitalModal.vue';
import {columns, searchFormSchema} from './hospital.data';
import {useMessage} from '/@/hooks/web/useMessage'; /** 类型规范统一声明定义区域 */
import {list, remove} from '/@/api/platform/system/controller/hospital'; interface TableState {
const {createMessage} = useMessage(); single: boolean;
const [registerModal, {openModal}] = useModal(); multiple: boolean;
const [registerTable, {reload}] = useTable({ }
title: '医院列表',
/** 通用变量统一声明区域 */
const state = reactive<TableState>({
//
single: true,
//
multiple: true
});
const { createConfirm, createMessage } = useMessage();
const [registerModal, { openModal }] = useModal();
const [registerTable, { reload, clearSelectedRowKeys, getSelectRowKeys }] = useTable({
title: '医院',
api: list, api: list,
rowKey: 'id',
columns, columns,
formConfig: { formConfig: {
labelWidth: 120, labelWidth: 120,
schemas: searchFormSchema, schemas: searchFormSchema,
autoSubmitOnEnter: true,
fieldMapToTime: [['dateRange', ['beginTime', 'endTime'], 'YYYY-MM-DD']]
}, },
pagination: true, rowSelection: { type: 'checkbox' },
striped: true,
useSearchForm: true, useSearchForm: true,
showTableSetting: true, showTableSetting: true,
bordered: true, bordered: true,
showIndexColumn: true, clickToRowSelect: false,
canResize: false, showIndexColumn: false,
actionColumn: { actionColumn: {
width: 80, width: 220,
title: '操作', title: '操作',
dataIndex: 'action', dataIndex: 'action',
slots: {customRender: 'action'}, slots: { customRender: 'action' },
fixed: undefined, fixed: false
}, },
handleSearchInfoFn: () => clearSelectedRowKeys()
}); });
/**
* 创建菜单 /** 处理多选框选中数据 */
*/ function handleSelectionChange(selection?: Recordable) {
function handleCreate() { const rowSelection = toRaw(selection?.keys) || [];
openModal(true, { state.single = rowSelection.length != 1;
isUpdate: false, state.multiple = !rowSelection.length;
});
} }
/**
* 编辑菜单 /** 新增按钮操作,行内新增与工具栏局域新增通用 */
*/ function handleAdd() {
function handleEdit(record: Recordable) { openModal(true,{ _tag: 'add' });
openModal(true, {
record,
isUpdate: true,
});
} }
/**
* 删除菜单 /** 编辑按钮操作,行内编辑 */
*/ function handleEdit(record?: Recordable) {
async function handleDelete(record: Recordable) { record = record || { id: getSelectRowKeys() };
await remove({ids: record.id}); openModal(true, { _tag: 'edit', record });
createMessage.success('删除成功!');
handleSuccess();
} }
/**
* 成功后重载表格 /** 删除按钮操作,行内删除 */
*/ async function handleDel(record?: Recordable) {
function handleSuccess() { const id = record?.id || getSelectRowKeys();
createConfirm({
iconType: 'warning',
title: '警告',
content: `是否确认删除医院编号为${id}医院吗?`,
onOk: async () => {
await delHospital(id);
createMessage.success('删除成功!');
handleRefreshTable();
}
});
}
/** 处理表格刷新 */
function handleRefreshTable() {
clearSelectedRowKeys();
reload(); reload();
} }
</script> </script>

88
src/views/institution/institution/InstitutionModal.vue

@ -1,57 +1,79 @@
<template> <template>
<BasicModal v-bind="$attrs" <BasicModal v-bind="$attrs"
:title="getTitle" width="720px"
@register="registerModal" @register="registerModal"
@ok="handleSubmit" @ok="handleSubmit"
> >
<BasicForm @register="registerForm"/> <BasicForm @register="registerForm"/>
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {institutionFormSchema} from './institution.data';
import {BasicForm, useForm} from '/@/components/Form';
import {set} from '/@/api/platform/system/controller/institution';
const isUpdate = ref(true);
// emit
const emit = defineEmits(['success', 'register']);
/** /**
* 表单 * 提供模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致
* 采用vben-动态表格表单封装组件编写,采用 setup 写法
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
* author entfrm开发团队-王翔
*/ */
const [registerForm, {resetFields, setFieldsValue, validate}] = useForm({ import { ref, unref } from 'vue';
import { BasicForm, useForm } from '/@/components/Form/index';
import { institutionFormSchema } from './institution.data';
import {addInstitution, delInstitution,getInstitution,editInstitution} from '/@/api/platform/system/controller/institution';
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal';
import { isEmpty } from '/@/utils/is';
/** 通用变量统一声明区域 */
const tag = ref<Nullable<string>>('');
/** https://v3.cn.vuejs.org/api/options-data.html#emits */
const emit = defineEmits(['success', 'register']);
const [registerForm, { resetFields, setFieldsValue, validate, clearValidate, updateSchema }] = useForm({
labelWidth: 100, labelWidth: 100,
schemas: institutionFormSchema, schemas: institutionFormSchema,
showActionButtonGroup: false, showActionButtonGroup: false,
actionColOptions: { baseColProps: { span: 24 }
span: 23,
},
}); });
/** const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data: WindowInnerData = { _tag: '' }) => {
* 表单参数 //
*/ await resetFields();
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => { await clearValidate();
resetFields(); //
setModalProps({confirmLoading: false}); tag.value = data._tag;
isUpdate.value = !!data?.isUpdate; const id = data.record?.id;
if (unref(isUpdate)) { const props: Partial<ModalProps> = { confirmLoading: false };
setFieldsValue({ // tag
...data.record, switch (unref(tag)) {
}); case 'add':
props.title = '新增机构';
break;
case 'edit':
props.title = '编辑机构';
await setFieldsValue(await getInstitution(id));
break;
} }
// :
setModalProps(props);
}); });
//
const getTitle = computed(() => (!unref(isUpdate) ? '新增机构' : '编辑机构')); /** 处理弹出框提交 */
async function handleSubmit() { async function handleSubmit() {
try { try {
const values = await validate(); //
setModalProps({confirmLoading: true}); const formData = await validate();
await set(values); //
setModalProps({ confirmLoading: true });
// tag
switch (unref(tag)) {
case 'add':
await addInstitution(formData);
break;
case 'edit':
await editInstitution(formData);
break;
}
//
closeModal(); closeModal();
emit('success'); emit('success');
} finally { } finally {
setModalProps({confirmLoading: false}); setModalProps({ confirmLoading: false });
} }
} }
</script> </script>

168
src/views/institution/institution/index.vue

@ -1,94 +1,136 @@
<template> <template>
<div> <div>
<BasicTable @register="registerTable"> <BasicTable @register="registerTable"
@selection-change="handleSelectionChange"
>
<template #toolbar> <template #toolbar>
<a-button type="primary" @click="handleCreate">新增医检机构</a-button> <a-button
type="primary"
@click="handleAdd()"
>新增机构</a-button>
<a-button type="primary"
:disabled="state.single"
@click="handleEdit()"
>修改机构</a-button>
<a-button type="primary"
:disabled="state.multiple"
@click="handleDel()"
>删除机构</a-button>
</template> </template>
<template #action="{ record }"> <template #action="{ record }">
<TableAction <TableAction :actions="[
:actions="[ {
{ label: '编辑',
icon: 'clarity:note-edit-line', icon: 'fa6-regular:pen-to-square',
onClick: handleEdit.bind(null, record), onClick: handleEdit.bind(null, record)
}, },
{ {
icon: 'ant-design:delete-outlined', label: '删除',
color: 'error', icon: 'ant-design:delete-outlined',
popConfirm: { color: 'error',
title: '是否确认删除', onClick: handleDel.bind(null, record)
confirm: handleDelete.bind(null, record), }]"
},
},
]"
/> />
</template> </template>
</BasicTable> </BasicTable>
<!--弹出窗体区域-->
<BoxCardModal @register="registerModal" @success="handleSuccess"/> <InstitutionModal @register="registerModal" @success="handleRefreshTable"/>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {BasicTable, useTable, TableAction} from '/@/components/Table'; /**
import {useModal} from '/@/components/Modal'; * 提供模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致
import BoxCardModal from './InstitutionModal.vue'; * 采用vben-动态表格表单封装组件编写,采用 setup 写法
import {columns, searchFormSchema} from './institution.data'; * Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
import {useMessage} from '/@/hooks/web/useMessage'; * author entfrm开发团队-王翔
import {list, remove} from '/@/api/platform/system/controller/institution'; */
const {createMessage} = useMessage(); import { reactive, toRaw } from 'vue';
const [registerModal, {openModal}] = useModal(); import { BasicTable, useTable, TableAction } from '/@/components/Table';
const [registerTable, {reload}] = useTable({ import {list, delInstitution} from '/@/api/platform/system/controller/institution';
title: '医检列表', import { useModal } from '/@/components/Modal';
import { columns, searchFormSchema } from './institution.data';
import { useMessage } from '/@/hooks/web/useMessage';
import InstitutionModal from './InstitutionModal.vue';
/** 类型规范统一声明定义区域 */
interface TableState {
single: boolean;
multiple: boolean;
}
/** 通用变量统一声明区域 */
const state = reactive<TableState>({
//
single: true,
//
multiple: true
});
const { createConfirm, createMessage } = useMessage();
const [registerModal, { openModal }] = useModal();
const [registerTable, { reload, clearSelectedRowKeys, getSelectRowKeys }] = useTable({
title: '医生列表',
api: list, api: list,
rowKey: 'id',
columns, columns,
formConfig: { formConfig: {
labelWidth: 120, labelWidth: 120,
schemas: searchFormSchema, schemas: searchFormSchema,
autoSubmitOnEnter: true,
fieldMapToTime: [['dateRange', ['beginTime', 'endTime'], 'YYYY-MM-DD']]
}, },
pagination: true, rowSelection: { type: 'checkbox' },
striped: true,
useSearchForm: true, useSearchForm: true,
showTableSetting: true, showTableSetting: true,
bordered: true, bordered: true,
showIndexColumn: true, clickToRowSelect: false,
canResize: false, showIndexColumn: false,
actionColumn: { actionColumn: {
width: 80, width: 220,
title: '操作', title: '操作',
dataIndex: 'action', dataIndex: 'action',
slots: {customRender: 'action'}, slots: { customRender: 'action' },
fixed: undefined, fixed: false
}, },
handleSearchInfoFn: () => clearSelectedRowKeys()
}); });
/**
* 创建菜单 /** 处理多选框选中数据 */
*/ function handleSelectionChange(selection?: Recordable) {
function handleCreate() { const rowSelection = toRaw(selection?.keys) || [];
openModal(true, { state.single = rowSelection.length != 1;
isUpdate: false, state.multiple = !rowSelection.length;
});
} }
/**
* 编辑菜单 /** 新增按钮操作,行内新增与工具栏局域新增通用 */
*/ function handleAdd() {
function handleEdit(record: Recordable) { openModal(true,{ _tag: 'add' });
openModal(true, {
record,
isUpdate: true,
});
} }
/**
* 删除菜单 /** 编辑按钮操作,行内编辑 */
*/ function handleEdit(record?: Recordable) {
async function handleDelete(record: Recordable) { record = record || { id: getSelectRowKeys() };
await remove({ids: record.id}); openModal(true, { _tag: 'edit', record });
createMessage.success('删除成功!');
handleSuccess();
} }
/**
* 成功后重载表格 /** 删除按钮操作,行内删除 */
*/ async function handleDel(record?: Recordable) {
function handleSuccess() { const id = record?.id || getSelectRowKeys();
createConfirm({
iconType: 'warning',
title: '警告',
content: `是否确认删除机构编号为${id}机构吗?`,
onOk: async () => {
await delInstitution(id);
createMessage.success('删除成功!');
handleRefreshTable();
}
});
}
/** 处理表格刷新 */
function handleRefreshTable() {
clearSelectedRowKeys();
reload(); reload();
} }
</script> </script>

14
src/views/institution/institution/institution.data.ts

@ -100,6 +100,20 @@ export const searchFormSchema: FormSchema[] = [
}, },
colProps: { span: 5 }, colProps: { span: 5 },
}, },
{
field: 'type',
label: '机构类型',
component: 'Select',
componentProps: {
options: [
{label: '医检机构',value: '1'},
{label: '三甲机构',value: '2'},
{label: '其他机构',value: '0'},
]
},
colProps: {span: 5}
},
{ {
field: 'dateRange', field: 'dateRange',
label: '创建时间', label: '创建时间',

89
src/views/institution/office/OfficeModal.vue

@ -1,58 +1,79 @@
<template> <template>
<BasicModal v-bind="$attrs" <BasicModal v-bind="$attrs"
:title="getTitle" width="720px"
@register="registerModal" @register="registerModal"
@ok="handleSubmit" @ok="handleSubmit"
> >
<BasicForm @register="registerForm"/> <BasicForm @register="registerForm"/>
</BasicModal> </BasicModal>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {ref, computed, unref} from 'vue';
import {BasicModal, useModalInner} from '/@/components/Modal';
import {officeFormSchema} from './office.data';
import {BasicForm, useForm} from '/@/components/Form';
import {set} from '/@/api/platform/system/controller/office';
const isUpdate = ref(true);
// emit
const emit = defineEmits(['success', 'register']);
/** /**
* 表单 * 提供模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致
* 采用vben-动态表格表单封装组件编写,采用 setup 写法
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
* author entfrm开发团队-王翔
*/ */
const [registerForm, {resetFields, setFieldsValue, validate}] = useForm({ import { ref, unref } from 'vue';
import { BasicForm, useForm } from '/@/components/Form/index';
import { officeFormSchema } from './office.data';
import {addOffice, delOffice,getOffice,editOffice} from '/@/api/platform/system/controller/office';
import { BasicModal, ModalProps, useModalInner } from '/@/components/Modal';
import { isEmpty } from '/@/utils/is';
/** 通用变量统一声明区域 */
const tag = ref<Nullable<string>>('');
/** https://v3.cn.vuejs.org/api/options-data.html#emits */
const emit = defineEmits(['success', 'register']);
const [registerForm, { resetFields, setFieldsValue, validate, clearValidate, updateSchema }] = useForm({
labelWidth: 100, labelWidth: 100,
schemas: officeFormSchema, schemas: officeFormSchema,
showActionButtonGroup: false, showActionButtonGroup: false,
actionColOptions: { baseColProps: { span: 24 }
span: 23,
},
}); });
/** const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data: WindowInnerData = { _tag: '' }) => {
* 表单参数 //
*/ await resetFields();
const [registerModal, {setModalProps, closeModal}] = useModalInner(async (data) => { await clearValidate();
resetFields(); //
setModalProps({confirmLoading: false}); tag.value = data._tag;
isUpdate.value = !!data?.isUpdate; const id = data.record?.id;
if (unref(isUpdate)) { const props: Partial<ModalProps> = { confirmLoading: false };
setFieldsValue({ // tag
...data.record, switch (unref(tag)) {
}); case 'add':
props.title = '新增科室';
break;
case 'edit':
props.title = '编辑科室';
await setFieldsValue(await getOffice(id));
break;
} }
// :
setModalProps(props);
}); });
//
const getTitle = computed(() => (!unref(isUpdate) ? '新增科室' : '编辑科室')); /** 处理弹出框提交 */
async function handleSubmit() { async function handleSubmit() {
try { try {
const values = await validate(); //
const formData = await validate();
setModalProps({confirmLoading: true}); //
await set(values); setModalProps({ confirmLoading: true });
// tag
switch (unref(tag)) {
case 'add':
await addOffice(formData);
break;
case 'edit':
await editOffice(formData);
break;
}
//
closeModal(); closeModal();
emit('success'); emit('success');
} finally { } finally {
setModalProps({confirmLoading: false}); setModalProps({ confirmLoading: false });
} }
} }
</script> </script>

169
src/views/institution/office/index.vue

@ -1,95 +1,136 @@
<template> <template>
<div> <div>
<BasicTable @register="registerTable"> <BasicTable @register="registerTable"
@selection-change="handleSelectionChange"
>
<template #toolbar> <template #toolbar>
<a-button type="primary" @click="handleCreate">新增科室</a-button> <a-button
type="primary"
@click="handleAdd()"
>新增科室</a-button>
<a-button type="primary"
:disabled="state.single"
@click="handleEdit()"
>修改科室</a-button>
<a-button type="primary"
:disabled="state.multiple"
@click="handleDel()"
>删除科室</a-button>
</template> </template>
<template #action="{ record }"> <template #action="{ record }">
<TableAction <TableAction :actions="[
:actions="[ {
{ label: '编辑',
icon: 'clarity:note-edit-line', icon: 'fa6-regular:pen-to-square',
onClick: handleEdit.bind(null, record), onClick: handleEdit.bind(null, record)
}, },
{ {
icon: 'ant-design:delete-outlined', label: '删除',
color: 'error', icon: 'ant-design:delete-outlined',
popConfirm: { color: 'error',
title: '是否确认删除', onClick: handleDel.bind(null, record)
confirm: handleDelete.bind(null, record), }]"
},
},
]"
/> />
</template> </template>
</BasicTable> </BasicTable>
<!--弹出窗体区域-->
<OfficeModal @register="registerModal" @success="handleSuccess"/> <OfficeModal @register="registerModal" @success="handleRefreshTable"/>
</div> </div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import {BasicTable, useTable, TableAction} from '/@/components/Table'; /**
import {useModal} from '/@/components/Modal'; * 提供模板规范代码参考,请尽量保证编写代码风格跟模板规范代码一致
* 采用vben-动态表格表单封装组件编写,采用 setup 写法
* Copyright © 2020-2022 <a href="http://www.entfrm.com/">entfrm</a> All rights reserved.
* author entfrm开发团队-王翔
*/
import { reactive, toRaw } from 'vue';
import { BasicTable, useTable, TableAction } from '/@/components/Table';
import {listOffice, delOffice} from '/@/api/platform/system/controller/office';
import { useModal } from '/@/components/Modal';
import { columns, searchFormSchema } from './office.data';
import { useMessage } from '/@/hooks/web/useMessage';
import OfficeModal from './OfficeModal.vue'; import OfficeModal from './OfficeModal.vue';
import {columns, searchFormSchema} from './office.data';
import {useMessage} from '/@/hooks/web/useMessage'; /** 类型规范统一声明定义区域 */
import {list, remove} from '/@/api/platform/system/controller/office'; interface TableState {
const {createMessage} = useMessage(); single: boolean;
const [registerModal, {openModal}] = useModal(); multiple: boolean;
const [registerTable, {reload}] = useTable({ }
title: '科室列表',
api: list, /** 通用变量统一声明区域 */
const state = reactive<TableState>({
//
single: true,
//
multiple: true
});
const { createConfirm, createMessage } = useMessage();
const [registerModal, { openModal }] = useModal();
const [registerTable, { reload, clearSelectedRowKeys, getSelectRowKeys }] = useTable({
title: '医生列表',
api: listOffice,
rowKey: 'id',
columns, columns,
formConfig: { formConfig: {
labelWidth: 120, labelWidth: 120,
schemas: searchFormSchema, schemas: searchFormSchema,
autoSubmitOnEnter: true,
fieldMapToTime: [['dateRange', ['beginTime', 'endTime'], 'YYYY-MM-DD']]
}, },
pagination: true, rowSelection: { type: 'checkbox' },
striped: true,
useSearchForm: true, useSearchForm: true,
showTableSetting: true, showTableSetting: true,
bordered: true, bordered: true,
showIndexColumn: true, clickToRowSelect: false,
canResize: false, showIndexColumn: false,
actionColumn: { actionColumn: {
width: 80, width: 220,
title: '操作', title: '操作',
dataIndex: 'action', dataIndex: 'action',
slots: {customRender: 'action'}, slots: { customRender: 'action' },
fixed: undefined, fixed: false
}, },
handleSearchInfoFn: () => clearSelectedRowKeys()
}); });
/**
* 创建菜单 /** 处理多选框选中数据 */
*/ function handleSelectionChange(selection?: Recordable) {
function handleCreate() { const rowSelection = toRaw(selection?.keys) || [];
debugger; state.single = rowSelection.length != 1;
openModal(true, { state.multiple = !rowSelection.length;
isUpdate: false,
});
} }
/**
* 编辑菜单 /** 新增按钮操作,行内新增与工具栏局域新增通用 */
*/ function handleAdd() {
function handleEdit(record: Recordable) { openModal(true,{ _tag: 'add' });
openModal(true, {
record,
isUpdate: true,
});
} }
/**
* 删除菜单 /** 编辑按钮操作,行内编辑 */
*/ function handleEdit(record?: Recordable) {
async function handleDelete(record: Recordable) { record = record || { id: getSelectRowKeys() };
await remove({ids: record.id}); openModal(true, { _tag: 'edit', record });
createMessage.success('删除成功!');
handleSuccess();
} }
/**
* 成功后重载表格 /** 删除按钮操作,行内删除 */
*/ async function handleDel(record?: Recordable) {
function handleSuccess() { const id = record?.id || getSelectRowKeys();
createConfirm({
iconType: 'warning',
title: '警告',
content: `是否确认删除科室编号为${id}科室吗?`,
onOk: async () => {
await delOffice(id);
createMessage.success('删除成功!');
handleRefreshTable();
}
});
}
/** 处理表格刷新 */
function handleRefreshTable() {
clearSelectedRowKeys();
reload(); reload();
} }
</script> </script>

41
src/views/institution/office/office.data.ts

@ -4,7 +4,7 @@ import {h, watch} from 'vue';
import {Tag} from 'ant-design-vue'; import {Tag} from 'ant-design-vue';
import { list as hospitalList } from '/@/api/platform/system/controller/hospital'; import { list as hospitalList } from '/@/api/platform/system/controller/hospital';
import { list as institutionList } from '/@/api/platform/system/controller/institution'; import { list as institutionList } from '/@/api/platform/system/controller/institution';
import {deepMerge} from "/@/utils"; import {deepMerge} from '/@/utils';
export const columns: BasicColumn[] = [ export const columns: BasicColumn[] = [
@ -98,17 +98,16 @@ export const searchFormSchema: FormSchema[] = [
colProps: { span: 5 }, colProps: { span: 5 },
}, },
{ {
field: 'beginTime', field: 'dateRange',
label: '起始时间', label: '创建时间',
component: 'DatePicker', component: 'RangePicker',
colProps: { span: 5 }, componentProps: {
}, style: { width:'100%' },
{ valueFormat: 'YYYY-MM-DD',
field: 'endTime', placeholder: ['开始日期','结束日期']
label: '截止时间', },
component: 'DatePicker', colProps: { span: 8 }
colProps: { span: 5 }, }
},
]; ];
export const officeFormSchema: FormSchema[] = [ export const officeFormSchema: FormSchema[] = [
@ -160,17 +159,25 @@ export const officeFormSchema: FormSchema[] = [
}, },
}, },
{ {
field: 'directorName', field: 'directorTel',
label: '主任名称', label: '主任电话',
component: 'Input', component: 'Input',
required: false rules: [
{
pattern: new RegExp('^1[3|4|5|6|7|8|9][0-9]\\d{8}$'),
message: '请输入正确的手机号',
validateTrigger: 'change',
required: true
}
],
}, },
{ {
field: 'directorTel', field: 'directorName',
label: '主任电话', label: '主任名称',
component: 'Input', component: 'Input',
required: false required: false
}, },
{ {
field: 'detailAddress', field: 'detailAddress',
label: '科室地址', label: '科室地址',

Loading…
Cancel
Save