This commit is contained in:
njdaoyehu 2024-11-19 12:15:56 +08:00
parent 6bb925a1ec
commit 673bac2372
14 changed files with 149 additions and 544 deletions

View File

@ -124,7 +124,10 @@
:deep(.vben-basic-table .ant-table-wrapper .ant-table.ant-table-bordered .ant-table-title) {
padding-top: 8px !important;
border-radius: 0;
border-radius: 8px 8px 0 0;
border-left: 1px solid #183171 !important;
border-top: 1px solid #183171 !important;
border-right: 1px solid #183171 !important;
background-color: #13265a !important;
}
@ -475,3 +478,39 @@
:deep(.ant-picker-time-panel-cell-selected .ant-picker-time-panel-cell-inner) {
background-color: rgba(146,214,237,0.3) !important;
}
:deep(.ant-card) {
border: 1px solid #183171 !important;
background-color: #13265a !important;
}
:deep(.ant-card-body) {
padding: 0 !important ;
}
:deep(.ant-page-header-heading-title) {
font-family: "Noto Sans SC", serif;
font-size: 20px;
font-weight: normal;
color: white !important;
}
:deep(.ant-descriptions-view) {
border: 1px solid #183171 !important;
}
:deep(.ant-descriptions-row) {
border-bottom: 1px solid #183171 !important;
}
:deep(.ant-descriptions-item-label) {
background-color: rgba(146,214,237,0.05) !important;
}
:deep(.ant-descriptions-item-label),
:deep(.ant-descriptions-item-content) {
font-family: "Noto Sans SC", serif;
font-size: 14px;
color: white !important;
border-inline-end: 1px solid #183171 !important;
}

View File

@ -26,7 +26,7 @@ const data: AppRouteModule = {
name: 'TaskPage',
component: () => import('/@/views/data/task/index.vue'),
meta: {
title: '任务',
title: '任务管理',
ignoreAuth: true,
},
},
@ -39,6 +39,15 @@ const data: AppRouteModule = {
ignoreAuth: true,
},
},
{
path: 'task-log',
name: 'TaskLogPage',
component: () => import('/@/views/data/task-log/index.vue'),
meta: {
title: '任务日志',
ignoreAuth: true,
},
},
],
};

View File

@ -15,7 +15,7 @@
const entity = ref();
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
labelWidth: 120,
labelWidth: 100,
schemas: formSchema,
showActionButtonGroup: false,
});

View File

@ -1,74 +0,0 @@
<template>
<Card :bordered="false" :loading="isLoading">
<PageHeader
:title="title"
@back="() => $router.go(-1)"
>
<template #extra>
<a-button type="primary" @click="$router.go(-1)">返回上一页面</a-button>
</template>
</PageHeader>
<Descriptions bordered :column="3">
<Descriptions.Item
v-for="p in displayProps"
:key="p.key"
:label="p.title"
:span="['avatar'].includes(p.key) ? 3 : 1"
>
<span v-if="p.key === 'avatar'">
<Image style="width: 100px" :src="p.value"/>
</span>
<template v-else>
{{ p.value }}
</template>
</Descriptions.Item>
</Descriptions>
</Card>
</template>
<script lang="ts" setup>
import { onMounted, computed, ref, Ref } from 'vue';
import { useRoute } from 'vue-router';
import { useAsyncState } from '@vueuse/core';
import { PageHeader, Descriptions, Card } from 'ant-design-vue';
import { descriptionColumns } from './schema';
import * as TaskLogApi from '@/api/data/taskLogApi';
import { TaskLog } from '@/api/model/taskLog';
const route = useRoute();
const id = ref(route.params?.id);
const title = route.meta.title
// id
const {
state: detail,
isReady: isDetailReady,
isLoading,
execute,
} = useAsyncState(
TaskLogApi.getById(id.value).then((res: TaskLog) => res),
null,
{
immediate: false,
},
);
onMounted(() => {
execute();
});
const displayProps: Ref<Array<any>> = computed(() => {
if (!isDetailReady.value) return {};
const display: any = descriptionColumns.map(({ title, dataIndex = '', customRender }) => ({
key: dataIndex,
title,
value: customRender ? customRender({ text: detail.value[dataIndex], record: detail.value }) : detail.value[dataIndex],
}));
return display;
});
</script>
<style scoped lang="less">
::v-deep(.ant-card-body){
padding-top: 0;
}
</style>

