Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
4d35e539
提交
4d35e539
authored
12月 16, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(display/promotion): 新增:店内执行上报_新增备注列_新增经销商分析查看
上级
a28281a0
隐藏空白字符变更
内嵌
并排
正在显示
22 个修改的文件
包含
603 行增加
和
191 行删除
+603
-191
display_schedule.js
src/api/promotion/display_schedule.js
+19
-2
display_schedule_dashboard.js
src/api/promotion/display_schedule_dashboard.js
+8
-0
element-ui.scss
src/assets/styles/element-ui.scss
+1
-1
request.js
src/utils/request.js
+34
-1
index.vue
...romotion/display_schedule/components/SearchList/index.vue
+1
-1
index.vue
...ews/promotion/display_schedule/components/Table/index.vue
+168
-8
data.jsx
src/views/promotion/display_schedule/tabs/data.jsx
+159
-8
display.vue
src/views/promotion/display_schedule/tabs/display.vue
+7
-14
schedule.vue
src/views/promotion/display_schedule/tabs/schedule.vue
+2
-0
schedule_dis.vue
src/views/promotion/display_schedule/tabs/schedule_dis.vue
+2
-0
six_little_diamonds.vue
...s/promotion/display_schedule/tabs/six_little_diamonds.vue
+2
-0
snack.vue
src/views/promotion/display_schedule/tabs/snack.vue
+2
-0
three_two_seconds.vue
...ews/promotion/display_schedule/tabs/three_two_seconds.vue
+2
-2
index.vue
...ion/display_schedule_dashboard/components/Table/index.vue
+50
-10
data.jsx
src/views/promotion/display_schedule_dashboard/tabs/data.jsx
+4
-90
display.vue
...ews/promotion/display_schedule_dashboard/tabs/display.vue
+23
-9
schedule.vue
...ws/promotion/display_schedule_dashboard/tabs/schedule.vue
+23
-9
schedule_dis.vue
...romotion/display_schedule_dashboard/tabs/schedule_dis.vue
+25
-9
six_little_diamonds.vue
...n/display_schedule_dashboard/tabs/six_little_diamonds.vue
+24
-9
snack.vue
...views/promotion/display_schedule_dashboard/tabs/snack.vue
+23
-9
three_two_seconds.vue
...ion/display_schedule_dashboard/tabs/three_two_seconds.vue
+23
-9
effectivePlan.vue
src/views/promotion/plan/effectivePlan.vue
+1
-0
没有找到文件。
src/api/promotion/display_schedule.js
浏览文件 @
4d35e539
...
...
@@ -167,4 +167,22 @@ export function downloadDisplayScheduleTable(params) {
params
,
responseType
:
'blob'
})
}
\ No newline at end of file
}
// 上传表格
export
function
uploadDisplayScheduleTable
(
data
)
{
return
request
({
url
:
'/operation/sales/import/upload'
,
method
:
'POST'
,
data
})
}
// 确定上传表格数据保存
export
function
confirmUploadDisplayScheduleTable
(
data
)
{
return
request
({
url
:
'/operation/sales/import/update'
,
method
:
'POST'
,
data
})
}
src/api/promotion/display_schedule_dashboard.js
浏览文件 @
4d35e539
...
...
@@ -12,4 +12,11 @@ export const getDisplayScheduleDashboardListArea = (params) => {
url
:
'/operation/sales/ap_report/query/store_cm'
,
params
})
}
// 查询,店内执行上报-看板(经销商)
export
const
getDisplayScheduleDashboardListStore
=
(
params
)
=>
{
return
request
({
url
:
'/operation/sales/ap_report/query/dist_cm'
,
params
})
}
\ No newline at end of file
src/assets/styles/element-ui.scss
浏览文件 @
4d35e539
...
...
@@ -48,7 +48,7 @@
// 重写 el-table 的 loading-mask 加载进度蒙层
.el-loading-mask
{
z-index
:
1
!
important
;
z-index
:
1
0000
!
important
;
}
// to fixed https://github.com/ElemeFE/element/issues/2461
...
...
src/utils/request.js
浏览文件 @
4d35e539
...
...
@@ -143,8 +143,41 @@ service.interceptors.response.use(async res => {
return
res
.
data
}
if
(
code
===
401
)
{
// ... existing 401 handling code ...
if
(
window
.
h5sdk
)
{
// 如果在飞书客户端,则无感知重新获取token
const
code
=
await
fsClientAuth
()
await
useUserStore
().
login
({
type
:
'fs'
,
data
:
{
code
}
})
// 重新发送本次失败的请求
return
service
(
res
.
config
)
}
// PC/移动端刷新 token 有效期
// await useUserStore().refreshTokenFn()
// return service(res.config)
ElMessageBox
.
confirm
(
'登录状态已过期,您可以继续留在该页面,或者重新登录'
,
'系统提示'
,
{
confirmButtonText
:
'重新登录'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
isRelogin
.
show
=
false
;
useUserStore
().
logOut
().
then
(()
=>
{
// location.href = '#/login';
router
.
push
({
path
:
'/login'
})
})
}).
catch
(()
=>
{
isRelogin
.
show
=
false
;
});
return
Promise
.
reject
(
'无效的会话,或者会话已过期,请重新登录。'
)
}
else
if
(
code
===
403
)
{
// 如果刷新 refreshToken 接口也报错了,证明需要重新登录
// ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
// isRelogin.show = false;
// useUserStore().logOut().then(() => {
// location.href = '#/login';
// })
// }).catch(() => {
// isRelogin.show = false;
// });
// return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
showErrorMessage
(
msg
,
'error'
)
return
Promise
.
reject
(
new
Error
(
msg
))
}
else
if
(
code
===
500
)
{
...
...
src/views/promotion/display_schedule/components/SearchList/index.vue
浏览文件 @
4d35e539
...
...
@@ -42,7 +42,7 @@
@
change=
"handleChange"
clearable
>
<el-option
label=
"全部"
value=
""
/>
value=
"
全部
"
/>
<el-option
label=
"未执行"
value=
"未执行"
/>
</el-select>
...
...
src/views/promotion/display_schedule/components/Table/index.vue
浏览文件 @
4d35e539
...
...
@@ -32,16 +32,20 @@
<el-tooltip
class=
"item"
effect=
"dark"
content=
"下载表格"
placement=
"top"
>
<el-button
@
click=
"downloadTable"
type=
"primary"
>
placement=
"top"
v-if=
"tabsType === '常规陈列'"
>
<el-button
@
click=
"downloadTable"
type=
"primary"
>
下载表格
</el-button>
</el-tooltip>
<el-tooltip
class=
"item"
effect=
"dark"
content=
"上传表格"
placement=
"top"
>
<el-button
@
click=
"openTableDialog"
type=
"success"
>
placement=
"top"
v-if=
"tabsType === '常规陈列'"
>
<el-button
@
click=
"uploadExcel"
type=
"success"
>
上传表格
</el-button>
</el-tooltip>
...
...
@@ -125,12 +129,54 @@
<div
ref=
"dialogTableContainer"
class=
"dialog-table-container"
></div>
</el-dialog>
<!-- 上传表格-确认弹窗 -->
<el-dialog
title=
"上传表格"
v-model=
"uploadPlanDialogVisible"
:close-on-click-modal=
"false"
:close-on-press-escape=
"false"
draggable
overflow
@
close=
"handleDialogCloseUpload"
>
<div>
<!-- 计划表格 -->
<el-table
:data=
"planTableList"
border
style=
"width: 100%"
show-overflow-tooltip
:row-class-name=
"tableRowClassName"
>
<el-table-column
prop=
"errorMsg"
label=
"错误信息"
width=
"450"
v-if=
"isHaveErrPlan"
/>
<el-table-column
v-for=
"item in fillModeColumns"
:key=
"item.label"
:prop=
"item.prop"
:label=
"item.label"
:width=
"item.width"
/>
</el-table>
</div>
<
template
#
footer
>
<div
class=
"dialog-footer"
>
<p
style=
"color: red; float: left;"
>
如果表格有红色行,请根据错误提示修改本地表格重新上传
</p>
<el-button
@
click=
"cancel"
>
取消上传
</el-button>
<el-button
type=
"primary"
:disabled=
"isHaveErrPlan"
@
click=
"confirmPlanBtn"
>
确定保存
</el-button>
</div>
</
template
>
</el-dialog>
</template>
<
script
setup
>
import
{
h
}
from
'vue'
import
userStore
from
'@/store/modules/user'
import
{
downloadDisplayScheduleTable
,
uploadDisplayScheduleTable
,
uploadFileToOSSAPI
,
confirmUploadDisplayScheduleTable
}
from
'@/api'
import
{
saveAs
}
from
'file-saver'
import
{
parseTime
}
from
'@/utils'
import
{
v4
as
uuidv4
}
from
'uuid'
const
props
=
defineProps
({
tableData
:
{
// 数据源
...
...
@@ -159,9 +205,15 @@ const props = defineProps({
formatter
:
{
// 格式化函数
type
:
Function
,
default
:
(
row
,
col
,
cellValue
)
=>
cellValue
},
tabsType
:
{
// 当前 tab 类型
type
:
String
,
default
:
'常规陈列'
// 默认常规陈列
}
})
const
emit
=
defineEmits
([
'getTableList'
,
'updateShowSearch'
,
'downloadTable'
])
const
emit
=
defineEmits
([
'getTableList'
,
'updateShowSearch'
])
const
{
proxy
}
=
getCurrentInstance
()
/*************** 工具栏 ***************/
const
showFill
=
userStore
().
hasQcMarketEmpInfo
// 是否启用填报模式
...
...
@@ -227,8 +279,101 @@ const getTableList = () => {
}
// 下载表格
const
downloadTable
=
()
=>
{
emit
(
'downloadTable'
)
const
typeObj
=
{
'常规陈列'
:
'NORMAL_DISPLAY_EXPORT'
,
'档期计划'
:
'PROMOTION_PLAN_EXPORT'
,
'档期陈列'
:
'PROMOTION_DISPLAY_EXPORT'
,
'零食陈列'
:
'SNACK_DISPLAY_EXPORT'
,
'三米两秒'
:
'THREE_METER_TWO_SECONDS_EXPORT'
,
'六小金刚'
:
'SIX_KINGkONG_EXPORT'
}
const
downloadTable
=
async
()
=>
{
proxy
.
$modal
.
loading
(
'正在下载表格,请稍候...'
)
const
res
=
await
downloadDisplayScheduleTable
({
...
props
.
params
,
salesMonth
:
parseTime
(
props
.
params
.
salesMonth
,
'{y}-{m}'
),
pageNum
:
null
,
pageSize
:
null
,
pageType
:
typeObj
[
props
.
tabsType
]
})
// 如果 salesMonth 为空,默认当前月
if
(
props
.
params
.
salesMonth
)
{
saveAs
(
res
,
`
${
props
.
tabsType
}
计划
${
parseTime
(
props
.
params
.
salesMonth
,
'{y}-{m}'
)}
.xlsx`
)
}
else
{
saveAs
(
res
,
`
${
props
.
tabsType
}
计划.xlsx`
)
}
// 下载完成后,执行回调函数
proxy
.
$modal
.
closeLoading
()
}
// 上传表格
const
uploadPlanDialogVisible
=
ref
(
false
)
const
planTableList
=
ref
([])
const
isHaveErrPlan
=
computed
(()
=>
{
return
planTableList
.
value
.
some
(
item
=>
item
.
errorMsg
)
})
const
nowUUID
=
ref
(
''
)
// 本次导入的 excel 标记(用于下次保存确定接口使用)
const
nowExcelUrl
=
ref
(
''
)
// 本次导入的 excel 地址
const
importTypeObj
=
{
'常规陈列'
:
'NORMAL_DISPLAY_IMPORT'
,
'档期计划'
:
'PROMOTION_PLAN_IMPORT'
,
'档期陈列'
:
'PROMOTION_DISPLAY_IMPORT'
,
'零食陈列'
:
'SNACK_DISPLAY_IMPORT'
,
'三米两秒'
:
'THREE_METER_TWO_SECONDS_IMPORT'
,
'六小金刚'
:
'SIX_KINGkONG_IMPORT'
}
const
uploadExcel
=
()
=>
{
proxy
.
$modal
.
loading
(
'正在上传表格,请稍候...'
)
proxy
.
chooseFile
({
accept
:
'.xls, .xlsx'
}).
then
(
async
file
=>
{
// 先上传阿里云
const
excelUrl
=
await
uploadFileToOSSAPI
(
`storeReport/
${
userStore
().
empInfo
.
empNo
}
/
${
uuidv4
()}
.
${
file
.
name
.
split
(
'.'
).
pop
()}
`
,
file
)
const
res
=
await
uploadDisplayScheduleTable
({
importApFilePath
:
excelUrl
,
importApType
:
importTypeObj
[
props
.
tabsType
]
})
nowExcelUrl
.
value
=
excelUrl
nowUUID
.
value
=
res
.
data
.
uuid
||
''
planTableList
.
value
=
res
.
data
.
table
||
[]
uploadPlanDialogVisible
.
value
=
true
}).
finally
(()
=>
{
proxy
.
$modal
.
closeLoading
()
})
}
const
tableRowClassName
=
({
row
})
=>
{
if
(
row
.
errorMsg
)
{
return
'error-row'
}
else
{
return
''
}
}
// 取消
const
cancel
=
()
=>
{
uploadPlanDialogVisible
.
value
=
false
proxy
.
$modal
.
closeLoading
()
}
// 确定上传
const
confirmPlanBtn
=
async
()
=>
{
const
res
=
await
confirmUploadDisplayScheduleTable
({
uuid
:
nowUUID
.
value
,
importApFilePath
:
nowExcelUrl
.
value
,
importApType
:
importTypeObj
[
props
.
tabsType
]
})
if
(
res
.
code
===
200
)
{
proxy
.
$modal
.
msgSuccess
(
'导入成功'
)
getTableList
()
uploadPlanDialogVisible
.
value
=
false
}
else
{
proxy
.
$modal
.
msgError
(
res
.
msg
||
'导入失败'
)
}
}
const
handleDialogCloseUpload
=
()
=>
{
uploadPlanDialogVisible
.
value
=
false
proxy
.
$modal
.
closeLoading
()
}
/************** 弹框控制 ***************/
...
...
@@ -476,6 +621,8 @@ const tableRowStyle = ({ row }) => {
}
}
/* 分页器 */
.pagination-container
{
margin
:
10px
;
...
...
@@ -483,6 +630,19 @@ const tableRowStyle = ({ row }) => {
}
// 上传表格确认框内表格的样式
.el-table
{
::v-deep
(
.error-row
)
{
--el-table-tr-bg-color
:
var
(
--
el-color-error-light-9
);
}
/* 灰色过期行颜色 */
::v-deep
(
.timeout-row
)
{
--el-table-tr-bg-color
:
var
(
--
el-timeout-row
);
}
}
</
style
>
<
style
lang=
"scss"
>
...
...
src/views/promotion/display_schedule/tabs/data.jsx
浏览文件 @
4d35e539
...
...
@@ -10,7 +10,7 @@ function splitAndFilter(str) {
}
// 每个表格里的数据列信息集合
// 常规陈列
export
const
getDisplayConfig
=
(
submitChange
Callback
)
=>
{
export
const
getDisplayConfig
=
(
submitChange
)
=>
{
return
[
// 一级类
{
...
...
@@ -354,7 +354,7 @@ export const getDisplayConfig = (submitChangeCallback) => {
row
[
col
.
referenceKey
]
?
<
el
-
select
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
Callback
(
row
,
col
);
submitChange
(
row
,
col
);
}
}
disabled=
{
disabled
}
class=
{
{
'no-disabled'
:
row
[
col
.
referenceKey
]
}
}
...
...
@@ -400,7 +400,7 @@ export const getDisplayConfig = (submitChangeCallback) => {
row
[
col
.
referenceKey
]
?
<
el
-
input
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
Callback
(
row
,
col
);
submitChange
(
row
,
col
);
}
}
min=
"0"
type=
"number"
...
...
@@ -485,7 +485,7 @@ export const getDisplayConfig = (submitChangeCallback) => {
{
row
[
col
.
referenceKey
]
?
<
el
-
select
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
Callback
(
row
,
col
);
submitChange
(
row
,
col
);
}
}
disabled=
{
disabled
}
class=
{
{
'no-disabled'
:
row
[
col
.
referenceKey
]
}
}
...
...
@@ -580,7 +580,7 @@ export const getDisplayConfig = (submitChangeCallback) => {
{
row
[
col
.
referenceKey
]
?
<
el
-
select
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
Callback
(
row
,
col
);
submitChange
(
row
,
col
);
}
}
disabled=
{
disabled
}
class=
{
{
'no-disabled'
:
row
[
col
.
referenceKey
]
}
}
...
...
@@ -632,7 +632,7 @@ export const getDisplayConfig = (submitChangeCallback) => {
{
row
[
col
.
referenceKey
]
?
<
el
-
select
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
Callback
(
row
,
col
);
submitChange
(
row
,
col
);
}
}
disabled=
{
!
row
.
actualFloorStackArea
||
disabled
}
class=
{
{
'no-disabled'
:
row
.
actualFloorStackArea
&&
row
[
col
.
referenceKey
]
}
}
...
...
@@ -736,7 +736,7 @@ export const getDisplayConfig = (submitChangeCallback) => {
{
row
[
col
.
referenceKey
]
?
<
el
-
select
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
Callback
(
row
,
col
);
submitChange
(
row
,
col
);
}
}
disabled=
{
disabled
}
class=
{
{
'no-disabled'
:
row
[
col
.
referenceKey
]
}
}
...
...
@@ -798,7 +798,7 @@ export const getDisplayConfig = (submitChangeCallback) => {
{
row
[
col
.
referenceKey
]
?
<
el
-
select
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
Callback
(
row
,
col
);
submitChange
(
row
,
col
);
}
}
disabled=
{
disabled
}
class=
{
{
'no-disabled'
:
row
[
col
.
referenceKey
]
}
}
...
...
@@ -902,6 +902,7 @@ export const getDisplayConfig = (submitChangeCallback) => {
fill
:
false
,
width
:
130
},
{
label
:
'修改人'
,
prop
:
'updateBy'
,
...
...
@@ -917,6 +918,31 @@ export const getDisplayConfig = (submitChangeCallback) => {
type
:
'string'
,
fill
:
false
,
width
:
100
},
{
label
:
'备注'
,
prop
:
'remark'
,
visible
:
true
,
type
:
'input'
,
fill
:
true
,
width
:
150
,
render
:
(
_
,
row
,
col
,
disabled
)
=>
{
return
(
<
div
>
{
<
el
-
input
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}
}
placeholder=
""
disabled=
{
disabled
}
clearable
>
</
el
-
input
>
}
</
div
>
)
},
}
],
visible
:
true
...
...
@@ -2123,6 +2149,31 @@ export const getSchedulePlanConfig = (submitChange) => {
type
:
'string'
,
fill
:
false
,
width
:
180
},
{
label
:
'备注'
,
prop
:
'remark'
,
visible
:
true
,
type
:
'input'
,
fill
:
true
,
width
:
150
,
render
:
(
_
,
row
,
col
,
disabled
)
=>
{
return
(
<
div
>
{
<
el
-
input
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}
}
placeholder=
""
disabled=
{
disabled
}
clearable
>
</
el
-
input
>
}
</
div
>
)
},
}
],
visible
:
true
...
...
@@ -2822,6 +2873,31 @@ export const getScheduleDisConfig = (submitChange) => {
type
:
'string'
,
fill
:
false
,
width
:
180
},
{
label
:
'备注'
,
prop
:
'remark'
,
visible
:
true
,
type
:
'input'
,
fill
:
true
,
width
:
150
,
render
:
(
_
,
row
,
col
,
disabled
)
=>
{
return
(
<
div
>
{
<
el
-
input
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}
}
placeholder=
""
disabled=
{
disabled
}
clearable
>
</
el
-
input
>
}
</
div
>
)
},
}
],
visible
:
true
...
...
@@ -3291,6 +3367,31 @@ export const getSnackCofing = (submitChange) => {
type
:
'string'
,
fill
:
false
,
width
:
180
},
{
label
:
'备注'
,
prop
:
'remark'
,
visible
:
true
,
type
:
'input'
,
fill
:
true
,
width
:
150
,
render
:
(
_
,
row
,
col
,
disabled
)
=>
{
return
(
<
div
>
{
<
el
-
input
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}
}
placeholder=
""
disabled=
{
disabled
}
clearable
>
</
el
-
input
>
}
</
div
>
)
},
}
],
prop
:
'snackColumns'
,
...
...
@@ -3565,6 +3666,31 @@ export const getThreeTwoSecondsConfig = (submitChange) => {
fill
:
true
,
width
:
200
},
{
label
:
'备注'
,
prop
:
'remark'
,
visible
:
true
,
type
:
'input'
,
fill
:
true
,
width
:
150
,
render
:
(
_
,
row
,
col
,
disabled
)
=>
{
return
(
<
div
>
{
<
el
-
input
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}
}
placeholder=
""
disabled=
{
disabled
}
clearable
>
</
el
-
input
>
}
</
div
>
)
},
}
],
prop
:
'sixtyGramHangBarColumns'
,
visible
:
true
...
...
@@ -3838,6 +3964,31 @@ export const getSixLittleDiamondsConfig = (submitChange) => {
formulaStr
:
'公式:(六小金刚批发挂网实际 = 六小金刚批发挂网计划)'
,
fill
:
true
,
width
:
210
},
{
label
:
'备注'
,
prop
:
'remark'
,
visible
:
true
,
type
:
'input'
,
fill
:
true
,
width
:
150
,
render
:
(
_
,
row
,
col
,
disabled
)
=>
{
return
(
<
div
>
{
<
el
-
input
modelValue=
{
row
[
col
.
prop
]
}
onUpdate
:
modelValue=
{
(
value
)
=>
{
row
[
col
.
prop
]
=
value
;
submitChange
(
row
,
col
);
}
}
placeholder=
""
disabled=
{
disabled
}
clearable
>
</
el
-
input
>
}
</
div
>
)
},
}
],
prop
:
'wholesaleNetColumns'
,
...
...
src/views/promotion/display_schedule/tabs/display.vue
浏览文件 @
4d35e539
...
...
@@ -8,19 +8,20 @@
:total=
"total"
:params=
"params"
:isLoading=
"isLoading"
tabsType=
"常规陈列"
@
getTableList=
"getTableList"
@
downloadTable=
"downloadTable"
@
updateShowSearch=
"v => showSearch.value = v"
/>
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
<
script
setup
lang=
"jsx"
>
import
CustomTable
from
'../components/Table'
import
SearchList
from
'../components/SearchList'
import
{
getDisplayList
,
submitDisplayPlan
,
downloadDisplayScheduleTable
}
from
'@/api'
import
{
getDisplayList
,
submitDisplayPlan
}
from
'@/api'
import
{
parseTime
}
from
'@/utils'
import
{
getDisplayConfig
}
from
'./data.jsx'
import
{
saveAs
}
from
'file-saver'
/*************** 表格操作相关 ***************/
...
...
@@ -83,6 +84,7 @@
isLoading
.
value
=
true
const
res
=
await
getDisplayList
({
...
params
.
value
,
rqStatus
:
params
.
value
.
rqStatus
===
'全部'
?
''
:
params
.
value
.
rqStatus
,
salesMonth
:
parseTime
(
params
.
value
.
salesMonth
,
'{y}-{m}'
)
})
res
.
data
.
rows
.
forEach
(
item
=>
{
...
...
@@ -114,16 +116,7 @@
/*************** 筛选 ***************/
const
showSearch
=
ref
(
true
)
/*************** 下载表格 ***************/
const
downloadTable
=
async
()
=>
{
console
.
log
(
params
.
value
,
'1'
)
const
res
=
await
downloadDisplayScheduleTable
({
...
params
.
value
,
salesMonth
:
parseTime
(
params
.
value
.
salesMonth
,
'{y}-{m}'
),
pageType
:
'NORMAL_DISPLAY_EXPORT'
})
saveAs
(
res
,
'陈列计划.xlsx'
)
}
</
script
>
<
style
lang=
"scss"
>
...
...
src/views/promotion/display_schedule/tabs/schedule.vue
浏览文件 @
4d35e539
...
...
@@ -11,6 +11,7 @@
:params=
"params"
:isLoading=
"isLoading"
:formatter=
"formatterFn"
tabsType=
"档期计划"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
<!-- 弹窗:实际与计划不一致,让用户补充实际内容 -->
...
...
@@ -103,6 +104,7 @@
isLoading
.
value
=
true
const
res
=
await
getDisplayScheduleList
({
...
params
.
value
,
rqStatus
:
params
.
value
.
rqStatus
===
'全部'
?
''
:
params
.
value
.
rqStatus
,
salesMonth
:
parseTime
(
params
.
value
.
salesMonth
,
'{y}-{m}'
)
})
// 处理日期格式
...
...
src/views/promotion/display_schedule/tabs/schedule_dis.vue
浏览文件 @
4d35e539
...
...
@@ -8,6 +8,7 @@
:total=
"total"
:params=
"params"
:isLoading=
"isLoading"
tabsType=
"档期陈列"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -75,6 +76,7 @@
isLoading
.
value
=
true
const
res
=
await
getDisplayScheduleDetail
({
...
params
.
value
,
rqStatus
:
params
.
value
.
rqStatus
===
'全部'
?
''
:
params
.
value
.
rqStatus
,
salesMonth
:
parseTime
(
params
.
value
.
salesMonth
,
'{y}-{m}'
)
})
res
.
data
.
rows
.
forEach
(
item
=>
{
...
...
src/views/promotion/display_schedule/tabs/six_little_diamonds.vue
浏览文件 @
4d35e539
...
...
@@ -8,6 +8,7 @@
:total=
"total"
:params=
"params"
:isLoading=
"isLoading"
tabsType=
"六小金刚"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -72,6 +73,7 @@
isLoading
.
value
=
true
getSixLittleDiamondsPlanList
({
...
params
.
value
,
rqStatus
:
params
.
value
.
rqStatus
===
'全部'
?
''
:
params
.
value
.
rqStatus
,
salesMonth
:
parseTime
(
params
.
value
.
salesMonth
,
'{y}-{m}'
)
}).
then
(
res
=>
{
isLoading
.
value
=
false
...
...
src/views/promotion/display_schedule/tabs/snack.vue
浏览文件 @
4d35e539
...
...
@@ -8,6 +8,7 @@
:total=
"total"
:params=
"params"
:isLoading=
"isLoading"
tabsType=
"零食陈列"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -107,6 +108,7 @@
isLoading
.
value
=
true
const
res
=
await
getSnackPlanList
({
...
params
.
value
,
rqStatus
:
params
.
value
.
rqStatus
===
'全部'
?
''
:
params
.
value
.
rqStatus
,
salesMonth
:
parseTime
(
params
.
value
.
salesMonth
,
'{y}-{m}'
)
})
res
.
data
.
rows
.
forEach
(
item
=>
{
...
...
src/views/promotion/display_schedule/tabs/three_two_seconds.vue
浏览文件 @
4d35e539
...
...
@@ -8,6 +8,7 @@
:total=
"total"
:params=
"params"
:isLoading=
"isLoading"
tabsType=
"三米两秒"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -27,8 +28,6 @@
/*************** 表格 ***************/
// 提交变更
const
submitChange
=
async
(
row
,
col
)
=>
{
let
requestObj
=
{}
if
(
col
.
requestKey
)
{
// 关联的公式计算列,需要特殊处理
...
...
@@ -73,6 +72,7 @@
isLoading
.
value
=
true
getThreeMetersTwoSecondsPlanList
({
...
params
.
value
,
rqStatus
:
params
.
value
.
rqStatus
===
'全部'
?
''
:
params
.
value
.
rqStatus
,
salesMonth
:
proxy
.
parseTime
(
params
.
value
.
salesMonth
,
'{y}-{m}'
)
}).
then
(
res
=>
{
isLoading
.
value
=
false
...
...
src/views/promotion/display_schedule_dashboard/components/Table/index.vue
浏览文件 @
4d35e539
...
...
@@ -3,12 +3,15 @@
<!-- 操作类型 -->
<el-row>
<el-form-item>
<el-radio-group
v-model=
"operation"
@
change=
"handleChange"
>
<el-radio-group
v-model=
"operation"
@
change=
"handleChange"
>
<el-radio-button
label=
"大区战区-分析"
value=
"大区战区-分析"
v-hasPermi=
"['promotion:dashboard:list-show']"
/>
<el-radio-button
label=
"城市经理-分析"
value=
"城市经理-分析"
/>
<el-radio-button
label=
"经销商-分析"
value=
"经销商-分析"
/>
</el-radio-group>
</el-form-item>
</el-row>
...
...
@@ -66,7 +69,11 @@ const props = defineProps({
formatter
:
{
// 格式化函数
type
:
Function
,
default
:
(
row
,
col
,
cellValue
)
=>
cellValue
}
},
queryParams
:
{
// 查询参数
type
:
Object
,
default
:
()
=>
({})
},
})
const
emit
=
defineEmits
([
'getTableList'
])
...
...
@@ -98,25 +105,58 @@ onMounted(() => {
// 初始化列选择的函数
const
initColumns
=
()
=>
{
if
(
operation
.
value
===
'大区战区-分析'
)
{
chooseColumns
.
value
=
props
.
baseColumns
.
filter
(
item
=>
item
.
prop
!==
'cityManager'
)
chooseColumns
.
value
=
[{
label
:
"大区"
,
prop
:
"regionName"
,
childCol
:
[],
},
{
label
:
"战区"
,
prop
:
"districtName"
,
childCol
:
[],
}].
concat
(
props
.
baseColumns
)
}
else
if
(
operation
.
value
===
'经销商-分析'
)
{
chooseColumns
.
value
=
[{
label
:
'经销商'
,
prop
:
"dealerName"
,
childCol
:
[],
width
:
220
},
{
label
:
'经销商编码'
,
prop
:
"dealerCode"
,
childCol
:
[],
}].
concat
(
props
.
baseColumns
)
}
else
{
chooseColumns
.
value
=
props
.
baseColumns
chooseColumns
.
value
=
[{
label
:
"大区"
,
prop
:
"regionName"
,
childCol
:
[],
},
{
label
:
"战区"
,
prop
:
"districtName"
,
childCol
:
[],
},
{
label
:
"城市经理"
,
prop
:
"cityManager"
,
childCol
:
[],
}].
concat
(
props
.
baseColumns
)
}
}
watch
(
operation
,
(
newVal
)
=>
{
watch
(
operation
,
()
=>
{
// 如果是大区战区-分析,则隐藏城市经理列
if
(
newVal
===
'大区战区-分析'
)
{
chooseColumns
.
value
=
props
.
baseColumns
.
filter
(
item
=>
item
.
prop
!==
'cityManager'
)
}
else
{
chooseColumns
.
value
=
props
.
baseColumns
}
initColumns
()
},
{
immediate
:
true
})
// 切换操作类型时触发的函数
const
handleChange
=
(
newVal
)
=>
{
console
.
log
(
'table'
,
newVal
)
props
.
queryParams
.
operation
=
newVal
emit
(
'getTableList'
,
newVal
)
}
...
...
src/views/promotion/display_schedule_dashboard/tabs/data.jsx
浏览文件 @
4d35e539
...
...
@@ -9,21 +9,6 @@ export const getDisplayConfig = () => {
// width: 100,
// childCol: []
// },
{
label
:
"大区"
,
prop
:
"regionName"
,
childCol
:
[]
},
{
label
:
"战区"
,
prop
:
"districtName"
,
childCol
:
[]
},
{
label
:
"城市经理"
,
prop
:
"cityManager"
,
childCol
:
[]
},
{
label
:
'主货架'
,
prop
:
"mainShelf"
,
...
...
@@ -125,21 +110,6 @@ export const getSchedulePlanConfig = (submitChange) => {
// prop: "salesMonth",
// width: 100
// },
{
label
:
"大区"
,
prop
:
"regionName"
,
width
:
100
},
{
label
:
"战区"
,
prop
:
"districtName"
,
width
:
100
},
{
label
:
"城市经理"
,
prop
:
"cityManager"
,
width
:
100
},
{
label
:
'大区反馈'
,
prop
:
"regionFeedback"
,
...
...
@@ -229,21 +199,7 @@ export const getScheduleDisConfig = (submitChange) => {
// prop: "salesMonth",
// width: 100
// },
{
label
:
"大区"
,
prop
:
"regionName"
,
width
:
100
},
{
label
:
"战区"
,
prop
:
"districtName"
,
width
:
100
},
{
label
:
"城市经理"
,
prop
:
"cityManager"
,
width
:
100
},
{
label
:
'端架'
,
prop
:
"endShelf"
,
...
...
@@ -309,21 +265,7 @@ export const getSnackCofing = (submitChange) => {
// prop: "salesMonth",
// width: 100
// },
{
label
:
"大区"
,
prop
:
"regionName"
,
width
:
100
},
{
label
:
"战区"
,
prop
:
"districtName"
,
width
:
100
},
{
label
:
"城市经理"
,
prop
:
"cityManager"
,
width
:
100
},
{
label
:
'计划'
,
prop
:
"planSnackStoreCnt"
,
...
...
@@ -347,21 +289,7 @@ export const getThreeTwoSecondsConfig = (submitChange) => {
// prop: "salesMonth",
// width: 100
// },
{
label
:
"大区"
,
prop
:
"regionName"
,
width
:
100
},
{
label
:
"战区"
,
prop
:
"districtName"
,
width
:
100
},
{
label
:
"城市经理"
,
prop
:
"cityManager"
,
width
:
100
},
{
label
:
'计划'
,
prop
:
"planSLStoreCnt"
,
...
...
@@ -385,21 +313,7 @@ export const getSixLittleDiamondsConfig = (submitChange) => {
// prop: "salesMonth",
// width: 100
// },
{
label
:
"大区"
,
prop
:
"regionName"
,
width
:
100
},
{
label
:
"战区"
,
prop
:
"districtName"
,
width
:
100
},
{
label
:
"城市经理"
,
prop
:
"cityManager"
,
width
:
100
},
{
label
:
'计划'
,
prop
:
"planSixJdStoreCnt"
,
...
...
src/views/promotion/display_schedule_dashboard/tabs/display.vue
浏览文件 @
4d35e539
...
...
@@ -14,6 +14,7 @@
<CustomTable
:tableData=
"tableData"
:baseColumns=
"baseColumns"
:isLoading=
"isLoading"
:queryParams=
"queryParams"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -21,7 +22,7 @@
<
script
setup
lang=
"jsx"
>
import
CustomTable
from
'../components/Table'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
}
from
'@/api'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
,
getDisplayScheduleDashboardListStore
}
from
'@/api'
import
{
getDisplayConfig
}
from
'./data.jsx'
import
{
parseTime
}
from
'@/utils'
...
...
@@ -35,32 +36,45 @@
// 表格数据
const
queryParams
=
reactive
({
salesMonth
:
new
Date
(),
operation
:
''
})
const
tableData
=
ref
([])
const
isLoading
=
ref
(
true
)
const
total
=
ref
(
0
)
// 筛选列表数据
const
getTableList
=
async
(
operation
)
=>
{
const
apiObj
=
{
'大区战区-分析'
:
getDisplayScheduleDashboardList
,
'城市经理-分析'
:
getDisplayScheduleDashboardListArea
,
'经销商-分析'
:
getDisplayScheduleDashboardListStore
,
}
const
getTableList
=
async
()
=>
{
isLoading
.
value
=
true
const
res
=
await
(
operation
===
'大区战区-分析'
?
getDisplayScheduleDashboardList
:
getDisplayScheduleDashboardListArea
)
({
const
res
=
await
apiObj
[
queryParams
.
operation
]
({
...
queryParams
,
salesMonth
:
parseTime
(
queryParams
.
salesMonth
,
'{y}-{m}'
)
})
if
(
operation
===
'大区战区-分析'
)
{
if
(
queryParams
.
operation
===
'大区战区-分析'
)
{
// 合并战区大区结构为扁平化
const
{
zq
,
dq
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
]
const
{
zq
,
dq
,
hz
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
,
...
hz
]
}
else
if
(
queryParams
.
operation
===
'经销商-分析'
)
{
// 合并经销商结构为扁平化
const
{
dist
,
hz
}
=
res
.
data
tableData
.
value
=
[...
dist
,
...
hz
]
}
else
{
// 合并城市经理结构为扁平化
tableData
.
value
=
res
.
data
}
isLoading
.
value
=
false
}
const
{
proxy
}
=
getCurrentInstance
()
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
getTableList
(
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
)
onMounted
(()
=>
{
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
queryParams
.
operation
=
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
getTableList
()
})
</
script
>
<
style
lang=
"scss"
>
...
...
src/views/promotion/display_schedule_dashboard/tabs/schedule.vue
浏览文件 @
4d35e539
...
...
@@ -15,6 +15,7 @@
<CustomTable
:tableData=
"tableData"
:baseColumns=
"baseColumns"
:isLoading=
"isLoading"
:queryParams=
"queryParams"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -22,7 +23,7 @@
<
script
setup
lang=
"jsx"
>
import
CustomTable
from
'../components/Table'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
}
from
'@/api'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
,
getDisplayScheduleDashboardListStore
}
from
'@/api'
import
{
parseTime
}
from
'@/utils'
import
{
getSchedulePlanConfig
}
from
'./data.jsx'
...
...
@@ -68,29 +69,42 @@
// 表格数据
const
queryParams
=
reactive
({
salesMonth
:
new
Date
(),
operation
:
''
})
const
tableData
=
ref
([])
const
isLoading
=
ref
(
true
)
const
total
=
ref
(
0
)
// 筛选列表数据
const
getTableList
=
async
(
operation
)
=>
{
const
apiObj
=
{
'大区战区-分析'
:
getDisplayScheduleDashboardList
,
'城市经理-分析'
:
getDisplayScheduleDashboardListArea
,
'经销商-分析'
:
getDisplayScheduleDashboardListStore
,
}
const
getTableList
=
async
()
=>
{
isLoading
.
value
=
true
const
res
=
await
(
operation
===
'大区战区-分析'
?
getDisplayScheduleDashboardList
:
getDisplayScheduleDashboardListArea
)
({
const
res
=
await
apiObj
[
queryParams
.
operation
]
({
...
queryParams
,
salesMonth
:
parseTime
(
queryParams
.
salesMonth
,
'{y}-{m}'
)
})
if
(
operation
===
'大区战区-分析'
)
{
if
(
queryParams
.
operation
===
'大区战区-分析'
)
{
// 合并战区大区结构为扁平化
const
{
zq
,
dq
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
]
const
{
zq
,
dq
,
hz
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
,
...
hz
]
}
else
if
(
queryParams
.
operation
===
'经销商-分析'
)
{
// 合并经销商结构为扁平化
const
{
dist
,
hz
}
=
res
.
data
tableData
.
value
=
[...
dist
,
...
hz
]
}
else
{
// 合并城市经理结构为扁平化
tableData
.
value
=
res
.
data
}
isLoading
.
value
=
false
}
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
getTableList
(
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
)
onMounted
(()
=>
{
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
queryParams
.
operation
=
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
getTableList
()
})
</
script
>
src/views/promotion/display_schedule_dashboard/tabs/schedule_dis.vue
浏览文件 @
4d35e539
...
...
@@ -14,6 +14,7 @@
<CustomTable
:tableData=
"tableData"
:baseColumns=
"baseColumns"
:isLoading=
"isLoading"
:queryParams=
"queryParams"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -21,7 +22,7 @@
<
script
setup
lang=
"jsx"
>
import
CustomTable
from
'../components/Table'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
}
from
'@/api'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
,
getDisplayScheduleDashboardListStore
}
from
'@/api'
import
{
parseTime
}
from
'@/utils'
import
{
getScheduleDisConfig
}
from
'./data'
...
...
@@ -64,30 +65,44 @@
// 表格数据
const
queryParams
=
reactive
({
salesMonth
:
new
Date
(),
operation
:
''
})
const
tableData
=
ref
([])
const
isLoading
=
ref
(
true
)
const
total
=
ref
(
0
)
// 筛选列表数据
const
getTableList
=
async
(
operation
)
=>
{
const
apiObj
=
{
'大区战区-分析'
:
getDisplayScheduleDashboardList
,
'城市经理-分析'
:
getDisplayScheduleDashboardListArea
,
'经销商-分析'
:
getDisplayScheduleDashboardListStore
,
}
const
getTableList
=
async
()
=>
{
console
.
log
(
'走了吗?'
)
isLoading
.
value
=
true
const
res
=
await
(
operation
===
'大区战区-分析'
?
getDisplayScheduleDashboardList
:
getDisplayScheduleDashboardListArea
)
({
const
res
=
await
apiObj
[
queryParams
.
operation
]
({
...
queryParams
,
salesMonth
:
parseTime
(
queryParams
.
salesMonth
,
'{y}-{m}'
)
})
if
(
operation
===
'大区战区-分析'
)
{
if
(
queryParams
.
operation
===
'大区战区-分析'
)
{
// 合并战区大区结构为扁平化
const
{
zq
,
dq
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
]
const
{
zq
,
dq
,
hz
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
,
...
hz
]
}
else
if
(
queryParams
.
operation
===
'经销商-分析'
)
{
// 合并经销商结构为扁平化
const
{
dist
,
hz
}
=
res
.
data
tableData
.
value
=
[...
dist
,
...
hz
]
}
else
{
// 合并城市经理结构为扁平化
tableData
.
value
=
res
.
data
}
isLoading
.
value
=
false
}
const
{
proxy
}
=
getCurrentInstance
()
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
getTableList
(
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
)
onMounted
(()
=>
{
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
queryParams
.
operation
=
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
getTableList
()
})
</
script
>
\ No newline at end of file
src/views/promotion/display_schedule_dashboard/tabs/six_little_diamonds.vue
浏览文件 @
4d35e539
...
...
@@ -14,6 +14,7 @@
<CustomTable
:tableData=
"tableData"
:baseColumns=
"baseColumns"
:isLoading=
"isLoading"
:queryParams=
"queryParams"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -21,7 +22,7 @@
<
script
setup
lang=
"jsx"
>
import
CustomTable
from
'../components/Table'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
}
from
'@/api'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
,
getDisplayScheduleDashboardListStore
}
from
'@/api'
import
{
getSixLittleDiamondsConfig
}
from
'./data.jsx'
import
{
parseTime
}
from
'@/utils'
...
...
@@ -64,30 +65,43 @@
// 表格数据
const
queryParams
=
reactive
({
salesMonth
:
new
Date
(),
operation
:
''
})
const
tableData
=
ref
([])
const
isLoading
=
ref
(
true
)
const
total
=
ref
(
0
)
// 筛选列表数据
const
getTableList
=
async
(
operation
)
=>
{
const
apiObj
=
{
'大区战区-分析'
:
getDisplayScheduleDashboardList
,
'城市经理-分析'
:
getDisplayScheduleDashboardListArea
,
'经销商-分析'
:
getDisplayScheduleDashboardListStore
,
}
const
getTableList
=
async
()
=>
{
isLoading
.
value
=
true
const
res
=
await
(
operation
===
'大区战区-分析'
?
getDisplayScheduleDashboardList
:
getDisplayScheduleDashboardListArea
)
({
const
res
=
await
apiObj
[
queryParams
.
operation
]
({
...
queryParams
,
salesMonth
:
parseTime
(
queryParams
.
salesMonth
,
'{y}-{m}'
)
})
if
(
operation
===
'大区战区-分析'
)
{
if
(
queryParams
.
operation
===
'大区战区-分析'
)
{
// 合并战区大区结构为扁平化
const
{
zq
,
dq
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
]
const
{
zq
,
dq
,
hz
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
,
...
hz
]
}
else
if
(
queryParams
.
operation
===
'经销商-分析'
)
{
// 合并经销商结构为扁平化
const
{
dist
,
hz
}
=
res
.
data
tableData
.
value
=
[...
dist
,
...
hz
]
}
else
{
// 合并城市经理结构为扁平化
tableData
.
value
=
res
.
data
}
isLoading
.
value
=
false
}
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
getTableList
(
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
)
onMounted
(()
=>
{
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
queryParams
.
operation
=
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
getTableList
()
})
</
script
>
<
style
scoped
></
style
>
\ No newline at end of file
src/views/promotion/display_schedule_dashboard/tabs/snack.vue
浏览文件 @
4d35e539
...
...
@@ -14,6 +14,7 @@
<CustomTable
:tableData=
"tableData"
:baseColumns=
"baseColumns"
:isLoading=
"isLoading"
:queryParams=
"queryParams"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -21,7 +22,7 @@
<
script
setup
lang=
"jsx"
>
import
CustomTable
from
'../components/Table'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
}
from
'@/api'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
,
getDisplayScheduleDashboardListStore
}
from
'@/api'
import
{
parseTime
}
from
'@/utils'
import
{
getSnackCofing
}
from
'./data.jsx'
;
...
...
@@ -60,31 +61,44 @@
// 表格数据
const
queryParams
=
reactive
({
salesMonth
:
new
Date
(),
operation
:
''
})
const
tableData
=
ref
([])
const
isLoading
=
ref
(
true
)
const
total
=
ref
(
0
)
// 筛选列表数据
const
getTableList
=
async
(
operation
)
=>
{
const
apiObj
=
{
'大区战区-分析'
:
getDisplayScheduleDashboardList
,
'城市经理-分析'
:
getDisplayScheduleDashboardListArea
,
'经销商-分析'
:
getDisplayScheduleDashboardListStore
,
}
const
getTableList
=
async
()
=>
{
isLoading
.
value
=
true
const
res
=
await
(
operation
===
'大区战区-分析'
?
getDisplayScheduleDashboardList
:
getDisplayScheduleDashboardListArea
)
({
const
res
=
await
apiObj
[
queryParams
.
operation
]
({
...
queryParams
,
salesMonth
:
parseTime
(
queryParams
.
salesMonth
,
'{y}-{m}'
)
})
if
(
operation
===
'大区战区-分析'
)
{
if
(
queryParams
.
operation
===
'大区战区-分析'
)
{
// 合并战区大区结构为扁平化
const
{
zq
,
dq
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
]
const
{
zq
,
dq
,
hz
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
,
...
hz
]
}
else
if
(
queryParams
.
operation
===
'经销商-分析'
)
{
// 合并经销商结构为扁平化
const
{
dist
,
hz
}
=
res
.
data
tableData
.
value
=
[...
dist
,
...
hz
]
}
else
{
// 合并城市经理结构为扁平化
tableData
.
value
=
res
.
data
}
isLoading
.
value
=
false
}
const
{
proxy
}
=
getCurrentInstance
()
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
getTableList
(
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
)
onMounted
(()
=>
{
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
queryParams
.
operation
=
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
getTableList
()
})
</
script
>
<
style
scoped
...
...
src/views/promotion/display_schedule_dashboard/tabs/three_two_seconds.vue
浏览文件 @
4d35e539
...
...
@@ -14,6 +14,7 @@
<CustomTable
:tableData=
"tableData"
:baseColumns=
"baseColumns"
:isLoading=
"isLoading"
:queryParams=
"queryParams"
@
getTableList=
"getTableList"
@
updateShowSearch=
"v => showSearch.value = v"
/>
</
template
>
...
...
@@ -21,7 +22,7 @@
<
script
setup
lang=
"jsx"
>
import
CustomTable
from
'../components/Table'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
}
from
'@/api'
import
{
getDisplayScheduleDashboardList
,
getDisplayScheduleDashboardListArea
,
getDisplayScheduleDashboardListStore
}
from
'@/api'
import
{
getThreeTwoSecondsConfig
}
from
'./data.jsx'
import
{
parseTime
}
from
'@/utils'
...
...
@@ -66,30 +67,43 @@
// 表格数据
const
queryParams
=
reactive
({
salesMonth
:
new
Date
(),
operation
:
''
})
const
tableData
=
ref
([])
const
isLoading
=
ref
(
true
)
const
total
=
ref
(
0
)
// 筛选列表数据
const
getTableList
=
async
(
operation
)
=>
{
const
apiObj
=
{
'大区战区-分析'
:
getDisplayScheduleDashboardList
,
'城市经理-分析'
:
getDisplayScheduleDashboardListArea
,
'经销商-分析'
:
getDisplayScheduleDashboardListStore
,
}
const
getTableList
=
async
()
=>
{
isLoading
.
value
=
true
const
res
=
await
(
operation
===
'大区战区-分析'
?
getDisplayScheduleDashboardList
:
getDisplayScheduleDashboardListArea
)
({
const
res
=
await
apiObj
[
queryParams
.
operation
]
({
...
queryParams
,
salesMonth
:
parseTime
(
queryParams
.
salesMonth
,
'{y}-{m}'
)
})
if
(
operation
===
'大区战区-分析'
)
{
if
(
queryParams
.
operation
===
'大区战区-分析'
)
{
// 合并战区大区结构为扁平化
const
{
zq
,
dq
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
]
const
{
zq
,
dq
,
hz
}
=
res
.
data
tableData
.
value
=
[...
zq
,
...
dq
,
...
hz
]
}
else
if
(
queryParams
.
operation
===
'经销商-分析'
)
{
// 合并经销商结构为扁平化
const
{
dist
,
hz
}
=
res
.
data
tableData
.
value
=
[...
dist
,
...
hz
]
}
else
{
// 合并城市经理结构为扁平化
tableData
.
value
=
res
.
data
}
isLoading
.
value
=
false
}
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
getTableList
(
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
)
onMounted
(()
=>
{
const
isDaQuZQ
=
proxy
.
checkPermi
([
'promotion:dashboard:list-show'
])
queryParams
.
operation
=
isDaQuZQ
?
'大区战区-分析'
:
'城市经理-分析'
getTableList
()
})
</
script
>
...
...
src/views/promotion/plan/effectivePlan.vue
浏览文件 @
4d35e539
...
...
@@ -424,6 +424,7 @@ const uploadPlanFile = async (file) => { // 上传计划表格
"excelUrl"
:
excelUrl
,
"employeeNo"
:
empInfo
.
empNo
})
console
.
log
(
res
)
planTableList
.
value
=
res
.
data
.
table
isHaveErrPlan
.
value
=
!!
res
.
data
.
table
[
0
].
errorMsg
confirmExcelUUID
.
value
=
res
.
data
.
uuid
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论