From c964ca78ee0bb85958d44fd2f5b81c16a0f5c3f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8A=8B=E9=81=93=E6=BA=90=E7=A0=81?= Date: Sun, 2 Apr 2023 14:48:43 +0000 Subject: [PATCH] =?UTF-8?q?=E5=9B=9E=E9=80=80=20'Pull=20Request=20!84=20:?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E6=B5=8B=E8=AF=95=E6=89=80=E6=8F=90bug'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 + src/views/bpm/form/formEditor.vue | 27 +- src/views/infra/build/index.vue | 27 +- .../infra/codegen/components/Preview.vue | 4 +- src/views/infra/config/config.data.ts | 3 +- src/views/infra/config/index.vue | 22 +- src/views/infra/fileList/index.vue | 43 +- src/views/infra/job/JobLog.vue | 236 ++++++--- src/views/infra/job/JobLogView.vue | 74 +++ src/views/infra/job/form.vue | 172 ++++++ src/views/infra/job/index.vue | 490 +++++++++--------- src/views/infra/job/job.data.ts | 70 --- src/views/infra/job/jobLog.data.ts | 76 --- src/views/infra/job/utils.ts | 44 ++ src/views/infra/job/view.vue | 89 ++++ src/views/system/notice/index.vue | 269 +++++----- src/views/system/notice/notice.data.ts | 59 --- src/views/system/user/user.data.ts | 12 +- 18 files changed, 991 insertions(+), 729 deletions(-) create mode 100644 src/views/infra/job/JobLogView.vue create mode 100644 src/views/infra/job/form.vue delete mode 100644 src/views/infra/job/job.data.ts delete mode 100644 src/views/infra/job/jobLog.data.ts create mode 100644 src/views/infra/job/utils.ts create mode 100644 src/views/infra/job/view.vue delete mode 100644 src/views/system/notice/notice.data.ts diff --git a/.gitignore b/.gitignore index 0b05e6a6..3efc9c52 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,6 @@ dist-ssr /dist* *-lock.* pnpm-debug + +.idea +.history \ No newline at end of file diff --git a/src/views/bpm/form/formEditor.vue b/src/views/bpm/form/formEditor.vue index 418a75e8..989ea56e 100644 --- a/src/views/bpm/form/formEditor.vue +++ b/src/views/bpm/form/formEditor.vue @@ -133,24 +133,15 @@ const openModel = (title: string) => { } /** 复制 **/ const copy = async (text: string) => { - // const { copy, copied, isSupported } = useClipboard({ source: JSON.stringify(text) }) - // if (!isSupported.value) { - // message.error(t('common.copyError')) - // } else { - // await copy() - // if (unref(copied.value)) { - // message.success(t('common.copySuccess')) - // } - // } - let url = JSON.stringify(text) - let oInput = document.createElement('textarea') - oInput.value = url - document.body.appendChild(oInput) - oInput.select() // 选择对象; - // console.log(oInput.value) - document.execCommand('Copy') // 执行浏览器复制命令 - message.success(t('common.copySuccess')) - oInput.remove() + const { copy, copied, isSupported } = useClipboard({ source: text }) + if (!isSupported) { + message.error(t('common.copyError')) + } else { + await copy() + if (unref(copied)) { + message.success(t('common.copySuccess')) + } + } } // ========== 初始化 ========== onMounted(() => { diff --git a/src/views/infra/build/index.vue b/src/views/infra/build/index.vue index b3af638b..6f577e95 100644 --- a/src/views/infra/build/index.vue +++ b/src/views/infra/build/index.vue @@ -77,24 +77,15 @@ const showTemplate = () => { /** 复制 **/ const copy = async (text: string) => { - // const { copy, copied, isSupported } = useClipboard({ source: JSON.stringify(text) }) - // if (!isSupported.value) { - // message.error(t('common.copyError')) - // } else { - // await copy() - // if (unref(copied.value)) { - // message.success(t('common.copySuccess')) - // } - // } - let url = JSON.stringify(text) - let oInput = document.createElement('textarea') - oInput.value = url - document.body.appendChild(oInput) - oInput.select() // 选择对象; - // console.log(oInput.value) - document.execCommand('Copy') // 执行浏览器复制命令 - message.success(t('common.copySuccess')) - oInput.remove() + const { copy, copied, isSupported } = useClipboard({ source: text }) + if (!isSupported) { + message.error(t('common.copyError')) + } else { + await copy() + if (unref(copied)) { + message.success(t('common.copySuccess')) + } + } } const makeTemplate = () => { diff --git a/src/views/infra/codegen/components/Preview.vue b/src/views/infra/codegen/components/Preview.vue index 6a6246a8..2d9482ff 100644 --- a/src/views/infra/codegen/components/Preview.vue +++ b/src/views/infra/codegen/components/Preview.vue @@ -130,11 +130,11 @@ const handleFiles = (datas: CodegenPreviewVO[]) => { /** 复制 **/ const copy = async (text: string) => { const { copy, copied, isSupported } = useClipboard({ source: text }) - if (!isSupported.value) { + if (!isSupported) { message.error(t('common.copyError')) } else { await copy() - if (unref(copied.value)) { + if (unref(copied)) { message.success(t('common.copySuccess')) } } diff --git a/src/views/infra/config/config.data.ts b/src/views/infra/config/config.data.ts index 635745a5..41acfa15 100644 --- a/src/views/infra/config/config.data.ts +++ b/src/views/infra/config/config.data.ts @@ -6,8 +6,7 @@ export const rules = reactive({ category: [required], name: [required], key: [required], - value: [required], - visible: [{ required: true, message: '请选择是否可见', trigger: 'change' }] + value: [required] }) // CrudSchema diff --git a/src/views/infra/config/index.vue b/src/views/infra/config/index.vue index ddf9eeba..b2bc8a8b 100644 --- a/src/views/infra/config/index.vue +++ b/src/views/infra/config/index.vue @@ -93,8 +93,8 @@ const message = useMessage() // 消息弹窗 // 列表相关的变量 const [registerTable, { reload, deleteData, exportList }] = useXTable({ allSchemas: allSchemas, - getListApi: ConfigApi.getConfigPage, - deleteApi: ConfigApi.deleteConfig, + getListApi: ConfigApi.getConfigPageApi, + deleteApi: ConfigApi.deleteConfigApi, exportListApi: ConfigApi.exportConfigApi }) @@ -127,6 +127,14 @@ const handleCreate = async () => { }, 2 ) + unref(formRef)?.addSchema( + { + field: 'value', + label: '参数键值', + component: 'Input' + }, + 3 + ) } } @@ -134,15 +142,17 @@ const handleCreate = async () => { const handleUpdate = async (rowId: number) => { setDialogTile('update') // 设置数据 - const res = await ConfigApi.getConfig(rowId) + const res = await ConfigApi.getConfigApi(rowId) unref(formRef)?.delSchema('key') + unref(formRef)?.delSchema('value') + unref(formRef)?.setValues(res) } // 详情操作 const handleDetail = async (rowId: number) => { setDialogTile('detail') - const res = await ConfigApi.getConfig(rowId) + const res = await ConfigApi.getConfigApi(rowId) detailData.value = res } @@ -157,10 +167,10 @@ const submitForm = async () => { try { const data = unref(formRef)?.formModel as ConfigApi.ConfigVO if (actionType.value === 'create') { - await ConfigApi.createConfig(data) + await ConfigApi.createConfigApi(data) message.success(t('common.createSuccess')) } else { - await ConfigApi.updateConfig(data) + await ConfigApi.updateConfigApi(data) message.success(t('common.updateSuccess')) } dialogVisible.value = false diff --git a/src/views/infra/fileList/index.vue b/src/views/infra/fileList/index.vue index 2309d05c..b9bfb815 100644 --- a/src/views/infra/fileList/index.vue +++ b/src/views/infra/fileList/index.vue @@ -59,7 +59,6 @@ :on-exceed="handleExceed" :on-success="handleFileSuccess" :on-error="excelUploadError" - :on-change="handleFileChange" :before-remove="beforeRemove" :auto-upload="false" accept=".jpg, .png, .gif" @@ -84,7 +83,7 @@ diff --git a/src/views/infra/job/JobLog.vue b/src/views/infra/job/JobLog.vue index 1771bbd7..daa20046 100644 --- a/src/views/infra/job/JobLog.vue +++ b/src/views/infra/job/JobLog.vue @@ -1,77 +1,179 @@ + diff --git a/src/views/infra/job/JobLogView.vue b/src/views/infra/job/JobLogView.vue new file mode 100644 index 00000000..c66e0d80 --- /dev/null +++ b/src/views/infra/job/JobLogView.vue @@ -0,0 +1,74 @@ + + diff --git a/src/views/infra/job/form.vue b/src/views/infra/job/form.vue new file mode 100644 index 00000000..24488fd7 --- /dev/null +++ b/src/views/infra/job/form.vue @@ -0,0 +1,172 @@ + + diff --git a/src/views/infra/job/index.vue b/src/views/infra/job/index.vue index 613f84c4..702b31fe 100644 --- a/src/views/infra/job/index.vue +++ b/src/views/infra/job/index.vue @@ -1,243 +1,175 @@ + diff --git a/src/views/infra/job/job.data.ts b/src/views/infra/job/job.data.ts deleted file mode 100644 index 1ca4a564..00000000 --- a/src/views/infra/job/job.data.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { VxeCrudSchema } from '@/hooks/web/useVxeCrudSchemas' -const { t } = useI18n() // 国际化 -// 表单校验 - -export const rules = reactive({ - name: [required], - handlerName: [required], - cronExpression: [required], - retryCount: [required], - retryInterval: [required] -}) -// CrudSchema -const crudSchemas = reactive({ - primaryKey: 'id', - primaryType: 'id', - primaryTitle: '任务编号', - action: true, - actionWidth: '280px', - columns: [ - { - title: '任务名称', - field: 'name', - isSearch: true - }, - { - title: t('common.status'), - field: 'status', - dictType: DICT_TYPE.INFRA_JOB_STATUS, - dictClass: 'number', - isForm: false, - isSearch: true - }, - { - title: '处理器的名字', - field: 'handlerName', - isSearch: true - }, - { - title: '处理器的参数', - field: 'handlerParam', - isTable: false - }, - { - title: 'CRON 表达式', - field: 'cronExpression' - }, - { - title: '后续执行时间', - field: 'nextTimes', - isTable: false, - isForm: false - }, - { - title: '重试次数', - field: 'retryCount', - isTable: false - }, - { - title: '重试间隔', - field: 'retryInterval', - isTable: false - }, - { - title: '监控超时时间', - field: 'monitorTimeout', - isTable: false - } - ] -}) -export const { allSchemas } = useVxeCrudSchemas(crudSchemas) diff --git a/src/views/infra/job/jobLog.data.ts b/src/views/infra/job/jobLog.data.ts deleted file mode 100644 index 563c097c..00000000 --- a/src/views/infra/job/jobLog.data.ts +++ /dev/null @@ -1,76 +0,0 @@ -import type { VxeCrudSchema } from '@/hooks/web/useVxeCrudSchemas' -// 国际化 - -const { t } = useI18n() -// CrudSchema -const crudSchemas = reactive({ - primaryKey: 'id', - primaryType: 'id', - primaryTitle: '日志编号', - action: true, - columns: [ - { - title: '任务编号', - field: 'jobId', - isSearch: true - }, - { - title: '处理器的名字', - field: 'handlerName', - isSearch: true - }, - { - title: '处理器的参数', - field: 'handlerParam' - }, - { - title: '第几次执行', - field: 'executeIndex' - }, - { - title: '开始执行时间', - field: 'beginTime', - formatter: 'formatDate', - table: { - slots: { - default: 'beginTime_default' - } - }, - search: { - show: true, - itemRender: { - name: 'XDataPicker' - } - } - }, - { - title: '结束执行时间', - field: 'endTime', - formatter: 'formatDate', - isTable: false, - search: { - show: true, - itemRender: { - name: 'XDataPicker' - } - } - }, - { - title: '执行时长', - field: 'duration', - table: { - slots: { - default: 'duration_default' - } - } - }, - { - title: t('common.status'), - field: 'status', - dictType: DICT_TYPE.INFRA_JOB_LOG_STATUS, - dictClass: 'number', - isSearch: true - } - ] -}) -export const { allSchemas } = useVxeCrudSchemas(crudSchemas) diff --git a/src/views/infra/job/utils.ts b/src/views/infra/job/utils.ts new file mode 100644 index 00000000..a3774f22 --- /dev/null +++ b/src/views/infra/job/utils.ts @@ -0,0 +1,44 @@ +export const parseTime = (time) => { + if (!time) { + return null + } + const format = '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if (typeof time === 'string' && /^[0-9]+$/.test(time)) { + time = parseInt(time) + } else if (typeof time === 'string') { + time = time + .replace(new RegExp(/-/gm), '/') + .replace('T', ' ') + .replace(new RegExp(/\.[\d]{3}/gm), '') + } + if (typeof time === 'number' && time.toString().length === 10) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay() + } + const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => { + let value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { + return ['日', '一', '二', '三', '四', '五', '六'][value] + } + if (result.length > 0 && value < 10) { + value = '0' + value + } + return value || 0 + }) + return time_str +} diff --git a/src/views/infra/job/view.vue b/src/views/infra/job/view.vue new file mode 100644 index 00000000..d195e0e3 --- /dev/null +++ b/src/views/infra/job/view.vue @@ -0,0 +1,89 @@ + + diff --git a/src/views/system/notice/index.vue b/src/views/system/notice/index.vue index aceadbba..8add0eab 100644 --- a/src/views/system/notice/index.vue +++ b/src/views/system/notice/index.vue @@ -1,148 +1,159 @@ - diff --git a/src/views/system/notice/notice.data.ts b/src/views/system/notice/notice.data.ts deleted file mode 100644 index 7a72a723..00000000 --- a/src/views/system/notice/notice.data.ts +++ /dev/null @@ -1,59 +0,0 @@ -import type { VxeCrudSchema } from '@/hooks/web/useVxeCrudSchemas' -const { t } = useI18n() // 国际化 - -// 表单校验 -export const rules = reactive({ - title: [required], - type: [required] -}) - -// CrudSchema -const crudSchemas = reactive({ - primaryKey: 'id', - primaryType: 'seq', - action: true, - columns: [ - { - title: '公告标题', - field: 'title', - isSearch: true - }, - { - title: '公告类型', - field: 'type', - dictType: DICT_TYPE.SYSTEM_NOTICE_TYPE, - dictClass: 'number' - }, - { - title: t('common.status'), - field: 'status', - dictType: DICT_TYPE.COMMON_STATUS, - dictClass: 'number', - isSearch: true - }, - { - title: '公告内容', - field: 'content', - table: { - type: 'html' - }, - form: { - component: 'Editor', - colProps: { - span: 24 - }, - componentProps: { - valueHtml: '' - } - }, - isTable: false - }, - { - title: t('common.createTime'), - field: 'createTime', - formatter: 'formatDate', - isForm: false - } - ] -}) -export const { allSchemas } = useVxeCrudSchemas(crudSchemas) diff --git a/src/views/system/user/user.data.ts b/src/views/system/user/user.data.ts index 2ea4d268..7f7384eb 100644 --- a/src/views/system/user/user.data.ts +++ b/src/views/system/user/user.data.ts @@ -28,7 +28,7 @@ export const rules = reactive({ } ], status: [required], - postIds: [required], + postIds: [{ required: true, message: '请选择岗位', trigger: ['blur', 'change'] }], mobile: [ required, { @@ -86,6 +86,11 @@ const crudSchemas = reactive({ field: 'deptId', isTable: false }, + { + title: '岗位', + field: 'postIds', + isTable: false + }, { title: t('common.status'), field: 'status', @@ -98,11 +103,6 @@ const crudSchemas = reactive({ } } }, - { - title: '岗位', - field: 'postIds', - isTable: false - }, { title: '最后登录时间', field: 'loginDate',