From a2314e25b38d40ede97edd079c9dbb2e24a951f3 Mon Sep 17 00:00:00 2001 From: dzc <2388224167@qq.com> Date: Tue, 5 Aug 2025 12:07:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E4=BA=A4=E6=8E=A5=E7=8F=AD=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E7=AE=A1=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/sys/sysDutyType.ts | 49 ++++++++ src/components/Select/SelectDutyType.vue | 106 +++++++++++++++++ src/components/index.ts | 3 +- src/views/duty/dutyRecord/form.vue | 8 +- src/views/duty/dutyRecord/index.vue | 9 +- src/views/duty/dutyType/form.vue | 127 +++++++++++++++++++++ src/views/duty/dutyType/index.vue | 138 ++++++++++++++++++++++- 7 files changed, 425 insertions(+), 15 deletions(-) create mode 100644 src/api/sys/sysDutyType.ts create mode 100644 src/components/Select/SelectDutyType.vue create mode 100644 src/views/duty/dutyType/form.vue diff --git a/src/api/sys/sysDutyType.ts b/src/api/sys/sysDutyType.ts new file mode 100644 index 0000000..f550918 --- /dev/null +++ b/src/api/sys/sysDutyType.ts @@ -0,0 +1,49 @@ +import request from "/@/utils/request" + +export function select(query?: Object) { + return request({ + url: '/admin/sysDutyType/select', + method: 'get', + params: query + }) +} + +export function fetchList(query?: Object) { + return request({ + url: '/admin/sysDutyType/page', + method: 'get', + params: query + }) +} + +export function addObj(obj?: Object) { + return request({ + url: '/admin/sysDutyType', + method: 'post', + data: obj + }) +} + +export function getObj(id?: string) { + return request({ + url: '/admin/sysDutyType/' + id, + method: 'get' + }) +} + +export function delObjs(ids?: Object) { + return request({ + url: '/admin/sysDutyType', + method: 'delete', + data: ids + }) +} + +export function putObj(obj?: Object) { + return request({ + url: '/admin/sysDutyType', + method: 'put', + data: obj + }) +} + diff --git a/src/components/Select/SelectDutyType.vue b/src/components/Select/SelectDutyType.vue new file mode 100644 index 0000000..6716813 --- /dev/null +++ b/src/components/Select/SelectDutyType.vue @@ -0,0 +1,106 @@ + + + diff --git a/src/components/index.ts b/src/components/index.ts index 623746c..0162502 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -24,6 +24,7 @@ import TagUserStatus from "/@/components/Tag/TagUserStatus.vue" import SelectArea from "/@/components/Select/SelectArea.vue" import SelectDevice from "/@/components/Select/SelectDevice.vue" +import SelectDutyType from "/@/components/Select/SelectDutyType.vue" import ColumnBtn from "/@/components/Column/ColumnBtn.vue" @@ -78,7 +79,7 @@ export default { app.component('SelectArea', SelectArea); app.component('SelectDevice', SelectDevice); - // app.component('DictSelect', DictSelect); + app.component('SelectDutyType', SelectDutyType); app.component('ColumnBtn', ColumnBtn); diff --git a/src/views/duty/dutyRecord/form.vue b/src/views/duty/dutyRecord/form.vue index e33acd1..acced41 100644 --- a/src/views/duty/dutyRecord/form.vue +++ b/src/views/duty/dutyRecord/form.vue @@ -9,8 +9,8 @@ - - + + @@ -81,7 +81,7 @@ const { duty_time_type } = useDict("duty_time_type") const form = reactive({ id: '', dutyTime: parseDate(new Date(), '{y}-{m}-{d}'), - timeType: '3', + timeTypeId: '', personId: '', personName: '', areaId: '', @@ -95,7 +95,7 @@ const dataRules = ref({ dutyTime: [ { required: true, message: '值班时间不能为空', trigger: 'blur' } ], - timeType: [ + timeTypeId: [ { required: true, message: '值班时间段不能为空', trigger: 'change' } ], personName: [ diff --git a/src/views/duty/dutyRecord/index.vue b/src/views/duty/dutyRecord/index.vue index ac03f34..b0d3899 100644 --- a/src/views/duty/dutyRecord/index.vue +++ b/src/views/duty/dutyRecord/index.vue @@ -10,8 +10,9 @@ - - + + @@ -44,9 +45,9 @@ - + diff --git a/src/views/duty/dutyType/form.vue b/src/views/duty/dutyType/form.vue new file mode 100644 index 0000000..6dce649 --- /dev/null +++ b/src/views/duty/dutyType/form.vue @@ -0,0 +1,127 @@ + + + \ No newline at end of file diff --git a/src/views/duty/dutyType/index.vue b/src/views/duty/dutyType/index.vue index 4591cff..b5dbb33 100644 --- a/src/views/duty/dutyType/index.vue +++ b/src/views/duty/dutyType/index.vue @@ -1,13 +1,139 @@ - - +import * as sysDutyTypeApi from "/@/api/sys/sysDutyType"; - \ No newline at end of file +const { sys_duty_type } = useDict("sys_duty_type") + +// 引入组件 +const FormDialog = defineAsyncComponent(() => import('./form.vue')); +// 定义查询字典 + +// 定义变量内容 +const formDialogRef = ref() +// 搜索变量 +const queryRef = ref() +const showSearch = ref(true) +// 多选变量 +const selectObjs = ref([]) as any +const multiple = ref(true) + +const state: BasicTableProps = reactive({ + queryForm: {}, + pageList: sysDutyTypeApi.fetchList +}) + +// table hook +const { + getDataList, + currentChangeHandle, + sizeChangeHandle, + sortChangeHandle, + downBlobFile, + tableStyle +} = useTable(state) + +// 清空搜索条件 +const resetQuery = () => { + // 清空搜索条件 + queryRef.value?.resetFields() + // 清空多选 + selectObjs.value = [] + getDataList() +} + +// 导出excel +const exportExcel = () => { + downBlobFile('/admin/sysDutyType/export', Object.assign(state.queryForm, { ids: selectObjs }), 'sysDutyType.xlsx') +} + +// 多选事件 +const selectionChangHandle = (objs: { id: string }[]) => { + selectObjs.value = objs.map(({ id }) => id); + multiple.value = !objs.length; +}; + +// 删除操作 +const handleDelete = async (ids: string[]) => { + try { + await useMessageBox().confirm('此操作将永久删除'); + } catch { + return; + } + + try { + await sysDutyTypeApi.delObjs(ids); + getDataList(); + useMessage().success('删除成功'); + } catch (err: any) { + useMessage().error(err.msg); + } +}; + \ No newline at end of file