Commit 09820606 authored by chenwei's avatar chenwei

inital commit for member

parent 02dc1129
import request from '@/utils/request'
import request from "@/utils/request";
// 获取礼品列表
export function integralList(data) {
return request({
url: '/app-api/ecw/reward/list',
method: 'post',
data
})
url: "/app-api/ecw/reward/list",
method: "post",
data,
});
}
// 获得礼品详情
export function rewardDetails(params) {
return request({
url: "/app-api/ecw/reward/get",
method: "get",
params,
});
}
// 获取网点列表
export function getBranchList(params) {
return request({
url: '/admin-api/ecw/node/get-node-tree-region',
method: 'get',
params
})
url: "/admin-api/ecw/node/get-node-tree-region",
method: "get",
params,
});
}
// 获取积分活动列表
export function integralActivityList(data) {
return request({
url: '/app-api/member/score-rule/list',
method: 'post',
data
})
url: "/app-api/member/score-rule/list",
method: "post",
data,
});
}
// 获取会员信息
export function getMemberInfo(data) {
return request({
url: `/app-api/member/user-score/info?id=${data.id}`,
method: 'post',
data
})
method: "post",
data,
});
}
// 获取活动详情
export function integralActivityDetail(data) {
return request({
url: '/app-api/member/score-rule/get',
method: 'post',
data
})
url: "/app-api/member/score-rule/get",
method: "post",
data,
});
}
//兑换发送验证码
export function exchangeSMSCode(data) {
return request({
url: "/app-api/reward/redeem/send-sms-code",
method: "post",
data,
});
}
//兑换礼品
export function redeemSingleReward(data) {
return request({
url: "/app-api/reward/redeem/single",
method: "post",
data,
});
}
......@@ -12,12 +12,48 @@ export default {
submit: "submit",
cancel: "cancel",
},
exchange: {
confirmNumberLabel: `Selected {value} items, total points:`,
maxInput: "Enter a maximum of 100 characters",
inputPlaceholder: "Please enter content",
inputVerificationCode: "Please enter input Verification Code",
verificationCode: "get code",
activityTime: "activity Time",
exchangeMethod: "exchange Method",
submitOrder: "submit Order",
to: "to",
success: "Successful exchange",
},
addressManager: {
selectAddress: "Select the shipping address",
addAddress: "Add shipping address",
editAddress: "Edit shipping address",
defaultAddress: "Default address",
newAddress: "New address",
choose: "choose",
edit: "edit",
del: "delete",
name: "name",
namePlaceholder: "Please enter your name",
phone: "phone",
phonePlaceHolder: "Please enter a phone number",
address: "address",
addressPlaceholder: "Please enter an address",
saveAddress: "Save the address",
cancel: "cancel",
confirm: "confirm",
noAddress: "No address yet",
dialogTitle:
"This action will permanently delete the address. Do you want to continue?",
prompt: "prompt",
},
route: {
dashboard: "home page",
profile: "profile",
setting: "setting",
advice: "advice",
help: "help",
AddressManager: "Address Manager",
message: "message",
messagedetail: "message text",
notice: "notification",
......@@ -26,6 +62,11 @@ export default {
coupons: "coupons",
customer: "customers",
integral: "integral",
Integrallog: "Integral log",
ExchangeDetails: "Exchange Details",
Exchangelog: "Exchange log",
ExchangeOperate: "Exchange Operate",
DetailsActivity: "Details Activity",
supplier: "suppliers",
ecash: "e-cash",
delivery: "delivery",
......@@ -818,6 +859,53 @@ export default {
status: "status",
createTime: "createTime",
},
integral: {
headerTitle: "Distinguished",
spend: "Redeemed points are",
available: "Available credits are",
logPoints: "Points log ",
logExchange: "Exchange log ",
redeemGifts: "Redeemgifts",
pointsCampaign: "Points Activity",
pointsTitle: "Select exchange outlets",
pointsRemark: "Points are redeemed differently at different points",
outlets: "Please select outlets",
remainder: `{value} remainder`,
orderMail: "Confirm order",
code: "Get the verification code",
codePlaceloader: "Please enter a verification code",
codeError: "Verification code error",
codeTimeText: "Get again after {value} seconds",
remark: "Please enter remarks",
submitOrder: "Submit order",
redeemType: "Method of exchange ",
activityTime: "Active time",
textLength: "Enter up to 100 words ",
totalScore: "Selected ${value} items, total points: {total} points",
totalScore1: "Integral",
addAddress: "Add shipping address",
totalScoreError: "Insufficient points",
illustrate: "Integral illustration",
maxIntegral: "Cumulative maximum points",
date: "expiration date",
rulesIllustrate: "Rulesillustrate",
},
log: {
total: "Total",
integral: "integral",
num: "total {value} pieces",
redeemGifts: "Redeemgifts",
activityTime: "Active time",
exchangeOutlets: "Exchange outlets",
exchangeType: "Method of exchange",
address: "Delivery address ",
courierNum: "Tracking number",
courierCompany: "Express delivery company ",
courierTime: "Delivery date ",
remark: "Remark ",
errorMsg:
"The address cannot be modified after submission, if you need to modify the address, please contact customer service ",
},
supplier: {
none: "none",
supplier: "supplier",
......
This diff is collapsed.
......@@ -113,10 +113,10 @@ const jiedaoRouter = {
meta: { title: "ExchangeOperate" },
},
{
path: "jd-adress-maneger",
component: () => import("@/views/jiedao/profile/adressManager"),
name: "AdressManager",
meta: { title: "AdressManager" },
path: "jd-address-maneger",
component: () => import("@/views/jiedao/profile/addressManager"),
name: "AddressManager",
meta: { title: "AddressManager" },
},
{
path: "jd-exchange-details",
......
``
<template>
<div class="container">
<el-card class="box-card">
<div class="title">
<span class="titleText">{{ title }}</span>
<el-button type="success" size="mini" @click="newAdress">{{
$t("addressManager.newAddress")
}}</el-button>
</div>
<div class="content">
<!-- empty page -->
<el-empty
:description="$t('addressManager.noAddress')"
v-if="addressDataList.length == 0 && pageTypes == 'view'"
></el-empty>
<div class="session" v-else>
<!-- address List -->
<div class="addressList" v-if="pageTypes == 'view'">
<div class="itemBox" v-for="item in addressDataList" :key="item.id">
<div class="listItem">
<div class="left">
<div class="address">
{{ item.address }}
<span class="default">{{
item.isDefault === 0
? $t(" addressManager.defaultAddress")
: ""
}}</span>
</div>
<div class="nameInfo">
<span>{{ item.name }}</span>
<span class="mobile"
>+{{ item.areaCode }} {{ item.phone }}</span
>
</div>
</div>
<div class="right">
<el-button type="text" @click="handleSelect(item)">{{
$t("addressManager.choose")
}}</el-button>
<el-button type="text" @click="handleEdit(item)">{{
$t("addressManager.edit")
}}</el-button>
<el-button type="text" @click="handleDelDialog(item)">{{
$t("addressManager.del")
}}</el-button>
</div>
</div>
<el-divider></el-divider>
</div>
</div>
<!-- new/ edit Adress -->
<div class="editBox" v-else>
<el-form
ref="addressForm"
:rules="rules"
:model="addressForm"
label-width="80px"
>
<el-form-item :label="$t('addressManager.name')" prop="name">
<el-input
v-model="addressForm.name"
:placeholder="$t('addressManager.namePlaceholder')"
></el-input>
</el-form-item>
<el-form-item :label="$t('addressManager.phone')" required>
<el-row>
<el-col :span="5">
<el-form-item>
<el-select v-model="addressForm.areaCode">
<el-option
v-for="item in countryAreaCodeList"
:key="item.id"
:label="
'+' +
item.tel +
` ${
language == 'zh_CN' ? item.nameZh : item.nameEn
}`
"
:value="item.tel"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item prop="phone">
<el-input
ref="phone"
v-model="addressForm.phone"
:placeholder="$t('login.mobile')"
name="phone"
maxlength="11"
type="text"
tabindex="1"
autocomplete="on"
/>
</el-form-item>
</el-col>
</el-row>
</el-form-item>
<el-form-item
:label="$t('addressManager.address')"
prop="address"
>
<el-input
type="textarea"
v-model="addressForm.address"
></el-input>
</el-form-item>
<el-form-item :label="$t('addressManager.defaultAddress')">
<el-switch
v-model="addressForm.isDefault"
:active-value="0"
inactive-value="1"
></el-switch>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">{{
$t("addressManager.saveAddress")
}}</el-button>
<el-button @click="resetForm">{{
$t("addressManager.cancel")
}}</el-button>
</el-form-item>
</el-form>
</div>
</div>
</div>
</el-card>
</div>
</template>
<script>
import { getCountryList } from "@/api/user";
import {
addressadd,
addresslist,
addressedit,
addressdelete,
} from "@/api/address";
export default {
name: "AddressManager",
data() {
return {
countryAreaCodeList: [],
addressDataList: [],
pageTypes: "view",
rules: {
name: [
{
required: true,
message: this.$t("addressManager.namePlaceholder"),
trigger: "blur",
},
],
phone: [
{
required: true,
message: this.$t("addressManager.phonePlaceHolder"),
trigger: "blur",
},
],
address: [
{
required: true,
message: this.$t("addressManager.addessPlaceHolder"),
trigger: "blur",
},
],
},
addressForm: {
name: "",
areaCode: "86",
isDefault: "",
memberId: this.$store.getters.id,
phone: "",
address: "",
},
};
},
computed: {
title() {
switch (this.pageTypes) {
case "view":
return this.$t("addressManager.selectAddress");
case "add":
return this.$t("addressManager.addAddress");
case "edit":
default:
return this.$t("addressManager.editAddress");
}
},
language() {
return this.$store.getters.language;
},
},
watch: {
selectedNodeId(val) {
this.nodeId = val[val.length - 1];
this.getIntegralList();
},
},
created() {
this.sycnInfo();
},
methods: {
handleSelect(item) {
this.$route.params.addressId = item.id;
this.$router.back();
},
resetForm() {
this.$refs["addressForm"].resetFields();
this.addressForm = {
name: "",
areaCode: "86",
isDefault: "",
memberId: this.$store.getters.id,
phone: "",
address: "",
};
this.pageTypes = "view";
},
sycnInfo() {
// areaCode List
getCountryList().then((r) => {
this.countryAreaCodeList = r.data;
});
// address List
this.getAdressList();
},
getAdressList() {
const id = this.$store.getters.id;
addresslist({ id }).then((r) => {
this.addressDataList = r.data;
});
},
handleEdit(item) {
this.pageTypes = "edit";
this.addressForm = item;
},
newAdress() {
this.pageTypes = "add";
},
onSubmit() {
const params = { ...this.addressForm };
this.$refs["addressForm"].validate((valid) => {
if (valid) {
if (this.pageTypes == "add") {
this.newAddressSubmit(params);
} else {
this.saveAddressSubmit(params);
}
} else {
console.log("error submit!!");
return false;
}
});
},
saveAddressSubmit(params) {
addressedit(params).then((res) => {
this.$message({
message: "success",
type: "success",
});
this.pageTypes = "view";
this.$refs["addressForm"].resetFields();
this.getAdressList();
});
},
newAddressSubmit(params) {
addressadd(params).then((res) => {
this.$message({
message: "success",
type: "success",
});
this.pageTypes = "view";
this.$refs["addressForm"].resetFields();
this.getAdressList();
});
},
handleDelDialog(item) {
this.$confirm(
this.$t("addressManager.dialogTitle"),
this.$t("addressManager.prompt"),
{
confirmButtonText: this.$t("addressManager.confirm"),
cancelButtonText: this.$t("addressManager.cancel"),
type: "warning",
}
)
.then(() => {
this.handleDel(item);
})
.catch(() => {
this.$message({
type: "info",
message: "cancel",
});
});
},
async handleDel(item) {
try {
const { code, data } = await addressdelete(item.id);
if (code == 0) {
this.$message({
message: "success",
type: "success",
});
this.pageTypes = "view";
this.getAdressList();
}
} catch (err) {
console.log(err);
}
},
},
};
</script>
<style scoped>
.address {
font-size: 14px;
}
.default {
font-size: 10px;
color: #f35a38;
}
.session {
padding-top: 20px;
}
.titleText {
padding-right: 20px;
}
.editBox {
padding: 50px 0;
}
.listItem {
display: flex;
}
.nameInfo {
font-size: 12px;
padding-top: 6px;
color: rgb(170, 170, 170);
}
.left {
flex: 1;
}
</style>
<template>
<div class="container">
<el-card class="box-card">
<div class="title">
<span class="titleText">{{ title }}</span>
<el-button type="success" size="mini" @click="newAdress">{{
$t("新增地址")
}}</el-button>
</div>
<div class="session">
<!-- adress List -->
<div class="adressList" v-if="pageTypes == 'view'">
<div class="listItem">
<div class="left"></div>
<div class="right">
<el-button type="text">{{ $t("选择") }}</el-button>
<el-button type="text">{{ $t("编辑") }}</el-button>
</div>
</div>
<el-divider></el-divider>
</div>
<!-- new/ edit Adress -->
<div class="editBox" v-else>
<el-form
ref="form"
:rules="rules"
:model="adressForm"
label-width="80px"
>
<el-form-item label="姓名" prop="name">
<el-input
v-model="adressForm.name"
placeholder="请输入姓名"
></el-input>
</el-form-item>
<el-form-item label="电话">
<el-row>
<el-col :span="5">
<el-form-item>
<el-select v-model="adressForm.areaCode">
<el-option
v-for="item in countryAreaCodeList"
:key="item.id"
:label="
'+' +
item.tel +
` ${language == 'zh_CN' ? item.nameZh : item.nameEn}`
"
:value="item.tel"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="16">
<el-form-item prop="phone">
<el-input
ref="phone"
v-model="adressForm.phone"
:placeholder="$t('login.mobile')"
name="phone"
maxlength="11"
type="text"
tabindex="1"
autocomplete="on"
/>
</el-form-item>
</el-col>
</el-row>
</el-form-item>
<el-form-item label="地址" prop="address">
<el-input type="textarea" v-model="adressForm.address"></el-input>
</el-form-item>
<el-form-item label="默认地址">
<el-switch
v-model="adressForm.isDefault"
active-value="0"
inactive-value="1"
></el-switch>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="onSubmit">保存地址</el-button>
<el-button>取消</el-button>
</el-form-item>
</el-form>
</div>
</div>
<!-- -->
</el-card>
</div>
</template>
<script>
import { integralList } from "@/api/integral";
import { getCountryList } from "@/api/user";
import { addressadd, addresslist } from "@/api/address";
export default {
name: "AdressManager",
data() {
return {
countryAreaCodeList: [],
addressList: [],
pageTypes: "view",
rules: {
name: [{ required: true, message: "请输入姓名", trigger: "blur" }],
phone: [{ required: true, message: "请输入电话", trigger: "blur" }],
adress: [{ required: true, message: "请输入地址", trigger: "blur" }],
},
adressForm: {
name: "",
areaCode: "86",
isDefault: "",
memberId: this.$store.getters.id,
phone: "",
adress: "",
},
};
},
computed: {
title() {
switch (this.pageTypes) {
case "view":
return this.$t("选择收货地址");
case "add":
return this.$t("新增收货地址");
case "edit":
default:
return this.$t("编辑收货地址");
}
},
language() {
return this.$store.getters.language;
},
},
watch: {
selectedNodeId(val) {
this.nodeId = val[val.length - 1];
this.getIntegralList();
},
},
created() {
this.sycnInfo();
},
methods: {
sycnInfo() {
// areaCode List
getCountryList().then((r) => {
this.countryAreaCodeList = r.data;
});
// adress List
this.getAdressList();
},
getAdressList() {
const id = this.$store.getters.id;
addresslist({ id }).then((r) => {
this.addressList = r.data;
});
},
newAdress() {
this.pageTypes = "add";
},
onSubmit() {
const params = { ...this.adressForm };
addressadd(params).then((res) => {
this.$message({
message: "保存成功",
type: "success",
});
this.pageTypes = "view";
this.getAdressList();
});
},
// 获取礼品列表
async getIntegralList() {
try {
const memberId = this.$store.getters.id;
const { code, data } = await integralList({
memberId,
nodeId: this.nodeId,
});
if (code !== 0) return;
this.list = data;
} catch (err) {
console.log(err);
}
},
// 跳转详情
toDetail(id) {
this.$router.push({ path: `/jiedao/jd-exchange-operate`, query: { id } });
},
},
};
</script>
<style scoped>
.titleText {
padding-right: 20px;
}
.editBox {
padding: 50px 0;
}
.listItem {
display: flex;
}
.left {
flex: 1;
}
</style>
<template>
<div class="container">
<div class="activity-title">{{
locale === 'zh_CN' ? detailInfo.titleZh : detailInfo.titleEn
}}</div>
<div class="activity-title">
{{ locale === "zh_CN" ? detailInfo.titleZh : detailInfo.titleEn }}
</div>
<div class="img-box">
<img
class="img"
:src="locale === 'zh_CN' ? detailInfo.coverImageZh : detailInfo.coverImageEn"
>
:src="
locale === 'zh_CN' ? detailInfo.coverImageZh : detailInfo.coverImageEn
"
/>
</div>
<div class="container-main">
<div v-if="detailInfo.extraRecommend" class="activity-remark">
{{
locale === 'zh_CN'
locale === "zh_CN"
? detailInfo.extraRecommend.shareContentZh
: detailInfo.extraRecommend.shareContentEn
}}
</div>
<div class="activity-cell">
<div class="cell-label">{{ $t('integral.illustrate') }}</div>
<div class="cell-label">{{ $t("integral.illustrate") }}</div>
<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>
</div>
<div class="activity-cell">
<div class="cell-label">{{ $t('integral.maxIntegral') }}</div>
<div class="cell-label">{{ $t("integral.maxIntegral") }}</div>
<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.maxScoreTotal }}</div>
</div>
</div>
<div class="activity-cell">
<div class="cell-label">{{ $t('integral.date') }}</div>
<div class="cell-label">{{ $t("integral.date") }}</div>
<div class="cell-content">
{{ getTimeRange(detailInfo.startTime, detailInfo.endTime) }}
</div>
</div>
<div class="activity-cell">
<div class="cell-label">{{ $t('integral.rulesIllustrate') }}</div>
<div class="cell-label">{{ $t("integral.rulesIllustrate") }}</div>
<div class="cell-content">
{{ locale === 'zh_CN' ? detailInfo.descZh : detailInfo.descEn }}
{{ locale === "zh_CN" ? detailInfo.descZh : detailInfo.descEn }}
</div>
</div>
</div>
......@@ -48,50 +50,50 @@
</template>
<script>
import { integralActivityDetail } from '@/api/integral'
import { integralActivityDetail } from "@/api/integral";
export default {
data() {
return {
detailInfo: {}
}
detailInfo: {},
};
},
computed: {
locale() {
return this.$store.getters.language
}
return this.$store.getters.language;
},
},
created() {
this.getDetail()
this.getDetail();
},
methods: {
// 获取详情
async getDetail() {
try {
const { code, data } = await integralActivityDetail({
id: this.$route.query.id
})
if (code !== 0) return
this.detailInfo = data
id: this.$route.query.id,
});
if (code !== 0) return;
this.detailInfo = data;
} catch (err) {
console.log(err)
console.log(err);
}
},
// 时间范围返回
getTimeRange(start, end) {
const formatDate = (timestamp) => {
const date = new Date(timestamp)
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
const seconds = String(date.getSeconds()).padStart(2, '0')
return `${year}:${month}:${day} ${hours}:${minutes}:${seconds}`
}
return `${formatDate(start)}${formatDate(end)}`
}
}
}
const date = new Date(timestamp);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0");
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}:${month}:${day} ${hours}:${minutes}:${seconds}`;
};
return `${formatDate(start)}${this.$t("exchange.to")}${formatDate(end)}`;
},
},
};
</script>
<style lang="scss" scoped>
......@@ -155,7 +157,7 @@ export default {
font-weight: 700;
margin-right: 10px;
&::after {
content: ':';
content: ":";
}
}
</style>
......@@ -2,78 +2,98 @@
<div class="container">
<div class="header">
<div class="header-image">
<img class="imgs" src="@/assets/log/exchange.png">
<img class="imgs" src="@/assets/log/exchange.png" />
</div>
<div class="header-content">
<div class="header-content-title">
{{ locale === 'zh_CN' ? detailInfo.statusZh : detailInfo.statusEn }}
{{ locale === "zh_CN" ? detailInfo.statusZh : detailInfo.statusEn }}
</div>
<div class="header-content-text">
<div class="header-content-small">{{ $t('log.total') }}</div>{{ detailInfo.totalCount }}{{ $t('log.integral') }}
<div class="header-content-small">{{ $t("log.total") }}</div>
{{ detailInfo.totalCount }}{{ $t("log.integral") }}
</div>
</div>
</div>
<div class="nav">
<div class="nav-image">
<img class="imgs" :src="locale === 'zh_CN' ? detailInfo.imgZh : detailInfo.imgEn">
<img
class="imgs"
:src="locale === 'zh_CN' ? detailInfo.imgZh : detailInfo.imgEn"
/>
</div>
<div class="nav-content">
<div class="nav-content-text">
{{ locale === 'zh_CN' ? detailInfo.rewardTitleZh : detailInfo.rewardTitleEn }}
{{
locale === "zh_CN"
? detailInfo.rewardTitleZh
: detailInfo.rewardTitleEn
}}
</div>
<div class="nav-content-tag">
<div class="tag-image">
<img class="img" src="@/assets/integral/score_b.png">{{ detailInfo.oncePointsRequire }}
<img class="img" src="@/assets/integral/score_b.png" />{{
detailInfo.oncePointsRequire
}}
</div>
<div class="tag-text">
{{ $t('log.num',{value : detailInfo.rewardCount}) }}
{{ $t("log.num", { value: detailInfo.rewardCount }) }}
</div>
</div>
</div>
</div>
<div class="main">
<div class="main-cell">
<div class="cell-label">{{ $t('log.activityTime') }}</div>
<div class="cell-label">{{ $t("log.activityTime") }}</div>
<div class="cell-content">
{{ getTimeRange(detailInfo.startTime, detailInfo.endTime) }}
</div>
</div>
<div class="main-cell">
<div class="cell-label">{{ $t('log.exchangeOutlets') }}</div>
<div class="cell-label">{{ $t("log.exchangeOutlets") }}</div>
<div class="cell-content">
{{ locale === 'zh_CN' ? detailInfo.nodeTitleZh : detailInfo.nodeTitleEn }}
{{
locale === "zh_CN" ? detailInfo.nodeTitleZh : detailInfo.nodeTitleEn
}}
</div>
</div>
<div class="main-cell">
<div class="cell-label">{{ $t('log.exchangeType') }}</div>
<div class="cell-label">{{ $t("log.exchangeType") }}</div>
<div class="cell-content">
{{ locale === 'zh_CN' ? detailInfo.redeemTypeZh : detailInfo.redeemTypeEn }}
{{
locale === "zh_CN"
? detailInfo.redeemTypeZh
: detailInfo.redeemTypeEn
}}
</div>
</div>
<template v-if="detailInfo.redeemType != 1">
<div class="main-cell">
<div class="cell-label">{{ $t('log.address') }}</div>
<div class="cell-label">{{ $t("log.address") }}</div>
<div class="cell-content">
{{ detailInfo.recipientName }}&ensp;+{{ detailInfo.recipientPhoneNum }},
{{ detailInfo.recipientName }}&ensp;+{{
detailInfo.recipientPhoneNum
}},
{{ detailInfo.recipientAddress }}
<div class="red">{{ $t('log.errorMsg') }}</div>
<div class="red">{{ $t("log.errorMsg") }}</div>
</div>
</div>
<div class="main-cell">
<div class="cell-label">{{ $t('log.courierNum') }}</div>
<div class="cell-label">{{ $t("log.courierNum") }}</div>
<div class="cell-content">{{ detailInfo.expressNo }}</div>
</div>
<div class="main-cell">
<div class="cell-label">{{ $t('log.courierCompany') }}</div>
<div class="cell-label">{{ $t("log.courierCompany") }}</div>
<div class="cell-content">{{ detailInfo.courierCompanyName }}</div>
</div>
<div class="main-cell">
<div class="cell-label">{{ $t('log.courierTime') }}</div>
<div class="cell-content">{{ formatDate(detailInfo.expressDate) }}</div>
<div class="cell-label">{{ $t("log.courierTime") }}</div>
<div class="cell-content">
{{ formatDate(detailInfo.expressDate) }}
</div>
</div>
</template>
<div class="main-cell">
<div class="cell-label">{{ $t('log.remark') }}</div>
<div class="cell-label">{{ $t("log.remark") }}</div>
<div class="cell-content">{{ detailInfo.remark }}</div>
</div>
</div>
......@@ -81,52 +101,54 @@
</template>
<script>
import { exchangeLogDetail } from '@/api/log'
import { exchangeLogDetail } from "@/api/log";
export default {
data() {
return {
detailInfo: {}
}
detailInfo: {},
};
},
computed: {
locale() {
return this.$store.getters.language
}
return this.$store.getters.language;
},
},
created() {
this.getDetail()
this.getDetail();
},
methods: {
// 获取详情
async getDetail() {
try {
const { code, data } = await exchangeLogDetail({
redeemId: this.$route.query.id
})
if (code !== 0) return
this.detailInfo = data
redeemId: this.$route.query.id,
});
if (code !== 0) return;
this.detailInfo = data;
} catch (err) {
console.log(err)
console.log(err);
}
},
// 时间范围返回
getTimeRange(start, end) {
return `${this.formatDate(start)}至${this.formatDate(end)}`
return `${this.formatDate(start)}${this.$t(
"exchange.to"
)}${this.formatDate(end)}`;
},
// 时间戳转换为YYYY-MM-DD HH:mm:ss
formatDate(timestamp) {
if (!timestamp) return ''
const date = new Date(timestamp)
const year = date.getFullYear()
const month = String(date.getMonth() + 1).padStart(2, '0')
const day = String(date.getDate()).padStart(2, '0')
const hours = String(date.getHours()).padStart(2, '0')
const minutes = String(date.getMinutes()).padStart(2, '0')
const seconds = String(date.getSeconds()).padStart(2, '0')
return `${year}:${month}:${day} ${hours}:${minutes}:${seconds}`
}
}
}
if (!timestamp) return "";
const date = new Date(timestamp);
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, "0");
const day = String(date.getDate()).padStart(2, "0");
const hours = String(date.getHours()).padStart(2, "0");
const minutes = String(date.getMinutes()).padStart(2, "0");
const seconds = String(date.getSeconds()).padStart(2, "0");
return `${year}:${month}:${day} ${hours}:${minutes}:${seconds}`;
},
},
};
</script>
<style lang="scss" scoped>
......@@ -154,7 +176,7 @@ export default {
}
.header-content-text {
display: flex;
align-items: end;
align-items: flex-end;
font-size: 14px;
color: #666;
......@@ -221,7 +243,7 @@ export default {
margin-top: 10px;
width: 100%;
display: flex;
align-items: start;
align-items: flex-start;
justify-content: space-between;
.cell-label {
font-size: 14px;
......@@ -229,7 +251,7 @@ export default {
font-weight: 700;
margin-right: 10px;
&::after {
content: ':';
content: ":";
}
}
.cell-content {
......
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