Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
8ed367f4
提交
8ed367f4
authored
11月 21, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'ap' into dev
上级
81eb6f7d
559ce6bc
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
254 行增加
和
133 行删除
+254
-133
display_schedule.js
src/api/promotion/display_schedule.js
+39
-0
index.vue
src/views/promotion/display_schedule/index.vue
+1
-3
schedule.vue
src/views/promotion/display_schedule/tabs/schedule.vue
+105
-79
schedule_dis.vue
src/views/promotion/display_schedule/tabs/schedule_dis.vue
+17
-17
six_little_diamonds.vue
...s/promotion/display_schedule/tabs/six_little_diamonds.vue
+67
-18
three_two_seconds.vue
...ews/promotion/display_schedule/tabs/three_two_seconds.vue
+25
-16
没有找到文件。
src/api/promotion/display_schedule.js
浏览文件 @
8ed367f4
...
...
@@ -113,10 +113,48 @@ export function getThreeMetersTwoSecondsPlanList(params) {
})
}
// 填报-三米两秒计划
export
function
submitThreeMetersTwoSecondsPlan
(
data
)
{
Object
.
keys
(
data
).
forEach
(
key
=>
{
if
(
data
[
key
]
===
undefined
||
data
[
key
]
===
null
)
{
data
[
key
]
=
''
}
})
return
request
({
url
:
`/operation/sales/ap_display/core_s/
${
data
.
id
}
`
,
method
:
'PUT'
,
data
:
{
displayS
:
{
...
data
,
id
:
undefined
// 不携带 id
}
}
});
}
// 获取-六小金刚计划列表
export
function
getSixLittleDiamondsPlanList
(
params
)
{
return
request
({
url
:
'/operation/sales/ap_display/query/jg_page'
,
params
})
}
// 填报-六小金刚计划
export
function
submitSixLittleDiamondsPlan
(
data
)
{
Object
.
keys
(
data
).
forEach
(
key
=>
{
if
(
data
[
key
]
===
undefined
||
data
[
key
]
===
null
)
{
data
[
key
]
=
''
}
})
return
request
({
url
:
`/operation/sales/ap_display/core_j/
${
data
.
id
}
`
,
method
:
'PUT'
,
data
:
{
displayJ
:
{
...
data
,
id
:
undefined
// 不携带 id
}
}
});
}
\ No newline at end of file
src/views/promotion/display_schedule/index.vue
浏览文件 @
8ed367f4
...
...
@@ -41,9 +41,7 @@ import Snack from './tabs/snack.vue'
import
ThreeTwoSeconds
from
'./tabs/three_two_seconds.vue'
import
SixLittleDiamonds
from
'./tabs/six_little_diamonds.vue'
// const activeName = ref('常规陈列');
const
activeName
=
ref
(
'三米两秒'
);
// const activeName = ref('六小金刚');
const
activeName
=
ref
(
'常规陈列'
);
const
handleClickTabs
=
(
tab
)
=>
{
activeName
.
value
=
tab
.
name
;
}
...
...
src/views/promotion/display_schedule/tabs/schedule.vue
浏览文件 @
8ed367f4
...
...
@@ -393,7 +393,20 @@
label
:
"实际执行规格"
,
prop
:
"actualPromotionSpecRe"
,
visible
:
true
,
type
:
"string"
,
type
:
"input"
,
render
:
(
_
,
row
,
col
)
=>
{
return
(
<
div
>
<
el
-
input
modelValue
=
{
row
[
col
.
prop
]}
onUpdate
:
modelValue
=
{(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}}
placeholder
=
""
>
<
/el-input
>
<
/div
>
)
},
fill
:
true
,
width
:
140
},
...
...
@@ -522,7 +535,20 @@
label
:
"实际执行口味"
,
prop
:
"actualPromotionFlavorRe"
,
visible
:
true
,
type
:
'string'
,
type
:
"input"
,
render
:
(
_
,
row
,
col
)
=>
{
return
(
<
div
>
<
el
-
input
modelValue
=
{
row
[
col
.
prop
]}
onUpdate
:
modelValue
=
{(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}}
placeholder
=
""
>
<
/el-input
>
<
/div
>
)
},
fill
:
true
,
width
:
170
,
},
...
...
@@ -853,24 +879,24 @@
fill
:
true
,
width
:
200
},
{
label
:
"促销机制是否执行"
,
prop
:
"promotionMechanismExecutionStatus"
,
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionMechanism
)
{
row
.
promotionMechanismExecutionStatus
=
'-'
;
return
'-'
;
}
row
.
promotionMechanismExecutionStatus
=
row
.
actualPromotionMechanism
===
'执行与计划一致'
?
'是'
:
'否'
;
return
row
.
promotionMechanismExecutionStatus
;
},
formulaStr
:
'公式:实际促销机制,是否有值'
,
fill
:
true
,
width
:
145
,
},
//
{
//
label: "促销机制是否执行",
//
prop: "promotionMechanismExecutionStatus",
//
visible: true,
//
type: 'formula',
//
func: (row) => {
//
// 如果参考值是空则返回 '-'
//
if (!row.plannedPromotionMechanism) {
//
row.promotionMechanismExecutionStatus = '-';
//
return '-';
//
}
//
row.promotionMechanismExecutionStatus = row.actualPromotionMechanism === '执行与计划一致' ? '是' : '否';
//
return row.promotionMechanismExecutionStatus;
//
},
//
formulaStr: '公式:实际促销机制,是否有值',
//
fill: true,
//
width: 145,
//
},
{
label
:
"预估袋数"
,
prop
:
"estimatedBagCount"
,
...
...
@@ -879,34 +905,34 @@
fill
:
false
,
width
:
90
},
{
label
:
"档期备货量(袋)"
,
prop
:
"promotionStockQuantity"
,
visible
:
true
,
type
:
'input'
,
format
:
'number'
,
referenceKey
:
"estimatedBagCount"
,
fill
:
true
,
width
:
135
,
render
:
(
_
,
row
,
col
)
=>
{
return
(
<
div
>
<
span
>
{
row
[
col
.
referenceKey
]
||
'-'
}
<
/span
>
<
div
>
<
el
-
input
modelValue
=
{
row
[
col
.
prop
]}
onUpdate
:
modelValue
=
{(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}}
disabled
=
{
!
row
[
col
.
referenceKey
]}
placeholder
=
""
clearable
/>
<
/div
>
<
/div
>
)
}
},
//
{
//
label: "档期备货量(袋)",
//
prop: "promotionStockQuantity",
//
visible: true,
//
type: 'input',
//
format: 'number',
//
referenceKey: "estimatedBagCount",
//
fill: true,
//
width: 135,
//
render: (_, row, col) => {
//
return (
//
<
div
>
//
<
span
>
{
row
[
col
.
referenceKey
]
||
'-'
}
<
/span
>
//
<
div
>
//
<
el
-
input
modelValue
=
{
row
[
col
.
prop
]}
//
onUpdate:modelValue={(value) => {
//
row[col.prop] = value;
//
submitChange(row, col);
//
}}
//
disabled={!row[col.referenceKey]}
//
placeholder=""
//
clearable
//
/>
//
<
/div
>
//
<
/div
>
//
)
//
}
//
},
{
label
:
"单包厂价(单包)"
,
prop
:
"unitFactoryPrice"
,
...
...
@@ -939,45 +965,45 @@
fill
:
false
,
width
:
165
},
{
label
:
"实际促销售价(单包)"
,
prop
:
"actualPromotionPrice"
,
visible
:
true
,
type
:
'input'
,
format
:
'number'
,
referenceKey
:
"plannedPromotionPrice"
,
fill
:
true
,
width
:
165
,
render
:
(
_
,
row
,
col
)
=>
{
return
(
<
div
>
<
span
>
{
row
[
col
.
referenceKey
]
||
'-'
}
<
/span
>
<
div
>
<
el
-
input
modelValue
=
{
row
[
col
.
prop
]}
onUpdate
:
modelValue
=
{(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}}
disabled
=
{
!
row
[
col
.
referenceKey
]}
placeholder
=
""
clearable
/>
<
/div
>
<
/div
>
)
},
requestKey
:
[
"promotionPriceExecutionStatus"
]
},
//
{
//
label: "实际促销售价(单包)",
//
prop: "actualPromotionPrice",
//
visible: true,
//
type: 'input',
//
format: 'number',
//
referenceKey: "plannedPromotionPrice",
//
fill: true,
//
width: 165,
//
render: (_, row, col) => {
//
return (
//
<
div
>
//
<
span
>
{
row
[
col
.
referenceKey
]
||
'-'
}
<
/span
>
//
<
div
>
//
<
el
-
input
modelValue
=
{
row
[
col
.
prop
]}
//
onUpdate:modelValue={(value) => {
//
row[col.prop] = value;
//
submitChange(row, col);
//
}}
//
disabled={!row[col.referenceKey]}
//
placeholder=""
//
clearable
//
/>
//
<
/div
>
//
<
/div
>
//
)
//
},
//
requestKey: ["promotionPriceExecutionStatus"]
//
},
{
label
:
"促销价是否执行"
,
prop
:
"promotionPriceExecutionStatus"
,
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
row
.
promotionPriceExecutionStatus
=
row
.
plannedPromotionPrice
==
row
.
actualPromotionPrice
?
'是'
:
'否'
;
row
.
promotionPriceExecutionStatus
=
row
.
actualPromotionMechanism
===
'执行与计划一致'
?
'是'
:
'否'
;
return
row
.
promotionPriceExecutionStatus
;
},
formulaStr
:
'公式:(计划促销
售价 = 实际促销售价
)'
,
formulaStr
:
'公式:(计划促销
机制 = 执行促销机制
)'
,
fill
:
true
,
width
:
140
},
...
...
src/views/promotion/display_schedule/tabs/schedule_dis.vue
浏览文件 @
8ed367f4
...
...
@@ -653,23 +653,23 @@
},
requestKey
:
[
"actualOtherDisplayExecuted"
,
"promotionDisplayExecuted"
]
},
//
{
//
"label": "实际其他陈列 - 是否执行",
//
"prop": "actualOtherDisplayExecuted",
//
"visible": true,
//
"type": "formula",
//
"fill": true,
//
"width": 190,
//
func: (row) => {
//
if (!row.plannedOtherDisplay) {
//
row.actualOtherDisplayExecuted = '-'
//
return '-';
//
}
//
row.actualOtherDisplayExecuted = row.actualOtherDisplay ? '是' : '否'
//
return row.actualOtherDisplayExecuted
//
},
//
formulaStr: "公式:实际其他陈列-数量+形式,有值"
//
},
{
"label"
:
"实际其他陈列 - 是否执行"
,
"prop"
:
"actualOtherDisplayExecuted"
,
"visible"
:
true
,
"type"
:
"formula"
,
"fill"
:
true
,
"width"
:
190
,
func
:
(
row
)
=>
{
if
(
!
row
.
plannedOtherDisplay
)
{
row
.
actualOtherDisplayExecuted
=
'-'
return
'-'
;
}
row
.
actualOtherDisplayExecuted
=
row
.
actualOtherDisplay
?
'是'
:
'否'
return
row
.
actualOtherDisplayExecuted
},
formulaStr
:
"公式:实际其他陈列-数量+形式,有值"
},
{
"label"
:
"合计费用 - 费用"
,
"prop"
:
"totalCost"
,
...
...
src/views/promotion/display_schedule/tabs/six_little_diamonds.vue
浏览文件 @
8ed367f4
...
...
@@ -2,17 +2,6 @@
<!-- 六小金刚 -->
<SearchList
:showSearch=
"showSearch"
@
change=
"searchChange"
/>
<!--
<CustomTable
:tableData=
"tableData"
:isLoading=
"isLoading"
:total=
"total"
:tableColumns=
"tableColumns"
:chooseColumns=
"chooseColumns"
:visibleProps=
"visibleProps"
:params=
"params"
:showFill=
"showFill"
@
updateColumns=
"updateColumns"
@
getTableList=
"getTableList"
@
updateShowSearch=
"updateShowSearch"
/>
-->
<CustomTable
:tableData=
"tableData"
:isLoading=
"isLoading"
:total=
"total"
...
...
@@ -28,7 +17,7 @@
lang=
"jsx"
>
import
CustomTable
from
'@/views/promotion/components/Table'
import
SearchList
from
'@/views/promotion/components/SearchList'
import
{
getSixLittleDiamondsPlanList
}
from
'@/api'
import
{
getSixLittleDiamondsPlanList
,
submitSixLittleDiamondsPlan
}
from
'@/api'
const
{
proxy
}
=
getCurrentInstance
()
/*************** 搜索列表 ***************/
...
...
@@ -237,7 +226,7 @@
children
:
[
{
label
:
'计划执行-六小金刚批发挂网'
,
prop
:
'planned
WholesaleNet
'
,
prop
:
'planned
Gw6
'
,
visible
:
true
,
type
:
'string'
,
fill
:
false
,
...
...
@@ -245,15 +234,43 @@
},
{
label
:
'实际执行-六小金刚批发挂网'
,
prop
:
'actualWholesaleNet'
,
prop
:
'actualGw6'
,
referenceKey
:
'plannedGw6'
,
visible
:
true
,
type
:
'string'
,
type
:
'select'
,
options
:
[
{
label
:
'是'
,
value
:
'是'
},
{
label
:
'否'
,
value
:
'否'
}
],
render
:
(
_
,
row
,
col
)
=>
{
return
(
<
div
>
<
span
>
{
row
[
col
.
referenceKey
]
||
'-'
}
<
/span
>
<
el
-
select
modelValue
=
{
row
[
col
.
prop
]}
onUpdate
:
modelValue
=
{(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}}
disabled
=
{
!
row
[
col
.
referenceKey
]}
placeholder
=
""
clearable
>
{
col
.
options
.
map
(
item
=>
(
<
el
-
option
key
=
{
item
.
value
}
label
=
{
item
.
label
}
value
=
{
item
.
value
}
/
>
))}
<
/el-select
>
<
/div
>
)
},
fill
:
true
,
width
:
180
},
{
label
:
'六小金刚批发挂网陈列费'
,
prop
:
'
wholesaleNetCost
'
,
prop
:
'
totalCostGw6
'
,
visible
:
true
,
type
:
'string'
,
fill
:
false
,
...
...
@@ -261,9 +278,19 @@
},
{
label
:
'六小金刚批发挂网-是否执行'
,
prop
:
'
wholesaleNetExecuted
'
,
prop
:
'
gwExecuted6
'
,
visible
:
true
,
type
:
'string'
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedGw6
)
{
row
.
gwExecuted6
=
'-'
return
'-'
;
}
row
.
gwExecuted6
=
(
row
.
actualGw6
===
'是'
)
?
'是'
:
'否'
;
return
row
.
gwExecuted6
;
},
formulaStr
:
'公式:(实际执行-六小金刚批发挂网 = 是)'
,
fill
:
true
,
width
:
160
}
...
...
@@ -339,6 +366,28 @@
showSearch
.
value
=
val
}
// 提交变更
const
submitChange
=
async
(
row
,
col
)
=>
{
let
requestObj
=
{}
if
(
col
.
requestKey
)
{
// 关联的公式计算列,需要特殊处理
for
(
const
str
of
col
.
requestKey
)
{
const
obj
=
tableColumns
.
value
.
find
(
item
=>
item
.
prop
===
str
)
if
(
obj
&&
obj
.
type
===
'formula'
)
{
obj
.
func
(
row
)
}
}
requestObj
=
col
.
requestKey
.
reduce
((
acc
,
key
)
=>
({
...
acc
,
[
key
]:
row
[
key
]
}),
{})
}
await
submitSixLittleDiamondsPlan
({
id
:
row
.
sadjId
,
[
col
.
prop
]:
row
[
col
.
prop
],
// 当前修改列的值
...
requestObj
})
}
</
script
>
...
...
src/views/promotion/display_schedule/tabs/three_two_seconds.vue
浏览文件 @
8ed367f4
...
...
@@ -2,7 +2,7 @@
<!-- 三米两秒 -->
<SearchList
:showSearch=
"showSearch"
@
change=
"searchChange"
/>
<
!--
<
CustomTable
:tableData=
"tableData"
<CustomTable
:tableData=
"tableData"
:isLoading=
"isLoading"
:total=
"total"
:tableColumns=
"tableColumns"
...
...
@@ -12,23 +12,14 @@
:showFill=
"showFill"
@
updateColumns=
"updateColumns"
@
getTableList=
"getTableList"
@
updateShowSearch=
"updateShowSearch"
/>
-->
<CustomTable
:tableData=
"tableData"
:isLoading=
"isLoading"
:total=
"total"
:tableColumns=
"tableColumns"
:chooseColumns=
"chooseColumns"
:visibleProps=
"visibleProps"
:params=
"params"
:showFill=
"showFill"
@
updateColumns=
"updateColumns"
/>
@
updateShowSearch=
"updateShowSearch"
/>
</
template
>
<
script
setup
lang=
"jsx"
>
import
CustomTable
from
'@/views/promotion/components/Table'
import
SearchList
from
'@/views/promotion/components/SearchList'
import
{
getThreeMetersTwoSecondsPlanList
}
from
'@/api'
import
{
getThreeMetersTwoSecondsPlanList
,
submitThreeMetersTwoSecondsPlan
}
from
'@/api'
const
{
proxy
}
=
getCurrentInstance
()
...
...
@@ -255,7 +246,6 @@
{
label
:
'实际-60g挂条陈列数量'
,
prop
:
'actualDisplayQty60'
,
// 计划
referenceKey
:
'plannedDisplayQty60'
,
visible
:
true
,
type
:
'string'
,
...
...
@@ -279,7 +269,26 @@
<
/div
>
);
}
}
},
// 60g挂条陈列-是否执行
{
label
:
'60g挂条陈列-是否执行'
,
prop
:
'displayQtyExecuted60'
,
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedDisplayQty60
)
{
row
.
displayQtyExecuted60
=
'-'
;
return
'-'
;
}
row
.
displayQtyExecuted60
=
row
.
plannedDisplayQty60
==
row
.
actualDisplayQty60
?
'是'
:
'否'
;
return
row
.
displayQtyExecuted60
;
},
formulaStr
:
'公式:(计划-60g挂条陈列数量 = 实际-60g挂条陈列数量)'
,
fill
:
true
,
width
:
200
},
],
prop
:
'sixtyGramHangBarColumns'
,
visible
:
true
...
...
@@ -373,8 +382,8 @@
requestObj
=
col
.
requestKey
.
reduce
((
acc
,
key
)
=>
({
...
acc
,
[
key
]:
row
[
key
]
}),
{})
}
await
submit
Display
Plan
({
id
:
row
.
sadId
,
await
submit
ThreeMetersTwoSeconds
Plan
({
id
:
row
.
sad
s
Id
,
[
col
.
prop
]:
row
[
col
.
prop
],
// 当前修改列的值
...
requestObj
})
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论