View File

@ -1,63 +0,0 @@
<template>
<BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="600px" @ok="handleSubmit">
<BasicForm @register="registerForm" />
</BasicDrawer>
</template>
<script lang="ts" setup>
import { defineEmits, ref, computed, unref } from 'vue';
import { BasicForm, useForm } from '@/components/Form/index';
import { formSchema } from './schema';
import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
import * as TaskLogApi from '@/api/data/taskLogApi';
const emit = defineEmits(['success', 'register']);
const isUpdate = ref(true);
const entity = ref();
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
labelWidth: 120,
schemas: formSchema,
showActionButtonGroup: false,
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
await resetFields();
setDrawerProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate;
entity.value = data?.record;
if (unref(isUpdate)) {
await setFieldsValue({
...data.record,
});
}
});
const getTitle = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
async function handleSubmit() {
try {
const values = await validate();
setDrawerProps({ confirmLoading: true });
const {
...rest
} = values;
const action = !unref(isUpdate) ? TaskLogApi.add : TaskLogApi.update;
const data = !unref(isUpdate)
? {
...rest,
}
: Object.assign({},
{
...unref(entity),
...rest,
},
);
await action(data);
closeDrawer();
emit('success');
} finally {
setDrawerProps({ confirmLoading: false });
}
}
</script>

View File

