Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
893f2d67
提交
893f2d67
authored
11月 12, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
差异文件
冲突解决
上级
24fb183e
b11a3160
隐藏空白字符变更
内嵌
并排
正在显示
6 个修改的文件
包含
295 行增加
和
135 行删除
+295
-135
index.vue
src/views/mobile/pages/licenses/report/index.vue
+80
-4
index.vue
src/views/promotion/components/CommonPlan/index.vue
+6
-1
display.vue
src/views/promotion/display_schedule/tabs/display.vue
+55
-47
schedule.vue
src/views/promotion/display_schedule/tabs/schedule.vue
+56
-36
schedule_dis.vue
src/views/promotion/display_schedule/tabs/schedule_dis.vue
+26
-5
snack.vue
src/views/promotion/display_schedule/tabs/snack.vue
+72
-42
没有找到文件。
src/views/mobile/pages/licenses/report/index.vue
浏览文件 @
893f2d67
<
template
>
<div>
123
<div
class=
"mobile-container"
>
<van-nav-bar
right-text=
"搜索"
left-arrow
@
click-left=
"clickBack"
@
click-right=
"showSearch = true"
placeholder
fixed
/>
<!-- 计划列表 -->
<van-pull-refresh
v-model=
"refreshLoading"
:pull-distance=
"100"
success-text=
"刷新成功"
@
refresh=
"onRefresh"
>
<van-list
v-model:loading=
"loading"
:finished=
"finished"
:immediate-check=
"false"
finished-text=
"没有更多了"
@
load=
"onLoad"
>
<van-cell-group
inset
>
<van-swipe-cell
v-for=
"item in planList"
:key=
"item.id"
>
<van-cell
:title=
"item.prdName + '\n料号: ' + item.prdCode"
>
<template
#
label
>
<p>
批号:
{{
item
.
manufactureBatchNo
}}
</p>
<p>
厂家:
{{
item
.
manufactureDate
}}
</p>
</
template
>
<
template
#
value
>
</
template
>
</van-cell>
</van-swipe-cell>
</van-cell-group>
</van-list>
</van-pull-refresh>
</div>
</template>
<
script
setup
>
import
{
getQualityInsPageList
}
from
'@/api'
const
router
=
useRouter
()
/*************** 导航栏 ***************/
const
showSearch
=
ref
(
false
)
const
clickBack
=
()
=>
{
router
.
back
()
}
/*************** 刷新+加载 ***************/
const
refreshLoading
=
ref
(
false
)
const
onRefresh
=
async
()
=>
{
refreshLoading
.
value
=
true
await
getPlanListFn
()
refreshLoading
.
value
=
false
}
// 加载更多
const
loading
=
ref
(
false
)
const
finished
=
ref
(
false
)
const
onLoad
=
async
()
=>
{
if
(
loading
.
value
||
finished
.
value
)
return
loading
.
value
=
true
await
getPlanListFn
()
loading
.
value
=
false
}
/*************** 计划列表 ***************/
const
query
=
reactive
({
pageNum
:
1
,
pageSize
:
10
,
})
const
planList
=
ref
([])
const
getPlanListFn
=
async
()
=>
{
const
res
=
await
getQualityInsPageList
(
query
)
if
(
res
.
code
===
200
)
{
planList
.
value
=
res
.
data
.
rows
||
[]
finished
.
value
=
res
.
data
.
rows
.
length
<
res
.
data
.
pageSize
}
}
getPlanListFn
()
</
script
>
<
style
scoped
lang=
"scss"
></
style
>
\ No newline at end of file
lang=
"scss"
>
::v-deep
(
.van-cell__label
)
{
margin
:
0
;
}
</
style
>
\ No newline at end of file
src/views/promotion/components/CommonPlan/index.vue
浏览文件 @
893f2d67
...
...
@@ -65,7 +65,7 @@
</div>
</div>
<!-- 展示模式 -->
<div
v-else
>
{{
row
[
col
.
prop
]
||
'-'
}}
</div>
<div
v-else
>
{{
formatter
(
row
,
col
,
row
[
col
.
prop
]
||
'-'
)
}}
</div>
</
template
>
</el-table-column>
</template>
...
...
@@ -120,6 +120,11 @@ const props = defineProps({
useFill
:
{
type
:
Boolean
,
default
:
false
},
// 格式化表格某列内容
formatter
:
{
type
:
Function
,
default
:
(
row
,
col
,
cellValue
)
=>
cellValue
}
})
const
emit
=
defineEmits
([
'updateColumns'
,
'getTableList'
,
'updateShowSearch'
])
...
...
src/views/promotion/display_schedule/tabs/display.vue
浏览文件 @
893f2d67
...
...
@@ -464,6 +464,11 @@
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedMainShelfType
||
!
row
.
plannedMainShelfQty
)
{
row
.
actualMainShelfExecuted
=
'-'
return
'-'
;
}
row
.
actualMainShelfExecuted
=
((
parseInt
(
row
.
actualMainShelfType
)
>=
parseInt
(
row
.
plannedMainShelfType
))
&&
(
parseInt
(
row
.
actualMainShelfQty
)
>=
parseInt
(
row
.
plannedMainShelfQty
)))
?
'是'
:
'否'
;
return
row
.
actualMainShelfExecuted
;
},
...
...
@@ -540,6 +545,11 @@
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedEndCapQty
)
{
row
.
actualEndCapExecuted
=
'-'
return
'-'
;
}
row
.
actualEndCapExecuted
=
((
parseFloat
(
row
.
actualEndCapQty
)
>=
parseFloat
(
row
.
plannedEndCapQty
)))
?
'是'
:
'否'
;
return
row
.
actualEndCapExecuted
;
},
...
...
@@ -568,7 +578,7 @@
prop
:
"plannedThemedFloorStack"
,
visible
:
true
,
type
:
'string'
,
fill
:
tru
e
,
fill
:
fals
e
,
width
:
140
},
{
...
...
@@ -668,10 +678,28 @@
// 请求时需要额外携带影响的列字段值
requestKey
:
[
"actualFloorStackExecuted"
,
"regularDisplayExecuted"
]
},
{
label
:
"实际地堆是否执行"
,
prop
:
"actualFloorStackExecuted"
,
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedFloorStackArea
||
!
row
.
plannedFloorStackQty
)
{
row
.
actualFloorStackExecuted
=
'-'
return
'-'
;
}
row
.
actualFloorStackExecuted
=
((
parseFloat
(
row
.
actualFloorStackArea
)
>=
parseFloat
(
row
.
plannedFloorStackArea
))
&&
(
parseInt
(
row
.
actualFloorStackQty
)
>=
parseInt
(
row
.
plannedFloorStackQty
)))
?
'是'
:
'否'
;
return
row
.
actualFloorStackExecuted
;
},
formulaStr
:
'公式:(实际地堆平米数 >= 计划地堆平米数)并且(实际地堆数量 >= 计划地堆数量)'
,
fill
:
true
,
width
:
150
},
{
label
:
"实际主题地堆-是否"
,
prop
:
"actualThemedFloorStack"
,
referenceKey
:
"
actualFloorStackQty
"
,
referenceKey
:
"
plannedThemedFloorStack
"
,
visible
:
true
,
type
:
'select'
,
options
:
[
...
...
@@ -683,6 +711,7 @@
render
:
(
_
,
row
,
col
)
=>
{
return
(
<
div
>
<
span
>
{
row
[
col
.
referenceKey
]
||
'-'
}
<
/span
>
<
el
-
select
modelValue
=
{
row
[
col
.
prop
]}
onUpdate
:
modelValue
=
{(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
...
...
@@ -702,19 +731,6 @@
)
}
},
{
label
:
"实际地堆是否执行"
,
prop
:
"actualFloorStackExecuted"
,
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
row
.
actualFloorStackExecuted
=
((
parseFloat
(
row
.
actualFloorStackArea
)
>=
parseFloat
(
row
.
plannedFloorStackArea
))
&&
(
parseInt
(
row
.
actualFloorStackQty
)
>=
parseInt
(
row
.
plannedFloorStackQty
)))
?
'是'
:
'否'
;
return
row
.
actualFloorStackExecuted
;
},
formulaStr
:
'公式:(实际地堆平米数 >= 计划地堆平米数)并且(实际地堆数量 >= 计划地堆数量)'
,
fill
:
true
,
width
:
150
},
{
label
:
"计划多点陈列-数量+形式"
,
prop
:
"plannedMultiDisplay"
,
...
...
@@ -738,7 +754,7 @@
type
:
'input'
,
func
:
(
row
)
=>
{
// 没有输入内容时,则是否执行设置为否
row
.
actualMultiDisplayExecuted
=
!
row
.
actualMultiDisplay
?
'否'
:
'是'
//
row.actualMultiDisplayExecuted = !row.actualMultiDisplay ? '否' : '是'
},
referenceKey
:
"plannedMultiDisplay"
,
fill
:
true
,
...
...
@@ -766,36 +782,19 @@
prop
:
"actualMultiDisplayExecuted"
,
referenceKey
:
'actualMultiDisplay'
,
visible
:
true
,
type
:
'select'
,
options
:
[
{
label
:
'是'
,
value
:
'是'
},
{
label
:
'否'
,
value
:
'否'
}
],
fill
:
true
,
width
:
170
,
render
:
(
_
,
row
,
col
)
=>
{
return
(
<
div
>
<
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
>
)
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedMultiDisplay
)
{
row
.
actualMultiDisplayExecuted
=
'-'
return
'-'
;
}
row
.
actualMultiDisplayExecuted
=
(
row
.
actualMultiDisplay
)
?
'是'
:
'否'
;
return
row
.
actualMultiDisplayExecuted
;
},
// 请求时需要额外携带影响的列字段值
requestKey
:
[
"actualMultiDisplayExecuted"
]
formulaStr
:
'公式:实际多点陈列-数量+形式,有值'
,
fill
:
true
,
width
:
180
,
},
{
label
:
"合计费用-费用"
,
...
...
@@ -820,10 +819,19 @@
type
:
'formula'
,
func
:
(
row
)
=>
{
// 实际主货架-执行 && 实际端架-执行 && 实际地堆-执行 && 实际多点陈列-执行
row
.
regularDisplayExecuted
=
(
row
.
actualMainShelfExecuted
===
'是'
&&
row
.
actualEndCapExecuted
===
'是'
&&
row
.
actualFloorStackExecuted
===
'是'
&&
row
.
actualMultiDisplayExecuted
===
'是'
)
?
'是'
:
'否'
;
// 过滤掉值为"-"的项,只对有实际值的项进行判断
const
executionStatuses
=
[
row
.
actualMainShelfExecuted
,
row
.
actualEndCapExecuted
,
row
.
actualFloorStackExecuted
,
row
.
actualMultiDisplayExecuted
].
filter
(
status
=>
status
!==
'-'
);
// 如果所有过滤后的状态都是'是',则返回'是',否则返回'否'
row
.
regularDisplayExecuted
=
executionStatuses
.
every
(
status
=>
status
===
'是'
)
?
'是'
:
'否'
;
return
row
.
regularDisplayExecuted
;
},
formulaStr
:
'公式:
(实际主货架执行,并且实际端架执行,并且实际地堆执行,并且实际多点陈列执行
)'
,
formulaStr
:
'公式:
实际主货架执行,并且实际端架执行,并且实际地堆执行,并且实际多点陈列执行(某项无计划时,忽略该项
)'
,
fill
:
true
,
width
:
150
},
...
...
src/views/promotion/display_schedule/tabs/schedule.vue
浏览文件 @
893f2d67
...
...
@@ -12,9 +12,11 @@
:visibleProps=
"visibleProps"
:params=
"params"
:useFill=
"useFill"
:formatter=
"formatterFn"
@
updateColumns=
"updateColumns"
@
getTableList=
"getTableList"
@
updateShowSearch=
"updateShowSearch"
/>
@
updateShowSearch=
"updateShowSearch"
/>
</
template
>
<
script
setup
...
...
@@ -330,6 +332,11 @@
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionSpec
)
{
row
.
specExecutionStatus
=
'-'
;
return
'-'
;
}
row
.
specExecutionStatus
=
row
.
plannedPromotionSpec
===
row
.
actualPromotionSpec
?
'是'
:
'否'
;
return
row
.
specExecutionStatus
;
},
...
...
@@ -347,7 +354,7 @@
fill
:
true
,
width
:
170
,
render
:
(
_
,
row
,
col
)
=>
{
// options 根据参考属性值来决定
// options 根据参考属性值来决定
(计划值)
let
list
=
splitAndFilter
(
row
[
col
.
referenceKey
])
let
isFullFlavor
=
false
// 如果数组里有"全系列"/"全口味"则修改数组
...
...
@@ -409,6 +416,11 @@
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionFlavor
)
{
row
.
flavorExecutionStatus
=
'-'
;
return
'-'
;
}
// 处理逗号的口味形成数组
let
ppromotionFlavor
=
splitAndFilter
(
row
.
plannedPromotionFlavor
)
if
(
!
row
.
actualPromotionFlavor
)
{
...
...
@@ -599,6 +611,11 @@
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionStartDate
||
!
row
.
plannedPromotionEndDate
)
{
row
.
promotionImplementationStatus
=
'-'
;
return
'-'
;
}
row
.
promotionImplementationStatus
=
row
.
actualPromotionStartDate
&&
row
.
actualPromotionEndDate
?
'是'
:
'否'
;
return
row
.
promotionImplementationStatus
;
},
...
...
@@ -612,6 +629,11 @@
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionStartDate
||
!
row
.
plannedPromotionEndDate
)
{
row
.
timeExecutionStatus
=
'-'
;
return
'-'
;
}
row
.
timeExecutionStatus
=
(
parseTime
(
row
.
actualPromotionStartDate
)
===
parseTime
(
row
.
plannedPromotionStartDate
))
&&
parseTime
(
row
.
actualPromotionEndDate
)
===
parseTime
(
row
.
plannedPromotionEndDate
)
?
'是'
:
'否'
;
return
row
.
timeExecutionStatus
;
},
...
...
@@ -658,39 +680,19 @@
label
:
"促销机制是否执行"
,
prop
:
"promotionMechanismExecutionStatus"
,
visible
:
true
,
type
:
'select'
,
options
:
[
{
label
:
'是'
,
value
:
'是'
},
{
label
:
'否'
,
value
:
'否'
type
:
'formula'
,
func
:
(
row
)
=>
{
// 如果参考值是空则返回 '-'
if
(
!
row
.
plannedPromotionMechanism
)
{
row
.
promotionMechanismExecutionStatus
=
'-'
;
return
'-'
;
}
],
row
.
promotionMechanismExecutionStatus
=
row
.
actualPromotionMechanism
?
'是'
:
'否'
;
return
row
.
promotionMechanismExecutionStatus
;
},
formulaStr
:
'公式:实际促销机制,是否有值'
,
fill
:
true
,
width
:
135
,
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
>
)
}
width
:
145
,
},
{
label
:
"预估袋数"
,
...
...
@@ -872,11 +874,19 @@
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
// 促销价是否执行,促销机制是否执行,档期规格是否执行,档期是否开展
row
.
promotionExecutionStatus
=
row
.
promotionPriceExecutionStatus
==
'是'
&&
row
.
promotionMechanismExecutionStatus
==
'是'
&&
row
.
specExecutionStatus
==
'是'
&&
row
.
promotionImplementationStatus
==
'是'
?
'是'
:
'否'
;
// 过滤掉值为"-"的项,只对有实际值的项进行判断
const
executionStatuses
=
[
row
.
promotionPriceExecutionStatus
,
row
.
promotionMechanismExecutionStatus
,
row
.
specExecutionStatus
,
row
.
promotionImplementationStatus
].
filter
(
status
=>
status
!==
'-'
);
// 如果所有过滤后的状态都是'是',则返回'是',否则返回'否'
row
.
promotionExecutionStatus
=
executionStatuses
.
every
(
status
=>
status
===
'是'
)
?
'是'
:
'否'
;
return
row
.
promotionExecutionStatus
;
},
formulaStr
:
'公式:
(促销价是否执行 = 是,并且促销机制是否执行 = 是,并且档期规格是否执行 = 是,并且档期是否开展 = 是
)'
,
formulaStr
:
'公式:
促销价执行,并且促销机制执行,并且促销规格执行,并且档期开展(某项无计划时,忽略该项
)'
,
fill
:
true
,
width
:
125
}
...
...
@@ -951,6 +961,7 @@
visible
:
true
,
type
:
'formula'
,
func
:
(
row
)
=>
{
if
(
!
row
.
plannedPosterFormat
)
return
row
.
posterExecutionStatus
=
'-'
if
(
!
row
.
actualPosterFormat
)
return
row
.
posterExecutionStatus
=
'否'
row
.
posterExecutionStatus
=
row
.
plannedPosterFormat
==
row
.
actualPosterFormat
?
'是'
:
'否'
;
return
row
.
posterExecutionStatus
;
...
...
@@ -1116,6 +1127,15 @@
isLoading
.
value
=
false
}
// 表格格式化指定列的数据内容
const
formatterFn
=
(
row
,
col
,
cellValue
)
=>
{
if
(
col
.
prop
===
'actualPromotionFlavor'
)
{
// 对数组内容格式化,为空时,显示'-'
return
cellValue
.
length
?
cellValue
.
join
(
','
)
:
'-'
}
return
cellValue
}
onMounted
(()
=>
{
updateColumns
()
getTableList
()
...
...
src/views/promotion/display_schedule/tabs/schedule_dis.vue
浏览文件 @
893f2d67
...
...
@@ -445,6 +445,11 @@
"fill"
:
true
,
"width"
:
160
,
func
:
(
row
)
=>
{
// 如果计划端架数量为空则返回 '-'
if
(
!
row
.
plannedEndCapQty
)
{
row
.
actualEndCapExecuted
=
'-'
return
'-'
;
}
row
.
actualEndCapExecuted
=
row
.
actualEndCapQty
>=
row
.
plannedEndCapQty
?
'是'
:
'否'
return
row
.
actualEndCapExecuted
},
...
...
@@ -594,6 +599,11 @@
"fill"
:
true
,
"width"
:
150
,
func
:
(
row
)
=>
{
// 如果计划端架数量为空则返回 '-'
if
(
!
row
.
plannedFloorStackArea
||
!
row
.
plannedFloorStackQty
)
{
row
.
actualFloorStackExecuted
=
'-'
return
'-'
;
}
row
.
actualFloorStackExecuted
=
row
.
actualFloorStackArea
>=
row
.
plannedFloorStackArea
&&
row
.
actualFloorStackQty
>=
row
.
plannedFloorStackQty
?
'是'
:
'否'
return
row
.
actualFloorStackExecuted
},
...
...
@@ -651,10 +661,14 @@
"fill"
:
true
,
"width"
:
190
,
func
:
(
row
)
=>
{
row
.
actualOtherDisplayExecuted
=
!
row
.
actualOtherDisplay
?
'否'
:
'是'
if
(
!
row
.
plannedOtherDisplay
)
{
row
.
actualOtherDisplayExecuted
=
'-'
return
'-'
;
}
row
.
actualOtherDisplayExecuted
=
row
.
actualOtherDisplay
?
'是'
:
'否'
return
row
.
actualOtherDisplayExecuted
},
formulaStr
:
"
执行其他陈列数量 + 形式,是否等于计划其他陈列数量 + 形式
"
formulaStr
:
"
公式:实际其他陈列-数量+形式,有值
"
},
{
"label"
:
"合计费用 - 费用"
,
...
...
@@ -673,10 +687,17 @@
"width"
:
160
,
func
:
(
row
)
=>
{
// 实际端架-是否执行 && 实际地堆是否执行 && 实际其他陈列-是否执行
row
.
promotionDisplayExecuted
=
row
.
actualEndShelfExecuted
===
'是'
&&
row
.
actualFloorStackExecuted
===
'是'
&&
row
.
actualOtherDisplayExecuted
===
'是'
?
'是'
:
'否'
return
row
.
promotionDisplayExecuted
const
executionStatuses
=
[
row
.
actualEndCapExecuted
,
row
.
actualFloorStackExecuted
,
row
.
actualOtherDisplayExecuted
].
filter
(
status
=>
status
!==
'-'
);
// 如果所有过滤后的状态都是'是',则返回'是',否则返回'否'
row
.
promotionDisplayExecuted
=
executionStatuses
.
every
(
status
=>
status
===
'是'
)
?
'是'
:
'否'
;
return
row
.
promotionDisplayExecuted
;
},
formulaStr
:
"
实际端架-是否执行 === '是',并且 实际地堆是否执行 === '是',并且 实际其他陈列-是否执行 === '是'
"
formulaStr
:
"
公式:实际端架执行,并且实际地堆执行,并且实际其他陈列执行(某项无计划时,忽略该项)
"
},
{
"label"
:
"付费陈列 - 是否"
,
...
...
src/views/promotion/display_schedule/tabs/snack.vue
浏览文件 @
893f2d67
...
...
@@ -261,51 +261,68 @@
"label"
:
"实际 - 陈列形式"
,
"prop"
:
"actualDisplay"
,
"visible"
:
true
,
"type"
:
"
selec
t"
,
"type"
:
"
inpu
t"
,
referenceKey
:
"plannedDisplay"
,
"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
=
""
clearable
>
{
col
.
options
.
map
(
item
=>
(
<
el
-
option
key
=
{
item
.
value
}
label
=
{
item
.
label
}
value
=
{
item
.
value
}
/
>
))}
<
/el-select
>
<
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
>
)
},
"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"
]
},
{
...
...
@@ -316,7 +333,10 @@
"fill"
:
true
,
"width"
:
150
,
func
:
(
row
)
=>
{
row
.
displayExecuted
=
row
.
actualDisplay
===
row
.
plannedDisplay
?
'是'
:
'否'
if
(
!
row
.
plannedDisplay
)
{
return
'-'
;
}
row
.
displayExecuted
=
row
.
actualDisplay
?
'是'
:
'否'
return
row
.
displayExecuted
},
formulaStr
:
"实际陈列形式 === 计划陈列形式"
...
...
@@ -387,6 +407,10 @@
"fill"
:
true
,
"width"
:
150
,
func
:
(
row
)
=>
{
if
(
!
row
.
plannedEndCapQty
)
{
row
.
endCapQtyExecuted
=
'-'
return
'-'
}
row
.
endCapQtyExecuted
=
row
.
actualEndCapQty
>=
row
.
plannedEndCapQty
?
'是'
:
'否'
return
row
.
endCapQtyExecuted
},
...
...
@@ -400,10 +424,16 @@
"fill"
:
true
,
"width"
:
150
,
func
:
(
row
)
=>
{
row
.
snackDisplayExecuted
=
row
.
displayExecuted
===
'是'
&&
row
.
endCapQtyExecuted
===
'是'
?
'是'
:
'否'
return
row
.
snackDisplayExecuted
const
executionStatuses
=
[
row
.
displayExecuted
,
row
.
endCapQtyExecuted
].
filter
(
status
=>
status
!==
'-'
);
// 如果所有过滤后的状态都是'是',则返回'是',否则返回'否'
row
.
snackDisplayExecuted
=
executionStatuses
.
every
(
status
=>
status
===
'是'
)
?
'是'
:
'否'
;
return
row
.
snackDisplayExecuted
;
},
formulaStr
:
"
陈列形式是否执行 === 是,并且端架数量是否执行 === 是
"
formulaStr
:
"
公式:陈列形式执行,并且端架数量执行(某项无计划时,忽略该项)
"
},
{
"label"
:
"计划 - 陈列费用"
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论