Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
0a2b5f86
提交
0a2b5f86
authored
9月 04, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
feat(inspectiontask): 新增:勤策移动端_售点稽查_陈列分组支持删除操作
上级
528b218c
隐藏空白字符变更
内嵌
并排
正在显示
8 个修改的文件
包含
236 行增加
和
65 行删除
+236
-65
sales_point_inspection.js
src/api/mobile/audit_activity/sales_point_inspection.js
+10
-0
index.vue
...y/sales_point_inspection/examine/inspectionTask/index.vue
+4
-0
conventionalDisplay.vue
...ction/examine/inspectionTask/tabs/conventionalDisplay.vue
+35
-2
scheduleAdjustment.vue
...ection/examine/inspectionTask/tabs/scheduleAdjustment.vue
+34
-2
scheduleDisplay.vue
...nspection/examine/inspectionTask/tabs/scheduleDisplay.vue
+34
-2
newTerminal.vue
...t_activity/sales_point_inspection/examine/newTerminal.vue
+56
-49
taskList.vue
...udit_activity/sales_point_inspection/examine/taskList.vue
+57
-4
index.js
src/views/mobile/router/index.js
+6
-6
没有找到文件。
src/api/mobile/audit_activity/sales_point_inspection.js
浏览文件 @
0a2b5f86
...
...
@@ -41,3 +41,12 @@ export function getInspectionTaskListAPI(params) {
params
})
}
// 售点稽查-删除 tab 里面子任务中的小分组
export
function
deleteInspectionTaskAPI
(
params
)
{
return
request
({
url
:
'/operation/risk/core/d_store_detail'
,
method
:
'DELETE'
,
params
})
}
\ No newline at end of file
src/views/mobile/pages/audit_activity/sales_point_inspection/examine/inspectionTask/index.vue
浏览文件 @
0a2b5f86
...
...
@@ -165,6 +165,10 @@ import { showImagePreview } from 'vant';
import
useUserStore
from
'@/store/modules/user'
import
{
v4
as
uuidv4
}
from
'uuid'
;
defineOptions
({
name
:
'inspectionTask'
,
})
const
router
=
useRouter
()
const
route
=
useRoute
()
...
...
src/views/mobile/pages/audit_activity/sales_point_inspection/examine/inspectionTask/tabs/conventionalDisplay.vue
浏览文件 @
0a2b5f86
...
...
@@ -3,7 +3,12 @@
<!-- 常规陈列 -->
<div
class=
"item"
v-for=
"(obj, index) in displayGroup"
>
<p
class=
"title"
>
常规陈列
{{
index
+
1
}}
:
</p>
<p
class=
"title"
>
<span>
常规陈列
{{
index
+
1
}}
:
</span>
<van-icon
name=
"delete"
size=
"0.45rem"
@
click=
"deleteItem(obj, index)"
/>
</p>
<van-cell-group
inset
>
<van-field
v-model=
"obj.modal"
name=
"modal"
...
...
@@ -72,7 +77,7 @@
</template>
<
script
setup
>
import
{
uploadFileToOSSAPI
,
createInspectionTaskAPI
,
createInspectionTaskDetailAPI
}
from
'@/api'
import
{
uploadFileToOSSAPI
,
createInspectionTaskAPI
,
createInspectionTaskDetailAPI
,
deleteInspectionTaskAPI
}
from
'@/api'
import
useUserStore
from
'@/store/modules/user'
import
{
v4
as
uuidv4
}
from
'uuid'
...
...
@@ -126,6 +131,30 @@ const init = () => {
createTask
()
}
}
// 删除分组
const
isDeleteNow
=
ref
(
false
)
const
deleteItem
=
async
(
obj
,
index
)
=>
{
// 确认询问框
showConfirmDialog
({
title
:
'删除提示'
,
message
:
'确定删除吗?'
,
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
async
()
=>
{
isDeleteNow
.
value
=
true
await
deleteInspectionTaskAPI
({
rstdId
:
obj
.
rstdId
})
displayGroup
.
value
.
splice
(
index
,
1
)
nextTick
(()
=>
{
isDeleteNow
.
value
=
false
})
showNotify
({
type
:
'success'
,
message
:
'删除成功'
})
})
}
/*************** 基本信息 ***************/
// 形式修改
const
handleModalityChange
=
async
(
index
)
=>
{
...
...
@@ -186,6 +215,7 @@ const deletedisplayPhotos = async (file, { name, index }) => {
}
// 核查结果
const
handleVerifyChange
=
async
(
index
)
=>
{
if
(
isDeleteNow
.
value
)
return
const
target
=
displayGroup
.
value
[
index
]
await
createInspectionTaskDetailAPI
({
taskDetail
:
{
...
...
@@ -224,6 +254,9 @@ defineExpose({
margin
:
0
;
font-weight
:
900
;
color
:
var
(
--
main-color
);
display
:
flex
;
justify-content
:
space-between
;
}
/* 每个分组 */
...
...
src/views/mobile/pages/audit_activity/sales_point_inspection/examine/inspectionTask/tabs/scheduleAdjustment.vue
浏览文件 @
0a2b5f86
...
...
@@ -3,7 +3,12 @@
<!-- 档期补差 -->
<div
class=
"item"
v-for=
"(obj, index) in displayGroup"
>
<p
class=
"title"
>
档期补差
{{
index
+
1
}}
:
</p>
<p
class=
"title"
>
<span>
档期补差
{{
index
+
1
}}
:
</span>
<van-icon
name=
"delete"
size=
"0.45rem"
@
click=
"deleteItem(obj, index)"
/>
</p>
<van-cell-group
inset
>
<van-field
v-model=
"obj.modal"
name=
"modal"
...
...
@@ -71,7 +76,7 @@
<
script
setup
>
import
{
uploadFileToOSSAPI
,
createInspectionTaskAPI
,
createInspectionTaskDetailAPI
}
from
'@/api'
import
{
uploadFileToOSSAPI
,
createInspectionTaskAPI
,
createInspectionTaskDetailAPI
,
deleteInspectionTaskAPI
}
from
'@/api'
import
useUserStore
from
'@/store/modules/user'
import
{
v4
as
uuidv4
}
from
'uuid'
...
...
@@ -125,6 +130,29 @@ const init = () => {
createTask
()
}
}
// 删除分组
const
isDeleteNow
=
ref
(
false
)
const
deleteItem
=
async
(
obj
,
index
)
=>
{
// 确认询问框
showConfirmDialog
({
title
:
'删除提示'
,
message
:
'确定删除吗?'
,
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
async
()
=>
{
isDeleteNow
.
value
=
true
await
deleteInspectionTaskAPI
({
rstdId
:
obj
.
rstdId
})
displayGroup
.
value
.
splice
(
index
,
1
)
nextTick
(()
=>
{
isDeleteNow
.
value
=
false
})
showNotify
({
type
:
'success'
,
message
:
'删除成功'
})
})
}
/*************** 基本信息 ***************/
// 形式修改
const
handleModalityChange
=
async
(
index
)
=>
{
...
...
@@ -185,6 +213,7 @@ const deletedisplayPhotos = async (file, { name, index }) => {
}
// 核查结果
const
handleVerifyChange
=
async
(
index
)
=>
{
if
(
isDeleteNow
.
value
)
return
const
target
=
displayGroup
.
value
[
index
]
await
createInspectionTaskDetailAPI
({
taskDetail
:
{
...
...
@@ -213,6 +242,9 @@ defineExpose({
margin
:
0
;
font-weight
:
900
;
color
:
var
(
--
main-color
);
display
:
flex
;
justify-content
:
space-between
;
}
/* 每个分组 */
...
...
src/views/mobile/pages/audit_activity/sales_point_inspection/examine/inspectionTask/tabs/scheduleDisplay.vue
浏览文件 @
0a2b5f86
...
...
@@ -3,7 +3,12 @@
<!-- 档期陈列 -->
<div
class=
"item"
v-for=
"(obj, index) in displayGroup"
>
<p
class=
"title"
>
档期陈列
{{
index
+
1
}}
:
</p>
<p
class=
"title"
>
<span>
档期陈列
{{
index
+
1
}}
:
</span>
<van-icon
name=
"delete"
size=
"0.45rem"
@
click=
"deleteItem(obj, index)"
/>
</p>
<van-cell-group
inset
>
<van-field
v-model=
"obj.modal"
name=
"modal"
...
...
@@ -71,7 +76,7 @@
</template>
<
script
setup
>
import
{
uploadFileToOSSAPI
,
createInspectionTaskAPI
,
createInspectionTaskDetailAPI
}
from
'@/api'
import
{
uploadFileToOSSAPI
,
createInspectionTaskAPI
,
createInspectionTaskDetailAPI
,
deleteInspectionTaskAPI
}
from
'@/api'
import
useUserStore
from
'@/store/modules/user'
import
{
v4
as
uuidv4
}
from
'uuid'
...
...
@@ -125,6 +130,29 @@ const init = () => {
createTask
()
}
}
// 删除分组
const
isDeleteNow
=
ref
(
false
)
const
deleteItem
=
async
(
obj
,
index
)
=>
{
// 确认询问框
showConfirmDialog
({
title
:
'删除提示'
,
message
:
'确定删除吗?'
,
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(
async
()
=>
{
isDeleteNow
.
value
=
true
await
deleteInspectionTaskAPI
({
rstdId
:
obj
.
rstdId
})
displayGroup
.
value
.
splice
(
index
,
1
)
nextTick
(()
=>
{
isDeleteNow
.
value
=
false
})
showNotify
({
type
:
'success'
,
message
:
'删除成功'
})
})
}
/*************** 基本信息 ***************/
// 形式修改
const
handleModalityChange
=
async
(
index
)
=>
{
...
...
@@ -185,6 +213,7 @@ const deletedisplayPhotos = async (file, { name, index }) => {
}
// 核查结果
const
handleVerifyChange
=
async
(
index
)
=>
{
if
(
isDeleteNow
.
value
)
return
const
target
=
displayGroup
.
value
[
index
]
await
createInspectionTaskDetailAPI
({
taskDetail
:
{
...
...
@@ -223,6 +252,9 @@ defineExpose({
margin
:
0
;
font-weight
:
900
;
color
:
var
(
--
main-color
);
display
:
flex
;
justify-content
:
space-between
;
}
/* 每个分组 */
...
...
src/views/mobile/pages/audit_activity/sales_point_inspection/examine/newTerminal.vue
浏览文件 @
0a2b5f86
...
...
@@ -6,46 +6,48 @@
<div
class=
"terminal-info-container"
>
<p
class=
"title"
>
录入终端信息
</p>
<div
class=
"content"
>
<!-- 终端名称输入 -->
<van-field
v-model=
"form.storeName"
label=
"终端名称:"
label-align=
"top"
placeholder=
"请输入"
class=
"input-field"
/>
<!-- 门头照上传 -->
<div
class=
"header-photo-section"
>
<van-field
label=
"门头照"
label-align=
"top"
>
<template
#
input
>
<van-uploader
:max-count=
"1"
accept=
"image/*"
capture=
"camera"
:model-value=
"form.storePicture"
:after-read=
"posPhotosRead"
preview-size=
"78"
@
delete=
"deletePosPhotos"
>
</van-uploader>
</
template
>
</van-field>
</div>
<!-- 门店类型选择 -->
<van-field
:model-value=
"form.selectedType.join('')"
readonly
label=
"门店类型"
label-align=
"top"
placeholder=
"请选择"
@
click=
"showTypePopup = true"
/>
<van-popup
v-model:show=
"showTypePopup"
position=
"bottom"
@
close=
"showTypePopup = false"
>
<van-picker
v-model=
"form.selectedType"
:columns=
"typeOptions"
@
confirm=
"handleTypeConfirm"
@
cancel=
"showTypePopup = false"
/>
</van-popup>
<van-form
ref=
"myFormRef"
>
<!-- 终端名称输入 -->
<van-field
v-model=
"form.storeName"
label=
"终端名称:"
label-align=
"top"
placeholder=
"请输入"
class=
"input-field"
:rules=
"[
{ required: true, message: '请输入终端名称' }]" />
<!-- 门头照上传 -->
<div
class=
"header-photo-section"
>
<van-field
label=
"门头照"
label-align=
"top"
:rules=
"[
{ required: true, message: '请上传门头照' }]">
<template
#
input
>
<van-uploader
:max-count=
"1"
accept=
"image/*"
capture=
"camera"
:model-value=
"form.storePicture"
:after-read=
"posPhotosRead"
preview-size=
"78"
@
delete=
"deletePosPhotos"
>
</van-uploader>
</
template
>
</van-field>
</div>
<!-- 门店类型选择 -->
<van-field
:model-value=
"form.selectedType.join('')"
readonly
label=
"门店类型"
label-align=
"top"
placeholder=
"请选择"
@
click=
"showTypePopup = true"
:rules=
"[{ required: true, message: '请选择门店类型' }]"
/>
<van-popup
v-model:show=
"showTypePopup"
position=
"bottom"
@
close=
"showTypePopup = false"
>
<van-picker
v-model=
"form.selectedType"
:columns=
"typeOptions"
@
confirm=
"handleTypeConfirm"
@
cancel=
"showTypePopup = false"
/>
</van-popup>
</van-form>
</div>
</div>
<!-- 操作按钮 -->
<div
class=
"button-group"
>
...
...
@@ -91,22 +93,27 @@ const deletePosPhotos = async () => {
}
// 确认门店类型
const
handleTypeConfirm
=
({
selectedValues
})
=>
{
const
handleTypeConfirm
=
({
selectedValues
})
=>
{
form
.
selectedType
=
selectedValues
;
showTypePopup
.
value
=
false
;
};
// 创建任务(跳转路由传参即可)
const
myFormRef
=
ref
(
null
)
const
handleCreateTask
=
()
=>
{
router
.
push
({
path
:
'/inspectionTask'
,
query
:
{
taskStatus
:
true
,
storeName
:
form
.
storeName
,
storeCode
:
null
,
storePicture
:
form
.
storePicture
[
0
]?.
url
,
selectedType
:
form
.
selectedType
[
0
]
}
// 校验整个表单
myFormRef
.
value
.
validate
().
then
(()
=>
{
// 校验通过,执行创建任务逻辑
router
.
push
({
path
:
'/inspectionTask'
,
query
:
{
taskStatus
:
true
,
storeName
:
form
.
storeName
,
storeCode
:
null
,
storePicture
:
form
.
storePicture
[
0
]?.
url
,
selectedType
:
form
.
selectedType
[
0
]
}
})
})
};
...
...
src/views/mobile/pages/audit_activity/sales_point_inspection/examine/taskList.vue
浏览文件 @
0a2b5f86
...
...
@@ -18,10 +18,12 @@
class=
"result-list"
@
load=
"onLoadMore"
>
<van-cell-group
inset
>
<!-- <van-swipe-cell v-for="(item, index) in resultList"
:key="index"> -->
<van-cell
v-for=
"(item, index) in resultList"
:key=
"index"
class=
"result-item
"
@
click=
"handleClickStore(item)
"
>
@
click=
"handleClickStore(item)
"
class=
"result-item
"
>
<
template
#
title
>
<div
class=
"item-title"
>
<span>
{{
item
.
storeName
}}
</span>
...
...
@@ -33,6 +35,13 @@
<
div
class
=
"item-address"
>
{{
item
.
address
}}
<
/div
>
<
/template
>
<
/van-cell
>
<
template
#
right
>
<
van
-
button
square
type
=
"danger"
text
=
"删除"
@
click
=
"deleteFn(item, index)"
/>
<
/template
>
<!--
<
/van-swipe-cell> --
>
<
/van-cell-group
>
<
/van-list
>
<
/van-pull-refresh
>
...
...
@@ -49,7 +58,7 @@
<
template
#
input
>
<
van
-
search
v
-
model
=
"query.storeName"
placeholder
=
"请输入勤策终端编码/名称"
@
update
:
model
-
value
=
"
getInspectionTaskListFn
"
@
update
:
model
-
value
=
"
search
"
class
=
"search-bar"
/>
<
/template
>
<
/van-field
>
...
...
@@ -78,8 +87,9 @@
<
script
setup
>
import
{
getInspectionTaskListAPI
}
from
'@/api'
import
{
getInspectionTaskListAPI
}
from
'@/api'
import
{
parseTime
}
from
'@/utils'
import
{
showNotify
}
from
'vant'
;
defineOptions
({
name
:
'Sales_point_inspection'
...
...
@@ -110,6 +120,7 @@ getInspectionTaskListFn()
const
onRefresh
=
async
()
=>
{
refreshLoading
.
value
=
true
query
.
pageNum
=
1
query
.
storeName
=
''
resultList
.
value
=
[]
await
getInspectionTaskListFn
()
refreshLoading
.
value
=
false
...
...
@@ -141,6 +152,35 @@ const handleClickStore = (item) => {
}
}
)
}
// 路由离开守卫:控制是否缓存
onBeforeRouteLeave
((
to
,
from
,
next
)
=>
{
if
(
to
.
path
===
'/audit_activity/sales_point_inspection'
)
{
// 强制刷新当前组件
resetFn
()
}
next
()
}
)
// 搜索地址
const
search
=
()
=>
{
resultList
.
value
=
[]
getInspectionTaskListFn
()
}
// 删除任务
const
deleteFn
=
async
(
item
,
index
)
=>
{
// console.log(item)
// await deleteInspectionTaskAPI(
{
// rstdId: item.rstId
//
}
)
// resultList.value.splice(index, 1)
// showNotify(
{
// message: '删除成功',
// type: 'success',
//
}
)
}
<
/script
>
<
style
scoped
...
...
@@ -199,6 +239,17 @@ const handleClickStore = (item) => {
color
:
#
a6a4a4
;
line
-
height
:
1.4
;
}
}
/* 滑动右侧按钮 */
::
v
-
deep
(.
van
-
swipe
-
cell__right
)
{
height
:
100
px
;
.
van
-
button
{
height
:
100
%
;
}
}
}
...
...
@@ -225,5 +276,6 @@ const handleClickStore = (item) => {
}
}
}
<
/style>
\ No newline at end of file
src/views/mobile/router/index.js
浏览文件 @
0a2b5f86
...
...
@@ -21,17 +21,17 @@ export const constantMobileRoutes = [
name
:
'm_menu'
},
{
path
:
'promotion_plan_detail/:planId'
,
//
详情
path
:
'promotion_plan_detail/:planId'
,
//
CP 促销计划,详情页
component
:
()
=>
import
(
'@/views/mobile/pages/cp_activity/promotion/plan/detail'
),
name
:
'm_promotion_detail'
,
},
{
path
:
'promotion_plan_editing/:planId?'
,
//
增
改
path
:
'promotion_plan_editing/:planId?'
,
//
CP 促销计划,增加,修
改
component
:
()
=>
import
(
'@/views/mobile/pages/cp_activity/promotion/plan/editing'
),
name
:
'm_promotion_editing'
,
},
{
path
:
'examine/:examineId'
,
//
促销内
稽查
path
:
'examine/:examineId'
,
//
CP 促销计划,
稽查
component
:
()
=>
import
(
'@/views/mobile/pages/cp_activity/examine'
),
name
:
'm_promotion_examine'
,
},
...
...
@@ -41,17 +41,17 @@ export const constantMobileRoutes = [
name
:
'logistics'
},
{
path
:
'newTerminal'
,
// 新建终端门店
path
:
'newTerminal'
,
//
售点稽查_
新建终端门店
component
:
()
=>
import
(
'@/views/mobile/pages/audit_activity/sales_point_inspection/examine/newTerminal'
),
name
:
'newTerminal'
},
{
path
:
'taskList'
,
//
稽查记录
path
:
'taskList'
,
//
售点稽查_稽查记录列表
component
:
()
=>
import
(
'@/views/mobile/pages/audit_activity/sales_point_inspection/examine/taskList'
),
name
:
'taskList'
},
{
path
:
'inspectionTask'
,
//
稽查任务(终端门店)
path
:
'inspectionTask'
,
//
售点稽查_稽查任务
component
:
()
=>
import
(
'@/views/mobile/pages/audit_activity/sales_point_inspection/examine/inspectionTask/index'
),
name
:
'inspectionTask'
},
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论