@ -1,128 +1,50 @@
<template>
<div>
<BasicTable @register="registerTable">
<template #headerTop>
<Alert type="info" show-icon>
<template #message>
<template v-if="checkedKeys.length > 0">
<span>已选中{{ checkedKeys.length }}条记录</span>
<a-button type="link" @click="setSelectedRowKeys([])" size="small">清空</a-button>
<Popconfirm
v-if="hasPermission('AUTH_DATA_TASK_LOG:DELETE')"
class="ml-4"
title="确定要全部删除吗?"
ok-text="是"
cancel-text="否"
@confirm="handleBatchDelete"
>
<a href="#" class="text-red-500">删除</a>
</Popconfirm>
</template>
<template v-else>
<span>未选中任何项目</span>
</template>
</template>
</Alert>
</template>
<template #toolbar>
<a-button v-auth="'AUTH_DATA_TASK_LOG:ADD'" type="primary" @click="handleCreate"> 新增</a-button>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'action'">
<TableAction
:actions="[
{
label: '编辑',
icon: 'clarity:note-edit-line',
onClick: handleEdit.bind(null, record),
ifShow: hasPermission('AUTH_DATA_TASK_LOG:EDIT'),
divider:true
},
{
label: '详情',
icon: 'ant-design:eye-outlined',
onClick: handleView.bind(null, record),
divider:true
},
]"
:dropDownActions="[
{
label: '删除',
icon: 'ant-design:delete-outlined',
color: 'error',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
placement: 'topRight',
},
ifShow: hasPermission('AUTH_DATA_TASK_LOG:DELETE'),
},
]"
/>
</template>
</template>
</BasicTable>
<TaskLogDrawer @register="registerDrawer" @success="handleSuccess" />
<div class="header">
<SvgIcon size="19" name="list" />
<div class="title">检测日志</div>
</div>
<BasicTable @register="registerTable" />
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { Alert,Popconfirm } from 'ant-design-vue';
import { useGo } from '@/hooks/web/usePage';
import { usePermission } from '@/hooks/web/usePermission';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { BasicTable, useTable } from '@/components/Table';
import { isObject } from '@/utils/is';
import dayjs from 'dayjs';
import * as TaskLogApi from '@/api/data/taskLogApi';
import { useDrawer } from '@/components/Drawer';
import TaskLogDrawer from './drawer.vue';
import { columns, searchFormSchema } from './schema';
import { useMessage } from "@/hooks/web/useMessage";
defineOptions({
name: 'AUTH_DATA_TASK_LOG'
})
import { useMessage } from '@/hooks/web/useMessage';
import { SvgIcon } from '@/components/Icon';
const { createMessage } = useMessage();
const { hasPermission } = usePermission();
const go = useGo();
const checkedKeys = ref<Array<string | number>>([]);
const onSelectChange = (selectedRowKeys: (string | number)[]) => {
checkedKeys.value = selectedRowKeys.filter(k => typeof k !== 'undefined');
}
const [registerDrawer, { openDrawer }] = useDrawer();
const [registerTable, { reload, setSelectedRowKeys }] = useTable({
title: '任务检测日志表',
api: (params) => TaskLogApi.search(handleParams(params)),
columns,
formConfig: {
labelWidth: 120,
labelWidth: 0,
schemas: searchFormSchema,
showAdvancedButton: false,
},
rowSelection: {
type: 'checkbox',
onChange: onSelectChange,
},
useSearchForm: true,
showTableSetting: false,
bordered: false,
bordered: true,
showIndexColumn: false,
canResize: false,
rowKey: (record: any) => record.id,
actionColumn: {
width: 170,
title: '操作',
dataIndex: 'action',
fixed: 'right',
},
});
const handleParams = (params) => {
const { pageNum, pageSize, field = 'id', order = 'descend', ...rest } = params;
const handledParams: any = { pageNum, pageSize, orderByClause: `${field} ${order === 'descend' ? 'desc' : 'asc'}` };
const handledParams: any = {
pageNum,
pageSize,
orderByClause: `${field} ${order === 'descend' ? 'desc' : 'asc'}`,
};
Object.keys(rest).forEach((key) => {
const schema = searchFormSchema.find((item) => item.field === key);
const value = params[key];
@ -134,10 +56,16 @@
} else if (['Select', 'ApiSelect', 'ApiTreeSelect'].includes(schema.component)) {
handledParams[paramKey] = isObject(value) ? value.value : value;
} else if (schema.component === 'RangePicker') {
handledParams[`${paramKey}From`] = dayjs(value[0]).startOf('d').format('YYYY-MM-DD HH:mm:ss');
handledParams[`${paramKey}To`] = dayjs(value[1]).endOf('d').format('YYYY-MM-DD HH:mm:ss');
handledParams[`${paramKey}From`] = dayjs(value[0])
.startOf('d')
.format('YYYY-MM-DD HH:mm:ss');
handledParams[`${paramKey}To`] = dayjs(value[1])
.endOf('d')
.format('YYYY-MM-DD HH:mm:ss');
} else if (schema.component === 'DatePicker') {
handledParams[paramKey] = dayjs(value).format((schema.componentProps as any).format || 'YYYY-MM-DD');
handledParams[paramKey] = dayjs(value).format(
(schema.componentProps as any).format || 'YYYY-MM-DD',
);
} else {
handledParams[paramKey] = value;
}
@ -148,44 +76,7 @@
});
return handledParams;
};
const handleCreate = () => {
openDrawer(true, {
isUpdate: false,
});
};
const handleEdit = (record: Recordable) => {
openDrawer(true, {
record,
isUpdate: true,
});
};
const handleDelete = (record: Recordable) => {
TaskLogApi.remove(record.id).then((_) => {
reload();
setSelectedRowKeys([])
});
};
const handleBatchDelete = () => {
if (checkedKeys.value.length === 0) {
createMessage.error('当前未选中任何项目!');
return;
}
TaskLogApi.batchRemove(checkedKeys.value).then((_) => {
reload();
setSelectedRowKeys([])
});
};
const handleSuccess = () => {
reload();
};
const handleView = (record) => {
go('/data/task-log/detail/' + record.id);
};
</script>
<style lang="less" scoped></style>
<style lang="scss" scoped>
@use '@/assets/custom.scss';
</style>

View File

