Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
phsl
/
admin
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
b9349157
authored
Apr 14, 2023
by
puhui999
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
给所有组件添加name属性预防未知bug!!!
parent
44c18473
Hide whitespace changes
Inline
Side-by-side
Showing
133 changed files
with
1090 additions
and
957 deletions
+1090
-957
src/App.vue
+3
-1
src/components/Backtop/src/Backtop.vue
+1
-1
src/components/ConfigGlobal/src/ConfigGlobal.vue
+2
-2
src/components/ContentDetailWrap/src/ContentDetailWrap.vue
+6
-4
src/components/ContentWrap/src/ContentWrap.vue
+2
-2
src/components/CountTo/src/CountTo.vue
+1
-1
src/components/Crontab/src/Crontab.vue
+55
-47
src/components/Cropper/src/CopperModal.vue
+26
-23
src/components/Cropper/src/Cropper.vue
+2
-2
src/components/Cropper/src/CropperAvatar.vue
+10
-4
src/components/Descriptions/src/Descriptions.vue
+5
-5
src/components/Dialog/src/Dialog.vue
+7
-7
src/components/Echart/src/Echart.vue
+1
-1
src/components/Editor/src/Editor.vue
+3
-3
src/components/Error/src/Error.vue
+2
-2
src/components/IFrame/src/IFrame.vue
+3
-3
src/components/Icon/src/Icon.vue
+2
-2
src/components/Icon/src/IconSelect.vue
+11
-11
src/components/ImageViewer/src/ImageViewer.vue
+1
-1
src/components/Infotip/src/Infotip.vue
+3
-3
src/components/InputPassword/src/InputPassword.vue
+4
-4
src/components/Pagination/index.vue
+5
-5
src/components/Qrcode/src/Qrcode.vue
+4
-5
src/components/Search/src/Search.vue
+12
-12
src/components/Sticky/src/Sticky.vue
+3
-2
src/components/Tooltip/src/Tooltip.vue
+2
-1
src/components/Verifition/src/Verify.vue
+23
-13
src/components/Verifition/src/Verify/VerifyPoints.vue
+7
-7
src/components/Verifition/src/Verify/VerifySlide.vue
+11
-11
src/components/XButton/src/XButton.vue
+4
-3
src/components/XButton/src/XTextButton.vue
+4
-3
src/layout/components/AppView.vue
+1
-1
src/layout/components/Collapse/src/Collapse.vue
+3
-3
src/layout/components/ContextMenu/src/ContextMenu.vue
+6
-5
src/layout/components/Footer/src/Footer.vue
+1
-1
src/layout/components/LocaleDropdown/src/LocaleDropdown.vue
+4
-4
src/layout/components/Logo/src/Logo.vue
+3
-3
src/layout/components/Message/src/Message.vue
+13
-6
src/layout/components/Screenfull/src/Screenfull.vue
+3
-3
src/layout/components/Setting/src/Setting.vue
+8
-8
src/layout/components/Setting/src/components/ColorRadioPicker.vue
+3
-3
src/layout/components/Setting/src/components/InterfaceDisplay.vue
+1
-1
src/layout/components/Setting/src/components/LayoutRadioPicker.vue
+1
-1
src/layout/components/SizeDropdown/src/SizeDropdown.vue
+2
-2
src/layout/components/TagsView/src/TagsView.vue
+21
-18
src/layout/components/ThemeSwitch/src/ThemeSwitch.vue
+5
-5
src/layout/components/UserInfo/src/UserInfo.vue
+1
-1
src/views/Error/403.vue
+1
-1
src/views/Error/404.vue
+1
-1
src/views/Error/500.vue
+1
-1
src/views/Home/Index2.vue
+57
-52
src/views/Login/Login.vue
+1
-1
src/views/Login/components/LoginForm.vue
+17
-17
src/views/Login/components/LoginFormTitle.vue
+1
-1
src/views/Login/components/MobileForm.vue
+12
-12
src/views/Login/components/QrCodeForm.vue
+4
-4
src/views/Login/components/RegisterForm.vue
+9
-9
src/views/Profile/components/BasicInfo.vue
+3
-3
src/views/Profile/components/ProfileUser.vue
+20
-11
src/views/Profile/components/ResetPwd.vue
+4
-4
src/views/Profile/components/UserAvatar.vue
+6
-5
src/views/bpm/form/editor/index.vue
+6
-5
src/views/bpm/group/UserGroupForm.vue
+5
-5
src/views/bpm/model/ModelForm.vue
+17
-16
src/views/bpm/model/ModelImportForm.vue
+15
-14
src/views/bpm/oa/leave/create.vue
+11
-10
src/views/bpm/oa/leave/detail.vue
+3
-3
src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue
+5
-5
src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
+5
-5
src/views/bpm/processInstance/detail/TaskUpdateAssigneeForm.vue
+4
-4
src/views/bpm/task/done/TaskDetail.vue
+3
-3
src/views/bpm/taskAssignRule/TaskAssignRuleForm.vue
+20
-19
src/views/infra/apiAccessLog/ApiAccessLogDetail.vue
+5
-5
src/views/infra/apiErrorLog/ApiErrorLogDetail.vue
+9
-9
src/views/infra/codegen/EditTable.vue
+3
-2
src/views/infra/codegen/ImportTable.vue
+23
-16
src/views/infra/codegen/PreviewCode.vue
+14
-13
src/views/infra/codegen/components/BasicInfoForm.vue
+7
-7
src/views/infra/codegen/components/ColumInfoForm.vue
+12
-12
src/views/infra/codegen/components/GenerateInfoForm.vue
+9
-9
src/views/infra/config/ConfigForm.vue
+5
-5
src/views/infra/dataSourceConfig/DataSourceConfigForm.vue
+4
-4
src/views/infra/file/FileForm.vue
+13
-12
src/views/infra/fileConfig/FileConfigForm.vue
+7
-6
src/views/infra/job/JobDetail.vue
+3
-3
src/views/infra/job/logger/JobLogDetail.vue
+3
-3
src/views/infra/webSocket/index.vue
+7
-7
src/views/mall/product/property/PropertyForm.vue
+6
-5
src/views/mall/product/property/value/ValueForm.vue
+6
-5
src/views/mp/account/AccountForm.vue
+6
-5
src/views/mp/components/wx-editor/WxEditor.vue
+10
-10
src/views/mp/components/wx-news/main.vue
+13
-5
src/views/mp/tag/TagForm.vue
+5
-4
src/views/mp/user/UserForm.vue
+6
-5
src/views/pay/app/AppForm.vue
+5
-4
src/views/pay/merchant/MerchantForm.vue
+6
-5
src/views/pay/order/OrderDetail.vue
+3
-3
src/views/pay/refund/RefundDetail.vue
+3
-3
src/views/system/area/AreaForm.vue
+6
-5
src/views/system/dept/DeptForm.vue
+12
-11
src/views/system/dict/DictTypeForm.vue
+7
-6
src/views/system/dict/data/DictDataForm.vue
+8
-7
src/views/system/errorCode/ErrorCodeForm.vue
+8
-8
src/views/system/loginlog/LoginLogDetail.vue
+3
-3
src/views/system/mail/account/MailAccountDetail.vue
+3
-3
src/views/system/mail/account/MailAccountForm.vue
+6
-5
src/views/system/mail/log/MailLogDetail.vue
+3
-3
src/views/system/mail/template/MailTemplateForm.vue
+6
-5
src/views/system/mail/template/MailTemplateSendForm.vue
+6
-5
src/views/system/menu/MenuForm.vue
+34
-33
src/views/system/notice/NoticeForm.vue
+8
-7
src/views/system/notify/message/NotifyMessageDetail.vue
+3
-3
src/views/system/notify/my/MyNotifyMessageDetail.vue
+4
-4
src/views/system/oauth2/client/ClientForm.vue
+17
-16
src/views/system/operatelog/OperateLogDetail.vue
+7
-7
src/views/system/post/PostForm.vue
+6
-6
src/views/system/role/RoleAssignMenuForm.vue
+11
-10
src/views/system/role/RoleDataPermissionForm.vue
+14
-13
src/views/system/role/RoleForm.vue
+7
-6
src/views/system/role/index.vue
+48
-39
src/views/system/sensitiveWord/SensitiveWordForm.vue
+7
-6
src/views/system/sensitiveWord/SensitiveWordTestForm.vue
+8
-7
src/views/system/sensitiveWord/index.vue
+46
-36
src/views/system/sms/channel/SmsChannelForm.vue
+6
-5
src/views/system/sms/log/SmsLogDetail.vue
+3
-3
src/views/system/sms/template/SmsTemplateForm.vue
+8
-7
src/views/system/sms/template/SmsTemplateSendForm.vue
+6
-5
src/views/system/tenant/TenantForm.vue
+10
-10
src/views/system/tenantPackage/TenantPackageForm.vue
+10
-9
src/views/system/user/DeptTree.vue
+5
-5
src/views/system/user/UserAssignRoleForm.vue
+5
-4
src/views/system/user/UserForm.vue
+10
-9
src/views/system/user/UserImportForm.vue
+14
-12
No files found.
src/App.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"APP"
setup
>
import
{
isDark
}
from
'@/utils/is'
import
{
useAppStore
}
from
'@/store/modules/app'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -32,6 +32,7 @@ $prefix-cls: #{$namespace}-app;
width
:
100%
;
height
:
100%
;
}
html
,
body
{
padding
:
0
!important
;
...
...
@@ -43,6 +44,7 @@ body {
@extend
.size;
}
}
.
#
{
$prefix-cls
}
-grey-mode
{
filter
:
grayscale
(
100%
);
}
...
...
src/components/Backtop/src/Backtop.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BackTop"
setup
>
import
{
ElBacktop
}
from
'element-plus'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
src/components/ConfigGlobal/src/ConfigGlobal.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ConfigGlobal"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
useLocaleStore
}
from
'@/store/modules/locale'
import
{
useAppStore
}
from
'@/store/modules/app'
...
...
@@ -51,9 +51,9 @@ const currentLocale = computed(() => localeStore.currentLocale)
<
template
>
<ElConfigProvider
:namespace=
"variables.elNamespace"
:locale=
"currentLocale.elLocale"
:message=
"
{ max: 1 }"
:namespace="variables.elNamespace"
:size="size"
>
<slot></slot>
...
...
src/components/ContentDetailWrap/src/ContentDetailWrap.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ContentDetailWrap"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -21,7 +21,7 @@ onMounted(() => {
</
script
>
<
template
>
<div
:class=
"[`$
{prefixCls}-container`]" ref="contentDetailWrap
">
<div
ref=
"contentDetailWrap"
:class=
"[`$
{prefixCls}-container`]
">
<Sticky
:offset=
"offset"
>
<div
:class=
"[
...
...
@@ -31,7 +31,7 @@ onMounted(() => {
>
<div
:class=
"[`$
{prefixCls}-header__back`, 'flex pl-10px pr-10px ']">
<ElButton
@
click=
"emit('back')"
>
<Icon
icon=
"ep:arrow-left"
class=
"mr-5px
"
/>
<Icon
class=
"mr-5px"
icon=
"ep:arrow-left
"
/>
{{
t
(
'common.back'
)
}}
</ElButton>
</div>
...
...
@@ -47,7 +47,9 @@ onMounted(() => {
</Sticky>
<div
style=
"padding: var(--app-content-padding)"
>
<ElCard
:class=
"[`$
{prefixCls}-body`, 'mb-20px']" shadow="never">
<div>
<slot></slot>
</div>
<div>
<slot></slot>
</div>
</ElCard>
</div>
</div>
...
...
src/components/ContentWrap/src/ContentWrap.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ContentWrap"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -21,7 +21,7 @@ defineProps({
<template
#
content
>
<div
class=
"max-w-200px"
>
{{
message
}}
</div>
</
template
>
<Icon
class=
"ml-5px"
icon=
"ep:question-filled"
:size=
"14
"
/>
<Icon
:size=
"14"
class=
"ml-5px"
icon=
"ep:question-filled
"
/>
</ElTooltip>
</div>
</template>
...
...
src/components/CountTo/src/CountTo.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"CountTo"
setup
>
import
{
PropType
}
from
'vue'
import
{
isNumber
}
from
'@/utils/is'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
src/components/Crontab/src/Crontab.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Crontab"
setup
>
import
{
ElMessage
}
from
'element-plus'
import
{
PropType
}
from
'vue'
interface
shortcutsType
{
text
:
string
value
:
string
}
const
props
=
defineProps
({
modelValue
:
{
type
:
String
,
...
...
@@ -501,7 +503,7 @@ const submit = () => {
}
</
script
>
<
template
>
<el-input
v-model=
"defaultValue"
v-bind=
"$attrs"
class=
"input-with-select
"
>
<el-input
v-model=
"defaultValue"
class=
"input-with-select"
v-bind=
"$attrs
"
>
<template
#
append
>
<el-select
v-model=
"select"
placeholder=
"生成器"
style=
"width: 115px"
>
<el-option
label=
"每分钟"
value=
"0 * * * * ?"
/>
...
...
@@ -522,11 +524,11 @@ const submit = () => {
</el-input>
<el-dialog
title=
"cron规则生成器"
v-model=
"dialogVisible"
:width=
"580"
destroy-on-close
append-to-body
destroy-on-close
title=
"cron规则生成器"
>
<div
class=
"sc-cron"
>
<el-tabs>
...
...
@@ -546,38 +548,38 @@ const submit = () => {
<el-radio-button
label=
"3"
>
指定
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"范围"
v-if=
"cronValue.second.type == '1'
"
>
<el-form-item
v-if=
"cronValue.second.type == '1'"
label=
"范围
"
>
<el-input-number
v-model=
"cronValue.second.range.start"
:min=
"0"
:max=
"59"
:min=
"0"
controls-position=
"right"
/>
<span
style=
"padding: 0 15px"
>
-
</span>
<el-input-number
v-model=
"cronValue.second.range.end"
:min=
"0"
:max=
"59"
:min=
"0"
controls-position=
"right"
/>
</el-form-item>
<el-form-item
label=
"间隔"
v-if=
"cronValue.second.type == '2'
"
>
<el-form-item
v-if=
"cronValue.second.type == '2'"
label=
"间隔
"
>
<el-input-number
v-model=
"cronValue.second.loop.start"
:min=
"0"
:max=
"59"
:min=
"0"
controls-position=
"right"
/>
秒开始,每
<el-input-number
v-model=
"cronValue.second.loop.end"
:min=
"0"
:max=
"59"
:min=
"0"
controls-position=
"right"
/>
秒执行一次
</el-form-item>
<el-form-item
label=
"指定"
v-if=
"cronValue.second.type == '3'
"
>
<el-form-item
v-if=
"cronValue.second.type == '3'"
label=
"指定
"
>
<el-select
v-model=
"cronValue.second.appoint"
multiple
style=
"width: 100%"
>
<el-option
v-for=
"(item, index) in data.second"
...
...
@@ -605,38 +607,38 @@ const submit = () => {
<el-radio-button
label=
"3"
>
指定
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"范围"
v-if=
"cronValue.minute.type == '1'
"
>
<el-form-item
v-if=
"cronValue.minute.type == '1'"
label=
"范围
"
>
<el-input-number
v-model=
"cronValue.minute.range.start"
:min=
"0"
:max=
"59"
:min=
"0"
controls-position=
"right"
/>
<span
style=
"padding: 0 15px"
>
-
</span>
<el-input-number
v-model=
"cronValue.minute.range.end"
:min=
"0"
:max=
"59"
:min=
"0"
controls-position=
"right"
/>
</el-form-item>
<el-form-item
label=
"间隔"
v-if=
"cronValue.minute.type == '2'
"
>
<el-form-item
v-if=
"cronValue.minute.type == '2'"
label=
"间隔
"
>
<el-input-number
v-model=
"cronValue.minute.loop.start"
:min=
"0"
:max=
"59"
:min=
"0"
controls-position=
"right"
/>
分钟开始,每
<el-input-number
v-model=
"cronValue.minute.loop.end"
:min=
"0"
:max=
"59"
:min=
"0"
controls-position=
"right"
/>
分钟执行一次
</el-form-item>
<el-form-item
label=
"指定"
v-if=
"cronValue.minute.type == '3'
"
>
<el-form-item
v-if=
"cronValue.minute.type == '3'"
label=
"指定
"
>
<el-select
v-model=
"cronValue.minute.appoint"
multiple
style=
"width: 100%"
>
<el-option
v-for=
"(item, index) in data.minute"
...
...
@@ -664,38 +666,38 @@ const submit = () => {
<el-radio-button
label=
"3"
>
指定
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"范围"
v-if=
"cronValue.hour.type == '1'
"
>
<el-form-item
v-if=
"cronValue.hour.type == '1'"
label=
"范围
"
>
<el-input-number
v-model=
"cronValue.hour.range.start"
:min=
"0"
:max=
"23"
:min=
"0"
controls-position=
"right"
/>
<span
style=
"padding: 0 15px"
>
-
</span>
<el-input-number
v-model=
"cronValue.hour.range.end"
:min=
"0"
:max=
"23"
:min=
"0"
controls-position=
"right"
/>
</el-form-item>
<el-form-item
label=
"间隔"
v-if=
"cronValue.hour.type == '2'
"
>
<el-form-item
v-if=
"cronValue.hour.type == '2'"
label=
"间隔
"
>
<el-input-number
v-model=
"cronValue.hour.loop.start"
:min=
"0"
:max=
"23"
:min=
"0"
controls-position=
"right"
/>
小时开始,每
<el-input-number
v-model=
"cronValue.hour.loop.end"
:min=
"0"
:max=
"23"
:min=
"0"
controls-position=
"right"
/>
小时执行一次
</el-form-item>
<el-form-item
label=
"指定"
v-if=
"cronValue.hour.type == '3'
"
>
<el-form-item
v-if=
"cronValue.hour.type == '3'"
label=
"指定
"
>
<el-select
v-model=
"cronValue.hour.appoint"
multiple
style=
"width: 100%"
>
<el-option
v-for=
"(item, index) in data.hour"
...
...
@@ -725,38 +727,38 @@ const submit = () => {
<el-radio-button
label=
"5"
>
不指定
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"范围"
v-if=
"cronValue.day.type == '1'
"
>
<el-form-item
v-if=
"cronValue.day.type == '1'"
label=
"范围
"
>
<el-input-number
v-model=
"cronValue.day.range.start"
:min=
"1"
:max=
"31"
:min=
"1"
controls-position=
"right"
/>
<span
style=
"padding: 0 15px"
>
-
</span>
<el-input-number
v-model=
"cronValue.day.range.end"
:min=
"1"
:max=
"31"
:min=
"1"
controls-position=
"right"
/>
</el-form-item>
<el-form-item
label=
"间隔"
v-if=
"cronValue.day.type == '2'
"
>
<el-form-item
v-if=
"cronValue.day.type == '2'"
label=
"间隔
"
>
<el-input-number
v-model=
"cronValue.day.loop.start"
:min=
"1"
:max=
"31"
:min=
"1"
controls-position=
"right"
/>
号开始,每
<el-input-number
v-model=
"cronValue.day.loop.end"
:min=
"1"
:max=
"31"
:min=
"1"
controls-position=
"right"
/>
天执行一次
</el-form-item>
<el-form-item
label=
"指定"
v-if=
"cronValue.day.type == '3'
"
>
<el-form-item
v-if=
"cronValue.day.type == '3'"
label=
"指定
"
>
<el-select
v-model=
"cronValue.day.appoint"
multiple
style=
"width: 100%"
>
<el-option
v-for=
"(item, index) in data.day"
...
...
@@ -784,38 +786,38 @@ const submit = () => {
<el-radio-button
label=
"3"
>
指定
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"范围"
v-if=
"cronValue.month.type == '1'
"
>
<el-form-item
v-if=
"cronValue.month.type == '1'"
label=
"范围
"
>
<el-input-number
v-model=
"cronValue.month.range.start"
:min=
"1"
:max=
"12"
:min=
"1"
controls-position=
"right"
/>
<span
style=
"padding: 0 15px"
>
-
</span>
<el-input-number
v-model=
"cronValue.month.range.end"
:min=
"1"
:max=
"12"
:min=
"1"
controls-position=
"right"
/>
</el-form-item>
<el-form-item
label=
"间隔"
v-if=
"cronValue.month.type == '2'
"
>
<el-form-item
v-if=
"cronValue.month.type == '2'"
label=
"间隔
"
>
<el-input-number
v-model=
"cronValue.month.loop.start"
:min=
"1"
:max=
"12"
:min=
"1"
controls-position=
"right"
/>
月开始,每
<el-input-number
v-model=
"cronValue.month.loop.end"
:min=
"1"
:max=
"12"
:min=
"1"
controls-position=
"right"
/>
月执行一次
</el-form-item>
<el-form-item
label=
"指定"
v-if=
"cronValue.month.type == '3'
"
>
<el-form-item
v-if=
"cronValue.month.type == '3'"
label=
"指定
"
>
<el-select
v-model=
"cronValue.month.appoint"
multiple
style=
"width: 100%"
>
<el-option
v-for=
"(item, index) in data.month"
...
...
@@ -846,7 +848,7 @@ const submit = () => {
<el-radio-button
label=
"5"
>
不指定
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"范围"
v-if=
"cronValue.week.type == '1'
"
>
<el-form-item
v-if=
"cronValue.week.type == '1'"
label=
"范围
"
>
<el-select
v-model=
"cronValue.week.range.start"
>
<el-option
v-for=
"(item, index) in data.week"
...
...
@@ -865,12 +867,12 @@ const submit = () => {
/>
</el-select>
</el-form-item>
<el-form-item
label=
"间隔"
v-if=
"cronValue.week.type == '2'
"
>
<el-form-item
v-if=
"cronValue.week.type == '2'"
label=
"间隔
"
>
第
<el-input-number
v-model=
"cronValue.week.loop.start"
:min=
"1"
:max=
"4"
:min=
"1"
controls-position=
"right"
/>
周的星期
...
...
@@ -884,7 +886,7 @@ const submit = () => {
</el-select>
执行一次
</el-form-item>
<el-form-item
label=
"指定"
v-if=
"cronValue.week.type == '3'
"
>
<el-form-item
v-if=
"cronValue.week.type == '3'"
label=
"指定
"
>
<el-select
v-model=
"cronValue.week.appoint"
multiple
style=
"width: 100%"
>
<el-option
v-for=
"(item, index) in data.week"
...
...
@@ -894,7 +896,7 @@ const submit = () => {
/>
</el-select>
</el-form-item>
<el-form-item
label=
"最后一周"
v-if=
"cronValue.week.type == '4'
"
>
<el-form-item
v-if=
"cronValue.week.type == '4'"
label=
"最后一周
"
>
<el-select
v-model=
"cronValue.week.last"
>
<el-option
v-for=
"(item, index) in data.week"
...
...
@@ -924,12 +926,12 @@ const submit = () => {
<el-radio-button
label=
"3"
>
指定
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"范围"
v-if=
"cronValue.year.type == '1'
"
>
<el-form-item
v-if=
"cronValue.year.type == '1'"
label=
"范围
"
>
<el-input-number
v-model=
"cronValue.year.range.start"
controls-position=
"right"
/>
<span
style=
"padding: 0 15px"
>
-
</span>
<el-input-number
v-model=
"cronValue.year.range.end"
controls-position=
"right"
/>
</el-form-item>
<el-form-item
label=
"间隔"
v-if=
"cronValue.year.type == '2'
"
>
<el-form-item
v-if=
"cronValue.year.type == '2'"
label=
"间隔
"
>
<el-input-number
v-model=
"cronValue.year.loop.start"
controls-position=
"right"
/>
年开始,每
<el-input-number
...
...
@@ -939,7 +941,7 @@ const submit = () => {
/>
年执行一次
</el-form-item>
<el-form-item
label=
"指定"
v-if=
"cronValue.year.type == '3'
"
>
<el-form-item
v-if=
"cronValue.year.type == '3'"
label=
"指定
"
>
<el-select
v-model=
"cronValue.year.appoint"
multiple
style=
"width: 100%"
>
<el-option
v-for=
"(item, index) in data.year"
...
...
@@ -968,16 +970,19 @@ const submit = () => {
padding
:
0
7px
;
vertical-align
:
bottom
;
}
.sc-cron-num
{
text-align
:
center
;
margin-bottom
:
15px
;
width
:
100%
;
}
.sc-cron-num
h2
{
font-size
:
12px
;
margin-bottom
:
15px
;
font-weight
:
normal
;
}
.sc-cron-num
h4
{
display
:
block
;
height
:
32px
;
...
...
@@ -988,13 +993,16 @@ const submit = () => {
background
:
var
(
--el-color-primary-light-9
);
border-radius
:
4px
;
}
.sc-cron
:deep
(
.el-tabs__item.is-active
)
.sc-cron-num
h4
{
background
:
var
(
--el-color-primary
);
color
:
#fff
;
}
[
data-theme
=
'dark'
]
.sc-cron-num
h4
{
background
:
var
(
--el-color-white
);
}
.input-with-select
.el-input-group__prepend
{
background-color
:
var
(
--el-fill-color-blank
);
}
...
...
src/components/Cropper/src/CopperModal.vue
View file @
b9349157
...
...
@@ -2,26 +2,26 @@
<div>
<Dialog
v-model=
"dialogVisible"
:canFullscreen=
"false"
:title=
"t('cropper.modalTitle')"
width=
"800px"
maxHeight=
"380px"
:canFullscreen=
"false
"
width=
"800px
"
>
<div
:class=
"prefixCls"
>
<div
:class=
"`$
{prefixCls}-left`">
<div
:class=
"`$
{prefixCls}-cropper`">
<CropperImage
v-if=
"src"
:circled=
"circled"
:src=
"src"
height=
"300px"
:circled=
"circled"
@
cropend=
"handleCropend"
@
ready=
"handleReady"
/>
</div>
<div
:class=
"`$
{prefixCls}-toolbar`">
<el-upload
:
fileList=
"[]"
accept=
"image/*"
:beforeUpload=
"handleBeforeUpload
"
>
<el-upload
:
beforeUpload=
"handleBeforeUpload"
:fileList=
"[]"
accept=
"image/*
"
>
<el-tooltip
:content=
"t('cropper.selectImage')"
placement=
"bottom"
>
<XButton
preIcon=
"ant-design:upload-outlined"
type=
"primary"
/>
</el-tooltip>
...
...
@@ -29,64 +29,64 @@
<el-space>
<el-tooltip
:content=
"t('cropper.btn_reset')"
placement=
"bottom"
>
<XButton
type=
"primary
"
:disabled=
"!src
"
preIcon=
"ant-design:reload-outlined"
size=
"small"
:disabled=
"!src
"
type=
"primary
"
@
click=
"handlerToolbar('reset')"
/>
</el-tooltip>
<el-tooltip
:content=
"t('cropper.btn_rotate_left')"
placement=
"bottom"
>
<XButton
type=
"primary
"
:disabled=
"!src
"
preIcon=
"ant-design:rotate-left-outlined"
size=
"small"
:disabled=
"!src
"
type=
"primary
"
@
click=
"handlerToolbar('rotate', -45)"
/>
</el-tooltip>
<el-tooltip
:content=
"t('cropper.btn_rotate_right')"
placement=
"bottom"
>
<XButton
type=
"primary
"
:disabled=
"!src
"
preIcon=
"ant-design:rotate-right-outlined"
size=
"small"
:disabled=
"!src
"
type=
"primary
"
@
click=
"handlerToolbar('rotate', 45)"
/>
</el-tooltip>
<el-tooltip
:content=
"t('cropper.btn_scale_x')"
placement=
"bottom"
>
<XButton
type=
"primary
"
:disabled=
"!src
"
preIcon=
"vaadin:arrows-long-h"
size=
"small"
:disabled=
"!src
"
type=
"primary
"
@
click=
"handlerToolbar('scaleX')"
/>
</el-tooltip>
<el-tooltip
:content=
"t('cropper.btn_scale_y')"
placement=
"bottom"
>
<XButton
type=
"primary
"
:disabled=
"!src
"
preIcon=
"vaadin:arrows-long-v"
size=
"small"
:disabled=
"!src
"
type=
"primary
"
@
click=
"handlerToolbar('scaleY')"
/>
</el-tooltip>
<el-tooltip
:content=
"t('cropper.btn_zoom_in')"
placement=
"bottom"
>
<XButton
type=
"primary
"
:disabled=
"!src
"
preIcon=
"ant-design:zoom-in-outlined"
size=
"small"
:disabled=
"!src
"
type=
"primary
"
@
click=
"handlerToolbar('zoom', 0.1)"
/>
</el-tooltip>
<el-tooltip
:content=
"t('cropper.btn_zoom_out')"
placement=
"bottom"
>
<XButton
type=
"primary
"
:disabled=
"!src
"
preIcon=
"ant-design:zoom-out-outlined"
size=
"small"
:disabled=
"!src
"
type=
"primary
"
@
click=
"handlerToolbar('zoom', -0.1)"
/>
</el-tooltip>
...
...
@@ -95,14 +95,14 @@
</div>
<div
:class=
"`$
{prefixCls}-right`">
<div
:class=
"`$
{prefixCls}-preview`">
<img
:src=
"previewSource"
v-if=
"previewSource"
:alt=
"t('cropper.preview')
"
/>
<img
v-if=
"previewSource"
:alt=
"t('cropper.preview')"
:src=
"previewSource
"
/>
</div>
<template
v-if=
"previewSource"
>
<div
:class=
"`$
{prefixCls}-group`">
<el-avatar
:src=
"previewSource"
size=
"large"
/>
<el-avatar
:s
rc=
"previewSource"
:size=
"48
"
/>
<el-avatar
:s
rc=
"previewSource"
:size=
"64
"
/>
<el-avatar
:s
rc=
"previewSource"
:size=
"80
"
/>
<el-avatar
:s
ize=
"48"
:src=
"previewSource
"
/>
<el-avatar
:s
ize=
"64"
:src=
"previewSource
"
/>
<el-avatar
:s
ize=
"80"
:src=
"previewSource
"
/>
</div>
</
template
>
</div>
...
...
@@ -113,7 +113,7 @@
</Dialog>
</div>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"CopperModal"
setup
>
import
{
useDesign
}
from
'@/hooks/web/useDesign'
import
{
dataURLtoBlob
}
from
'@/utils/filt'
import
{
useI18n
}
from
'vue-i18n'
...
...
@@ -173,12 +173,15 @@ async function handleOk() {
const
blob
=
dataURLtoBlob
(
previewSource
.
value
)
emit
(
'uploadSuccess'
,
{
source
:
previewSource
.
value
,
data
:
blob
,
filename
:
filename
})
}
function
openModal
()
{
dialogVisible
.
value
=
true
}
function
closeModal
()
{
dialogVisible
.
value
=
false
}
defineExpose
({
openModal
,
closeModal
})
</
script
>
<
style
lang=
"scss"
>
...
...
src/components/Cropper/src/Cropper.vue
View file @
b9349157
...
...
@@ -3,14 +3,14 @@
<img
v-show=
"isReady"
ref=
"imgElRef"
:src=
"src"
:alt=
"alt"
:crossorigin=
"crossorigin"
:src=
"src"
:style=
"getImageStyle"
/>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Cropper"
setup
>
import
{
CSSProperties
,
PropType
}
from
'vue'
import
Cropper
from
'cropperjs'
import
'cropperjs/dist/cropper.css'
...
...
src/components/Cropper/src/CropperAvatar.vue
View file @
b9349157
<
template
>
<div
class=
"user-info-head"
@
click=
"open()"
>
<img
:src=
"sourceValue"
v-if=
"sourceValue"
class=
"img-circle img-lg"
alt=
"avatar
"
/>
<el-button
:class=
"`$
{prefixCls}-upload-btn`" @click="open()" v-if="showBtn
">
<img
v-if=
"sourceValue"
:src=
"sourceValue"
alt=
"avatar"
class=
"img-circle img-lg
"
/>
<el-button
v-if=
"showBtn"
:class=
"`$
{prefixCls}-upload-btn`" @click="open()
">
{{
btnText
?
btnText
:
t
(
'cropper.selectImage'
)
}}
</el-button>
<CopperModal
ref=
"cropperModelRef"
@
upload-success=
"handleUploadSuccess"
:srcValue=
"sourceValue"
@
upload-success=
"handleUploadSuccess"
/>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"CropperAvatar"
setup
>
import
{
useDesign
}
from
'@/hooks/web/useDesign'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
@@ -54,9 +54,11 @@ function handleUploadSuccess({ source, data, filename }) {
function
open
()
{
cropperModelRef
.
value
.
openModal
()
}
function
close
()
{
cropperModelRef
.
value
.
closeModal
()
}
defineExpose
({
open
,
close
...
...
@@ -104,17 +106,21 @@ $prefix-cls: #{$namespace}--cropper-avatar;
margin
:
10px
auto
;
}
}
.user-info-head
{
position
:
relative
;
display
:
inline-block
;
}
.img-circle
{
border-radius
:
50%
;
}
.img-lg
{
width
:
120px
;
height
:
120px
;
}
.user-info-head
:hover:after
{
content
:
'+'
;
position
:
absolute
;
...
...
src/components/Descriptions/src/Descriptions.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Descriptions"
setup
>
import
{
PropType
}
from
'vue'
import
dayjs
from
'dayjs'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -84,7 +84,7 @@ const toggleClick = () => {
<div
class=
"flex items-center"
>
{{
title
}}
<ElTooltip
v-if=
"message"
:content=
"message"
placement=
"right"
>
<Icon
icon=
"ep:warning"
class=
"ml-5px
"
/>
<Icon
class=
"ml-5px"
icon=
"ep:warning
"
/>
</ElTooltip>
</div>
</div>
...
...
@@ -95,8 +95,8 @@ const toggleClick = () => {
<div
v-show=
"show"
:class=
"[`$
{prefixCls}-content`, 'p-10px']">
<ElDescriptions
:column=
"props.columns"
border
:direction=
"mobile ? 'vertical' : 'horizontal'"
border
v-bind=
"getBindValue"
>
<template
v-if=
"slots['extra']"
#
extra
>
...
...
@@ -114,8 +114,8 @@ const toggleClick = () => {
:row="{
label: item.label
}"
>
{{
item
.
label
}}
</slot
>
>
{{
item
.
label
}}
</slot
>
</
template
>
<
template
#
default
>
...
...
src/components/Dialog/src/Dialog.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Dialog"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
isNumber
}
from
'@/utils/is'
...
...
@@ -59,13 +59,13 @@ const dialogStyle = computed(() => {
<
template
>
<ElDialog
v-bind=
"getBindVal
ue"
:close-on-click-modal=
"tr
ue"
:fullscreen=
"isFullscreen"
:width=
"width"
destroy-on-close
lock-scroll
draggable
:width=
"width"
:close-on-click-modal=
"tr
ue"
lock-scroll
v-bind=
"getBindVal
ue"
>
<template
#
header
>
<div
class=
"flex justify-between"
>
...
...
@@ -74,8 +74,8 @@ const dialogStyle = computed(() => {
</slot>
<Icon
v-if=
"fullscreen"
class=
"mr-22px cursor-pointer is-hover mt-2px z-10"
:icon=
"isFullscreen ? 'zmdi:fullscreen-exit' : 'zmdi:fullscreen'"
class=
"mr-22px cursor-pointer is-hover mt-2px z-10"
color=
"var(--el-color-info)"
@
click=
"toggleFull"
/>
...
...
@@ -83,7 +83,7 @@ const dialogStyle = computed(() => {
</
template
>
<!-- 情况一:如果 scroll 为 true,说明开启滚动条 -->
<ElScrollbar
:style=
"dialogStyle"
v-if=
"scroll
"
>
<ElScrollbar
v-if=
"scroll"
:style=
"dialogStyle
"
>
<slot></slot>
</ElScrollbar>
<!-- 情况二:如果 scroll 为 false,说明关闭滚动条滚动条 -->
...
...
src/components/Echart/src/Echart.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"EChart"
setup
>
import
type
{
EChartsOption
}
from
'echarts'
import
echarts
from
'@/plugins/echarts'
import
{
debounce
}
from
'lodash-es'
...
...
src/components/Editor/src/Editor.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Editor"
setup
>
import
{
PropType
}
from
'vue'
import
{
Editor
,
Toolbar
}
from
'@wangeditor/editor-for-vue'
import
{
IDomEditor
,
IEditorConfig
,
i18nChangeLanguage
}
from
'@wangeditor/editor'
import
{
i18nChangeLanguage
,
IDomEditor
,
IEditorConfig
}
from
'@wangeditor/editor'
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
isNumber
}
from
'@/utils/is'
import
{
ElMessage
}
from
'element-plus'
...
...
@@ -188,8 +188,8 @@ defineExpose({
<!-- 编辑器 -->
<Editor
v-model=
"valueHtml"
:editorId=
"editorId"
:defaultConfig=
"editorConfig"
:editorId=
"editorId"
:style=
"editorStyle"
@
on-change=
"handleChange"
@
on-created=
"handleCreated"
...
...
src/components/Error/src/Error.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Error"
setup
>
import
pageError
from
'@/assets/svgs/404.svg'
import
networkError
from
'@/assets/svgs/500.svg'
import
noPermission
from
'@/assets/svgs/403.svg'
...
...
@@ -46,7 +46,7 @@ const btnClick = () => {
<
template
>
<div
class=
"flex justify-center"
>
<div
class=
"text-center"
>
<img
width=
"350"
:src=
"errorMap[type].url"
alt=
"
"
/>
<img
:src=
"errorMap[type].url"
alt=
""
width=
"350
"
/>
<div
class=
"text-14px text-[var(--el-color-info)]"
>
{{
errorMap
[
type
].
message
}}
</div>
<div
class=
"mt-20px"
>
<ElButton
type=
"primary"
@
click=
"btnClick"
>
{{
errorMap
[
type
].
buttonText
}}
</ElButton>
...
...
src/components/IFrame/src/IFrame.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"IFrame"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
const
props
=
defineProps
({
...
...
@@ -20,11 +20,11 @@ onMounted(() => {
<
template
>
<div
v-loading=
"loading"
:style=
"'height:' + height"
>
<iframe
ref=
"frameRef"
:src=
"props.src"
style=
"width: 100%; height: 100%"
frameborder=
"no"
scrolling=
"auto"
ref=
"frameRef
"
style=
"width: 100%; height: 100%
"
></iframe>
</div>
</
template
>
src/components/Icon/src/Icon.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Icon"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
Iconify
from
'@purge-icons/generated'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -72,7 +72,7 @@ watch(
<
template
>
<ElIcon
:class=
"prefixCls"
:color=
"color"
:size=
"size"
>
<svg
v-if=
"isLocal"
aria-hidden=
"true"
:class=
"getSvgClass
"
>
<svg
v-if=
"isLocal"
:class=
"getSvgClass"
aria-hidden=
"true
"
>
<use
:xlink:href=
"symbolId"
/>
</svg>
...
...
src/components/Icon/src/IconSelect.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"IconSelect"
setup
>
import
{
CSSProperties
}
from
'vue'
import
{
cloneDeep
}
from
'lodash-es'
import
{
IconJson
}
from
'@/components/Icon/src/data'
...
...
@@ -116,13 +116,13 @@ watch(
<ElInput
v-model=
"inputValue"
@
click=
"visible = !visible"
>
<template
#
append
>
<ElPopover
:width=
"350"
trigger=
"click"
popper-class=
"pure-popper"
:popper-options=
"
{
placement: 'auto'
}"
:visible="visible"
:width="350"
popper-class="pure-popper"
trigger="click"
>
<template
#
reference
>
<div
...
...
@@ -133,7 +133,7 @@ watch(
</div>
</
template
>
<ElInput
class=
"p-2"
v-model=
"filterValue"
placeholder=
"搜索图标"
clearable
/>
<ElInput
v-model=
"filterValue"
class=
"p-2"
clearable
placeholder=
"搜索图标"
/>
<ElDivider
border-style=
"dashed"
/>
<ElTabs
v-model=
"currentActiveType"
@
tab-click=
"handleClick"
>
...
...
@@ -143,15 +143,15 @@ watch(
:label=
"pane.label"
:name=
"pane.name"
>
<ElDivider
class=
"tab-divider"
border-style=
"dashed
"
/>
<ElDivider
border-style=
"dashed"
class=
"tab-divider
"
/>
<ElScrollbar
height=
"220px"
>
<ul
class=
"flex flex-wrap px-2 ml-2"
>
<li
v-for=
"(item, key) in pageList"
:key=
"key"
:style=
"iconItemStyle(item)"
:title=
"item"
class=
"icon-item p-2 w-1/10 cursor-pointer mr-2 mt-1 flex justify-center items-center border border-solid"
:style=
"iconItemStyle(item)"
@
click=
"onChangeIcon(item)"
>
<Icon
:icon=
"currentActiveType + item"
/>
...
...
@@ -163,13 +163,13 @@ watch(
<ElDivider
border-style=
"dashed"
/>
<ElPagination
small
:total=
"iconCount"
:page-size=
"pageSize"
:current-page=
"currentPage"
:page-size=
"pageSize"
:total=
"iconCount"
background
layout=
"prev, pager, next"
class=
"flex items-center justify-center h-10"
layout=
"prev, pager, next"
small
@
current-change=
"onCurrentChange"
/>
</ElPopover>
...
...
src/components/ImageViewer/src/ImageViewer.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ImageViewer"
setup
>
import
{
PropType
}
from
'vue'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
src/components/Infotip/src/Infotip.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfoTip"
setup
>
import
{
PropType
}
from
'vue'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
@@ -34,14 +34,14 @@ const keyClick = (key: string) => {
]"
>
<div
v-if=
"title"
:class=
"[`$
{prefixCls}__header`, 'flex items-center']">
<Icon
icon=
"ep:warning-filled"
:size=
"22"
color=
"var(--el-color-primary)
"
/>
<Icon
:size=
"22"
color=
"var(--el-color-primary)"
icon=
"ep:warning-filled
"
/>
<span
:class=
"[`$
{prefixCls}__title`, 'pl-5px text-16px font-bold']">
{{
title
}}
</span>
</div>
<div
:class=
"`$
{prefixCls}__content`">
<p
v-for=
"(item, $index) in schema"
:key=
"$index"
class=
"text-14px mt-15px"
>
<Highlight
:keys=
"typeof item === 'string' ? [] : item.keys"
:color=
"highlightColor"
:keys=
"typeof item === 'string' ? [] : item.keys"
@
click=
"keyClick"
>
{{
showIndex
?
`${$index + 1
}
、`
:
''
}}
{{
typeof
item
===
'string'
?
item
:
item
.
label
}}
...
...
src/components/InputPassword/src/InputPassword.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InputPassword"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
useConfigGlobal
}
from
'@/hooks/web/useConfigGlobal'
import
{
zxcvbn
}
from
'@zxcvbn-ts/core'
import
type
{
ZxcvbnResult
}
from
'@zxcvbn-ts/core'
import
{
zxcvbn
}
from
'@zxcvbn-ts/core'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
const
{
getPrefixCls
}
=
useDesign
()
...
...
@@ -57,9 +57,9 @@ const getIconName = computed(() => (unref(textType) === 'password' ? 'ep:hide' :
<
template
>
<div
:class=
"[prefixCls, `$
{prefixCls}--${configGlobal?.size}`]">
<ElInput
v-
bind=
"$attrs"
v-model=
"valueRef"
:type=
"textType
"
>
<ElInput
v-
model=
"valueRef"
:type=
"textType"
v-bind=
"$attrs
"
>
<template
#
suffix
>
<Icon
class=
"el-input__icon cursor-pointer"
:icon=
"getIconName
"
@
click=
"changeTextType"
/>
<Icon
:icon=
"getIconName"
class=
"el-input__icon cursor-pointer
"
@
click=
"changeTextType"
/>
</
template
>
</ElInput>
<div
...
...
src/components/Pagination/index.vue
View file @
b9349157
...
...
@@ -2,19 +2,19 @@
<
template
>
<el-pagination
v-show=
"total > 0"
class=
"float-right mt-15px mb-15px"
:background=
"true"
layout=
"total, sizes, prev, pager, next, jumper"
:page-sizes=
"[10, 20, 30, 50, 100]"
v-model:current-page=
"currentPage"
v-model:page-size=
"pageSize"
:background=
"true"
:page-sizes=
"[10, 20, 30, 50, 100]"
:pager-count=
"pagerCount"
:total=
"total"
class=
"float-right mt-15px mb-15px"
layout=
"total, sizes, prev, pager, next, jumper"
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
/>
</
template
>
<
script
setup
>
<
script
name=
"Pagination"
setup
>
import
{
computed
}
from
'vue'
const
props
=
defineProps
({
...
...
src/components/Qrcode/src/Qrcode.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
import
{
PropType
,
nextTick
,
ref
,
watch
,
computed
,
unref
}
from
'vue'
import
QRCode
from
'qrcode'
import
{
QRCodeRenderersOptions
}
from
'qrcode'
<
script
lang=
"ts"
name=
"Qrcode"
setup
>
import
{
computed
,
nextTick
,
PropType
,
ref
,
unref
,
watch
}
from
'vue'
import
QRCode
,
{
QRCodeRenderersOptions
}
from
'qrcode'
import
{
cloneDeep
}
from
'lodash-es'
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -230,7 +229,7 @@ const disabledClick = () => {
@click="disabledClick"
>
<div
class=
"absolute top-[50%] left-[50%] font-bold"
>
<Icon
icon=
"ep:refresh-right"
:size=
"30"
color=
"var(--el-color-primary)
"
/>
<Icon
:size=
"30"
color=
"var(--el-color-primary)"
icon=
"ep:refresh-right
"
/>
<div>
{{
disabledText
}}
</div>
</div>
</div>
...
...
src/components/Search/src/Search.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Search"
setup
>
import
{
PropType
}
from
'vue'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
@@ -100,25 +100,25 @@ const setVisible = () => {
<
template
>
<!-- update by 芋艿:class="-mb-15px" 用于降低和 ContentWrap 组件的底部距离,避免空隙过大 -->
<Form
:is-custom=
"false"
:label-width=
"labelWidth"
hide-required-asterisk
:inline=
"inline"
:is-col=
"isCol"
:is-custom=
"false"
:label-width=
"labelWidth"
:schema=
"newSchema"
@
register=
"register"
class=
"-mb-15px"
hide-required-asterisk
@
register=
"register"
>
<template
#
action
>
<div
v-if=
"layout === 'inline'"
>
<!-- update by 芋艿:去除搜索的 type="primary",颜色变淡一点 -->
<ElButton
v-if=
"showSearch"
@
click=
"search"
>
<Icon
icon=
"ep:search"
class=
"mr-5px
"
/>
<Icon
class=
"mr-5px"
icon=
"ep:search
"
/>
{{
t
(
'common.query'
)
}}
</ElButton>
<!-- update by 芋艿:将 icon="ep:refresh-right" 修改成 icon="ep:refresh",和 ruoyi-vue 搜索保持一致 -->
<ElButton
v-if=
"showReset"
@
click=
"reset"
>
<Icon
icon=
"ep:refresh"
class=
"mr-5px
"
/>
<Icon
class=
"mr-5px"
icon=
"ep:refresh
"
/>
{{
t
(
'common.reset'
)
}}
</ElButton>
<ElButton
v-if=
"expand"
text
@
click=
"setVisible"
>
...
...
@@ -129,19 +129,19 @@ const setVisible = () => {
<slot
name=
"actionMore"
></slot>
</div>
</
template
>
<
template
#[
name
]
v-for=
"name in Object.keys($slots)"
:key=
"name"
><slot
:name=
"name"
></slot
>
</
template
>
<
template
v-for=
"name in Object.keys($slots)"
:key=
"name"
#[
name
]
>
<slot
:name=
"name"
></slot>
</
template
>
</Form>
<
template
v-if=
"layout === 'bottom'"
>
<div
:style=
"bottonButtonStyle"
>
<ElButton
v-if=
"showSearch"
type=
"primary"
@
click=
"search"
>
<Icon
icon=
"ep:search"
class=
"mr-5px
"
/>
<Icon
class=
"mr-5px"
icon=
"ep:search
"
/>
{{
t
(
'common.query'
)
}}
</ElButton>
<ElButton
v-if=
"showReset"
@
click=
"reset"
>
<Icon
icon=
"ep:refresh-right"
class=
"mr-5px
"
/>
<Icon
class=
"mr-5px"
icon=
"ep:refresh-right
"
/>
{{
t
(
'common.reset'
)
}}
</ElButton>
<ElButton
v-if=
"expand"
text
@
click=
"setVisible"
>
...
...
src/components/Sticky/src/Sticky.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Sticky"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
isClient
,
useEventListener
,
useWindowSize
}
from
'@vueuse/core'
import
type
{
CSSProperties
}
from
'vue'
const
props
=
defineProps
({
// 距离顶部或者底部的距离(单位px)
offset
:
propTypes
.
number
.
def
(
0
),
...
...
@@ -120,7 +121,7 @@ const reset = () => {
}
</
script
>
<
template
>
<div
:style=
"
{ height: height, zIndex: zIndex }" ref="refSticky
">
<div
ref=
"refSticky"
:style=
"
{ height: height, zIndex: zIndex }
">
<div
:class=
"className"
:style=
"
{
...
...
src/components/Tooltip/src/Tooltip.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Tooltip"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
defineProps
({
titel
:
propTypes
.
string
.
def
(
''
),
message
:
propTypes
.
string
.
def
(
''
),
...
...
src/components/Verifition/src/Verify.vue
View file @
b9349157
<
template
>
<div
:class=
"mode == 'pop' ? 'mask' : ''"
v-show=
"showBox
"
>
<div
v-show=
"showBox"
:class=
"mode == 'pop' ? 'mask' : ''
"
>
<div
:class=
"mode == 'pop' ? 'verifybox' : ''"
:style=
"
{ 'max-width': parseInt(imgSize.width) + 20 + 'px' }"
>
<div
class=
"verifybox-top"
v-if=
"mode == 'pop'
"
>
<div
v-if=
"mode == 'pop'"
class=
"verifybox-top
"
>
{{
t
(
'captcha.verification'
)
}}
<span
class=
"verifybox-close"
@
click=
"closeBox"
>
<i
class=
"iconfont icon-close"
></i>
</span>
</div>
<div
class=
"verifybox-bottom"
:style=
"
{ padding: mode == 'pop' ? '10px' : '0' }
">
<div
:style=
"
{ padding: mode == 'pop' ? '10px' : '0' }" class="verifybox-bottom
">
<!-- 验证码容器 -->
<component
v-if=
"componentType"
:is=
"componentType"
v-if=
"componentType"
ref=
"instance"
:arith=
"arith"
:barSize=
"barSize"
:blockSize=
"blockSize"
:captchaType=
"captchaType"
:
type=
"verifyType
"
:
explain=
"explain
"
:figure=
"figure"
:
arith=
"arith
"
:
imgSize=
"imgSize
"
:mode=
"mode"
:type=
"verifyType"
:vSpace=
"vSpace"
:explain=
"explain"
:imgSize=
"imgSize"
:blockSize=
"blockSize"
:barSize=
"barSize"
ref=
"instance"
/>
</div>
</div>
</div>
</
template
>
<
script
type=
"text/babel"
>
<
script
name=
"Verify"
type=
"text/babel"
>
/**
* Verify 验证码组件
* @description 分发验证码使用
* */
import
{
Verify
Slide
,
VerifyPoints
}
from
'./Verify'
import
{
Verify
Points
,
VerifySlide
}
from
'./Verify'
import
{
computed
,
ref
,
toRefs
,
watchEffect
}
from
'vue'
export
default
{
...
...
@@ -155,6 +155,7 @@ export default {
border-radius
:
5px
;
transform
:
translate
(
-50%
,
-50%
);
}
.verifybox-top
{
padding
:
0
15px
;
height
:
40px
;
...
...
@@ -165,10 +166,12 @@ export default {
border-bottom
:
1px
solid
#e4e7eb
;
box-sizing
:
border-box
;
}
.verifybox-bottom
{
padding
:
10px
;
box-sizing
:
border-box
;
}
.verifybox-close
{
position
:
absolute
;
top
:
13px
;
...
...
@@ -178,6 +181,7 @@ export default {
text-align
:
center
;
cursor
:
pointer
;
}
.mask
{
position
:
fixed
;
top
:
0
;
...
...
@@ -189,6 +193,7 @@ export default {
/* display: none; */
transition
:
all
0.5s
;
}
.verify-tips
{
text-indent
:
10px
;
position
:
absolute
;
...
...
@@ -199,22 +204,27 @@ export default {
line-height
:
30px
;
color
:
#fff
;
}
.suc-bg
{
background-color
:
rgba
(
92
,
184
,
92
,
0.5
);
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startcolorstr
=
#7f5CB85
C
,
endcolorstr
=
#7f5CB85
C
);
}
.err-bg
{
background-color
:
rgba
(
217
,
83
,
79
,
0.5
);
filter
:
progid
:
DXImageTransform
.
Microsoft
.
gradient
(
startcolorstr
=
#7fD9534
F
,
endcolorstr
=
#7fD9534
F
);
}
.tips-enter
,
.tips-leave-to
{
bottom
:
-30px
;
}
.tips-enter-active
,
.tips-leave-active
{
transition
:
bottom
0.5s
;
}
/* ---------------------------- */
/*常规验证码*/
.verify-code
{
...
...
src/components/Verifition/src/Verify/VerifyPoints.vue
View file @
b9349157
...
...
@@ -2,20 +2,20 @@
<div
style=
"position: relative"
>
<div
class=
"verify-img-out"
>
<div
class=
"verify-img-panel"
:style=
"
{
width: setSize.imgWidth,
height: setSize.imgHeight,
'background-size': setSize.imgWidth + ' ' + setSize.imgHeight,
'margin-bottom': vSpace + 'px'
}"
class="verify-img-panel"
>
<div
class=
"verify-refresh"
style=
"z-index: 3"
@
click=
"refresh"
v-show=
"showR
efresh"
>
<div
v-show=
"showRefresh"
class=
"verify-refresh"
style=
"z-index: 3"
@
click=
"r
efresh"
>
<i
class=
"iconfont icon-refresh"
></i>
</div>
<img
:src=
"'data:image/png;base64,' + pointBackImgBase"
ref=
"canvas"
:src=
"'data:image/png;base64,' + pointBackImgBase"
alt=
""
style=
"width: 100%; height: 100%; display: block"
@
click=
"bindingClick ? canvasClick($event) : undefined"
...
...
@@ -24,7 +24,6 @@
<div
v-for=
"(tempPoint, index) in tempPoints"
:key=
"index"
class=
"point-area"
:style=
"
{
'background-color': '#1abd6c',
color: '#fff',
...
...
@@ -38,6 +37,7 @@
top: parseInt(tempPoint.y - 10) + 'px',
left: parseInt(tempPoint.x - 10) + 'px'
}"
class="point-area"
>
{{
index
+
1
}}
</div>
...
...
@@ -45,19 +45,19 @@
</div>
<!-- 'height': this.barSize.height, -->
<div
class=
"verify-bar-area"
:style=
"
{
width: setSize.imgWidth,
color: barAreaColor,
'border-color': barAreaBorderColor,
'line-height': barSize.height
}"
class="verify-bar-area"
>
<span
class=
"verify-msg"
>
{{
text
}}
</span>
</div>
</div>
</
template
>
<
script
type=
"text/babel"
setup
>
<
script
name=
"VerifyPoints"
setup
type=
"text/babel"
>
/**
* VerifyPoints
* @description 点选
...
...
@@ -65,7 +65,7 @@
import
{
resetSize
}
from
'./../utils/util'
import
{
aesEncrypt
}
from
'./../utils/ase'
import
{
getCode
,
reqCheck
}
from
'@/api/login'
import
{
onMounted
,
reactive
,
ref
,
nextTick
,
toRefs
,
getCurrentInstance
}
from
'vue'
import
{
getCurrentInstance
,
nextTick
,
onMounted
,
reactive
,
ref
,
toRefs
}
from
'vue'
const
props
=
defineProps
({
//弹出式pop,固定fixed
...
...
src/components/Verifition/src/Verify/VerifySlide.vue
View file @
b9349157
...
...
@@ -2,20 +2,20 @@
<div
style=
"position: relative"
>
<div
v-if=
"type === '2'"
class=
"verify-img-out"
:style=
"
{ height: parseInt(setSize.imgHeight) + vSpace + 'px' }"
class="verify-img-out"
>
<div
class=
"verify-img-panel"
:style=
"
{ width: setSize.imgWidth, height: setSize.imgHeight }
">
<div
:style=
"
{ width: setSize.imgWidth, height: setSize.imgHeight }" class="verify-img-panel
">
<img
:src=
"'data:image/png;base64,' + backImgBase"
alt=
""
style=
"width: 100%; height: 100%; display: block"
/>
<div
class=
"verify-refresh"
@
click=
"refresh"
v-show=
"showR
efresh"
>
<div
v-show=
"showRefresh"
class=
"verify-refresh"
@
click=
"r
efresh"
>
<i
class=
"iconfont icon-refresh"
></i>
</div>
<transition
name=
"tips"
>
<span
class=
"verify-tips"
v-if=
"tipWords"
:class=
"passFlag ? 'suc-bg' : 'err-bg'
"
>
<span
v-if=
"tipWords"
:class=
"passFlag ? 'suc-bg' : 'err-bg'"
class=
"verify-tips
"
>
{{
tipWords
}}
</span>
</transition>
...
...
@@ -23,24 +23,21 @@
</div>
<!-- 公共部分 -->
<div
class=
"verify-bar-area"
:style=
"
{ width: setSize.imgWidth, height: barSize.height, 'line-height': barSize.height }"
class="verify-bar-area"
>
<span
class=
"verify-msg"
v-text=
"text"
></span>
<div
class=
"verify-left-bar"
:style=
"
{
width: leftBarWidth !== undefined ? leftBarWidth : barSize.height,
height: barSize.height,
'border-color': leftBarBorderColor,
transaction: transitionWidth
}"
class="verify-left-bar"
>
<span
class=
"verify-msg"
v-text=
"finishText"
></span>
<div
class=
"verify-move-block"
@
touchstart=
"start"
@
mousedown=
"start"
:style=
"
{
width: barSize.height,
height: barSize.height,
...
...
@@ -48,17 +45,20 @@
left: moveBlockLeft,
transition: transitionLeft
}"
class="verify-move-block"
@mousedown="start"
@touchstart="start"
>
<i
:class=
"['verify-icon iconfont', iconClass]"
:style=
"
{ color: iconColor }">
</i>
<div
v-if=
"type === '2'"
class=
"verify-sub-block"
:style=
"
{
width: Math.floor((parseInt(setSize.imgWidth) * 47) / 310) + 'px',
height: setSize.imgHeight,
top: '-' + (parseInt(setSize.imgHeight) + vSpace) + 'px',
'background-size': setSize.imgWidth + ' ' + setSize.imgHeight
}"
class="verify-sub-block"
>
<img
:src=
"'data:image/png;base64,' + blockBackImgBase"
...
...
@@ -71,7 +71,7 @@
</div>
</div>
</
template
>
<
script
type=
"text/babel"
setup
>
<
script
name=
"VerifySlide"
setup
type=
"text/babel"
>
/**
* VerifySlide
* @description 滑块
...
...
src/components/XButton/src/XButton.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"XButton"
setup
>
import
{
PropType
}
from
'vue'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
@@ -30,9 +30,9 @@ const getBindValue = computed(() => {
<
template
>
<el-button
v-bind=
"getBindValue"
@
click=
"onClick"
>
<Icon
:icon=
"preIcon"
v-if
=
"preIcon"
class=
"mr-1px"
/>
<Icon
v-if=
"preIcon"
:icon
=
"preIcon"
class=
"mr-1px"
/>
{{
title
?
title
:
''
}}
<Icon
:icon=
"postIcon"
v-if
=
"postIcon"
class=
"mr-1px"
/>
<Icon
v-if=
"postIcon"
:icon
=
"postIcon"
class=
"mr-1px"
/>
</el-button>
</
template
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -40,6 +40,7 @@ const getBindValue = computed(() => {
margin-left
:
0
;
padding
:
8px
4px
;
}
:deep
(
.el-button.is-link
)
{
margin-left
:
0
;
padding
:
8px
4px
;
...
...
src/components/XButton/src/XTextButton.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"XTextButton"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
PropType
}
from
'vue'
...
...
@@ -29,9 +29,9 @@ const getBindValue = computed(() => {
<
template
>
<el-button
link
v-bind=
"getBindValue"
@
click=
"onClick"
>
<Icon
:icon=
"preIcon"
v-if
=
"preIcon"
class=
"mr-1px"
/>
<Icon
v-if=
"preIcon"
:icon
=
"preIcon"
class=
"mr-1px"
/>
{{
title
?
title
:
''
}}
<Icon
:icon=
"postIcon"
v-if
=
"postIcon"
class=
"mr-1px"
/>
<Icon
v-if=
"postIcon"
:icon
=
"postIcon"
class=
"mr-1px"
/>
</el-button>
</
template
>
<
style
lang=
"scss"
scoped
>
...
...
@@ -39,6 +39,7 @@ const getBindValue = computed(() => {
margin-left
:
0
;
padding
:
8px
4px
;
}
:deep
(
.el-button.is-link
)
{
margin-left
:
0
;
padding
:
8px
4px
;
...
...
src/layout/components/AppView.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"AppView"
setup
>
import
{
useTagsViewStore
}
from
'@/store/modules/tagsView'
import
{
useAppStore
}
from
'@/store/modules/app'
import
{
Footer
}
from
'@/layout/components/Footer'
...
...
src/layout/components/Collapse/src/Collapse.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Collapse"
setup
>
import
{
useAppStore
}
from
'@/store/modules/app'
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -24,9 +24,9 @@ const toggleCollapse = () => {
<
template
>
<div
:class=
"prefixCls"
>
<Icon
:size=
"18"
:icon=
"collapse ? 'ep:expand' : 'ep:fold'"
:color=
"color"
:icon=
"collapse ? 'ep:expand' : 'ep:fold'"
:size=
"18"
class=
"cursor-pointer"
@
click=
"toggleCollapse"
/>
...
...
src/layout/components/ContextMenu/src/ContextMenu.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ContextMenu"
setup
>
import
{
PropType
}
from
'vue'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -51,9 +51,9 @@ defineExpose({
:class=
"prefixCls"
:trigger=
"trigger"
placement=
"bottom-start"
popper-class=
"v-context-menu-popper"
@
command=
"command"
@
visible-change=
"visibleChange"
popper-class=
"v-context-menu-popper"
>
<slot></slot>
<template
#
dropdown
>
...
...
@@ -61,11 +61,12 @@ defineExpose({
<ElDropdownItem
v-for=
"(item, index) in schema"
:key=
"`dropdown$
{index}`"
:divided="item.divided"
:disabled="item.disabled"
:command="item"
:disabled="item.disabled"
:divided="item.divided"
>
<Icon
:icon=
"item.icon"
/>
{{
t
(
item
.
label
)
}}
<Icon
:icon=
"item.icon"
/>
{{
t
(
item
.
label
)
}}
</ElDropdownItem>
</ElDropdownMenu>
</
template
>
...
...
src/layout/components/Footer/src/Footer.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Footer"
setup
>
import
{
useAppStore
}
from
'@/store/modules/app'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
src/layout/components/LocaleDropdown/src/LocaleDropdown.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"LocaleDropdown"
setup
>
import
{
useLocaleStore
}
from
'@/store/modules/locale'
import
{
useLocale
}
from
'@/hooks/web/useLocale'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
@@ -33,11 +33,11 @@ const setLang = (lang: LocaleType) => {
<
template
>
<ElDropdown
:class=
"prefixCls"
trigger=
"click"
@
command=
"setLang"
>
<Icon
:size=
"18"
icon=
"ion:language-sharp"
class=
"cursor-pointer"
:class=
"$attrs.class"
:color=
"color"
:size=
"18"
class=
"cursor-pointer"
icon=
"ion:language-sharp"
/>
<template
#
dropdown
>
<ElDropdownMenu>
...
...
src/layout/components/Logo/src/Logo.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
import
{
ref
,
watch
,
computed
,
onMounted
,
unref
}
from
'vue'
<
script
lang=
"ts"
name=
"Logo"
setup
>
import
{
computed
,
onMounted
,
ref
,
unref
,
watch
}
from
'vue'
import
{
useAppStore
}
from
'@/store/modules/app'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -66,8 +66,8 @@ watch(
to="/"
>
<img
src=
"@/assets/imgs/logo.png"
class=
"w-[calc(var(--logo-height)-10px)] h-[calc(var(--logo-height)-10px)]"
src=
"@/assets/imgs/logo.png"
/>
<div
v-if=
"show"
...
...
src/layout/components/Message/src/Message.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Message"
setup
>
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
NotifyMessageApi
from
'@/api/system/notify/message'
...
...
@@ -40,10 +40,10 @@ onMounted(() => {
</
script
>
<
template
>
<div
class=
"message"
>
<ElPopover
placement=
"bottom"
:width=
"400
"
trigger=
"click"
>
<ElPopover
:width=
"400"
placement=
"bottom
"
trigger=
"click"
>
<template
#
reference
>
<ElBadge
:is-dot=
"unreadCount > 0"
class=
"item"
>
<Icon
icon=
"ep:bell"
:size=
"18"
class=
"cursor-pointer
"
@
click=
"getList"
/>
<Icon
:size=
"18"
class=
"cursor-pointer"
icon=
"ep:bell
"
@
click=
"getList"
/>
</ElBadge>
</
template
>
<ElTabs
v-model=
"activeName"
>
...
...
@@ -51,7 +51,7 @@ onMounted(() => {
<div
class=
"message-list"
>
<
template
v-for=
"item in list"
:key=
"item.id"
>
<div
class=
"message-item"
>
<img
src=
"@/assets/imgs/avatar.gif"
alt=
""
class=
"message-icon
"
/>
<img
alt=
""
class=
"message-icon"
src=
"@/assets/imgs/avatar.gif
"
/>
<div
class=
"message-content"
>
<span
class=
"message-title"
>
{{
item
.
templateNickname
}}
:
{{
item
.
templateContent
}}
...
...
@@ -67,12 +67,12 @@ onMounted(() => {
</ElTabs>
<!-- 更多 -->
<div
style=
"text-align: right; margin-top: 10px"
>
<XButton
type=
"primary"
preIcon=
"ep:view"
title=
"查看全部
"
@
click=
"goMyList"
/>
<XButton
preIcon=
"ep:view"
title=
"查看全部"
type=
"primary
"
@
click=
"goMyList"
/>
</div>
</ElPopover>
</div>
</template>
<
style
scoped
lang=
"scss"
>
<
style
lang=
"scss"
scoped
>
.message-empty
{
display
:
flex
;
flex-direction
:
column
;
...
...
@@ -81,28 +81,35 @@ onMounted(() => {
height
:
260px
;
line-height
:
45px
;
}
.message-list
{
display
:
flex
;
flex-direction
:
column
;
.message-item
{
display
:
flex
;
align-items
:
center
;
padding
:
20px
0
;
border-bottom
:
1px
solid
var
(
--el-border-color-light
);
&:last-child
{
border
:
none
;
}
.message-icon
{
width
:
40px
;
height
:
40px
;
margin
:
0
20px
0
5px
;
}
.message-content
{
display
:
flex
;
flex-direction
:
column
;
.message-title
{
margin-bottom
:
5px
;
}
.message-date
{
font-size
:
12px
;
color
:
var
(
--el-text-color-secondary
);
...
...
src/layout/components/Screenfull/src/Screenfull.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ScreenFull"
setup
>
import
{
Icon
}
from
'@/components/Icon'
import
{
useFullscreen
}
from
'@vueuse/core'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
@@ -22,9 +22,9 @@ const toggleFullscreen = () => {
<
template
>
<div
:class=
"prefixCls"
@
click=
"toggleFullscreen"
>
<Icon
:size=
"18"
:icon=
"isFullscreen ? 'zmdi:fullscreen-exit' : 'zmdi:fullscreen'"
:color=
"color"
:icon=
"isFullscreen ? 'zmdi:fullscreen-exit' : 'zmdi:fullscreen'"
:size=
"18"
/>
</div>
</
template
>
src/layout/components/Setting/src/Setting.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Setting"
setup
>
import
{
ElMessage
}
from
'element-plus'
import
{
useC
ssVar
,
useClipboard
}
from
'@vueuse/core'
import
{
useC
lipboard
,
useCssVar
}
from
'@vueuse/core'
import
{
CACHE_KEY
,
useCache
}
from
'@/hooks/web/useCache'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
import
{
trim
,
setCssVar
}
from
'@/utils'
import
{
colorIsDark
,
lighten
,
hexToRGB
}
from
'@/utils/color'
import
{
setCssVar
,
trim
}
from
'@/utils'
import
{
colorIsDark
,
hexToRGB
,
lighten
}
from
'@/utils/color'
import
{
useAppStore
}
from
'@/store/modules/app'
import
{
ThemeSwitch
}
from
'@/layout/components/ThemeSwitch'
import
ColorRadioPicker
from
'./components/ColorRadioPicker.vue'
...
...
@@ -202,10 +202,10 @@ const clear = () => {
class=
"fixed top-[45%] right-0 w-40px h-40px text-center leading-40px bg-[var(--el-color-primary)] cursor-pointer"
@
click=
"drawer = true"
>
<Icon
icon=
"ep:setting"
color=
"#fff
"
/>
<Icon
color=
"#fff"
icon=
"ep:setting
"
/>
</div>
<ElDrawer
v-model=
"drawer"
direction=
"rtl"
size=
"350px"
:z-index=
"4000
"
>
<ElDrawer
v-model=
"drawer"
:z-index=
"4000"
direction=
"rtl"
size=
"350px
"
>
<template
#
header
>
<span
class=
"text-16px font-700"
>
{{
t
(
'setting.projectSetting'
)
}}
</span>
</
template
>
...
...
@@ -279,10 +279,10 @@ const clear = () => {
<ElDivider
/>
<div>
<ElButton
type=
"primary"
class=
"w-full
"
@
click=
"copyConfig"
>
{{ t('setting.copy') }}
</ElButton>
<ElButton
class=
"w-full"
type=
"primary
"
@
click=
"copyConfig"
>
{{ t('setting.copy') }}
</ElButton>
</div>
<div
class=
"mt-5px"
>
<ElButton
type=
"danger"
class=
"w-full
"
@
click=
"clear"
>
<ElButton
class=
"w-full"
type=
"danger
"
@
click=
"clear"
>
{{ t('setting.clearAndReset') }}
</ElButton>
</div>
...
...
src/layout/components/Setting/src/components/ColorRadioPicker.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ColorRadioPicker"
setup
>
import
{
PropType
}
from
'vue'
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -42,14 +42,14 @@ watch(
<span
v-for=
"(item, i) in schema"
:key=
"`radio-$
{i}`"
class="w-20px h-20px cursor-pointer rounded-2px border-solid border-gray-300 border-2px text-center leading-20px mb-5px"
:class="{ 'is-active': colorVal === item }"
:style="{
background: item
}"
class="w-20px h-20px cursor-pointer rounded-2px border-solid border-gray-300 border-2px text-center leading-20px mb-5px"
@click="colorVal = item"
>
<Icon
v-if=
"colorVal === item"
color=
"#fff"
icon=
"ep:check"
:size=
"16
"
/>
<Icon
v-if=
"colorVal === item"
:size=
"16"
color=
"#fff"
icon=
"ep:check
"
/>
</span>
</div>
</
template
>
...
...
src/layout/components/Setting/src/components/InterfaceDisplay.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InterfaceDisplay"
setup
>
import
{
setCssVar
}
from
'@/utils'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
src/layout/components/Setting/src/components/LayoutRadioPicker.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"LayoutRadioPicker"
setup
>
import
{
useAppStore
}
from
'@/store/modules/app'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
src/layout/components/SizeDropdown/src/SizeDropdown.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SizeDropdown"
setup
>
import
{
useAppStore
}
from
'@/store/modules/app'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
@@ -26,7 +26,7 @@ const setCurrentSize = (size: ElementPlusSize) => {
<
template
>
<ElDropdown
:class=
"prefixCls"
trigger=
"click"
@
command=
"setCurrentSize"
>
<Icon
:
size=
"18"
icon=
"mdi:format-size"
:color=
"color"
class=
"cursor-pointer
"
/>
<Icon
:
color=
"color"
:size=
"18"
class=
"cursor-pointer"
icon=
"mdi:format-size
"
/>
<template
#
dropdown
>
<ElDropdownMenu>
<ElDropdownItem
v-for=
"item in sizeMap"
:key=
"item"
:command=
"item"
>
...
...
src/layout/components/TagsView/src/TagsView.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"TagsView"
setup
>
import
type
{
RouteLocationNormalizedLoaded
,
RouterLinkProps
}
from
'vue-router'
import
{
usePermissionStore
}
from
'@/store/modules/permission'
import
{
useTagsViewStore
}
from
'@/store/modules/tagsView'
...
...
@@ -266,15 +266,24 @@ watch(
@click="move(-200)"
>
<Icon
icon=
"ep:d-arrow-left"
:color=
"appStore.getIsDark ? 'var(--el-text-color-regular)' : '#333'"
icon=
"ep:d-arrow-left"
/>
</span>
<div
class=
"overflow-hidden flex-1"
>
<ElScrollbar
ref=
"scrollbarRef"
class=
"h-full"
@
scroll=
"scroll"
>
<div
class=
"flex h-full"
>
<ContextMenu
v-for=
"item in visitedViews"
:key=
"item.fullPath"
:ref=
"itemRefs.set"
:class=
"[
`$
{prefixCls}__item`,
item?.meta?.affix ? `${prefixCls}__item--affix` : '',
{
'is-active': isActive(item)
}
]"
:schema="[
{
icon: 'ep:refresh',
...
...
@@ -332,23 +341,14 @@ watch(
}
}
]"
v-for="item in visitedViews"
:key="item.fullPath"
:tag-item="item"
:class="[
`${prefixCls}__item`,
item?.meta?.affix ? `${prefixCls}__item--affix` : '',
{
'is-active': isActive(item)
}
]"
@visible-change="visibleChange"
>
<div>
<router-link
:ref=
"tagLinksRefs.set"
:to=
"
{ ...item }" custom v-slot="{ navigate }"
>
<router-link
:ref=
"tagLinksRefs.set"
v-slot=
"
{ navigate }" :to="{ ...item }" custom
>
<div
@
click=
"navigate"
class=
"h-full flex justify-center items-center whitespace-nowrap pl-15px"
@
click=
"navigate"
>
<Icon
v-if=
"
...
...
@@ -364,9 +364,9 @@ watch(
{{
t
(
item
?.
meta
?.
title
as
string
)
}}
<Icon
:class=
"`$
{prefixCls}__item--close`"
:size="12"
color="#333"
icon="ep:close"
:size="12"
@click.prevent.stop="closeSelectedTag(item)"
/>
</div>
...
...
@@ -382,8 +382,8 @@ watch(
@click="move(200)"
>
<Icon
icon=
"ep:d-arrow-right"
:color=
"appStore.getIsDark ? 'var(--el-text-color-regular)' : '#333'"
icon=
"ep:d-arrow-right"
/>
</span>
<span
...
...
@@ -392,12 +392,11 @@ watch(
@click="refreshSelectedTag(selectedTag)"
>
<Icon
icon=
"ep:refresh-right"
:color=
"appStore.getIsDark ? 'var(--el-text-color-regular)' : '#333'"
icon=
"ep:refresh-right"
/>
</span>
<ContextMenu
trigger=
"click"
:schema=
"[
{
icon: 'ep:refresh',
...
...
@@ -449,14 +448,15 @@ watch(
}
}
]"
trigger="click"
>
<span
:class=
"`$
{prefixCls}__tool`"
class="w-[var(--tags-view-height)] h-[var(--tags-view-height)] text-center leading-[var(--tags-view-height)] cursor-pointer block"
>
<Icon
icon=
"ep:menu"
:color=
"appStore.getIsDark ? 'var(--el-text-color-regular)' : '#333'"
icon=
"ep:menu"
/>
</span>
</ContextMenu>
...
...
@@ -513,6 +513,7 @@ $prefix-cls: #{$namespace}-tags-view;
display
:
none
;
transform
:
translate
(
0
,
-50%
);
}
&
:not
(.
#
{
$prefix-cls
}
__item--affix
)
:hover
{
.#{$prefix-cls
}
__item--close
{
display
:
block
;
...
...
@@ -530,6 +531,7 @@ $prefix-cls: #{$namespace}-tags-view;
color
:
var
(
--el-color-white
);
background-color
:
var
(
--el-color-primary
);
border
:
1px
solid
var
(
--el-color-primary
);
.#{$prefix-cls
}
__item--close
{
:deep(span)
{
color
:
var
(
--el-color-white
)
!important
;
...
...
@@ -573,6 +575,7 @@ $prefix-cls: #{$namespace}-tags-view;
&
__item
.is-active
{
color
:
var
(
--el-color-white
);
background-color
:
var
(
--el-color-primary
);
.#{$prefix-cls
}
__item--close
{
:deep(span)
{
color
:
var
(
--el-color-white
)
!important
;
...
...
src/layout/components/ThemeSwitch/src/ThemeSwitch.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ThemeSwitch"
setup
>
import
{
useAppStore
}
from
'@/store/modules/app'
import
{
useIcon
}
from
'@/hooks/web/useIcon'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
@@ -26,14 +26,14 @@ const themeChange = (val: boolean) => {
<
template
>
<ElSwitch
:class=
"prefixCls"
v-model=
"isDark"
inline-prompt
:border-color=
"blackColor"
:inactive-color=
"blackColor"
:active-color=
"blackColor"
:active-icon=
"Sun"
:border-color=
"blackColor"
:class=
"prefixCls"
:inactive-color=
"blackColor"
:inactive-icon=
"CrescentMoon"
inline-prompt
@
change=
"themeChange"
/>
</
template
>
...
...
src/layout/components/UserInfo/src/UserInfo.vue
View file @
b9349157
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"UserInfo"
setup
>
import
{
ElMessageBox
}
from
'element-plus'
import
{
CACHE_KEY
,
useCache
}
from
'@/hooks/web/useCache'
...
...
src/views/Error/403.vue
View file @
b9349157
<
template
>
<Error
type=
"403"
@
error-click=
"push('/')"
/>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Error403"
setup
>
const
{
push
}
=
useRouter
()
</
script
>
src/views/Error/404.vue
View file @
b9349157
<
template
>
<Error
@
error-click=
"push('/')"
/>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Error404"
setup
>
const
{
push
}
=
useRouter
()
</
script
>
src/views/Error/500.vue
View file @
b9349157
<
template
>
<Error
type=
"500"
@
error-click=
"push('/')"
/>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Error500"
setup
>
const
{
push
}
=
useRouter
()
</
script
>
src/views/Home/Index2.vue
View file @
b9349157
<
template
>
<el-row
:
gutter=
"20"
justify=
"space-between"
:class=
"prefixCls
"
>
<el-col
:
xl=
"6"
:lg=
"6"
:md=
"12"
:sm=
"12
"
:xs=
"24"
>
<el-card
shadow=
"hover"
class=
"mb-20px
"
>
<el-skeleton
:loading=
"loading"
animated
:rows=
"2"
>
<el-row
:
class=
"prefixCls"
:gutter=
"20"
justify=
"space-between
"
>
<el-col
:
lg=
"6"
:md=
"12"
:sm=
"12"
:xl=
"6
"
:xs=
"24"
>
<el-card
class=
"mb-20px"
shadow=
"hover
"
>
<el-skeleton
:loading=
"loading"
:rows=
"2"
animated
>
<template
#
default
>
<div
:class=
"`$
{prefixCls}__item flex justify-between`">
<div>
<div
:class=
"`$
{prefixCls}__item--icon ${prefixCls}__item--peoples p-16px inline-block rounded-6px`"
>
<Icon
icon=
"svg-icon:peoples"
:size=
"40
"
/>
<Icon
:size=
"40"
icon=
"svg-icon:peoples
"
/>
</div>
</div>
<div
class=
"flex flex-col justify-between"
>
<div
:class=
"`$
{prefixCls}__item--text text-16px text-gray-500 text-right`"
>
{{
t
(
'analysis.newUser'
)
}}
</div>
<div
:class=
"`$
{prefixCls}__item--text text-16px text-gray-500 text-right`"
>
{{
t
(
'analysis.newUser'
)
}}
</div>
<CountTo
class=
"text-20px font-700 text-right"
:start-val=
"0"
:end-val=
"102400"
:duration=
"2600"
:end-val=
"102400"
:start-val=
"0"
class=
"text-20px font-700 text-right"
/>
</div>
</div>
...
...
@@ -29,27 +29,27 @@
</el-card>
</el-col>
<el-col
:
xl=
"6"
:lg=
"6"
:md=
"12"
:sm=
"12
"
:xs=
"24"
>
<el-card
shadow=
"hover"
class=
"mb-20px
"
>
<el-skeleton
:loading=
"loading"
animated
:rows=
"2"
>
<el-col
:
lg=
"6"
:md=
"12"
:sm=
"12"
:xl=
"6
"
:xs=
"24"
>
<el-card
class=
"mb-20px"
shadow=
"hover
"
>
<el-skeleton
:loading=
"loading"
:rows=
"2"
animated
>
<
template
#
default
>
<div
:class=
"`$
{prefixCls}__item flex justify-between`">
<div>
<div
:class=
"`$
{prefixCls}__item--icon ${prefixCls}__item--message p-16px inline-block rounded-6px`"
>
<Icon
icon=
"svg-icon:message"
:size=
"40
"
/>
<Icon
:size=
"40"
icon=
"svg-icon:message
"
/>
</div>
</div>
<div
class=
"flex flex-col justify-between"
>
<div
:class=
"`$
{prefixCls}__item--text text-16px text-gray-500 text-right`"
>
{{
t
(
'analysis.unreadInformation'
)
}}
</div>
<div
:class=
"`$
{prefixCls}__item--text text-16px text-gray-500 text-right`"
>
{{
t
(
'analysis.unreadInformation'
)
}}
</div>
<CountTo
class=
"text-20px font-700 text-right"
:start-val=
"0"
:end-val=
"81212"
:duration=
"2600"
:end-val=
"81212"
:start-val=
"0"
class=
"text-20px font-700 text-right"
/>
</div>
</div>
...
...
@@ -58,27 +58,27 @@
</el-card>
</el-col>
<el-col
:
xl=
"6"
:lg=
"6"
:md=
"12"
:sm=
"12
"
:xs=
"24"
>
<el-card
shadow=
"hover"
class=
"mb-20px
"
>
<el-skeleton
:loading=
"loading"
animated
:rows=
"2"
>
<el-col
:
lg=
"6"
:md=
"12"
:sm=
"12"
:xl=
"6
"
:xs=
"24"
>
<el-card
class=
"mb-20px"
shadow=
"hover
"
>
<el-skeleton
:loading=
"loading"
:rows=
"2"
animated
>
<
template
#
default
>
<div
:class=
"`$
{prefixCls}__item flex justify-between`">
<div>
<div
:class=
"`$
{prefixCls}__item--icon ${prefixCls}__item--money p-16px inline-block rounded-6px`"
>
<Icon
icon=
"svg-icon:money"
:size=
"40
"
/>
<Icon
:size=
"40"
icon=
"svg-icon:money
"
/>
</div>
</div>
<div
class=
"flex flex-col justify-between"
>
<div
:class=
"`$
{prefixCls}__item--text text-16px text-gray-500 text-right`"
>
{{
t
(
'analysis.transactionAmount'
)
}}
</div>
<div
:class=
"`$
{prefixCls}__item--text text-16px text-gray-500 text-right`"
>
{{
t
(
'analysis.transactionAmount'
)
}}
</div>
<CountTo
class=
"text-20px font-700 text-right"
:start-val=
"0"
:end-val=
"9280"
:duration=
"2600"
:end-val=
"9280"
:start-val=
"0"
class=
"text-20px font-700 text-right"
/>
</div>
</div>
...
...
@@ -87,27 +87,27 @@
</el-card>
</el-col>
<el-col
:
xl=
"6"
:lg=
"6"
:md=
"12"
:sm=
"12
"
:xs=
"24"
>
<el-card
shadow=
"hover"
class=
"mb-20px
"
>
<el-skeleton
:loading=
"loading"
animated
:rows=
"2"
>
<el-col
:
lg=
"6"
:md=
"12"
:sm=
"12"
:xl=
"6
"
:xs=
"24"
>
<el-card
class=
"mb-20px"
shadow=
"hover
"
>
<el-skeleton
:loading=
"loading"
:rows=
"2"
animated
>
<
template
#
default
>
<div
:class=
"`$
{prefixCls}__item flex justify-between`">
<div>
<div
:class=
"`$
{prefixCls}__item--icon ${prefixCls}__item--shopping p-16px inline-block rounded-6px`"
>
<Icon
icon=
"svg-icon:shopping"
:size=
"40
"
/>
<Icon
:size=
"40"
icon=
"svg-icon:shopping
"
/>
</div>
</div>
<div
class=
"flex flex-col justify-between"
>
<div
:class=
"`$
{prefixCls}__item--text text-16px text-gray-500 text-right`"
>
{{
t
(
'analysis.totalShopping'
)
}}
</div>
<div
:class=
"`$
{prefixCls}__item--text text-16px text-gray-500 text-right`"
>
{{
t
(
'analysis.totalShopping'
)
}}
</div>
<CountTo
class=
"text-20px font-700 text-right"
:start-val=
"0"
:end-val=
"13600"
:duration=
"2600"
:end-val=
"13600"
:start-val=
"0"
class=
"text-20px font-700 text-right"
/>
</div>
</div>
...
...
@@ -117,36 +117,36 @@
</el-col>
</el-row>
<el-row
:gutter=
"20"
justify=
"space-between"
>
<el-col
:
xl=
"10"
:lg=
"10"
:md=
"24"
:sm=
"24
"
:xs=
"24"
>
<el-card
shadow=
"hover"
class=
"mb-20px
"
>
<el-col
:
lg=
"10"
:md=
"24"
:sm=
"24"
:xl=
"10
"
:xs=
"24"
>
<el-card
class=
"mb-20px"
shadow=
"hover
"
>
<el-skeleton
:loading=
"loading"
animated
>
<Echart
:
options=
"pieOptionsData"
:height=
"300
"
/>
<Echart
:
height=
"300"
:options=
"pieOptionsData
"
/>
</el-skeleton>
</el-card>
</el-col>
<el-col
:
xl=
"14"
:lg=
"14"
:md=
"24"
:sm=
"2
4"
:xs=
"24"
>
<el-card
shadow=
"hover"
class=
"mb-20px
"
>
<el-col
:
lg=
"14"
:md=
"24"
:sm=
"24"
:xl=
"1
4"
:xs=
"24"
>
<el-card
class=
"mb-20px"
shadow=
"hover
"
>
<el-skeleton
:loading=
"loading"
animated
>
<Echart
:
options=
"barOptionsData"
:height=
"300
"
/>
<Echart
:
height=
"300"
:options=
"barOptionsData
"
/>
</el-skeleton>
</el-card>
</el-col>
<el-col
:span=
"24"
>
<el-card
shadow=
"hover"
class=
"mb-20px
"
>
<el-skeleton
:loading=
"loading"
animated
:rows=
"4"
>
<Echart
:
options=
"lineOptionsData"
:height=
"350
"
/>
<el-card
class=
"mb-20px"
shadow=
"hover
"
>
<el-skeleton
:loading=
"loading"
:rows=
"4"
animated
>
<Echart
:
height=
"350"
:options=
"lineOptionsData
"
/>
</el-skeleton>
</el-card>
</el-col>
</el-row>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"Home2"
setup
>
import
{
set
}
from
'lodash-es'
import
{
EChartsOption
}
from
'echarts'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
import
type
{
AnalysisTotalTypes
}
from
'./types'
import
{
pieOptions
,
barOptions
,
lin
eOptions
}
from
'./echarts-data'
import
{
barOptions
,
lineOptions
,
pi
eOptions
}
from
'./echarts-data'
const
{
t
}
=
useI18n
()
const
loading
=
ref
(
true
)
...
...
@@ -291,18 +291,23 @@ $prefix-cls: #{$namespace}-panel;
:deep(.#{$namespace
}
-icon
)
{
color
:
#fff
!important
;
}
.
#
{
$prefix-cls
}
__item--icon
{
transition
:
all
0.38s
ease-out
;
}
.
#
{
$prefix-cls
}
__item--peoples
{
background
:
#40c9c6
;
}
.
#
{
$prefix-cls
}
__item--message
{
background
:
#36a3f7
;
}
.
#
{
$prefix-cls
}
__item--money
{
background
:
#f4516c
;
}
.
#
{
$prefix-cls
}
__item--shopping
{
background
:
#34bfa3
;
}
...
...
src/views/Login/Login.vue
View file @
b9349157
...
...
@@ -60,7 +60,7 @@
</div>
</div>
</
template
>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
name=
"Login"
setup
>
import
{
underlineToHump
}
from
'@/utils'
import
{
useDesign
}
from
'@/hooks/web/useDesign'
...
...
src/views/Login/components/LoginForm.vue
View file @
b9349157
<
template
>
<el-form
v-show=
"getShow"
ref=
"formLogin"
:model=
"loginData.loginForm"
:rules=
"LoginRules"
label-position=
"top"
class=
"login-form"
label-position=
"top"
label-width=
"120px"
size=
"large"
v-show=
"getShow"
ref=
"formLogin"
>
<el-row
style=
"maring-left: -10px; maring-right: -10px"
>
<el-col
:span=
"24"
style=
"padding-left: 10px; padding-right: 10px"
>
...
...
@@ -16,12 +16,12 @@
</el-form-item>
</el-col>
<el-col
:span=
"24"
style=
"padding-left: 10px; padding-right: 10px"
>
<el-form-item
prop=
"tenantName"
v-if=
"loginData.tenantEnable === 'true'
"
>
<el-form-item
v-if=
"loginData.tenantEnable === 'true'"
prop=
"tenantName
"
>
<el-input
type=
"text"
v-model=
"loginData.loginForm.tenantName"
:placeholder=
"t('login.tenantNamePlaceholder')"
:prefix-icon=
"iconHouse"
type=
"text"
/>
</el-form-item>
</el-col>
...
...
@@ -38,11 +38,11 @@
<el-form-item
prop=
"password"
>
<el-input
v-model=
"loginData.loginForm.password"
type=
"password"
:placeholder=
"t('login.passwordPlaceholder')"
:prefix-icon=
"iconLock"
show-password
type=
"password"
@
keyup
.
enter=
"getCode()"
:prefix-icon=
"iconLock"
/>
</el-form-item>
</el-col>
...
...
@@ -57,8 +57,8 @@
{{
t
(
'login.remember'
)
}}
</el-checkbox>
</el-col>
<el-col
:
span=
"12"
:offset=
"6
"
>
<el-link
type=
"primary"
style=
"float: right
"
>
{{
t
(
'login.forgetPassword'
)
}}
</el-link>
<el-col
:
offset=
"6"
:span=
"12
"
>
<el-link
style=
"float: right"
type=
"primary
"
>
{{
t
(
'login.forgetPassword'
)
}}
</el-link>
</el-col>
</el-row>
</el-form-item>
...
...
@@ -67,41 +67,41 @@
<el-form-item>
<XButton
:loading=
"loginLoading"
type=
"primary"
class=
"w-[100%]"
:title=
"t('login.login')"
class=
"w-[100%]"
type=
"primary"
@
click=
"getCode()"
/>
</el-form-item>
</el-col>
<Verify
ref=
"verify"
mode=
"pop"
:captchaType=
"captchaType"
:imgSize=
"
{ width: '400px', height: '200px' }"
mode="pop"
@success="handleLogin"
/>
<el-col
:span=
"24"
style=
"padding-left: 10px; padding-right: 10px"
>
<el-form-item>
<el-row
justify=
"space-between"
style=
"width: 100%"
:gutter=
"5
"
>
<el-row
:gutter=
"5"
justify=
"space-between"
style=
"width: 100%
"
>
<el-col
:span=
"8"
>
<XButton
class=
"w-[100%]"
:title=
"t('login.btnMobile')"
class=
"w-[100%]"
@
click=
"setLoginState(LoginStateEnum.MOBILE)"
/>
</el-col>
<el-col
:span=
"8"
>
<XButton
class=
"w-[100%]"
:title=
"t('login.btnQRCode')"
class=
"w-[100%]"
@
click=
"setLoginState(LoginStateEnum.QR_CODE)"
/>
</el-col>
<el-col
:span=
"8"
>
<XButton
class=
"w-[100%]"
:title=
"t('login.btnRegister')"
class=
"w-[100%]"
@
click=
"setLoginState(LoginStateEnum.REGISTER)"
/>
</el-col>
...
...
@@ -127,7 +127,7 @@
</el-row>
</el-form>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"LoginForm"
setup
>
import
{
ElLoading
}
from
'element-plus'
import
LoginFormTitle
from
'./LoginFormTitle.vue'
import
type
{
RouteLocationNormalizedLoaded
}
from
'vue-router'
...
...
src/views/Login/components/LoginFormTitle.vue
View file @
b9349157
...
...
@@ -3,7 +3,7 @@
{{
getFormTitle
}}
</h2>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"LoginFormTitle"
setup
>
import
{
LoginStateEnum
,
useLoginState
}
from
'./useLogin'
const
{
t
}
=
useI18n
()
...
...
src/views/Login/components/MobileForm.vue
View file @
b9349157
<
template
>
<el-form
v-show=
"getShow"
ref=
"formSmsLogin"
:model=
"loginData.loginForm"
:rules=
"rules"
label-position=
"top"
class=
"login-form"
label-position=
"top"
label-width=
"120px"
size=
"large"
v-show=
"getShow"
ref=
"formSmsLogin"
>
<el-row
style=
"margin-left: -10px; margin-right: -10px"
>
<!-- 租户名 -->
...
...
@@ -17,12 +17,12 @@
</el-form-item>
</el-col>
<el-col
:span=
"24"
style=
"padding-left: 10px; padding-right: 10px"
>
<el-form-item
prop=
"tenantName"
v-if=
"loginData.tenantEnable === 'true'
"
>
<el-form-item
v-if=
"loginData.tenantEnable === 'true'"
prop=
"tenantName
"
>
<el-input
type=
"text"
v-model=
"loginData.loginForm.tenantName"
:placeholder=
"t('login.tenantNamePlaceholder')"
:prefix-icon=
"iconHouse"
type=
"text"
/>
</el-form-item>
</el-col>
...
...
@@ -39,7 +39,7 @@
<!-- 验证码 -->
<el-col
:span=
"24"
style=
"padding-left: 10px; padding-right: 10px"
>
<el-form-item
prop=
"code"
>
<el-row
justify=
"space-between"
style=
"width: 100%"
:gutter=
"5
"
>
<el-row
:gutter=
"5"
justify=
"space-between"
style=
"width: 100%
"
>
<el-col
:span=
"24"
>
<el-input
v-model=
"loginData.loginForm.code"
...
...
@@ -50,9 +50,9 @@
<template
#
append
>
<span
v-if=
"mobileCodeTimer
<
=
0
"
@
click=
"getSmsCode"
class=
"getMobileCode"
style=
"cursor: pointer"
@
click=
"getSmsCode"
>
{{
t
(
'login.getSmsCode'
)
}}
</span>
...
...
@@ -71,9 +71,9 @@
<el-form-item>
<XButton
:loading=
"loginLoading"
type=
"primary"
class=
"w-[100%]"
:title=
"t('login.login')"
class=
"w-[100%]"
type=
"primary"
@
click=
"signIn()"
/>
</el-form-item>
...
...
@@ -82,8 +82,8 @@
<el-form-item>
<XButton
:loading=
"loginLoading"
class=
"w-[100%]"
:title=
"t('login.backLogin')"
class=
"w-[100%]"
@
click=
"handleBackLogin()"
/>
</el-form-item>
...
...
@@ -91,7 +91,7 @@
</el-row>
</el-form>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"MobileForm"
setup
>
import
type
{
RouteLocationNormalizedLoaded
}
from
'vue-router'
import
{
useIcon
}
from
'@/hooks/web/useIcon'
...
...
@@ -100,7 +100,7 @@ import { setTenantId, setToken } from '@/utils/auth'
import
{
usePermissionStore
}
from
'@/store/modules/permission'
import
{
getTenantIdByName
,
sendSmsCode
,
smsLogin
}
from
'@/api/login'
import
LoginFormTitle
from
'./LoginFormTitle.vue'
import
{
useLoginState
,
LoginStateEnum
,
useFormValid
}
from
'./useLogin'
import
{
LoginStateEnum
,
useFormValid
,
useLoginState
}
from
'./useLogin'
const
{
t
}
=
useI18n
()
const
message
=
useMessage
()
...
...
src/views/Login/components/QrCodeForm.vue
View file @
b9349157
...
...
@@ -4,23 +4,23 @@
<LoginFormTitle
style=
"width: 100%"
/>
</el-col>
<el-col
:span=
"24"
style=
"padding-left: 10px; padding-right: 10px"
>
<el-card
shadow=
"hover"
class=
"mb-10px text-cent
er"
>
<el-card
class=
"mb-10px text-center"
shadow=
"hov
er"
>
<Qrcode
:logo=
"logoImg"
/>
</el-card>
</el-col>
<el-divider
class=
"enter-x"
>
{{
t
(
'login.qrcode'
)
}}
</el-divider>
<el-col
:span=
"24"
style=
"padding-left: 10px; padding-right: 10px"
>
<div
class=
"w-[100%] mt-15px"
>
<XButton
class=
"w-[100%]"
:title=
"t('login.backLogin')
"
@
click=
"handleBackLogin()"
/>
<XButton
:title=
"t('login.backLogin')"
class=
"w-[100%]
"
@
click=
"handleBackLogin()"
/>
</div>
</el-col>
</el-row>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"QrCodeForm"
setup
>
import
logoImg
from
'@/assets/imgs/logo.png'
import
LoginFormTitle
from
'./LoginFormTitle.vue'
import
{
useLoginState
,
LoginStateEnum
}
from
'./useLogin'
import
{
LoginStateEnum
,
useLoginState
}
from
'./useLogin'
const
{
t
}
=
useI18n
()
const
{
handleBackLogin
,
getLoginState
}
=
useLoginState
()
...
...
src/views/Login/components/RegisterForm.vue
View file @
b9349157
<
template
>
<Form
:schema=
"schema
"
v-show=
"getShow
"
:rules=
"rules"
label-position=
"top"
:schema=
"schema"
class=
"dark:(border-1 border-[var(--el-border-color)] border-solid)"
hide-required-asterisk
label-position=
"top"
size=
"large"
v-show=
"getShow"
class=
"dark:(border-1 border-[var(--el-border-color)] border-solid)"
@
register=
"register"
>
<template
#
title
>
...
...
@@ -23,25 +23,25 @@
<div
class=
"w-[100%]"
>
<XButton
:loading=
"loading"
type=
"primary"
class=
"w-[100%]"
:title=
"t('login.register')"
class=
"w-[100%]"
type=
"primary"
@
click=
"loginRegister()"
/>
</div>
<div
class=
"w-[100%] mt-15px"
>
<XButton
class=
"w-[100%]"
:title=
"t('login.hasUser')
"
@
click=
"handleBackLogin()"
/>
<XButton
:title=
"t('login.hasUser')"
class=
"w-[100%]
"
@
click=
"handleBackLogin()"
/>
</div>
</
template
>
</Form>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"RegisterForm"
setup
>
import
type
{
FormRules
}
from
'element-plus'
import
{
useForm
}
from
'@/hooks/web/useForm'
import
{
useValidator
}
from
'@/hooks/web/useValidator'
import
LoginFormTitle
from
'./LoginFormTitle.vue'
import
{
useLoginState
,
LoginStateEnum
}
from
'./useLogin'
import
{
LoginStateEnum
,
useLoginState
}
from
'./useLogin'
import
{
FormSchema
}
from
'@/types/form'
const
{
t
}
=
useI18n
()
...
...
src/views/Profile/components/BasicInfo.vue
View file @
b9349157
<
template
>
<Form
ref=
"formRef"
:
rules=
"rules"
:schema=
"schema"
:labelWidth=
"80
"
>
<Form
ref=
"formRef"
:
labelWidth=
"80"
:rules=
"rules"
:schema=
"schema
"
>
<template
#
sex=
"form"
>
<el-radio-group
v-model=
"form['sex']"
>
<el-radio
:label=
"1"
>
{{
t
(
'profile.user.man'
)
}}
</el-radio>
...
...
@@ -8,9 +8,9 @@
</
template
>
</Form>
<XButton
:title=
"t('common.save')"
@
click=
"submit()"
/>
<XButton
type=
"danger"
:title=
"t('common.reset')
"
@
click=
"init()"
/>
<XButton
:title=
"t('common.reset')"
type=
"danger
"
@
click=
"init()"
/>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BasicInfo"
setup
>
import
type
{
FormRules
}
from
'element-plus'
import
{
ElMessage
}
from
'element-plus'
...
...
src/views/Profile/components/ProfileUser.vue
View file @
b9349157
...
...
@@ -5,41 +5,48 @@
</div>
<ul
class=
"list-group list-group-striped"
>
<li
class=
"list-group-item"
>
<Icon
icon=
"ep:user"
class=
"mr-5px"
/>
{{
t
(
'profile.user.username'
)
}}
<Icon
class=
"mr-5px"
icon=
"ep:user"
/>
{{
t
(
'profile.user.username'
)
}}
<div
class=
"pull-right"
>
{{
userInfo
?.
username
}}
</div>
</li>
<li
class=
"list-group-item"
>
<Icon
icon=
"ep:phone"
class=
"mr-5px"
/>
{{
t
(
'profile.user.mobile'
)
}}
<Icon
class=
"mr-5px"
icon=
"ep:phone"
/>
{{
t
(
'profile.user.mobile'
)
}}
<div
class=
"pull-right"
>
{{
userInfo
?.
mobile
}}
</div>
</li>
<li
class=
"list-group-item"
>
<Icon
icon=
"fontisto:email"
class=
"mr-5px"
/>
{{
t
(
'profile.user.email'
)
}}
<Icon
class=
"mr-5px"
icon=
"fontisto:email"
/>
{{
t
(
'profile.user.email'
)
}}
<div
class=
"pull-right"
>
{{
userInfo
?.
email
}}
</div>
</li>
<li
class=
"list-group-item"
>
<Icon
icon=
"carbon:tree-view-alt"
class=
"mr-5px"
/>
{{
t
(
'profile.user.dept'
)
}}
<div
class=
"pull-right"
v-if=
"userInfo?.dept"
>
{{
userInfo
?.
dept
.
name
}}
</div>
<Icon
class=
"mr-5px"
icon=
"carbon:tree-view-alt"
/>
{{
t
(
'profile.user.dept'
)
}}
<div
v-if=
"userInfo?.dept"
class=
"pull-right"
>
{{
userInfo
?.
dept
.
name
}}
</div>
</li>
<li
class=
"list-group-item"
>
<Icon
icon=
"ep:suitcase"
class=
"mr-5px"
/>
{{
t
(
'profile.user.posts'
)
}}
<div
class=
"pull-right"
v-if=
"userInfo?.posts"
>
<Icon
class=
"mr-5px"
icon=
"ep:suitcase"
/>
{{
t
(
'profile.user.posts'
)
}}
<div
v-if=
"userInfo?.posts"
class=
"pull-right"
>
{{
userInfo
?.
posts
.
map
((
post
)
=>
post
.
name
).
join
(
','
)
}}
</div>
</li>
<li
class=
"list-group-item"
>
<Icon
icon=
"icon-park-outline:peoples"
class=
"mr-5px"
/>
{{
t
(
'profile.user.roles'
)
}}
<div
class=
"pull-right"
v-if=
"userInfo?.roles"
>
<Icon
class=
"mr-5px"
icon=
"icon-park-outline:peoples"
/>
{{
t
(
'profile.user.roles'
)
}}
<div
v-if=
"userInfo?.roles"
class=
"pull-right"
>
{{
userInfo
?.
roles
.
map
((
role
)
=>
role
.
name
).
join
(
','
)
}}
</div>
</li>
<li
class=
"list-group-item"
>
<Icon
icon=
"ep:calendar"
class=
"mr-5px"
/>
{{
t
(
'profile.user.createTime'
)
}}
<Icon
class=
"mr-5px"
icon=
"ep:calendar"
/>
{{
t
(
'profile.user.createTime'
)
}}
<div
class=
"pull-right"
>
{{
formatDate
(
userInfo
?.
createTime
)
}}
</div>
</li>
</ul>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ProfileUser"
setup
>
import
{
formatDate
}
from
'@/utils/formatTime'
import
UserAvatar
from
'./UserAvatar.vue'
...
...
@@ -62,6 +69,7 @@ onMounted(async () => {
position
:
relative
;
height
:
120px
;
}
.list-group-striped
>
.list-group-item
{
border-left
:
0
;
border-right
:
0
;
...
...
@@ -82,6 +90,7 @@ onMounted(async () => {
padding
:
11px
0px
;
font-size
:
13px
;
}
.pull-right
{
float
:
right
!important
;
}
...
...
src/views/Profile/components/ResetPwd.vue
View file @
b9349157
...
...
@@ -10,13 +10,13 @@
<InputPassword
v-model=
"password.confirmPassword"
strength
/>
</el-form-item>
<el-form-item>
<XButton
type=
"primary"
@
click=
"submit(formRef)"
:title=
"t('common.save'
)"
/>
<XButton
type=
"danger"
:title=
"t('common.reset')
"
@
click=
"reset(formRef)"
/>
<XButton
:title=
"t('common.save')"
type=
"primary"
@
click=
"submit(formRef
)"
/>
<XButton
:title=
"t('common.reset')"
type=
"danger
"
@
click=
"reset(formRef)"
/>
</el-form-item>
</el-form>
</
template
>
<
script
setup
lang=
"ts"
>
import
type
{
Form
Rules
,
FormInstance
}
from
'element-plus'
<
script
lang=
"ts"
name=
"ResetPwd"
setup
>
import
type
{
Form
Instance
,
FormRules
}
from
'element-plus'
import
{
InputPassword
}
from
'@/components/InputPassword'
import
{
updateUserPassword
}
from
'@/api/system/user/profile'
...
...
src/views/Profile/components/UserAvatar.vue
View file @
b9349157
...
...
@@ -2,17 +2,18 @@
<div
class=
"change-avatar"
>
<CropperAvatar
ref=
"cropperRef"
:value=
"avatar"
:showBtn=
"false"
@
change=
"handelUpload"
:btnProps=
"
{ preIcon: 'ant-design:cloud-upload-outlined' }"
:showBtn="false"
:value="avatar"
width="120px"
@change="handelUpload"
/>
</div>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"UserAvatar"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
{
uploadAvatar
}
from
'@/api/system/user/profile'
const
props
=
defineProps
({
img
:
propTypes
.
string
.
def
(
''
)
})
...
...
@@ -27,7 +28,7 @@ const handelUpload = async ({ data }) => {
}
</
script
>
<
style
scoped
lang=
"scss"
>
<
style
lang=
"scss"
scoped
>
.change-avatar
{
img
{
display
:
block
;
...
...
src/views/bpm/form/editor/index.vue
View file @
b9349157
...
...
@@ -4,14 +4,15 @@
<fc-designer
ref=
"designer"
height=
"780px"
>
<template
#
handle
>
<el-button
round
size=
"small"
type=
"primary"
@
click=
"handleSave"
>
<Icon
icon=
"ep:plus"
class=
"mr-5px"
/>
保存
<Icon
class=
"mr-5px"
icon=
"ep:plus"
/>
保存
</el-button>
</
template
>
</fc-designer>
</ContentWrap>
<!-- 表单保存的弹窗 -->
<Dialog
title=
"保存表单"
v-model=
"dialogVisible
"
width=
"600"
>
<Dialog
v-model=
"dialogVisible"
title=
"保存表单
"
width=
"600"
>
<el-form
ref=
"formRef"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
>
<el-form-item
label=
"表单名"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入表单名"
/>
...
...
@@ -28,16 +29,16 @@
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输入备注
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入备注"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<
template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BpmFormEditor"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
*
as
FormApi
from
'@/api/bpm/form'
...
...
src/views/bpm/group/UserGroupForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"100px"
v-loading=
"formLoading"
>
<el-form-item
label=
"组名"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入组名"
/>
</el-form-item>
<el-form-item
label=
"描述"
>
<el-input
type=
"textarea"
v-model=
"formData.name"
placeholder=
"请输入描述
"
/>
<el-input
v-model=
"formData.name"
placeholder=
"请输入描述"
type=
"textarea
"
/>
</el-form-item>
<el-form-item
label=
"成员"
prop=
"memberUserIds"
>
<el-select
v-model=
"formData.memberUserIds"
multiple
placeholder=
"请选择成员"
>
...
...
@@ -36,12 +36,12 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"UserGroupForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
*
as
UserGroupApi
from
'@/api/bpm/userGroup'
...
...
src/views/bpm/model/ModelForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
width=
"600"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
width=
"600"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"110px"
v-loading=
"formLoading"
>
<el-form-item
label=
"流程标识"
prop=
"key"
>
<el-input
v-model=
"formData.key"
:disabled=
"!!formData.id"
placeholder=
"请输入流标标识"
style=
"width: 330px"
:disabled=
"!!formData.id"
/>
<el-tooltip
v-if=
"!formData.id"
class=
"item"
effect=
"light"
content=
"新建后,流程标识不可修改!"
effect=
"light"
placement=
"top"
>
<i
style=
"padding-left: 5px"
class=
"el-icon-question
"
></i>
<i
class=
"el-icon-question"
style=
"padding-left: 5px
"
></i>
</el-tooltip>
<el-tooltip
v-else
class=
"item"
effect=
"light"
content=
"流程标识不可修改!
"
placement=
"top"
>
<i
style=
"padding-left: 5px"
class=
"el-icon-question
"
></i>
<el-tooltip
v-else
class=
"item"
content=
"流程标识不可修改!"
effect=
"light
"
placement=
"top"
>
<i
class=
"el-icon-question"
style=
"padding-left: 5px
"
></i>
</el-tooltip>
</el-form-item>
<el-form-item
label=
"流程名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入流程名称"
:disabled=
"!!formData.id"
clearable
placeholder=
"请输入流程名称"
/>
</el-form-item>
<el-form-item
v-if=
"formData.id"
label=
"流程分类"
prop=
"category"
>
<el-select
v-model=
"formData.category"
placeholder=
"请选择流程分类"
clearable
placeholder=
"请选择流程分类"
style=
"width: 100%"
>
<el-option
...
...
@@ -51,7 +51,7 @@
</el-select>
</el-form-item>
<el-form-item
label=
"流程描述"
prop=
"description"
>
<el-input
type=
"textarea"
v-model=
"formData.description"
clearable
/>
<el-input
v-model=
"formData.description"
clearable
type=
"textarea"
/>
</el-form-item>
<div
v-if=
"formData.id"
>
<el-form-item
label=
"表单类型"
prop=
"formType"
>
...
...
@@ -87,11 +87,11 @@
/>
<el-tooltip
class=
"item"
effect=
"light"
content=
"自定义表单的提交路径,使用 Vue 的路由地址,例如说:bpm/oa/leave/create"
effect=
"light"
placement=
"top"
>
<i
style=
"padding-left: 5px"
class=
"el-icon-question
"
></i>
<i
class=
"el-icon-question"
style=
"padding-left: 5px
"
></i>
</el-tooltip>
</el-form-item>
<el-form-item
...
...
@@ -106,26 +106,27 @@
/>
<el-tooltip
class=
"item"
effect=
"light"
content=
"自定义表单的查看路径,使用 Vue 的路由地址,例如说:bpm/oa/leave/view"
effect=
"light"
placement=
"top"
>
<i
style=
"padding-left: 5px"
class=
"el-icon-question
"
></i>
<i
class=
"el-icon-question"
style=
"padding-left: 5px
"
></i>
</el-tooltip>
</el-form-item>
</div>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ModelForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
ElMessageBox
}
from
'element-plus'
import
*
as
ModelApi
from
'@/api/bpm/model'
import
*
as
FormApi
from
'@/api/bpm/form'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/bpm/model/ModelImportForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"导入流程"
v-model=
"dialogVisible
"
width=
"400"
>
<Dialog
v-model=
"dialogVisible"
title=
"导入流程
"
width=
"400"
>
<div>
<el-upload
ref=
"uploadRef"
:action=
"importUrl"
:headers=
"uploadHeaders"
:data=
"formData"
name=
"bpmnFile"
v-model:file-list=
"fileList"
drag
:action=
"importUrl"
:auto-upload=
"false"
accept=
".bpmn, .xml"
:data=
"formData"
:disabled=
"formLoading"
:headers=
"uploadHeaders"
:limit=
"1"
:on-error=
"submitFormError"
:on-exceed=
"handleExceed"
:on-success=
"submitFormSuccess"
:on-error=
"submitFormError"
:disabled=
"formLoading"
accept=
".bpmn, .xml"
drag
name=
"bpmnFile"
>
<Icon
class=
"el-icon--upload"
icon=
"ep:upload-filled"
/>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em>
</div>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<template
#
tip
>
<div
class=
"el-upload__tip"
style=
"color: red"
>
提示:仅允许导入“bpm”或“xml”格式文件!
...
...
@@ -33,10 +33,10 @@
/>
</el-form-item>
<el-form-item
label=
"流程名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入流程名称"
clearable
/>
<el-input
v-model=
"formData.name"
clearable
placeholder=
"请输入流程名称"
/>
</el-form-item>
<el-form-item
label=
"流程描述"
prop=
"description"
>
<el-input
type=
"textarea"
v-model=
"formData.description"
clearable
/>
<el-input
v-model=
"formData.description"
clearable
type=
"textarea"
/>
</el-form-item>
</el-form>
</div>
...
...
@@ -44,13 +44,14 @@
</el-upload>
</div>
<
template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ModelImportForm"
setup
>
import
{
getAccessToken
,
getTenantId
}
from
'@/utils/auth'
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
...
src/views/bpm/oa/leave/create.vue
View file @
b9349157
<
template
>
<Dialog
title=
"发起 OA 请假流程"
v-model=
"dialogVisible
"
>
<Dialog
v-model=
"dialogVisible"
title=
"发起 OA 请假流程
"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"请假类型"
prop=
"type"
>
<el-select
v-model=
"formData.type"
placeholder=
"请选择请假类型"
clearable
>
<el-select
v-model=
"formData.type"
clearable
placeholder=
"请选择请假类型"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.BPM_OA_LEAVE_TYPE)"
:key=
"dict.value"
...
...
@@ -19,35 +19,36 @@
</el-form-item>
<el-form-item
label=
"开始时间"
prop=
"startTime"
>
<el-date-picker
clearable
v-model=
"formData.startTime"
clearable
placeholder=
"请选择开始时间"
type=
"datetime"
value-format=
"x"
placeholder=
"请选择开始时间"
/>
</el-form-item>
<el-form-item
label=
"结束时间"
prop=
"endTime"
>
<el-date-picker
clearable
v-model=
"formData.endTime"
clearable
placeholder=
"请选择结束时间"
type=
"datetime"
value-format=
"x"
placeholder=
"请选择结束时间"
/>
</el-form-item>
<el-form-item
label=
"原因"
prop=
"reason"
>
<el-input
v-model=
"formData.reason"
type=
"textarea"
placeholder=
"请输请假原因
"
/>
<el-input
v-model=
"formData.reason"
placeholder=
"请输请假原因"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BpmOALeaveCreate"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
*
as
LeaveApi
from
'@/api/bpm/leave'
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
...
src/views/bpm/oa/leave/detail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible"
:scroll=
"true"
:max-height=
"200
"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
:max-height=
"200"
:scroll=
"true"
title=
"详情
"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"请假类型"
>
<dict-tag
:type=
"DICT_TYPE.BPM_OA_LEAVE_TYPE"
:value=
"detailData.type"
/>
</el-descriptions-item>
...
...
@@ -16,7 +16,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BpmOALeaveDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
LeaveApi
from
'@/api/bpm/leave'
...
...
src/views/bpm/processInstance/detail/ProcessInstanceBpmnViewer.vue
View file @
b9349157
<
template
>
<el-card
class=
"box-card"
v-loading=
"loading
"
>
<el-card
v-loading=
"loading"
class=
"box-card
"
>
<template
#
header
>
<span
class=
"el-icon-picture-outline"
>
流程图
</span>
</
template
>
<my-process-viewer
key=
"designer"
:value=
"bpmnXml"
v-bind=
"bpmnControlForm"
:prefix=
"bpmnControlForm.prefix"
:activityData=
"activityList"
:prefix=
"bpmnControlForm.prefix"
:processInstanceData=
"processInstance"
:taskData=
"tasks"
:value=
"bpmnXml"
v-bind=
"bpmnControlForm"
/>
</el-card>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BpmProcessInstanceBpmnViewer"
setup
>
import
{
propTypes
}
from
'@/utils/propTypes'
import
*
as
ActivityApi
from
'@/api/bpm/activity'
// import * as DefinitionApi from '@/api/bpm/definition'
...
...
src/views/bpm/processInstance/detail/ProcessInstanceTaskList.vue
View file @
b9349157
<
template
>
<el-card
class=
"box-card"
v-loading=
"loading
"
>
<el-card
v-loading=
"loading"
class=
"box-card
"
>
<template
#
header
>
<span
class=
"el-icon-picture-outline"
>
审批记录
</span>
</
template
>
<el-col
:
span=
"16"
:offset=
"4
"
>
<el-col
:
offset=
"4"
:span=
"16
"
>
<div
class=
"block"
>
<el-timeline>
<el-timeline-item
...
...
@@ -16,9 +16,9 @@
<el-card
:body-style=
"{ padding: '10px' }"
>
<label
v-if=
"item.assigneeUser"
style=
"font-weight: normal; margin-right: 30px"
>
审批人:{{ item.assigneeUser.nickname }}
<el-tag
type=
"info"
size=
"small
"
>
{{ item.assigneeUser.deptName }}
</el-tag>
<el-tag
size=
"small"
type=
"info
"
>
{{ item.assigneeUser.deptName }}
</el-tag>
</label>
<label
style=
"font-weight: normal"
v-if=
"item.createTime
"
>
创建时间:
</label>
<label
v-if=
"item.createTime"
style=
"font-weight: normal
"
>
创建时间:
</label>
<label
style=
"color: #8a909c; font-weight: normal"
>
{{ formatDate(item?.createTime) }}
</label>
...
...
@@ -44,7 +44,7 @@
</el-col>
</el-card>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BpmProcessInstanceTaskList"
setup
>
import
{
formatDate
,
formatPast2
}
from
'@/utils/formatTime'
import
{
propTypes
}
from
'@/utils/propTypes'
...
...
src/views/bpm/processInstance/detail/TaskUpdateAssigneeForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"转派审批人"
v-model=
"dialogVisible
"
width=
"500"
>
<Dialog
v-model=
"dialogVisible"
title=
"转派审批人
"
width=
"500"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"110px"
v-loading=
"formLoading"
>
<el-form-item
label=
"新审批人"
prop=
"assigneeUserId"
>
<el-select
v-model=
"formData.assigneeUserId"
clearable
style=
"width: 100%"
>
...
...
@@ -19,12 +19,12 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BpmTaskUpdateAssigneeForm"
setup
>
import
*
as
TaskApi
from
'@/api/bpm/task'
import
*
as
UserApi
from
'@/api/system/user'
...
...
src/views/bpm/task/done/TaskDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible"
:scroll=
"true"
:max-height=
"500
"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
:max-height=
"500"
:scroll=
"true"
title=
"详情
"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"任务编号"
min-width=
"120"
>
{{
detailData
.
id
}}
</el-descriptions-item>
...
...
@@ -25,7 +25,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BpmTaskDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
TaskApi
from
'@/api/bpm/task'
...
...
src/views/bpm/taskAssignRule/TaskAssignRuleForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"修改任务规则"
v-model=
"dialogVisible
"
width=
"600"
>
<Dialog
v-model=
"dialogVisible"
title=
"修改任务规则
"
width=
"600"
>
<el-form
ref=
"formRef"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
>
<el-form-item
label=
"任务名称"
prop=
"taskDefinitionName"
>
<el-input
v-model=
"formData.taskDefinitionName"
placeholder=
"请输入流标标识"
disabled
/>
<el-input
v-model=
"formData.taskDefinitionName"
disabled
placeholder=
"请输入流标标识"
/>
</el-form-item>
<el-form-item
label=
"任务标识"
prop=
"taskDefinitionKey"
>
<el-input
v-model=
"formData.taskDefinitionKey"
placeholder=
"请输入任务标识"
disabled
/>
<el-input
v-model=
"formData.taskDefinitionKey"
disabled
placeholder=
"请输入任务标识"
/>
</el-form-item>
<el-form-item
label=
"规则类型"
prop=
"type"
>
<el-select
v-model=
"formData.type"
clearable
style=
"width: 100%"
>
...
...
@@ -18,7 +18,7 @@
</el-select>
</el-form-item>
<el-form-item
v-if=
"formData.type === 10"
label=
"指定角色"
prop=
"roleIds"
>
<el-select
v-model=
"formData.roleIds"
multiple
clearab
le
style=
"width: 100%"
>
<el-select
v-model=
"formData.roleIds"
clearable
multip
le
style=
"width: 100%"
>
<el-option
v-for=
"item in roleOptions"
:key=
"item.id"
...
...
@@ -28,24 +28,24 @@
</el-select>
</el-form-item>
<el-form-item
v-if=
"formData.type === 20 || formData.type === 21"
label=
"指定部门"
prop=
"deptIds"
span=
"24"
v-if=
"formData.type === 20 || formData.type === 21"
>
<el-tree-select
ref=
"treeRef"
v-model=
"formData.deptIds"
node-key=
"id"
show-checkbox
:props=
"defaultProps"
:data=
"deptTreeOptions"
:props=
"defaultProps"
empty-text=
"加载中,请稍后"
multiple
node-key=
"id"
show-checkbox
/>
</el-form-item>
<el-form-item
label=
"指定岗位"
prop=
"postIds"
span=
"24"
v-if=
"formData.type === 22
"
>
<el-select
v-model=
"formData.postIds"
multiple
clearab
le
style=
"width: 100%"
>
<el-form-item
v-if=
"formData.type === 22"
label=
"指定岗位"
prop=
"postIds"
span=
"24
"
>
<el-select
v-model=
"formData.postIds"
clearable
multip
le
style=
"width: 100%"
>
<el-option
v-for=
"item in postOptions"
:key=
"parseInt(item.id)"
...
...
@@ -55,12 +55,12 @@
</el-select>
</el-form-item>
<el-form-item
v-if=
"formData.type === 30 || formData.type === 31 || formData.type === 32"
label=
"指定用户"
prop=
"userIds"
span=
"24"
v-if=
"formData.type === 30 || formData.type === 31 || formData.type === 32"
>
<el-select
v-model=
"formData.userIds"
multiple
clearab
le
style=
"width: 100%"
>
<el-select
v-model=
"formData.userIds"
clearable
multip
le
style=
"width: 100%"
>
<el-option
v-for=
"item in userOptions"
:key=
"parseInt(item.id)"
...
...
@@ -69,8 +69,8 @@
/>
</el-select>
</el-form-item>
<el-form-item
label=
"指定用户组"
prop=
"userGroupIds"
v-if=
"formData.type === 40
"
>
<el-select
v-model=
"formData.userGroupIds"
multiple
clearab
le
style=
"width: 100%"
>
<el-form-item
v-if=
"formData.type === 40"
label=
"指定用户组"
prop=
"userGroupIds
"
>
<el-select
v-model=
"formData.userGroupIds"
clearable
multip
le
style=
"width: 100%"
>
<el-option
v-for=
"item in userGroupOptions"
:key=
"parseInt(item.id)"
...
...
@@ -79,8 +79,8 @@
/>
</el-select>
</el-form-item>
<el-form-item
label=
"指定脚本"
prop=
"scripts"
v-if=
"formData.type === 50
"
>
<el-select
v-model=
"formData.scripts"
multiple
clearab
le
style=
"width: 100%"
>
<el-form-item
v-if=
"formData.type === 50"
label=
"指定脚本"
prop=
"scripts
"
>
<el-select
v-model=
"formData.scripts"
clearable
multip
le
style=
"width: 100%"
>
<el-option
v-for=
"dict in taskAssignScriptDictDatas"
:key=
"dict.value"
...
...
@@ -92,20 +92,21 @@
</el-form>
<!-- 操作按钮 -->
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"BpmTaskAssignRuleForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
handleTree
,
defaultProps
}
from
'@/utils/tree'
import
{
defaultProps
,
handleTree
}
from
'@/utils/tree'
import
*
as
TaskAssignRuleApi
from
'@/api/bpm/taskAssignRule'
import
*
as
RoleApi
from
'@/api/system/role'
import
*
as
DeptApi
from
'@/api/system/dept'
import
*
as
PostApi
from
'@/api/system/post'
import
*
as
UserApi
from
'@/api/system/user'
import
*
as
UserGroupApi
from
'@/api/bpm/userGroup'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/infra/apiAccessLog/ApiAccessLogDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible"
:scroll=
"true"
:max-height=
"500
"
width=
"800"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
:max-height=
"500"
:scroll=
"true"
title=
"详情
"
width=
"800"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"日志主键"
min-width=
"120"
>
{{
detailData
.
id
}}
</el-descriptions-item>
...
...
@@ -33,14 +33,14 @@
<el-descriptions-item
label=
"操作结果"
>
<div
v-if=
"detailData.resultCode === 0"
>
正常
</div>
<div
v-else-if=
"detailData.resultCode > 0"
>
失败 |
{{
detailData
.
resultCode
}}
|
{{
detailData
.
resultMsg
}}
</div
>
>
失败 |
{{
detailData
.
resultCode
}}
|
{{
detailData
.
resultMsg
}}
</div
>
</el-descriptions-item>
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ApiAccessLogDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
ApiAccessLog
from
'@/api/infra/apiAccessLog'
...
...
src/views/infra/apiErrorLog/ApiErrorLogDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible"
:scroll=
"true"
:max-height=
"500
"
width=
"800"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
:max-height=
"500"
:scroll=
"true"
title=
"详情
"
width=
"800"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"日志主键"
min-width=
"120"
>
{{
detailData
.
id
}}
</el-descriptions-item>
...
...
@@ -32,12 +32,12 @@
<el-descriptions-item
label=
"异常名"
>
{{
detailData
.
exceptionName
}}
</el-descriptions-item>
<el-descriptions-item
label=
"异常堆栈"
v-if=
"detailData.exceptionStackTrace
"
>
<el-descriptions-item
v-if=
"detailData.exceptionStackTrace"
label=
"异常堆栈
"
>
<el-input
type=
"textarea"
:readonly=
"true"
:autosize=
"
{ maxRows: 20 }"
v-model=
"detailData.exceptionStackTrace"
:autosize=
"
{ maxRows: 20 }"
:readonly="true"
type="textarea"
/>
</el-descriptions-item>
<el-descriptions-item
label=
"处理状态"
>
...
...
@@ -46,16 +46,16 @@
:value=
"detailData.processStatus"
/>
</el-descriptions-item>
<el-descriptions-item
label=
"处理人"
v-if=
"detailData.processUserId
"
>
<el-descriptions-item
v-if=
"detailData.processUserId"
label=
"处理人
"
>
{{
detailData
.
processUserId
}}
</el-descriptions-item>
<el-descriptions-item
label=
"处理时间"
v-if=
"detailData.processTime
"
>
<el-descriptions-item
v-if=
"detailData.processTime"
label=
"处理时间
"
>
{{
formatDate
(
detailData
.
processTime
)
}}
</el-descriptions-item>
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ApiErrorLogDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
ApiErrorLog
from
'@/api/infra/apiErrorLog'
...
...
src/views/infra/codegen/EditTable.vue
View file @
b9349157
...
...
@@ -13,16 +13,17 @@
</el-tabs>
<el-form>
<el-form-item
style=
"float: right"
>
<el-button
type=
"primary"
@
click=
"submitForm"
:loading=
"formLoading
"
>
保存
</el-button>
<el-button
:loading=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
保存
</el-button>
<el-button
@
click=
"close"
>
返回
</el-button>
</el-form-item>
</el-form>
</ContentWrap>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraCodegenEditTable"
setup
>
import
{
useTagsViewStore
}
from
'@/store/modules/tagsView'
import
{
BasicInfoForm
,
ColumInfoForm
,
GenerateInfoForm
}
from
'./components'
import
*
as
CodegenApi
from
'@/api/infra/codegen'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
const
{
push
,
currentRoute
}
=
useRouter
()
// 路由
...
...
src/views/infra/codegen/ImportTable.vue
View file @
b9349157
<
template
>
<Dialog
title=
"导入表"
v-model=
"dialogVisible
"
width=
"800px"
>
<Dialog
v-model=
"dialogVisible"
title=
"导入表
"
width=
"800px"
>
<!-- 搜索栏 -->
<el-form
:model=
"queryParams"
ref=
"queryFormRef"
:inline=
"true
"
label-width=
"68px"
>
<el-form
ref=
"queryFormRef"
:inline=
"true"
:model=
"queryParams
"
label-width=
"68px"
>
<el-form-item
label=
"数据源"
prop=
"dataSourceConfigId"
>
<el-select
v-model=
"queryParams.dataSourceConfigId"
placeholder=
"请选择数据源"
class=
"!w-240px"
placeholder=
"请选择数据源"
>
<el-option
v-for=
"config in dataSourceConfigList"
...
...
@@ -19,54 +19,61 @@
<el-form-item
label=
"表名称"
prop=
"name"
>
<el-input
v-model=
"queryParams.name"
placeholder=
"请输入表名称
"
class=
"!w-240px
"
clearable
placeholder=
"请输入表名称"
@
keyup
.
enter=
"getList"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item
label=
"表描述"
prop=
"comment"
>
<el-input
v-model=
"queryParams.comment"
placeholder=
"请输入表描述
"
class=
"!w-240px
"
clearable
placeholder=
"请输入表描述"
@
keyup
.
enter=
"getList"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item>
<el-button
@
click=
"getList"
><Icon
icon=
"ep:search"
class=
"mr-5px"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
<el-button
@
click=
"getList"
>
<Icon
class=
"mr-5px"
icon=
"ep:search"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
>
<Icon
class=
"mr-5px"
icon=
"ep:refresh"
/>
重置
</el-button>
</el-form-item>
</el-form>
<!-- 列表 -->
<el-row>
<el-table
v-loading=
"dbTableLoading"
@
row-click=
"handleRowClick"
ref=
"tableRef"
v-loading=
"dbTableLoading"
:data=
"dbTableList"
@
selection-change=
"handleSelectionChange"
height=
"260px"
@
row-click=
"handleRowClick"
@
selection-change=
"handleSelectionChange"
>
<el-table-column
type=
"selection"
width=
"55"
/>
<el-table-column
prop=
"name"
label=
"表名称"
:show-overflow-tooltip=
"tru
e"
/>
<el-table-column
prop=
"comment"
label=
"表描述"
:show-overflow-tooltip=
"true
"
/>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"表名称"
prop=
"nam
e"
/>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"表描述"
prop=
"comment
"
/>
</el-table>
</el-row>
<!-- 操作 -->
<template
#
footer
>
<el-button
@
click=
"handleImportTable"
type=
"primary"
:disabled=
"tableList.length === 0
"
>
<el-button
:disabled=
"tableList.length === 0"
type=
"primary"
@
click=
"handleImportTable
"
>
导入
</el-button>
<el-button
@
click=
"close"
>
关闭
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraCodegenImportTable"
setup
>
import
*
as
CodegenApi
from
'@/api/infra/codegen'
import
*
as
DataSourceConfigApi
from
'@/api/infra/dataSourceConfig'
import
{
ElTable
}
from
'element-plus'
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
...
src/views/infra/codegen/PreviewCode.vue
View file @
b9349157
<
template
>
<Dialog
title=
"代码预览"
v-model=
"dialogVisible"
align-center
width=
"80%"
class=
"app-infra-codegen-preview-container"
title=
"代码预览"
width=
"80%"
>
<div
class=
"flex"
>
<!-- 代码目录树 -->
<el-card
class=
"w-1/3"
:gutter=
"12"
shadow=
"hover"
v-loading=
"loading"
:gutter=
"12"
class=
"w-1/3"
element-loading-text=
"生成文件目录中..."
shadow=
"hover"
>
<el-scrollbar
height=
"calc(100vh - 88px - 40px)"
>
<el-tree
ref=
"treeRef"
node-key=
"id"
:data=
"preview.fileTree"
:expand-on-click-node=
"false"
default-expand-all
highlight-current
node-key=
"id"
@
node-click=
"handleNodeClick"
default-expand-all
/>
</el-scrollbar>
</el-card>
<!-- 代码 -->
<el-card
class=
"w-2/3 ml-3"
:gutter=
"12"
shadow=
"hover"
v-loading=
"loading"
:gutter=
"12"
class=
"w-2/3 ml-3"
element-loading-text=
"加载代码中..."
shadow=
"hover"
>
<el-tabs
v-model=
"preview.activeName"
>
<el-tab-pane
v-for=
"item in previewCodegen"
:key=
"item.filePath"
:label=
"item.filePath.substring(item.filePath.lastIndexOf('/') + 1)"
:name=
"item.filePath"
:key=
"item.filePath"
>
<el-button
text
type=
"primary"
class=
"float-right
"
@
click=
"copy(item.code)"
>
<el-button
class=
"float-right"
text
type=
"primary
"
@
click=
"copy(item.code)"
>
{{
t
(
'common.copy'
)
}}
</el-button>
<div
v-highlight
>
...
...
@@ -54,10 +54,11 @@
</div>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraCodegenPreviewCode"
setup
>
import
{
useClipboard
}
from
'@vueuse/core'
import
{
handleTree2
}
from
'@/utils/tree'
import
*
as
CodegenApi
from
'@/api/infra/codegen'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/infra/codegen/components/BasicInfoForm.vue
View file @
b9349157
...
...
@@ -3,12 +3,12 @@
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"表名称"
prop=
"tableName"
>
<el-input
placeholder=
"请输入仓库名称"
v-model=
"formData.tableName
"
/>
<el-input
v-model=
"formData.tableName"
placeholder=
"请输入仓库名称
"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"表描述"
prop=
"tableComment"
>
<el-input
placeholder=
"请输入"
v-model=
"formData.tableComment
"
/>
<el-input
v-model=
"formData.tableComment"
placeholder=
"请输入
"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
...
...
@@ -20,27 +20,27 @@
content=
"默认去除表名的前缀。如果存在重复,则需要手动添加前缀,避免 MyBatis 报 Alias 重复的问题。"
placement=
"top"
>
<Icon
icon=
"ep:question-filled"
class=
"
"
/>
<Icon
class=
""
icon=
"ep:question-filled
"
/>
</el-tooltip>
</span>
</
template
>
<el-input
placeholder=
"请输入"
v-model=
"formData.className
"
/>
<el-input
v-model=
"formData.className"
placeholder=
"请输入
"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"作者"
prop=
"author"
>
<el-input
placeholder=
"请输入"
v-model=
"formData.author
"
/>
<el-input
v-model=
"formData.author"
placeholder=
"请输入
"
/>
</el-form-item>
</el-col>
<el-col
:span=
"24"
>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
type=
"textarea"
:rows=
"3"
v-model=
"formData.remark
"
/>
<el-input
v-model=
"formData.remark"
:rows=
"3"
type=
"textarea
"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraCodegenBasicInfoForm"
setup
>
import
*
as
CodegenApi
from
'@/api/infra/codegen'
import
{
PropType
}
from
'vue'
...
...
src/views/infra/codegen/components/ColumInfoForm.vue
View file @
b9349157
<
template
>
<el-table
ref=
"dragTable"
:data=
"formData"
row-key=
"columnId"
:max-height=
"tableHeight
"
>
<el-table
ref=
"dragTable"
:data=
"formData"
:max-height=
"tableHeight"
row-key=
"columnId
"
>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"字段列名"
prop=
"columnName"
min-width=
"10%"
:show-overflow-tooltip=
"tru
e"
prop=
"columnNam
e"
/>
<el-table-column
label=
"字段描述"
min-width=
"10%"
>
<template
#
default=
"scope"
>
...
...
@@ -12,10 +12,10 @@
</
template
>
</el-table-column>
<el-table-column
:show-overflow-tooltip=
"true"
label=
"物理类型"
prop=
"dataType"
min-width=
"10%"
:show-overflow-tooltip=
"tru
e"
prop=
"dataTyp
e"
/>
<el-table-column
label=
"Java类型"
min-width=
"11%"
>
<
template
#
default=
"scope"
>
...
...
@@ -37,26 +37,26 @@
</el-table-column>
<el-table-column
label=
"插入"
min-width=
"4%"
>
<
template
#
default=
"scope"
>
<el-checkbox
true-label=
"true"
false-label=
"false"
v-model=
"scope.row.createOperation
"
/>
<el-checkbox
v-model=
"scope.row.createOperation"
false-label=
"false"
true-label=
"true
"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"编辑"
min-width=
"4%"
>
<
template
#
default=
"scope"
>
<el-checkbox
true-label=
"true"
false-label=
"false"
v-model=
"scope.row.updateOperation
"
/>
<el-checkbox
v-model=
"scope.row.updateOperation"
false-label=
"false"
true-label=
"true
"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"列表"
min-width=
"4%"
>
<
template
#
default=
"scope"
>
<el-checkbox
true-label=
"true"
false-label=
"false"
v-model=
"scope.row.listOperationResult"
false-label=
"false"
true-label=
"true"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"查询"
min-width=
"4%"
>
<
template
#
default=
"scope"
>
<el-checkbox
true-label=
"true"
false-label=
"false"
v-model=
"scope.row.listOperation
"
/>
<el-checkbox
v-model=
"scope.row.listOperation"
false-label=
"false"
true-label=
"true
"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"查询方式"
min-width=
"10%"
>
...
...
@@ -75,7 +75,7 @@
</el-table-column>
<el-table-column
label=
"允许空"
min-width=
"5%"
>
<
template
#
default=
"scope"
>
<el-checkbox
true-label=
"true"
false-label=
"false"
v-model=
"scope.row.nullabl
e"
/>
<el-checkbox
v-model=
"scope.row.nullable"
false-label=
"false"
true-label=
"tru
e"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"显示类型"
min-width=
"12%"
>
...
...
@@ -112,7 +112,7 @@
</el-table-column>
</el-table>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraCodegenColumInfoForm"
setup
>
import
{
PropType
}
from
'vue'
import
*
as
CodegenApi
from
'@/api/infra/codegen'
import
*
as
DictDataApi
from
'@/api/system/dict/dict.type'
...
...
src/views/infra/codegen/components/GenerateInfoForm.vue
View file @
b9349157
...
...
@@ -2,7 +2,7 @@
<el-form
ref=
"formRef"
:model=
"formData"
:rules=
"rules"
label-width=
"150px"
>
<el-row>
<el-col
:span=
"12"
>
<el-form-item
prop=
"templateType"
label=
"生成模板
"
>
<el-form-item
label=
"生成模板"
prop=
"templateType
"
>
<el-select
v-model=
"formData.templateType"
@
change=
"tplSelectChange"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_TEMPLATE_TYPE)"
...
...
@@ -14,7 +14,7 @@
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
prop=
"frontType"
label=
"前端类型
"
>
<el-form-item
label=
"前端类型"
prop=
"frontType
"
>
<el-select
v-model=
"formData.frontType"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_FRONT_TYPE)"
...
...
@@ -27,7 +27,7 @@
</el-col>
<el-col
:span=
"12"
>
<el-form-item
prop=
"scene"
label=
"生成场景
"
>
<el-form-item
label=
"生成场景"
prop=
"scene
"
>
<el-select
v-model=
"formData.scene"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.INFRA_CODEGEN_SCENE)"
...
...
@@ -50,11 +50,11 @@
</
template
>
<el-tree-select
v-model=
"formData.parentMenuId"
placeholder=
"请选择系统菜单"
node-key=
"id"
check-strictly
:data=
"menus"
:props=
"menuTreeProps"
check-strictly
node-key=
"id"
placeholder=
"请选择系统菜单"
/>
</el-form-item>
</el-col>
...
...
@@ -148,7 +148,7 @@
</el-form-item>
</el-col>
<el-col
:span=
"24"
v-if=
"formData.genType === '1'
"
>
<el-col
v-if=
"formData.genType === '1'"
:span=
"24
"
>
<el-form-item
prop=
"genPath"
>
<
template
#
label
>
<span>
...
...
@@ -291,8 +291,8 @@
</el-row>
</el-form>
</template>
<
script
setup
lang=
"ts"
>
import
{
getIntDictOptions
,
DICT_TYPE
}
from
'@/utils/dict'
<
script
lang=
"ts"
name=
"InfraCodegenGenerateInfoForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
handleTree
}
from
'@/utils/tree'
import
*
as
CodegenApi
from
'@/api/infra/codegen'
import
*
as
MenuApi
from
'@/api/system/menu'
...
...
src/views/infra/config/ConfigForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"参数分类"
prop=
"category"
>
<el-input
v-model=
"formData.category"
placeholder=
"请输入参数分类"
/>
...
...
@@ -31,16 +31,16 @@
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输入内容
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入内容"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraConfigForm"
setup
>
import
{
DICT_TYPE
,
getBoolDictOptions
}
from
'@/utils/dict'
import
*
as
ConfigApi
from
'@/api/infra/config'
...
...
src/views/infra/dataSourceConfig/DataSourceConfigForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"100px"
v-loading=
"formLoading"
>
<el-form-item
label=
"数据源名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入参数名称"
/>
...
...
@@ -21,12 +21,12 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraDataSourceConfigForm"
setup
>
import
*
as
DataSourceConfigApi
from
'@/api/infra/dataSourceConfig'
const
{
t
}
=
useI18n
()
// 国际化
...
...
src/views/infra/file/FileForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"上传文件"
v-model=
"dialogVisible
"
>
<Dialog
v-model=
"dialogVisible"
title=
"上传文件
"
>
<el-upload
ref=
"uploadRef"
v-model:file-list=
"fileList"
:action=
"url"
:auto-upload=
"false"
:data=
"data"
:disabled=
"formLoading"
:headers=
"uploadHeaders"
v-model:file-list=
"fileList"
drag
accept=
".jpg, .png, .gif"
:limit=
"1"
:on-success=
"submitFormSuccess"
:on-exceed=
"handleExceed"
:on-error=
"submitFormError"
:on-change=
"handleFileChange"
:auto-upload=
"false"
:disabled=
"formLoading"
:on-error=
"submitFormError"
:on-exceed=
"handleExceed"
:on-success=
"submitFormSuccess"
accept=
".jpg, .png, .gif"
drag
>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em>
</div>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<template
#
tip
>
<div
class=
"el-upload__tip"
style=
"color: red"
>
提示:仅允许导入 jpg、png、gif 格式文件!
...
...
@@ -25,13 +25,14 @@
</
template
>
</el-upload>
<
template
#
footer
>
<el-button
@
click=
"submitFileForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitFileForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraFileForm"
setup
>
import
{
getAccessToken
,
getTenantId
}
from
'@/utils/auth'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/infra/fileConfig/FileConfigForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"120px"
v-loading=
"formLoading"
>
<el-form-item
label=
"配置名"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入配置名"
/>
...
...
@@ -16,8 +16,8 @@
<el-form-item
label=
"存储器"
prop=
"storage"
>
<el-select
v-model=
"formData.storage"
placeholder=
"请选择存储器"
:disabled=
"formData.id !== undefined"
placeholder=
"请选择存储器"
>
<el-option
v-for=
"dict in getDictOptions(DICT_TYPE.INFRA_FILE_STORAGE)"
...
...
@@ -48,7 +48,7 @@
label=
"主机端口"
prop=
"config.port"
>
<el-input-number
:min=
"0"
v-model=
"formData.config.port
"
placeholder=
"请输入主机端口"
/>
<el-input-number
v-model=
"formData.config.port"
:min=
"0
"
placeholder=
"请输入主机端口"
/>
</el-form-item>
<el-form-item
v-if=
"formData.storage >= 11 && formData.storage
<
=
12
"
...
...
@@ -93,14 +93,15 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraFileConfigForm"
setup
>
import
{
DICT_TYPE
,
getDictOptions
}
from
'@/utils/dict'
import
*
as
FileConfigApi
from
'@/api/infra/fileConfig'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/infra/job/JobDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"任务详细"
v-model=
"dialogVisible
"
width=
"700px"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
title=
"任务详细
"
width=
"700px"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"任务编号"
min-width=
"60"
>
{{
detailData
.
id
}}
</el-descriptions-item>
...
...
@@ -42,7 +42,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraJobDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
JobApi
from
'@/api/infra/job'
...
...
src/views/infra/job/logger/JobLogDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"任务详细"
v-model=
"dialogVisible
"
width=
"700px"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
title=
"任务详细
"
width=
"700px"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"日志编号"
min-width=
"60"
>
{{
detailData
.
id
}}
</el-descriptions-item>
...
...
@@ -31,7 +31,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"JobLogDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
JobLogApi
from
'@/api/infra/jobLog'
...
...
src/views/infra/webSocket/index.vue
View file @
b9349157
<
template
>
<div
class=
"flex"
>
<el-card
class=
"w-1/2"
:gutter=
"1
2"
shadow=
"always"
>
<el-card
:gutter=
"12"
class=
"w-1/
2"
shadow=
"always"
>
<template
#
header
>
<div
class=
"card-header"
>
<span>
连接
</span>
...
...
@@ -14,7 +14,7 @@
<div
class=
"flex"
>
<el-input
v-model=
"server"
disabled
>
<
template
#
prepend
>
服务地址
</
template
>
<
template
#
prepend
>
服务地址
</
template
>
</el-input>
<el-button
:type=
"getIsOpen ? 'danger' : 'primary'"
@
click=
"toggle"
>
{{ getIsOpen ? '关闭连接' : '开启连接' }}
...
...
@@ -25,15 +25,15 @@
<el-input
v-model=
"sendValue"
:autosize=
"{ minRows: 2, maxRows: 4 }"
type=
"textarea"
:disabled=
"!getIsOpen"
clearable
type=
"textarea"
/>
<el-button
type=
"primary"
block
class=
"mt-4"
:disabled=
"!getIsOpen
"
@
click=
"handlerSend"
>
<el-button
:disabled=
"!getIsOpen"
block
class=
"mt-4"
type=
"primary
"
@
click=
"handlerSend"
>
发送
</el-button>
</el-card>
<el-card
class=
"w-1/2"
:gutter=
"1
2"
shadow=
"always"
>
<el-card
:gutter=
"12"
class=
"w-1/
2"
shadow=
"always"
>
<
template
#
header
>
<div
class=
"card-header"
>
<span>
消息记录
</span>
...
...
@@ -41,7 +41,7 @@
</
template
>
<div
class=
"max-h-80 overflow-auto"
>
<ul>
<li
v-for=
"item in getList"
class=
"mt-2"
:key=
"item.time
"
>
<li
v-for=
"item in getList"
:key=
"item.time"
class=
"mt-2
"
>
<div
class=
"flex items-center"
>
<span
class=
"mr-2 text-primary font-medium"
>
收到消息:
</span>
<span>
{{ formatDate(item.time) }}
</span>
...
...
@@ -55,7 +55,7 @@
</el-card>
</div>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"InfraWebSocket"
setup
>
import
{
formatDate
}
from
'@/utils/formatTime'
import
{
useUserStore
}
from
'@/store/modules/user'
import
{
useWebSocket
}
from
'@vueuse/core'
...
...
src/views/mall/product/property/PropertyForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入名称"
/>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输入内容
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入内容"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ProductPropertyForm"
setup
>
import
*
as
PropertyApi
from
'@/api/mall/product/property'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/mall/product/property/value/ValueForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"属性编号"
prop=
"category"
>
<el-input
v-model=
"formData.propertyId"
disabled=
""
/>
...
...
@@ -14,17 +14,18 @@
<el-input
v-model=
"formData.name"
placeholder=
"请输入名称"
/>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输入内容
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入内容"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"ProductPropertyValueForm"
setup
>
import
*
as
PropertyApi
from
'@/api/mall/product/property'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/mp/account/AccountForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"rules"
label-width=
"120px"
v-loading=
"formLoading"
>
<el-form-item
label=
"名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入名称"
/>
...
...
@@ -59,17 +59,18 @@
<el-input
v-model=
"formData.aesKey"
placeholder=
"请输入消息加解密密钥"
/>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
type=
"textarea"
v-model=
"formData.remark"
placeholder=
"请输入备注
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入备注"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<
template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"MpAccountForm"
setup
>
import
*
as
AccountApi
from
'@/api/mp/account'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/mp/components/wx-editor/WxEditor.vue
View file @
b9349157
<
script
setup
>
import
{
re
f
,
reactive
}
from
'vue'
<
script
name=
"WxEditor"
setup
>
import
{
re
active
,
ref
}
from
'vue'
import
{
QuillEditor
}
from
'@vueup/vue-quill'
import
'@vueup/vue-quill/dist/vue-quill.snow.css'
import
{
getAccessToken
}
from
'@/utils/auth'
...
...
@@ -88,21 +88,21 @@ const uploadError = () => {
<div
v-loading=
"loading"
element-loading-text=
"请稍等,图片上传中"
>
<!-- 图片上传组件辅助-->
<el-upload
class=
"avatar-uploader"
name=
"file"
:action=
"actionUrl"
:headers=
"headers"
:show-file-list=
"false"
:before-upload=
"beforeUpload"
:data=
"uploadData"
:
on-success=
"uploadSucces
s"
:
headers=
"header
s"
:on-error=
"uploadError"
:before-upload=
"beforeUpload"
:on-success=
"uploadSuccess"
:show-file-list=
"false"
class=
"avatar-uploader"
name=
"file"
/>
<QuillEditor
class=
"editor"
v-model=
"content"
ref=
"quillEditorRef"
v-model=
"content"
:options=
"editorOptions"
class=
"editor"
@
change=
"onEditorChange($event)"
/>
</div>
...
...
src/views/mp/components/wx-news/main.vue
View file @
b9349157
...
...
@@ -9,13 +9,13 @@
<div
class=
"news-home"
>
<div
v-for=
"(article, index) in articles"
:key=
"index"
class=
"news-div"
>
<!-- 头条 -->
<a
target=
"_blank"
:href=
"article.url"
v-if=
"index === 0
"
>
<a
v-if=
"index === 0"
:href=
"article.url"
target=
"_blank
"
>
<div
class=
"news-main"
>
<div
class=
"news-content"
>
<el-image
:src=
"article.picUrl"
class=
"material-img"
style=
"width: 100%; height: 120px"
:src=
"article.picUrl"
/>
<div
class=
"news-content-title"
>
<span>
{{
article
.
title
}}
</span>
...
...
@@ -24,12 +24,12 @@
</div>
</a>
<!-- 二条/三条等等 -->
<a
target=
"_blank"
:href=
"article.url"
v-else
>
<a
v-else
:href=
"article.url"
target=
"_blank"
>
<div
class=
"news-main-item"
>
<div
class=
"news-content-item"
>
<div
class=
"news-content-item-title"
>
{{
article
.
title
}}
</div>
<div
class=
"news-content-item-img"
>
<img
class=
"material-img"
:src=
"article.picUrl
"
height=
"100%"
/>
<img
:src=
"article.picUrl"
class=
"material-img
"
height=
"100%"
/>
</div>
</div>
</div>
...
...
@@ -38,7 +38,7 @@
</div>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"WxNews"
setup
>
const
props
=
defineProps
({
articles
:
{
type
:
Array
,
...
...
@@ -57,15 +57,18 @@ defineExpose({
width
:
100%
;
margin
:
auto
;
}
.news-main
{
width
:
100%
;
margin
:
auto
;
}
.news-content
{
background-color
:
#acadae
;
width
:
100%
;
position
:
relative
;
}
.news-content-title
{
display
:
inline-block
;
font-size
:
12px
;
...
...
@@ -80,14 +83,17 @@ defineExpose({
white-space
:
normal
;
box-sizing
:
unset
!important
;
}
.news-main-item
{
background-color
:
#ffffff
;
padding
:
5px
0
;
border-top
:
1px
solid
#eaeaea
;
}
.news-content-item
{
position
:
relative
;
}
.news-content-item-title
{
display
:
inline-block
;
font-size
:
10px
;
...
...
@@ -95,12 +101,14 @@ defineExpose({
margin-left
:
1%
;
white-space
:
normal
;
}
.news-content-item-img
{
display
:
inline-block
;
width
:
25%
;
background-color
:
#acadae
;
margin-right
:
1%
;
}
.material-img
{
width
:
100%
;
}
...
...
src/views/mp/tag/TagForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"标签名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入标签名称"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"MpTagForm"
setup
>
import
*
as
MpTagApi
from
'@/api/mp/tag'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/mp/user/UserForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"修改"
v-model=
"dialogVisible
"
>
<Dialog
v-model=
"dialogVisible"
title=
"修改
"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"昵称"
prop=
"nickname"
>
<el-input
v-model=
"formData.nickname"
placeholder=
"请输入昵称"
/>
...
...
@@ -14,7 +14,7 @@
<el-input
v-model=
"formData.remark"
placeholder=
"请输入备注"
/>
</el-form-item>
<el-form-item
label=
"标签"
prop=
"tagIds"
>
<el-select
v-model=
"formData.tagIds"
multiple
clearab
le
placeholder=
"请选择标签"
>
<el-select
v-model=
"formData.tagIds"
clearable
multip
le
placeholder=
"请选择标签"
>
<el-option
v-for=
"item in tagList"
:key=
"item.tagId"
...
...
@@ -25,14 +25,15 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"MpUserForm"
setup
>
import
*
as
MpTagApi
from
'@/api/mp/tag'
import
*
as
MpUserApi
from
'@/api/mp/user'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/pay/app/AppForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"160px"
v-loading=
"formLoading"
>
<el-form-item
label=
"应用名"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入应用名"
/>
...
...
@@ -42,16 +42,17 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"PayAppForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
*
as
AppApi
from
'@/api/pay/app'
import
*
as
MerchantApi
from
'@/api/pay/merchant'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/pay/merchant/MerchantForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
>
<el-form-item
label=
"商户全称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入商户全称"
/>
...
...
@@ -8,7 +8,7 @@
<el-input
v-model=
"formData.shortName"
placeholder=
"请输入商户简称"
/>
</el-form-item>
<el-form-item
label=
"开启状态"
prop=
"status"
>
<el-select
v-model=
"formData.status"
placeholder=
"请选择状态"
clearable
>
<el-select
v-model=
"formData.status"
clearable
placeholder=
"请选择状态"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
...
...
@@ -18,19 +18,20 @@
</el-select>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
type=
"textarea"
v-model=
"formData.remark"
placeholder=
"请输入备注
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入备注"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"PayMerchantForm"
setup
>
import
*
as
MerchantApi
from
'@/api/pay/merchant'
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/pay/order/OrderDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible
"
width=
"50%"
>
<Dialog
v-model=
"dialogVisible"
title=
"详情
"
width=
"50%"
>
<el-descriptions
:column=
"2"
>
<el-descriptions-item
label=
"商户名称"
>
{{
detailData
.
merchantName
}}
</el-descriptions-item>
<el-descriptions-item
label=
"应用名称"
>
{{
detailData
.
appName
}}
</el-descriptions-item>
...
...
@@ -66,7 +66,7 @@
</el-descriptions-item>
</el-descriptions>
<el-divider
/>
<el-descriptions
:column=
"1"
direction=
"vertical"
border
>
<el-descriptions
:column=
"1"
border
direction=
"vertical"
>
<el-descriptions-item
label=
"商品描述"
>
{{
detailData
.
body
}}
</el-descriptions-item>
...
...
@@ -78,7 +78,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
name=
"orderForm"
>
<
script
lang=
"ts"
name=
"PayOrderDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
*
as
OrderApi
from
'@/api/pay/order'
import
{
formatDate
}
from
'@/utils/formatTime'
...
...
src/views/pay/refund/RefundDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible
"
width=
"50%"
>
<Dialog
v-model=
"dialogVisible"
title=
"详情
"
width=
"50%"
>
<el-descriptions
:column=
"2"
>
<el-descriptions-item
label=
"商户名称"
>
{{
detailData
.
merchantName
}}
</el-descriptions-item>
<el-descriptions-item
label=
"应用名称"
>
{{
detailData
.
appName
}}
</el-descriptions-item>
...
...
@@ -76,7 +76,7 @@
</el-descriptions-item>
</el-descriptions>
<br
/>
<el-descriptions
:column=
"1"
direction=
"vertical"
border
>
<el-descriptions
:column=
"1"
border
direction=
"vertical"
>
<el-descriptions-item
label=
"渠道额外参数"
>
{{
detailData
.
channelExtras
}}
</el-descriptions-item>
...
...
@@ -84,7 +84,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
name=
"refundForm"
>
<
script
lang=
"ts"
name=
"PayRefundDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
RefundApi
from
'@/api/pay/refund'
...
...
src/views/system/area/AreaForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"IP 查询"
v-model=
"dialogVisible
"
>
<Dialog
v-model=
"dialogVisible"
title=
"IP 查询
"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"IP"
prop=
"ip"
>
<el-input
v-model=
"formData.ip"
placeholder=
"请输入 IP 地址"
/>
</el-form-item>
<el-form-item
label=
"地址"
prop=
"result"
>
<el-input
v-model=
"formData.result"
readonly
placeholder=
"展示查询 IP 结果"
/>
<el-input
v-model=
"formData.result"
placeholder=
"展示查询 IP 结果"
readonly
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemAreaForm"
setup
>
import
*
as
AreaApi
from
'@/api/system/area'
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
...
src/views/system/dept/DeptForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"上级部门"
prop=
"parentId"
>
<el-tree-select
v-model=
"formData.parentId"
:data=
"deptTree"
:props=
"defaultProps"
value-key=
"deptId"
placeholder=
"请选择上级部门"
check-strictly
default-expand-all
placeholder=
"请选择上级部门"
value-key=
"deptId"
/>
</el-form-item>
<el-form-item
label=
"部门名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入部门名称"
/>
</el-form-item>
<el-form-item
label=
"显示排序"
prop=
"sort"
>
<el-input-number
v-model=
"formData.sort"
controls-position=
"right"
:min=
"0
"
/>
<el-input-number
v-model=
"formData.sort"
:min=
"0"
controls-position=
"right
"
/>
</el-form-item>
<el-form-item
label=
"负责人"
prop=
"leaderUserId"
>
<el-select
v-model=
"formData.leaderUserId"
placeholder=
"请输入负责人"
clearable
>
<el-select
v-model=
"formData.leaderUserId"
clearable
placeholder=
"请输入负责人"
>
<el-option
v-for=
"item in userList"
:key=
"item.id"
...
...
@@ -35,13 +35,13 @@
</el-select>
</el-form-item>
<el-form-item
label=
"联系电话"
prop=
"phone"
>
<el-input
v-model=
"formData.phone"
placeholder=
"请输入联系电话"
maxlength=
"11
"
/>
<el-input
v-model=
"formData.phone"
maxlength=
"11"
placeholder=
"请输入联系电话
"
/>
</el-form-item>
<el-form-item
label=
"邮箱"
prop=
"email"
>
<el-input
v-model=
"formData.email"
placeholder=
"请输入邮箱"
maxlength=
"50
"
/>
<el-input
v-model=
"formData.email"
maxlength=
"50"
placeholder=
"请输入邮箱
"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-select
v-model=
"formData.status"
placeholder=
"请选择状态"
clearable
>
<el-select
v-model=
"formData.status"
clearable
placeholder=
"请选择状态"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
...
...
@@ -57,12 +57,13 @@
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemDeptForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
handleTree
,
defaultProps
}
from
'@/utils/tree'
import
{
defaultProps
,
handleTree
}
from
'@/utils/tree'
import
*
as
DeptApi
from
'@/api/system/dept'
import
*
as
UserApi
from
'@/api/system/user'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/dict/DictTypeForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"字典名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入字典名称"
/>
</el-form-item>
<el-form-item
label=
"字典类型"
prop=
"type"
>
<el-input
:disabled=
"typeof formData.id !== 'undefined'"
v-model=
"formData.type"
:disabled=
"typeof formData.id !== 'undefined'"
placeholder=
"请输入参数名称"
/>
</el-form-item>
...
...
@@ -29,19 +29,20 @@
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输入内容
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入内容"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemDictTypeForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
*
as
DictTypeApi
from
'@/api/system/dict/dict.type'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/dict/data/DictDataForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"字典类型"
prop=
"type"
>
<el-input
:disabled=
"typeof formData.id !== 'undefined'"
v-model=
"formData.dictType"
:disabled=
"typeof formData.id !== 'undefined'"
placeholder=
"请输入参数名称"
/>
</el-form-item>
...
...
@@ -21,7 +21,7 @@
<el-input
v-model=
"formData.value"
placeholder=
"请输入数据键值"
/>
</el-form-item>
<el-form-item
label=
"显示排序"
prop=
"sort"
>
<el-input-number
v-model=
"formData.sort"
controls-position=
"right"
:min=
"0
"
/>
<el-input-number
v-model=
"formData.sort"
:min=
"0"
controls-position=
"right
"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-radio-group
v-model=
"formData.status"
>
...
...
@@ -48,19 +48,20 @@
<el-input
v-model=
"formData.cssClass"
placeholder=
"请输入 CSS Class"
/>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输入内容
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入内容"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemDictDataForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
*
as
DictDataApi
from
'@/api/system/dict/dict.data'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/errorCode/ErrorCodeForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"100px"
v-loading=
"formLoading"
>
<el-form-item
label=
"应用名"
prop=
"applicationName"
>
<el-input
v-model=
"formData.applicationName"
placeholder=
"请输入应用名"
clearable
/>
<el-input
v-model=
"formData.applicationName"
clearable
placeholder=
"请输入应用名"
/>
</el-form-item>
<el-form-item
label=
"错误码编码"
prop=
"code"
>
<el-input
v-model=
"formData.code"
placeholder=
"请输入错误码编码"
clearable
/>
<el-input
v-model=
"formData.code"
clearable
placeholder=
"请输入错误码编码"
/>
</el-form-item>
<el-form-item
label=
"错误码提示"
prop=
"message"
>
<el-input
v-model=
"formData.message"
placeholder=
"请输入错误码提示"
clearable
/>
<el-input
v-model=
"formData.message"
clearable
placeholder=
"请输入错误码提示"
/>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"memo"
>
<el-input
v-model=
"formData.memo"
placeholder=
"请输入备注"
clearable
/>
<el-input
v-model=
"formData.memo"
clearable
placeholder=
"请输入备注"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemErrorCodeForm"
setup
>
import
*
as
ErrorCodeApi
from
'@/api/system/errorCode'
const
{
t
}
=
useI18n
()
// 国际化
...
...
src/views/system/loginlog/LoginLogDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible
"
width=
"800"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
title=
"详情
"
width=
"800"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"日志编号"
min-width=
"120"
>
{{
detailData
.
id
}}
</el-descriptions-item>
...
...
@@ -25,7 +25,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemLoginLogDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
LoginLogApi
from
'@/api/system/loginLog'
...
...
src/views/system/mail/account/MailAccountDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible
"
>
<Descriptions
:
schema=
"allSchemas.detailSchema"
:data=
"detailDat
a"
/>
<Dialog
v-model=
"dialogVisible"
title=
"详情
"
>
<Descriptions
:
data=
"detailData"
:schema=
"allSchemas.detailSchem
a"
/>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemMailAccountDetail"
setup
>
import
*
as
MailAccountApi
from
'@/api/system/mail/account'
import
{
allSchemas
}
from
'./account.data'
...
...
src/views/system/mail/account/MailAccountForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Form
ref=
"formRef"
:schema=
"allSchemas.formSchema"
:rules=
"rules"
v-loading=
"formLoading
"
/>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<Form
ref=
"formRef"
v-loading=
"formLoading"
:rules=
"rules"
:schema=
"allSchemas.formSchema
"
/>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemMailAccountForm"
setup
>
import
*
as
MailAccountApi
from
'@/api/system/mail/account'
import
{
rules
,
allSchemas
}
from
'./account.data'
import
{
allSchemas
,
rules
}
from
'./account.data'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/mail/log/MailLogDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible"
:scroll=
"true"
:max-height=
"500
"
>
<Descriptions
:
schema=
"allSchemas.detailSchema"
:data=
"detailDat
a"
>
<Dialog
v-model=
"dialogVisible"
:max-height=
"500"
:scroll=
"true"
title=
"详情
"
>
<Descriptions
:
data=
"detailData"
:schema=
"allSchemas.detailSchem
a"
>
<!-- 展示 HTML 内容 -->
<template
#
templateContent=
"
{ row }">
<div
v-html=
"row.templateContent"
></div>
...
...
@@ -8,7 +8,7 @@
</Descriptions>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemMailLogDetail"
setup
>
import
*
as
MailLogApi
from
'@/api/system/mail/log'
import
{
allSchemas
}
from
'./log.data'
...
...
src/views/system/mail/template/MailTemplateForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisible"
:max-height=
"500"
:scroll=
"true"
:title=
"dialogTitle"
:width=
"800"
:max-height=
"500"
>
<Form
ref=
"formRef"
:schema=
"allSchemas.formSchema"
:rules=
"rules"
v-loading=
"formLoading
"
/>
<Form
ref=
"formRef"
v-loading=
"formLoading"
:rules=
"rules"
:schema=
"allSchemas.formSchema
"
/>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemMailTemplateForm"
setup
>
import
*
as
MailTemplateApi
from
'@/api/system/mail/template'
import
{
allSchemas
,
rules
}
from
'./template.data'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/mail/template/MailTemplateSendForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"测试"
v-model=
"dialogVisible
"
>
<Dialog
v-model=
"dialogVisible"
title=
"测试
"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"120px"
v-loading=
"formLoading"
>
<el-form-item
label=
"模板内容"
prop=
"content"
>
<Editor
:model-value=
"formData.content"
readonly
height=
"150px"
/>
<Editor
:model-value=
"formData.content"
height=
"150px"
readonly
/>
</el-form-item>
<el-form-item
label=
"收件邮箱"
prop=
"mail"
>
<el-input
v-model=
"formData.mail"
placeholder=
"请输入收件邮箱"
/>
...
...
@@ -26,13 +26,14 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemMailTemplateSendForm"
setup
>
import
*
as
MailTemplateApi
from
'@/api/system/mail/template'
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
...
src/views/system/menu/MenuForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"100px"
v-loading=
"formLoading"
>
<el-form-item
label=
"上级菜单"
>
<el-tree-select
node-key=
"id"
v-model=
"formData.parentId"
:props=
"defaultProps"
:data=
"menuTree"
:default-expanded-keys=
"[0]"
:props=
"defaultProps"
check-strictly
node-key=
"id"
/>
</el-form-item>
<el-form-item
label=
"菜单名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入菜单名称"
clearable
/>
<el-input
v-model=
"formData.name"
clearable
placeholder=
"请输入菜单名称"
/>
</el-form-item>
<el-form-item
label=
"菜单类型"
prop=
"type"
>
<el-radio-group
v-model=
"formData.type"
>
...
...
@@ -31,35 +31,35 @@
</el-radio-button>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"菜单图标"
v-if=
"formData.type !== 3
"
>
<el-form-item
v-if=
"formData.type !== 3"
label=
"菜单图标
"
>
<IconSelect
v-model=
"formData.icon"
clearable
/>
</el-form-item>
<el-form-item
label=
"路由地址"
prop=
"path"
v-if=
"formData.type !== 3
"
>
<el-form-item
v-if=
"formData.type !== 3"
label=
"路由地址"
prop=
"path
"
>
<template
#
label
>
<Tooltip
titel=
"路由地址"
message=
"访问的路由地址,如:`user`。如需外网地址时,则以 `http(s)://` 开头"
titel=
"路由地址"
/>
</
template
>
<el-input
v-model=
"formData.path"
placeholder=
"请输入路由地址"
clearable
/>
<el-input
v-model=
"formData.path"
clearable
placeholder=
"请输入路由地址"
/>
</el-form-item>
<el-form-item
label=
"组件地址"
prop=
"component"
v-if=
"formData.type === 2
"
>
<el-input
v-model=
"formData.component"
placeholder=
"例如说:system/user/index"
clearable
/>
<el-form-item
v-if=
"formData.type === 2"
label=
"组件地址"
prop=
"component
"
>
<el-input
v-model=
"formData.component"
clearable
placeholder=
"例如说:system/user/index"
/>
</el-form-item>
<el-form-item
label=
"组件名字"
prop=
"componentName"
v-if=
"formData.type === 2
"
>
<el-input
v-model=
"formData.componentName"
placeholder=
"例如说:SystemUser"
clearable
/>
<el-form-item
v-if=
"formData.type === 2"
label=
"组件名字"
prop=
"componentName
"
>
<el-input
v-model=
"formData.componentName"
clearable
placeholder=
"例如说:SystemUser"
/>
</el-form-item>
<el-form-item
label=
"权限标识"
prop=
"permission"
v-if=
"formData.type !== 1
"
>
<el-form-item
v-if=
"formData.type !== 1"
label=
"权限标识"
prop=
"permission
"
>
<
template
#
label
>
<Tooltip
titel=
"权限标识"
message=
"Controller 方法上的权限字符,如:@PreAuthorize(`@ss.hasPermission('system:user:list')`)"
titel=
"权限标识"
/>
</
template
>
<el-input
v-model=
"formData.permission"
placeholder=
"请输入权限标识"
clearable
/>
<el-input
v-model=
"formData.permission"
clearable
placeholder=
"请输入权限标识"
/>
</el-form-item>
<el-form-item
label=
"显示排序"
prop=
"sort"
>
<el-input-number
v-model=
"formData.sort"
controls-position=
"right"
:min=
"0"
clearable
/>
<el-input-number
v-model=
"formData.sort"
:min=
"0"
clearable
controls-position=
"right"
/>
</el-form-item>
<el-form-item
label=
"菜单状态"
prop=
"status"
>
<el-radio-group
v-model=
"formData.status"
>
...
...
@@ -72,52 +72,53 @@
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"显示状态"
prop=
"visible"
v-if=
"formData.type !== 3
"
>
<el-form-item
v-if=
"formData.type !== 3"
label=
"显示状态"
prop=
"visible
"
>
<
template
#
label
>
<Tooltip
titel=
"显示状态"
message=
"选择隐藏时,路由将不会出现在侧边栏,但仍然可以访问
"
/>
<Tooltip
message=
"选择隐藏时,路由将不会出现在侧边栏,但仍然可以访问"
titel=
"显示状态
"
/>
</
template
>
<el-radio-group
v-model=
"formData.visible"
>
<el-radio
border
key=
"true"
:label=
"true"
>
显示
</el-radio>
<el-radio
border
key=
"false"
:label=
"false"
>
隐藏
</el-radio>
<el-radio
key=
"true"
:label=
"true"
border
>
显示
</el-radio>
<el-radio
key=
"false"
:label=
"false"
border
>
隐藏
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"总是显示"
prop=
"alwaysShow"
v-if=
"formData.type !== 3
"
>
<el-form-item
v-if=
"formData.type !== 3"
label=
"总是显示"
prop=
"alwaysShow
"
>
<
template
#
label
>
<Tooltip
titel=
"总是显示"
message=
"选择不是时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单"
titel=
"总是显示"
/>
</
template
>
<el-radio-group
v-model=
"formData.alwaysShow"
>
<el-radio
border
key=
"true"
:label=
"true"
>
总是
</el-radio>
<el-radio
border
key=
"false"
:label=
"false"
>
不是
</el-radio>
<el-radio
key=
"true"
:label=
"true"
border
>
总是
</el-radio>
<el-radio
key=
"false"
:label=
"false"
border
>
不是
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"缓存状态"
prop=
"keepAlive"
v-if=
"formData.type === 2
"
>
<el-form-item
v-if=
"formData.type === 2"
label=
"缓存状态"
prop=
"keepAlive
"
>
<
template
#
label
>
<Tooltip
titel=
"缓存状态"
message=
"选择缓存时,则会被 `keep-alive` 缓存,必须填写「组件名称」字段"
titel=
"缓存状态"
/>
</
template
>
<el-radio-group
v-model=
"formData.keepAlive"
>
<el-radio
border
key=
"true"
:label=
"true"
>
缓存
</el-radio>
<el-radio
border
key=
"false"
:label=
"false"
>
不缓存
</el-radio>
<el-radio
key=
"true"
:label=
"true"
border
>
缓存
</el-radio>
<el-radio
key=
"false"
:label=
"false"
border
>
不缓存
</el-radio>
</el-radio-group>
</el-form-item>
</el-form>
<
template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemMenuForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
*
as
MenuApi
from
'@/api/system/menu'
import
{
CACHE_KEY
,
useCache
}
from
'@/hooks/web/useCache'
import
{
SystemMenuTypeEnum
,
CommonStatusEnum
}
from
'@/utils/constants'
import
{
handleTree
,
defaultProps
}
from
'@/utils/tree'
import
{
CommonStatusEnum
,
SystemMenuTypeEnum
}
from
'@/utils/constants'
import
{
defaultProps
,
handleTree
}
from
'@/utils/tree'
const
{
wsCache
}
=
useCache
()
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/notice/NoticeForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
width=
"800"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
width=
"800"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"公告标题"
prop=
"title"
>
<el-input
v-model=
"formData.title"
placeholder=
"请输入公告标题"
/>
...
...
@@ -14,7 +14,7 @@
<Editor
:model-value=
"formData.content"
height=
"150px"
/>
</el-form-item>
<el-form-item
label=
"公告类型"
prop=
"type"
>
<el-select
v-model=
"formData.type"
placeholder=
"请选择公告类型"
clearable
>
<el-select
v-model=
"formData.type"
clearable
placeholder=
"请选择公告类型"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.SYSTEM_NOTICE_TYPE)"
:key=
"parseInt(dict.value)"
...
...
@@ -24,7 +24,7 @@
</el-select>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-select
v-model=
"formData.status"
placeholder=
"请选择状态"
clearable
>
<el-select
v-model=
"formData.status"
clearable
placeholder=
"请选择状态"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"parseInt(dict.value)"
...
...
@@ -34,19 +34,20 @@
</el-select>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输备注
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输备注"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemNoticeForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
*
as
NoticeApi
from
'@/api/system/notice'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/notify/message/NotifyMessageDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible"
:scroll=
"true"
:max-height=
"500
"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
:max-height=
"500"
:scroll=
"true"
title=
"详情
"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"编号"
min-width=
"120"
>
{{
detailData
.
id
}}
</el-descriptions-item>
...
...
@@ -40,7 +40,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemNotifyMessageDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
NotifyMessageApi
from
'@/api/system/notify/message'
...
...
src/views/system/notify/my/MyNotifyMessageDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"消息详情"
v-model=
"dialogVisible"
:scroll=
"true"
:max-height=
"500
"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
:max-height=
"500"
:scroll=
"true"
title=
"消息详情
"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"发送人"
>
{{
detailData
.
templateNickname
}}
</el-descriptions-item>
...
...
@@ -13,7 +13,7 @@
<el-descriptions-item
label=
"是否已读"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_BOOLEAN_STRING"
:value=
"detailData.readStatus"
/>
</el-descriptions-item>
<el-descriptions-item
label=
"阅读时间"
v-if=
"detailData.readStatus
"
>
<el-descriptions-item
v-if=
"detailData.readStatus"
label=
"阅读时间
"
>
{{
formatDate
(
detailData
.
readTime
)
}}
</el-descriptions-item>
<el-descriptions-item
label=
"内容"
>
...
...
@@ -22,7 +22,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"MyNotifyMessageDetailDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
NotifyMessageApi
from
'@/api/system/notify/message'
...
...
src/views/system/oauth2/client/ClientForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisible"
scroll
max-height=
"500px"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTitle"
max-height=
"500px"
scroll
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"160px"
v-loading=
"formLoading"
>
<el-form-item
label=
"客户端编号"
prop=
"secret"
>
<el-input
v-model=
"formData.clientId"
placeholder=
"请输入客户端编号"
/>
...
...
@@ -20,7 +20,7 @@
<UploadImg
v-model=
"formData.logo"
:limit=
"1"
/>
</el-form-item>
<el-form-item
label=
"应用描述"
>
<el-input
type=
"textarea"
v-model=
"formData.description"
placeholder=
"请输入应用名
"
/>
<el-input
v-model=
"formData.description"
placeholder=
"请输入应用名"
type=
"textarea
"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-radio-group
v-model=
"formData.status"
>
...
...
@@ -42,8 +42,8 @@
<el-form-item
label=
"授权类型"
prop=
"authorizedGrantTypes"
>
<el-select
v-model=
"formData.authorizedGrantTypes"
multiple
filterable
multiple
placeholder=
"请输入授权类型"
style=
"width: 500px"
>
...
...
@@ -58,9 +58,9 @@
<el-form-item
label=
"授权范围"
prop=
"scopes"
>
<el-select
v-model=
"formData.scopes"
multiple
filterable
allow-create
filterable
multiple
placeholder=
"请输入授权范围"
style=
"width: 500px"
>
...
...
@@ -70,8 +70,8 @@
<el-form-item
label=
"自动授权范围"
prop=
"autoApproveScopes"
>
<el-select
v-model=
"formData.autoApproveScopes"
multiple
filterable
multiple
placeholder=
"请输入授权范围"
style=
"width: 500px"
>
...
...
@@ -81,9 +81,9 @@
<el-form-item
label=
"可重定向的 URI 地址"
prop=
"redirectUris"
>
<el-select
v-model=
"formData.redirectUris"
multiple
filterable
allow-create
filterable
multiple
placeholder=
"请输入可重定向的 URI 地址"
style=
"width: 500px"
>
...
...
@@ -98,9 +98,9 @@
<el-form-item
label=
"权限"
prop=
"authorities"
>
<el-select
v-model=
"formData.authorities"
multiple
filterable
allow-create
filterable
multiple
placeholder=
"请输入权限"
style=
"width: 500px"
>
...
...
@@ -115,9 +115,9 @@
<el-form-item
label=
"资源"
prop=
"resourceIds"
>
<el-select
v-model=
"formData.resourceIds"
multiple
filterable
allow-create
filterable
multiple
placeholder=
"请输入资源"
style=
"width: 500px"
>
...
...
@@ -131,22 +131,23 @@
</el-form-item>
<el-form-item
label=
"附加信息"
prop=
"additionalInformation"
>
<el-input
type=
"textarea"
v-model=
"formData.additionalInformation"
placeholder=
"请输入附加信息,JSON 格式数据"
type=
"textarea"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemOAuth2ClientForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
*
as
ClientApi
from
'@/api/system/oauth2/client'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/operatelog/OperateLogDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible"
:scroll=
"true"
:max-height=
"500
"
width=
"800"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
:max-height=
"500"
:scroll=
"true"
title=
"详情
"
width=
"800"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"日志主键"
min-width=
"120"
>
{{
detailData
.
id
}}
</el-descriptions-item>
...
...
@@ -25,10 +25,10 @@
<el-descriptions-item
label=
"操作名"
>
{{
detailData
.
name
}}
</el-descriptions-item>
<el-descriptions-item
label=
"操作内容"
v-if=
"detailData.content
"
>
<el-descriptions-item
v-if=
"detailData.content"
label=
"操作内容
"
>
{{
detailData
.
content
}}
</el-descriptions-item>
<el-descriptions-item
label=
"操作拓展参数"
v-if=
"detailData.exts
"
>
<el-descriptions-item
v-if=
"detailData.exts"
label=
"操作拓展参数
"
>
{{
detailData
.
exts
}}
</el-descriptions-item>
<el-descriptions-item
label=
"请求 URL"
>
...
...
@@ -48,16 +48,16 @@
<div
v-if=
"detailData.resultCode === 0"
>
正常
</div>
<div
v-else
>
失败(
{{
detailData
.
resultCode
}}
)
</div>
</el-descriptions-item>
<el-descriptions-item
label=
"操作结果"
v-if=
"detailData.resultCode === 0
"
>
<el-descriptions-item
v-if=
"detailData.resultCode === 0"
label=
"操作结果
"
>
{{
detailData
.
resultData
}}
</el-descriptions-item>
<el-descriptions-item
label=
"失败提示"
v-if=
"detailData.resultCode > 0
"
>
<el-descriptions-item
v-if=
"detailData.resultCode > 0"
label=
"失败提示
"
>
{{
detailData
.
resultMsg
}}
</el-descriptions-item>
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemOperateLogDetail"
setup
>
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
OperateLogApi
from
'@/api/system/operatelog'
...
...
src/views/system/post/PostForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
width=
"800"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
width=
"800"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"岗位标题"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入岗位标题"
/>
...
...
@@ -17,7 +17,7 @@
<el-input
v-model=
"formData.sort"
placeholder=
"请输入岗位顺序"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-select
v-model=
"formData.status"
placeholder=
"请选择状态"
clearable
>
<el-select
v-model=
"formData.status"
clearable
placeholder=
"请选择状态"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
...
...
@@ -27,16 +27,16 @@
</el-select>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输备注
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输备注"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemPostForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
*
as
PostApi
from
'@/api/system/post'
...
...
src/views/system/role/RoleAssignMenuForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"菜单权限"
v-model=
"dialogVisible
"
>
<el-form
ref=
"formRef"
:model=
"formData"
label-width=
"80px"
v-loading=
"formLoading
"
>
<Dialog
v-model=
"dialogVisible"
title=
"菜单权限
"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
label-width=
"80px
"
>
<el-form-item
label=
"角色名称"
>
<el-tag>
{{
formData
.
name
}}
</el-tag>
</el-form-item>
...
...
@@ -13,42 +13,43 @@
全选/全不选:
<el-switch
v-model=
"treeNodeAll"
inline-prompt
active-text=
"是"
inactive-text=
"否"
inline-prompt
@
change=
"handleCheckedTreeNodeAll"
/>
全部展开/折叠:
<el-switch
v-model=
"menuExpand"
inline-prompt
active-text=
"展开"
inactive-text=
"折叠"
inline-prompt
@
change=
"handleCheckedTreeExpand"
/>
</
template
>
<el-tree
ref=
"treeRef"
node-key=
"id"
show-checkbox
:props=
"defaultProps"
:data=
"menuOptions"
:props=
"defaultProps"
empty-text=
"加载中,请稍候"
node-key=
"id"
show-checkbox
/>
</el-card>
</el-form-item>
</el-form>
<
template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
import
{
handleTree
,
defaultProps
}
from
'@/utils/tree'
<
script
lang=
"ts"
name=
"SystemRoleAssignMenuForm"
setup
>
import
{
defaultProps
,
handleTree
}
from
'@/utils/tree'
import
*
as
RoleApi
from
'@/api/system/role'
import
*
as
MenuApi
from
'@/api/system/menu'
import
*
as
PermissionApi
from
'@/api/system/permission'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/role/RoleDataPermissionForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"菜单权限"
v-model=
"dialogVisible
"
width=
"800"
>
<el-form
ref=
"formRef"
:model=
"formData"
label-width=
"80px"
v-loading=
"formLoading
"
>
<Dialog
v-model=
"dialogVisible"
title=
"菜单权限
"
width=
"800"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
label-width=
"80px
"
>
<el-form-item
label=
"角色名称"
>
<el-tag>
{{
formData
.
name
}}
</el-tag>
</el-form-item>
...
...
@@ -19,8 +19,8 @@
</el-form-item>
</el-form>
<el-form-item
label=
"权限范围"
v-if=
"formData.dataScope === SystemDataScopeEnum.DEPT_CUSTOM"
label=
"权限范围"
style=
"display: flex"
>
<el-card
class=
"card"
shadow=
"never"
>
...
...
@@ -28,47 +28,48 @@
全选/全不选:
<el-switch
v-model=
"treeNodeAll"
inline-prompt
active-text=
"是"
inactive-text=
"否"
inline-prompt
@
change=
"handleCheckedTreeNodeAll()"
/>
全部展开/折叠:
<el-switch
v-model=
"deptExpand"
inline-prompt
active-text=
"展开"
inactive-text=
"折叠"
inline-prompt
@
change=
"handleCheckedTreeExpand"
/>
父子联动(选中父节点,自动选择子节点):
<el-switch
v-model=
"checkStrictly"
inline-prompt
active-text=
"是"
inactive-text=
"否"
/>
<el-switch
v-model=
"checkStrictly"
active-text=
"是"
inactive-text=
"否"
inline-prompt
/>
</
template
>
<el-tree
ref=
"treeRef"
node-key=
"id"
show-checkbox
:check-strictly=
"!checkStrictly"
:props=
"defaultProps"
:data=
"deptOptions"
empty-text=
"加载中,请稍后
"
:props=
"defaultProps
"
default-expand-all
empty-text=
"加载中,请稍后"
node-key=
"id"
show-checkbox
/>
</el-card>
</el-form-item>
<
template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemRoleDataPermissionForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
handleTree
,
defaultProps
}
from
'@/utils/tree'
import
{
defaultProps
,
handleTree
}
from
'@/utils/tree'
import
{
SystemDataScopeEnum
}
from
'@/utils/constants'
import
*
as
RoleApi
from
'@/api/system/role'
import
*
as
DeptApi
from
'@/api/system/dept'
import
*
as
PermissionApi
from
'@/api/system/permission'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/role/RoleForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"角色名称"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入角色名称"
/>
...
...
@@ -17,7 +17,7 @@
<el-input
v-model=
"formData.sort"
placeholder=
"请输入显示顺序"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-select
v-model=
"formData.status"
placeholder=
"请选择状态"
clearable
>
<el-select
v-model=
"formData.status"
clearable
placeholder=
"请选择状态"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
...
...
@@ -27,19 +27,20 @@
</el-select>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输备注
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输备注"
type=
"textarea
"
/>
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemRoleForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
*
as
RoleApi
from
'@/api/system/role'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/role/index.vue
View file @
b9349157
...
...
@@ -5,32 +5,32 @@
<ContentWrap>
<!-- 搜索工作栏 -->
<el-form
class=
"-mb-15px"
:model=
"queryParams"
ref=
"queryFormRef"
:inline=
"true"
:model=
"queryParams"
class=
"-mb-15px"
label-width=
"68px"
>
<el-form-item
label=
"角色名称"
prop=
"name"
>
<el-input
v-model=
"queryParams.name"
placeholder=
"请输入角色名称
"
class=
"!w-240px
"
clearable
placeholder=
"请输入角色名称"
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item
label=
"角色标识"
prop=
"code"
>
<el-input
v-model=
"queryParams.code"
placeholder=
"请输入角色标识
"
class=
"!w-240px
"
clearable
placeholder=
"请输入角色标识"
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-select
v-model=
"queryParams.status"
placeholder=
"请选择状态"
clearable
class=
"!w-240px
"
>
<el-select
v-model=
"queryParams.status"
class=
"!w-240px"
clearable
placeholder=
"请选择状态
"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
...
...
@@ -42,33 +42,41 @@
<el-form-item
label=
"创建时间"
prop=
"createTime"
>
<el-date-picker
v-model=
"queryParams.createTime"
value-format=
"YYYY-MM-DD HH:mm:ss"
type=
"daterange"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:default-time=
"[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class=
"!w-240px"
end-placeholder=
"结束日期"
start-placeholder=
"开始日期"
type=
"daterange"
value-format=
"YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<el-form-item>
<el-button
@
click=
"handleQuery"
><Icon
icon=
"ep:search"
class=
"mr-5px"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
<el-button
@
click=
"handleQuery"
>
<Icon
class=
"mr-5px"
icon=
"ep:search"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
>
<Icon
class=
"mr-5px"
icon=
"ep:refresh"
/>
重置
</el-button>
<el-button
type=
"primary
"
v-hasPermi=
"['system:role:create']
"
plain
type=
"primary"
@
click=
"openForm('create')"
v-hasPermi=
"['system:role:create']"
>
<Icon
icon=
"ep:plus"
class=
"mr-5px"
/>
新增
<Icon
class=
"mr-5px"
icon=
"ep:plus"
/>
新增
</el-button>
<el-button
type=
"success"
v-hasPermi=
"['system:role:export']"
:loading=
"exportLoading"
plain
type=
"success"
@
click=
"handleExport"
:loading=
"exportLoading"
v-hasPermi=
"['system:role:export']"
>
<Icon
icon=
"ep:download"
class=
"mr-5px"
/>
导出
<Icon
class=
"mr-5px"
icon=
"ep:download"
/>
导出
</el-button>
</el-form-item>
</el-form>
...
...
@@ -77,59 +85,59 @@
<!-- 列表 -->
<ContentWrap>
<el-table
v-loading=
"loading"
:data=
"list"
>
<el-table-column
label=
"角色编号"
align=
"center
"
prop=
"id"
/>
<el-table-column
label=
"角色名称"
align=
"center
"
prop=
"name"
/>
<el-table-column
label=
"角色类型"
align=
"center
"
prop=
"type"
/>
<el-table-column
label=
"角色标识"
align=
"center
"
prop=
"code"
/>
<el-table-column
label=
"显示顺序"
align=
"center
"
prop=
"sort"
/>
<el-table-column
label=
"备注"
align=
"center
"
prop=
"remark"
/>
<el-table-column
label=
"状态"
align=
"center
"
prop=
"status"
>
<el-table-column
align=
"center"
label=
"角色编号
"
prop=
"id"
/>
<el-table-column
align=
"center"
label=
"角色名称
"
prop=
"name"
/>
<el-table-column
align=
"center"
label=
"角色类型
"
prop=
"type"
/>
<el-table-column
align=
"center"
label=
"角色标识
"
prop=
"code"
/>
<el-table-column
align=
"center"
label=
"显示顺序
"
prop=
"sort"
/>
<el-table-column
align=
"center"
label=
"备注
"
prop=
"remark"
/>
<el-table-column
align=
"center"
label=
"状态
"
prop=
"status"
>
<template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.COMMON_STATUS"
:value=
"scope.row.status"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间
"
:formatter=
"dateFormatter
"
align=
"center"
label=
"创建时间"
prop=
"createTime"
width=
"180"
:formatter=
"dateFormatter"
/>
<el-table-column
:width=
"300"
label=
"操作"
align=
"center
"
>
<el-table-column
:width=
"300"
align=
"center"
label=
"操作
"
>
<
template
#
default=
"scope"
>
<el-button
v-hasPermi=
"['system:role:update']"
link
type=
"primary"
@
click=
"openForm('update', scope.row.id)"
v-hasPermi=
"['system:role:update']"
>
编辑
</el-button>
<el-button
v-hasPermi=
"['system:permission:assign-role-menu']"
link
type=
"primary"
preIcon=
"ep:basketball"
title=
"菜单权限"
v-hasPermi=
"['system:permission:assign-role-menu']
"
type=
"primary
"
@
click=
"openAssignMenuForm(scope.row)"
>
菜单权限
</el-button>
<el-button
v-hasPermi=
"['system:permission:assign-role-data-scope']"
link
type=
"primary"
preIcon=
"ep:coin"
title=
"数据权限"
v-hasPermi=
"['system:permission:assign-role-data-scope']
"
type=
"primary
"
@
click=
"openDataPermissionForm(scope.row)"
>
数据权限
</el-button>
<el-button
v-hasPermi=
"['system:role:delete']"
link
type=
"danger"
@
click=
"handleDelete(scope.row.id)"
v-hasPermi=
"['system:role:delete']"
>
删除
</el-button>
...
...
@@ -138,9 +146,9 @@
</el-table>
<!-- 分页 -->
<Pagination
:total=
"total"
v-model:page=
"queryParams.pageNo"
v-model:limit=
"queryParams.pageSize"
v-model:page=
"queryParams.pageNo"
:total=
"total"
@
pagination=
"getList"
/>
</ContentWrap>
...
...
@@ -152,7 +160,7 @@
<!-- 表单弹窗:数据权限 -->
<RoleDataPermissionForm
ref=
"dataPermissionFormRef"
/>
</template>
<
script
setup
lang=
"tsx"
name=
"SystemRole"
>
<
script
lang=
"ts"
name=
"SystemRole"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
dateFormatter
}
from
'@/utils/formatTime'
import
download
from
'@/utils/download'
...
...
@@ -160,6 +168,7 @@ import * as RoleApi from '@/api/system/role'
import
RoleForm
from
'./RoleForm.vue'
import
RoleAssignMenuForm
from
'./RoleAssignMenuForm.vue'
import
RoleDataPermissionForm
from
'./RoleDataPermissionForm.vue'
const
message
=
useMessage
()
// 消息弹窗
const
{
t
}
=
useI18n
()
// 国际化
...
...
src/views/system/sensitiveWord/SensitiveWordForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"敏感词"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入敏感词"
/>
...
...
@@ -27,9 +27,9 @@
<el-form-item
label=
"标签"
prop=
"tags"
>
<el-select
v-model=
"formData.tags"
multiple
filterable
allow-create
filterable
multiple
placeholder=
"请选择文章标签"
style=
"width: 380px"
>
...
...
@@ -38,15 +38,16 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
name=
"SensitiveWordForm"
>
<
script
lang=
"ts"
name=
"SystemSensitiveWordForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
*
as
SensitiveWordApi
from
'@/api/system/sensitiveWord'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/sensitiveWord/SensitiveWordTestForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"检测敏感词"
v-model=
"dialogVisible
"
>
<Dialog
v-model=
"dialogVisible"
title=
"检测敏感词
"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"文本"
prop=
"text"
>
<el-input
type=
"textarea"
v-model=
"formData.text"
placeholder=
"请输入测试文本
"
/>
<el-input
v-model=
"formData.text"
placeholder=
"请输入测试文本"
type=
"textarea
"
/>
</el-form-item>
<el-form-item
label=
"标签"
prop=
"tags"
>
<el-select
v-model=
"formData.tags"
multiple
filterable
allow-create
filterable
multiple
placeholder=
"请选择标签"
style=
"width: 380px"
>
...
...
@@ -24,13 +24,14 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
检 测
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
检 测
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemSensitiveWordTestForm"
setup
>
import
*
as
SensitiveWordApi
from
'@/api/system/sensitiveWord'
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
...
src/views/system/sensitiveWord/index.vue
View file @
b9349157
...
...
@@ -2,34 +2,34 @@
<!-- 搜索工作栏 -->
<ContentWrap>
<el-form
class=
"-mb-15px"
:model=
"queryParams"
ref=
"queryFormRef"
:inline=
"true"
:model=
"queryParams"
class=
"-mb-15px"
label-width=
"68px"
>
<el-form-item
label=
"敏感词"
prop=
"name"
>
<el-input
v-model=
"queryParams.name"
placeholder=
"请输入敏感词
"
class=
"!w-240px
"
clearable
placeholder=
"请输入敏感词"
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
/>
</el-form-item>
<el-form-item
label=
"标签"
prop=
"tag"
>
<el-select
v-model=
"queryParams.tag"
placeholder=
"请选择标签
"
class=
"!w-240px
"
clearable
placeholder=
"请选择标签"
@
keyup
.
enter=
"handleQuery"
class=
"!w-240px"
>
<el-option
v-for=
"tag in tagList"
:key=
"tag"
:label=
"tag"
:value=
"tag"
/>
</el-select>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-select
v-model=
"queryParams.status"
placeholder=
"请选择启用状态"
clearable
>
<el-select
v-model=
"queryParams.status"
clearable
placeholder=
"请选择启用状态"
>
<el-option
v-for=
"dict in getIntDictOptions(DICT_TYPE.COMMON_STATUS)"
:key=
"dict.value"
...
...
@@ -42,36 +42,45 @@
<el-form-item
label=
"创建时间"
prop=
"createTime"
>
<el-date-picker
v-model=
"queryParams.createTime"
value-format=
"YYYY-MM-DD HH:mm:ss"
type=
"daterange"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:default-time=
"[new Date('1 00:00:00'), new Date('1 23:59:59')]"
class=
"!w-240px"
end-placeholder=
"结束日期"
start-placeholder=
"开始日期"
type=
"daterange"
value-format=
"YYYY-MM-DD HH:mm:ss"
/>
</el-form-item>
<el-form-item>
<el-button
@
click=
"handleQuery"
><Icon
icon=
"ep:search"
class=
"mr-5px"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
><Icon
icon=
"ep:refresh"
class=
"mr-5px"
/>
重置
</el-button>
<el-button
@
click=
"handleQuery"
>
<Icon
class=
"mr-5px"
icon=
"ep:search"
/>
搜索
</el-button>
<el-button
@
click=
"resetQuery"
>
<Icon
class=
"mr-5px"
icon=
"ep:refresh"
/>
重置
</el-button>
<el-button
type=
"primary
"
v-hasPermi=
"['system:sensitive-word:create']
"
plain
type=
"primary"
@
click=
"openForm('create')"
v-hasPermi=
"['system:sensitive-word:create']"
>
<Icon
icon=
"ep:plus"
class=
"mr-5px"
/>
新增
<Icon
class=
"mr-5px"
icon=
"ep:plus"
/>
新增
</el-button>
<el-button
type=
"success"
v-hasPermi=
"['system:sensitive-word:export']"
:loading=
"exportLoading"
plain
type=
"success"
@
click=
"handleExport"
:loading=
"exportLoading"
v-hasPermi=
"['system:sensitive-word:export']"
>
<Icon
icon=
"ep:download"
class=
"mr-5px"
/>
导出
<Icon
class=
"mr-5px"
icon=
"ep:download"
/>
导出
</el-button>
<el-button
type=
"warning"
plain
@
click=
"openTestForm"
>
<Icon
icon=
"ep:document-checked"
class=
"mr-5px"
/>
测试
<el-button
plain
type=
"warning"
@
click=
"openTestForm"
>
<Icon
class=
"mr-5px"
icon=
"ep:document-checked"
/>
测试
</el-button>
</el-form-item>
</el-form>
...
...
@@ -80,48 +89,48 @@
<!-- 列表 -->
<ContentWrap>
<el-table
v-loading=
"loading"
:data=
"list"
>
<el-table-column
label=
"编号"
align=
"center
"
prop=
"id"
/>
<el-table-column
label=
"敏感词"
align=
"center
"
prop=
"name"
/>
<el-table-column
label=
"状态"
align=
"center
"
prop=
"status"
>
<el-table-column
align=
"center"
label=
"编号
"
prop=
"id"
/>
<el-table-column
align=
"center"
label=
"敏感词
"
prop=
"name"
/>
<el-table-column
align=
"center"
label=
"状态
"
prop=
"status"
>
<template
#
default=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.COMMON_STATUS"
:value=
"scope.row.status"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"描述"
align=
"center
"
prop=
"description"
/>
<el-table-column
label=
"标签"
align=
"center
"
prop=
"tags"
>
<el-table-column
align=
"center"
label=
"描述
"
prop=
"description"
/>
<el-table-column
align=
"center"
label=
"标签
"
prop=
"tags"
>
<
template
#
default=
"scope"
>
<el-tag
class=
"mr-5px"
v-for=
"tag in scope.row.tags"
:key=
"tag"
:disable-transitions=
"true"
class=
"mr-5px"
>
{{
tag
}}
</el-tag>
</
template
>
</el-table-column>
<el-table-column
label=
"创建时间
"
:formatter=
"dateFormatter
"
align=
"center"
label=
"创建时间"
prop=
"createTime"
width=
"180"
:formatter=
"dateFormatter"
/>
<el-table-column
label=
"操作"
align=
"center
"
>
<el-table-column
align=
"center"
label=
"操作
"
>
<
template
#
default=
"scope"
>
<el-button
v-hasPermi=
"['infra:config:update']"
link
type=
"primary"
@
click=
"openForm('update', scope.row.id)"
v-hasPermi=
"['infra:config:update']"
>
编辑
</el-button>
<el-button
v-hasPermi=
"['infra:config:delete']"
link
type=
"danger"
@
click=
"handleDelete(scope.row.id)"
v-hasPermi=
"['infra:config:delete']"
>
删除
</el-button>
...
...
@@ -130,9 +139,9 @@
</el-table>
<!-- 分页 -->
<Pagination
:total=
"total"
v-model:page=
"queryParams.pageNo"
v-model:limit=
"queryParams.pageSize"
v-model:page=
"queryParams.pageNo"
:total=
"total"
@
pagination=
"getList"
/>
</ContentWrap>
...
...
@@ -143,13 +152,14 @@
<!-- 表单弹窗:测试敏感词 -->
<SensitiveWordTestForm
ref=
"testFormRef"
/>
</template>
<
script
setup
lang=
"ts"
name=
"SystemSensitiveWordhao"
>
<
script
lang=
"ts"
name=
"SystemSensitiveWordHao"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
dateFormatter
}
from
'@/utils/formatTime'
import
download
from
'@/utils/download'
import
*
as
SensitiveWordApi
from
'@/api/system/sensitiveWord'
import
SensitiveWordForm
from
'./SensitiveWordForm.vue'
import
SensitiveWordTestForm
from
'./SensitiveWordTestForm.vue'
const
message
=
useMessage
()
// 消息弹窗
const
{
t
}
=
useI18n
()
// 国际化
...
...
src/views/system/sms/channel/SmsChannelForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"130px"
v-loading=
"formLoading"
>
<el-form-item
label=
"短信签名"
prop=
"signature"
>
<el-input
v-model=
"formData.signature"
placeholder=
"请输入短信签名"
/>
</el-form-item>
<el-form-item
label=
"渠道编码"
prop=
"code"
>
<el-select
v-model=
"formData.code"
placeholder=
"请选择渠道编码"
clearable
>
<el-select
v-model=
"formData.code"
clearable
placeholder=
"请选择渠道编码"
>
<el-option
v-for=
"dict in getStrDictOptions(DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE)"
:key=
"dict.value"
...
...
@@ -45,15 +45,16 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemSmsChannelForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
,
getStrDictOptions
}
from
'@/utils/dict'
import
*
as
SmsChannelApi
from
'@/api/system/sms/smsChannel'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/sms/log/SmsLogDetail.vue
View file @
b9349157
<
template
>
<Dialog
title=
"详情"
v-model=
"dialogVisible"
:scroll=
"true"
:max-height=
"500
"
width=
"800"
>
<el-descriptions
border
:column=
"1"
>
<Dialog
v-model=
"dialogVisible"
:max-height=
"500"
:scroll=
"true"
title=
"详情
"
width=
"800"
>
<el-descriptions
:column=
"1"
border
>
<el-descriptions-item
label=
"日志主键"
min-width=
"120"
>
{{
detailData
.
id
}}
</el-descriptions-item>
...
...
@@ -59,7 +59,7 @@
</el-descriptions>
</Dialog>
</
template
>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemSmsLogDetail"
setup
>
import
{
DICT_TYPE
}
from
'@/utils/dict'
import
{
formatDate
}
from
'@/utils/formatTime'
import
*
as
SmsLogApi
from
'@/api/system/sms/smsLog'
...
...
src/views/system/sms/template/SmsTemplateForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"140px"
v-loading=
"formLoading"
>
<el-form-item
label=
"短信渠道编号"
prop=
"channelId"
>
<el-select
v-model=
"formData.channelId"
placeholder=
"请选择短信渠道编号"
>
<el-option
v-for=
"channel in channelList"
:key=
"channel.id"
:value=
"channel.id"
:label=
"
channel.signature +
`【 $
{getDictLabel(DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE, channel.code)}】`
"
:value="channel.id"
/>
</el-select>
</el-form-item>
...
...
@@ -37,7 +37,7 @@
<el-input
v-model=
"formData.name"
placeholder=
"请输入模板名称"
/>
</el-form-item>
<el-form-item
label=
"模板内容"
prop=
"content"
>
<el-input
type=
"textarea"
v-model=
"formData.content"
placeholder=
"请输入模板内容
"
/>
<el-input
v-model=
"formData.content"
placeholder=
"请输入模板内容"
type=
"textarea
"
/>
</el-form-item>
<el-form-item
label=
"开启状态"
prop=
"status"
>
<el-radio-group
v-model=
"formData.status"
>
...
...
@@ -58,16 +58,17 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
import
{
DICT_TYPE
,
get
IntDictOptions
,
getDictLabel
}
from
'@/utils/dict'
<
script
lang=
"ts"
name=
"SystemSmsTemplateForm"
setup
>
import
{
DICT_TYPE
,
get
DictLabel
,
getIntDictOptions
}
from
'@/utils/dict'
import
*
as
SmsTemplateApi
from
'@/api/system/sms/smsTemplate'
import
*
as
SmsChannelApi
from
'@/api/system/sms/smsChannel'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/sms/template/SmsTemplateSendForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"测试"
v-model=
"dialogVisible
"
>
<Dialog
v-model=
"dialogVisible"
title=
"测试
"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"140px"
v-loading=
"formLoading"
>
<el-form-item
label=
"模板内容"
prop=
"content"
>
<el-input
v-model=
"formData.content"
type=
"textarea"
placeholder=
"请输入模板内容"
readonly
type=
"textarea"
/>
</el-form-item>
<el-form-item
label=
"手机号"
prop=
"mobile"
>
...
...
@@ -31,13 +31,14 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemSmsTemplateSendForm"
setup
>
import
*
as
SmsTemplateApi
from
'@/api/system/sms/smsTemplate'
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
...
src/views/system/tenant/TenantForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
width=
"50%"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
width=
"50%"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"租户名"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入租户名"
/>
</el-form-item>
<el-form-item
label=
"租户套餐"
prop=
"packageId"
>
<el-select
v-model=
"formData.packageId"
placeholder=
"请选择租户套餐"
clearable
>
<el-select
v-model=
"formData.packageId"
clearable
placeholder=
"请选择租户套餐"
>
<el-option
v-for=
"item in packageList"
:key=
"item.id"
...
...
@@ -33,25 +33,25 @@
<el-input
v-model=
"formData.password"
placeholder=
"请输入用户密码"
type=
"password"
show-password
type=
"password"
/>
</el-form-item>
<el-form-item
label=
"账号额度"
prop=
"accountCount"
>
<el-input-number
v-model=
"formData.accountCount"
placeholder=
"请输入账号额度"
controls-position=
"right"
:min=
"0"
controls-position=
"right"
placeholder=
"请输入账号额度"
/>
</el-form-item>
<el-form-item
label=
"过期时间"
prop=
"expireTime"
>
<el-date-picker
clearable
v-model=
"formData.expireTime"
clearable
placeholder=
"请选择过期时间"
type=
"date"
value-format=
"x"
placeholder=
"请选择过期时间"
/>
</el-form-item>
<el-form-item
label=
"绑定域名"
prop=
"domain"
>
...
...
@@ -70,12 +70,12 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemTenantForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
*
as
TenantApi
from
'@/api/system/tenant'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
...
...
src/views/system/tenantPackage/TenantPackageForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-form-item
label=
"套餐名"
prop=
"name"
>
<el-input
v-model=
"formData.name"
placeholder=
"请输入套餐名"
/>
...
...
@@ -16,27 +16,27 @@
全选/全不选:
<el-switch
v-model=
"treeNodeAll"
inline-prompt
active-text=
"是"
inactive-text=
"否"
inline-prompt
@
change=
"handleCheckedTreeNodeAll"
/>
全部展开/折叠:
<el-switch
v-model=
"menuExpand"
inline-prompt
active-text=
"展开"
inactive-text=
"折叠"
inline-prompt
@
change=
"handleCheckedTreeExpand"
/>
</
template
>
<el-tree
ref=
"treeRef"
node-key=
"id"
show-checkbox
:props=
"defaultProps"
:data=
"menuOptions"
:props=
"defaultProps"
empty-text=
"加载中,请稍候"
node-key=
"id"
show-checkbox
/>
</el-card>
</el-form-item>
...
...
@@ -56,18 +56,19 @@
</el-form-item>
</el-form>
<
template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
name=
"TenantPackageForm"
>
<
script
lang=
"ts"
name=
"SystemTenantPackageForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
{
defaultProps
,
handleTree
}
from
'@/utils/tree'
import
*
as
TenantPackageApi
from
'@/api/system/tenantPackage'
import
*
as
MenuApi
from
'@/api/system/menu'
import
{
ElTree
}
from
'element-plus'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/user/DeptTree.vue
View file @
b9349157
<
template
>
<div
class=
"head-container"
>
<el-input
v-model=
"deptName"
placeholder=
"请输入部门名称"
clearable
class=
"mb-20px
"
>
<el-input
v-model=
"deptName"
class=
"mb-20px"
clearable
placeholder=
"请输入部门名称
"
>
<template
#
prefix
>
<Icon
icon=
"ep:search"
/>
</
template
>
...
...
@@ -8,20 +8,20 @@
</div>
<div
class=
"head-container"
>
<el-tree
ref=
"treeRef"
:data=
"deptList"
:props=
"defaultProps"
node-key=
"id"
:expand-on-click-node=
"false"
:filter-node-method=
"filterNode"
ref=
"treeRef
"
:props=
"defaultProps
"
default-expand-all
highlight-current
node-key=
"id"
@
node-click=
"handleNodeClick"
/>
</div>
</template>
<
script
setup
lang=
"ts"
name=
"UserDeptTree"
>
<
script
lang=
"ts"
name=
"SystemUserDeptTree"
setup
>
import
{
ElTree
}
from
'element-plus'
import
*
as
DeptApi
from
'@/api/system/dept'
import
{
defaultProps
,
handleTree
}
from
'@/utils/tree'
...
...
src/views/system/user/UserAssignRoleForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"分配角色"
v-model=
"dialogVisible
"
>
<el-form
ref=
"formRef"
:model=
"formData"
label-width=
"80px"
v-loading=
"formLoading
"
>
<Dialog
v-model=
"dialogVisible"
title=
"分配角色
"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
label-width=
"80px
"
>
<el-form-item
label=
"用户名称"
>
<el-input
v-model=
"formData.username"
:disabled=
"true"
/>
</el-form-item>
...
...
@@ -14,15 +14,16 @@
</el-form-item>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
setup
lang=
"ts"
>
<
script
lang=
"ts"
name=
"SystemUserAssignRoleForm"
setup
>
import
*
as
PermissionApi
from
'@/api/system/permission'
import
*
as
UserApi
from
'@/api/system/user'
import
*
as
RoleApi
from
'@/api/system/role'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/user/UserForm.vue
View file @
b9349157
<
template
>
<Dialog
:title=
"dialogTitle"
v-model=
"dialogVisib
le"
>
<Dialog
v-model=
"dialogVisible"
:title=
"dialogTit
le"
>
<el-form
ref=
"formRef"
v-loading=
"formLoading"
:model=
"formData"
:rules=
"formRules"
label-width=
"80px"
v-loading=
"formLoading"
>
<el-row>
<el-col
:span=
"12"
>
...
...
@@ -16,11 +16,11 @@
<el-col
:span=
"12"
>
<el-form-item
label=
"归属部门"
prop=
"deptId"
>
<el-tree-select
node-key=
"id"
v-model=
"formData.deptId"
:data=
"deptList"
:props=
"defaultProps"
check-strictly
node-key=
"id"
placeholder=
"请选择归属部门"
/>
</el-form-item>
...
...
@@ -29,12 +29,12 @@
<el-row>
<el-col
:span=
"12"
>
<el-form-item
label=
"手机号码"
prop=
"mobile"
>
<el-input
v-model=
"formData.mobile"
placeholder=
"请输入手机号码"
maxlength=
"11
"
/>
<el-input
v-model=
"formData.mobile"
maxlength=
"11"
placeholder=
"请输入手机号码
"
/>
</el-form-item>
</el-col>
<el-col
:span=
"12"
>
<el-form-item
label=
"邮箱"
prop=
"email"
>
<el-input
v-model=
"formData.email"
placeholder=
"请输入邮箱"
maxlength=
"50
"
/>
<el-input
v-model=
"formData.email"
maxlength=
"50"
placeholder=
"请输入邮箱
"
/>
</el-form-item>
</el-col>
</el-row>
...
...
@@ -49,8 +49,8 @@
<el-input
v-model=
"formData.password"
placeholder=
"请输入用户密码"
type=
"password"
show-password
type=
"password"
/>
</el-form-item>
</el-col>
...
...
@@ -84,24 +84,25 @@
<el-row>
<el-col
:span=
"24"
>
<el-form-item
label=
"备注"
>
<el-input
v-model=
"formData.remark"
type=
"textarea"
placeholder=
"请输入内容
"
/>
<el-input
v-model=
"formData.remark"
placeholder=
"请输入内容"
type=
"textarea
"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
name=
"SystemUserForm"
setup
>
import
{
DICT_TYPE
,
getIntDictOptions
}
from
'@/utils/dict'
import
{
CommonStatusEnum
}
from
'@/utils/constants'
import
{
defaultProps
,
handleTree
}
from
'@/utils/tree'
import
*
as
PostApi
from
'@/api/system/post'
import
*
as
DeptApi
from
'@/api/system/dept'
import
*
as
UserApi
from
'@/api/system/user'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
...
...
src/views/system/user/UserImportForm.vue
View file @
b9349157
<
template
>
<Dialog
title=
"用户导入"
v-model=
"dialogVisible
"
width=
"400"
>
<Dialog
v-model=
"dialogVisible"
title=
"用户导入
"
width=
"400"
>
<el-upload
ref=
"uploadRef"
v-model:file-list=
"fileList"
:action=
"importUrl + '?updateSupport=' + updateSupport"
:auto-upload=
"false"
:disabled=
"formLoading"
:headers=
"uploadHeaders"
v-model:file-list=
"fileList"
drag
accept=
".xlsx, .xls"
:limit=
"1"
:on-success=
"submitFormSuccess"
:on-exceed=
"handleExceed"
:on-error=
"submitFormError"
:auto-upload=
"false"
:disabled=
"formLoading"
:on-exceed=
"handleExceed"
:on-success=
"submitFormSuccess"
accept=
".xlsx, .xls"
drag
>
<Icon
icon=
"ep:upload"
/>
<div
class=
"el-upload__text"
>
将文件拖到此处,或
<em>
点击上传
</em></div>
<template
#
tip
>
<div
class=
"el-upload__tip text-center"
>
<div
class=
"el-upload__tip"
>
<el-checkbox
v-model=
"updateSupport"
/>
是否更新已经存在的用户数据
<el-checkbox
v-model=
"updateSupport"
/>
是否更新已经存在的用户数据
</div>
<span>
仅允许导入 xls、xlsx 格式文件。
</span>
<el-link
type=
"primary"
:underline=
"false"
style=
"font-size: 12px; vertical-align: baseline"
type=
"primary"
@
click=
"importTemplate"
>
下载模板
...
...
@@ -34,15 +35,16 @@
</
template
>
</el-upload>
<
template
#
footer
>
<el-button
@
click=
"submitForm"
type=
"primary"
:disabled=
"formLoading
"
>
确 定
</el-button>
<el-button
:disabled=
"formLoading"
type=
"primary"
@
click=
"submitForm
"
>
确 定
</el-button>
<el-button
@
click=
"dialogVisible = false"
>
取 消
</el-button>
</
template
>
</Dialog>
</template>
<
script
lang=
"ts"
setup
>
<
script
lang=
"ts"
name=
"SystemUserImportForm"
setup
>
import
*
as
UserApi
from
'@/api/system/user'
import
{
getAccessToken
,
getTenantId
}
from
'@/utils/auth'
import
download
from
'@/utils/download'
const
message
=
useMessage
()
// 消息弹窗
const
dialogVisible
=
ref
(
false
)
// 弹窗的是否展示
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment