Commit 21f6d118 authored by chenwei's avatar chenwei

web side inital commit for memeber module

parent 09820606
...@@ -889,6 +889,11 @@ export default { ...@@ -889,6 +889,11 @@ export default {
maxIntegral: "Cumulative maximum points", maxIntegral: "Cumulative maximum points",
date: "expiration date", date: "expiration date",
rulesIllustrate: "Rulesillustrate", rulesIllustrate: "Rulesillustrate",
registerLabel: "{val} points for successful registration ",
referralCodeLabel:
"Get {val} points for every person invited to register and log in ",
shareLabel: "Get {val} points per click after sharing on social platforms ",
orderRuleLabel: "{low}{unit}-{high}{unit} get {score} points ",
}, },
log: { log: {
total: "Total", total: "Total",
......
...@@ -1150,6 +1150,10 @@ export default { ...@@ -1150,6 +1150,10 @@ export default {
addAddress: "新增收货地址", addAddress: "新增收货地址",
totalScoreError: "积分不足", totalScoreError: "积分不足",
illustrate: "积分说明", illustrate: "积分说明",
registerLabel: "注册成功即可获得{val}积分",
referralCodeLabel: "每邀请1人注册并登录获得{val}积分",
shareLabel: "分享到社交平台后,每次点击获得{val}积分",
orderRuleLabel: " {low}{unit}-{high}{unit}获得{score}积分",
maxIntegral: "累计最高积分", maxIntegral: "累计最高积分",
date: "有效期", date: "有效期",
rulesIllustrate: "规则说明", rulesIllustrate: "规则说明",
......
...@@ -113,7 +113,7 @@ const jiedaoRouter = { ...@@ -113,7 +113,7 @@ const jiedaoRouter = {
meta: { title: "ExchangeOperate" }, meta: { title: "ExchangeOperate" },
}, },
{ {
path: "jd-address-maneger", path: "jd-address-manager",
component: () => import("@/views/jiedao/profile/addressManager"), component: () => import("@/views/jiedao/profile/addressManager"),
name: "AddressManager", name: "AddressManager",
meta: { title: "AddressManager" }, meta: { title: "AddressManager" },
......
<template> <template>
<div class="integral-exchange"> <div class="integral-exchange">
<div class="header"> <div class="header">
<div class="text">{{ $t('integral.pointsTitle') }}</div> <div class="text">{{ $t("integral.pointsTitle") }}</div>
<div class="red">{{ $t('integral.pointsRemark') }}</div> <div class="red">{{ $t("integral.pointsRemark") }}</div>
</div> </div>
<div class="content"> <div class="content">
<!-- <div class="content-text">1、2、3</div> <!-- <div class="content-text">1、2、3</div>
...@@ -10,32 +10,50 @@ ...@@ -10,32 +10,50 @@
<el-cascader <el-cascader
v-model="selectedNodeId" v-model="selectedNodeId"
:props="{ :props="{
label:language == 'zh_CN' ?'labelZh' : 'labelEn', checkStrictly,
value:'id' label: language == 'zh_CN' ? 'labelZh' : 'labelEn',
value: 'id',
}" }"
class="cascader" class="cascader"
:options="nodeList" :options="nodeList"
clearable @visible-change="changeSelect"
:placeholder="$t('integral.outlets')" :placeholder="$t('integral.outlets')"
/> />
</div> </div>
<div class="list"> <div class="list">
<div v-for="item in list" :key="item.id" class="list-item" @click="toDetail(item.id)"> <div
v-for="item in list"
:key="item.id"
class="list-item"
@click="toDetail(item.id)"
>
<div class="item-image"> <div class="item-image">
<img class="imgs" :src="language == 'zh_CN' ? item.imgZh : item.imgEn" alt=""> <img
class="imgs"
:src="language == 'zh_CN' ? item.imgZh : item.imgEn"
alt=""
/>
<div class="gift-tag"> <div class="gift-tag">
<div class="tags"> <div class="tags">
<img class="tag-image" src="@/assets/integral/score.png"> <img class="tag-image" src="@/assets/integral/score.png" />
<div class="tag-text">{{ item.pointsRequire }}</div> <div class="tag-text">{{ item.pointsRequire }}</div>
</div> </div>
</div> </div>
<div class="foot-tag">{{ $t('integral.remainder',{value:item.quantityRemain}) }}</div> <div class="foot-tag">
{{ $t("integral.remainder", { value: item.quantityRemain }) }}
</div>
</div>
<div class="item-text">
{{ language == "zh_CN" ? item.titleZh : item.titleEn }}
</div> </div>
<div class="item-text">{{ language == 'zh_CN' ? item.titleZh : item.titleEn }}</div>
<div class="item-menu"> <div class="item-menu">
<template v-if="item.pickMethodList"> <template v-if="item.pickMethodList">
<div v-for="ele in item.pickMethodList" :key="ele.value" class="menu-text"> <div
{{ language == 'zh_CN' ? ele.labelZh : ele.labelEn }} v-for="ele in item.pickMethodList"
:key="ele.value"
class="menu-text"
>
{{ language == "zh_CN" ? ele.labelZh : ele.labelEn }}
</div> </div>
</template> </template>
</div> </div>
...@@ -45,64 +63,77 @@ ...@@ -45,64 +63,77 @@
</template> </template>
<script> <script>
import { integralList, getBranchList } from '@/api/integral' import { integralList, getBranchList } from "@/api/integral";
export default { export default {
name: 'IntegralExchange', name: "IntegralExchange",
data() { data() {
return { return {
list: [], list: [],
nodeId: null, nodeId: null,
nodeList: [], nodeList: [],
selectedNodeId: null selectedNodeId: null,
} checkStrictly: true,
};
}, },
computed: { computed: {
language() { language() {
return this.$store.getters.language return this.$store.getters.language;
} },
}, },
watch: { watch: {
selectedNodeId(val) { selectedNodeId(val) {
this.nodeId = val[val.length - 1] if (val && val.length > 2) {
this.getIntegralList() this.nodeId = val[val.length - 1];
} this.getIntegralList();
}
},
}, },
created() { created() {
this.getIntegralList() this.getIntegralList();
this.getNodeInfo() this.getNodeInfo();
}, },
methods: { methods: {
changeSelect() {
this.checkStrictly = false;
},
// 获取礼品列表 // 获取礼品列表
async getIntegralList() { async getIntegralList() {
try { try {
const memberId = this.$store.getters.id const memberId = this.$store.getters.id;
const { code, data } = await integralList({ const { code, data } = await integralList({
memberId, memberId,
nodeId: this.nodeId nodeId: this.nodeId,
}) });
if (code !== 0) return if (code !== 0) return;
this.list = data this.list = data.list;
if (!this.nodeId) {
if (data.city) {
this.selectedNodeId = [data.country, data.city];
} else {
this.selectedNodeId = [data.country];
}
}
} catch (err) { } catch (err) {
console.log(err) console.log(err);
} }
}, },
// 获取网点信息 // 获取网点信息
async getNodeInfo() { async getNodeInfo() {
try { try {
const { code, data } = await getBranchList() const { code, data } = await getBranchList();
if (code !== 0) return if (code !== 0) return;
this.nodeList = data this.nodeList = data;
console.log(data) console.log(data);
} catch (err) { } catch (err) {
console.log(err) console.log(err);
} }
}, },
// 跳转详情 // 跳转详情
toDetail(id) { toDetail(id) {
this.$router.push({ path: `/jiedao/jd-exchange-operate`, query: { id }}) this.$router.push({ path: `/jiedao/jd-exchange-operate`, query: { id } });
} },
} },
} };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
...@@ -113,13 +144,13 @@ export default { ...@@ -113,13 +144,13 @@ export default {
width: 100%; width: 100%;
height: 60px; height: 60px;
align-items: center; align-items: center;
.text{ .text {
padding-right: 10px; padding-right: 10px;
font-size: 22px; font-size: 22px;
font-weight: 700; font-weight: 700;
border-right: 4px solid #1890FF; border-right: 4px solid #1890ff;
} }
.red{ .red {
font-size: 14px; font-size: 14px;
color: red; color: red;
margin-left: 5px; margin-left: 5px;
...@@ -143,43 +174,43 @@ export default { ...@@ -143,43 +174,43 @@ export default {
padding-bottom: 10px; padding-bottom: 10px;
} }
} }
.list{ .list {
padding: 20px 0; padding: 20px 0;
display: grid; display: grid;
width: 100%; width: 100%;
gap: 20px; gap: 20px;
grid-template-columns: repeat(5, 1fr); grid-template-columns: repeat(5, 1fr);
.list-item{ .list-item {
width: 180px; width: 180px;
box-sizing: border-box; box-sizing: border-box;
} }
.item-image{ .item-image {
width: 180px; width: 180px;
height: 120px; height: 120px;
position: relative; position: relative;
.imgs{ .imgs {
width: 100%; width: 100%;
height: 100%; height: 100%;
object-fit: cover; object-fit: cover;
} }
} }
.item-text{ .item-text {
font-size: 16px; font-size: 16px;
color: #333; color: #333;
padding: 10px 0; padding: 10px 0;
} }
.item-menu{ .item-menu {
display: flex; display: flex;
align-items: center; align-items: center;
flex-wrap: wrap; flex-wrap: wrap;
gap: 5px; gap: 5px;
.menu-text{ .menu-text {
padding: 4px 10px; padding: 4px 10px;
font-size: 14px; font-size: 14px;
color: #EF8D15; color: #ef8d15;
box-sizing: border-box; box-sizing: border-box;
border: 2px solid #EF8D15; border: 2px solid #ef8d15;
border-radius: 20px; border-radius: 20px;
} }
} }
...@@ -236,11 +267,10 @@ export default { ...@@ -236,11 +267,10 @@ export default {
border-top-right-radius: 5px; border-top-right-radius: 5px;
border-bottom-left-radius: 5px; border-bottom-left-radius: 5px;
} }
.cascader{ .cascader {
width: 100%; width: 100%;
} }
::v-deep{ ::v-deep {
.cascader .el-input__inner { .cascader .el-input__inner {
border: none !important; border: none !important;
box-shadow: none !important; box-shadow: none !important;
......
...@@ -19,14 +19,50 @@ ...@@ -19,14 +19,50 @@
: detailInfo.extraRecommend.shareContentEn : detailInfo.extraRecommend.shareContentEn
}} }}
</div> </div>
<div
class="share-label"
v-if="detailInfo.type == 4"
v-html="
locale === 'zh_CN'
? detailInfo.extraShare.activityDescZh
: detailInfo.extraShare.activityDescEn
"
></div>
<div class="activity-cell"> <div class="activity-cell">
<div class="cell-label">{{ $t("integral.illustrate") }}</div> <div class="cell-label">{{ $t("integral.illustrate") }}</div>
<div class="cell-content"> <div class="cell-content">
<img class="cell-image" src="@/assets/integral/score_b.png" /> <img class="cell-image" src="@/assets/integral/score_b.png" />
<div class="cell-text">{{ detailInfo.getScoreOnce }}</div> <div class="cell-text">
<span v-if="detailInfo.type == 4">{{
$t("integral.shareLabel", { val: detailInfo.getScoreOnce })
}}</span>
<span v-if="detailInfo.type == 3">{{
$t("integral.referralCodeLabel", { val: detailInfo.getScoreOnce })
}}</span>
<span v-if="detailInfo.type == 2">{{
$t("integral.registerLabel", { val: detailInfo.getScoreOnce })
}}</span>
<div v-if="detailInfo.type == 1">
<div
class="rule"
v-for="ruleItem in detailInfo.extraOrderV.orderVRule"
:key="ruleItem.low"
>
{{
$t("integral.orderRuleLabel", {
low: ruleItem.low,
high: ruleItem.high,
score: ruleItem.score,
unit:
detailInfo.extraOrderVtransportType == 1 ? "" : "kg",
})
}}
</div>
</div>
</div>
</div> </div>
</div> </div>
<div class="activity-cell"> <div class="activity-cell" v-if="detailInfo.type != 2">
<div class="cell-label">{{ $t("integral.maxIntegral") }}</div> <div class="cell-label">{{ $t("integral.maxIntegral") }}</div>
<div class="cell-content"> <div class="cell-content">
<img class="cell-image" src="@/assets/integral/score_b.png" /> <img class="cell-image" src="@/assets/integral/score_b.png" />
...@@ -88,7 +124,7 @@ export default { ...@@ -88,7 +124,7 @@ export default {
const hours = String(date.getHours()).padStart(2, "0"); const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0"); const minutes = String(date.getMinutes()).padStart(2, "0");
const seconds = String(date.getSeconds()).padStart(2, "0"); const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}:${month}:${day} ${hours}:${minutes}:${seconds}`; return `${year}:${month}:${day}`;
}; };
return `${formatDate(start)}${this.$t("exchange.to")}${formatDate(end)}`; return `${formatDate(start)}${this.$t("exchange.to")}${formatDate(end)}`;
}, },
......
...@@ -99,7 +99,7 @@ ...@@ -99,7 +99,7 @@
v-model="paramsInfo.rewardCount" v-model="paramsInfo.rewardCount"
@change="handleChange" @change="handleChange"
size="mini" size="mini"
:min="0" :min="1"
></el-input-number> ></el-input-number>
</div> </div>
<el-divider></el-divider> <el-divider></el-divider>
...@@ -171,7 +171,7 @@ export default { ...@@ -171,7 +171,7 @@ export default {
memberId: this.$store.getters.id, memberId: this.$store.getters.id,
rewardId: this.$route.query.id, rewardId: this.$route.query.id,
redeemType: "1", redeemType: "1",
rewardCount: 0, rewardCount: 1,
entrance: "3", entrance: "3",
remark: "", remark: "",
code: "", code: "",
...@@ -243,6 +243,7 @@ export default { ...@@ -243,6 +243,7 @@ export default {
this.rewardDetailsInfo = res.data; this.rewardDetailsInfo = res.data;
this.paramsInfo.redeemType = this.paramsInfo.redeemType =
this.rewardDetailsInfo.pickMethodList[0].value; this.rewardDetailsInfo.pickMethodList[0].value;
this.handleChange();
}); });
}, },
getPickList(label) { getPickList(label) {
...@@ -259,7 +260,7 @@ export default { ...@@ -259,7 +260,7 @@ export default {
if (this.paramsInfo.redeemType == "1") { if (this.paramsInfo.redeemType == "1") {
return; return;
} }
this.$router.push("/jiedao/jd-address-maneger"); this.$router.push("/jiedao/jd-address-manager");
}, },
}, },
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment