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
71de0c3e
authored
Nov 02, 2024
by
YunaiV
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【代码优化】工作流:1)完善相关注释;2)解决模型每次操作后,刷新列表后,重渲染会导致滚动条的位置不对的问题
parent
c3cf479f
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
37 additions
and
48 deletions
+37
-48
src/views/bpm/model/CategoryDraggableModel.vue
+21
-19
src/views/bpm/model/index.vue
+16
-29
No files found.
src/views/bpm/model/CategoryDraggableModel.vue
View file @
71de0c3e
<
template
>
<div
class=
"flex items-center h-50px"
>
<!-- 头部:分类名 -->
<div
class=
"flex items-center"
>
<el-tooltip
content=
"拖动排序"
v-if=
"isCategorySorting"
>
<Icon
...
...
@@ -11,6 +12,7 @@
<h3
class=
"ml-20px mr-8px text-18px"
>
{{
categoryInfo
.
name
}}
</h3>
<div
class=
"color-gray-600 text-16px"
>
(
{{
categoryInfo
.
modelList
?.
length
||
0
}}
)
</div>
</div>
<!-- 头部:操作 -->
<div
class=
"flex-1 flex"
v-if=
"!isCategorySorting"
>
<div
v-if=
"categoryInfo.modelList.length > 0"
...
...
@@ -62,6 +64,7 @@
</div>
</div>
</div>
<!-- 模型列表 -->
<el-collapse-transition>
<div
v-show=
"isExpand"
>
<el-table
...
...
@@ -70,7 +73,7 @@
:header-cell-style=
"{ backgroundColor: isDark ? '' : '#edeff0', paddingLeft: '10px' }"
:cell-style=
"{ paddingLeft: '10px' }"
:row-style=
"{ height: '68px' }"
:data=
"
tableData
"
:data=
"
modelList
"
row-key=
"id"
>
<el-table-column
label=
"流程名"
prop=
"name"
min-width=
"150"
>
...
...
@@ -110,7 +113,7 @@
<el-table-column
label=
"表单信息"
prop=
"formType"
min-width=
"200"
>
<
template
#
default=
"scope"
>
<el-button
v-if=
"scope.row.formType ===
10
"
v-if=
"scope.row.formType ===
BpmModelFormType.NORMAL
"
type=
"primary"
link
@
click=
"handleFormDetail(scope.row)"
...
...
@@ -118,7 +121,7 @@
<span>
{{
scope
.
row
.
formName
}}
</span>
</el-button>
<el-button
v-else-if=
"scope.row.formType ===
20
"
v-else-if=
"scope.row.formType ===
BpmModelFormType.CUSTOM
"
type=
"primary"
link
@
click=
"handleFormDetail(scope.row)"
...
...
@@ -246,7 +249,7 @@ import { formatDate } from '@/utils/formatTime'
import
*
as
ModelApi
from
'@/api/bpm/model'
import
*
as
FormApi
from
'@/api/bpm/form'
import
{
setConfAndFields2
}
from
'@/utils/formCreate'
import
{
BpmModelType
}
from
'@/utils/constants'
import
{
BpmModel
FormType
,
BpmModel
Type
}
from
'@/utils/constants'
import
{
checkPermi
}
from
'@/utils/permission'
import
{
useUserStoreWithOut
}
from
'@/store/modules/user'
import
{
useAppStore
}
from
'@/store/modules/app'
...
...
@@ -255,20 +258,19 @@ import { cloneDeep } from 'lodash-es'
defineOptions
({
name
:
'BpmModel'
})
const
props
=
defineProps
({
// 分类后的数据
categoryInfo
:
propTypes
.
object
.
def
([]),
isCategorySorting
:
propTypes
.
bool
.
def
(
false
)
categoryInfo
:
propTypes
.
object
.
def
([]),
// 分类后的数据
isCategorySorting
:
propTypes
.
bool
.
def
(
false
)
// 是否分类在排序
})
const
emit
=
defineEmits
([
'success'
])
const
appStore
=
useAppStore
()
const
message
=
useMessage
()
// 消息弹窗
const
isDark
=
computed
(()
=>
appStore
.
getIsDark
)
const
{
t
}
=
useI18n
()
// 国际化
const
{
push
}
=
useRouter
()
// 路由
const
userStore
=
useUserStoreWithOut
()
// 用户信息缓存
const
isDark
=
computed
(()
=>
useAppStore
().
getIsDark
)
// 是否黑暗模式
const
isModelSorting
=
ref
(
false
)
// 是否正处于排序状态
const
tableData
:
any
=
ref
([])
// 模型列表
const
originalData
:
any
=
ref
([])
// 原始数据
const
modelList
:
any
=
ref
([])
// 模型列表
const
isExpand
=
ref
(
false
)
// 是否处于展开状态
/** '更多'操作按钮 */
...
...
@@ -414,7 +416,7 @@ const handleModelSort = () => {
/** 处理模型的排序提交 */
const
handleModelSortSubmit
=
async
()
=>
{
// 保存排序
const
ids
=
tableData
.
value
.
map
((
item
:
any
)
=>
item
.
id
)
const
ids
=
modelList
.
value
.
map
((
item
:
any
)
=>
item
.
id
)
await
ModelApi
.
updateModelSortBatch
(
ids
)
// 刷新列表
isModelSorting
.
value
=
false
...
...
@@ -425,12 +427,12 @@ const handleModelSortSubmit = async () => {
/** 处理模型的排序取消 */
const
handleModelSortCancel
=
()
=>
{
// 恢复初始数据
tableData
.
value
=
cloneDeep
(
originalData
.
value
)
modelList
.
value
=
cloneDeep
(
originalData
.
value
)
isModelSorting
.
value
=
false
}
/** 创建拖拽实例 */
const
tableRef
=
ref
()
// 创建拖拽实例
const
initSort
=
()
=>
{
const
table
=
document
.
querySelector
(
`.
${
props
.
categoryInfo
.
name
}
.el-table__body-wrapper tbody`
)
Sortable
.
create
(
table
,
{
...
...
@@ -441,19 +443,19 @@ const initSort = () => {
// 结束拖动事件
onEnd
:
({
newDraggableIndex
,
oldDraggableIndex
})
=>
{
if
(
oldDraggableIndex
!==
newDraggableIndex
)
{
tableData
.
value
.
splice
(
modelList
.
value
.
splice
(
newDraggableIndex
,
0
,
tableData
.
value
.
splice
(
oldDraggableIndex
,
1
)[
0
]
modelList
.
value
.
splice
(
oldDraggableIndex
,
1
)[
0
]
)
}
}
})
}
/
/ 更新表格数据
const
update
TableData
=
()
=>
{
tableData
.
value
=
cloneDeep
(
props
.
categoryInfo
.
modelList
)
/
** 更新 modelList 模型列表 */
const
update
ModeList
=
()
=>
{
modelList
.
value
=
cloneDeep
(
props
.
categoryInfo
.
modelList
)
if
(
props
.
categoryInfo
.
modelList
.
length
>
0
)
{
isExpand
.
value
=
true
}
...
...
@@ -497,7 +499,7 @@ const openModelForm = (type: string, id?: number) => {
modelFormRef
.
value
.
open
(
type
,
id
)
}
watch
(()
=>
props
.
categoryInfo
.
modelList
,
update
TableData
,
{
immediate
:
true
})
watch
(()
=>
props
.
categoryInfo
.
modelList
,
update
ModeList
,
{
immediate
:
true
})
watch
(
()
=>
props
.
isCategorySorting
,
(
val
)
=>
{
...
...
src/views/bpm/model/index.vue
View file @
71de0c3e
...
...
@@ -38,11 +38,11 @@
</el-button>
<
template
#
dropdown
>
<el-dropdown-menu>
<el-dropdown-item
command=
"handle
AddCategory
"
>
<el-dropdown-item
command=
"handle
CategoryAdd
"
>
<Icon
icon=
"ep:circle-plus"
:size=
"13"
class=
"mr-5px"
/>
新建分类
</el-dropdown-item>
<el-dropdown-item
command=
"handleSort"
>
<el-dropdown-item
command=
"handle
Category
Sort"
>
<Icon
icon=
"fa:sort-amount-desc"
:size=
"13"
class=
"mr-5px"
/>
分类排序
</el-dropdown-item>
...
...
@@ -101,7 +101,7 @@ import { CategoryApi } from '@/api/bpm/category'
import
*
as
ModelApi
from
'@/api/bpm/model'
import
ModelForm
from
'./ModelForm.vue'
import
CategoryForm
from
'../category/CategoryForm.vue'
import
{
groupBy
,
cloneDeep
}
from
'lodash-es'
import
{
cloneDeep
}
from
'lodash-es'
import
CategoryDraggableModel
from
'./CategoryDraggableModel.vue'
defineOptions
({
name
:
'BpmModel'
})
...
...
@@ -116,26 +116,6 @@ const queryFormRef = ref() // 搜索的表单
const
categoryGroup
:
any
=
ref
([])
// 按照 category 分组的数据
const
originalData
:
any
=
ref
([])
// 原始数据
/** 查询所有分类 */
const
getAllCategory
=
async
()
=>
{
const
list
=
await
CategoryApi
.
getCategorySimpleList
()
categoryGroup
.
value
=
list
.
map
((
item
:
any
)
=>
({
...
item
,
modelList
:
[]
}))
}
/** 查询所有流程模型接口 */
const
getAllModel
=
async
()
=>
{
// 查询所有流程模型
const
list
=
await
ModelApi
.
getModelList
(
queryParams
.
name
)
// 按照 categoryName 分组
const
groupedData
=
groupBy
(
list
,
'categoryName'
)
Object
.
keys
(
groupedData
).
forEach
((
key
)
=>
{
const
category
=
categoryGroup
.
value
.
find
((
item
:
any
)
=>
item
.
name
===
key
)
if
(
category
)
{
category
.
modelList
=
groupedData
[
key
]
}
})
}
/** 搜索按钮操作 */
const
handleQuery
=
()
=>
{
getList
()
...
...
@@ -157,10 +137,10 @@ const formDetailPreview = ref({
/** 右上角设置按钮 */
const
handleCommand
=
(
command
:
string
)
=>
{
switch
(
command
)
{
case
'handle
AddCategory
'
:
handle
AddCategory
()
case
'handle
CategoryAdd
'
:
handle
CategoryAdd
()
break
case
'handleSort'
:
case
'handle
Category
Sort'
:
handleCategorySort
()
break
default
:
...
...
@@ -170,7 +150,7 @@ const handleCommand = (command: string) => {
/** 新建分类 */
const
categoryFormRef
=
ref
()
const
handle
AddCategory
=
()
=>
{
const
handle
CategoryAdd
=
()
=>
{
categoryFormRef
.
value
.
open
(
'create'
)
}
...
...
@@ -203,8 +183,15 @@ const handleCategorySortSubmit = async () => {
const
getList
=
async
()
=>
{
loading
.
value
=
true
try
{
await
getAllCategory
()
await
getAllModel
()
// 查询模型 + 分裂的列表
const
modelList
=
await
ModelApi
.
getModelList
(
queryParams
.
name
)
const
categoryList
=
await
CategoryApi
.
getCategorySimpleList
()
// 按照 category 聚合
// 注意:必须一次性赋值给 categoryGroup,否则每次操作后,列表会重新渲染,滚动条的位置会偏离!!!
categoryGroup
.
value
=
categoryList
.
map
((
category
:
any
)
=>
({
...
category
,
modelList
:
modelList
.
filter
((
model
:
any
)
=>
model
.
categoryName
==
category
.
name
)
}))
}
finally
{
loading
.
value
=
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