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 @@
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
-
-
- {{
- dayjs(row.beginTime).format('YYYY-MM-DD HH:mm:ss') +
- ' ~ ' +
- dayjs(row.endTime).format('YYYY-MM-DD HH:mm:ss')
- }}
-
-
- {{ row.duration + ' 毫秒' }}
-
-
-
-
-
-
-
-
-
-
- {{ row.retryInterval + '毫秒' }}
-
-
- {{ row.monitorTimeout > 0 ? row.monitorTimeout + ' 毫秒' : '未开启' }}
-
-
-
-
-
-
-
+ >
+ 导出
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ parseTime(scope.row.beginTime) + ' ~ ' + parseTime(scope.row.endTime) }}
+
+
+
+
+ {{ scope.row.duration + ' 毫秒' }}
+
+
+
+
+
+
+
+
+
+ 详细
+
+
+
+
+
+
+
+
+
+
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 @@
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 搜索
+ 重置
+
-
-
+ 新增
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {{ row.retryInterval + '毫秒' }}
-
-
- {{ row.monitorTimeout > 0 ? row.monitorTimeout + ' 毫秒' : '未开启' }}
-
-
- {{ Array.from(nextTimes, (x) => parseTime(x)).join('; ') }}
-
-
-
-
-
-
-
-
-
-
+ >
+ 导出
+
+
+
+ 执行日志
+
+
+
+
+
+
+
+
+
+
+ >
+
+
+
+
+
+ 修改
+ {{ scope.row.status === InfraJobStatusEnum.STOP ? '开启' : '暂停' }}
+ 删除
+ handleCommand(command, scope.row)"
+ v-hasPermi="['infra:job:trigger', 'infra:job:query']"
+ >
+ 更多
+
+
+
+ 执行一次
+
+
+ 任务详细
+
+
+ 调度日志
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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',