提交 bc59528c authored 作者: lidongxu's avatar lidongxu

Merge branch 'ap' into dev

...@@ -9,7 +9,7 @@ export function getDisplayList(params) { ...@@ -9,7 +9,7 @@ export function getDisplayList(params) {
// 填报-陈列计划 // 填报-陈列计划
export function submitDisplayPlan(data) { export function submitDisplayPlan(data) {
// 遍历 data 每对 key value,发现 value 是 undefined 替换成空字符串 // 遍历 data 每对 key value,发现 value 是 undefined / null 替换成空字符串
Object.keys(data).forEach(key => { Object.keys(data).forEach(key => {
if (data[key] === undefined || data[key] === null) { if (data[key] === undefined || data[key] === null) {
data[key] = '' data[key] = ''
......
...@@ -105,7 +105,6 @@ const showSearch = ref(false) ...@@ -105,7 +105,6 @@ const showSearch = ref(false)
// 从新增页面跳转回来需要刷新列表 // 从新增页面跳转回来需要刷新列表
watch(() => route.path, (newPath, oldPath) => { watch(() => route.path, (newPath, oldPath) => {
console.log(oldPath, newPath)
if (oldPath.includes('/cp_activity/promotion_plan_editing') && newPath === '/cp_activity/promotion_plan') { if (oldPath.includes('/cp_activity/promotion_plan_editing') && newPath === '/cp_activity/promotion_plan') {
planSearch.value.resetFn() planSearch.value.resetFn()
} }
......
...@@ -667,24 +667,6 @@ ...@@ -667,24 +667,6 @@
// 请求时需要额外携带影响的列字段值 // 请求时需要额外携带影响的列字段值
requestKey: ["actualFloorStackExecuted", "regularDisplayExecuted"] 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: "实际主题地堆-是否", label: "实际主题地堆-是否",
prop: "actualThemedFloorStack", prop: "actualThemedFloorStack",
...@@ -695,7 +677,7 @@ ...@@ -695,7 +677,7 @@
{ label: '是', value: '是' }, { label: '是', value: '是' },
{ label: '否', value: '否' } { label: '否', value: '否' }
], ],
fill: true, fill: false,
width: 140, width: 140,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
...@@ -720,6 +702,25 @@ ...@@ -720,6 +702,25 @@
) )
} }
}, },
{
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: "计划多点陈列-数量+形式", label: "计划多点陈列-数量+形式",
prop: "plannedMultiDisplay", prop: "plannedMultiDisplay",
...@@ -740,11 +741,11 @@ ...@@ -740,11 +741,11 @@
label: "实际多点陈列-数量+形式", label: "实际多点陈列-数量+形式",
prop: "actualMultiDisplay", prop: "actualMultiDisplay",
visible: true, visible: true,
type: 'input', type: 'select',
func: (row) => { options: [
// 没有输入内容时,则是否执行设置为否 { label: '执行与计划一致', value: '执行与计划一致' },
// row.actualMultiDisplayExecuted = !row.actualMultiDisplay ? '否' : '是' { label: '执行与计划不一致', value: '执行与计划不一致' }
}, ],
referenceKey: "plannedMultiDisplay", referenceKey: "plannedMultiDisplay",
fill: true, fill: true,
width: 175, width: 175,
...@@ -752,14 +753,22 @@ ...@@ -752,14 +753,22 @@
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> <span>{row[col.referenceKey] || '-'}</span>
<el-input modelValue={row[col.prop]} <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=""
</el-input> clearable>
{col.options.map(item => (
<el-option
key={item.value}
label={item.label}
value={item.value}
/>
))}
</el-select>
</div> </div>
) )
}, },
...@@ -778,7 +787,7 @@ ...@@ -778,7 +787,7 @@
row.actualMultiDisplayExecuted = '-' row.actualMultiDisplayExecuted = '-'
return '-'; return '-';
} }
row.actualMultiDisplayExecuted = (row.actualMultiDisplay) ? '是' : '否'; row.actualMultiDisplayExecuted = row.actualMultiDisplay === '执行与计划一致' ? '是' : '否';
return row.actualMultiDisplayExecuted; return row.actualMultiDisplayExecuted;
}, },
formulaStr: '公式:实际多点陈列-数量+形式,有值', formulaStr: '公式:实际多点陈列-数量+形式,有值',
...@@ -797,11 +806,11 @@ ...@@ -797,11 +806,11 @@
label: "实际挂条-数量+形式", label: "实际挂条-数量+形式",
prop: "actualHangingStripQuantityForm", prop: "actualHangingStripQuantityForm",
visible: true, visible: true,
type: 'input', type: 'select',
func: (row) => { options: [
// 没有输入内容时,则是否执行设置为否 { label: '执行与计划一致', value: '执行与计划一致' },
// row.actualMultiDisplayExecuted = !row.actualMultiDisplay ? '否' : '是' { label: '执行与计划不一致', value: '执行与计划不一致' }
}, ],
referenceKey: "plannedHangingStripQuantityForm", referenceKey: "plannedHangingStripQuantityForm",
fill: true, fill: true,
width: 175, width: 175,
...@@ -809,14 +818,22 @@ ...@@ -809,14 +818,22 @@
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> <span>{row[col.referenceKey] || '-'}</span>
<el-input modelValue={row[col.prop]} <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=""
</el-input> clearable>
{col.options.map(item => (
<el-option
key={item.value}
label={item.label}
value={item.value}
/>
))}
</el-select>
</div> </div>
) )
}, },
...@@ -835,8 +852,7 @@ ...@@ -835,8 +852,7 @@
row.hangingStripExecuted = '-' row.hangingStripExecuted = '-'
return '-'; return '-';
} }
console.log(row.actualHangingStripQuantityForm, row.plannedHangingStripQuantityForm) row.hangingStripExecuted = (row.actualHangingStripQuantityForm === '执行与计划一致') ? '是' : '否';
row.hangingStripExecuted = (row.actualHangingStripQuantityForm === row.plannedHangingStripQuantityForm) ? '是' : '否';
return row.hangingStripExecuted; return row.hangingStripExecuted;
}, },
formulaStr: '公式:实际挂条-数量+形式 === 计划挂条-数量+形式', formulaStr: '公式:实际挂条-数量+形式 === 计划挂条-数量+形式',
...@@ -1002,7 +1018,7 @@ ...@@ -1002,7 +1018,7 @@
[col.prop]: row[col.prop], // 当前修改列的值 [col.prop]: row[col.prop], // 当前修改列的值
...requestObj ...requestObj
}) })
} }
// 表格数据 // 表格数据
......
...@@ -377,7 +377,6 @@ ...@@ -377,7 +377,6 @@
submitChange(row, { prop: 'actualPromotionSpecRe' }) submitChange(row, { prop: 'actualPromotionSpecRe' })
}).catch(() => { }).catch(() => {
// 用户点击取消或关闭弹窗 // 用户点击取消或关闭弹窗
console.log('用户取消了输入')
}) })
} else { } else {
// 没选其他,则清空实际执行规格 // 没选其他,则清空实际执行规格
...@@ -397,13 +396,17 @@ ...@@ -397,13 +396,17 @@
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<el-input modelValue={row[col.prop]} {
onUpdate:modelValue={(value) => { row.actualPromotionSpec !== '其他' ? (<div style="width: 100%; text-align: center;">-</div>) : (
row[col.prop] = value; <el-input modelValue={row[col.prop]}
submitChange(row, col); onUpdate:modelValue={(value) => {
}} row[col.prop] = value;
placeholder=""> submitChange(row, col);
</el-input> }}
placeholder="">
</el-input>
)
}
</div> </div>
) )
}, },
...@@ -519,7 +522,6 @@ ...@@ -519,7 +522,6 @@
submitChange(row, { prop: 'actualPromotionFlavorRe' }) submitChange(row, { prop: 'actualPromotionFlavorRe' })
}).catch(() => { }).catch(() => {
// 用户点击取消或关闭弹窗 // 用户点击取消或关闭弹窗
console.log('用户取消了输入')
}) })
} else { } else {
// 没选其他,则清空实际执行口味 // 没选其他,则清空实际执行口味
...@@ -539,13 +541,17 @@ ...@@ -539,13 +541,17 @@
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<el-input modelValue={row[col.prop]} {
onUpdate:modelValue={(value) => { row.actualPromotionFlavor[0] !== '其他' ? (<div style="width: 100%; text-align: center;">-</div>) : (
row[col.prop] = value; <el-input modelValue={row[col.prop]}
submitChange(row, col); onUpdate:modelValue={(value) => {
}} row[col.prop] = value;
placeholder=""> submitChange(row, col);
</el-input> }}
placeholder="">
</el-input>
)
}
</div> </div>
) )
}, },
...@@ -861,7 +867,6 @@ ...@@ -861,7 +867,6 @@
submitChange(row, { prop: 'actualPromotionPriceRe' }) submitChange(row, { prop: 'actualPromotionPriceRe' })
}).catch(() => { }).catch(() => {
// 用户点击取消或关闭弹窗 // 用户点击取消或关闭弹窗
console.log('用户取消了输入')
}) })
} else { } else {
// 没选其他,则清空实际执行价格 // 没选其他,则清空实际执行价格
...@@ -875,7 +880,24 @@ ...@@ -875,7 +880,24 @@
label: "实际执行价格", label: "实际执行价格",
prop: "actualPromotionPriceRe", prop: "actualPromotionPriceRe",
visible: true, visible: true,
type: 'string', type: "input",
render: (_, row, col) => {
return (
<div>
{
row.actualPromotionMechanism !== '执行与计划不一致' ? (<div style="width: 100%; text-align: center;">-</div>) : (
<el-input modelValue={row[col.prop]}
onUpdate:modelValue={(value) => {
row[col.prop] = value;
submitChange(row, col);
}}
placeholder="">
</el-input>
)
}
</div>
)
},
fill: true, fill: true,
width: 200 width: 200
}, },
......
...@@ -111,31 +111,31 @@ ...@@ -111,31 +111,31 @@
showOverflowTooltip: true, showOverflowTooltip: true,
fixed: 'left' fixed: 'left'
}, },
{ // {
"label": "经销商类型", // "label": "经销商类型",
"prop": "dealerType", // "prop": "dealerType",
showOverflowTooltip: true, // showOverflowTooltip: true,
"visible": true, // "visible": true,
"type": "string", // "type": "string",
"fill": false, // "fill": false,
"width": 150 // "width": 150
}, // },
{ // {
"label": "开户日期", // "label": "开户日期",
"prop": "openingDate", // "prop": "openingDate",
"visible": true, // "visible": true,
"type": "string", // "type": "string",
"fill": false, // "fill": false,
"width": 120 // "width": 120
}, // },
{ // {
"label": "闭户日期", // "label": "闭户日期",
"prop": "closingDate", // "prop": "closingDate",
"visible": true, // "visible": true,
"type": "string", // "type": "string",
"fill": false, // "fill": false,
"width": 120 // "width": 120
}, // },
{ {
"label": "大区总监", "label": "大区总监",
"prop": "regionManager", "prop": "regionManager",
...@@ -515,6 +515,10 @@ ...@@ -515,6 +515,10 @@
{ {
"label": "4", "label": "4",
"value": 4 "value": 4
},
{
"label": "6",
"value": 6
} }
], ],
render: (_, row, col) => { render: (_, row, col) => {
...@@ -565,7 +569,12 @@ ...@@ -565,7 +569,12 @@
{ {
"label": "3", "label": "3",
"value": 3 "value": 3
},
{
"label": "4",
"value": 4
} }
], ],
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
...@@ -629,7 +638,11 @@ ...@@ -629,7 +638,11 @@
"label": "实际其他陈列 - 数量 + 形式", "label": "实际其他陈列 - 数量 + 形式",
"prop": "actualOtherDisplay", "prop": "actualOtherDisplay",
"visible": true, "visible": true,
"type": "input", "type": "select",
"options": [
{ label: '执行与计划一致', value: '执行与计划一致' },
{ label: '执行与计划不一致', value: '执行与计划不一致' }
],
"fill": true, "fill": true,
"width": 190, "width": 190,
referenceKey: "plannedOtherDisplay", referenceKey: "plannedOtherDisplay",
...@@ -637,17 +650,23 @@ ...@@ -637,17 +650,23 @@
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> <span>{row[col.referenceKey] || '-'}</span>
<div> <el-select modelValue={row[col.prop]}
<el-input 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="" clearable
clearable >
/> {col.options.map(item => (
</div> <el-option
key={item.value}
label={item.label}
value={item.value}
/>
))}
</el-select>
</div> </div>
) )
}, },
...@@ -665,7 +684,7 @@ ...@@ -665,7 +684,7 @@
row.actualOtherDisplayExecuted = '-' row.actualOtherDisplayExecuted = '-'
return '-'; return '-';
} }
row.actualOtherDisplayExecuted = row.actualOtherDisplay ? '是' : '否' row.actualOtherDisplayExecuted = row.actualOtherDisplay === '执行与计划一致' ? '是' : '否'
return row.actualOtherDisplayExecuted return row.actualOtherDisplayExecuted
}, },
formulaStr: "公式:实际其他陈列-数量+形式,有值" formulaStr: "公式:实际其他陈列-数量+形式,有值"
......
...@@ -351,7 +351,6 @@ ...@@ -351,7 +351,6 @@
const getTableList = () => { const getTableList = () => {
isLoading.value = true isLoading.value = true
getSixLittleDiamondsPlanList(params.value).then(res => { getSixLittleDiamondsPlanList(params.value).then(res => {
console.log(res, 'res')
isLoading.value = false isLoading.value = false
tableData.value = res.data.rows.map(item => { tableData.value = res.data.rows.map(item => {
// 计划月份 // 计划月份
......
...@@ -264,12 +264,12 @@ ...@@ -264,12 +264,12 @@
"type": "input", "type": "input",
options: [ options: [
{ {
label: '', label: '执行与计划一致',
value: '' value: '执行与计划一致'
}, },
{ {
label: '', label: '执行与计划不一致',
value: '' value: '执行与计划不一致'
} }
], ],
referenceKey: "plannedDisplay", referenceKey: "plannedDisplay",
...@@ -413,43 +413,43 @@ ...@@ -413,43 +413,43 @@
// requestKey: ["endCapQtyExecuted", "snackDisplayExecuted"] // requestKey: ["endCapQtyExecuted", "snackDisplayExecuted"]
requestKey: ["endCapQtyExecuted"] requestKey: ["endCapQtyExecuted"]
}, },
{
"label": "端架数量是否执行",
"prop": "endCapQtyExecuted",
"visible": true,
"type": "formula",
"fill": true,
"width": 150,
func: (row) => {
if (!row.plannedEndCapQty) {
row.endCapQtyExecuted = '-'
return '-'
}
// 截取计划端架数量数据
row.endCapQtyExecuted = row.actualEndCapQty == row.plannedEndCapQty ? '是' : '否'
return row.endCapQtyExecuted
},
formulaStr: "执行端架数量 == 计划端架数量"
},
// { // {
// "label": "零食陈列是否执行", // "label": "端架数量是否执行",
// "prop": "snackDisplayExecuted", // "prop": "endCapQtyExecuted",
// "visible": true, // "visible": true,
// "type": "formula", // "type": "formula",
// "fill": true, // "fill": true,
// "width": 150, // "width": 150,
// func: (row) => { // func: (row) => {
// const executionStatuses = [ // if (!row.plannedEndCapQty) {
// row.displayExecuted, // row.endCapQtyExecuted = '-'
// row.endCapQtyExecuted // return '-'
// ].filter(status => status !== '-'); // }
// // 截取计划端架数量数据
// // 如果所有过滤后的状态都是'是',则返回'是',否则返回'否' // row.endCapQtyExecuted = row.actualEndCapQty == row.plannedEndCapQty ? '是' : '否'
// row.snackDisplayExecuted = executionStatuses.every(status => status === '是') ? '是' : '否'; // return row.endCapQtyExecuted
// return row.snackDisplayExecuted;
// }, // },
// formulaStr: "公式:陈列形式执行,并且端架数量执行(某项无计划时,忽略该项)" // formulaStr: "执行端架数量 == 计划端架数量"
// }, // },
{
"label": "零食陈列是否执行",
"prop": "snackDisplayExecuted",
"visible": true,
"type": "formula",
"fill": true,
"width": 150,
func: (row) => {
const executionStatuses = [
row.displayExecuted,
row.endCapQtyExecuted
].filter(status => status !== '-');
// 如果所有过滤后的状态都是'是',则返回'是',否则返回'否'
row.snackDisplayExecuted = executionStatuses.every(status => status === '是') ? '是' : '否';
return row.snackDisplayExecuted;
},
formulaStr: "公式:陈列形式执行,并且端架数量执行(某项无计划时,忽略该项)"
},
{ {
"label": "计划 - 陈列费用", "label": "计划 - 陈列费用",
"prop": "totalCost", "prop": "totalCost",
......
...@@ -268,7 +268,8 @@ ...@@ -268,7 +268,8 @@
</div> </div>
</div> </div>
); );
} },
requestKey: ["displayQtyExecuted60"]
}, },
// 60g挂条陈列-是否执行 // 60g挂条陈列-是否执行
{ {
...@@ -282,10 +283,10 @@ ...@@ -282,10 +283,10 @@
row.displayQtyExecuted60 = '-'; row.displayQtyExecuted60 = '-';
return '-'; return '-';
} }
row.displayQtyExecuted60 = row.plannedDisplayQty60 == row.actualDisplayQty60 ? '是' : '否'; row.displayQtyExecuted60 = (row.actualDisplayQty60 * 1) >= (row.plannedDisplayQty60 * 1) ? '是' : '否';
return row.displayQtyExecuted60; return row.displayQtyExecuted60;
}, },
formulaStr: '公式:(计划-60g挂条陈列数量 = 实际-60g挂条陈列数量)', formulaStr: '公式:(实际-60g挂条陈列数量 >= 计划-60g挂条陈列数量)',
fill: true, fill: true,
width: 200 width: 200
}, },
...@@ -349,8 +350,6 @@ ...@@ -349,8 +350,6 @@
const getTableList = () => { const getTableList = () => {
isLoading.value = true isLoading.value = true
getThreeMetersTwoSecondsPlanList(params.value).then(res => { getThreeMetersTwoSecondsPlanList(params.value).then(res => {
console.log(res)
console.log(res.data.rows)
isLoading.value = false isLoading.value = false
tableData.value = res.data.rows.map(item => { tableData.value = res.data.rows.map(item => {
// 计划月份 // 计划月份
...@@ -370,6 +369,7 @@ ...@@ -370,6 +369,7 @@
// 提交变更 // 提交变更
const submitChange = async (row, col) => { const submitChange = async (row, col) => {
let requestObj = {} let requestObj = {}
if (col.requestKey) { if (col.requestKey) {
// 关联的公式计算列,需要特殊处理 // 关联的公式计算列,需要特殊处理
......
...@@ -681,7 +681,6 @@ ...@@ -681,7 +681,6 @@
dateRange.value = [] // 创建时间置空 dateRange.value = [] // 创建时间置空
proxy.resetForm("queryRef") proxy.resetForm("queryRef")
queryParams.value.deptId = undefined // 部门搜索置空 queryParams.value.deptId = undefined // 部门搜索置空
console.log(deptTreeRef.value)
deptTreeRef.value.setCurrentKey(null) deptTreeRef.value.setCurrentKey(null)
handleQuery() handleQuery()
} }
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论