Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
W
wangxiaolu-sfa-ui
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
sfa
wangxiaolu-sfa-ui
Commits
2f7dcc27
提交
2f7dcc27
authored
4月 24, 2025
作者:
lidongxu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor(mobile/promotion): 促销移动端:批量修改归属人
同上
上级
d019365e
隐藏空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
92 行增加
和
59 行删除
+92
-59
touch.js
src/mobile/directive/touch.js
+14
-5
index.vue
...le/views/promotion/plan/components/PickerBelong/index.vue
+9
-6
index.vue
src/mobile/views/promotion/plan/editing/index.vue
+16
-32
index.vue
src/mobile/views/promotion/plan/index/index.vue
+46
-12
plan-search.vue
src/mobile/views/promotion/plan/index/plan-search.vue
+7
-4
没有找到文件。
src/mobile/directive/touch.js
浏览文件 @
2f7dcc27
...
@@ -2,21 +2,30 @@
...
@@ -2,21 +2,30 @@
import
{
ref
}
from
'vue'
;
import
{
ref
}
from
'vue'
;
const
longPressDuration
=
ref
(
500
);
// 长按时间阈值,单位毫秒
const
longPressDuration
=
ref
(
500
);
// 长按时间阈值,单位毫秒
let
start
=
null
;
// 记录触摸开始时间
let
start
=
null
;
// 按下函数
let
cancel
=
null
;
let
move
=
null
;
// 移动函数
let
cancel
=
null
;
// 取消函数
let
isMove
=
false
// 是否移动
export
default
{
export
default
{
beforeMount
(
el
,
binding
)
{
beforeMount
(
el
,
binding
)
{
let
pressTimer
=
null
;
let
pressTimer
=
null
;
start
=
(
e
)
=>
{
start
=
(
e
)
=>
{
isMove
=
false
;
if
(
pressTimer
===
null
)
{
if
(
pressTimer
===
null
)
{
pressTimer
=
setTimeout
(()
=>
{
pressTimer
=
setTimeout
(()
=>
{
binding
.
value
();
// 长按定时器触发,先不执行函数,等待 touchend 判断坐标
!
isMove
&&
binding
.
value
();
},
longPressDuration
.
value
);
},
longPressDuration
.
value
);
}
}
};
};
move
=
(
e
)
=>
{
isMove
=
true
}
cancel
=
(
e
)
=>
{
cancel
=
(
e
)
=>
{
if
(
pressTimer
!==
null
)
{
if
(
pressTimer
!==
null
)
{
clearTimeout
(
pressTimer
);
clearTimeout
(
pressTimer
);
...
@@ -25,13 +34,14 @@ export default {
...
@@ -25,13 +34,14 @@ export default {
};
};
el
.
addEventListener
(
'touchstart'
,
start
);
el
.
addEventListener
(
'touchstart'
,
start
);
el
.
addEventListener
(
'touchmove'
,
move
)
el
.
addEventListener
(
'touchend'
,
cancel
);
el
.
addEventListener
(
'touchend'
,
cancel
);
el
.
addEventListener
(
'touchcancel'
,
cancel
);
el
.
addEventListener
(
'touchcancel'
,
cancel
);
},
},
unmounted
(
el
)
{
unmounted
(
el
)
{
el
.
removeEventListener
(
'touchstart'
,
start
);
el
.
removeEventListener
(
'touchstart'
,
start
);
el
.
removeEventListener
(
'touchmove'
,
move
)
el
.
removeEventListener
(
'touchend'
,
cancel
);
el
.
removeEventListener
(
'touchend'
,
cancel
);
el
.
removeEventListener
(
'touchcancel'
,
cancel
);
el
.
removeEventListener
(
'touchcancel'
,
cancel
);
}
}
};
};
\ No newline at end of file
src/mobile/views/promotion/plan/components/PickerBelong/index.vue
浏览文件 @
2f7dcc27
<
template
>
<
template
>
<PickerSearch
v-model:show=
"showEmployee"
<PickerSearch
:columns=
"showEmployeeList"
:columns=
"showEmployeeList"
placeholder=
"搜索归属人"
placeholder=
"搜索归属人"
@
confirm=
"onEmployeeConfirm"
@
confirm=
"onEmployeeConfirm"
...
@@ -8,7 +8,11 @@
...
@@ -8,7 +8,11 @@
<
script
setup
>
<
script
setup
>
import
{
getChargeListAPI
}
from
'@/api'
import
{
getChargeListAPI
}
from
'@/api'
// 选择归属人弹窗组件
const
emits
=
defineEmits
([
'confirm'
])
const
showEmployeeList
=
ref
([])
// 归属人
// 归属人
const
allEmpolyeeList
=
ref
([])
const
allEmpolyeeList
=
ref
([])
const
getEmployeeList
=
async
()
=>
{
const
getEmployeeList
=
async
()
=>
{
...
@@ -22,20 +26,19 @@ const getEmployeeList = async () => {
...
@@ -22,20 +26,19 @@ const getEmployeeList = async () => {
deptQcId
:
item
.
deptQcId
deptQcId
:
item
.
deptQcId
}
}
})
})
showEmployeeList
.
value
=
allEmpolyeeList
.
value
}
}
getEmployeeList
()
getEmployeeList
()
// 确定归属人
// 确定归属人
const
onEmployeeConfirm
=
(
val
)
=>
{
const
onEmployeeConfirm
=
(
val
)
=>
{
props
.
query
.
employeeId
=
val
.
selectedOptions
[
0
].
value
emits
(
'confirm'
,
val
)
showEmployee
.
value
=
false
emits
(
'query'
)
}
}
// 搜索归属人
// 搜索归属人
const
searchEmployee
=
(
searchName
)
=>
{
const
searchEmployee
=
(
searchName
)
=>
{
showEmployeeList
.
value
=
allEmpolyeeList
.
filter
(
item
=>
{
showEmployeeList
.
value
=
allEmpolyeeList
.
value
.
filter
(
item
=>
{
return
item
.
text
.
includes
(
searchName
)
return
item
.
text
.
includes
(
searchName
)
})
})
}
}
...
...
src/mobile/views/promotion/plan/editing/index.vue
浏览文件 @
2f7dcc27
...
@@ -130,12 +130,14 @@
...
@@ -130,12 +130,14 @@
</div>
</div>
</van-form>
</van-form>
</div>
</div>
<PickerBelong
v-model:show=
"showEmployeePicker"
@
confirm=
"confirmEmployee"
/>
<PickerSearch
v-model:show=
"showPicker"
<PickerSearch
v-model:show=
"showPicker"
:columns=
"columns"
:columns=
"columns"
:searchShow=
"showPickerSearch"
:searchShow=
"showPickerSearch"
@
search=
"search"
@
search=
"search"
@
cancel=
"showPicker = false"
@
cancel=
"showPicker = false"
@
confirm=
"confirm"
></PickerSearch
>
@
confirm=
"confirm"
/
>
<van-popup
v-model:show=
"showInTimePicker"
<van-popup
v-model:show=
"showInTimePicker"
destroy-on-close
destroy-on-close
position=
"bottom"
>
position=
"bottom"
>
...
@@ -162,6 +164,7 @@
...
@@ -162,6 +164,7 @@
import
{
getPlanStoreListAPI
,
getChargeListAPI
,
addPlanByWebAPI
,
getPlanDetailAPI
,
updatePlanByWebAPI
}
from
'@/api'
import
{
getPlanStoreListAPI
,
getChargeListAPI
,
addPlanByWebAPI
,
getPlanDetailAPI
,
updatePlanByWebAPI
}
from
'@/api'
import
userStore
from
'@/store/modules/user'
import
userStore
from
'@/store/modules/user'
import
{
parseTime
}
from
'@/utils'
import
{
parseTime
}
from
'@/utils'
import
PickerBelong
from
'../components/PickerBelong'
const
myForm
=
ref
({})
const
myForm
=
ref
({})
const
{
proxy
}
=
getCurrentInstance
();
const
{
proxy
}
=
getCurrentInstance
();
...
@@ -228,11 +231,13 @@ const onSubmit = async () => {
...
@@ -228,11 +231,13 @@ const onSubmit = async () => {
}
}
// 选择门店
// 选择门店
const
selStoreName
=
()
=>
{
const
selStoreName
=
async
()
=>
{
isType
.
value
=
'门店'
isType
.
value
=
'门店'
showPicker
.
value
=
true
showPicker
.
value
=
true
await
getStoreList
()
showPickerSearch
.
value
=
true
showPickerSearch
.
value
=
true
searchPlaceholder
.
value
=
'搜索门店名称'
searchPlaceholder
.
value
=
'搜索门店名称'
}
}
// 获取门店列表
// 获取门店列表
const
getStoreList
=
async
(
storeName
)
=>
{
const
getStoreList
=
async
(
storeName
)
=>
{
...
@@ -245,7 +250,6 @@ const getStoreList = async (storeName) => {
...
@@ -245,7 +250,6 @@ const getStoreList = async (storeName) => {
storeAddr
:
item
.
storeAddr
storeAddr
:
item
.
storeAddr
}))
}))
}
}
getStoreList
()
// 活动日期
// 活动日期
const
showCalendar
=
ref
(
false
)
const
showCalendar
=
ref
(
false
)
...
@@ -271,29 +275,10 @@ const selPattern = () => {
...
@@ -271,29 +275,10 @@ const selPattern = () => {
}
}
// 归属人
// 归属人
const
allBelongList
=
ref
([])
// 所有归属人列表
const
showEmployeePicker
=
ref
(
false
)
const
selEmployee
=
()
=>
{
const
selEmployee
=
()
=>
{
isType
.
value
=
'归属人'
showEmployeePicker
.
value
=
true
showPicker
.
value
=
true
showPickerSearch
.
value
=
true
columns
.
value
=
allBelongList
.
value
getBelongList
()
}
}
const
getBelongList
=
async
()
=>
{
const
res
=
await
getChargeListAPI
()
allBelongList
.
value
=
res
.
data
.
map
(
item
=>
({
text
:
item
.
name
,
value
:
item
.
employeeNo
,
id
:
item
.
id
}))
columns
.
value
=
allBelongList
.
value
// 判断如果是城市经理,则设置默认归属人为自己
if
(
isCityManager
.
value
)
{
form
.
employeeName
=
userStore
().
employeeName
form
.
employeeNo
=
userStore
().
employeeNo
}
}
// 上班打卡时间
// 上班打卡时间
const
showInTimePicker
=
ref
(
false
)
const
showInTimePicker
=
ref
(
false
)
...
@@ -357,12 +342,16 @@ const isType = ref('') // 0: 门店 1: 计划 2: 归属人
...
@@ -357,12 +342,16 @@ const isType = ref('') // 0: 门店 1: 计划 2: 归属人
const
search
=
(
value
)
=>
{
const
search
=
(
value
)
=>
{
if
(
isType
.
value
===
'门店'
)
{
if
(
isType
.
value
===
'门店'
)
{
getStoreList
(
value
)
getStoreList
(
value
)
}
else
if
(
isType
.
value
===
'归属人'
)
{
// 模糊搜索
columns
.
value
=
allBelongList
.
value
.
filter
(
item
=>
item
.
text
.
includes
(
value
))
}
}
}
}
// 确认
// 确认
const
confirmEmployee
=
(
value
)
=>
{
const
{
selectedOptions
}
=
value
form
.
employeeName
=
selectedOptions
[
0
]?.
text
form
.
employeeNo
=
selectedOptions
[
0
]?.
employeeNo
form
.
employeeId
=
selectedOptions
[
0
]?.
value
showEmployeePicker
.
value
=
false
}
const
confirm
=
(
value
)
=>
{
const
confirm
=
(
value
)
=>
{
if
(
isType
.
value
===
'门店'
)
{
if
(
isType
.
value
===
'门店'
)
{
const
{
selectedOptions
}
=
value
const
{
selectedOptions
}
=
value
...
@@ -372,11 +361,6 @@ const confirm = (value) => {
...
@@ -372,11 +361,6 @@ const confirm = (value) => {
}
else
if
(
isType
.
value
===
'计划'
)
{
}
else
if
(
isType
.
value
===
'计划'
)
{
const
{
selectedOptions
}
=
value
const
{
selectedOptions
}
=
value
form
.
pattern
=
selectedOptions
[
0
]?.
text
form
.
pattern
=
selectedOptions
[
0
]?.
text
}
else
if
(
isType
.
value
===
'归属人'
)
{
const
{
selectedOptions
}
=
value
form
.
employeeName
=
selectedOptions
[
0
]?.
text
form
.
employeeNo
=
selectedOptions
[
0
]?.
value
form
.
employeeId
=
selectedOptions
[
0
]?.
id
}
}
showPicker
.
value
=
false
showPicker
.
value
=
false
}
}
...
...
src/mobile/views/promotion/plan/index/index.vue
浏览文件 @
2f7dcc27
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
:pull-distance=
"100"
:pull-distance=
"100"
success-text=
"刷新成功"
success-text=
"刷新成功"
@
refresh=
"onRefresh"
@
refresh=
"onRefresh"
:class=
"
{
safe_bottom: showSelect
}">
:class=
"
{
safe_bottom: showSelect
}">
<van-list
v-model:loading=
"loading"
<van-list
v-model:loading=
"loading"
:finished=
"finished"
:finished=
"finished"
:immediate-check=
"false"
:immediate-check=
"false"
...
@@ -64,11 +64,15 @@
...
@@ -64,11 +64,15 @@
<
van
-
action
-
bar
v
-
show
=
"showSelect"
>
<
van
-
action
-
bar
v
-
show
=
"showSelect"
>
<
span
@
click
=
"showSelect = false"
>
取消
<
/span
>
<
span
@
click
=
"showSelect = false"
>
取消
<
/span
>
<
van
-
action
-
bar
-
button
type
=
"warning"
<
van
-
action
-
bar
-
button
type
=
"warning"
text
=
"修改归属人"
/>
text
=
"修改归属人"
@
click
=
"clickChangeBelong"
/>
<
van
-
action
-
bar
-
button
type
=
"danger"
<
van
-
action
-
bar
-
button
type
=
"danger"
text
=
"删除"
text
=
"删除"
@
click
=
"clickDelSome"
/>
@
click
=
"clickDelSome"
/>
<
/van-action-bar
>
<
/van-action-bar
>
<!--
选择归属人
-->
<
PickerBelong
v
-
model
:
show
=
"showPickerBelong"
@
confirm
=
"confirmPickerBelong"
/>
<
/div
>
<
/div
>
<
/template
>
<
/template
>
...
@@ -81,13 +85,15 @@ import userStore from '@/store/modules/user'
...
@@ -81,13 +85,15 @@ import userStore from '@/store/modules/user'
import
{
parseTime
}
from
'@/utils'
import
{
parseTime
}
from
'@/utils'
import
{
checkPlanExpire
}
from
'@/hooks'
import
{
checkPlanExpire
}
from
'@/hooks'
import
{
getPromotionActiveStatus
}
from
'@/dicts'
import
{
getPromotionActiveStatus
}
from
'@/dicts'
import
{
getPlanListAPI
,
deletePlanAPI
}
from
'@/api'
import
{
getPlanListAPI
,
deletePlanAPI
,
batchUpdatePlanAPI
}
from
'@/api'
import
PlanSearch
from
'./plan-search.vue'
import
PlanSearch
from
'./plan-search.vue'
import
PickerBelong
from
'../components/PickerBelong'
const
{
proxy
}
=
getCurrentInstance
();
const
{
proxy
}
=
getCurrentInstance
();
const
router
=
useRouter
()
const
router
=
useRouter
()
const
promotionIdentity
=
computed
(()
=>
userStore
().
promotionIdentity
)
const
promotionIdentity
=
computed
(()
=>
userStore
().
promotionIdentity
)
const
employeeNo
=
computed
(()
=>
userStore
().
employeeNo
)
const
employeeNo
=
computed
(()
=>
userStore
().
employeeNo
)
const
employeeName
=
computed
(()
=>
userStore
().
employeeName
)
// 搜索弹窗
// 搜索弹窗
const
showSearch
=
ref
(
false
)
const
showSearch
=
ref
(
false
)
...
@@ -113,8 +119,6 @@ const planColumns = [
...
@@ -113,8 +119,6 @@ const planColumns = [
}
}
]
]
const
getPlanList
=
async
()
=>
{
const
getPlanList
=
async
()
=>
{
// 搜索条件改变/刷新时,页码重置为 1
// 搜索条件改变/刷新时,页码重置为 1
!
loading
.
value
&&
(
query
.
pageNum
=
1
)
!
loading
.
value
&&
(
query
.
pageNum
=
1
)
...
@@ -165,7 +169,6 @@ const querySearch = () => {
...
@@ -165,7 +169,6 @@ const querySearch = () => {
// 编辑计划
// 编辑计划
const
editPlan
=
(
row
)
=>
{
const
editPlan
=
(
row
)
=>
{
console
.
log
(
123
)
if
(
!
checkPlanExpire
(
row
))
{
if
(
!
checkPlanExpire
(
row
))
{
return
proxy
.
$modal
.
msgWarning
(
'无法编辑,已执行或之前计划'
)
return
proxy
.
$modal
.
msgWarning
(
'无法编辑,已执行或之前计划'
)
}
}
...
@@ -208,24 +211,54 @@ const clickDelSome = () => {
...
@@ -208,24 +211,54 @@ const clickDelSome = () => {
const
ids
=
planList
.
value
.
filter
(
item
=>
item
.
checked
).
map
(
item
=>
item
.
id
)
const
ids
=
planList
.
value
.
filter
(
item
=>
item
.
checked
).
map
(
item
=>
item
.
id
)
if
(
ids
.
length
===
0
)
{
if
(
ids
.
length
===
0
)
{
return
proxy
.
$modal
.
msgWarning
(
'请选择要删除的计划'
)
return
proxy
.
$modal
.
msgWarning
(
'请选择要删除的计划'
)
}
}
proxy
.
$modal
.
confirm
(
`确认删除${ids.length
}
条计划吗?`
).
then
(
async
()
=>
{
proxy
.
$modal
.
confirm
(
`确认删除${ids.length
}
条计划吗?`
).
then
(
async
()
=>
{
// 循环判断计划是否含有以前和执行中的
// 循环判断计划是否含有以前和执行中的
for
(
let
i
=
0
;
i
<
ids
.
length
;
i
++
)
{
for
(
let
i
=
0
;
i
<
ids
.
length
;
i
++
)
{
const
item
=
planList
.
value
.
find
(
o
=>
o
.
id
===
ids
[
i
])
const
item
=
planList
.
value
.
find
(
o
=>
o
.
id
===
ids
[
i
])
if
(
!
checkPlanExpire
(
item
))
{
if
(
!
checkPlanExpire
(
item
))
{
return
proxy
.
$modal
.
msgWarning
(
'无法删除,已执行或之前计划'
)
return
proxy
.
$modal
.
msgWarning
(
'无法删除,已执行或之前计划'
)
}
}
}
}
await
deletePlanAPI
({
await
deletePlanAPI
({
planIds
:
ids
,
planIds
:
ids
,
employeeNo
:
employeeNo
.
value
employeeNo
:
employeeNo
.
value
}
)
}
)
proxy
.
$modal
.
msgSuccess
(
'删除成功'
)
proxy
.
$modal
.
msgSuccess
(
'删除成功'
)
showSelect
.
value
=
false
showSelect
.
value
=
false
onRefresh
()
onRefresh
()
}
)
}
)
}
}
// 选择归属人
const
showPickerBelong
=
ref
(
false
)
const
clickChangeBelong
=
()
=>
{
const
ids
=
planList
.
value
.
filter
(
item
=>
item
.
checked
).
map
(
item
=>
item
.
id
)
if
(
ids
.
length
===
0
)
{
return
proxy
.
$modal
.
msgWarning
(
'请选择要修改归属人的计划'
)
}
for
(
let
i
=
0
;
i
<
ids
.
length
;
i
++
)
{
const
item
=
planList
.
value
.
find
(
o
=>
o
.
id
===
ids
[
i
])
if
(
!
checkPlanExpire
(
item
))
{
return
proxy
.
$modal
.
msgWarning
(
'无法修改,已执行或之前计划'
)
}
}
showPickerBelong
.
value
=
true
}
const
confirmPickerBelong
=
async
(
val
)
=>
{
showPickerBelong
.
value
=
false
showSelect
.
value
=
false
// 调用后台接口批量修改归属人
// 循环判断计划是否含有以前和执行中的
await
batchUpdatePlanAPI
({
employeeId
:
val
.
selectedOptions
[
0
]?.
value
,
// 选择的归属人 id
operName
:
employeeName
.
value
,
planIds
:
planList
.
value
.
filter
(
item
=>
item
.
checked
).
map
(
item
=>
item
.
id
)
}
)
proxy
.
$modal
.
msgSuccess
(
'修改成功'
)
onRefresh
()
}
<
/script
>
<
/script
>
<
style
scoped
<
style
scoped
...
@@ -234,10 +267,11 @@ const clickDelSome = () => {
...
@@ -234,10 +267,11 @@ const clickDelSome = () => {
background
:
#
f5f5f5
;
background
:
#
f5f5f5
;
min
-
height
:
100
vh
;
min
-
height
:
100
vh
;
.
van
-
pull
-
refresh
{
.
van
-
pull
-
refresh
{
/* 并列选择身上的类名 */
/* 并列选择身上的类名 */
&
.
safe_bottom
{
&
.
safe_bottom
{
padding
-
bottom
:
50
px
;
padding
-
bottom
:
50
px
;
}
}
}
}
...
...
src/mobile/views/promotion/plan/index/plan-search.vue
浏览文件 @
2f7dcc27
...
@@ -43,7 +43,7 @@
...
@@ -43,7 +43,7 @@
</van-popup>
</van-popup>
<!-- 归属人 -->
<!-- 归属人 -->
<van-field
:model
-value=
"showEmployeeList.find(o => o.value === query.employeeId)?.text
"
<van-field
:model
Value=
"query.employeeName
"
is-link
is-link
readonly
readonly
label=
"归属人"
label=
"归属人"
...
@@ -75,7 +75,6 @@ import userStore from '@/store/modules/user'
...
@@ -75,7 +75,6 @@ import userStore from '@/store/modules/user'
import
PickerBelong
from
'../components/PickerBelong'
import
PickerBelong
from
'../components/PickerBelong'
const
promotionIdentity
=
computed
(()
=>
userStore
().
promotionIdentity
)
const
promotionIdentity
=
computed
(()
=>
userStore
().
promotionIdentity
)
const
employeeNo
=
computed
(()
=>
userStore
().
employeeNo
)
const
{
recentPickerOptions
:
pickerOptions
}
=
useDatePickerOptions
()
const
{
recentPickerOptions
:
pickerOptions
}
=
useDatePickerOptions
()
...
@@ -146,7 +145,8 @@ const showEmployee = ref(false)
...
@@ -146,7 +145,8 @@ const showEmployee = ref(false)
// 确定归属人
// 确定归属人
const
onEmployeeConfirm
=
(
val
)
=>
{
const
onEmployeeConfirm
=
(
val
)
=>
{
props
.
query
.
employeeId
=
val
.
selectedOptions
[
0
].
value
props
.
query
.
employeeName
=
val
.
selectedOptions
[
0
]?.
text
props
.
query
.
employeeId
=
val
.
selectedOptions
[
0
]?.
value
showEmployee
.
value
=
false
showEmployee
.
value
=
false
emits
(
'query'
)
emits
(
'query'
)
}
}
...
@@ -163,7 +163,10 @@ const resetFn = () => {
...
@@ -163,7 +163,10 @@ const resetFn = () => {
props
.
query
.
activityStartDate
=
''
props
.
query
.
activityStartDate
=
''
props
.
query
.
activityEndDate
=
''
props
.
query
.
activityEndDate
=
''
props
.
query
.
planStatus
=
undefined
props
.
query
.
planStatus
=
undefined
!
promotionIdentity
.
value
&&
(
props
.
query
.
employeeId
=
undefined
)
if
(
!
promotionIdentity
.
value
)
{
props
.
query
.
employeeName
=
undefined
props
.
query
.
employeeId
=
undefined
}
props
.
query
.
storeNameLike
=
undefined
props
.
query
.
storeNameLike
=
undefined
emits
(
'query'
)
emits
(
'query'
)
}
}
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论