Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
S
saas-dml
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
EzijingWeb
saas-dml
Commits
d6f7f647
提交
d6f7f647
authored
11月 03, 2025
作者:
王鹏飞
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat: 将商品管理的重要属性和非重要属性改为可添加/删除的动态列表
上级
33720941
隐藏空白字符变更
内嵌
并排
正在显示
2 个修改的文件
包含
85 行增加
和
52 行删除
+85
-52
FormBaseInfo.vue
...dules/live/product/management/components/FormBaseInfo.vue
+75
-38
Update.vue
src/modules/live/product/management/views/Update.vue
+10
-14
没有找到文件。
src/modules/live/product/management/components/FormBaseInfo.vue
浏览文件 @
d6f7f647
<
script
setup
>
<
script
setup
>
import
{
Plus
,
Delete
}
from
'@element-plus/icons-vue'
import
{
useChat
}
from
'@/composables/useChat'
import
{
useChat
}
from
'@/composables/useChat'
import
{
getAttrList
}
from
'../api'
import
{
getAttrList
}
from
'../api'
const
form
=
inject
(
'form'
)
const
form
=
inject
(
'form'
)
...
@@ -63,28 +64,40 @@ watchEffect(() => {
...
@@ -63,28 +64,40 @@ watchEffect(() => {
fetchList
()
fetchList
()
})
})
function
handleChange
(
value
,
item
,
attr
)
{
// 获取可选的属性列表(排除已选择的,但包含当前项选中的)
form
.
live_commodity_attrs
[
attr
][
item
.
id
]
=
{
const
getAvailableAttrs
=
(
type
,
currentItemId
=
null
)
=>
{
id
:
item
.
id
,
const
selectedIds
=
form
.
live_commodity_attrs
[
type
].
map
((
item
)
=>
item
.
id
).
filter
((
id
)
=>
id
&&
id
!==
currentItemId
)
attr_name
:
item
.
name
,
return
attrs
[
type
].
items
.
filter
((
item
)
=>
!
selectedIds
.
includes
(
item
.
id
))
value
:
value
,
}
// 添加属性项
function
addAttrItem
(
type
)
{
form
.
live_commodity_attrs
[
type
].
push
({
id
:
''
,
attr_name
:
''
,
value
:
''
,
})
}
// 删除属性项
function
removeAttrItem
(
type
,
index
)
{
form
.
live_commodity_attrs
[
type
].
splice
(
index
,
1
)
}
// 选择属性
function
handleAttrSelect
(
attrId
,
item
,
type
)
{
const
selectedAttr
=
attrs
[
type
].
items
.
find
((
attr
)
=>
attr
.
id
===
attrId
)
if
(
selectedAttr
)
{
item
.
attr_name
=
selectedAttr
.
name
}
}
}
}
const
importanceTotal
=
computed
(()
=>
{
const
importanceTotal
=
computed
(()
=>
{
let
total
=
0
return
form
.
live_commodity_attrs
.
importance_attrs
.
filter
((
item
)
=>
item
.
id
&&
item
.
value
).
length
Object
.
values
(
form
.
live_commodity_attrs
.
importance_attrs
).
forEach
((
item
)
=>
{
if
(
item
.
value
)
total
++
})
return
total
})
})
const
unimportanceTotal
=
computed
(()
=>
{
const
unimportanceTotal
=
computed
(()
=>
{
let
total
=
0
return
form
.
live_commodity_attrs
.
unimportance_attrs
.
filter
((
item
)
=>
item
.
id
&&
item
.
value
).
length
Object
.
values
(
form
.
live_commodity_attrs
.
unimportance_attrs
).
forEach
((
item
)
=>
{
if
(
item
.
value
)
total
++
})
return
total
})
})
</
script
>
</
script
>
...
@@ -115,32 +128,56 @@ const unimportanceTotal = computed(() => {
...
@@ -115,32 +128,56 @@ const unimportanceTotal = computed(() => {
:label=
"`重要属性 $
{importanceTotal}/${attrs.importance_attrs.total}`"
:label=
"`重要属性 $
{importanceTotal}/${attrs.importance_attrs.total}`"
prop="live_commodity_attrs.importance_attrs">
prop="live_commodity_attrs.importance_attrs">
<div
class=
"form-tips"
>
错误填写属性,会引起商品下架,请认真准确填写。
</div>
<div
class=
"form-tips"
>
错误填写属性,会引起商品下架,请认真准确填写。
</div>
<el-form-item
<div
style=
"display: flex; flex-direction: column; gap: 16px"
>
v-for=
"item in attrs.importance_attrs.items"
<div
:key=
"item.id"
v-for=
"(item, index) in form.live_commodity_attrs.importance_attrs"
:label=
"item.name"
:key=
"index"
:required=
"item.is_importance == 1"
style=
"display: flex; align-items: flex-start; gap: 12px"
>
style=
"width: 200px; margin-right: 20px"
>
<el-select
<el-input
v-model=
"item.id"
placeholder=
"请输入"
placeholder=
"请选择属性"
:modelValue=
"form.live_commodity_attrs.importance_attrs[item.id]?.value"
style=
"width: 200px"
@
input=
"(value) => handleChange(value, item, 'importance_attrs')"
></el-input>
@
change=
"(value) => handleAttrSelect(value, item, 'importance_attrs')"
>
</el-form-item>
<el-option
v-for=
"attr in getAvailableAttrs('importance_attrs', item.id)"
:key=
"attr.id"
:label=
"attr.name"
:value=
"attr.id"
>
</el-option>
</el-select>
<el-input
v-model=
"item.value"
placeholder=
"请输入属性值"
style=
"flex: 1; max-width: 300px"
>
</el-input>
<el-button
type=
"danger"
plain
:icon=
"Delete"
circle
@
click=
"removeAttrItem('importance_attrs', index)"
>
</el-button>
</div>
<el-button
type=
"primary"
plain
:icon=
"Plus"
@
click=
"addAttrItem('importance_attrs')"
>
添加属性
</el-button>
</div>
</el-form-item>
</el-form-item>
<el-form-item
<el-form-item
:label=
"`非重要属性 $
{unimportanceTotal}/${attrs.unimportance_attrs.total}`"
:label=
"`非重要属性 $
{unimportanceTotal}/${attrs.unimportance_attrs.total}`"
prop="live_commodity_attrs.unimportance">
prop="live_commodity_attrs.unimportance_attrs">
<el-form-item
<div
style=
"display: flex; flex-direction: column; gap: 16px"
>
v-for=
"item in attrs.unimportance_attrs.items"
<div
:key=
"item.id"
v-for=
"(item, index) in form.live_commodity_attrs.unimportance_attrs"
:label=
"item.name"
:key=
"index"
:required=
"item.is_importance == 1"
style=
"display: flex; align-items: flex-start; gap: 12px"
>
style=
"width: 200px; margin-right: 20px"
>
<el-select
<el-input
v-model=
"item.id"
placeholder=
"请输入"
placeholder=
"请选择属性"
:modelValue=
"form.live_commodity_attrs.unimportance_attrs[item.id]?.value"
style=
"width: 200px"
@
input=
"(value) => handleChange(value, item, 'unimportance_attrs')"
></el-input>
@
change=
"(value) => handleAttrSelect(value, item, 'unimportance_attrs')"
>
</el-form-item>
<el-option
v-for=
"attr in getAvailableAttrs('unimportance_attrs', item.id)"
:key=
"attr.id"
:label=
"attr.name"
:value=
"attr.id"
>
</el-option>
</el-select>
<el-input
v-model=
"item.value"
placeholder=
"请输入属性值"
style=
"flex: 1; max-width: 300px"
>
</el-input>
<el-button
type=
"danger"
plain
:icon=
"Delete"
circle
@
click=
"removeAttrItem('unimportance_attrs', index)"
>
</el-button>
</div>
<el-button
type=
"primary"
plain
:icon=
"Plus"
@
click=
"addAttrItem('unimportance_attrs')"
>
添加属性
</el-button>
</div>
</el-form-item>
</el-form-item>
</div>
</div>
</
template
>
</
template
>
src/modules/live/product/management/views/Update.vue
浏览文件 @
d6f7f647
...
@@ -21,8 +21,8 @@ const form = reactive({
...
@@ -21,8 +21,8 @@ const form = reactive({
title
:
''
,
title
:
''
,
shopping_guide_short_title
:
''
,
shopping_guide_short_title
:
''
,
live_commodity_attrs
:
{
live_commodity_attrs
:
{
importance_attrs
:
{}
,
importance_attrs
:
[]
,
unimportance_attrs
:
{}
,
unimportance_attrs
:
[]
,
},
},
picture_addreses
:
[],
picture_addreses
:
[],
picture_34_addreses
:
[],
picture_34_addreses
:
[],
...
@@ -39,22 +39,18 @@ const form = reactive({
...
@@ -39,22 +39,18 @@ const form = reactive({
})
})
provide
(
'form'
,
form
)
provide
(
'form'
,
form
)
const
array2json
=
(
arr
)
=>
{
const
result
=
{}
arr
.
forEach
((
item
)
=>
{
result
[
item
.
id
]
=
{
...
item
}
})
return
result
}
async
function
fetchInfo
()
{
async
function
fetchInfo
()
{
const
res
=
await
getProduct
({
id
:
route
.
query
.
id
})
const
res
=
await
getProduct
({
id
:
route
.
query
.
id
})
const
detail
=
res
.
data
.
detail
const
detail
=
res
.
data
.
detail
const
attrs
=
JSON
.
parse
(
detail
.
live_commodity_attrs
)
const
attrs
=
JSON
.
parse
(
detail
.
live_commodity_attrs
)
Object
.
assign
(
form
,
detail
,
{
Object
.
assign
(
form
,
detail
,
{
live_commodity_attrs
:
{
live_commodity_attrs
:
{
importance_attrs
:
array2json
(
attrs
.
importance_attrs
),
importance_attrs
:
Array
.
isArray
(
attrs
.
importance_attrs
)
unimportance_attrs
:
array2json
(
attrs
.
unimportance_attrs
),
?
attrs
.
importance_attrs
:
Object
.
values
(
attrs
.
importance_attrs
||
{}),
unimportance_attrs
:
Array
.
isArray
(
attrs
.
unimportance_attrs
)
?
attrs
.
unimportance_attrs
:
Object
.
values
(
attrs
.
unimportance_attrs
||
{}),
},
},
picture_addreses
:
JSON
.
parse
(
detail
.
picture_addreses
),
picture_addreses
:
JSON
.
parse
(
detail
.
picture_addreses
),
picture_34_addreses
:
JSON
.
parse
(
detail
.
picture_34_addreses
),
picture_34_addreses
:
JSON
.
parse
(
detail
.
picture_34_addreses
),
...
@@ -83,8 +79,8 @@ async function handleSubmit() {
...
@@ -83,8 +79,8 @@ async function handleSubmit() {
const
params
=
{
const
params
=
{
...
form
,
...
form
,
live_commodity_attrs
:
JSON
.
stringify
({
live_commodity_attrs
:
JSON
.
stringify
({
importance_attrs
:
Object
.
values
(
form
.
live_commodity_attrs
.
importance_attrs
),
importance_attrs
:
form
.
live_commodity_attrs
.
importance_attrs
.
filter
((
item
)
=>
item
.
id
&&
item
.
value
),
unimportance_attrs
:
Object
.
values
(
form
.
live_commodity_attrs
.
unimportance_attrs
),
unimportance_attrs
:
form
.
live_commodity_attrs
.
unimportance_attrs
.
filter
((
item
)
=>
item
.
id
&&
item
.
value
),
}),
}),
picture_addreses
:
JSON
.
stringify
(
form
.
picture_addreses
),
picture_addreses
:
JSON
.
stringify
(
form
.
picture_addreses
),
picture_34_addreses
:
JSON
.
stringify
(
form
.
picture_34_addreses
),
picture_34_addreses
:
JSON
.
stringify
(
form
.
picture_34_addreses
),
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论