From b1678e25373c9f4342592ddade381ceeaaf62459 Mon Sep 17 00:00:00 2001
From: tk
Date: Fri, 13 Dec 2024 16:14:40 +0800
Subject: [PATCH] =?UTF-8?q?refactor:=20=E2=99=BB=EF=B8=8F=20=E5=89=8D?=
=?UTF-8?q?=E7=AB=AF=E4=BD=93=E9=AA=8C=E4=BC=98=E5=8C=96?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
[skip ci]
---
src/frontend/admin/src/App.vue | 20 +++-
.../components/scEcharts/echarts-theme-T.js | 8 +-
.../admin/src/components/scEcharts/index.vue | 11 +-
src/frontend/admin/src/directives/time.js | 63 +---------
.../admin/src/layout/components/search.vue | 57 ++++++++-
.../components/{tasks/index.vue => tasks.vue} | 109 +++++++++++-------
.../src/layout/components/tasks/save.vue | 44 -------
.../admin/src/layout/components/userbar.vue | 2 +-
src/frontend/admin/src/locales/lang/zh-cn.js | 3 +
src/frontend/admin/src/style/fix.scss | 4 +
src/frontend/admin/src/utils/permission.js | 5 +-
src/frontend/admin/src/utils/tool.js | 59 ++++++++++
src/frontend/admin/src/views/home/index.vue | 10 +-
.../admin/src/views/sys/job/index.vue | 15 ++-
.../admin/src/views/sys/job/record/index.vue | 4 +-
.../admin/src/views/sys/job/record/save.vue | 92 ++++++++++++---
16 files changed, 315 insertions(+), 191 deletions(-)
rename src/frontend/admin/src/layout/components/{tasks/index.vue => tasks.vue} (85%)
delete mode 100644 src/frontend/admin/src/layout/components/tasks/save.vue
diff --git a/src/frontend/admin/src/App.vue b/src/frontend/admin/src/App.vue
index 3d2251f3..a497af97 100644
--- a/src/frontend/admin/src/App.vue
+++ b/src/frontend/admin/src/App.vue
@@ -92,8 +92,8 @@ export default {
// 设置语言
this.$i18n.locale = this.$TOOL.data.get('APP_SET_LANG') || this.$CONFIG.APP_SET_LANG
- //ctrl + enter 触发主按钮点击事件
document.onkeydown = (e) => {
+ //ctrl + enter 触发主按钮点击事件
if (e.ctrlKey && e.keyCode === 13) {
document
.getElementsByClassName('el-dialog__footer')[0]
@@ -118,8 +118,22 @@ export default {
break
}
}
- } else if (e.altKey && e.keyCode === 81) {
- UseTabs.close()
+ } else if (e.altKey) {
+ if (e.keyCode === 81) {
+ if (e.ctrlKey) {
+ UseTabs.closeOther()
+ } else {
+ UseTabs.close()
+ }
+ } else if (e.keyCode === 65) {
+ document.getElementsByClassName('userbar-btn-search')[0]?.dispatchEvent(
+ new MouseEvent('click', {
+ view: window,
+ bubbles: true,
+ cancelable: false,
+ }),
+ )
+ }
}
}
},
diff --git a/src/frontend/admin/src/components/scEcharts/echarts-theme-T.js b/src/frontend/admin/src/components/scEcharts/echarts-theme-T.js
index d958036c..84e68524 100644
--- a/src/frontend/admin/src/components/scEcharts/echarts-theme-T.js
+++ b/src/frontend/admin/src/components/scEcharts/echarts-theme-T.js
@@ -1,13 +1,15 @@
import colorTool from '@/utils/color'
export default {
- build() {
+ async build() {
const style = getComputedStyle(document.documentElement)
- const el_color_primary = style.getPropertyValue('--el-color-primary')
+ let el_color_primary
+ while ((el_color_primary = style.getPropertyValue('--el-color-primary')) === 'rgba(0, 0, 0, 0)') {
+ await new Promise((x) => setTimeout(x, 100))
+ }
const el_color_info = style.getPropertyValue('--el-color-info')
const el_text_color_primary = style.getPropertyValue('--el-text-color-primary')
const el_border_color_lighter = style.getPropertyValue('--el-border-color-lighter')
-
return {
color: [el_color_primary, colorTool.lighten(el_color_primary, 0.5), ...colorTool.colorSets],
grid: {
diff --git a/src/frontend/admin/src/components/scEcharts/index.vue b/src/frontend/admin/src/components/scEcharts/index.vue
index da04b9cc..f14b7375 100644
--- a/src/frontend/admin/src/components/scEcharts/index.vue
+++ b/src/frontend/admin/src/components/scEcharts/index.vue
@@ -29,7 +29,7 @@ export default {
option: {
deep: true,
handler(v) {
- unwarp(this.myChart).setOption(v, { notMerge: true })
+ unwarp(this.myChart)?.setOption(v, { notMerge: true })
},
},
},
@@ -48,12 +48,11 @@ export default {
deactivated() {
this.isActivat = false
},
- mounted() {
+ async mounted() {
this.isActivat = true
- this.$nextTick(() => {
- echarts.registerTheme('T', T.build())
- this.draw()
- })
+ await this.$nextTick()
+ echarts.registerTheme('T', await T.build())
+ this.draw()
},
methods: {
draw() {
diff --git a/src/frontend/admin/src/directives/time.js b/src/frontend/admin/src/directives/time.js
index 4bc66e5f..acce9d64 100644
--- a/src/frontend/admin/src/directives/time.js
+++ b/src/frontend/admin/src/directives/time.js
@@ -1,64 +1,5 @@
import tool from '@/utils/tool'
-const Time = {
- //获取当前时间戳
- getUnix: function () {
- const date = new Date()
- return date.getTime()
- },
- //获取今天0点0分0秒的时间戳
- getTodayUnix: function () {
- const date = new Date()
- date.setHours(0)
- date.setMinutes(0)
- date.setSeconds(0)
- date.setMilliseconds(0)
- return date.getTime()
- },
- //获取今年1月1日0点0秒的时间戳
- getYearUnix: function () {
- const date = new Date()
- date.setMonth(0)
- date.setDate(1)
- date.setHours(0)
- date.setMinutes(0)
- date.setSeconds(0)
- date.setMilliseconds(0)
- return date.getTime()
- },
- //获取标准年月日
- getLastDate: function (time) {
- const date = new Date(time)
- const month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
- const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
- return date.getFullYear() + '-' + month + '-' + day
- },
- //转换时间
- getFormatTime: function (timestamp) {
- timestamp = new Date(timestamp)
- const now = this.getUnix()
- const today = this.getTodayUnix()
- //var year = this.getYearUnix();
- const timer = (now - timestamp) / 1000
- let tip
-
- if (timer <= 0) {
- tip = '刚刚'
- } else if (Math.floor(timer / 60) <= 0) {
- tip = '刚刚'
- } else if (timer < 3600) {
- tip = Math.floor(timer / 60) + '分钟前'
- } else if (timer >= 3600 && (timestamp - today >= 0 || Math.floor(timer / 86400) <= 0)) {
- tip = Math.floor(timer / 3600) + '小时前'
- } else if (timer / 86400 <= 31) {
- tip = Math.floor(timer / 86400) + '天前'
- } else {
- tip = this.getLastDate(timestamp)
- }
- return tip
- },
-}
-
export default (el, binding) => {
let { value, modifiers } = binding
if (!value) {
@@ -68,9 +9,9 @@ export default (el, binding) => {
value = value * 1000
}
if (modifiers.tip) {
- el.innerHTML = Time.getFormatTime(value)
+ el.innerHTML = tool.time.getFormatTime(value)
el.__timeout__ = setInterval(() => {
- el.innerHTML = Time.getFormatTime(value)
+ el.innerHTML = tool.time.getFormatTime(value)
}, 60000)
} else {
const format = el.getAttribute('format') || undefined
diff --git a/src/frontend/admin/src/layout/components/search.vue b/src/frontend/admin/src/layout/components/search.vue
index 072202f7..9517c898 100644
--- a/src/frontend/admin/src/layout/components/search.vue
+++ b/src/frontend/admin/src/layout/components/search.vue
@@ -5,6 +5,8 @@
:placeholder="$t('搜索')"
:trigger-on-focus="false"
@input="inputChange"
+ @keydown="inputKeyDown"
+ autofocus
clearable
prefix-icon="el-icon-search"
ref="input"
@@ -25,7 +27,11 @@
{{ $t('暂无搜索结果') }}
- -
+
-
@@ -41,18 +47,55 @@
export default {
data() {
return {
+ cursor: {
+ position: 0,
+ index: 0,
+ },
input: '',
menu: [],
result: [],
history: [],
}
},
- mounted() {
+ watch: {
+ result() {
+ this.cursor.position = 0
+ this.cursor.index = 0
+ },
+ },
+ async mounted() {
this.history = this.$TOOL.data.get('SEARCH_HISTORY') || []
this.filterMenu(this.$GLOBAL.menu)
+ await this.$nextTick()
+ await new Promise((x) => setTimeout(x, 200))
this.$refs.input.focus()
},
methods: {
+ inputKeyDown(e) {
+ if (e.keyCode === 13) {
+ document
+ .getElementsByClassName('sc-search-result')[0]
+ ?.getElementsByClassName('el-scrollbar__view')[0]
+ ?.children[this.cursor.index]?.dispatchEvent(
+ new MouseEvent('click', {
+ view: window,
+ bubbles: true,
+ cancelable: false,
+ }),
+ )
+ return
+ }
+ if (e.keyCode === 40) {
+ this.cursor.index = Math.abs(++this.cursor.position % this.result.length)
+ e.preventDefault()
+ return
+ }
+ if (e.keyCode === 38) {
+ this.cursor.index = Math.abs(--this.cursor.position % this.result.length)
+ e.preventDefault()
+ return
+ }
+ },
inputChange(value) {
if (value) {
this.result = this.menuFilter(value)
@@ -152,6 +195,9 @@ export default {
}
.sc-search-history {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
margin-top: 1rem;
}
@@ -182,9 +228,10 @@ export default {
margin-right: 1rem;
}
+.sc-search-result-li-hover,
.sc-search-result li:hover {
- background: var(--el-color-primary);
- color: var(--el-color-white);
- border-color: var(--el-color-primary);
+ background: var(--el-color-primary) !important;
+ color: var(--el-color-white) !important;
+ border-color: var(--el-color-primary) !important;
}
\ No newline at end of file
diff --git a/src/frontend/admin/src/layout/components/tasks/index.vue b/src/frontend/admin/src/layout/components/tasks.vue
similarity index 85%
rename from src/frontend/admin/src/layout/components/tasks/index.vue
rename to src/frontend/admin/src/layout/components/tasks.vue
index 8594ba29..afd91ea6 100644
--- a/src/frontend/admin/src/layout/components/tasks/index.vue
+++ b/src/frontend/admin/src/layout/components/tasks.vue
@@ -10,6 +10,43 @@
+
+
+
+ {{ $TOOL.time.getFormatTime(new Date(failJobViewTime).getTime()) }}
+ 至今
+ 未发现新的异常作业
+
+
+
+
+
+ {{ job.httpStatusCode.toUpperCase().slice(0, 2) }}
+
+
+
+
{{ job.job.jobName }}
+
{{ $t('出错时间:') }}
+
+ 执行耗时:{{ $TOOL.groupSeparator(job.duration) }} ms
+
+
+
+
+ {{ job.responseBody }}
+
+
+
+
+
+
+
+
+
-
-
-
-
-
- {{ job.httpStatusCode.toUpperCase().slice(0, 2) }}
-
-
-
-
{{ job.job.jobName }}
-
{{ $t('出错时间:') }}
-
- 执行耗时:{{ $TOOL.groupSeparator(job.duration) }} ms
-
-
-
-
- {{ job.responseBody }}
-
-
-
-
-
-
-
-
-
-
-
- {{ $t('作业管理') }}
+
+
+ {
+ this.$router.push({ path: '/sys/job', query: { view: 'fail' } })
+ this.$emit('closed')
+ }
+ "
+ plain
+ type="danger"
+ >{{ $t('异常日志') }}
-
-
- {{ $t('异常日志') }}
+
+
+ {
+ this.$router.push({ path: '/sys/job' })
+ this.$emit('closed')
+ }
+ "
+ >{{ $t('作业管理') }}
@@ -105,7 +129,6 @@
@closed="dialog.jobRecordSave = null"
@mounted="$refs.jobRecordSaveDialog.open(dialog.jobRecordSave)"
ref="jobRecordSaveDialog">
-
-
\ No newline at end of file
diff --git a/src/frontend/admin/src/layout/components/userbar.vue b/src/frontend/admin/src/layout/components/userbar.vue
index 17e9f134..499b9552 100644
--- a/src/frontend/admin/src/layout/components/userbar.vue
+++ b/src/frontend/admin/src/layout/components/userbar.vue
@@ -83,7 +83,7 @@
import { defineAsyncComponent } from 'vue'
import avatar from '../../utils/avatar'
const search = defineAsyncComponent(() => import('./search.vue'))
-const tasks = defineAsyncComponent(() => import('./tasks/index.vue'))
+const tasks = defineAsyncComponent(() => import('./tasks.vue'))
const message = defineAsyncComponent(() => import('@/views/profile/message/components/list.vue'))
export default {
components: {
diff --git a/src/frontend/admin/src/locales/lang/zh-cn.js b/src/frontend/admin/src/locales/lang/zh-cn.js
index 910570d9..e477feee 100644
--- a/src/frontend/admin/src/locales/lang/zh-cn.js
+++ b/src/frontend/admin/src/locales/lang/zh-cn.js
@@ -498,4 +498,7 @@ export default {
本页: '本页',
'JSON 格式化': 'JSON 格式化',
格式错误: '格式错误',
+ '按下 {key} 可关闭当前标签页': '按下 {key} 可关闭当前标签页',
+ '按下 {key} 可关闭其它标签页': '按下 {key} 可关闭其它标签页',
+ '按下 {key} 快速查找菜单功能': '按下 {key} 快速查找菜单功能',
}
\ No newline at end of file
diff --git a/src/frontend/admin/src/style/fix.scss b/src/frontend/admin/src/style/fix.scss
index 0e49ee2b..2d278401 100644
--- a/src/frontend/admin/src/style/fix.scss
+++ b/src/frontend/admin/src/style/fix.scss
@@ -328,4 +328,8 @@
.el-popper {
max-width: 90%;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
+}
+
+.el-collapse-item__header {
+ color: var(--el-text-color-regular);
}
\ No newline at end of file
diff --git a/src/frontend/admin/src/utils/permission.js b/src/frontend/admin/src/utils/permission.js
index f2f2b6d6..7d39d4fd 100644
--- a/src/frontend/admin/src/utils/permission.js
+++ b/src/frontend/admin/src/utils/permission.js
@@ -12,19 +12,16 @@ export function permissionAll(permissions) {
* @returns {boolean}
*/
export function judementSameArr(news, old) {
- // console.log(news)
- // console.log(old)
let count = 0
const len = news.length
for (let i in news) {
for (let j in old) {
if (news[i] === old[j]) {
count++
- // console.log(news[i])
}
}
}
- // console.log('相同的数量', count)
+
return count === len
}
diff --git a/src/frontend/admin/src/utils/tool.js b/src/frontend/admin/src/utils/tool.js
index b8a0b6ac..c6322821 100644
--- a/src/frontend/admin/src/utils/tool.js
+++ b/src/frontend/admin/src/utils/tool.js
@@ -3,6 +3,65 @@ import sysConfig from '@/config'
const tool = {}
+tool.time = {
+ //获取当前时间戳
+ getUnix: function () {
+ const date = new Date()
+ return date.getTime()
+ },
+ //获取今天0点0分0秒的时间戳
+ getTodayUnix: function () {
+ const date = new Date()
+ date.setHours(0)
+ date.setMinutes(0)
+ date.setSeconds(0)
+ date.setMilliseconds(0)
+ return date.getTime()
+ },
+ //获取今年1月1日0点0秒的时间戳
+ getYearUnix: function () {
+ const date = new Date()
+ date.setMonth(0)
+ date.setDate(1)
+ date.setHours(0)
+ date.setMinutes(0)
+ date.setSeconds(0)
+ date.setMilliseconds(0)
+ return date.getTime()
+ },
+ //获取标准年月日
+ getLastDate: function (time) {
+ const date = new Date(time)
+ const month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1
+ const day = date.getDate() < 10 ? '0' + date.getDate() : date.getDate()
+ return date.getFullYear() + '-' + month + '-' + day
+ },
+ //转换时间
+ getFormatTime: function (timestamp) {
+ timestamp = new Date(timestamp)
+ const now = this.getUnix()
+ const today = this.getTodayUnix()
+ //var year = this.getYearUnix();
+ const timer = (now - timestamp) / 1000
+ let tip
+
+ if (timer <= 0) {
+ tip = '刚刚'
+ } else if (Math.floor(timer / 60) <= 0) {
+ tip = '刚刚'
+ } else if (timer < 3600) {
+ tip = Math.floor(timer / 60) + '分钟前'
+ } else if (timer >= 3600 && (timestamp - today >= 0 || Math.floor(timer / 86400) <= 0)) {
+ tip = Math.floor(timer / 3600) + '小时前'
+ } else if (timer / 86400 <= 31) {
+ tip = Math.floor(timer / 86400) + '天前'
+ } else {
+ tip = this.getLastDate(timestamp)
+ }
+ return tip
+ },
+}
+
/* localStorage */
tool.data = {
configJson: null,
diff --git a/src/frontend/admin/src/views/home/index.vue b/src/frontend/admin/src/views/home/index.vue
index 502d5bed..c7cf7543 100644
--- a/src/frontend/admin/src/views/home/index.vue
+++ b/src/frontend/admin/src/views/home/index.vue
@@ -5,9 +5,13 @@
- {{ $t('按下 ALT+Q 可快速关闭当前标签页') }}
- {{ $t('快速查找菜单功能') }}
- {{ $t('修改个人信息和密码') }}
+
+
+
+
+
+
+
{{ $t('自定义首页布局') }}
diff --git a/src/frontend/admin/src/views/sys/job/index.vue b/src/frontend/admin/src/views/sys/job/index.vue
index 6359c8a8..36ce8003 100644
--- a/src/frontend/admin/src/views/sys/job/index.vue
+++ b/src/frontend/admin/src/views/sys/job/index.vue
@@ -7,7 +7,7 @@
-
+
@@ -20,9 +20,20 @@ const all = defineAsyncComponent(() => import('@/views/sys/job/all/index.vue'))
export default {
components: { all, log },
computed: {},
- created() {},
+ created() {
+ if (this.$route.query.view === 'log') {
+ this.tabId = 'log'
+ }
+
+ if (this.$route.query.view === 'fail') {
+ this.tabId = 'log'
+ this.dataStatusCode = ['300,399', '400,499', '500,599', '900,999']
+ this.$TOOL.data.set('APP_SET_FAIL_JOB_VIEW_TIME', this.$TOOL.dateFormat(new Date(), 'yyyy-MM-dd hh:mm:ss'))
+ }
+ },
data() {
return {
+ dataStatusCode: null,
tabId: 'all',
}
},
diff --git a/src/frontend/admin/src/views/sys/job/record/index.vue b/src/frontend/admin/src/views/sys/job/record/index.vue
index 2b2f54a5..2e3b87c3 100644
--- a/src/frontend/admin/src/views/sys/job/record/index.vue
+++ b/src/frontend/admin/src/views/sys/job/record/index.vue
@@ -2,12 +2,12 @@