Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
9c61ac9c
提交
9c61ac9c
authored
11月 12, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(promotion/*): 修改:店内执行上报_某些列的规则更新
上级
0531bb20
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
100 行增加
和
68 行删除
+100
-68
App.vue
src/App.vue
+1
-0
display.vue
src/views/promotion/display_schedule/tabs/display.vue
+4
-0
schedule.vue
src/views/promotion/display_schedule/tabs/schedule.vue
+27
-32
schedule_dis.vue
src/views/promotion/display_schedule/tabs/schedule_dis.vue
+14
-3
snack.vue
src/views/promotion/display_schedule/tabs/snack.vue
+54
-33
没有找到文件。
src/App.vue
浏览文件 @
9c61ac9c
...
@@ -52,6 +52,7 @@ onMounted(() => {
...
@@ -52,6 +52,7 @@ onMounted(() => {
<
style
scoped
<
style
scoped
lang=
"scss"
>
lang=
"scss"
>
.wm-class
{
.wm-class
{
min-height
:
100%
;
height
:
100%
;
height
:
100%
;
}
}
</
style
>
</
style
>
src/views/promotion/display_schedule/tabs/display.vue
浏览文件 @
9c61ac9c
...
@@ -466,6 +466,7 @@
...
@@ -466,6 +466,7 @@
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedMainShelfType
||
!
row
.
plannedMainShelfQty
)
{
if
(
!
row
.
plannedMainShelfType
||
!
row
.
plannedMainShelfQty
)
{
row
.
actualMainShelfExecuted
=
'-'
return
'-'
;
return
'-'
;
}
}
row
.
actualMainShelfExecuted
=
((
parseInt
(
row
.
actualMainShelfType
)
>=
parseInt
(
row
.
plannedMainShelfType
))
&&
(
parseInt
(
row
.
actualMainShelfQty
)
>=
parseInt
(
row
.
plannedMainShelfQty
)))
?
'是'
:
'否'
;
row
.
actualMainShelfExecuted
=
((
parseInt
(
row
.
actualMainShelfType
)
>=
parseInt
(
row
.
plannedMainShelfType
))
&&
(
parseInt
(
row
.
actualMainShelfQty
)
>=
parseInt
(
row
.
plannedMainShelfQty
)))
?
'是'
:
'否'
;
...
@@ -546,6 +547,7 @@
...
@@ -546,6 +547,7 @@
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedEndCapQty
)
{
if
(
!
row
.
plannedEndCapQty
)
{
row
.
actualEndCapExecuted
=
'-'
return
'-'
;
return
'-'
;
}
}
row
.
actualEndCapExecuted
=
((
parseFloat
(
row
.
actualEndCapQty
)
>=
parseFloat
(
row
.
plannedEndCapQty
)))
?
'是'
:
'否'
;
row
.
actualEndCapExecuted
=
((
parseFloat
(
row
.
actualEndCapQty
)
>=
parseFloat
(
row
.
plannedEndCapQty
)))
?
'是'
:
'否'
;
...
@@ -684,6 +686,7 @@
...
@@ -684,6 +686,7 @@
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedFloorStackArea
||
!
row
.
plannedFloorStackQty
)
{
if
(
!
row
.
plannedFloorStackArea
||
!
row
.
plannedFloorStackQty
)
{
row
.
actualFloorStackExecuted
=
'-'
return
'-'
;
return
'-'
;
}
}
row
.
actualFloorStackExecuted
=
((
parseFloat
(
row
.
actualFloorStackArea
)
>=
parseFloat
(
row
.
plannedFloorStackArea
))
&&
(
parseInt
(
row
.
actualFloorStackQty
)
>=
parseInt
(
row
.
plannedFloorStackQty
)))
?
'是'
:
'否'
;
row
.
actualFloorStackExecuted
=
((
parseFloat
(
row
.
actualFloorStackArea
)
>=
parseFloat
(
row
.
plannedFloorStackArea
))
&&
(
parseInt
(
row
.
actualFloorStackQty
)
>=
parseInt
(
row
.
plannedFloorStackQty
)))
?
'是'
:
'否'
;
...
@@ -782,6 +785,7 @@
...
@@ -782,6 +785,7 @@
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedMultiDisplay
)
{
if
(
!
row
.
plannedMultiDisplay
)
{
row
.
actualMultiDisplayExecuted
=
'-'
return
'-'
;
return
'-'
;
}
}
row
.
actualMultiDisplayExecuted
=
(
row
.
actualMultiDisplay
)
?
'是'
:
'否'
;
row
.
actualMultiDisplayExecuted
=
(
row
.
actualMultiDisplay
)
?
'是'
:
'否'
;
...
...
src/views/promotion/display_schedule/tabs/schedule.vue
浏览文件 @
9c61ac9c
...
@@ -330,6 +330,10 @@
...
@@ -330,6 +330,10 @@
visible
:
true
,
visible
:
true
,
type
:
'formula'
,
type
:
'formula'
,
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionSpec
)
{
return
'-'
;
}
row
.
specExecutionStatus
=
row
.
plannedPromotionSpec
===
row
.
actualPromotionSpec
?
'是'
:
'否'
;
row
.
specExecutionStatus
=
row
.
plannedPromotionSpec
===
row
.
actualPromotionSpec
?
'是'
:
'否'
;
return
row
.
specExecutionStatus
;
return
row
.
specExecutionStatus
;
},
},
...
@@ -409,6 +413,10 @@
...
@@ -409,6 +413,10 @@
visible
:
true
,
visible
:
true
,
type
:
'formula'
,
type
:
'formula'
,
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionFlavor
)
{
return
'-'
;
}
// 处理逗号的口味形成数组
// 处理逗号的口味形成数组
let
ppromotionFlavor
=
splitAndFilter
(
row
.
plannedPromotionFlavor
)
let
ppromotionFlavor
=
splitAndFilter
(
row
.
plannedPromotionFlavor
)
if
(
!
row
.
actualPromotionFlavor
)
{
if
(
!
row
.
actualPromotionFlavor
)
{
...
@@ -599,6 +607,10 @@
...
@@ -599,6 +607,10 @@
visible
:
true
,
visible
:
true
,
type
:
'formula'
,
type
:
'formula'
,
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionStartDate
||
!
row
.
plannedPromotionEndDate
)
{
return
'-'
;
}
row
.
promotionImplementationStatus
=
row
.
actualPromotionStartDate
&&
row
.
actualPromotionEndDate
?
'是'
:
'否'
;
row
.
promotionImplementationStatus
=
row
.
actualPromotionStartDate
&&
row
.
actualPromotionEndDate
?
'是'
:
'否'
;
return
row
.
promotionImplementationStatus
;
return
row
.
promotionImplementationStatus
;
},
},
...
@@ -612,6 +624,10 @@
...
@@ -612,6 +624,10 @@
visible
:
true
,
visible
:
true
,
type
:
'formula'
,
type
:
'formula'
,
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionStartDate
||
!
row
.
plannedPromotionEndDate
)
{
return
'-'
;
}
row
.
timeExecutionStatus
=
(
parseTime
(
row
.
actualPromotionStartDate
)
===
parseTime
(
row
.
plannedPromotionStartDate
))
&&
parseTime
(
row
.
actualPromotionEndDate
)
===
parseTime
(
row
.
plannedPromotionEndDate
)
?
'是'
:
'否'
;
row
.
timeExecutionStatus
=
(
parseTime
(
row
.
actualPromotionStartDate
)
===
parseTime
(
row
.
plannedPromotionStartDate
))
&&
parseTime
(
row
.
actualPromotionEndDate
)
===
parseTime
(
row
.
plannedPromotionEndDate
)
?
'是'
:
'否'
;
return
row
.
timeExecutionStatus
;
return
row
.
timeExecutionStatus
;
},
},
...
@@ -658,39 +674,18 @@
...
@@ -658,39 +674,18 @@
label
:
"促销机制是否执行"
,
label
:
"促销机制是否执行"
,
prop
:
"promotionMechanismExecutionStatus"
,
prop
:
"promotionMechanismExecutionStatus"
,
visible
:
true
,
visible
:
true
,
type
:
'select'
,
type
:
'formula'
,
options
:
[
func
:
(
row
)
=>
{
{
// 如果参考值是空则返回 '-'
label
:
'是'
,
if
(
!
row
.
plannedPromotionMechanism
)
{
value
:
'是'
return
'-'
;
},
{
label
:
'否'
,
value
:
'否'
}
}
],
row
.
promotionMechanismExecutionStatus
=
row
.
actualPromotionMechanism
?
'是'
:
'否'
;
return
row
.
promotionMechanismExecutionStatus
;
},
formulaStr
:
'公式:实际促销机制,是否有值'
,
fill
:
true
,
fill
:
true
,
width
:
135
,
width
:
145
,
render
:
(
_
,
row
,
col
)
=>
{
return
(
<
div
>
<
div
style
=
"width: 100%;"
>
<
el
-
select
modelValue
=
{
row
[
col
.
prop
]}
onUpdate
:
modelValue
=
{(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}}
placeholder
=
""
clearable
>
{
col
.
options
.
map
((
item
)
=>
(
<
el
-
option
key
=
{
item
.
value
}
label
=
{
item
.
label
}
value
=
{
item
.
value
}
/
>
))}
<
/el-select
>
<
/div
>
<
/div
>
)
}
},
},
{
{
label
:
"预估袋数"
,
label
:
"预估袋数"
,
...
@@ -876,7 +871,7 @@
...
@@ -876,7 +871,7 @@
row
.
promotionExecutionStatus
=
row
.
promotionPriceExecutionStatus
==
'是'
&&
row
.
promotionMechanismExecutionStatus
==
'是'
&&
row
.
specExecutionStatus
==
'是'
&&
row
.
promotionImplementationStatus
==
'是'
?
'是'
:
'否'
;
row
.
promotionExecutionStatus
=
row
.
promotionPriceExecutionStatus
==
'是'
&&
row
.
promotionMechanismExecutionStatus
==
'是'
&&
row
.
specExecutionStatus
==
'是'
&&
row
.
promotionImplementationStatus
==
'是'
?
'是'
:
'否'
;
return
row
.
promotionExecutionStatus
;
return
row
.
promotionExecutionStatus
;
},
},
formulaStr
:
'公式:
(促销价是否执行 = 是,并且促销机制是否执行 = 是,并且促销规格是否执行 = 是,并且档期是否开展 = 是
)'
,
formulaStr
:
'公式:
促销价执行,并且促销机制执行,并且促销规格执行,并且档期开展(某项无计划时,忽略该项
)'
,
fill
:
true
,
fill
:
true
,
width
:
125
width
:
125
}
}
...
...
src/views/promotion/display_schedule/tabs/schedule_dis.vue
浏览文件 @
9c61ac9c
...
@@ -445,6 +445,10 @@
...
@@ -445,6 +445,10 @@
"fill"
:
true
,
"fill"
:
true
,
"width"
:
160
,
"width"
:
160
,
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果计划端架数量为空则返回 '-'
if
(
!
row
.
plannedEndCapQty
)
{
return
'-'
;
}
row
.
actualEndCapExecuted
=
row
.
actualEndCapQty
>=
row
.
plannedEndCapQty
?
'是'
:
'否'
row
.
actualEndCapExecuted
=
row
.
actualEndCapQty
>=
row
.
plannedEndCapQty
?
'是'
:
'否'
return
row
.
actualEndCapExecuted
return
row
.
actualEndCapExecuted
},
},
...
@@ -594,6 +598,10 @@
...
@@ -594,6 +598,10 @@
"fill"
:
true
,
"fill"
:
true
,
"width"
:
150
,
"width"
:
150
,
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
// 如果计划端架数量为空则返回 '-'
if
(
!
row
.
plannedFloorStackArea
||
!
row
.
plannedFloorStackQty
)
{
return
'-'
;
}
row
.
actualFloorStackExecuted
=
row
.
actualFloorStackArea
>=
row
.
plannedFloorStackArea
&&
row
.
actualFloorStackQty
>=
row
.
plannedFloorStackQty
?
'是'
:
'否'
row
.
actualFloorStackExecuted
=
row
.
actualFloorStackArea
>=
row
.
plannedFloorStackArea
&&
row
.
actualFloorStackQty
>=
row
.
plannedFloorStackQty
?
'是'
:
'否'
return
row
.
actualFloorStackExecuted
return
row
.
actualFloorStackExecuted
},
},
...
@@ -651,10 +659,13 @@
...
@@ -651,10 +659,13 @@
"fill"
:
true
,
"fill"
:
true
,
"width"
:
190
,
"width"
:
190
,
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
row
.
actualOtherDisplayExecuted
=
!
row
.
actualOtherDisplay
?
'否'
:
'是'
if
(
!
row
.
plannedOtherDisplay
)
{
return
'-'
;
}
row
.
actualOtherDisplayExecuted
=
row
.
actualOtherDisplay
?
'是'
:
'否'
return
row
.
actualOtherDisplayExecuted
return
row
.
actualOtherDisplayExecuted
},
},
formulaStr
:
"
执行其他陈列数量 + 形式,是否等于计划其他陈列数量 + 形式
"
formulaStr
:
"
公式:实际其他陈列-数量+形式,有值
"
},
},
{
{
"label"
:
"合计费用 - 费用"
,
"label"
:
"合计费用 - 费用"
,
...
@@ -676,7 +687,7 @@
...
@@ -676,7 +687,7 @@
row
.
promotionDisplayExecuted
=
row
.
actualEndShelfExecuted
===
'是'
&&
row
.
actualFloorStackExecuted
===
'是'
&&
row
.
actualOtherDisplayExecuted
===
'是'
?
'是'
:
'否'
row
.
promotionDisplayExecuted
=
row
.
actualEndShelfExecuted
===
'是'
&&
row
.
actualFloorStackExecuted
===
'是'
&&
row
.
actualOtherDisplayExecuted
===
'是'
?
'是'
:
'否'
return
row
.
promotionDisplayExecuted
return
row
.
promotionDisplayExecuted
},
},
formulaStr
:
"
实际端架-是否执行 === '是',并且 实际地堆是否执行 === '是',并且 实际其他陈列-是否执行 === '是'
"
formulaStr
:
"
公式:实际端架执行,并且实际地堆执行,并且实际其他陈列执行(某项无计划时,忽略该项)
"
},
},
{
{
"label"
:
"付费陈列 - 是否"
,
"label"
:
"付费陈列 - 是否"
,
...
...
src/views/promotion/display_schedule/tabs/snack.vue
浏览文件 @
9c61ac9c
...
@@ -261,50 +261,68 @@
...
@@ -261,50 +261,68 @@
"label"
:
"实际 - 陈列形式"
,
"label"
:
"实际 - 陈列形式"
,
"prop"
:
"actualDisplay"
,
"prop"
:
"actualDisplay"
,
"visible"
:
true
,
"visible"
:
true
,
"type"
:
"
selec
t"
,
"type"
:
"
inpu
t"
,
referenceKey
:
"plannedDisplay"
,
referenceKey
:
"plannedDisplay"
,
"fill"
:
true
,
"width"
:
160
,
"options"
:
[
{
"label"
:
"端架"
,
"value"
:
"端架"
},
{
"label"
:
"收银台"
,
"value"
:
"收银台"
},
{
"label"
:
"端架和收银台"
,
"value"
:
"端架和收银台"
}
],
render
:
(
_
,
row
,
col
)
=>
{
render
:
(
_
,
row
,
col
)
=>
{
return
(
return
(
<
div
>
<
div
>
<
el
-
tooltip
placement
=
"top"
content
=
{
row
[
col
.
referenceKey
]
||
'-'
}
disabled
=
{
!
isContentOverflow
(
col
.
referenceKey
,
row
[
col
.
referenceKey
],
col
)}
>
<
span
>
{
row
[
col
.
referenceKey
]
||
'-'
}
<
/span
>
<
span
style
=
"white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: inline-block; max-width: 100%;"
>
<
div
>
{
row
[
col
.
referenceKey
]
||
'-'
}
<
el
-
input
modelValue
=
{
row
[
col
.
prop
]}
<
/span
>
<
/el-tooltip
>
<
el
-
select
modelValue
=
{
row
[
col
.
prop
]}
onUpdate
:
modelValue
=
{(
value
)
=>
{
onUpdate
:
modelValue
=
{(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
submitChange
(
row
,
col
);
}}
}}
disabled
=
{
!
row
[
col
.
referenceKey
]}
disabled
=
{
!
row
[
col
.
referenceKey
]}
placeholder
=
""
>
placeholder
=
""
{
col
.
options
.
map
(
item
=>
(
clearable
<
el
-
option
key
=
{
item
.
value
}
label
=
{
item
.
label
}
value
=
{
item
.
value
}
/>
/>
))}
<
/div
>
<
/el-select
>
<
/div
>
<
/div
>
)
)
},
},
"fill"
:
true
,
"width"
:
160
,
// "options": [
// {
// "label": "端架",
// "value": "端架"
// },
// {
// "label": "收银台",
// "value": "收银台"
// },
// {
// "label": "端架和收银台",
// "value": "端架和收银台"
// }
// ],
// render: (_, row, col) => {
// return (
//
<
div
>
//
<
el
-
tooltip
placement
=
"top"
content
=
{
row
[
col
.
referenceKey
]
||
'-'
}
disabled
=
{
!
isContentOverflow
(
col
.
referenceKey
,
row
[
col
.
referenceKey
],
col
)}
>
//
<
span
style
=
"white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: inline-block; max-width: 100%;"
>
// {row[col.referenceKey] || '-'}
//
<
/span
>
//
<
/el-tooltip
>
//
<
el
-
select
modelValue
=
{
row
[
col
.
prop
]}
// onUpdate:modelValue={(value) => {
// row[col.prop] = value;
// submitChange(row, col);
// }}
// disabled={!row[col.referenceKey]}
// placeholder="">
// {col.options.map(item => (
//
<
el
-
option
// key={item.value}
// label={item.label}
// value={item.value}
// />
// ))}
//
<
/el-select
>
//
<
/div
>
// )
// },
requestKey
:
[
"displayExecuted"
,
"snackDisplayExecuted"
]
requestKey
:
[
"displayExecuted"
,
"snackDisplayExecuted"
]
},
},
{
{
...
@@ -315,7 +333,10 @@
...
@@ -315,7 +333,10 @@
"fill"
:
true
,
"fill"
:
true
,
"width"
:
150
,
"width"
:
150
,
func
:
(
row
)
=>
{
func
:
(
row
)
=>
{
row
.
displayExecuted
=
row
.
actualDisplay
===
row
.
plannedDisplay
?
'是'
:
'否'
if
(
!
row
.
plannedDisplay
)
{
return
'-'
;
}
row
.
displayExecuted
=
row
.
actualDisplay
?
'是'
:
'否'
return
row
.
displayExecuted
return
row
.
displayExecuted
},
},
formulaStr
:
"实际陈列形式 === 计划陈列形式"
formulaStr
:
"实际陈列形式 === 计划陈列形式"
...
@@ -402,7 +423,7 @@
...
@@ -402,7 +423,7 @@
row
.
snackDisplayExecuted
=
row
.
displayExecuted
===
'是'
&&
row
.
endCapQtyExecuted
===
'是'
?
'是'
:
'否'
row
.
snackDisplayExecuted
=
row
.
displayExecuted
===
'是'
&&
row
.
endCapQtyExecuted
===
'是'
?
'是'
:
'否'
return
row
.
snackDisplayExecuted
return
row
.
snackDisplayExecuted
},
},
formulaStr
:
"
陈列形式是否执行 === 是,并且端架数量是否执行 === 是
"
formulaStr
:
"
公式:陈列形式执行,并且端架数量执行(某项无计划时,忽略该项)
"
},
},
{
{
"label"
:
"计划 - 陈列费用"
,
"label"
:
"计划 - 陈列费用"
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论