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
ee9474fd
authored
Mar 08, 2023
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vue3 重构:使用 el 原生实现
parent
4d16795e
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
271 additions
and
237 deletions
+271
-237
src/api/infra/config/index.ts
+1
-1
src/types/auto-components.d.ts
+9
-1
src/types/auto-imports.d.ts
+0
-1
src/views/infra/config/config.data.ts
+0
-90
src/views/infra/config/index.vue
+99
-144
src/views/infra/config/index2.vue
+162
-0
No files found.
src/api/infra/config/index.ts
View file @
ee9474fd
...
...
@@ -27,7 +27,7 @@ export interface ConfigExportReqVO {
}
// 查询参数列表
export
const
getConfigPage
Api
=
(
params
:
ConfigPageReqVO
)
=>
{
export
const
getConfigPage
=
(
params
:
ConfigPageReqVO
)
=>
{
return
request
.
get
({
url
:
'/infra/config/page'
,
params
})
}
...
...
src/types/auto-components.d.ts
View file @
ee9474fd
...
...
@@ -23,8 +23,8 @@ declare module '@vue/runtime-core' {
DictTag
:
typeof
import
(
'./../components/DictTag/src/DictTag.vue'
)[
'default'
]
Echart
:
typeof
import
(
'./../components/Echart/src/Echart.vue'
)[
'default'
]
Editor
:
typeof
import
(
'./../components/Editor/src/Editor.vue'
)[
'default'
]
ElAvatar
:
typeof
import
(
'element-plus/es'
)[
'ElAvatar'
]
ElAutoResizer
:
typeof
import
(
'element-plus/es'
)[
'ElAutoResizer'
]
ElAvatar
:
typeof
import
(
'element-plus/es'
)[
'ElAvatar'
]
ElBadge
:
typeof
import
(
'element-plus/es'
)[
'ElBadge'
]
ElButton
:
typeof
import
(
'element-plus/es'
)[
'ElButton'
]
ElButtonGroup
:
typeof
import
(
'element-plus/es'
)[
'ElButtonGroup'
]
...
...
@@ -35,6 +35,7 @@ declare module '@vue/runtime-core' {
ElCollapseItem
:
typeof
import
(
'element-plus/es'
)[
'ElCollapseItem'
]
ElCollapseTransition
:
typeof
import
(
'element-plus/es'
)[
'ElCollapseTransition'
]
ElConfigProvider
:
typeof
import
(
'element-plus/es'
)[
'ElConfigProvider'
]
ElDatePicker
:
typeof
import
(
'element-plus/es'
)[
'ElDatePicker'
]
ElDescriptions
:
typeof
import
(
'element-plus/es'
)[
'ElDescriptions'
]
ElDescriptionsItem
:
typeof
import
(
'element-plus/es'
)[
'ElDescriptionsItem'
]
ElDialog
:
typeof
import
(
'element-plus/es'
)[
'ElDialog'
]
...
...
@@ -56,10 +57,14 @@ declare module '@vue/runtime-core' {
ElImage
:
typeof
import
(
'element-plus/es'
)[
'ElImage'
]
ElImageViewer
:
typeof
import
(
'element-plus/es'
)[
'ElImageViewer'
]
ElInput
:
typeof
import
(
'element-plus/es'
)[
'ElInput'
]
ElInputNumber
:
typeof
import
(
'element-plus/es'
)[
'ElInputNumber'
]
ElLink
:
typeof
import
(
'element-plus/es'
)[
'ElLink'
]
ElOption
:
typeof
import
(
'element-plus/es'
)[
'ElOption'
]
ElPagination
:
typeof
import
(
'element-plus/es'
)[
'ElPagination'
]
ElPopover
:
typeof
import
(
'element-plus/es'
)[
'ElPopover'
]
ElRadio
:
typeof
import
(
'element-plus/es'
)[
'ElRadio'
]
ElRadioButton
:
typeof
import
(
'element-plus/es'
)[
'ElRadioButton'
]
ElRadioGroup
:
typeof
import
(
'element-plus/es'
)[
'ElRadioGroup'
]
ElRow
:
typeof
import
(
'element-plus/es'
)[
'ElRow'
]
ElScrollbar
:
typeof
import
(
'element-plus/es'
)[
'ElScrollbar'
]
ElSelect
:
typeof
import
(
'element-plus/es'
)[
'ElSelect'
]
...
...
@@ -74,6 +79,9 @@ declare module '@vue/runtime-core' {
ElTimeline
:
typeof
import
(
'element-plus/es'
)[
'ElTimeline'
]
ElTimelineItem
:
typeof
import
(
'element-plus/es'
)[
'ElTimelineItem'
]
ElTooltip
:
typeof
import
(
'element-plus/es'
)[
'ElTooltip'
]
ElTransfer
:
typeof
import
(
'element-plus/es'
)[
'ElTransfer'
]
ElTree
:
typeof
import
(
'element-plus/es'
)[
'ElTree'
]
ElTreeSelect
:
typeof
import
(
'element-plus/es'
)[
'ElTreeSelect'
]
ElUpload
:
typeof
import
(
'element-plus/es'
)[
'ElUpload'
]
Error
:
typeof
import
(
'./../components/Error/src/Error.vue'
)[
'default'
]
FlowCondition
:
typeof
import
(
'./../components/bpmnProcessDesigner/package/penal/flow-condition/FlowCondition.vue'
)[
'default'
]
...
...
src/types/auto-imports.d.ts
View file @
ee9474fd
...
...
@@ -6,7 +6,6 @@ export {}
declare
global
{
const
DICT_TYPE
:
typeof
import
(
'@/utils/dict'
)[
'DICT_TYPE'
]
const
EffectScope
:
typeof
import
(
'vue'
)[
'EffectScope'
]
const
ElButton
:
typeof
import
(
'element-plus/es'
)[
'ElButton'
]
const
computed
:
typeof
import
(
'vue'
)[
'computed'
]
const
createApp
:
typeof
import
(
'vue'
)[
'createApp'
]
const
customRef
:
typeof
import
(
'vue'
)[
'customRef'
]
...
...
src/views/infra/config/config.data.ts
deleted
100644 → 0
View file @
4d16795e
import
type
{
VxeCrudSchema
}
from
'@/hooks/web/useVxeCrudSchemas'
const
{
t
}
=
useI18n
()
// 国际化
// 表单校验
export
const
rules
=
reactive
({
category
:
[
required
],
name
:
[
required
],
key
:
[
required
],
value
:
[
required
]
})
// CrudSchema
const
crudSchemas
=
reactive
<
VxeCrudSchema
>
({
primaryKey
:
'id'
,
primaryType
:
null
,
action
:
true
,
columns
:
[
{
title
:
'参数分类'
,
field
:
'category'
},
{
title
:
'参数名称'
,
field
:
'name'
,
isSearch
:
true
},
{
title
:
'参数键名'
,
field
:
'key'
,
isSearch
:
true
},
{
title
:
'参数键值'
,
field
:
'value'
},
{
title
:
'系统内置'
,
field
:
'type'
,
dictType
:
DICT_TYPE
.
INFRA_CONFIG_TYPE
,
dictClass
:
'number'
,
isSearch
:
true
},
{
title
:
'是否可见'
,
field
:
'visible'
,
table
:
{
slots
:
{
default
:
'visible_default'
}
},
form
:
{
component
:
'RadioButton'
,
componentProps
:
{
options
:
[
{
label
:
'是'
,
value
:
true
},
{
label
:
'否'
,
value
:
false
}
]
}
}
},
{
title
:
t
(
'form.remark'
),
field
:
'remark'
,
isTable
:
false
,
form
:
{
component
:
'Input'
,
componentProps
:
{
type
:
'textarea'
,
rows
:
4
},
colProps
:
{
span
:
24
}
}
},
{
title
:
t
(
'common.createTime'
),
field
:
'createTime'
,
formatter
:
'formatDate'
,
isForm
:
false
,
search
:
{
show
:
true
,
itemRender
:
{
name
:
'XDataTimePicker'
}
}
}
]
})
export
const
{
allSchemas
}
=
useVxeCrudSchemas
(
crudSchemas
)
src/views/infra/config/index.vue
View file @
ee9474fd
<
template
>
<ContentWrap>
<!-- 列表 -->
<XTable
@
register=
"registerTable"
>
<template
#
toolbar_buttons
>
<!-- 操作:新增 -->
<XButton
type=
"primary"
preIcon=
"ep:zoom-in"
:title=
"t('action.add')"
v-hasPermi=
"['infra:config:create']"
@
click=
"handleCreate()"
/>
<!-- 操作:导出 -->
<XButton
type=
"warning"
preIcon=
"ep:download"
:title=
"t('action.export')"
v-hasPermi=
"['infra:config:export']"
@
click=
"exportList('配置.xls')"
/>
</
template
>
<
template
#
visible_default=
"{ row }"
>
<span>
{{
row
.
visible
?
'是'
:
'否'
}}
</span>
</
template
>
<
template
#
actionbtns_default=
"{ row }"
>
<!-- 操作:修改 -->
<XTextButton
preIcon=
"ep:edit"
:title=
"t('action.edit')"
v-hasPermi=
"['infra:config:update']"
@
click=
"handleUpdate(row.id)"
<content-wrap>
<!-- 搜索工作栏 -->
<el-form
:model=
"queryParams"
ref=
"queryForm"
:inline=
"true"
v-show=
"showSearch"
label-width=
"68px"
>
<el-form-item
label=
"参数名称"
prop=
"name"
>
<el-input
v-model=
"queryParams.name"
placeholder=
"请输入参数名称"
clearable
style=
"width: 240px"
@
keyup
.
enter=
"handleQuery"
/>
<!-- 操作:详情 -->
<XTextButton
preIcon=
"ep:view"
:title=
"t('action.detail')"
v-hasPermi=
"['infra:config:query']"
@
click=
"handleDetail(row.id)"
</el-form-item>
<el-form-item
label=
"参数键名"
prop=
"key"
>
<el-input
v-model=
"queryParams.key"
placeholder=
"请输入参数键名"
clearable
style=
"width: 240px"
@
keyup
.
enter=
"handleQuery"
/>
<!-- 操作:删除 -->
<XTextButton
preIcon=
"ep:delete"
:title=
"t('action.del')"
v-hasPermi=
"['infra:config:delete']"
@
click=
"deleteData(row.id)"
</el-form-item>
<!--
<el-form-item
label=
"系统内置"
prop=
"type"
>
-->
<!--
<el-select
v-model=
"queryParams.type"
placeholder=
"系统内置"
clearable
>
-->
<!--
<el-option
v-for=
"dict in this.getDictDatas(DICT_TYPE.INFRA_CONFIG_TYPE)"
:key=
"parseInt(dict.value)"
--
>
<!-- :label="dict.label" :value="parseInt(dict.value)"/>-->
<!--
</el-select>
-->
<!--
</el-form-item>
-->
<!-- TODO:时间无法设置 -->
<el-form-item
label=
"创建时间"
prop=
"createTime"
>
<el-date-picker
v-model=
"queryParams.createTime"
style=
"width: 240px"
value-format=
"yyyy-MM-dd HH:mm:ss"
type=
"daterange"
range-separator=
"-"
start-placeholder=
"开始日期"
end-placeholder=
"结束日期"
:default-time=
"['00:00:00', '23:59:59']"
/>
</
template
>
</XTable>
</ContentWrap>
</el-form-item>
<el-form-item>
<!-- TODO 按钮图标不对 -->
<el-button
type=
"primary"
icon=
"el-icon-search"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<XModal
v-model=
"dialogVisible"
:title=
"dialogTitle"
>
<!-- 对话框(添加 / 修改) -->
<Form
v-if=
"['create', 'update'].includes(actionType)"
:schema=
"allSchemas.formSchema"
:rules=
"rules"
ref=
"formRef"
/>
<!-- 对话框(详情) -->
<Descriptions
v-if=
"actionType === 'detail'"
:schema=
"allSchemas.detailSchema"
:data=
"detailData"
>
<
template
#
visible=
"{ row }"
>
<span>
{{
row
.
visible
?
'是'
:
'否'
}}
</span>
</
template
>
</Descriptions>
<!-- 操作按钮 -->
<
template
#
footer
>
<!-- 按钮:保存 -->
<XButton
v-if=
"['create', 'update'].includes(actionType)"
type=
"primary"
:title=
"t('action.save')"
:loading=
"actionLoading"
@
click=
"submitForm()"
/>
<!-- 按钮:关闭 -->
<XButton
:loading=
"actionLoading"
:title=
"t('dialog.close')"
@
click=
"dialogVisible = false"
/>
</
template
>
</XModal>
<!-- 列表 -->
<el-table
v-loading=
"loading"
:data=
"list"
>
<el-table-column
label=
"参数主键"
align=
"center"
prop=
"id"
/>
<el-table-column
label=
"参数分类"
align=
"center"
prop=
"category"
/>
<el-table-column
label=
"参数名称"
align=
"center"
prop=
"name"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"参数键名"
align=
"center"
prop=
"key"
:show-overflow-tooltip=
"true"
/>
<el-table-column
label=
"参数键值"
align=
"center"
prop=
"value"
/>
<el-table-column
label=
"系统内置"
align=
"center"
prop=
"type"
>
<template
v-slot=
"scope"
>
<dict-tag
:type=
"DICT_TYPE.INFRA_CONFIG_TYPE"
:value=
"scope.row.type"
/>
</
template
>
</el-table-column>
<el-table-column
label=
"备注"
align=
"center"
prop=
"remark"
:show-overflow-tooltip=
"true"
/>
</el-table>
</content-wrap>
</template>
<
script
setup
lang=
"ts"
name=
"Config"
>
import
type
{
FormExpose
}
from
'@/components/Form'
// 业务相关的 import
import
*
as
ConfigApi
from
'@/api/infra/config'
import
{
rules
,
allSchemas
}
from
'./config.data
'
import
{
DICT_TYPE
}
from
'@/utils/dict
'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
// 列表相关的变量
const
[
registerTable
,
{
reload
,
deleteData
,
exportList
}]
=
useXTable
({
allSchemas
:
allSchemas
,
getListApi
:
ConfigApi
.
getConfigPageApi
,
deleteApi
:
ConfigApi
.
deleteConfigApi
,
exportListApi
:
ConfigApi
.
exportConfigApi
const
showSearch
=
ref
(
true
)
// 搜索框的是否展示
const
loading
=
ref
(
true
)
// 列表的加载中
const
total
=
ref
(
0
)
// 列表的总页数
const
list
=
ref
([])
// 列表的数据
const
queryParams
=
reactive
({
pageNo
:
1
,
pageSize
:
10
,
name
:
undefined
,
key
:
undefined
,
type
:
undefined
,
createTime
:
[]
})
const
queryForm
=
ref
()
// 搜索的表单
// ========== CRUD 相关 ==========
const
actionLoading
=
ref
(
false
)
// 遮罩层
const
actionType
=
ref
(
''
)
// 操作按钮的类型
const
dialogVisible
=
ref
(
false
)
// 是否显示弹出层
const
dialogTitle
=
ref
(
'edit'
)
// 弹出层标题
const
formRef
=
ref
<
FormExpose
>
()
// 表单 Ref
const
detailData
=
ref
()
// 详情 Ref
// 设置标题
const
setDialogTile
=
(
type
:
string
)
=>
{
dialogTitle
.
value
=
t
(
'action.'
+
type
)
actionType
.
value
=
type
dialogVisible
.
value
=
true
}
// 新增操作
const
handleCreate
=
()
=>
{
setDialogTile
(
'create'
)
/** 搜索按钮操作 */
const
handleQuery
=
()
=>
{
queryParams
.
pageNo
=
1
getList
()
}
// 修改操作
const
handleUpdate
=
async
(
rowId
:
number
)
=>
{
setDialogTile
(
'update'
)
// 设置数据
const
res
=
await
ConfigApi
.
getConfigApi
(
rowId
)
unref
(
formRef
)?.
setValues
(
res
)
/** 查询参数列表 */
const
getList
=
async
()
=>
{
loading
.
value
=
true
try
{
const
data
=
await
ConfigApi
.
getConfigPage
(
queryParams
)
list
.
value
=
data
.
list
total
.
value
=
data
.
value
}
finally
{
loading
.
value
=
false
}
}
// 详情操作
const
handleDetail
=
async
(
rowId
:
number
)
=>
{
setDialogTile
(
'detail'
)
const
res
=
await
ConfigApi
.
getConfigApi
(
rowId
)
detailData
.
value
=
res
/** 重置按钮操作 */
const
resetQuery
=
()
=>
{
queryForm
.
value
.
resetFields
()
handleQuery
()
}
// 提交按钮
const
submitForm
=
async
()
=>
{
const
elForm
=
unref
(
formRef
)?.
getElFormRef
()
if
(
!
elForm
)
return
elForm
.
validate
(
async
(
valid
)
=>
{
if
(
valid
)
{
actionLoading
.
value
=
true
// 提交请求
try
{
const
data
=
unref
(
formRef
)?.
formModel
as
ConfigApi
.
ConfigVO
if
(
actionType
.
value
===
'create'
)
{
await
ConfigApi
.
createConfigApi
(
data
)
message
.
success
(
t
(
'common.createSuccess'
))
}
else
{
await
ConfigApi
.
updateConfigApi
(
data
)
message
.
success
(
t
(
'common.updateSuccess'
))
}
dialogVisible
.
value
=
false
}
finally
{
actionLoading
.
value
=
false
// 刷新列表
await
reload
()
}
}
})
}
// ========== 初始化 ==========
onMounted
(()
=>
{
getList
()
})
</
script
>
src/views/infra/config/index2.vue
0 → 100644
View file @
ee9474fd
<
template
>
<ContentWrap>
<!-- 列表 -->
<XTable
@
register=
"registerTable"
>
<template
#
toolbar_buttons
>
<!-- 操作:新增 -->
<XButton
type=
"primary"
preIcon=
"ep:zoom-in"
:title=
"t('action.add')"
v-hasPermi=
"['infra:config:create']"
@
click=
"handleCreate()"
/>
<!-- 操作:导出 -->
<XButton
type=
"warning"
preIcon=
"ep:download"
:title=
"t('action.export')"
v-hasPermi=
"['infra:config:export']"
@
click=
"exportList('配置.xls')"
/>
</
template
>
<
template
#
visible_default=
"{ row }"
>
<span>
{{
row
.
visible
?
'是'
:
'否'
}}
</span>
</
template
>
<
template
#
actionbtns_default=
"{ row }"
>
<!-- 操作:修改 -->
<XTextButton
preIcon=
"ep:edit"
:title=
"t('action.edit')"
v-hasPermi=
"['infra:config:update']"
@
click=
"handleUpdate(row.id)"
/>
<!-- 操作:详情 -->
<XTextButton
preIcon=
"ep:view"
:title=
"t('action.detail')"
v-hasPermi=
"['infra:config:query']"
@
click=
"handleDetail(row.id)"
/>
<!-- 操作:删除 -->
<XTextButton
preIcon=
"ep:delete"
:title=
"t('action.del')"
v-hasPermi=
"['infra:config:delete']"
@
click=
"deleteData(row.id)"
/>
</
template
>
</XTable>
</ContentWrap>
<XModal
v-model=
"dialogVisible"
:title=
"dialogTitle"
>
<!-- 对话框(添加 / 修改) -->
<Form
v-if=
"['create', 'update'].includes(actionType)"
:schema=
"allSchemas.formSchema"
:rules=
"rules"
ref=
"formRef"
/>
<!-- 对话框(详情) -->
<Descriptions
v-if=
"actionType === 'detail'"
:schema=
"allSchemas.detailSchema"
:data=
"detailData"
>
<
template
#
visible=
"{ row }"
>
<span>
{{
row
.
visible
?
'是'
:
'否'
}}
</span>
</
template
>
</Descriptions>
<!-- 操作按钮 -->
<
template
#
footer
>
<!-- 按钮:保存 -->
<XButton
v-if=
"['create', 'update'].includes(actionType)"
type=
"primary"
:title=
"t('action.save')"
:loading=
"actionLoading"
@
click=
"submitForm()"
/>
<!-- 按钮:关闭 -->
<XButton
:loading=
"actionLoading"
:title=
"t('dialog.close')"
@
click=
"dialogVisible = false"
/>
</
template
>
</XModal>
</template>
<
script
setup
lang=
"ts"
name=
"Config"
>
import
type
{
FormExpose
}
from
'@/components/Form'
// 业务相关的 import
import
*
as
ConfigApi
from
'@/api/infra/config'
import
{
rules
,
allSchemas
}
from
'./config.data'
const
{
t
}
=
useI18n
()
// 国际化
const
message
=
useMessage
()
// 消息弹窗
// 列表相关的变量
const
[
registerTable
,
{
reload
,
deleteData
,
exportList
}]
=
useXTable
({
allSchemas
:
allSchemas
,
getListApi
:
ConfigApi
.
getConfigPage
,
deleteApi
:
ConfigApi
.
deleteConfigApi
,
exportListApi
:
ConfigApi
.
exportConfigApi
})
// ========== CRUD 相关 ==========
const
actionLoading
=
ref
(
false
)
// 遮罩层
const
actionType
=
ref
(
''
)
// 操作按钮的类型
const
dialogVisible
=
ref
(
false
)
// 是否显示弹出层
const
dialogTitle
=
ref
(
'edit'
)
// 弹出层标题
const
formRef
=
ref
<
FormExpose
>
()
// 表单 Ref
const
detailData
=
ref
()
// 详情 Ref
// 设置标题
const
setDialogTile
=
(
type
:
string
)
=>
{
dialogTitle
.
value
=
t
(
'action.'
+
type
)
actionType
.
value
=
type
dialogVisible
.
value
=
true
}
// 新增操作
const
handleCreate
=
()
=>
{
setDialogTile
(
'create'
)
}
// 修改操作
const
handleUpdate
=
async
(
rowId
:
number
)
=>
{
setDialogTile
(
'update'
)
// 设置数据
const
res
=
await
ConfigApi
.
getConfigApi
(
rowId
)
unref
(
formRef
)?.
setValues
(
res
)
}
// 详情操作
const
handleDetail
=
async
(
rowId
:
number
)
=>
{
setDialogTile
(
'detail'
)
const
res
=
await
ConfigApi
.
getConfigApi
(
rowId
)
detailData
.
value
=
res
}
// 提交按钮
const
submitForm
=
async
()
=>
{
const
elForm
=
unref
(
formRef
)?.
getElFormRef
()
if
(
!
elForm
)
return
elForm
.
validate
(
async
(
valid
)
=>
{
if
(
valid
)
{
actionLoading
.
value
=
true
// 提交请求
try
{
const
data
=
unref
(
formRef
)?.
formModel
as
ConfigApi
.
ConfigVO
if
(
actionType
.
value
===
'create'
)
{
await
ConfigApi
.
createConfigApi
(
data
)
message
.
success
(
t
(
'common.createSuccess'
))
}
else
{
await
ConfigApi
.
updateConfigApi
(
data
)
message
.
success
(
t
(
'common.updateSuccess'
))
}
dialogVisible
.
value
=
false
}
finally
{
actionLoading
.
value
=
false
// 刷新列表
await
reload
()
}
}
})
}
</
script
>
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