mirror of
https://github.com/nsnail/NetAdmin.git
synced 2025-07-05 10:08:15 +08:00
@ -10,15 +10,15 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@element-plus/icons-vue": "2.3.1",
|
||||
"ace-builds": "1.36.2",
|
||||
"aieditor": "1.1.7",
|
||||
"ace-builds": "1.36.3",
|
||||
"aieditor": "1.2.3",
|
||||
"axios": "1.7.7",
|
||||
"clipboard": "2.0.11",
|
||||
"core-js": "3.38.1",
|
||||
"cropperjs": "1.6.2",
|
||||
"crypto-js": "4.2.0",
|
||||
"echarts": "5.5.1",
|
||||
"element-plus": "2.8.5",
|
||||
"element-plus": "2.8.6",
|
||||
"json-bigint": "1.0.0",
|
||||
"json5-to-table": "0.1.8",
|
||||
"markdown-it": "14.1.0",
|
||||
@ -40,9 +40,9 @@
|
||||
"@vitejs/plugin-vue": "5.1.4",
|
||||
"prettier": "3.3.3",
|
||||
"prettier-plugin-organize-attributes": "1.0.0",
|
||||
"sass": "1.79.5",
|
||||
"terser": "5.34.1",
|
||||
"vite": "5.4.8"
|
||||
"sass": "1.80.5",
|
||||
"terser": "5.36.0",
|
||||
"vite": "5.4.10"
|
||||
},
|
||||
"browserslist": [
|
||||
"> 1%",
|
||||
|
@ -95,5 +95,5 @@ export default {
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
@import '@/style/style.scss';
|
||||
@use '@/style/style.scss' as *;
|
||||
</style>
|
33
src/frontend/admin/src/components/naColTag/index.vue
Normal file
33
src/frontend/admin/src/components/naColTag/index.vue
Normal file
@ -0,0 +1,33 @@
|
||||
<template>
|
||||
<el-table-column v-bind="$attrs" :prop="prop">
|
||||
<template #default="{ row }">
|
||||
<el-tag
|
||||
v-if="row[prop]"
|
||||
:type="['success', 'danger', 'info', 'primary', 'warning'][$TOOL.crypto.hashCode(row[prop]) % 5]"
|
||||
@click="$emit('click', row)">
|
||||
{{ row[prop] }}
|
||||
</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
<script>
|
||||
export default {
|
||||
emits: ['click'],
|
||||
props: {
|
||||
prop: { type: String },
|
||||
},
|
||||
data() {
|
||||
return {}
|
||||
},
|
||||
mounted() {},
|
||||
created() {},
|
||||
components: {},
|
||||
computed: {},
|
||||
methods: {},
|
||||
}
|
||||
</script>
|
||||
<style scoped>
|
||||
.el-tag {
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
@ -30,7 +30,7 @@
|
||||
</template>
|
||||
</el-input>
|
||||
|
||||
<el-dialog v-model="dialogVisible" :title="$t('Cron 规则生成器')" :width="800" append-to-body destroy-on-close>
|
||||
<el-dialog v-model="dialogVisible" :title="$t('Cron 规则生成器')" append-to-body destroy-on-close>
|
||||
<div class="sc-cron">
|
||||
<el-tabs>
|
||||
<el-tab-pane>
|
||||
|
@ -10,7 +10,7 @@
|
||||
<template>
|
||||
<div class="sc-select-filter">
|
||||
<div v-if="data.length <= 0" class="sc-select-filter__no-data">{{ $t('暂无数据') }}</div>
|
||||
<div v-for="item in data" :key="item.key" class="sc-select-filter__item">
|
||||
<div v-for="item in data" :class="`sc-select-filter__item${item.w100p ? ' sc-select-filter__item-w100p' : ''}`" :key="item.key">
|
||||
<div :style="{ width: labelWidth + 'rem' }" class="sc-select-filter__item-title">
|
||||
<label>{{ item.title }}</label>
|
||||
</div>
|
||||
@ -196,4 +196,7 @@ export default {
|
||||
.sc-select-filter__no-data {
|
||||
color: #999;
|
||||
}
|
||||
.sc-select-filter__item-w100p {
|
||||
width: 100%;
|
||||
}
|
||||
</style>
|
@ -31,6 +31,9 @@
|
||||
</template>
|
||||
</span>
|
||||
<span v-if="suffix" class="sc-statistic-content-suffix">{{ suffix }}</span>
|
||||
<span class="sc-statistic-icon">
|
||||
<slot v-if="$slots.icon" name="icon"></slot>
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="description || $slots.default" class="sc-statistic-description">
|
||||
<slot>
|
||||
@ -102,4 +105,8 @@ export default {
|
||||
.dark .sc-statistic-content {
|
||||
color: #c0c0c0;
|
||||
}
|
||||
|
||||
.sc-statistic-icon {
|
||||
float: right;
|
||||
}
|
||||
</style>
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<sc-dialog v-model="visible" :title="$t('高级筛选')" :width="800" destroy-on-close>
|
||||
<sc-dialog v-model="visible" :title="$t('高级筛选')" destroy-on-close>
|
||||
<el-form :model="form" :rules="rules" label-width="10rem" ref="form">
|
||||
<el-form-item :label="$t('字段名')" prop="field">
|
||||
<el-input v-model="form.field" :placeholder="$t('字段名')" clearable />
|
||||
|
@ -51,6 +51,7 @@ import naColAvatar from '@/components/naColAvatar'
|
||||
import naColId from '@/components/naColId/index.vue'
|
||||
import naColIndicator from '@/components/naColIndicator/index.vue'
|
||||
import naColOperation from '@/components/naColOperation'
|
||||
import naColTag from '@/components/naColTag/index.vue'
|
||||
import naColTags from '@/components/naColTags/index.vue'
|
||||
import naColTime from '@/components/naColTime/index.vue'
|
||||
import naColUser from '@/components/naColUser/index.vue'
|
||||
@ -93,6 +94,7 @@ export default {
|
||||
app.component('naColId', naColId)
|
||||
app.component('naColIndicator', naColIndicator)
|
||||
app.component('naColOperation', naColOperation)
|
||||
app.component('naColTag', naColTag)
|
||||
app.component('naColTags', naColTags)
|
||||
app.component('naColTime', naColTime)
|
||||
app.component('naColUser', naColUser)
|
||||
|
@ -466,7 +466,6 @@ export default {
|
||||
用户列表: 'User list',
|
||||
是: 'Yes',
|
||||
否: 'No',
|
||||
资源复用: 'Resource reuse',
|
||||
手机: 'Mobile',
|
||||
'您已退出登录或无权限访问当前资源,请重新登录后再操作':
|
||||
'You have logged out or do not have permission to access the current resource, please log in again before operating',
|
||||
|
@ -464,7 +464,6 @@ export default {
|
||||
用户列表: '用户列表',
|
||||
是: '是',
|
||||
否: '否',
|
||||
资源复用: '资源复用',
|
||||
手机: '手机',
|
||||
'您已退出登录或无权限访问当前资源,请重新登录后再操作': '您已退出登录或无权限访问当前资源,请重新登录后再操作',
|
||||
访问受限: '访问受限',
|
||||
|
@ -1,4 +1,4 @@
|
||||
@import 'element-plus/theme-chalk/src/dark/css-vars.scss';
|
||||
@use 'element-plus/theme-chalk/src/dark/css-vars.scss' as *;
|
||||
|
||||
html.dark {
|
||||
//变量
|
||||
|
@ -293,6 +293,32 @@
|
||||
|
||||
.el-dialog__body {
|
||||
flex: 1;
|
||||
|
||||
> * {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.el-tabs,
|
||||
.el-tab-pane,
|
||||
.el-form {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.el-tabs__content,
|
||||
.el-tabs__content > * {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.el-tab-pane {
|
||||
overflow-y: scroll;
|
||||
overflow-x: hidden;
|
||||
scrollbar-width: none;
|
||||
|
||||
&::-webkit-scrollbar {
|
||||
width: 0; /* 隐藏纵向滚动条 */
|
||||
background: transparent; /* 隐藏背景 */
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
@import 'app.scss';
|
||||
@import 'fix.scss';
|
||||
@import 'pages.scss';
|
||||
@import 'media.scss';
|
||||
@import 'dark.scss';
|
||||
@use 'app.scss' as *;
|
||||
@use 'fix.scss' as *;
|
||||
@use 'pages.scss' as *;
|
||||
@use 'media.scss' as *;
|
||||
@use 'dark.scss' as *;
|
@ -43,7 +43,7 @@ export default {
|
||||
}),
|
||||
)
|
||||
this.loading = false
|
||||
this.option.xAxis.data = res[0].data.map((x) => {
|
||||
this.option.xAxis.data = res[res.length - 1].data.map((x) => {
|
||||
return x.timestamp
|
||||
})
|
||||
let i = 0
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-dialog v-model="visible" :title="$t('设置邮箱')" :width="800" @closed="$emit('closed')" destroy-on-close>
|
||||
<el-dialog v-model="visible" :title="$t('设置邮箱')" @closed="$emit('closed')" destroy-on-close>
|
||||
<el-form :model="form" :rules="rules" label-position="top" ref="form">
|
||||
<el-row class="is-justify-space-evenly">
|
||||
<el-col v-if="$GLOBAL.user.mobile" :lg="10">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-dialog v-model="visible" :title="`${titleMap[mode]}`" :width="800" @closed="$emit('closed')" destroy-on-close>
|
||||
<el-dialog v-model="visible" :title="`${titleMap[mode]}`" @closed="$emit('closed')" destroy-on-close>
|
||||
<el-form :model="form" :rules="rules" label-position="top" ref="form">
|
||||
<el-row class="items-center justify-content-center">
|
||||
<el-col v-if="mode === 'edit'" :lg="10">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<el-dialog v-model="visible" :title="$t('修改密码')" :width="800" @closed="$emit('closed')" destroy-on-close>
|
||||
<el-dialog v-model="visible" :title="$t('修改密码')" @closed="$emit('closed')" destroy-on-close>
|
||||
<el-form :model="form" :rules="rules" label-width="15rem" ref="form">
|
||||
<el-form-item :label="$t('旧密码')" prop="oldPassword">
|
||||
<el-input
|
||||
|
@ -59,16 +59,7 @@
|
||||
</el-header>
|
||||
<el-main class="nopadding">
|
||||
<sc-table
|
||||
:context-menus="[
|
||||
'id',
|
||||
'userRegisterConfirm',
|
||||
'userRegisterDept.name',
|
||||
'userRegisterRole.name',
|
||||
'enabled',
|
||||
'createdTime',
|
||||
'phoneReuseTimes',
|
||||
'emailReuseTimes',
|
||||
]"
|
||||
:context-menus="['id', 'userRegisterConfirm', 'userRegisterDept.name', 'userRegisterRole.name', 'enabled', 'createdTime']"
|
||||
:export-api="$API.sys_config.export"
|
||||
:on-command="this.getStatistics"
|
||||
:params="query"
|
||||
@ -93,7 +84,7 @@
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table-column>
|
||||
<el-table-column :label="$t('启用')" align="center" prop="enabled" width="100">
|
||||
<el-table-column :label="$t('启用')" align="center" prop="enabled" sortable="custom" width="100">
|
||||
<template #default="{ row }">
|
||||
<el-switch v-model="row.enabled" @change="changeSwitch($event, row)"></el-switch>
|
||||
</template>
|
||||
|
@ -25,7 +25,6 @@
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-collapse-item>
|
||||
<el-collapse-item :title="$t('其他设置')" name="2"></el-collapse-item>
|
||||
</el-collapse>
|
||||
|
||||
<el-form-item :label="$t('启用')" prop="enabled">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<sc-dialog v-model="visible" :title="`${titleMap[mode]}:${form?.id ?? '...'}`" :width="800" @closed="$emit('closed')" destroy-on-close>
|
||||
<sc-dialog v-model="visible" :title="`${titleMap[mode]}:${form?.id ?? '...'}`" @closed="$emit('closed')" destroy-on-close>
|
||||
<div v-loading="loading">
|
||||
<el-tabs tab-position="top">
|
||||
<el-tab-pane :label="$t('基本信息')">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<sc-dialog v-model="visible" :title="$t('批量修改')" :width="800" @closed="$emit('closed')" destroy-on-close>
|
||||
<sc-dialog v-model="visible" :title="$t('批量修改')" @closed="$emit('closed')" destroy-on-close>
|
||||
<div v-loading="loading">
|
||||
<el-tabs tab-position="top">
|
||||
<el-tab-pane :label="$t('基本信息')">
|
||||
|
@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<sc-dialog v-model="visible" :title="`${titleMap[mode]}:${form?.id ?? '...'}`" :width="800" @closed="$emit('closed')" destroy-on-close>
|
||||
<sc-dialog v-model="visible" :title="`${titleMap[mode]}:${form?.id ?? '...'}`" @closed="$emit('closed')" destroy-on-close>
|
||||
<el-form v-loading="loading" :model="form" :rules="rules" label-width="10rem" ref="dialogForm">
|
||||
<el-form-item :label="$t('字典名称')" prop="name">
|
||||
<el-input v-model="form.name" :placeholder="$t('字典名称')" clearable></el-input>
|
||||
|
@ -7,13 +7,13 @@
|
||||
destroy-on-close
|
||||
full-screen>
|
||||
<el-form
|
||||
v-loading="loading"
|
||||
:disabled="mode === 'view' && tabId !== 'log'"
|
||||
:model="form"
|
||||
:rules="rules"
|
||||
label-position="right"
|
||||
label-width="12rem"
|
||||
ref="dialogForm">
|
||||
ref="dialogForm"
|
||||
style="height: 100%">
|
||||
<el-tabs v-model="tabId" tab-position="top">
|
||||
<el-tab-pane :label="$t('基本信息')">
|
||||
<el-form-item prop="avatar">
|
||||
|
Reference in New Issue
Block a user