@ -10,9 +10,7 @@ import { BasicColumn } from '@/components/Table';
import { FormSchema } from '@/components/Table';
const colProps = { xs: { span: 24 }, sm: { span: 24 }, lg: { span: 8 } };
const colProps = { xs: { span: 24 }, sm: { span: 24 }, lg: { span: 6 } };
const colPropsInDrawer = { span: 24 };
export const schema = {
@ -37,7 +35,7 @@ export const schema = {
},
{
field: 'taskId',
label: 'dat_detect_task.id',
label: '任务ID',
defaultValue: undefined,
form: {
componentProps: {
@ -49,6 +47,7 @@ export const schema = {
rules: [{ required: true, message: '请输入dat_detect_task.id' }],
},
table: {
width: 140,
},
},
{
@ -64,6 +63,7 @@ export const schema = {
component: 'Input',
},
table: {
width: 200,
},
},
{
@ -79,11 +79,12 @@ export const schema = {
component: 'Input',
},
table: {
ellipsis: true,
},
},
{
field: 'createTime',
label: 'CreateTime',
label: '创建时间',
defaultValue: undefined,
form: {
colProps,
@ -98,6 +99,7 @@ export const schema = {
rules: [{ required: true, message: '请输入CreateTime' }],
},
table: {
width: 150,
},
},
{
@ -122,10 +124,10 @@ export const schema = {
],
};
const queryFields = ['id','taskId','deviceSn','content','createTime','updateTime'];
const queryFields = ['deviceSn', 'createTime'];
const editFields = ['taskId','deviceSn','content'];
const tableFields = ['taskId','deviceSn','content','createTime','updateTime'];
const descriptionFields = ['taskId','deviceSn','content','createTime','updateTime'];
const tableFields = ['taskId','deviceSn','content','createTime'];
const descriptionFields = ['taskId','deviceSn','content','createTime'];
const queryFieldsIndexMap = new Map(queryFields.map((field, index) => [field, index]));
export const searchFormSchema: FormSchema[] = schema.properties.filter(item => queryFields.includes(item.field))

View File

@ -1,4 +1,5 @@
<template>
<div class="detail-container">
<Card :bordered="false" :loading="isLoading">
<PageHeader
:title="title"
@ -8,22 +9,16 @@
<a-button type="primary" @click="$router.go(-1)">返回上一页面</a-button>
</template>
</PageHeader>
<Descriptions bordered :column="3">
<Descriptions bordered :column="1">
<Descriptions.Item
v-for="p in displayProps"
:key="p.key"
:label="p.title"
:span="['avatar'].includes(p.key) ? 3 : 1"
>
<span v-if="p.key === 'avatar'">
<Image style="width: 100px" :src="p.value"/>
</span>
<template v-else>
:label="p.title">
{{ p.value }}
</template>
</Descriptions.Item>
</Descriptions>
</Card>
</div>
</template>
<script lang="ts" setup>
import { onMounted, computed, ref, Ref } from 'vue';
@ -67,8 +62,10 @@
});
</script>
<style scoped lang="less">
::v-deep(.ant-card-body){
padding-top: 0;
<style lang="scss" scoped>
@use '@/assets/custom.scss';
.detail-container {
padding: 10px;
}
</style>

View File

@ -2,7 +2,7 @@
<div>
<div class="header">
<SvgIcon size="19" name="list" />
<div class="title">设备列表</div>
<div class="title">任务列表</div>
</div>
<BasicTable @register="registerTable">
<template #toolbar>
@ -64,7 +64,6 @@
const [registerDrawer, { openDrawer }] = useDrawer();
const [registerTable, { reload }] = useTable({
title: '检测任务表',
api: (params) => TaskApi.search(handleParams(params)),
columns,
formConfig: {
@ -143,7 +142,6 @@
const handleView = (record) => {
go('/data/task/' + record.id);
// go({ name: 'TaskDetailPage', params: { id: record.id } });
};
</script>
<style lang="scss" scoped>

View File

@ -37,16 +37,16 @@ export const schema = {
},
{
field: 'name',
label: '名称',
label: '任务名称',
defaultValue: undefined,
form: {
componentProps: {
allowClear: false,
placeholder: '名称',
placeholder: '任务名称',
},
colProps,
component: 'Input',
rules: [{ required: true, message: '请输入名称!' }],
rules: [{ required: true, message: '请输入任务名称!' }],
},
table: {
},
@ -74,7 +74,7 @@ export const schema = {
componentProps: {
allowClear: true,
placeholder: '任务参数',
autoSize: {minRows: 8, maxRows: 8},
autoSize: {minRows: 15, maxRows: 15},
},
component: 'InputTextArea',
colProps: { span: 24 },
@ -90,7 +90,7 @@ export const schema = {
componentProps: {
allowClear: true,
placeholder: '任务结果',
autoSize: {minRows: 8, maxRows: 8},
autoSize: {minRows: 15, maxRows: 15},
},
component: 'InputTextArea',
colProps: { span: 24 },
@ -224,9 +224,9 @@ export const schema = {
};
const queryFields = ['name','deviceSn','startTimeQuery','state'];
const editFields = ['name','deviceSn','paramJson','resultJson','startTime','endTime'];
const editFields = ['name','deviceSn','paramJson'];
const tableFields = ['name','deviceSn','startTime','endTime','state','createTime'];
const descriptionFields = ['name','deviceSn','paramJson','resultJson','startTime','endTime','state','createTime','updateTime'];
const descriptionFields = ['name','deviceSn','paramJson','resultJson','startTime','endTime','state'];
const queryFieldsIndexMap = new Map(queryFields.map((field, index) => [field, index]));
export const searchFormSchema: FormSchema[] = schema.properties.filter(item => queryFields.includes(item.field))

View File

@ -1,74 +0,0 @@
<template>
<Card :bordered="false" :loading="isLoading">
<PageHeader
:title="title"
@back="() => $router.go(-1)"
>
<template #extra>
<a-button type="primary" @click="$router.go(-1)">返回上一页面</a-button>
</template>
</PageHeader>
<Descriptions bordered :column="3">
<Descriptions.Item
v-for="p in displayProps"
:key="p.key"
:label="p.title"
:span="['avatar'].includes(p.key) ? 3 : 1"
>
<span v-if="p.key === 'avatar'">
<Image style="width: 100px" :src="p.value"/>
</span>
<template v-else>
{{ p.value }}
</template>
</Descriptions.Item>
</Descriptions>
</Card>
</template>
<script lang="ts" setup>
import { onMounted, computed, ref, Ref } from 'vue';
import { useRoute } from 'vue-router';
import { useAsyncState } from '@vueuse/core';
import { PageHeader, Descriptions, Card } from 'ant-design-vue';
import { descriptionColumns } from './schema';
import * as LogApi from '@/api/system/logApi';
import { Log } from '@/api/model/log';
const route = useRoute();
const id = ref(route.params?.id);
const title = route.meta.title
// id
const {
state: detail,
isReady: isDetailReady,
isLoading,
execute,
} = useAsyncState(
LogApi.getById(id.value).then((res: Log) => res),
null,
{
immediate: false,
},
);
onMounted(() => {
execute();
});
const displayProps: Ref<Array<any>> = computed(() => {
if (!isDetailReady.value) return {};
const display: any = descriptionColumns.map(({ title, dataIndex = '', customRender }) => ({
key: dataIndex,
title,
value: customRender ? customRender({ text: detail.value[dataIndex], record: detail.value }) : detail.value[dataIndex],
}));
return display;
});
</script>
<style scoped lang="less">
::v-deep(.ant-card-body){
padding-top: 0;
}
</style>

View File

@ -1,65 +0,0 @@
<template>
<BasicDrawer v-bind="$attrs" @register="registerDrawer" showFooter :title="getTitle" width="600px" @ok="handleSubmit">
<BasicForm @register="registerForm" />
</BasicDrawer>
</template>
<script lang="ts" setup>
import { defineEmits, ref, computed, unref } from 'vue';
import { BasicForm, useForm } from '@/components/Form/index';
import { formSchema } from './schema';
import { BasicDrawer, useDrawerInner } from '@/components/Drawer';
import * as LogApi from '@/api/system/logApi';
import dayjs from "dayjs";
const emit = defineEmits(['success', 'register']);
const isUpdate = ref(true);
const entity = ref();
const [registerForm, { resetFields, setFieldsValue, validate }] = useForm({
labelWidth: 120,
schemas: formSchema,
showActionButtonGroup: false,
});
const [registerDrawer, { setDrawerProps, closeDrawer }] = useDrawerInner(async (data) => {
await resetFields();
setDrawerProps({ confirmLoading: false });
isUpdate.value = !!data?.isUpdate;
entity.value = data?.record;
if (unref(isUpdate)) {
await setFieldsValue({
...data.record,
});
}
});
const getTitle = computed(() => (!unref(isUpdate) ? '新增' : '编辑'));
async function handleSubmit() {
try {
const values = await validate();
setDrawerProps({ confirmLoading: true });
const {
...rest
} = values;
const action = !unref(isUpdate) ? LogApi.add : LogApi.update;
const data = !unref(isUpdate)
? {
...rest,
}
: Object.assign({},
{
...unref(entity),
...rest,
updateTime: dayjs().format('YYYY-MM-DD HH:mm:ss')
},
);
await action(data);
closeDrawer();
emit('success');
} finally {
setDrawerProps({ confirmLoading: false });
}
}
</script>

View File

@ -1,50 +1,23 @@
<template>
<div>
<BasicTable @register="registerTable">
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'action'">
<TableAction
:actions="[
{
label: '详情',
icon: 'ant-design:eye-outlined',
divider: true,
},
{
label: '删除',
icon: 'ant-design:delete-outlined',
color: 'error',
popConfirm: {
title: '是否确认删除',
confirm: handleDelete.bind(null, record),
placement: 'topRight',
},
},
]"
/>
</template>
</template>
</BasicTable>
<LogDrawer @register="registerDrawer" @success="handleSuccess" />
<div class="header">
<SvgIcon size="19" name="list" />
<div class="title">日志列表</div>
</div>
<BasicTable @register="registerTable" />
</div>
</template>
<script lang="ts" setup>
import { ref } from 'vue';
import { Alert,Popconfirm } from 'ant-design-vue';
import { useGo } from '@/hooks/web/usePage';
import { usePermission } from '@/hooks/web/usePermission';
import { BasicTable, useTable, TableAction } from '@/components/Table';
import { BasicTable, useTable } from '@/components/Table';
import { isObject } from '@/utils/is';
import dayjs from 'dayjs';
import * as LogApi from '@/api/system/logApi';
import { useDrawer } from '@/components/Drawer';
import LogDrawer from './drawer.vue';
import { columns, searchFormSchema } from './schema';
import { useMessage } from "@/hooks/web/useMessage";
defineOptions({
name: 'LogPage'
})
import {SvgIcon} from "@/components/Icon";
const { createMessage } = useMessage();
const { hasPermission } = usePermission();
@ -55,7 +28,7 @@
api: (params) => LogApi.search(handleParams(params)),
columns,
formConfig: {
labelWidth: 120,
labelWidth: 0,
schemas: searchFormSchema,
showAdvancedButton: false,
},
@ -65,12 +38,6 @@
showIndexColumn: false,
canResize: false,
rowKey: (record: any) => record.id,
actionColumn: {
width: 170,
title: '操作',
dataIndex: 'action',
fixed: 'right',
},
});
const handleParams = (params, embedded = true) => {
@ -102,33 +69,6 @@
});
return handledParams;
};
const handleCreate = () => {
openDrawer(true, {
isUpdate: false,
});
};
const handleEdit = (record: Recordable) => {
openDrawer(true, {
record,
isUpdate: true,
});
};
const handleDelete = (record: Recordable) => {
LogApi.remove(record.id).then((_) => {
reload();
});
};
const handleSuccess = () => {
reload();
};
const handleView = (record) => {
go('/system/log/detail/' + record.id);
};
</script>
<style lang="scss" scoped>
@use '@/assets/custom.scss';

View File

@ -12,7 +12,7 @@ import { FormSchema } from '@/components/Table';
const colProps = { xs: { span: 24 }, sm: { span: 24 }, lg: { span: 8 } };
const colProps = { xs: { span: 24 }, sm: { span: 24 }, lg: { span: 6 } };
const colPropsInDrawer = { span: 24 };
export const schema = {
@ -51,21 +51,6 @@ export const schema = {
table: {
},
},
{
field: 'username',
label: '操作人',
defaultValue: undefined,
form: {
componentProps: {
allowClear: true,
placeholder: '操作人',
},
colProps,
component: 'Input',
},
table: {
},
},
{
field: 'description',
label: '描述',
@ -80,6 +65,7 @@ export const schema = {
rules: [{ required: true, message: '请输入描述!' }],
},
table: {
ellipsis: true,
},
},
{
@ -95,6 +81,24 @@ export const schema = {
component: 'Input',
},
table: {
width: 400,
ellipsis: true,
},
},
{
field: 'username',
label: '操作人',
defaultValue: undefined,
form: {
componentProps: {
allowClear: true,
placeholder: '操作人',
},
colProps,
component: 'Input',
},
table: {
width: 150,
},
},
{
@ -114,6 +118,7 @@ export const schema = {
rules: [{ required: true, message: '请选择日志时间!' }],
},
table: {
width: 150,
},
},
],
@ -121,7 +126,7 @@ export const schema = {
const queryFields = ['createTime'];
const editFields = ['description','userId','remark'];
const tableFields = ['username','description','remark','createTime'];
const tableFields = ['description','remark','username','createTime'];
const descriptionFields = ['description','userId','username','remark','createTime'];
const queryFieldsIndexMap = new Map(queryFields.map((field, index) => [field, index]));