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
c526dc21
Commit
c526dc21
authored
Jul 31, 2024
by
chenwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
【099】| Reward module change operation
parent
fb74019d
Changes
12
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
12 changed files
with
7285 additions
and
4744 deletions
+7285
-4744
giftManagement.js
src/api/ecw/giftManagement.js
+118
-0
index.vue
src/components/ImageUpload/index.vue
+7
-1
en_US.json
src/i18n/languages/en_US.json
+4588
-4515
dict.js
src/utils/dict.js
+235
-228
chooseGift.vue
...ecw/giftManagement/bulkExchange/components/chooseGift.vue
+312
-0
index.vue
src/views/ecw/giftManagement/bulkExchange/index.vue
+604
-0
operatingGift.vue
src/views/ecw/giftManagement/components/operatingGift.vue
+421
-0
index.vue
src/views/ecw/giftManagement/index.vue
+631
-0
index.vue
src/views/ecw/memberManagement/exchangeRecord/index.vue
+3
-0
index.vue
src/views/ecw/memberManagement/integralRecord/index.vue
+3
-0
index.vue
src/views/ecw/memberManagement/integrationRule/index.vue
+3
-0
index.vue
src/views/ecw/memberManagement/memberPointsSummary/index.vue
+360
-0
No files found.
src/api/ecw/giftManagement.js
0 → 100644
View file @
c526dc21
import
request
from
"
@/utils/request
"
;
//获取网点列表
export
function
getNodeList
(
query
)
{
return
request
({
url
:
"
/ecw/node/list-all-simple
"
,
method
:
"
get
"
,
params
:
query
,
});
}
//获取积分列表
export
function
getGiftList
(
data
)
{
return
request
({
url
:
"
/ecw/reward/page
"
,
method
:
"
post
"
,
params
:
{
page
:
data
.
page
,
rows
:
data
.
rows
,
},
data
:
data
,
});
}
//新增礼品
export
function
addRewards
(
data
)
{
return
request
({
url
:
"
/ecw/reward/create
"
,
method
:
"
post
"
,
data
:
data
,
});
}
//删除礼品
export
function
deleteRewards
(
data
)
{
return
request
({
url
:
"
/ecw/reward/delete?id=
"
+
data
.
id
,
method
:
"
delete
"
,
});
}
//礼品延期
export
function
delayRewards
(
data
)
{
return
request
({
url
:
"
/ecw/reward/delay
"
,
method
:
"
post
"
,
data
:
data
,
});
}
//编辑礼品
export
function
editRewards
(
data
)
{
return
request
({
url
:
"
/ecw/reward/update
"
,
method
:
"
post
"
,
data
:
data
,
});
}
//礼品状态变更
export
function
changeRewardsStatus
(
data
)
{
return
request
({
url
:
"
/ecw/reward/status
"
,
method
:
"
post
"
,
data
:
data
,
});
}
//复制礼品
export
function
copyRewardsAPI
(
id
)
{
return
request
({
url
:
"
/ecw/reward/copy/
"
+
id
,
method
:
"
post
"
,
});
}
//获取单个礼品详情
export
function
getRewardsDetails
(
data
)
{
return
request
({
url
:
"
/ecw/reward/get
"
,
method
:
"
get
"
,
params
:
data
,
});
}
//获取国家列表
export
function
getTradeCountryList
()
{
return
request
({
url
:
"
/ecw/region/getTradeCountryList
"
,
method
:
"
get
"
,
});
}
//获取城市列表
export
function
getCityList
(
query
)
{
return
request
({
url
:
"
/ecw/region/getCityListByParent
"
,
method
:
"
get
"
,
params
:
query
,
});
}
//获取会员积分列表
export
function
getMemberList
(
data
)
{
return
request
({
url
:
"
/member/user-score/page
"
,
method
:
"
post
"
,
data
,
});
}
//批量兑换礼品
export
function
bulkConversion
(
data
)
{
return
request
({
url
:
"
/reward/redeem/batch
"
,
method
:
"
post
"
,
data
,
});
}
src/components/ImageUpload/index.vue
View file @
c526dc21
...
...
@@ -16,7 +16,7 @@
<span
class=
"el-upload-list__item-preview"
@
click=
"handlePictureCardPreview(item)"
>
<i
class=
"el-icon-zoom-in"
></i>
</span>
<span
class=
"el-upload-list__item-delete"
@
click=
"handleRemove(item)"
>
<span
class=
"el-upload-list__item-delete"
@
click=
"handleRemove(item)"
v-if =
"isShowEditButton"
>
<i
class=
"el-icon-delete"
></i>
</span>
</span>
...
...
@@ -24,6 +24,7 @@
</ul>
<el-upload
v-if =
"isShowEditButton"
multiple
:action=
"uploadImgUrl"
list-type=
"picture-card"
...
...
@@ -94,6 +95,11 @@ export default {
isShowTip
:
{
type
:
Boolean
,
default
:
true
},
//是否显示编辑按钮
isShowEditButton
:{
type
:
Boolean
,
default
:
true
}
},
data
()
{
...
...
src/i18n/languages/en_US.json
View file @
c526dc21
...
...
@@ -4507,10 +4507,83 @@
"身份证认证状态"
:
"Identity card authentication status"
,
"角标字段"
:
"Subscript field"
,
"不清楚请留空,已设勿改"
:
"Unclear, please leave blank. It has been set to remain unchanged"
,
"退仓/已混箱品名"
:
"Returned/mixed Box"
,
"请输入会员编号"
:
"Please input Member ID"
,
"退仓/已混箱品名"
:
"Returned/mixed Box"
,
"请输入会员编号"
:
"Please input Member ID"
,
"会员名称"
:
"Member nickname"
,
"请输入会员名称"
:
"Please input Member nickname"
,
"会员电话"
:
"Member Phone NO."
,
"请输入会员电话"
:
"Please input Member Phone NO."
"会员电话"
:
"Member Phone NO."
,
"请输入会员电话"
:
"Please input Member Phone NO."
,
"礼品名称"
:
"gift name"
,
"请输入礼品名称"
:
"Please input gift name"
,
"请输入数字"
:
"Please input number"
,
"兑换积分"
:
"Redeem Points"
,
"领取方式"
:
"Collection method"
,
"兑换网点"
:
"Exchange outlet"
,
"请选择兑换网点"
:
"Please select an exchange outlet"
,
"剩余数量"
:
"Remaining Quantity"
,
"礼品ID"
:
"Gift ID"
,
"允许兑换次数"
:
"Allow redemption times"
,
"已兑换次数"
:
"Redemption times"
,
"剩余次数"
:
"Remaining times"
,
"添加礼品"
:
"Add Gift"
,
"查看礼品"
:
"View gifts"
,
"中文礼品名称"
:
"Chinese gift name"
,
"英文礼品名称"
:
"English gift name"
,
"中文礼品图片"
:
"Chinese Gift picture"
,
"英文礼品图片"
:
"English gift picture"
,
"活动时间"
:
"Activity Time "
,
"兑换"
:
"Exchange"
,
"中文备注"
:
"Chinese Remarks"
,
"英文备注"
:
"English Remarks"
,
"长度在 0 到 500 个字符"
:
"Length 0 to 500 characters"
,
"请选择延期时间"
:
"Please select an extension time"
,
"延期成功"
:
"Successful extension"
,
"否关闭当前礼品?"
:
"Do you close the current gift?"
,
"是否启用当前礼品?"
:
"Do you want to enable current gifts"
,
"启用成功"
:
"Enabled successfully"
,
"关闭成功"
:
"Closed successfully"
,
"是否确认删除此礼品"
:
"Do you want to delete this gift? "
,
"请选择领取方式"
:
"Please select the collection method"
,
"编辑礼品"
:
"Edit Gifts"
,
"新增礼品"
:
"New Gift "
,
"请输入剩余数量"
:
"Please enter remaining quantity"
,
"请选择网点"
:
"Please select a network"
,
"请输入兑换积分"
:
"Please enter redemption points"
,
"长度在 0 到 50 个字符"
:
"Length 0 to 50 characters"
,
"请输入英文礼品名称"
:
"Please enter English gift name"
,
"请输入中文礼品名称"
:
"Please enter Chinese gift name"
,
"请先添加准备兑换礼品的会员"
:
"Please add a member who is ready to redeem the gift"
,
"添加会员"
:
"Add Member"
,
"礼品选择"
:
"Gift Selection"
,
"礼品积分"
:
"Gift Points"
,
"当前积分"
:
"Current Score"
,
"本次兑换积分"
:
"Redeem points this time"
,
"兑换后剩余积分"
:
"Remaining points after redemption"
,
"请选择快递公司"
:
"Please select a Courier company"
,
"请输入本次兑换积分"
:
"Please enter this redemption points"
,
"兑换数量"
:
"Redemption Quantity"
,
"请输入兑换数量"
:
"Please enter the amount of redemption"
,
"兑换方式"
:
"Method of Exchange"
,
"兑换入口"
:
"Exchange entry"
,
"收件人姓名"
:
"Recipient's name"
,
"请输入收件人姓名"
:
"Please enter recipient name"
,
"收件人电话"
:
"Recipient phone number"
,
"请输入收件人电话"
:
"Please enter recipient phone number "
,
"收件人地址"
:
"Recipient Address"
,
"请输入收件人地址"
:
"Please enter recipient address"
,
"兑换人"
:
"Changer"
,
"请输入兑换人"
:
"Please enter the changer "
,
"兑换时间"
:
"Redemption Time"
,
"选择兑换时间"
:
"Select the exchange time"
,
"兑换积分大于当前总积分,请重新输入兑换数量"
:
"The redemption points are greater than the current total points, please re-enter the redemption amount"
,
"兑换失败,请填写必要的信息"
:
"Redemption failed, please fill in the necessary information"
,
"请输入会员名称/会员编号/手机号"
:
"Please enter member name/Member ID/mobile number"
,
"兑换成功"
:
"Successful exchange "
,
"是否确认删除此数据"
:
"Do you want to delete this data"
,
"快递日期"
:
"Delivery Date"
,
"选择快递日期"
:
"Select delivery date "
,
"请输入整数或保留小数点后两位"
:
"Please enter an integer number or keep two decimal places"
,
"快递寄出人"
:
"Courier"
,
"请输入快递寄出人"
:
"Please enter an Courier"
,
"请先选择会员再进行操作"
:
"Please select a member before proceeding"
}
src/utils/dict.js
View file @
c526dc21
This diff is collapsed.
Click to expand it.
src/views/ecw/giftManagement/bulkExchange/components/chooseGift.vue
0 → 100644
View file @
c526dc21
<
template
>
<el-dialog
:title=
"$t('选择会员')"
:visible.sync=
"dialogVisible"
width=
"80%"
:before-close=
"dialogBeforeClose"
>
<div
class=
"app-container"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
size=
"small"
:inline=
"true"
label-width=
"120px"
>
<el-form-item
:label=
"$t('当前积分')"
>
<el-row
:gutter=
"10"
>
<el-col
:span=
"8"
>
<dict-selector
clearable
:type=
"DICT_TYPE.QUANTITATIVE_RELATION_SYMBOL"
v-model=
"queryParams.holdScoreOperate"
@
change=
"handleQuery"
>
</dict-selector>
</el-col>
<el-col
:span=
"16"
>
<el-input
v-model.trim=
"queryParams.holdScore"
:placeholder=
"$t('请输入数字')"
clearable
@
keyup.enter.native=
"handleQuery"
onkeyup=
"this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/>
</el-col>
</el-row>
</el-form-item>
<el-form-item
:label=
"$t('关键词')"
>
<el-input
style=
"width: 300px"
v-model.trim=
"queryParams.key"
:placeholder=
"$t('请输入会员名称/会员编号/手机号')"
clearable
@
keyup.enter.native=
"handleQuery"
onkeyup=
"this.value=this.value.replace(/(^\s*)|(\s*$)/g,'')"
/>
</el-form-item>
<el-form-item
:label=
"$t('国家')"
>
<el-select
v-model=
"queryParams.country"
:placeholder=
"$t('请选择国家')"
clearable
@
change=
"handleGetCityList($event)"
size=
"small"
>
<el-option
v-for=
"nodeItem in countryList"
:key=
"nodeItem.id"
:label=
"isChinese ? nodeItem.titleZh : nodeItem.titleEn"
:value=
"nodeItem.id"
/>
</el-select>
</el-form-item>
<el-form-item
:label=
"$t('城市')"
>
<el-select
v-model=
"queryParams.city"
:placeholder=
"$t('请选择城市')"
clearable
size=
"small"
>
<el-option
v-for=
"nodeItem in cityList"
:key=
"nodeItem.id"
:label=
"isChinese ? nodeItem.titleZh : nodeItem.titleEn"
:value=
"nodeItem.id"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
@
click=
"handleQuery"
>
{{
$t
(
"
搜索
"
)
}}
</el-button
>
<el-button
icon=
"el-icon-refresh"
@
click=
"resetQuery"
>
{{
$t
(
"
重置
"
)
}}
</el-button>
</el-form-item>
</el-form>
<el-table
ref=
"multipleTable"
v-loading=
"loading"
@
selection-change=
"handleSelectionChange"
:data=
"memberList"
>
<el-table-column
type=
"selection"
width=
"55"
:selectable=
"selectable"
>
</el-table-column>
<el-table-column
:label=
"$t('会员名称')"
align=
"center"
:prop=
"isChinese ? 'memberNameZh' : 'memberNameEn'"
></el-table-column>
<el-table-column
width=
"140"
:label=
"$t('会员编号')"
align=
"center"
prop=
"id"
></el-table-column>
<el-table-column
width=
"140"
:label=
"$t('手机号')"
align=
"center"
prop=
"mobile"
></el-table-column>
<el-table-column
width=
"140"
align=
"center"
:label=
"$t('国家')"
:prop=
"isChinese ? 'countryNameZh' : 'countryNameEn'"
></el-table-column>
<el-table-column
:label=
"$t('城市')"
align=
"center"
:prop=
"isChinese ? 'cityNameZh' : 'cityNameEn'"
></el-table-column>
<el-table-column
:label=
"$t('当前积分')"
align=
"center"
prop=
"holdScore"
></el-table-column>
</el-table>
<!-- //分页列表 -->
<span
v-show=
"selectedMember.memberList.length > 0"
>
{{
$t
(
"
已选择:
"
)
}}
{{
selectedMember
.
memberName
}}
{{
$t
(
"
共
"
)
}}
<span
style=
"color: red"
>
{{
selectedMember
.
memberList
.
length
}}
</span>
{{
$t
(
"
人
"
)
}}
</span
>
<pagination
v-show=
"total > 0"
:total=
"total"
:page.sync=
"queryParams.pageNo"
:limit.sync=
"queryParams.pageSize"
@
pagination=
"handleQueryPagination"
/>
</div>
<div
slot=
"footer"
>
<el-button
@
click=
"dialogBeforeClose"
>
取 消
</el-button>
<el-button
type=
"primary"
@
click=
"transferSelectMember"
>
确 定
</el-button>
</div>
</el-dialog>
</
template
>
<
script
>
import
{
getDictDatas
,
DICT_TYPE
}
from
"
@/utils/dict
"
;
import
{
getCityList
,
getTradeCountryList
,
getMemberList
,
}
from
"
@/api/ecw/giftManagement
"
;
import
{
color
}
from
"
echarts/lib/export
"
;
export
default
{
name
:
"
chooseGift
"
,
props
:
{
dialogVisible
:
{
type
:
Boolean
,
default
:
false
,
},
memberSelectList
:
{
type
:
Array
,
default
:
()
=>
[],
},
},
watch
:
{
dialogVisible
(
val
)
{
if
(
val
==
true
)
{
this
.
handleQuery
();
}
},
memberSelectList
(
val
)
{
this
.
selectedMember
.
memberList
=
val
;
},
},
data
()
{
return
{
selectedMember
:
{
memberList
:
[],
memberName
:
""
},
countryList
:
[],
cityList
:
[],
total
:
0
,
loading
:
true
,
memberList
:
[],
queryParams
:
{
country
:
null
,
city
:
null
,
endTime
:
""
,
holdScore
:
null
,
holdScoreOperate
:
null
,
key
:
""
,
pageNo
:
1
,
pageSize
:
10
,
startTime
:
""
,
usedScore
:
0
,
usedScoreOperate
:
0
,
},
};
},
computed
:
{
isChinese
()
{
return
this
.
$i18n
.
locale
===
"
zh_CN
"
;
},
},
created
()
{
this
.
handleQuery
();
this
.
getCountryList
();
},
activated
()
{
this
.
handleQuery
();
},
methods
:
{
selectable
(
row
,
index
)
{
if
(
this
.
memberSelectList
.
length
>
0
)
{
return
this
.
memberSelectList
.
some
((
item
)
=>
{
return
item
.
id
!=
row
.
id
;
});
}
else
{
return
true
;
}
},
handleSelectionChange
(
val
)
{
this
.
selectedMember
.
memberList
=
val
;
let
arraryMemberName
=
[];
if
(
val
)
{
this
.
selectedMember
.
memberList
.
forEach
((
element
)
=>
{
if
(
this
.
isChinese
)
{
arraryMemberName
.
push
(
element
.
memberNameZh
);
}
else
{
arraryMemberName
.
push
(
element
.
memberNameEn
);
}
});
}
this
.
selectedMember
.
memberName
=
arraryMemberName
.
join
(
"
、
"
);
},
transferSelectMember
()
{
this
.
dialogBeforeClose
();
this
.
$emit
(
"
transferSelectMemberInfo
"
,
this
.
selectedMember
.
memberList
);
},
dialogBeforeClose
()
{
this
.
loading
=
true
;
this
.
queryParams
=
{
country
:
null
,
city
:
null
,
endTime
:
null
,
holdScore
:
null
,
holdScoreOperate
:
null
,
key
:
null
,
pageNo
:
1
,
pageSize
:
10
,
startTime
:
null
,
usedScore
:
null
,
usedScoreOperate
:
null
,
};
// this.dialogVisible = false;
this
.
$emit
(
"
update:dialogVisible
"
,
false
);
},
getCountryList
()
{
getTradeCountryList
().
then
((
res
)
=>
{
this
.
countryList
=
res
.
data
;
});
},
handleGetCityList
(
id
)
{
let
params
=
{
id
:
id
,
};
getCityList
(
params
).
then
((
res
)
=>
{});
},
handleQuery
()
{
this
.
queryParams
.
pageNo
=
1
;
let
params
=
{
...
this
.
queryParams
};
getMemberList
(
params
).
then
((
res
)
=>
{
this
.
loading
=
false
;
this
.
memberList
=
res
.
data
.
list
;
this
.
total
=
res
.
data
.
total
;
});
},
handleQueryPagination
()
{
let
params
=
{
...
this
.
queryParams
};
getMemberList
(
params
).
then
((
res
)
=>
{
this
.
loading
=
false
;
this
.
memberList
=
res
.
data
.
list
;
this
.
total
=
res
.
data
.
total
;
});
},
resetQuery
()
{
this
.
loading
=
true
;
this
.
queryParams
=
{
country
:
null
,
city
:
null
,
endTime
:
null
,
holdScore
:
null
,
holdScoreOperate
:
null
,
key
:
null
,
pageNo
:
1
,
pageSize
:
10
,
startTime
:
null
,
usedScore
:
null
,
usedScoreOperate
:
null
,
};
this
.
handleQuery
();
},
},
};
</
script
>
src/views/ecw/giftManagement/bulkExchange/index.vue
0 → 100644
View file @
c526dc21
This diff is collapsed.
Click to expand it.
src/views/ecw/giftManagement/components/operatingGift.vue
0 → 100644
View file @
c526dc21
This diff is collapsed.
Click to expand it.
src/views/ecw/giftManagement/index.vue
0 → 100644
View file @
c526dc21
This diff is collapsed.
Click to expand it.
src/views/ecw/memberManagement/exchangeRecord/index.vue
0 → 100644
View file @
c526dc21
<
template
>
<div
class=
"app-container"
>
兑换记录
</div>
</
template
>
src/views/ecw/memberManagement/integralRecord/index.vue
0 → 100644
View file @
c526dc21
<
template
>
<div
class=
"app-container"
>
积分记录
</div>
</
template
>
src/views/ecw/memberManagement/integrationRule/index.vue
0 → 100644
View file @
c526dc21
<
template
>
<div
class=
"app-container"
>
积分规则
</div>
</
template
>
src/views/ecw/memberManagement/memberPointsSummary/index.vue
0 → 100644
View file @
c526dc21
This diff is collapsed.
Click to expand it.
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