Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
661c380f
提交
661c380f
authored
9月 17, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(promotion/display): 调整:切换展示列方式和列选择对应问题
上级
31a19c40
全部展开
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
178 行增加
和
18 行删除
+178
-18
index.vue
src/components/RightToolbar/index.vue
+155
-10
request.js
src/utils/request.js
+8
-8
index.vue
src/views/halogen/details/index.vue
+15
-0
index.vue
src/views/promotion/display/index.vue
+0
-0
没有找到文件。
src/components/RightToolbar/index.vue
浏览文件 @
661c380f
...
@@ -39,14 +39,35 @@
...
@@ -39,14 +39,35 @@
<template
v-for=
"item in columns"
<template
v-for=
"item in columns"
:key=
"item.key"
>
:key=
"item.key"
>
<el-dropdown-item>
<el-dropdown-item>
<el-checkbox
:checked=
"item.visible"
<el-checkbox
v-model=
"item.visible"
@
change=
"checkboxChange($event, item.label)"
:label=
"item.label"
/>
:label=
"item.label"
/>
</el-dropdown-item>
</el-dropdown-item>
</
template
>
</
template
>
</el-dropdown-menu>
</el-dropdown-menu>
</template>
</template>
</el-dropdown>
</el-dropdown>
<!-- 树结构选择方式 -->
<el-dropdown
trigger=
"click"
:hide-on-click=
"false"
style=
"padding-left: 12px"
v-if=
"showColumnsType == 'tree'"
>
<el-button
circle
icon=
"Menu"
/>
<
template
#
dropdown
>
<el-dropdown-menu
class=
"tree-dropdown-menu"
>
<el-tree
:data=
"treeData"
show-checkbox
node-key=
"prop"
ref=
"columnTree"
:props=
"treeProps"
default-expand-all
check-on-click-node
:default-checked-keys=
"defaultCheckedKeys"
@
check=
"handleTreeCheck"
/>
</el-dropdown-menu>
</
template
>
</el-dropdown>
</el-tooltip>
</el-tooltip>
<!-- 自定义功能 -->
<!-- 自定义功能 -->
<slot></slot>
<slot></slot>
...
@@ -79,7 +100,7 @@ const props = defineProps({
...
@@ -79,7 +100,7 @@ const props = defineProps({
type
:
Boolean
,
type
:
Boolean
,
default
:
true
,
default
:
true
,
},
},
/* 显隐列类型(transfer穿梭框、checkbox复选框) */
/* 显隐列类型(transfer穿梭框、checkbox复选框
、tree树形结构
) */
showColumnsType
:
{
showColumnsType
:
{
type
:
String
,
type
:
String
,
default
:
"checkbox"
,
default
:
"checkbox"
,
...
@@ -89,6 +110,19 @@ const props = defineProps({
...
@@ -89,6 +110,19 @@ const props = defineProps({
type
:
Number
,
type
:
Number
,
default
:
10
,
default
:
10
,
},
},
/* 树形结构配置(可选) */
treeConfig
:
{
type
:
Object
,
default
:
()
=>
({
labelKey
:
'label'
,
childrenKey
:
'children'
})
},
/* 树形结构默认选中的节点 */
defaultCheckedKeys
:
{
type
:
Array
,
default
:
()
=>
[]
}
})
})
const
emits
=
defineEmits
([
'update:showSearch'
,
'queryTable'
]);
const
emits
=
defineEmits
([
'update:showSearch'
,
'queryTable'
]);
...
@@ -99,6 +133,15 @@ const value = ref([]);
...
@@ -99,6 +133,15 @@ const value = ref([]);
const
title
=
ref
(
"显示/隐藏"
);
const
title
=
ref
(
"显示/隐藏"
);
// 是否显示弹出层
// 是否显示弹出层
const
open
=
ref
(
false
);
const
open
=
ref
(
false
);
// 树结构数据
const
treeData
=
ref
([]);
// 树结构配置
const
treeProps
=
{
label
:
props
.
treeConfig
.
labelKey
||
'label'
,
children
:
props
.
treeConfig
.
childrenKey
||
'children'
};
// 树引用
const
columnTree
=
ref
(
null
);
const
style
=
computed
(()
=>
{
const
style
=
computed
(()
=>
{
const
ret
=
{};
const
ret
=
{};
...
@@ -131,6 +174,80 @@ function showColumn() {
...
@@ -131,6 +174,80 @@ function showColumn() {
open
.
value
=
true
;
open
.
value
=
true
;
}
}
// 树形结构节点勾选变化
function
handleTreeCheck
(
currentNode
,
checkedInfo
)
{
const
node
=
currentNode
;
// 判断当前节点是否被勾选(检查当前节点prop是否在checkedKeys中)
const
isChecked
=
checkedInfo
.
checkedKeys
.
includes
(
node
.
prop
);
// 处理父节点的特殊情况:如果是父节点(有children),则更新其所有子节点
if
(
node
.
children
&&
node
.
children
.
length
>
0
)
{
// 获取该父节点下的所有子节点prop
const
allChildProps
=
[];
const
collectChildProps
=
(
nodes
)
=>
{
nodes
.
forEach
(
child
=>
{
if
(
child
.
children
&&
child
.
children
.
length
>
0
)
{
collectChildProps
(
child
.
children
);
}
else
{
allChildProps
.
push
(
child
.
prop
);
}
});
};
collectChildProps
(
node
.
children
);
// 更新所有子节点的visible属性
allChildProps
.
forEach
(
prop
=>
{
updateColumnVisibilityByProp
(
prop
,
isChecked
);
});
}
else
{
// 对于单个节点,直接更新其visible属性
updateColumnVisibilityByProp
(
node
.
prop
,
isChecked
);
}
}
// 新增:根据prop更新对应列的visible属性
function
updateColumnVisibilityByProp
(
prop
,
visible
)
{
const
updateColumn
=
(
columns
)
=>
{
for
(
let
i
=
0
;
i
<
columns
.
length
;
i
++
)
{
const
item
=
columns
[
i
];
if
(
item
.
children
&&
item
.
children
.
length
>
0
)
{
// 递归查找子节点
const
found
=
updateColumn
(
item
.
children
);
if
(
found
)
return
true
;
}
else
if
(
item
.
prop
===
prop
)
{
// 找到匹配的节点,更新其visible属性
item
.
visible
=
visible
;
return
true
;
}
}
return
false
;
};
// 从props.columns中查找并更新
updateColumn
(
props
.
columns
);
}
// 3. 修改initTreeData方法,确保正确处理prop字段
function
initTreeData
()
{
if
(
props
.
columns
&&
props
.
showColumnsType
===
'tree'
)
{
// 创建树数据但不深拷贝,保持引用关系
treeData
.
value
=
props
.
columns
;
}
}
watch
(()
=>
props
.
columns
,
()
=>
{
initTreeData
();
})
// 再添加一个watcher来监听showColumnsType变化
watch
(
()
=>
props
.
showColumnsType
,
(
newType
,
oldType
)
=>
{
if
(
newType
===
'tree'
)
{
initTreeData
();
}
}
)
if
(
props
.
showColumnsType
==
'transfer'
)
{
if
(
props
.
showColumnsType
==
'transfer'
)
{
// 显隐列初始默认隐藏列
// 显隐列初始默认隐藏列
for
(
let
item
in
props
.
columns
)
{
for
(
let
item
in
props
.
columns
)
{
...
@@ -138,13 +255,19 @@ if (props.showColumnsType == 'transfer') {
...
@@ -138,13 +255,19 @@ if (props.showColumnsType == 'transfer') {
value
.
value
.
push
(
parseInt
(
item
));
value
.
value
.
push
(
parseInt
(
item
));
}
}
}
}
}
else
if
(
props
.
showColumnsType
===
'tree'
)
{
// 初始化树数据
initTreeData
();
}
}
// 勾选
// 勾选 - 修改为更健壮的实现
function
checkboxChange
(
event
,
label
)
{
// function checkboxChange(event, label) {
props
.
columns
.
filter
(
item
=>
item
.
label
==
label
)[
0
].
visible
=
event
;
// // 使用find方法而不是filter,更高效
}
// const column = props.columns.find(item => item.label === label);
// if (column) {
// column.visible = event;
// }
// }
</
script
>
</
script
>
<
style
lang=
'scss'
<
style
lang=
'scss'
...
@@ -173,5 +296,26 @@ function checkboxChange(event, label) {
...
@@ -173,5 +296,26 @@ function checkboxChange(event, label) {
margin-left
:
0
;
margin-left
:
0
;
}
}
}
}
</
style
>
/* 树结构下拉菜单样式 */
.tree-dropdown-menu
{
max-height
:
400px
;
overflow-y
:
auto
;
min-width
:
300px
;
padding
:
10px
;
}
:deep
(
.el-tree
)
{
max-height
:
380px
;
overflow-y
:
auto
;
}
/* 添加选中节点文字蓝色样式 */
:deep
(
.el-tree-node.is-checked
>
.el-tree-node__content
.el-tree-node__label
)
{
color
:
#409EFF
;
}
:deep
(
.el-tree-node__content
.el-checkbox__input.is-checked
+
.el-checkbox__label
)
{
color
:
#409EFF
;
}
</
style
>
\ No newline at end of file
src/utils/request.js
浏览文件 @
661c380f
...
@@ -103,14 +103,14 @@ service.interceptors.response.use(async res => {
...
@@ -103,14 +103,14 @@ service.interceptors.response.use(async res => {
// PC/移动端刷新 token 有效期
// PC/移动端刷新 token 有效期
// await useUserStore().refreshTokenFn()
// await useUserStore().refreshTokenFn()
// return service(res.config)
// return service(res.config)
//
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
ElMessageBox
.
confirm
(
'登录状态已过期,您可以继续留在该页面,或者重新登录'
,
'系统提示'
,
{
confirmButtonText
:
'重新登录'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
//
isRelogin.show = false;
isRelogin
.
show
=
false
;
//
useUserStore().logOut().then(() => {
useUserStore
().
logOut
().
then
(()
=>
{
//
location.href = '#/login';
location
.
href
=
'#/login'
;
//
})
})
//
}).catch(() => {
}).
catch
(()
=>
{
//
isRelogin.show = false;
isRelogin
.
show
=
false
;
//
});
});
return
Promise
.
reject
(
'无效的会话,或者会话已过期,请重新登录。'
)
return
Promise
.
reject
(
'无效的会话,或者会话已过期,请重新登录。'
)
}
else
if
(
code
===
403
)
{
}
else
if
(
code
===
403
)
{
...
...
src/views/halogen/details/index.vue
0 → 100644
浏览文件 @
661c380f
<
template
>
<div
class=
"app-container"
>
<div
class=
"container"
>
卤币明细
</div>
</div>
</
template
>
<
script
setup
>
</
script
>
<
style
scoped
lang=
"scss"
></
style
>
\ No newline at end of file
src/views/promotion/display/index.vue
0 → 100644
浏览文件 @
661c380f
差异被折叠。
点击展开。
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论