提交 996665dd authored 作者: lidongxu's avatar lidongxu

Merge branch 'ap' into dev

<template> <template>
<!-- 操作类型 --> <div class="flex-container">
<el-row> <!-- 操作类型 -->
<el-form-item> <el-row>
<el-radio-group v-model="operation" <el-form-item>
@change="checkTableColumns"> <el-radio-group v-model="operation"
<el-radio-button label="展示模式" @change="checkTableColumns">
value="展示模式" /> <el-radio-button label="展示模式"
<el-radio-button label="填报模式" value="展示模式" />
value="填报模式" <el-radio-button label="填报模式"
v-if="showFill" /> value="填报模式"
</el-radio-group> v-if="showFill" />
<!-- 提示文字 --> </el-radio-group>
<span class="tip-title">请真实,及时,准确填写!</span> <!-- 提示文字 -->
</el-form-item> <span class="tip-title">请真实,及时,准确填写!</span>
<right-toolbar v-model:showSearch="showSearch" </el-form-item>
@queryTable="getTableList()" <right-toolbar v-model:showSearch="showSearch"
:columns="chooseColumns" @queryTable="getTableList()"
:showColumnsType="operation === '展示模式' ? 'tree' : 'checkbox'" :columns="chooseColumns"
:defaultCheckedKeys="visibleProps"> :showColumnsType="operation === '展示模式' ? 'tree' : 'checkbox'"
</right-toolbar> :defaultCheckedKeys="visibleProps">
</el-row> <!-- 添加自定义工具栏插槽 -->
<!-- 数据表格 --> <template #default>
<el-table :data="tableData" <!-- 默认插槽内容,父组件可以覆盖 -->
border <el-tooltip class="item"
ref="tableRef" effect="dark"
class="auto-fit-header-table" content="放大表格"
v-loading="isLoading" placement="top">
show-overflow-tooltip <el-button circle
:class="{ 'cell-no-padding': operation === '填报模式' }"> icon="Rank"
<template v-for="col in tableColumns"> @click="openTableDialog" />
<el-table-column v-if="col.visible" </el-tooltip>
:label="col.label"
:prop="col.prop"
:key="col.prop"
align="center"
class-name="column-style"
:width="col.width"
:fixed="operation === '填报模式' && col.fixed">
<template #header="{ column }">
<!-- 只为特定公式列添加问号图标 -->
<span class="formula-column">
<div class="column">
<p>{{ column.label }}</p>
<p v-if="col.subLabel">{{ col.subLabel }}</p>
</div>
<el-tooltip v-if="col.type === 'formula'"
:content="col.formulaStr"
placement="top">
<el-icon><question-filled /></el-icon>
</el-tooltip>
</span>
</template> </template>
<template #default="{ row }"> </right-toolbar>
<!-- 填报模式 --> </el-row>
<div v-if="operation === '填报模式'"> <!-- 表格容器 - 用于DOM移动 -->
<!-- 自定义渲染内容单元格 --> <div ref="tableContainer"
<div v-if="col.render" class="table-container">
class="cell-style"> <!-- 数据表格 -->
<component :is="col.render(h, row, col)" /> <el-table :data="tableData"
</div> border
<!-- 公式计算 --> ref="tableRef"
<div v-else-if="col.type === 'formula'"> class="auto-fit-header-table"
{{ col.func(row) }} v-loading="isLoading"
</div> show-overflow-tooltip
<!-- 其他类型内容 --> :class="{ 'cell-no-padding': operation === '填报模式' }">
<div v-else> <template v-for="col in tableColumns">
<!-- 正常显示 --> <el-table-column v-if="col.visible"
<span>{{ row[col.prop] || '-' }}</span> :label="col.label"
</div> :prop="col.prop"
</div> :key="col.prop"
<!-- 展示模式 --> align="center"
<div class="show-cell-style" class-name="column-style"
v-else>{{ formatter(row, col, row[col.prop] || '-') }}</div> :width="col.width"
:fixed="operation === '填报模式' && col.fixed">
<template #header="{ column }">
<!-- 只为特定公式列添加问号图标 -->
<span class="formula-column">
<div class="column">
<p>{{ column.label }}</p>
<p v-if="col.subLabel">{{ col.subLabel }}</p>
</div>
<el-tooltip v-if="col.type === 'formula'"
:content="col.formulaStr"
placement="top">
<el-icon><question-filled /></el-icon>
</el-tooltip>
</span>
</template>
<template #default="{ row }">
<!-- 填报模式 -->
<div v-if="operation === '填报模式'">
<!-- 自定义渲染内容单元格 -->
<div v-if="col.render"
class="cell-style">
<component :is="col.render(h, row, col)" />
</div>
<!-- 公式计算 -->
<div v-else-if="col.type === 'formula'">
{{ col.func(row) }}
</div>
<!-- 其他类型内容 -->
<div cllass="fill-span-wrap"
v-else>
<!-- 正常显示 -->
<span class="fill-span">{{ row[col.prop] || '-' }}</span>
</div>
</div>
<!-- 展示模式 -->
<div class="show-cell-style"
v-else>{{ formatter(row, col, row[col.prop] || '-') }}</div>
</template>
</el-table-column>
</template> </template>
</el-table-column> </el-table>
</template> <!-- 分页 -->
</el-table> <pagination :total="total"
<!-- 分页 --> v-model:page="params.pageNum"
<pagination :total="total" v-model:limit="params.pageSize"
v-model:page="params.pageNum" @pagination="getTableList" />
v-model:limit="params.pageSize" </div>
@pagination="getTableList" /> </div>
<!-- 表格弹窗 - 使用DOM移动而非复制 -->
<el-dialog v-model="showTableInDialog"
title="表格详情"
modal-class="table-dialog-modal"
fullscreen
:before-close="handleDialogClose">
<!-- 弹窗内的表格容器 -->
<div ref="dialogTableContainer"
class="dialog-table-container"></div>
</el-dialog>
</template> </template>
<script setup> <script setup>
...@@ -130,8 +160,8 @@ const emit = defineEmits(['updateColumns', 'getTableList', 'updateShowSearch']) ...@@ -130,8 +160,8 @@ const emit = defineEmits(['updateColumns', 'getTableList', 'updateShowSearch'])
/*************** 工具栏 ***************/ /*************** 工具栏 ***************/
// 切换平铺/填报模式 // 切换平铺/填报模式
const operation = ref('展示模式'); // const operation = ref('展示模式');
// const operation = ref('填报模式'); const operation = ref('填报模式');
const tableRef = ref(null) const tableRef = ref(null)
const checkTableColumns = async () => { const checkTableColumns = async () => {
// 通知外面传入 tableColumns / chooseColumns 数据源 // 通知外面传入 tableColumns / chooseColumns 数据源
...@@ -157,143 +187,278 @@ watch(showSearch, (newVal) => { ...@@ -157,143 +187,278 @@ watch(showSearch, (newVal) => {
const getTableList = () => { const getTableList = () => {
emit('getTableList') emit('getTableList')
} }
/************** 弹框控制 ***************/
// 控制表格弹框显隐
const tableContainer = ref(null) // 原始表格容器引用
const dialogTableContainer = ref(null) // 弹窗内表格容器引用
const showTableInDialog = ref(false)
// DOM移动需要的引用
let containerElement = null // 保存整个可移动容器
let originalParent = null // 保存原始父容器
// 打开表格弹窗并移动DOM
const openTableDialog = async () => {
// 保存容器元素和原始父容器引用
if (tableContainer.value) {
containerElement = tableContainer.value
originalParent = containerElement.parentElement
}
// 显示弹窗
showTableInDialog.value = true
// 等待弹窗渲染完成后移动DOM
await nextTick()
moveContentToDialog()
}
// 移动内容到弹窗
const moveContentToDialog = () => {
if (containerElement && dialogTableContainer.value) {
// 关键DOM移动操作 - 现在会移动整个容器(包含表格和分页器)
dialogTableContainer.value.appendChild(containerElement)
// 调整表格布局
nextTick(() => {
if (tableRef.value) {
tableRef.value.doLayout()
}
})
}
}
// 移动内容回原位
const moveContentBack = () => {
if (containerElement && originalParent) {
// 关键DOM移动操作
originalParent.appendChild(containerElement)
// 调整表格布局
nextTick(() => {
if (tableRef.value) {
tableRef.value.doLayout()
}
})
}
}
// 关闭弹窗
const handleDialogClose = () => {
// 先移动内容回原位
moveContentBack()
// 然后关闭弹窗
showTableInDialog.value = false
}
</script> </script>
<style scoped <style scoped
lang="scss"> lang="scss">
/* 工具栏 */ /* 根容器设置为flex布局,占据整个可用空间 */
.el-row { .flex-container {
.el-form-item { flex: 1;
.tip-title { display: flex;
font-size: 32px; flex-direction: column;
color: red; overflow: hidden;
margin-left: 50px;
font-weight: 900; /* 工具栏 */
margin-top: -5px; .el-row {
.el-form-item {
.tip-title {
font-size: 32px;
color: red;
margin-left: 50px;
font-weight: 900;
margin-top: -5px;
}
} }
} }
} }
/* 因为表格会被挪走,所以必须独立样式无法嵌套在别人内 */
/* 表格样式 */ /* 表格样式 */
.auto-fit-header-table { .table-container {
height: 100%; flex: 1;
/* 这是关键,让表格容器自动占据剩余空间 */
display: flex;
flex-direction: column;
min-height: 0;
/* 解决flex子项内容溢出问题 */
/* 列样式 */ /* overflow-y: scroll; */
.column-style { .auto-fit-header-table {
flex: 1;
/* 列头样式 */ /* 列样式 */
.formula-column { .column-style {
display: flex;
justify-content: center;
align-items: center;
.column { /* 列头样式 */
.formula-column {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
flex-direction: column;
p { .column {
margin: 0; display: flex;
font-size: 12px; justify-content: center;
color: #606266; align-items: center;
flex-direction: column;
p {
margin: 0;
font-size: 12px;
color: #606266;
}
}
.el-icon {
margin-left: 2px;
} }
} }
.el-icon { /* 单元格样式 */
margin-left: 2px; /* 展示模式单元格(仅展示模式生效) */
.show-cell-style {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} }
}
/* 单元格样式 */ .cell-style {
/* 展示模式单元格(仅展示模式生效) */ >div {
.show-cell-style { display: flex;
overflow: hidden; flex-direction: column;
text-overflow: ellipsis; align-items: center;
white-space: nowrap;
}
>span {
text-align: left;
text-indent: 5px;
display: inline-block;
width: 80%;
background-color: #e1e2e6;
border-bottom: 1px solid #ebeef5;
}
}
/* 表格内下拉框 */
.el-select {
width: 100% !important;
padding: 10px;
.cell-style { /* 非 disabled 状态下的背景颜色 */
>div { &.no-disabled ::v-deep(.el-select__wrapper) {
display: flex; border: 4px solid var(--el-background-editor-cell) !important;
flex-direction: column; }
align-items: flex-start; }
>span { .el-input {
text-align: left; height: 32px !important;
text-indent: 5px; /* box-sizing: content-box; */
display: inline-block; padding: 0 10px;
width: 100%; width: 100%;
background-color: #e1e2e6;
border-bottom: 1px solid #ebeef5;
}
}
/* 表格内下拉框 */
.el-select {
width: 100% !important;
padding: 10px;
::v-deep(.el-select__wrapper) { /* 非 disabled 状态下的背景颜色 */
border: 4px solid var(--el-background-editor-cell) !important; &.no-disabled ::v-deep(.el-input__wrapper) {
} border: 4px solid var(--el-background-editor-cell) !important;
}
/* 非 disabled 状态下的背景颜色 */ }
/* &.no-disabled {
background-color: ;
} */
} .date-picker {
width: 100%;
padding: 10px;
.el-input { /* 非 disabled 状态下的背景颜色 */
padding: 10px; &.no-disabled ::v-deep(.el-input__wrapper) {
border: 4px solid var(--el-background-editor-cell) !important;
}
::v-deep(.el-input__wrapper) { ::v-deep(.el-input) {
border: 4px solid var(--el-background-editor-cell) !important; width: 100%;
padding: 0;
}
} }
}
/* &.no-disabled { /* 填充模式下的普通战士文字 */
background-color: var(--el-background-editor-cell); .fill-span-wrap {
} */ /* line-height: 1; */
.fill-span {
display: inline-block;
width: 80% !important;
/* 超出省略号 */
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
} }
.date-picker { }
width: 100%;
padding: 10px;
&.no-disabled { /* 填报模式-单元格 */
background-color: var(--el-background-editor-cell); &.cell-no-padding {
}
::v-deep(.el-input) { /* 无上下内边距 */
width: 100%; ::v-deep(.el-table__row) {
.el-table__cell {
padding: 0; padding: 0;
.cell {
padding: 0 !important;
}
} }
} }
} }
} }
/* 填报模式-单元格 */ /* 分页器 */
&.cell-no-padding { .pagination-container {
margin: 10px;
}
}
</style>
<style lang="scss">
/* 表格弹窗 */
.table-dialog-modal {
padding: 0;
/* 关键:覆盖Element Plus对话框的默认最大宽度 */
.el-dialog {
width: 100% !important;
max-width: none !important;
margin: 0 !important;
height: 100vh;
display: flex;
flex-direction: column;
/* 无上下内边距 */ .el-dialog__body {
::v-deep(.el-table__row) { flex: 1;
.el-table__cell { display: flex;
padding: 0; flex-direction: column;
overflow: hidden !important;
.cell { .dialog-table-container {
padding: 0 !important; flex: 1;
height: 100%;
.table-container {
flex: 1;
display: flex;
flex-direction: column;
height: 100%;
.pagination-container {
margin-left: auto;
} }
} }
} }
} }
}
/* 分页器 */
.pagination-container {
margin: 10px;
} }
}
</style> </style>
\ No newline at end of file
...@@ -41,7 +41,8 @@ import Snack from './tabs/snack.vue' ...@@ -41,7 +41,8 @@ import Snack from './tabs/snack.vue'
import ThreeTwoSeconds from './tabs/three_two_seconds.vue' import ThreeTwoSeconds from './tabs/three_two_seconds.vue'
import SixLittleDiamonds from './tabs/six_little_diamonds.vue' import SixLittleDiamonds from './tabs/six_little_diamonds.vue'
const activeName = ref('常规陈列'); // const activeName = ref('常规陈列');
const activeName = ref('档期计划');
const handleClickTabs = (tab) => { const handleClickTabs = (tab) => {
activeName.value = tab.name; activeName.value = tab.name;
} }
......
...@@ -58,7 +58,7 @@ ...@@ -58,7 +58,7 @@
visible: true, // 是否显示 visible: true, // 是否显示
type: 'string', // 列类型 type: 'string', // 列类型
fill: false, // 是否为填报列 fill: false, // 是否为填报列
width: 90 width: 100
}, },
{ {
label: "销售大区", label: "销售大区",
...@@ -66,7 +66,7 @@ ...@@ -66,7 +66,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "销售战区", label: "销售战区",
...@@ -74,7 +74,7 @@ ...@@ -74,7 +74,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "经销商-省份", label: "经销商-省份",
...@@ -82,7 +82,7 @@ ...@@ -82,7 +82,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "经销商-城市", label: "经销商-城市",
...@@ -90,7 +90,7 @@ ...@@ -90,7 +90,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "经销商-代码", label: "经销商-代码",
...@@ -98,7 +98,7 @@ ...@@ -98,7 +98,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "经销商-类型", label: "经销商-类型",
...@@ -107,7 +107,7 @@ ...@@ -107,7 +107,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 145 width: 100
}, },
{ {
label: "开户日期", label: "开户日期",
...@@ -115,7 +115,7 @@ ...@@ -115,7 +115,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "闭户日期", label: "闭户日期",
...@@ -123,7 +123,7 @@ ...@@ -123,7 +123,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "大区总监", label: "大区总监",
...@@ -131,7 +131,7 @@ ...@@ -131,7 +131,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "战区经理", label: "战区经理",
...@@ -139,7 +139,7 @@ ...@@ -139,7 +139,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "城市经理", label: "城市经理",
...@@ -147,7 +147,7 @@ ...@@ -147,7 +147,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 90 width: 100
}, },
// { // {
// label: "门店名称", // label: "门店名称",
...@@ -177,7 +177,7 @@ ...@@ -177,7 +177,7 @@
type: 'string', type: 'string',
fill: true, fill: true,
fixed: 'left', fixed: 'left',
width: 195 width: 220
}, },
{ {
label: "门店编码", label: "门店编码",
...@@ -186,7 +186,7 @@ ...@@ -186,7 +186,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: true, fill: true,
width: 125 width: 110
}, },
{ {
label: "经销商名称", label: "经销商名称",
...@@ -196,7 +196,7 @@ ...@@ -196,7 +196,7 @@
type: 'string', type: 'string',
fill: true, fill: true,
// fixed: 'left', // fixed: 'left',
width: 215 width: 220
}, },
{ {
label: "系统类型", label: "系统类型",
...@@ -205,7 +205,7 @@ ...@@ -205,7 +205,7 @@
type: 'string', type: 'string',
fill: false, fill: false,
fixed: 'left', fixed: 'left',
width: 90 width: 100
}, },
{ {
label: "门店-省份", label: "门店-省份",
...@@ -213,7 +213,7 @@ ...@@ -213,7 +213,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "门店-城市", label: "门店-城市",
...@@ -221,7 +221,7 @@ ...@@ -221,7 +221,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "系统名称", label: "系统名称",
...@@ -230,7 +230,7 @@ ...@@ -230,7 +230,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 130 width: 100
}, },
{ {
label: "渠道大类", label: "渠道大类",
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "渠道小类", label: "渠道小类",
...@@ -248,7 +248,7 @@ ...@@ -248,7 +248,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 140 width: 100
}, },
{ {
label: "门店类型", label: "门店类型",
...@@ -257,7 +257,7 @@ ...@@ -257,7 +257,7 @@
type: 'string', type: 'string',
showOverflowTooltip: true, showOverflowTooltip: true,
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "系统业态", label: "系统业态",
...@@ -266,7 +266,7 @@ ...@@ -266,7 +266,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "门店面积", label: "门店面积",
...@@ -275,7 +275,7 @@ ...@@ -275,7 +275,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 140 width: 100
}, },
{ {
label: "门店分级(销量坎级)", label: "门店分级(销量坎级)",
...@@ -284,7 +284,7 @@ ...@@ -284,7 +284,7 @@
showOverflowTooltip: true, showOverflowTooltip: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 215 width: 100
}, },
{ {
label: "门店地址", label: "门店地址",
...@@ -293,7 +293,7 @@ ...@@ -293,7 +293,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 325 width: 100
}, },
{ {
label: "品项数", label: "品项数",
...@@ -301,7 +301,7 @@ ...@@ -301,7 +301,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 80 width: 100
} }
], ],
prop: 'baseColumns', prop: 'baseColumns',
...@@ -316,7 +316,7 @@ ...@@ -316,7 +316,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 155 width: 100
}, },
{ {
label: "大业态测试-月均POS", label: "大业态测试-月均POS",
...@@ -324,7 +324,7 @@ ...@@ -324,7 +324,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 155 width: 100
} }
], ],
prop: 'lfColumns', prop: 'lfColumns',
...@@ -341,16 +341,16 @@ ...@@ -341,16 +341,16 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: true, fill: true,
width: 100 width: 130
}, },
{ {
label: "主货架单个费用计划", label: "主货架单个费用计划",
prop: "plannedMainShelfUnitCost", prop: "plannedMainShelfUnitCost",
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 155 width: 130
}, },
{ {
label: "主货架总费用计划", label: "主货架总费用计划",
...@@ -358,7 +358,7 @@ ...@@ -358,7 +358,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 145 width: 130
}, },
{ {
label: "主货架形式", label: "主货架形式",
...@@ -376,7 +376,7 @@ ...@@ -376,7 +376,7 @@
], ],
referenceKey: "plannedMainShelfType", referenceKey: "plannedMainShelfType",
fill: true, fill: true,
width: 110, width: 130,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
...@@ -404,7 +404,7 @@ ...@@ -404,7 +404,7 @@
// 请求时需要额外携带影响的列字段值 // 请求时需要额外携带影响的列字段值
requestKey: ["actualMainShelfQty", "actualMainShelfExecuted", "regularDisplayExecuted"] requestKey: ["actualMainShelfQty", "actualMainShelfExecuted", "regularDisplayExecuted"]
}, },
{ {
label: "主货架数量", label: "主货架数量",
subLabel: '计划', subLabel: '计划',
prop: "plannedMainShelfQty", prop: "plannedMainShelfQty",
...@@ -433,12 +433,14 @@ ...@@ -433,12 +433,14 @@
{/* <span>{row[col.referenceKey] || '-'}</span> */} {/* <span>{row[col.referenceKey] || '-'}</span> */}
<el-input modelValue={row[col.prop]} <el-input modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
{/* 限制只能输入数字 */ }
if (!/^\d*$/.test(value)) {
return;
}
const numValue = value === '' ? 0 : Number(value); const numValue = value === '' ? 0 : Number(value);
row[col.prop] = numValue; row[col.prop] = numValue;
submitChange(row, col); submitChange(row, col);
}} }}
min="0"
type="number"
placeholder="" placeholder=""
disabled={!row[col.referenceKey]} disabled={!row[col.referenceKey]}
class={{ 'no-disabled': row[col.referenceKey] }} class={{ 'no-disabled': row[col.referenceKey] }}
...@@ -450,7 +452,8 @@ ...@@ -450,7 +452,8 @@
requestKey: ["actualMainShelfExecuted", "regularDisplayExecuted"] requestKey: ["actualMainShelfExecuted", "regularDisplayExecuted"]
}, },
{ {
label: "主货架是否执行实际", label: "主货架是否",
subLabel: '按计划执行',
prop: "actualMainShelfExecuted", prop: "actualMainShelfExecuted",
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -476,7 +479,7 @@ ...@@ -476,7 +479,7 @@
}, },
formulaStr: '公式:(实际主货架形式 >= 计划主货架形式)并且(实际主货架数量 >= 计划主货架数量)', formulaStr: '公式:(实际主货架形式 >= 计划主货架形式)并且(实际主货架数量 >= 计划主货架数量)',
fill: true, fill: true,
width: 170 width: 130
}, },
{ {
label: "端架数量", label: "端架数量",
...@@ -485,7 +488,7 @@ ...@@ -485,7 +488,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: true, fill: true,
width: 115 width: 130
}, },
{ {
label: "端架总费用计划", label: "端架总费用计划",
...@@ -501,7 +504,7 @@ ...@@ -501,7 +504,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 140 width: 130
}, },
{ {
label: "端架数量", label: "端架数量",
...@@ -517,7 +520,7 @@ ...@@ -517,7 +520,7 @@
], ],
referenceKey: "plannedEndCapQty", referenceKey: "plannedEndCapQty",
fill: true, fill: true,
width: 115, width: 130,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
...@@ -550,7 +553,8 @@ ...@@ -550,7 +553,8 @@
requestKey: ["actualEndCapExecuted", "regularDisplayExecuted"] requestKey: ["actualEndCapExecuted", "regularDisplayExecuted"]
}, },
{ {
label: "端架是否执行实际", label: "端架是否",
subLabel: '按计划执行',
prop: "actualEndCapExecuted", prop: "actualEndCapExecuted",
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -565,7 +569,7 @@ ...@@ -565,7 +569,7 @@
}, },
formulaStr: '公式:(实际端架数量 >= 计划端架数量)', formulaStr: '公式:(实际端架数量 >= 计划端架数量)',
fill: true, fill: true,
width: 155 width: 130
}, },
{ {
label: "地堆平米数(㎡)", label: "地堆平米数(㎡)",
...@@ -574,16 +578,16 @@ ...@@ -574,16 +578,16 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: true, fill: true,
width: 170 width: 130
}, },
{ {
label: "主题地堆是否计划", label: "主题地堆是否计划",
prop: "plannedThemedFloorStack", prop: "plannedThemedFloorStack",
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 140 width: 130
}, },
{ {
label: "地堆总费用计划", label: "地堆总费用计划",
...@@ -599,7 +603,7 @@ ...@@ -599,7 +603,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 160 width: 130
}, },
{ {
label: "地堆平米数(㎡)", label: "地堆平米数(㎡)",
...@@ -620,7 +624,7 @@ ...@@ -620,7 +624,7 @@
], ],
referenceKey: "plannedFloorStackArea", referenceKey: "plannedFloorStackArea",
fill: true, fill: true,
width: 170, width: 130,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
...@@ -659,7 +663,7 @@ ...@@ -659,7 +663,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: true, fill: true,
width: 115 width: 130
}, },
{ {
label: "地堆数量", label: "地堆数量",
...@@ -676,7 +680,7 @@ ...@@ -676,7 +680,7 @@
], ],
referenceKey: "plannedFloorStackQty", referenceKey: "plannedFloorStackQty",
fill: true, fill: true,
width: 115, width: 130,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
...@@ -719,7 +723,7 @@ ...@@ -719,7 +723,7 @@
{ label: '否', value: '否' } { label: '否', value: '否' }
], ],
fill: false, fill: false,
width: 140, width: 130,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
...@@ -744,7 +748,8 @@ ...@@ -744,7 +748,8 @@
} }
}, },
{ {
label: "地堆是否执行实际", label: "地堆是否",
subLabel: '按计划执行',
prop: "actualFloorStackExecuted", prop: "actualFloorStackExecuted",
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -759,7 +764,7 @@ ...@@ -759,7 +764,7 @@
}, },
formulaStr: '公式:(实际地堆平米数 >= 计划地堆平米数)并且(实际地堆数量 >= 计划地堆数量)', formulaStr: '公式:(实际地堆平米数 >= 计划地堆平米数)并且(实际地堆数量 >= 计划地堆数量)',
fill: true, fill: true,
width: 150 width: 130
}, },
{ {
label: "多点陈列数量形式", label: "多点陈列数量形式",
...@@ -768,7 +773,7 @@ ...@@ -768,7 +773,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: true, fill: true,
width: 175 width: 130
}, },
{ {
label: "多点陈列总费用计划", label: "多点陈列总费用计划",
...@@ -776,7 +781,7 @@ ...@@ -776,7 +781,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 155 width: 130
}, },
{ {
label: "多点陈列数量形式", label: "多点陈列数量形式",
...@@ -790,7 +795,7 @@ ...@@ -790,7 +795,7 @@
], ],
referenceKey: "plannedMultiDisplay", referenceKey: "plannedMultiDisplay",
fill: true, fill: true,
width: 175, width: 130,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
...@@ -819,7 +824,8 @@ ...@@ -819,7 +824,8 @@
requestKey: ["actualMultiDisplayExecuted"] requestKey: ["actualMultiDisplayExecuted"]
}, },
{ {
label: "多点陈列是否执行实际", label: "多点陈列是否",
subLabel: '按计划执行',
prop: "actualMultiDisplayExecuted", prop: "actualMultiDisplayExecuted",
referenceKey: 'actualMultiDisplay', referenceKey: 'actualMultiDisplay',
visible: true, visible: true,
...@@ -835,7 +841,7 @@ ...@@ -835,7 +841,7 @@
}, },
formulaStr: '公式:实际与计划是否一致', formulaStr: '公式:实际与计划是否一致',
fill: true, fill: true,
width: 180, width: 140,
}, },
{ {
label: "挂条数量形式", label: "挂条数量形式",
...@@ -844,7 +850,7 @@ ...@@ -844,7 +850,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: true, fill: true,
width: 175 width: 130
}, },
{ {
label: "挂条数量形式", label: "挂条数量形式",
...@@ -858,7 +864,7 @@ ...@@ -858,7 +864,7 @@
], ],
referenceKey: "plannedHangingStripQuantityForm", referenceKey: "plannedHangingStripQuantityForm",
fill: true, fill: true,
width: 175, width: 130,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
...@@ -887,7 +893,8 @@ ...@@ -887,7 +893,8 @@
requestKey: ["actualMultiDisplayExecuted"] requestKey: ["actualMultiDisplayExecuted"]
}, },
{ {
label: "挂条-是否执行", label: "挂条是否",
subLabel: '按计划执行',
prop: "hangingStripExecuted", prop: "hangingStripExecuted",
referenceKey: 'actualHangingStripQuantityForm', referenceKey: 'actualHangingStripQuantityForm',
visible: true, visible: true,
...@@ -903,7 +910,7 @@ ...@@ -903,7 +910,7 @@
}, },
formulaStr: '公式:实际与计划是否一致', formulaStr: '公式:实际与计划是否一致',
fill: true, fill: true,
width: 180, width: 130,
}, },
{ {
label: "合计费用-费用", label: "合计费用-费用",
...@@ -911,7 +918,7 @@ ...@@ -911,7 +918,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 115 width: 130
}, },
{ {
label: "合计费用-费率", label: "合计费用-费率",
...@@ -919,7 +926,7 @@ ...@@ -919,7 +926,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 115 width: 130
}, },
// { // {
// label: "常规陈列是否执行", // label: "常规陈列是否执行",
...@@ -958,7 +965,7 @@ ...@@ -958,7 +965,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 120 width: 130
}, },
{ {
label: "当月拜访目标计划", label: "当月拜访目标计划",
...@@ -966,7 +973,7 @@ ...@@ -966,7 +973,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 135 width: 130
}, },
{ {
label: "当月是否拜访实际", label: "当月是否拜访实际",
...@@ -974,7 +981,7 @@ ...@@ -974,7 +981,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 135 width: 130
}, },
{ {
label: '修改人', label: '修改人',
...@@ -982,7 +989,7 @@ ...@@ -982,7 +989,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 120 width: 100
}, },
{ {
label: '修改时间', label: '修改时间',
...@@ -990,7 +997,7 @@ ...@@ -990,7 +997,7 @@
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: false,
width: 180 width: 100
} }
], ],
visible: true visible: true
...@@ -1072,7 +1079,7 @@ ...@@ -1072,7 +1079,7 @@
const isLoading = ref(true) const isLoading = ref(true)
let params = reactive({ let params = reactive({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 20,
}) })
const total = ref(0) const total = ref(0)
......
...@@ -66,32 +66,31 @@ ...@@ -66,32 +66,31 @@
{ {
label: "基础信息", label: "基础信息",
children: [ children: [
{ // {
label: '操作提示', // label: '操作提示',
prop: 'operationTip', // 列属性 // prop: 'operationTip', // 列属性
visible: true, // 是否显示 // visible: true, // 是否显示
type: 'string', // 列类型 // type: 'string', // 列类型
fill: true, // 是否为填报列 // fill: true, // 是否为填报列
fixed: 'left', // 是否固定在左侧 // fixed: 'left', // 是否固定在左侧
width: 100, // width: 100,
onlyFill: true, // 只在填报列显示 // onlyFill: true, // 只在填报列显示
render: (_, row, col) => { // render: (_, row, col) => {
return ( // return (
<div class="operation_tip_cell"> // <div class="operation_tip_cell">
<p>计划</p> // <p>计划</p>
<p>实际</p> // <p>实际</p>
</div> // </div>
) // )
} // }
}, // },
{ {
label: '计划月份', label: '计划月份',
prop: 'salesMonth', prop: 'salesMonth',
visible: true, visible: true,
type: 'string', type: 'string',
fill: true, fill: false,
fixed: 'left', width: 100
width: 90
}, },
{ {
label: "销售大区", label: "销售大区",
...@@ -99,7 +98,7 @@ ...@@ -99,7 +98,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "销售战区", label: "销售战区",
...@@ -107,7 +106,7 @@ ...@@ -107,7 +106,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "经销商-省份", label: "经销商-省份",
...@@ -115,7 +114,7 @@ ...@@ -115,7 +114,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "经销商-城市", label: "经销商-城市",
...@@ -123,7 +122,7 @@ ...@@ -123,7 +122,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "经销商-代码", label: "经销商-代码",
...@@ -131,7 +130,7 @@ ...@@ -131,7 +130,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "经销商名称", label: "经销商名称",
...@@ -150,7 +149,7 @@ ...@@ -150,7 +149,7 @@
showOverflowTooltip: true, showOverflowTooltip: true,
type: "string", type: "string",
fill: false, fill: false,
width: 155 width: 100
}, },
{ {
label: "开户日期", label: "开户日期",
...@@ -158,7 +157,7 @@ ...@@ -158,7 +157,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "闭户日期", label: "闭户日期",
...@@ -166,7 +165,7 @@ ...@@ -166,7 +165,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 105 width: 100
}, },
{ {
label: "大区总监", label: "大区总监",
...@@ -174,7 +173,7 @@ ...@@ -174,7 +173,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "战区经理", label: "战区经理",
...@@ -182,7 +181,7 @@ ...@@ -182,7 +181,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "城市经理", label: "城市经理",
...@@ -190,7 +189,7 @@ ...@@ -190,7 +189,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "系统名称", label: "系统名称",
...@@ -198,18 +197,16 @@ ...@@ -198,18 +197,16 @@
visible: true, visible: true,
type: "string", type: "string",
fill: true, fill: true,
fixed: 'left', // fixed: 'left',
showOverflowTooltip: true,
width: 100 width: 100
}, },
{ {
label: "系统类型", label: "系统类型",
prop: "lineType", prop: "lineType",
showOverflowTooltip: true,
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "渠道大类", label: "渠道大类",
...@@ -218,7 +215,7 @@ ...@@ -218,7 +215,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "渠道小类", label: "渠道小类",
...@@ -227,7 +224,7 @@ ...@@ -227,7 +224,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 140 width: 100
}, },
{ {
label: "系统业态", label: "系统业态",
...@@ -236,7 +233,7 @@ ...@@ -236,7 +233,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 90 width: 100
}, },
{ {
label: "门店数", label: "门店数",
...@@ -244,7 +241,7 @@ ...@@ -244,7 +241,7 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 75 width: 100
} }
], ],
prop: 'baseColumns', prop: 'baseColumns',
...@@ -259,28 +256,21 @@ ...@@ -259,28 +256,21 @@
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: false,
width: 110 width: 100
}, },
{ {
label: "档期计划-促销规格", label: "档期促销规格",
subLabel: '计划',
prop: "plannedPromotionSpec", prop: "plannedPromotionSpec",
showOverflowTooltip: true, showOverflowTooltip: true,
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: true,
width: 140 width: 150
},
{
label: "档期计划-促销口味",
prop: "plannedPromotionFlavor",
showOverflowTooltip: true,
visible: true,
type: "string",
fill: false,
width: 140
}, },
{ {
label: "档期执行-促销规格", label: "档期促销规格",
subLabel: '实际',
prop: "actualPromotionSpec", prop: "actualPromotionSpec",
visible: true, visible: true,
type: 'select', type: 'select',
...@@ -320,7 +310,7 @@ ...@@ -320,7 +310,7 @@
], ],
referenceKey: "plannedPromotionSpec", referenceKey: "plannedPromotionSpec",
fill: true, fill: true,
width: 190, width: 150,
render: (_, row, col) => { render: (_, row, col) => {
let list = splitAndFilter(row[col.referenceKey]) let list = splitAndFilter(row[col.referenceKey])
list = list.map(item => ({ list = list.map(item => ({
...@@ -332,7 +322,7 @@ ...@@ -332,7 +322,7 @@
}]) }])
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<el-select modelValue={row[col.prop]} <el-select modelValue={row[col.prop]}
onUpdate:modelValue={async (value) => { onUpdate:modelValue={async (value) => {
row[col.prop] = value; row[col.prop] = value;
...@@ -399,7 +389,7 @@ ...@@ -399,7 +389,7 @@
<div> <div>
{ {
row.actualPromotionSpec !== '其他' ? (<div style="width: 100%; text-align: center;">-</div>) : ( row.actualPromotionSpec !== '其他' ? (<div style="width: 100%; text-align: center;">-</div>) : (
<el-input style="margin-top:24px;" 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);
...@@ -413,10 +403,11 @@ ...@@ -413,10 +403,11 @@
) )
}, },
fill: true, fill: true,
width: 140 width: 150
}, },
{ {
label: "档期规格是否执行", label: "档期规格是否",
subLabel: '按计划执行',
prop: "specExecutionStatus", prop: "specExecutionStatus",
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -434,14 +425,24 @@ ...@@ -434,14 +425,24 @@
width: 150 width: 150
}, },
{ {
label: "档期执行-促销口味", label: "档期促销口味",
subLabel: '计划',
prop: "plannedPromotionFlavor",
visible: true,
type: "string",
fill: true,
width: 150
},
{
label: "档期促销口味",
subLabel: '实际',
prop: "actualPromotionFlavor", prop: "actualPromotionFlavor",
visible: true, visible: true,
type: 'select', type: 'select',
options: [], options: [],
referenceKey: "plannedPromotionFlavor", referenceKey: "plannedPromotionFlavor",
fill: true, fill: true,
width: 170, width: 150,
render: (_, row, col) => { render: (_, row, col) => {
// options 根据参考属性值来决定(计划值) // options 根据参考属性值来决定(计划值)
let list = splitAndFilter(row[col.referenceKey]) let list = splitAndFilter(row[col.referenceKey])
...@@ -472,11 +473,11 @@ ...@@ -472,11 +473,11 @@
// span 标签超出宽度时显示省略号 // span 标签超出宽度时显示省略号
return ( return (
<div> <div>
<el-tooltip placement="top" content={row[col.referenceKey] || '-'} disabled={!isContentOverflow(col.referenceKey, row[col.referenceKey], col)}> {/* <el-tooltip placement="top" content={row[col.referenceKey] || '-'} disabled={!isContentOverflow(col.referenceKey, row[col.referenceKey], col)}>
<span > <span >
{row[col.referenceKey] || '-'} {row[col.referenceKey] || '-'}
</span> </span>
</el-tooltip> </el-tooltip> */}
<el-select modelValue={row[col.prop]} <el-select modelValue={row[col.prop]}
onUpdate:modelValue={async (value) => { onUpdate:modelValue={async (value) => {
row[col.prop] = value; row[col.prop] = value;
...@@ -546,7 +547,7 @@ ...@@ -546,7 +547,7 @@
<div> <div>
{ {
row.actualPromotionFlavor.includes('其他') ? ( row.actualPromotionFlavor.includes('其他') ? (
<el-input style="margin-top: 24px;" 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);
...@@ -560,10 +561,11 @@ ...@@ -560,10 +561,11 @@
) )
}, },
fill: true, fill: true,
width: 170, width: 150,
}, },
{ {
label: "档期口味是否执行", label: "档期口味是否",
subLabel: '按计划执行',
prop: "flavorExecutionStatus", prop: "flavorExecutionStatus",
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -674,12 +676,13 @@ ...@@ -674,12 +676,13 @@
width: 155 width: 155
}, },
{ {
label: "计划-档期开始时间", label: "档期开始时间",
subLabel: '计划',
prop: "plannedPromotionStartDate", prop: "plannedPromotionStartDate",
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: true,
width: 140 width: 150
}, },
{ {
label: "计划-补差开始时间", label: "计划-补差开始时间",
...@@ -690,17 +693,18 @@ ...@@ -690,17 +693,18 @@
width: 140 width: 140
}, },
{ {
label: "实际-档期开始时间", label: "档期开始时间",
subLabel: '实际',
prop: "actualPromotionStartDate", prop: "actualPromotionStartDate",
visible: true, visible: true,
type: 'date', type: 'date',
referenceKey: "plannedPromotionStartDate", referenceKey: "plannedPromotionStartDate",
fill: true, fill: true,
width: 140, width: 150,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<div class={['date-picker', { 'no-disabled': row[col.referenceKey] }]}> <div class={['date-picker', { 'no-disabled': row[col.referenceKey] }]}>
<el-date-picker modelValue={row[col.prop]} <el-date-picker modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
...@@ -719,12 +723,13 @@ ...@@ -719,12 +723,13 @@
requestKey: ["timeExecutionStatus", 'promotionImplementationStatus'] requestKey: ["timeExecutionStatus", 'promotionImplementationStatus']
}, },
{ {
label: "计划-档期结束时间", label: "档期结束时间",
subLabel: '计划',
prop: "plannedPromotionEndDate", prop: "plannedPromotionEndDate",
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: true,
width: 140, width: 150,
}, },
{ {
label: "计划-补差结束时间", label: "计划-补差结束时间",
...@@ -735,17 +740,18 @@ ...@@ -735,17 +740,18 @@
width: 140 width: 140
}, },
{ {
label: "实际-档期结束时间", label: "档期结束时间",
subLabel: '实际',
prop: "actualPromotionEndDate", prop: "actualPromotionEndDate",
visible: true, visible: true,
type: 'date', type: 'date',
fill: true, fill: true,
referenceKey: "plannedPromotionEndDate", referenceKey: "plannedPromotionEndDate",
width: 140, width: 150,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<div class={['date-picker', { 'no-disabled': row[col.referenceKey] }]}> <div class={['date-picker', { 'no-disabled': row[col.referenceKey] }]}>
<el-date-picker modelValue={row[col.prop]} <el-date-picker modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
...@@ -764,7 +770,8 @@ ...@@ -764,7 +770,8 @@
requestKey: ["timeExecutionStatus", 'promotionImplementationStatus'] requestKey: ["timeExecutionStatus", 'promotionImplementationStatus']
}, },
{ {
label: "档期是否开展", label: "档期是否",
subLabel: '按计划执行',
prop: "promotionImplementationStatus", prop: "promotionImplementationStatus",
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -774,15 +781,16 @@ ...@@ -774,15 +781,16 @@
row.promotionImplementationStatus = '-'; row.promotionImplementationStatus = '-';
return '-'; return '-';
} }
row.promotionImplementationStatus = row.actualPromotionStartDate && row.actualPromotionEndDate ? '是' : '否'; row.promotionImplementationStatus = row.actualPromotionStartDate && row.actualPromotionEndDate ? '执行' : '未执行';
return row.promotionImplementationStatus; return row.promotionImplementationStatus;
}, },
formulaStr: '公式:(实际档期开始时间不为空,并且实际档期结束时间不为空)', formulaStr: '公式:(实际档期开始时间不为空,并且实际档期结束时间不为空)',
fill: true, fill: true,
width: 125 width: 150
}, },
{ {
label: "时间是否执行", label: "时间是否",
subLabel: '按计划执行',
prop: "timeExecutionStatus", prop: "timeExecutionStatus",
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -797,24 +805,26 @@ ...@@ -797,24 +805,26 @@
}, },
formulaStr: '公式:(实际档期开始时间 = 计划档期开始时间,并且实际档期结束时间 = 计划档期结束时间)', formulaStr: '公式:(实际档期开始时间 = 计划档期开始时间,并且实际档期结束时间 = 计划档期结束时间)',
fill: true, fill: true,
width: 125 width: 150
}, },
{ {
label: "计划促销机制", label: "促销机制",
subLabel: '计划',
prop: "plannedPromotionMechanism", prop: "plannedPromotionMechanism",
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: true,
width: 115 width: 150
}, },
{ {
label: "实际促销机制", label: "促销机制",
subLabel: '实际',
prop: "actualPromotionMechanism", prop: "actualPromotionMechanism",
visible: true, visible: true,
type: 'select', type: 'select',
referenceKey: "plannedPromotionMechanism", referenceKey: "plannedPromotionMechanism",
fill: true, fill: true,
width: 185, width: 190,
options: [ options: [
{ {
label: '执行与计划一致', label: '执行与计划一致',
...@@ -828,7 +838,7 @@ ...@@ -828,7 +838,7 @@
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<div style="width: 100%"> <div style="width: 100%">
<el-select modelValue={row[col.prop]} <el-select modelValue={row[col.prop]}
onUpdate:modelValue={async (value) => { onUpdate:modelValue={async (value) => {
...@@ -891,7 +901,7 @@ ...@@ -891,7 +901,7 @@
<div> <div>
{ {
row.actualPromotionMechanism !== '执行与计划不一致' ? (<div style="width: 100%; text-align: center;">-</div>) : ( row.actualPromotionMechanism !== '执行与计划不一致' ? (<div style="width: 100%; text-align: center;">-</div>) : (
<el-input style="margin-top: 24px;" 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);
...@@ -905,7 +915,7 @@ ...@@ -905,7 +915,7 @@
) )
}, },
fill: true, fill: true,
width: 200 width: 150
}, },
// { // {
// label: "促销机制是否执行", // label: "促销机制是否执行",
...@@ -923,7 +933,7 @@ ...@@ -923,7 +933,7 @@
// }, // },
// formulaStr: '公式:实际促销机制,是否有值', // formulaStr: '公式:实际促销机制,是否有值',
// fill: true, // fill: true,
// width: 145, // width: 150,
// }, // },
{ {
label: "预估袋数", label: "预估袋数",
...@@ -1023,7 +1033,8 @@ ...@@ -1023,7 +1033,8 @@
// requestKey: ["promotionPriceExecutionStatus"] // requestKey: ["promotionPriceExecutionStatus"]
// }, // },
{ {
label: "促销价是否执行", label: "促销价是否",
subLabel: '按计划执行',
prop: "promotionPriceExecutionStatus", prop: "promotionPriceExecutionStatus",
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -1033,7 +1044,7 @@ ...@@ -1033,7 +1044,7 @@
}, },
formulaStr: '公式:(计划促销机制 = 执行促销机制)', formulaStr: '公式:(计划促销机制 = 执行促销机制)',
fill: true, fill: true,
width: 140 width: 150
}, },
{ {
label: "正常经销商毛利现状", label: "正常经销商毛利现状",
...@@ -1129,12 +1140,13 @@ ...@@ -1129,12 +1140,13 @@
prop: 'posterPlan', prop: 'posterPlan',
children: [ children: [
{ {
label: "计划-海报形式", label: "海报形式",
subLabel: '计划',
prop: "plannedPosterFormat", prop: "plannedPosterFormat",
visible: true, visible: true,
type: "string", type: "string",
fill: false, fill: true,
width: 115 width: 150
}, },
{ {
label: "计划-海报费用", label: "计划-海报费用",
...@@ -1145,7 +1157,8 @@ ...@@ -1145,7 +1157,8 @@
width: 115 width: 115
}, },
{ {
label: "实际-海报形式", label: "海报形式",
subLabel: '实际',
prop: "actualPosterFormat", prop: "actualPosterFormat",
visible: true, visible: true,
type: 'select', type: 'select',
...@@ -1177,11 +1190,10 @@ ...@@ -1177,11 +1190,10 @@
], ],
referenceKey: "plannedPosterFormat", referenceKey: "plannedPosterFormat",
fill: true, fill: true,
width: 115, width: 150,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span>
<div style="width: 100%"> <div style="width: 100%">
<el-select modelValue={row[col.prop]} <el-select modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
...@@ -1189,7 +1201,7 @@ ...@@ -1189,7 +1201,7 @@
submitChange(row, col); submitChange(row, col);
}} }}
disabled={!row[col.referenceKey]} disabled={!row[col.referenceKey]}
class={{'no-disabled': row[col.referenceKey]}} class={{ 'no-disabled': row[col.referenceKey] }}
placeholder="" placeholder=""
clearable clearable
> >
...@@ -1204,7 +1216,8 @@ ...@@ -1204,7 +1216,8 @@
requestKey: ["posterExecutionStatus"] requestKey: ["posterExecutionStatus"]
}, },
{ {
label: "海报是否执行", label: "海报是否",
subLabel: '按计划执行',
prop: "posterExecutionStatus", prop: "posterExecutionStatus",
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -1216,7 +1229,7 @@ ...@@ -1216,7 +1229,7 @@
}, },
formulaStr: '公式:(计划海报形式 = 实际海报形式)', formulaStr: '公式:(计划海报形式 = 实际海报形式)',
fill: true, fill: true,
width: 125 width: 150
} }
], ],
visible: true visible: true
...@@ -1343,7 +1356,7 @@ ...@@ -1343,7 +1356,7 @@
const isLoading = ref(true) const isLoading = ref(true)
let params = reactive({ let params = reactive({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 20,
}) })
const total = ref(0) const total = ref(0)
......
...@@ -34,32 +34,31 @@ ...@@ -34,32 +34,31 @@
{ {
label: "基础信息", // 类型标题(用于右上角控制显隐列) label: "基础信息", // 类型标题(用于右上角控制显隐列)
children: [ children: [
{ // {
label: '操作提示', // 列标题 // label: '操作提示', // 列标题
prop: 'operationTip', // 列属性 // prop: 'operationTip', // 列属性
visible: true, // 是否显示 // visible: true, // 是否显示
type: 'string', // 列类型 // type: 'string', // 列类型
fill: true, // 是否在填报模式显示 // fill: true, // 是否在填报模式显示
fixed: 'left', // 是否固定在左侧 // fixed: 'left', // 是否固定在左侧
width: 100, // 列宽度 // width: 100, // 列宽度
onlyFill: true, // 只在填报列显示(展示模式不显示) // onlyFill: true, // 只在填报列显示(展示模式不显示)
render: (_, row, col) => { // 列自定义渲染内容 // render: (_, row, col) => { // 列自定义渲染内容
return ( // return (
<div class="operation_tip_cell"> // <div class="operation_tip_cell">
<p>计划</p> // <p>计划</p>
<p>实际</p> // <p>实际</p>
</div> // </div>
) // )
} // }
}, // },
{ {
label: '计划月份', // 列标题 label: '计划月份', // 列标题
prop: 'salesMonth', // 列属性 prop: 'salesMonth', // 列属性
visible: true, // 是否显示 visible: true, // 是否显示
type: 'string', // 列类型 type: 'string', // 列类型
fill: true, // 是否为填报列 fill: false, // 是否为填报列
fixed: 'left', // 是否固定在左侧 width: 100
width: 90
}, },
{ {
"label": "销售大区", "label": "销售大区",
...@@ -167,7 +166,7 @@ ...@@ -167,7 +166,7 @@
"type": "string", "type": "string",
"fill": true, "fill": true,
"width": 100, "width": 100,
fixed: 'left' // fixed: 'left'
}, },
{ {
"label": "系统类型", "label": "系统类型",
...@@ -372,11 +371,12 @@ ...@@ -372,11 +371,12 @@
// "width": 280 // "width": 280
// }, // },
{ {
"label": "计划端架 - 数量", "label": "端架数量",
"subLabel": '计划',
"prop": "plannedEndCapQty", "prop": "plannedEndCapQty",
"visible": true, "visible": true,
"type": "string", "type": "string",
"fill": false, "fill": true,
"width": 140 "width": 140
}, },
// { // {
...@@ -388,7 +388,8 @@ ...@@ -388,7 +388,8 @@
// "width": 140 // "width": 140
// }, // },
{ {
"label": "实际端架 - 数量", "label": "端架数量",
"subLabel": '实际',
"prop": "actualEndCapQty", "prop": "actualEndCapQty",
"visible": true, "visible": true,
"type": "select", "type": "select",
...@@ -414,7 +415,7 @@ ...@@ -414,7 +415,7 @@
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<el-select modelValue={row[col.prop]} <el-select modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
if (!value) { if (!value) {
...@@ -443,12 +444,13 @@ ...@@ -443,12 +444,13 @@
requestKey: ["actualEndCapExecuted", "promotionDisplayExecuted"] requestKey: ["actualEndCapExecuted", "promotionDisplayExecuted"]
}, },
{ {
"label": "实际端架 - 是否执行", "label": "端架是否",
"subLabel": '按计划执行',
"prop": "actualEndCapExecuted", "prop": "actualEndCapExecuted",
"visible": true, "visible": true,
"type": "formula", "type": "formula",
"fill": true, "fill": true,
"width": 160, "width": 140,
func: (row) => { func: (row) => {
// 如果计划端架数量为空则返回 '-' // 如果计划端架数量为空则返回 '-'
if (!row.plannedEndCapQty) { if (!row.plannedEndCapQty) {
...@@ -461,21 +463,15 @@ ...@@ -461,21 +463,15 @@
formulaStr: "执行端架数量 >= 计划端架数量" formulaStr: "执行端架数量 >= 计划端架数量"
}, },
{ {
"label": "计划地堆 - 平米数(㎡)", "label": "地堆平米数(㎡)",
"subLabel": '计划',
"prop": "plannedFloorStackArea", "prop": "plannedFloorStackArea",
"visible": true, "visible": true,
"type": "string", "type": "string",
"fill": false, "fill": true,
"width": 180
},
{
"label": "计划地堆 - 数量",
"prop": "plannedFloorStackQty",
"visible": true,
"type": "string",
"fill": false,
"width": 140 "width": 140
}, },
// { // {
// "label": "计划地堆 - 费用", // "label": "计划地堆 - 费用",
// "prop": "plannedFloorStackTotalCost", // "prop": "plannedFloorStackTotalCost",
...@@ -485,12 +481,13 @@ ...@@ -485,12 +481,13 @@
// "width": 140 // "width": 140
// }, // },
{ {
"label": "实际地堆 - 平米数(㎡)", "label": "地堆平米数(㎡)",
"subLabel": '实际',
"prop": "actualFloorStackArea", "prop": "actualFloorStackArea",
"visible": true, "visible": true,
"type": "input", "type": "input",
"fill": true, "fill": true,
"width": 180, "width": 140,
referenceKey: "plannedFloorStackArea", referenceKey: "plannedFloorStackArea",
// "options": [ // "options": [
// { // {
...@@ -529,7 +526,7 @@ ...@@ -529,7 +526,7 @@
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<el-input modelValue={row[col.prop]} <el-input modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
// 判断空字符串给 0 // 判断空字符串给 0
...@@ -550,7 +547,17 @@ ...@@ -550,7 +547,17 @@
requestKey: ["actualFloorStackExecuted", "promotionDisplayExecuted"] requestKey: ["actualFloorStackExecuted", "promotionDisplayExecuted"]
}, },
{ {
"label": "实际地堆 - 数量", "label": "地堆数量",
"subLabel": '计划',
"prop": "plannedFloorStackQty",
"visible": true,
"type": "string",
"fill": true,
"width": 140
},
{
"label": "地堆数量",
"subLabel": '实际',
"prop": "actualFloorStackQty", "prop": "actualFloorStackQty",
"visible": true, "visible": true,
"type": "input", "type": "input",
...@@ -583,7 +590,7 @@ ...@@ -583,7 +590,7 @@
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<el-input modelValue={row[col.prop]} <el-input modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
const numValue = value === '' ? 0 : Number(value); const numValue = value === '' ? 0 : Number(value);
...@@ -603,12 +610,13 @@ ...@@ -603,12 +610,13 @@
requestKey: ["actualFloorStackExecuted", "promotionDisplayExecuted"] requestKey: ["actualFloorStackExecuted", "promotionDisplayExecuted"]
}, },
{ {
"label": "实际地堆是否执行", "label": "地堆是否",
"subLabel": '按计划执行',
"prop": "actualFloorStackExecuted", "prop": "actualFloorStackExecuted",
"visible": true, "visible": true,
"type": "formula", "type": "formula",
"fill": true, "fill": true,
"width": 150, "width": 140,
func: (row) => { func: (row) => {
// 如果计划端架数量为空则返回 '-' // 如果计划端架数量为空则返回 '-'
if (!row.plannedFloorStackArea || !row.plannedFloorStackQty) { if (!row.plannedFloorStackArea || !row.plannedFloorStackQty) {
...@@ -621,12 +629,13 @@ ...@@ -621,12 +629,13 @@
formulaStr: "执行平米数 >= 计划平米数,并且 执行地堆数量 >= 计划地堆数量" formulaStr: "执行平米数 >= 计划平米数,并且 执行地堆数量 >= 计划地堆数量"
}, },
{ {
"label": "计划其他陈列数量 + 形式", "label": "其他陈列数量+形式",
"subLabel": '计划',
"prop": "plannedOtherDisplay", "prop": "plannedOtherDisplay",
"visible": true, "visible": true,
"type": "string", "type": "string",
"fill": false, "fill": true,
"width": 180 "width": 140
}, },
// { // {
// "label": "计划其他陈列 - 总费用", // "label": "计划其他陈列 - 总费用",
...@@ -637,7 +646,8 @@ ...@@ -637,7 +646,8 @@
// "width": 160 // "width": 160
// }, // },
{ {
"label": "实际其他陈列 - 数量 + 形式", "label": "其他陈列数量+形式",
"subLabel": '实际',
"prop": "actualOtherDisplay", "prop": "actualOtherDisplay",
"visible": true, "visible": true,
"type": "select", "type": "select",
...@@ -651,7 +661,7 @@ ...@@ -651,7 +661,7 @@
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<el-select modelValue={row[col.prop]} <el-select modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
row[col.prop] = value; row[col.prop] = value;
...@@ -676,12 +686,13 @@ ...@@ -676,12 +686,13 @@
requestKey: ["actualOtherDisplayExecuted", "promotionDisplayExecuted"] requestKey: ["actualOtherDisplayExecuted", "promotionDisplayExecuted"]
}, },
{ {
"label": "实际其他陈列 - 是否执行", "label": "其他陈列是否",
"subLabel": '按计划执行',
"prop": "actualOtherDisplayExecuted", "prop": "actualOtherDisplayExecuted",
"visible": true, "visible": true,
"type": "formula", "type": "formula",
"fill": true, "fill": true,
"width": 190, "width": 140,
func: (row) => { func: (row) => {
if (!row.plannedOtherDisplay) { if (!row.plannedOtherDisplay) {
row.actualOtherDisplayExecuted = '-' row.actualOtherDisplayExecuted = '-'
...@@ -828,7 +839,7 @@ ...@@ -828,7 +839,7 @@
const isLoading = ref(true) const isLoading = ref(true)
let params = reactive({ let params = reactive({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 20,
}) })
const total = ref(0) const total = ref(0)
......
...@@ -34,32 +34,31 @@ ...@@ -34,32 +34,31 @@
{ {
label: "基础信息", label: "基础信息",
children: [ children: [
{ // {
label: '操作提示', // label: '操作提示',
prop: 'operationTip', // 列属性 // prop: 'operationTip', // 列属性
visible: true, // 是否显示 // visible: true, // 是否显示
type: 'string', // 列类型 // type: 'string', // 列类型
fill: true, // 是否为填报列 // fill: true, // 是否为填报列
fixed: 'left', // 是否固定在左侧 // fixed: 'left', // 是否固定在左侧
width: 100, // width: 100,
onlyFill: true, // 只在填报列显示 // onlyFill: true, // 只在填报列显示
render: (_, row, col) => { // render: (_, row, col) => {
return ( // return (
<div class="operation_tip_cell"> // <div class="operation_tip_cell">
<p>计划</p> // <p>计划</p>
<p>实际</p> // <p>实际</p>
</div> // </div>
) // )
} // }
}, // },
{ {
label: '计划月份', // 列标题 label: '计划月份', // 列标题
prop: 'salesMonth', // 列属性 prop: 'salesMonth', // 列属性
visible: true, // 是否显示 visible: true, // 是否显示
type: 'string', // 列类型 type: 'string', // 列类型
fill: true, // 是否为填报列 fill: false, // 是否为填报列
fixed: 'left', // 是否固定在左侧 width: 100
width: 90
}, },
{ {
label: '销售大区', label: '销售大区',
...@@ -225,15 +224,17 @@ ...@@ -225,15 +224,17 @@
label: "六小金刚批发挂网", label: "六小金刚批发挂网",
children: [ children: [
{ {
label: '计划执行-六小金刚批发挂网', label: '六小金刚批发挂网',
subLabel: '计划',
prop: 'plannedGw6', prop: 'plannedGw6',
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: true,
width: 180 width: 210
}, },
{ {
label: '实际执行-六小金刚批发挂网', label: '六小金刚批发挂网',
subLabel: '实际',
prop: 'actualGw6', prop: 'actualGw6',
referenceKey: 'plannedGw6', referenceKey: 'plannedGw6',
visible: true, visible: true,
...@@ -247,8 +248,8 @@ ...@@ -247,8 +248,8 @@
// ], // ],
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div style="padding: 10px 0;">
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<el-input modelValue={row[col.prop]} <el-input modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
const numValue = value === '' ? 0 : Number(value); const numValue = value === '' ? 0 : Number(value);
...@@ -266,7 +267,7 @@ ...@@ -266,7 +267,7 @@
) )
}, },
fill: true, fill: true,
width: 190 width: 210
}, },
{ {
label: '六小金刚批发挂网陈列费', label: '六小金刚批发挂网陈列费',
...@@ -277,7 +278,8 @@ ...@@ -277,7 +278,8 @@
width: 160 width: 160
}, },
{ {
label: '六小金刚批发挂网-是否执行', label: '六小金刚批发挂网是否',
subLabel: '按实际执行',
prop: 'gwExecuted6', prop: 'gwExecuted6',
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -357,7 +359,7 @@ ...@@ -357,7 +359,7 @@
const params = ref({ const params = ref({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 20,
}) })
const showFill = ref(true) const showFill = ref(true)
const getTableList = () => { const getTableList = () => {
......
...@@ -33,32 +33,31 @@ ...@@ -33,32 +33,31 @@
{ {
label: "基础信息", label: "基础信息",
children: [ children: [
{ // {
label: '操作提示', // label: '操作提示',
prop: 'operationTip', // 列属性 // prop: 'operationTip', // 列属性
visible: true, // 是否显示 // visible: true, // 是否显示
type: 'string', // 列类型 // type: 'string', // 列类型
fill: true, // 是否为填报列 // fill: true, // 是否为填报列
fixed: 'left', // 是否固定在左侧 // fixed: 'left', // 是否固定在左侧
width: 100, // width: 100,
onlyFill: true, // 只在填报列显示 // onlyFill: true, // 只在填报列显示
render: (_, row, col) => { // render: (_, row, col) => {
return ( // return (
<div class="operation_tip_cell"> // <div class="operation_tip_cell">
<p>计划</p> // <p>计划</p>
<p>实际</p> // <p>实际</p>
</div> // </div>
) // )
} // }
}, // },
{ {
label: '计划月份', // 列标题 label: '计划月份', // 列标题
prop: 'salesMonth', // 列属性 prop: 'salesMonth', // 列属性
visible: true, // 是否显示 visible: true, // 是否显示
type: 'string', // 列类型 type: 'string', // 列类型
fill: true, // 是否为填报列 fill: false, // 是否为填报列
fixed: 'left', // 是否固定在左侧 width: 100
width: 90
}, },
{ {
"label": "销售大区", "label": "销售大区",
...@@ -250,15 +249,17 @@ ...@@ -250,15 +249,17 @@
"width": 280 "width": 280
}, },
{ {
"label": "计划 - 陈列形式", "label": "陈列形式",
subLabel: '计划',
"prop": "plannedDisplay", "prop": "plannedDisplay",
"visible": true, "visible": true,
"type": "string", "type": "string",
"fill": false, "fill": true,
"width": 140 "width": 190
}, },
{ {
"label": "实际 - 陈列形式", "label": "陈列形式",
subLabel: '实际',
"prop": "actualDisplay", "prop": "actualDisplay",
"visible": true, "visible": true,
"type": "input", "type": "input",
...@@ -276,7 +277,7 @@ ...@@ -276,7 +277,7 @@
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<div style="width: 100%"> <div style="width: 100%">
<el-select modelValue={row[col.prop]} <el-select modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
...@@ -297,7 +298,7 @@ ...@@ -297,7 +298,7 @@
) )
}, },
"fill": true, "fill": true,
"width": 160, "width": 190,
// "options": [ // "options": [
// { // {
// "label": "端架", // "label": "端架",
...@@ -360,15 +361,17 @@ ...@@ -360,15 +361,17 @@
// formulaStr: "实际陈列形式 === 计划陈列形式" // formulaStr: "实际陈列形式 === 计划陈列形式"
// }, // },
{ {
"label": "计划 - 端架数量(组)", "label": "端架数量(组)",
subLabel: '计划',
"prop": "plannedEndCapQty", "prop": "plannedEndCapQty",
"visible": true, "visible": true,
"type": "string", "type": "string",
"fill": false, "fill": true,
"width": 160 "width": 190
}, },
{ {
"label": "实际 - 端架数量(组)", "label": "端架数量(组)",
subLabel: '实际',
"prop": "actualEndCapQty", "prop": "actualEndCapQty",
"visible": true, "visible": true,
"type": "input", "type": "input",
...@@ -395,7 +398,6 @@ ...@@ -395,7 +398,6 @@
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div>
<span>{row[col.referenceKey] || '-'}</span>
<div> <div>
<el-input modelValue={row[col.prop]} <el-input modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
...@@ -414,7 +416,7 @@ ...@@ -414,7 +416,7 @@
</div> </div>
) )
}, },
"width": 160, "width": 190,
// requestKey: ["endCapQtyExecuted", "snackDisplayExecuted"] // requestKey: ["endCapQtyExecuted", "snackDisplayExecuted"]
requestKey: ["endCapQtyExecuted"] requestKey: ["endCapQtyExecuted"]
}, },
...@@ -621,7 +623,7 @@ ...@@ -621,7 +623,7 @@
const isLoading = ref(true) const isLoading = ref(true)
let params = reactive({ let params = reactive({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 20,
}) })
const total = ref(0) const total = ref(0)
......
...@@ -37,32 +37,31 @@ ...@@ -37,32 +37,31 @@
{ {
label: "基础信息", label: "基础信息",
children: [ children: [
{ // {
label: '操作提示', // label: '操作提示',
prop: 'operationTip', // 列属性 // prop: 'operationTip', // 列属性
visible: true, // 是否显示 // visible: true, // 是否显示
type: 'string', // 列类型 // type: 'string', // 列类型
fill: true, // 是否为填报列 // fill: true, // 是否为填报列
fixed: 'left', // 是否固定在左侧 // fixed: 'left', // 是否固定在左侧
width: 100, // width: 100,
onlyFill: true, // 只在填报列显示 // onlyFill: true, // 只在填报列显示
render: (_, row, col) => { // render: (_, row, col) => {
return ( // return (
<div class="operation_tip_cell"> // <div class="operation_tip_cell">
<p>计划</p> // <p>计划</p>
<p>实际</p> // <p>实际</p>
</div> // </div>
) // )
} // }
}, // },
{ {
label: '计划月份', // 列标题 label: '计划月份', // 列标题
prop: 'salesMonth', // 列属性 prop: 'salesMonth', // 列属性
visible: true, // 是否显示 visible: true, // 是否显示
type: 'string', // 列类型 type: 'string', // 列类型
fill: true, // 是否为填报列 fill: false, // 是否为填报列
fixed: 'left', // 是否固定在左侧 width: 100
width: 90
}, },
{ {
label: '销售大区', label: '销售大区',
...@@ -228,12 +227,13 @@ ...@@ -228,12 +227,13 @@
label: "60g挂条陈列", label: "60g挂条陈列",
children: [ children: [
{ {
label: '计划-60g挂条陈列数量', label: '60g挂条陈列数量',
subLabel: '计划',
prop: 'plannedDisplayQty60', prop: 'plannedDisplayQty60',
visible: true, visible: true,
type: 'string', type: 'string',
fill: false, fill: true,
width: 160 width: 200
}, },
{ {
label: '60g挂条陈列费', label: '60g挂条陈列费',
...@@ -244,19 +244,20 @@ ...@@ -244,19 +244,20 @@
width: 140 width: 140
}, },
{ {
label: '实际-60g挂条陈列数量', label: '60g挂条陈列数量',
subLabel: '实际',
prop: 'actualDisplayQty60', prop: 'actualDisplayQty60',
referenceKey: 'plannedDisplayQty60', referenceKey: 'plannedDisplayQty60',
visible: true, visible: true,
type: 'input', type: 'input',
fill: true, fill: true,
width: 160, width: 200,
render: (_, row, col) => { render: (_, row, col) => {
return ( return (
<div> <div style="padding: 10px 0;">
<span>{row[col.referenceKey] || '-'}</span> {/* <span>{row[col.referenceKey] || '-'}</span> */}
<div> <div>
<el-input <el-input
modelValue={row[col.prop]} modelValue={row[col.prop]}
onUpdate:modelValue={(value) => { onUpdate:modelValue={(value) => {
const numValue = value === '' ? 0 : Number(value); const numValue = value === '' ? 0 : Number(value);
...@@ -278,7 +279,8 @@ ...@@ -278,7 +279,8 @@
}, },
// 60g挂条陈列-是否执行 // 60g挂条陈列-是否执行
{ {
label: '60g挂条陈列-是否执行', label: '60g挂条陈列是否',
subLabel: '按计划执行',
prop: 'displayQtyExecuted60', prop: 'displayQtyExecuted60',
visible: true, visible: true,
type: 'formula', type: 'formula',
...@@ -358,7 +360,7 @@ ...@@ -358,7 +360,7 @@
const params = ref({ const params = ref({
pageNum: 1, pageNum: 1,
pageSize: 10, pageSize: 20,
}) })
const showFill = ref(true) const showFill = ref(true)
const getTableList = () => { const getTableList = () => {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论