Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jiedao-app-operator-master
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
lanbaoming
jiedao-app-operator-master
Commits
960a90c9
Commit
960a90c9
authored
Aug 13, 2024
by
chenwei
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'feature/099_customer_filter' into 'dev'
Feature/099 customer filter See merge request
!3
parents
7ef7fe75
a81376ea
Changes
12
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
684 additions
and
115 deletions
+684
-115
memberManagement.js
src/api/ecw/memberManagement.js
+18
-0
index.vue
src/components/DictSelector/index.vue
+3
-0
en_US.json
src/i18n/languages/en_US.json
+24
-2
dict.js
src/utils/dict.js
+1
-0
operatingGift.vue
src/views/ecw/giftManagement/components/operatingGift.vue
+70
-34
index.vue
src/views/ecw/giftManagement/index.vue
+9
-6
index.vue
...cw/memberManagement/addIntegrationRuleOperation/index.vue
+457
-55
index.vue
...ws/ecw/memberManagement/exchangeRecordOperation/index.vue
+0
-1
index.vue
src/views/ecw/memberManagement/integralRecord/index.vue
+77
-9
index.vue
src/views/ecw/memberManagement/integrationRule/index.vue
+23
-5
index.vue
src/views/ecw/memberManagement/memberPointsSummary/index.vue
+1
-1
index.vue
src/views/report/customerreport/index.vue
+1
-2
No files found.
src/api/ecw/memberManagement.js
View file @
960a90c9
...
...
@@ -218,3 +218,21 @@ export function integralRuleDelete(data) {
data
,
});
}
//获取积分规则详情
export
function
integralRuleDetails
(
data
)
{
return
request
({
url
:
"
/member/score-rule/get
"
,
method
:
"
post
"
,
data
,
});
}
//编辑积分规则
export
function
integralRuleUpdated
(
data
)
{
return
request
({
url
:
"
/member/score-rule/update
"
,
method
:
"
post
"
,
data
,
});
}
src/components/DictSelector/index.vue
View file @
960a90c9
...
...
@@ -128,14 +128,17 @@ export default {
methods
:
{
format
(
val
)
{
if
(
val
===
null
||
val
==
undefined
||
val
==
""
)
return
val
;
let
formatter
=
typeof
this
.
formatter
==
"
function
"
?
this
.
formatter
:
FORMATTERS
[
this
.
formatter
];
if
(
!
formatter
)
{
console
.
warn
(
"
格式器无效
"
,
this
.
formatter
);
return
val
;
}
return
formatter
(
val
);
},
changeValue
(
val
)
{
...
...
src/i18n/languages/en_US.json
View file @
960a90c9
...
...
@@ -4638,5 +4638,27 @@
"请输入会员昵称"
:
"Please enter a member nickname"
,
"请输入礼品ID"
:
"Please enter the gift ID"
,
"新增兑换"
:
"New exchange"
,
"兑换信息导入"
:
"Exchange Information Import"
}
"兑换信息导入"
:
"Exchange Information Import"
,
"订单ID"
:
"order ID"
,
"请选择是否分享"
:
"Please choose whether to share "
,
"是否分享"
:
"Whether to share "
,
"活动链接"
:
"Activity Link "
,
"英文活动内容"
:
"English Activities "
,
"中文活动内容"
:
"Chinese Content"
,
"请输入查找"
:
"Please enter to find "
,
"删除规则"
:
"Delete Rules "
,
"积分范围"
:
"Integral Range "
,
"兑换记录ID"
:
"Exchange Record ID"
,
"核销回退"
:
"Write-off rollback "
,
"请输入礼品积分"
:
"Please enter Gift points "
,
"请输入当前积分"
:
"Please enter current credits "
,
"请选择礼品"
:
"Please select a Gift "
,
"中文活动内容不能为空"
:
"Chinese activity content cannot be empty "
,
"英文活动内容不能为空"
:
"English activity content cannot be empty "
,
"开始积分应大于上一次最终积分"
:
"Starting points should be greater than the last final points "
,
"开始积分应小于本次最终积分"
:
"The starting score should be less than the final score "
,
"本次最终积分应大于本次开始积分"
:
"The final score should be greater than the initial score "
,
"本次最终积分应小于下一次开始积分"
:
"This final score should be less than the next starting score "
,
"确认兑换"
:
"Confirm conversion"
,
"操作积分"
:
"Operation integral"
}
\ No newline at end of file
src/utils/dict.js
View file @
960a90c9
...
...
@@ -253,6 +253,7 @@ export const DICT_TYPE = {
SCORE_RULE_TYPE
:
"
score_rule_type
"
,
//积分规则指标类型
YES_OR_NO
:
"
yes_or_no
"
,
CLIENT_PLATFORM
:
"
client_platform
"
,
MEMBER_SCORE_SOURCE
:
"
member_score_source
"
,
//会员积分来源
};
/**
...
...
src/views/ecw/giftManagement/components/operatingGift.vue
View file @
960a90c9
...
...
@@ -49,30 +49,50 @@
</el-form-item>
</el-col>
</el-row>
<el-form-item
:label=
"$t('兑换积分')"
prop=
"pointsRequire"
>
<el-input
v-model.trim=
"queryParams.pointsRequire"
:placeholder=
"$t('请输入')"
:disabled=
"isDisable"
onkeyup=
"this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/>
</el-form-item>
<el-form-item
:label=
"$t('兑换网点')"
prop=
"nodeId"
>
<el-select
v-model=
"queryParams.nodeId"
:placeholder=
"$t('请选择兑换网点')"
:disabled=
"isDisable"
clearable
size=
"small"
>
<el-option
v-for=
"nodeItem in nodeList"
:key=
"nodeItem.id"
:label=
"isChinese ? nodeItem.titleZh : nodeItem.titleEn"
:value=
"nodeItem.id"
/>
</el-select>
</el-form-item>
<el-row
:gutter=
"10"
v-for=
"(item, index) in queryParams.nodeIds"
>
<el-col
:span=
"6"
>
<el-form-item
:label=
"$t('兑换网点')"
:prop=
"'nodeIds.' + index + '.nodeId'"
:rules=
"rules.nodeIds.nodeId"
>
<el-select
v-model=
"item.nodeId"
:placeholder=
"$t('请选择兑换网点')"
:disabled=
"isDisable"
clearable
size=
"small"
>
<el-option
v-for=
"nodeItem in nodeList"
:key=
"nodeItem.id"
:label=
"isChinese ? nodeItem.titleZh : nodeItem.titleEn"
:value=
"nodeItem.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col
:span=
"6"
>
<el-form-item
:label=
"$t('兑换积分')"
:prop=
"'nodeIds.' + index + 'points'"
:rules=
"rules.nodeIds.points"
>
<el-input
v-model.trim=
"item.points"
:placeholder=
"$t('请输入')"
:disabled=
"isDisable"
onkeyup=
"this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/>
</el-form-item
></el-col>
<el-col
:span=
"1"
>
<el-button
type=
"primary"
:icon=
"index == '0' ? 'el-icon-plus' : 'el-icon-minus'"
@
click=
"handleOrderVRule(item, index)"
></el-button>
</el-col>
</el-row>
<el-form-item
:label=
"$t('剩余数量')"
prop=
"quantityRemain"
>
<el-input
:disabled=
"isDisable && disabelEnableStatus"
...
...
@@ -271,6 +291,7 @@ export default {
endTime
:
null
,
imgEn
:
null
,
imgZh
:
null
,
nodeIds
:
[{
nodeId
:
""
,
points
:
""
}],
nodeId
:
null
,
pickMethod
:
null
,
pointsRequire
:
null
,
...
...
@@ -312,16 +333,23 @@ export default {
trigger
:
"
blur
"
,
},
],
pointsRequire
:
[
{
required
:
true
,
message
:
this
.
$t
(
"
请输入兑换积分
"
),
trigger
:
"
blur
"
,
},
],
nodeId
:
[
{
required
:
true
,
message
:
this
.
$t
(
"
请选择网点
"
),
trigger
:
"
change
"
},
],
nodeIds
:
{
nodeId
:
[
{
required
:
true
,
message
:
this
.
$t
(
"
请选择网点
"
),
trigger
:
"
change
"
,
},
],
points
:
[
{
required
:
true
,
message
:
this
.
$t
(
"
请输入兑换积分
"
),
trigger
:
"
blur
"
,
},
],
},
quantityRemain
:
[
{
required
:
true
,
...
...
@@ -370,6 +398,13 @@ export default {
};
},
methods
:
{
handleOrderVRule
(
item
,
index
)
{
if
(
index
==
"
0
"
)
{
this
.
queryParams
.
nodeIds
.
push
({
nodeId
:
""
,
points
:
""
});
}
else
{
this
.
queryParams
.
nodeIds
.
splice
(
index
,
1
);
}
},
submit
()
{
let
params
=
{
...
this
.
queryParams
};
params
.
startTime
=
this
.
queryParams
.
dateRangeCreateTime
[
0
];
...
...
@@ -400,6 +435,7 @@ export default {
this
.
queryParams
=
{
allowCount
:
null
,
endTime
:
null
,
nodeIds
:
[{
nodeId
:
""
,
points
:
""
}],
imgEn
:
null
,
imgZh
:
null
,
nodeId
:
null
,
...
...
src/views/ecw/giftManagement/index.vue
View file @
960a90c9
...
...
@@ -148,7 +148,6 @@
></el-table-column>
<el-table-column
:label=
"$t('礼品名称')"
align=
"center"
>
<template
slot-scope=
"scope"
>
{{
row
}}
<el-button
type=
"text"
@
click=
"handleView(scope.row)"
>
{{
isChinese
?
scope
.
row
.
titleZh
:
scope
.
row
.
titleEn
}}
</el-button>
...
...
@@ -224,11 +223,15 @@
</el-tooltip>
</
template
>
</el-table-column>
<el-table-column
:label=
"$t('已兑换次数')"
align=
"center"
prop=
"exchangeCount"
></el-table-column>
<el-table-column
:label=
"$t('已兑换次数')"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
type=
"text"
@
click=
"$router.push('/memberManagement/exchangeRecord')"
>
{{
scope
.
row
.
exchangeCount
}}
</el-button
>
</
template
>
</el-table-column>
<el-table-column
:label=
"$t('剩余次数')"
align=
"center"
...
...
src/views/ecw/memberManagement/addIntegrationRuleOperation/index.vue
View file @
960a90c9
This diff is collapsed.
Click to expand it.
src/views/ecw/memberManagement/exchangeRecordOperation/index.vue
View file @
960a90c9
...
...
@@ -273,7 +273,6 @@
<el-form-item
:label=
"$t('核销人')"
>
<el-input
v-model=
"item.verifyUser"
></el-input>
</el-form-item>
--
{{
item
.
verifyTime
}}
--
<el-form-item
:label=
"$t('核销时间')"
>
<el-date-picker
type=
"date"
...
...
src/views/ecw/memberManagement/integralRecord/index.vue
View file @
960a90c9
...
...
@@ -17,10 +17,10 @@
onkeyup=
"this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/>
</el-form-item>
<el-form-item
:label=
"$t('积分
规则
')"
>
<el-form-item
:label=
"$t('积分
来源
')"
>
<dict-selector
clearable
:type=
"DICT_TYPE.
SCORE_RULE_TYP
E"
:type=
"DICT_TYPE.
MEMBER_SCORE_SOURC
E"
v-model=
"queryParams.sourceType"
@
change=
"handleQuery"
>
...
...
@@ -98,11 +98,17 @@
align=
"center"
prop=
"id"
></el-table-column>
<el-table-column
:label=
"$t('会员名称')"
align=
"center"
:prop=
"isChinese ? 'memberNameZh' : 'memberNameEn'"
></el-table-column>
<el-table-column
:label=
"$t('会员名称')"
align=
"center"
>
<template
v-slot=
"
{ row }">
<el-button
type=
"text"
@
click=
"
$router.push('/member/member/member-details/' + row.memberId)
"
>
{{
isChinese
?
row
.
memberNameZh
:
row
.
memberNameEn
}}
</el-button
>
</
template
>
</el-table-column>
<el-table-column
width=
"140"
...
...
@@ -162,7 +168,69 @@
>
</el-table-column>
<el-table-column
:label=
"$t('详细信息')"
align=
"center"
>
<
template
v-slot=
"{ row }"
>
{{}}
</
template
>
<
template
v-slot=
"{ row }"
>
<!-- 人工操作-->
<span
v-if=
"row.sourceType == '1'"
>
{{
row
.
extParamJson
.
comment
||
"
-
"
}}
</span>
<!-- 兑换礼品2 兑换礼品撤销4 跳转兑换记录详情-->
<el-button
v-if=
"row.sourceType == '2' || row.sourceType == '4'"
type=
"text"
@
click=
"
$router.push(
{
path: '/memberManagement/exchangeRecordOperation',
query: {
pageStatus: 'view',
exchangeRewardID: row.extParamJson.redeemId,
},
})
"
>
{{
`${$t("兑换记录ID")
}
:${row.extParamJson.redeemId
}
`
}}
<
/el-butto
n
>
<!--
系统过期
sourceType
=
3
不展示
-->
<
span
v
-
if
=
"
row.sourceType == '3'
"
>
-<
/span
>
<!--
订单
V
值
:
sourceType
=
5
,
extParamJson
中取
orderId
跳转订单详情
-->
<
el
-
button
v
-
if
=
"
row.sourceType == '5'
"
type
=
"
text
"
@
click
=
"
$router.push({
path: '/order/detail',
query: {
orderId: row.extParamJson.orderId,
}
,
}
)
"
>
{{
`${$t("订单ID")
}
:${row.extParamJson.orderId
}
`
}}
<
/el-butto
n
>
<!--
注册
sourceType
=
6
,
extParamJson
中取
userId
,
userNameZh
,
userNameZh
,
phone
展示会员名
+
手机号(手机号脱敏处理)
推荐
:
sourceType
=
7
,
extParamJson
中取
userId
,
userNameZh
,
userNameZh
,
phone
展示会员名
+
手机号(手机号脱敏处理)
-->
<
span
v
-
if
=
"
row.sourceType == '6' || row.sourceType == '7'
"
>
{{
`${
isChinese
? row.extParamJson.userNameZh
: row.extParamJson.userNameEn
}
(${row.extParamJson.phone
}
)`
}}
<
/spa
n
>
<!--
sourceType
=
8
,
extParamJson
中取
scoreRuleId
跳转活动详情
-->
<
el
-
button
v
-
if
=
"
row.sourceType == '8'
"
type
=
"
text
"
@
click
=
"
$router.push({
path: '/memberManagement/addIntegrationRuleOperation',
query: {
id: row.extParamJson.scoreRuleId,
pageStatus: 'view',
}
,
}
)
"
>
{{
`${$t("活动ID")
}
:${row.extParamJson.scoreRuleId
}
`
}}
<
/el-butto
n
>
<
/template
>
<
/el-table-column
>
<
/el-table
>
<!--
//分页列表 -->
...
...
@@ -215,7 +283,7 @@ export default {
methods
:
{
//积分来源
handleSourceType
(
id
)
{
return
this
.
getDictDatas
(
DICT_TYPE
.
SCORE_RULE_TYP
E
).
filter
(
return
this
.
getDictDatas
(
DICT_TYPE
.
MEMBER_SCORE_SOURC
E
).
filter
(
(
item
)
=>
item
.
value
==
id
)[
0
];
}
,
...
...
src/views/ecw/memberManagement/integrationRule/index.vue
View file @
960a90c9
...
...
@@ -39,7 +39,7 @@
<el-form-item
:label=
"$t('状态')"
>
<dict-selector
clearable
:type=
"DICT_TYPE.
REWARD_REDEEM
_STATUS"
:type=
"DICT_TYPE.
GIFT
_STATUS"
v-model=
"queryParams.status"
>
</dict-selector>
...
...
@@ -198,9 +198,12 @@
</el-table-column>
<el-table-column
width=
"220px"
:label=
"$t('操作')"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleUpdate(scope.row)"
>
{{
$t
(
"
查看
"
)
}}
</el-button>
<el-button
size=
"mini"
type=
"text"
@
click=
"handleViewDetails(scope.row)"
>
{{
$t
(
"
查看
"
)
}}
</el-button
>
<el-button
size=
"mini"
type=
"text"
...
...
@@ -232,7 +235,7 @@
size=
"mini"
type=
"text"
:disabled=
"scope.row.status == '1'"
@
click=
"handle
Dele
te(scope.row)"
@
click=
"handle
Upda
te(scope.row)"
>
{{
$t
(
"
编辑
"
)
}}
</el-button
>
<el-button
...
...
@@ -329,6 +332,20 @@ export default {
this
.
handleQuery
();
},
methods
:
{
//编辑操作按钮
handleUpdate
(
row
)
{
this
.
$router
.
push
({
path
:
"
/memberManagement/addIntegrationRuleOperation
"
,
query
:
{
id
:
row
.
id
,
pageStatus
:
"
edit
"
},
});
},
//查看按钮操作
handleViewDetails
(
row
)
{
this
.
$router
.
push
({
path
:
"
/memberManagement/addIntegrationRuleOperation
"
,
query
:
{
id
:
row
.
id
,
pageStatus
:
"
view
"
},
});
},
//延期按钮操作
handleDelayButton
(
row
)
{
this
.
postponeIntegralID
=
row
.
id
;
...
...
@@ -400,6 +417,7 @@ export default {
handleNewScoreRule
()
{
this
.
$router
.
push
({
path
:
"
/memberManagement/addIntegrationRuleOperation
"
,
query
:
{
pageStatus
:
"
new
"
},
});
},
//积分来源
...
...
src/views/ecw/memberManagement/memberPointsSummary/index.vue
View file @
960a90c9
...
...
@@ -285,7 +285,7 @@ export default {
.
then
((
_
)
=>
{
let
params
=
{
...
this
.
formQuery
};
operateMemberScore
(
params
).
then
((
res
)
=>
{
this
.
dialogVisible
=
tru
e
;
this
.
dialogVisible
=
fals
e
;
this
.
formQuery
=
{
comment
:
""
,
memberIds
:
[],
...
...
src/views/report/customerreport/index.vue
View file @
960a90c9
...
...
@@ -92,7 +92,7 @@
/>
-->
</div>
</
template
>
<
script
>
import
UserSelector
from
"
@/components/UserSelector
"
;
import
Treeselect
from
"
@riophae/vue-treeselect
"
;
...
...
@@ -389,4 +389,3 @@ export default {
},
};
</
script
>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment