升级Vue3,iView替换ElementPlus

- 删除babel配置、更新依赖与入口初始化
- 全量替换UI组件、样式适配,新增迁移文档与标签/过滤器自动化替换脚本
This commit is contained in:
lifenlong
2026-06-05 17:49:43 +08:00
parent 615ee91511
commit 832fda813b
322 changed files with 25693 additions and 24453 deletions

View File

@@ -6,27 +6,20 @@
<div>
<router-link to="/"><img :src="$store.state.logoImg" /></router-link>
<div>
购物车(<span>{{ goodsTotal }}</span
>)
购物车(<span>{{ goodsTotal }}</span>)
</div>
</div>
</div>
<Divider />
<el-divider />
<!-- 购物车主体 -->
<div class="cart-content width_1200 center">
<div class="available-area">
<div class="cart-steps">
<span :class="stepIndex == 0 ? 'active' : ''">1.我的购物车</span>
<Icon
:class="stepIndex == 0 ? 'active-arrow' : ''"
custom="icomoon icon-next"
></Icon>
<i class="icomoon icon-next" :class="stepIndex == 0 ? 'active-arrow' : ''"></i>
<span :class="stepIndex == 1 ? 'active' : ''">2.填写订单信息</span>
<Icon
:class="stepIndex == 1 ? 'active-arrow' : ''"
custom="icomoon icon-next"
></Icon>
<i class="icomoon icon-next" :class="stepIndex == 1 ? 'active-arrow' : ''"></i>
<span :class="stepIndex == 2 ? 'active' : ''">3.成功提交订单</span>
</div>
</div>
@@ -34,10 +27,10 @@
<div class="cart-goods">
<div class="cart-goods-title">
<div class="width_60">
<Checkbox
<el-checkbox
v-model="allChecked"
@on-change="changeChecked(allChecked, 'all')"
>全选</Checkbox
@change="changeChecked(allChecked, 'all')"
>全选</el-checkbox
>
</div>
<div class="goods-title">商品</div>
@@ -58,10 +51,10 @@
>
<div class="shop-name">
<div>
<Checkbox
<el-checkbox
v-model="shop.checked"
@on-change="changeChecked(shop.checked, 'shop', shop.storeId)"
></Checkbox>
@change="changeChecked(shop.checked, 'shop', shop.storeId)"
></el-checkbox>
<span class="go-shop-page" @click="goShopPage(shop.storeId)">{{
shop.storeName
}}</span>
@@ -80,34 +73,32 @@
:key="index"
>
<span v-if="item.couponType === 'PRICE'"
>{{ item.price }}</span
>
>{{ item.price }}</span>
<span v-if="item.couponType === 'DISCOUNT'"
>{{ item.couponDiscount }}</span
>
>{{ item.couponDiscount }}</span>
<span>{{ item.consumeThreshold }}元可用</span>
<Button
<el-button
class="coupon-btn"
size="small"
type="primary"
@click="receiveShopCoupon(item)"
:disabled="item.disabled"
>{{ item.disabled ? "已领取" : "领取" }}</Button
>{{ item.disabled ? "已领取" : "领取" }}</el-button
>
</div>
</div>
</span>
<div class="promotion-notice">{{ shop.promotionNotice }}</div>
</div>
<template v-for="(goods, goodsIndex) in shop.skuList">
<div class="goods-item" :key="goodsIndex">
<template v-for="(goods, goodsIndex) in shop.skuList" :key="goods.goodsSku?.id || goodsIndex">
<div class="goods-item">
<div class="width_60">
<Checkbox
<el-checkbox
v-model="goods.checked"
@on-change="
@change="
changeChecked(goods.checked, 'goods', goods.goodsSku.id)
"
></Checkbox>
></el-checkbox>
</div>
<div
class="goods-title"
@@ -125,13 +116,13 @@
<p>
{{ goods.goodsSku.goodsName }}
</p>
<p><Tag
<p><el-tag
v-if="goods.goodsSku.salesModel === 'WHOLESALE'"
class="goods-show-tag"
color="purple"
>
批发商品
</Tag></p>
</el-tag></p>
<template
v-for="(promotion, promotionIndex) in goods.promotions"
>
@@ -165,43 +156,43 @@
</div>
</div>
<div class="width_150">
{{ goods.purchasePrice | unitPrice("¥") }}
{{ $filters.unitPrice(goods.purchasePrice, "¥") }}
</div>
<div class="width_100">
<InputNumber
<el-input-number
:min="1"
size="small"
v-model="goods.num"
@on-change="changeNum(goods.num, goods.goodsSku.id)"
></InputNumber>
@change="changeNum(goods.num, goods.goodsSku.id)"
></el-input-number>
<div class="fontsize_12">
{{ goods.goodsSku.quantity > 0 ? "有货" : "无货" }}
</div>
</div>
<div class="width_150">
{{ goods.subTotal | unitPrice("¥") }}
{{ $filters.unitPrice(goods.subTotal, "¥") }}
</div>
<div class="width_100">
<Button
<el-button
v-if="!goods.errorMessage"
size="small"
type="primary"
@click="delGoods(goods.goodsSku.id)"
>删除</Button
>删除</el-button
>
<Button
<el-button
v-if="!goods.errorMessage"
size="small"
type="info"
@click="collectGoods(goods.goodsSku.id)"
style="margin-left: 10px"
>收藏</Button
>收藏</el-button
>
</div>
<div class="error-goods" v-if="goods.errorMessage">
<div style="margin-top: 20px">{{ goods.errorMessage }}</div>
<Button type="primary" @click="delGoods(goods.goodsSku.id)"
>删除</Button
<el-button type="primary" @click="delGoods(goods.goodsSku.id)"
>删除</el-button
>
</div>
</div>
@@ -211,10 +202,10 @@
<div class="cart-goods-footer">
<div>
<div class="width_60">
<Checkbox
<el-checkbox
v-model="allChecked"
@on-change="changeChecked(allChecked, 'all')"
>全选</Checkbox
@change="changeChecked(allChecked, 'all')"
>全选</el-checkbox
>
</div>
<div class="width_100 handle-btn" @click="delGoods()">
@@ -227,23 +218,20 @@
</div>
<div>
<div class="selected-count">
已选择<span>{{ checkedNum }}</span
>件商品
已选择<span>{{ checkedNum }}</span>件商品
</div>
<div class="ml_20 save-price">
已节省<span>{{
priceDetailDTO.discountPrice | unitPrice("¥")
}}</span>
已节省<span>{{ $filters.unitPrice(priceDetailDTO.discountPrice, "¥") }}</span>
</div>
<div class="ml_20 total-price">
总价不含运费:
<div>{{ priceDetailDTO.flowPrice | unitPrice("¥") }}</div>
<div>{{ $filters.unitPrice(priceDetailDTO.flowPrice, "¥") }}</div>
</div>
<div class="pay ml_20" @click="pay">去结算</div>
</div>
</div>
</div>
<Spin size="large" fix v-if="loading"></Spin>
<el-skeleton size="large" fix v-if="loading"></el-skeleton>
</div>
<BaseFooter class="footer"></BaseFooter>
</div>
@@ -400,7 +388,7 @@ export default {
async receiveShopCoupon(item) {
let res = await APIMember.receiveCoupon(item.id);
if (res.success) {
this.$set(item, "disabled", true);
item["disabled"] = true;
this.$Message.success("领取成功");
} else {
this.$Message.error(res.message);
@@ -500,7 +488,7 @@ export default {
padding: 0 15px;
}
.ivu-icon {
.el-icon {
@include content_color($light_content_color);
font-size: 20px;
margin: 0 15px;
@@ -743,7 +731,7 @@ export default {
width: 1200px;
margin: 0 auto;
}
.ivu-divider {
.el-divider {
background: $theme_color;
height: 2px;
}
@@ -781,7 +769,7 @@ export default {
}
</style>
<style>
.ivu-input-number-input {
.el-input-number .el-input__inner {
text-align: center;
}

View File

@@ -8,11 +8,9 @@
<img src="../assets/images/logo.png" width="120" alt="" />
</router-link>
<p>领券中心</p>
<Input
search
<el-input
style="width: 400px"
@on-search="search"
enter-button="搜索"
@keyup.enter="search"
placeholder="搜索优惠券"
/>
</div>
@@ -27,19 +25,13 @@
<span
v-if="item.couponType === 'PRICE'"
class="fontsize_12 global_color"
><span class="price">{{
item.price | unitPrice
}}</span></span
>
><span class="price">{{ $filters.unitPrice(item.price) }}</span></span>
<span
v-if="item.couponType === 'DISCOUNT'"
class="fontsize_12 global_color"
><span class="price">{{ item.couponDiscount }}</span
></span
>
><span class="price">{{ item.couponDiscount }}</span></span>
<span class="describe"
>{{ item.consumeThreshold }}元可用</span
>
>{{ item.consumeThreshold }}元可用</span>
</div>
<p>使用范围{{ useScope(item.scopeType, item.storeName) }}</p>
<p>有效期{{ item.endTime }}</p>
@@ -50,16 +42,12 @@
<i class="circle-bottom"></i>
</li>
</ul>
<Page
:total="total"
@on-change="changePageNum"
<el-pagination :total="total"
@current-change="changePageNum"
class="pageration"
@on-page-size-change="changePageSize"
@size-change="changePageSize"
:page-size="params.pageSize"
show-total
show-sizer
>
</Page>
layout="total, sizes, prev, pager, next"></el-pagination>
</div>
</div>
<BaseFooter></BaseFooter>

View File

@@ -11,76 +11,72 @@
</div>
<div class="login-container">
<!-- 验证手机号 -->
<Form
<el-form
ref="formFirst"
:model="formFirst"
:rules="ruleInline"
style="width:300px;"
v-show="step === 0"
>
<FormItem prop="mobile">
<i-input
<el-form-item prop="mobile">
<el-input
type="text"
v-model="formFirst.mobile"
clearable
placeholder="手机号"
>
<Icon type="md-phone-portrait" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem prop="code">
<i-input
<template #prepend><el-icon><Iphone /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item prop="code">
<el-input
type="text"
v-model="formFirst.code"
clearable
placeholder="手机验证码"
>
<Icon
type="ios-text-outline"
style="font-weight: bold"
slot="prepend"
/>
<Button slot="append" @click="sendCode">{{ codeMsg }}</Button>
</i-input>
</FormItem>
<FormItem>
<Button @click="verifyBtnClick" long :type="verifyStatus?'success':'default'">{{verifyStatus?'验证通过':'点击完成安全验证'}}</Button>
</FormItem>
<FormItem>
<Button type="error" @click="next" :loading="loading" long>下一步</Button>
</FormItem>
</Form>
<Form
<template #prepend><el-icon style="font-weight: bold"><Document /></el-icon></template>
<template #append><el-button @click="sendCode">{{ codeMsg }}</el-button></template>
</el-input>
</el-form-item>
<el-form-item>
<el-button @click="verifyBtnClick" style="width:100%" :type="verifyStatus?'success':'default'">{{verifyStatus?'验证通过':'点击完成安全验证'}}</el-button>
</el-form-item>
<el-form-item>
<el-button type="danger" @click="next" :loading="loading" style="width:100%">下一步</el-button>
</el-form-item>
</el-form>
<el-form
ref="form"
:model="form"
:rules="ruleInline"
style="width:300px;"
v-show="step === 1"
>
<FormItem prop="password">
<i-input
<el-form-item prop="password">
<el-input
type="password"
v-model="form.password"
clearable
placeholder="请输入至少六位密码"
>
<Icon type="md-lock" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem prop="password">
<i-input
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
type="password"
v-model="form.oncePasd"
clearable
placeholder="请再次输入密码"
>
<Icon type="md-lock" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem>
<Button type="error" size="large" @click="handleSubmit" :loading="loading1" long>提交</Button>
</FormItem>
</Form>
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="danger" size="large" @click="handleSubmit" :loading="loading1" style="width:100%">提交</el-button>
</el-form-item>
</el-form>
<!-- 拼图验证码 -->
<Verify
ref="verify"
@@ -91,18 +87,18 @@
<div class="login-btn"><a @click="$router.push('login')">前往登录</a></div>
</div>
<div class="foot">
<Row type="flex" justify="space-around" class="help">
<div type="flex" justify="space-around" class="help">
<a class="item" href="https://pickmall.cn/" target="_blank">帮助</a>
<a class="item" href="https://pickmall.cn/" target="_blank">隐私</a>
<a class="item" href="https://pickmall.cn/" target="_blank">条款</a>
</Row>
<Row type="flex" justify="center" class="copyright">
</div>
<div type="flex" justify="center" class="copyright">
Copyright © {{year}} - Present
<a href="https://pickmall.cn/" target="_blank" style="margin: 0 5px"
>{{config.title}}</a
>
版权所有
</Row>
</div>
</div>
</div>
</template>
@@ -114,9 +110,10 @@ import { md5 } from '@/plugins/md5.js';
import * as apiLogin from '@/api/login.js';
import { sendSms } from '@/api/common.js';
import Verify from '@/components/verify';
import { Lock, Iphone, Document } from '@element-plus/icons-vue';
export default {
name: 'ForgetPassword',
components: { Verify },
components: { Verify, Lock, Iphone, Document },
data () {
return {
config:require('@/config'),
@@ -294,7 +291,7 @@ export default {
.other-login {
margin: 0 auto;
.ivu-icon {
.el-icon {
font-size: 24px;
}
}

View File

@@ -4,12 +4,12 @@
<Search></Search>
<div class="shop-item-path">
<div class="shop-nav-container">
<Breadcrumb>
<BreadcrumbItem to="/">首页</BreadcrumbItem>
<BreadcrumbItem v-for="(item, index) in categoryBar" :to="goGoodsList(index)" target="_blank" :key="index">
<el-breadcrumb>
<el-breadcrumb-item to="/">首页</el-breadcrumb-item>
<el-breadcrumb-item v-for="(item, index) in categoryBar" :to="goGoodsList(index)" target="_blank" :key="index">
{{ item.name }}
</BreadcrumbItem>
</Breadcrumb>
</el-breadcrumb-item>
</el-breadcrumb>
<div class="store-collect" v-if="!takeDownSale">
<span class="mr_10" v-if="goodsMsg.data">
<router-link :to="'Merchant?id=' + goodsMsg.data.storeId">{{
@@ -17,7 +17,7 @@
}}</router-link>
</span>
<span @click="collect">
<Icon type="ios-heart" :color="storeCollected ? '#ed3f14' : '#666'" />
<el-icon :color="storeCollected ? '#ed3f14' : '#666'"><StarFilled /></el-icon>
{{ storeCollected? "已收藏店铺": "收藏店铺" }}
</span>
<span class="ml_10" @click="IMService(goodsMsg.data.storeId,goodsMsg.data.goodsId,goodsMsg.data.id)">联系客服</span>
@@ -32,16 +32,17 @@
<empty _Title='当前商品已下架' v-if="takeDownSale">
<div class="sale-btn">
<Button size="small" class="mr_10" @click="target('/')">返回首页</Button>
<Button size="small" @click="target('goodsList')">返回商品列表</Button>
<el-button size="small" class="mr_10" @click="target('/')">返回首页</el-button>
<el-button size="small" @click="target('goodsList')">返回商品列表</el-button>
</div>
</empty>
<Spin size="large" fix v-if="isLoading"></Spin>
<el-skeleton size="large" fix v-if="isLoading"></el-skeleton>
<BaseFooter></BaseFooter>
</div>
</template>
<script>
import { StarFilled } from '@element-plus/icons-vue';
import Search from "@/components/Search";
import ShowGoods from "@/components/goodsDetail/ShowGoods";
@@ -129,7 +130,7 @@ export default {
});
});
this.categoryBar = cateArr;
this.$set(this, "goodsMsg", res.result);
this["goodsMsg"] = res.result;
if (!this.goodsMsg.data.intro) {
this.goodsMsg.data.intro = ''
}
@@ -191,12 +192,10 @@ export default {
},
},
watch: {},
components: {
Search,
components: { Search,
ShowGoods,
ShowGoodsDetail,
empty
},
empty, StarFilled },
};
</script>
<style scoped lang="scss">

View File

@@ -20,21 +20,14 @@
@click="orderBy(item.en, index)"
>
<span :class="{ 'goods-list-tool-active': index === sortIndex }"
>{{ item.title }}<Icon type="ios-arrow-round-down"
/></span>
>{{ item.title }}<el-icon><ArrowDown /></el-icon></span>
</li>
<li @click="orderBy('price', 5, 'up')" class="price-sort">
<span :class="{ 'goods-list-tool-active': 5 === sortIndex }">
价格
<div>
<Icon
type="md-arrow-dropup"
:class="{ 'price-color': sortPriceIndex == 'desc' }"
/>
<Icon
type="md-arrow-dropdown"
:class="{ 'price-color': sortPriceIndex == 'asc' }"
/>
<el-icon :class="{ 'price-color': sortPriceIndex == 'desc' }"><ArrowUp /></el-icon>
<el-icon :class="{ 'price-color': sortPriceIndex == 'asc' }"><ArrowDown /></el-icon>
</div>
</span>
</li>
@@ -55,24 +48,21 @@
</div>
<div class="goods-show-price">
<span>
<span class="seckill-price text-danger">{{
item.price | unitPrice("¥")
}}</span>
<span class="seckill-price text-danger">{{ $filters.unitPrice(item.price, "¥") }}</span>
</span>
</div>
<div class="goods-show-detail">
<Tag
<el-tag
v-if="item.salesModel === 'WHOLESALE'"
class="goods-show-tag"
color="purple"
>
批发
</Tag>
</el-tag>
<span>{{ item.goodsName }}</span>
</div>
<div class="goods-show-num">
已有<span>{{ item.commentNum || 0 }}</span
>人评价
已有<span>{{ item.commentNum || 0 }}</span>人评价
</div>
<div class="goods-show-seller">
<span class="text-bottom" style="color: #e4393c">{{
@@ -81,49 +71,48 @@
</div>
<div class="goods-show-right">
<Tag
<el-tag
class="goods-show-tag"
color="red"
v-if="item.selfOperated"
>
自营
</Tag>
<Tag
</el-tag>
<el-tag
class="goods-show-tag"
color="blue"
v-if="item.goodsType === 'VIRTUAL_GOODS'"
>
虚拟
</Tag>
<Tag
</el-tag>
<el-tag
class="goods-show-tag"
color="blue"
v-else-if="item.goodsType === 'PHYSICAL_GOODS'"
>
实物
</Tag>
</el-tag>
</div>
</div>
</div>
</div>
</div>
<div class="goods-page">
<Page
show-total
show-sizer
@on-change="changePageNum"
@on-page-size-change="changePageSize"
<el-pagination
@current-change="changePageNum"
@size-change="changePageSize"
:total="total"
:page-size="params.pageSize"
></Page>
layout="total, sizes, prev, pager, next"></el-pagination>
</div>
</div>
<Spin size="large" fix v-if="loading"></Spin>
<el-skeleton size="large" fix v-if="loading"></el-skeleton>
<BaseFooter></BaseFooter>
</div>
</template>
<script>
import { ArrowDown, ArrowUp } from '@element-plus/icons-vue';
import GoodsClassNav from "@/components/nav/GoodsClassNav";
import * as apiGoods from "@/api/goods";
export default {
@@ -347,7 +336,7 @@ export default {
}
span > div {
display: inline-block;
.ivu-icon {
.el-icon {
font-size: 12px;
position: absolute;
&:nth-child(1) {
@@ -379,7 +368,7 @@ export default {
text-decoration: none;
z-index: 1;
}
.goods-list-tool .ivu-icon {
.goods-list-tool .el-icon {
font-weight: bold;
font-size: 16px;
}

View File

@@ -1,27 +1,25 @@
<template>
<div class="container">
<Modal v-model="showCpmodel" width="350">
<el-dialog v-model="showCpmodel" width="350">
<template #header>
<p style="color:black;text-align:left">
<!-- <Icon type="ios-information-circle"></Icon> -->
<!-- <el-icon><InfoFilled /></el-icon> -->
<span>活动优惠券</span>
</p>
</template>
<template>
<Scroll :on-reach-bottom="handleReachBottom">
<Card dis-hover v-for="(item, index) in autoCoupList" :key="index" style="margin: 10px 15px">
<span v-if="item.couponType === 'PRICE'" class="fontsize_12 global_color" style="font-size: 15px;">¥<span class="price">{{item.price | unitPrice}}</span></span>
<div class="coupon-scroll" @scroll="handleReachBottom">
<el-card shadow="never" v-for="(item, index) in autoCoupList" :key="index" style="margin: 10px 15px">
<span v-if="item.couponType === 'PRICE'" class="fontsize_12 global_color" style="font-size: 15px;">¥<span class="price">{{ $filters.unitPrice(item.price) }}</span></span>
<span v-if="item.couponType === 'DISCOUNT'" class="fontsize_12 global_color" style="font-size: 15px;"><span class="price">{{item.discount}}</span></span>
<span class="describe" style="font-size: 15px;margin-left: 5px;">{{item.consumeThreshold}}元可用</span>
<p style="font-size: 10px;">使用范围{{useScope(item.scopeType, item.storeName)}}</p>
<p style="font-size: 10px;">有效期{{item.endTime}}</p>
</Card>
</Scroll>
</template>
</el-card>
</div>
<template #footer>
<Button type="error" @click="showCpmodel=false">确定</Button>
<el-button type="danger" @click="showCpmodel=false">确定</el-button>
</template>
</Modal>
</el-dialog>
<!-- 固定头部 -->
<hover-search class="hover-search" :class="{show: topSearchShow}"></hover-search>
@@ -43,6 +41,7 @@
</template>
<script>
import { InfoFilled } from '@element-plus/icons-vue';
import Search from '@/components/Search';
import ModelForm from '@/components/indexDecorate/ModelForm';
import HoverSearch from '@/components/header/hoverSearch';
@@ -196,12 +195,10 @@ export default {
}
}
},
components: {
Search,
components: { Search,
ModelForm,
HoverSearch,
fixedBar
}
fixedBar, InfoFilled }
};
</script>

View File

@@ -10,13 +10,13 @@
<!-- 登录主体 包含轮播图 登录模块 -->
<div class="login-container">
<!-- 轮播 -->
<Carousel loop :autoplay-speed="5000" class="login-carousel" arrow="never">
<CarouselItem>
<el-carousel :interval="5000" arrow="never" class="login-carousel" height="550px">
<el-carousel-item>
<div class="demo-carousel" @click='$refs.verify.show = false'>
<img src="https://lili-system.oss-cn-beijing.aliyuncs.com/background.jpg" />
</div>
</CarouselItem>
</Carousel>
</el-carousel-item>
</el-carousel>
<!-- 登录模块 -->
<div class="form-box" @click='$refs.verify.show = false'>
<div class="account-number">
@@ -34,7 +34,7 @@
<span>
二维码已失效
</span>
<Button size='small' @click="createPCLoginSession">刷新二维码</Button>
<el-button size='small' @click="createPCLoginSession">刷新二维码</el-button>
</div>
<vue-qr
:text="qrCode"
@@ -69,45 +69,45 @@
<div>
<div v-show="!scannerCodeLoginFLag">
<!-- 账号密码登录 -->
<Form ref="formInline" :model="formData" :rules="ruleInline" v-show="type === true"
<el-form ref="formInline" :model="formData" :rules="ruleInline" v-show="type === true"
@click.self='$refs.verify.show = false'>
<FormItem prop="username">
<i-input type="text" v-model="formData.username" clearable placeholder="用户名">
<Icon type="md-person" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem prop="password">
<i-input type="password" v-model="formData.password" clearable placeholder="密码">
<Icon type="md-lock" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem>
<Button type="error" @click.stop="handleSubmit('formInline')" long>登录</Button>
</FormItem>
</Form>
<el-form-item prop="username">
<el-input type="text" v-model="formData.username" clearable placeholder="用户名">
<template #prepend><el-icon><User /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input type="password" v-model="formData.password" clearable placeholder="密码">
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item>
<el-button type="danger" @click.stop="handleSubmit('formInline')" style="width:100%">登录</el-button>
</el-form-item>
</el-form>
<!-- 验证码登录 -->
<Form ref="formSms" :model="formSms" :rules="ruleInline" v-show="type === false"
<el-form ref="formSms" :model="formSms" :rules="ruleInline" v-show="type === false"
@click.self='$refs.verify.show = false'>
<FormItem prop="mobile">
<i-input type="text" v-model="formSms.mobile" clearable placeholder="手机号">
<Icon type="md-lock" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem prop="code">
<i-input type="text" v-model="formSms.code" placeholder="手机验证码">
<Icon type="ios-text-outline" style="font-weight: bold" slot="prepend"/>
<Button slot="append" @click="sendCode">{{ codeMsg }}</Button>
</i-input>
</FormItem>
<FormItem>
<Button @click.stop="verifyBtnClick" long
<el-form-item prop="mobile">
<el-input type="text" v-model="formSms.mobile" clearable placeholder="手机号">
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item prop="code">
<el-input type="text" v-model="formSms.code" placeholder="手机验证码">
<template #prepend><el-icon style="font-weight: bold"><Document /></el-icon></template>
<template #append><el-button @click="sendCode">{{ codeMsg }}</el-button></template>
</el-input>
</el-form-item>
<el-form-item>
<el-button @click.stop="verifyBtnClick" style="width:100%"
:type="verifyStatus?'success':'default'">{{ verifyStatus ? '验证通过' : '点击完成安全验证' }}
</Button>
</FormItem>
<FormItem>
<Button type="error" @click="handleSubmit('formSms')" long>登录</Button>
</FormItem>
</Form>
</el-button>
</el-form-item>
<el-form-item>
<el-button type="danger" @click="handleSubmit('formSms')" style="width:100%">登录</el-button>
</el-form-item>
</el-form>
</div>
<div class="other">
<div class="other-login">
@@ -138,16 +138,16 @@
<verify ref="verify" class="verify-con" verifyType="LOGIN" @change="verifyChange"></verify>
</div>
<div class="foot">
<Row type="flex" justify="space-around" class="help">
<div type="flex" justify="space-around" class="help">
<router-link to="/article" class="item" target="_blank">帮助</router-link>
<router-link to="/article?id=1371779927900160000" class="item" target="_blank">隐私</router-link>
<router-link to="/article?id=1371992704333905920" class="item" target="_blank">条款</router-link>
</Row>
<Row type="flex" justify="center" class="copyright">
</div>
<div type="flex" justify="center" class="copyright">
Copyright © {{year}} - Present
<a href="https://pickmall.cn" target="_blank" style="margin: 0 5px">{{config.title}}</a>
版权所有
</Row>
</div>
</div>
</div>
</template>
@@ -162,12 +162,16 @@ import { webLogin, loginCallback,sCLogin,getSCLoginCode} from "@/api/login.js";
import storage from "@/plugins/storage.js";
import verify from "@/components/verify";
import vueQr from "vue-qr";
import { User, Lock, Document } from "@element-plus/icons-vue";
export default {
name: "Login",
components: {
verify,
vueQr
vueQr,
User,
Lock,
Document,
},
data() {
return {
@@ -413,7 +417,7 @@ export default {
});
},
},
destroyed() {
beforeUnmount() {
this.clearQRLoginInfo();
},
mounted() {

View File

@@ -10,12 +10,10 @@
<p :alt="storeMsg.storeDesc" class="ellipsis" v-html="storeMsg.storeDesc"></p>
</div>
<div>
<span class="hover-pointer" @click="collect"><Icon :color="storeCollected ? '#ed3f14' : '#fff'"
type="ios-heart"/>{{
<span class="hover-pointer" @click="collect"><el-icon :color="storeCollected ? '#ed3f14' : '#fff'"><StarFilled /></el-icon>{{
storeCollected ? '已收藏店铺' : '收藏店铺'
}}</span>
<span class="hover-pointer ml_10" style="width:80px" @click="IMService(storeMsg.storeId,null,null)"><Icon
custom="icomoon icon-customer-service"/>联系客服</span>
<span class="hover-pointer ml_10" style="width:80px" @click="IMService(storeMsg.storeId,null,null)"><i class="icomoon icon-customer-service"></i>联系客服</span>
</div>
</div>
<div class="store-category">
@@ -27,22 +25,21 @@
首页
</li>
<li v-for="(cate, index) in cateList" :key="index" class="cate-item">
<Dropdown v-if="cate.children.length">
<el-dropdown v-if="cate.children.length" trigger="hover">
<div @click.self="searchByCate(cate)">
{{ cate.labelName }}
<Icon type="ios-arrow-down"></Icon>
<el-icon><ArrowDown /></el-icon>
</div>
<DropdownMenu slot="list">
<DropdownItem
v-for="sec in cate.children"
:key="sec.id"
:name="sec.id"
@click.native="searchByCate(sec)"
>{{ sec.labelName }}
</DropdownItem
>
</DropdownMenu>
</Dropdown>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
v-for="sec in cate.children"
:key="sec.id"
@click="searchByCate(sec)"
>{{ sec.labelName }}</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<span v-else @click.self="searchByCate(cate)">{{
cate.labelName
}}</span>
@@ -74,28 +71,23 @@
</div>
<div class="goods-show-price">
<span>
<span class="seckill-price text-danger">{{
item.price | unitPrice("¥")
}}</span>
<span class="seckill-price text-danger">{{ $filters.unitPrice(item.price, "¥") }}</span>
</span>
</div>
<div class="goods-show-detail">
<span>{{ item.goodsName }}</span>
</div>
<div class="goods-show-num">
已有<span>{{ item.commentNum || 0 }}</span
>人评价
已有<span>{{ item.commentNum || 0 }}</span>人评价
</div>
</div>
</div>
<div class="goods-page">
<Page
:page-size="params.pageSize"
<el-pagination :page-size="params.pageSize"
:total="total"
show-sizer
@on-change="changePageNum"
@on-page-size-change="changePageSize"
></Page>
@current-change="changePageNum"
@size-change="changePageSize"
layout="sizes, prev, pager, next"></el-pagination>
</div>
</div>
@@ -107,6 +99,7 @@
<script>
import { ArrowDown, StarFilled } from '@element-plus/icons-vue';
import {getCateById, getDetailById} from "@/api/shopentry";
import {cancelStoreCollect, collectStore} from "@/api/member";
import {goodsList} from "@/api/goods";
@@ -119,11 +112,7 @@ import imTalk from '@/components/mixes/talkIm'
export default {
name: "Merchant",
components: {
Search,
ModelForm,
HoverSearch,
},
components: { Search, ModelForm, HoverSearch, StarFilled, ArrowDown },
mixins: [imTalk],
data() {
return {

View File

@@ -11,67 +11,63 @@
</div>
<div class="login-container">
<!-- 注册 -->
<Form
<el-form
ref="formRegist"
:model="formRegist"
:rules="ruleInline"
style="width:300px;"
>
<FormItem prop="username">
<i-input
<el-form-item prop="username">
<el-input
type="text"
v-model="formRegist.username"
clearable
placeholder="用户名"
>
<Icon type="md-person" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem prop="password">
<i-input
<template #prepend><el-icon><User /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item prop="password">
<el-input
type="password"
v-model="formRegist.password"
clearable
placeholder="请输入大于6位密码"
>
<Icon type="md-lock" slot="prepend"> </Icon>
</i-input>
</FormItem>
<FormItem prop="mobilePhone">
<i-input
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item prop="mobilePhone">
<el-input
type="text"
v-model="formRegist.mobilePhone"
clearable
placeholder="手机号"
>
<Icon type="md-phone-portrait" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem prop="code">
<i-input
<template #prepend><el-icon><Iphone /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item prop="code">
<el-input
type="text"
v-model="formRegist.code"
clearable
placeholder="手机验证码"
>
<Icon
type="ios-text-outline"
style="font-weight: bold"
slot="prepend"
/>
<Button slot="append" @click="sendCode">{{ codeMsg }}</Button>
</i-input>
</FormItem>
<FormItem>
<Button @click="verifyBtnClick" long :type="verifyStatus?'success':'default'">{{verifyStatus?'验证通过':'点击完成安全验证'}}</Button>
</FormItem>
<FormItem>
<Button type="error" size="large" @click="handleRegist" long
>注册</Button
<template #prepend><el-icon style="font-weight: bold"><Document /></el-icon></template>
<template #append><el-button @click="sendCode">{{ codeMsg }}</el-button></template>
</el-input>
</el-form-item>
<el-form-item>
<el-button @click="verifyBtnClick" style="width:100%" :type="verifyStatus?'success':'default'">{{verifyStatus?'验证通过':'点击完成安全验证'}}</el-button>
</el-form-item>
<el-form-item>
<el-button type="danger" size="large" @click="handleRegist" style="width:100%"
>注册</el-button
>
</FormItem>
<FormItem><span class="color999 ml_20">点击注册表示您同意<router-link to="/article?id=1371992704333905920" target="_blank">商城用户协议</router-link></span></FormItem>
</Form>
</el-form-item>
<el-form-item><span class="color999 ml_20">点击注册表示您同意<router-link to="/article?id=1371992704333905920" target="_blank">商城用户协议</router-link></span></el-form-item>
</el-form>
<!-- 拼图验证码 -->
<Verify
ref="verify"
@@ -82,16 +78,16 @@
<div class="login-btn">已有账号<a @click="$router.push('login')">立即登录</a></div>
</div>
<div class="foot">
<Row type="flex" justify="space-around" class="help">
<div type="flex" justify="space-around" class="help">
<router-link to="/article" class="item" target="_blank">帮助</router-link>
<router-link to="/article?id=1371779927900160000" class="item" target="_blank">隐私</router-link>
<router-link to="/article?id=1371992704333905920" class="item" target="_blank">条款</router-link>
</Row>
<Row type="flex" justify="center" class="copyright">
</div>
<div type="flex" justify="center" class="copyright">
Copyright © {{year}} - Present
<a href="https://pickmall.cn" target="_blank" style="margin: 0 5px">{{config.title}}</a>
版权所有
</Row>
</div>
</div>
</div>
</template>
@@ -103,9 +99,10 @@ import { md5 } from '@/plugins/md5.js';
import * as apiLogin from '@/api/login.js';
import { sendSms } from '@/api/common.js';
import Verify from '@/components/verify';
import { User, Lock, Iphone, Document } from '@element-plus/icons-vue';
export default {
name: 'SignUp',
components: { Verify },
components: { Verify, User, Lock, Iphone, Document },
data () {
return {
config:require('@/config'),
@@ -254,7 +251,7 @@ export default {
.other-login {
margin: 0 auto;
.ivu-icon {
.el-icon {
font-size: 24px;
}
}

View File

@@ -5,86 +5,81 @@
<div class="title-bg"><p>文章帮助中心</p></div>
<div class="container width_1200">
<Layout class="layoutAll">
<Sider class="side-bar" ref="side" :collapsed-width="78">
<div class="layoutAll">
<el-aside class="side-bar" width="200px">
<div class="article-cate">文章分类列表</div>
<Menu
<el-menu
class="side-menu"
theme="light"
width="auto"
ref='menu'
:active-name="activeName"
:open-names="openName"
@on-select="onSelect"
:key="menuKey"
:default-active="String(activeName)"
:default-openeds="openName"
@select="onSelect"
>
<!-- 循环导航栏 -->
<Submenu
v-show="menu.children"
<el-sub-menu
v-for="(menu, index) in list"
v-show="menu.children"
:key="index"
:name="menu.articleCategoryName"
:index="menu.articleCategoryName"
>
<template slot="title">
<template #title>
<span>{{ menu.articleCategoryName }}</span>
</template>
<MenuItem
<el-menu-item
v-for="(chlidren, i) in menu.children"
:key="i"
:name="chlidren.id"
>{{ chlidren.articleCategoryName }}</MenuItem
>
</Submenu>
</Menu>
</Sider>
<Layout class="layout ml_10">
<Content class="content">
<ul class="article-list" v-show="showList">
<li v-for="(article, index) in articleList" :key="index" @click="getDetail(article.id)">
{{article.title}}
</li>
</ul>
<transition mode="out-in">
<div v-show="!showList">
<a class="back-btn" @click="showList = true">&lt;返回上一级</a>
<h2 class="mt_10 mb_10">{{detail.title}}</h2>
<div class="mt_10 mb_10" v-html="detail.content"></div>
</div>
</transition>
</Content>
</Layout>
</Layout>
:index="String(chlidren.id)"
>{{ chlidren.articleCategoryName }}</el-menu-item>
</el-sub-menu>
</el-menu>
</el-aside>
<el-main class="content ml_10">
<ul class="article-list" v-show="showList">
<li v-for="(article, index) in articleList" :key="index" @click="getDetail(article.id)">
{{ article.title }}
</li>
</ul>
<transition mode="out-in">
<div v-show="!showList">
<a class="back-btn" @click="showList = true">&lt;返回上一级</a>
<h2 class="mt_10 mb_10">{{ detail.title }}</h2>
<div class="mt_10 mb_10" v-html="detail.content"></div>
</div>
</transition>
</el-main>
</div>
</div>
</div>
</template>
<script>
import {articleCateList, articleDetail, articleList} from '@/api/common.js'
import { articleCateList, articleDetail, articleList } from '@/api/common.js'
export default {
name: 'Home',
name: 'ArticleIndex',
data () {
return {
list: [], // 分类列表
detail: '', // 文章详情
articleList: [], // 分类下的文章列表
activeName: '1347456734864367616', // 左侧激活项
openName: [], // 展开的名称
params: { // 请求参数
list: [],
detail: '',
articleList: [],
activeName: '1347456734864367616',
openName: [],
menuKey: 0,
params: {
pageNumber: 1,
pageSize: 100,
categoryId: '',
sort: 'sort'
},
showList: true // 展示文章列表
showList: true
};
},
methods: {
// 每次点击左侧bar的callback
onSelect (id) {
this.getList(id)
this.detail = ''
this.showList = true
},
getCateList () { // 文章分类列表
getCateList () {
articleCateList().then(res => {
if (res.success) {
this.list = res.result
@@ -105,15 +100,12 @@ export default {
this.activeName = this.list[0].children[0].id
this.openName.push(this.list[0].articleCategoryName)
}
this.$nextTick(() => {
this.$refs.menu.updateOpened()
this.$refs.menu.updateActiveName()
})
this.menuKey++
this.getList(this.activeName)
}
})
},
getList (id) { // 文章列表
getList (id) {
this.params.categoryId = id
articleList(this.params).then(res => {
if (res.success) {
@@ -121,7 +113,7 @@ export default {
}
})
},
async getDetail (id) { // 文章详情
async getDetail (id) {
await articleDetail(id).then(res => {
if (res.success) {
this.detail = res.result
@@ -162,6 +154,7 @@ export default {
}
.layoutAll {
display: flex;
min-height: 1200px;
@include background_color($light_background_color);
}
@@ -177,7 +170,6 @@ export default {
.layout-footer-center {
padding: 0px 15px;
padding-bottom: 15px;
text-align: center;
}
@@ -191,7 +183,6 @@ export default {
height: 100px;
line-height: 100px;
color: #fff;
line-height: 100px;
margin: 0 auto;
padding-left: 10px;
}

View File

@@ -3,87 +3,89 @@
<card _Title="账户安全"/>
<div class="safeList">
<!-- 密码 -->
<Row class="safeItem">
<Col :span="2">
<Icon size="40" type="md-key"/>
</Col>
<Col :span="16">
<div class="safeItem">
<div :span="2">
<el-icon :size="40"><Key /></el-icon>
</div>
<div :span="16">
<div class="setDivItem">登录密码</div>
<div class="setDivItem theme">互联网账号存在被盗风险建议您定期更改密码以保护账户安全</div>
</Col>
<Col :span="4">
<Button @click="modifyPwd">修改密码</Button>
</Col>
</Row>
</div>
<div :span="4">
<el-button @click="modifyPwd">修改密码</el-button>
</div>
</div>
<Row class="safeItem">
<Col :span="2">
<Icon size="40" type="md-link" />
</Col>
<Col :span="16">
<div class="safeItem">
<div :span="2">
<el-icon :size="40"><Link /></el-icon>
</div>
<div :span="16">
<div class="setDivItem">第三方账户绑定</div>
<div class="setDivItem theme">绑定后可使用第三方账号快捷登录</div>
<div class="connectList">
<div class="connectRow">
<div class="connectRowLeft">
<span class="connectName">{{ wechatConnect.label }}</span>
<Tag v-if="isBound(wechatConnect.type)" color="success">已绑定</Tag>
<Tag v-else>未绑定</Tag>
<el-tag v-if="isBound(wechatConnect.type)" color="success">已绑定</el-tag>
<el-tag v-else>未绑定</el-tag>
</div>
</div>
<Spin size="large" fix v-if="connectLoading"></Spin>
<el-skeleton size="large" fix v-if="connectLoading"></el-skeleton>
</div>
</Col>
<Col :span="4">
<Button v-if="!isBound(wechatConnect.type)" type="primary" @click="openBindModal(wechatConnect)">绑定</Button>
<Button v-else @click="confirmUnbind(wechatConnect)">解绑</Button>
</Col>
</Row>
</div>
<div :span="4">
<el-button v-if="!isBound(wechatConnect.type)" type="primary" @click="openBindModal(wechatConnect)">绑定</el-button>
<el-button v-else @click="confirmUnbind(wechatConnect)">解绑</el-button>
</div>
</div>
</div>
<Modal
<el-dialog
v-model="bindModalVisible"
title="绑定第三方账户"
:mask-closable="false"
:close-on-click-modal="false"
:footer-hide="bindForm.type === 'WECHAT'"
:ok-text="bindModalOkText"
:loading="bindSubmitLoading"
@on-ok="submitBind"
@on-cancel="resetBindForm"
@ok="submitBind"
@cancel="resetBindForm"
>
<Form :label-width="110">
<FormItem label="类型">
<Input v-model="bindForm.typeLabel" disabled />
</FormItem>
<el-form label-width="110px">
<el-form-item label="类型">
<el-input v-model="bindForm.typeLabel" disabled />
</el-form-item>
<FormItem v-if="bindForm.type === 'WECHAT'" label="公众号二维码">
<el-form-item v-if="bindForm.type === 'WECHAT'" label="公众号二维码">
<div class="wechatQrBox">
<div class="wechatQrImgBox">
<Spin fix v-if="qrCodeLoading"></Spin>
<el-skeleton fix v-if="qrCodeLoading"></el-skeleton>
<img v-if="qrCodeSrc" class="wechatQrImg" :src="qrCodeSrc" alt="微信公众号二维码" />
<div v-else class="wechatQrEmpty">二维码获取失败请刷新重试</div>
</div>
<div class="wechatQrActions">
<Button @click="fetchWechatQrCode">刷新二维码</Button>
<Button type="primary" @click="submitBind">我已完成绑定</Button>
<el-button @click="fetchWechatQrCode">刷新二维码</el-button>
<el-button type="primary" @click="submitBind">我已完成绑定</el-button>
</div>
<div class="wechatQrTip">请使用微信扫码关注/授权完成后点击我已完成绑定检测绑定状态</div>
</div>
</FormItem>
</el-form-item>
<FormItem v-if="bindForm.type !== 'WECHAT'" label="OpenID/UnionID">
<Input v-model="bindForm.unionID" placeholder="请输入 OpenID/UnionID" />
</FormItem>
</Form>
</Modal>
<el-form-item v-if="bindForm.type !== 'WECHAT'" label="OpenID/UnionID">
<el-input v-model="bindForm.unionID" placeholder="请输入 OpenID/UnionID" />
</el-form-item>
</el-form>
</el-dialog>
</div>
</template>
<script>
import { Key, Link } from '@element-plus/icons-vue';
// import { getPwdStatus } from '@/api/account';
import storage from '@/plugins/storage'
import { bindThirdAccount, getThirdAccountBindList, getWechatH5QrCode, unbindThirdAccount } from '@/api/login.js'
export default {
components: { Key, Link },
name: 'AccountSafe',
data () {
return {
@@ -264,7 +266,8 @@ export default {
</script>
<style scoped lang="scss">
::v-deep .ivu-col-span-2, .ivu-col-span-4 {
.safeItem > div:first-child,
.safeItem > div:last-child {
text-align: center;
color: $theme_color;
}
@@ -281,9 +284,8 @@ export default {
border-bottom: 1px solid $border_color;
padding: 16px 0;
::v-deep .ivu-col {
> div {
padding: 8px 0;
}
}

View File

@@ -4,12 +4,12 @@
<div class="order">
<div class="order-title">
<Row class="order-row title">
<i-col span="12">订单详情</i-col>
<i-col span="4">收货人</i-col>
<i-col span="4">评价</i-col>
<i-col span="6"></i-col>
</Row>
<div class="order-row title">
<div span="12">订单详情</div>
<div span="4">收货人</div>
<div span="4">评价</div>
<div span="6"></div>
</div>
</div>
<empty v-if="list.length === 0" />
@@ -20,40 +20,39 @@
<span class="color999 ml_10">{{item.createTime}}</span>
<span class="hover-pointer fontsize_12 eval-detail" @click="evaluateDetail(item.id)">评价详情</span>
</div>
<Row class="order-item-view">
<i-col span="12" class="item-view-name">
<div class="order-item-view">
<div span="12" class="item-view-name">
<div class="order-img hover-color" @click="linkTo(`/goodsDetail?goodsId=${item.goodsId}&skuId=${item.skuId}`)">
<img :src="item.goodsImage" alt="" />
</div>
<div class="order-name hover-color" @click="linkTo(`/goodsDetail?goodsId=${item.goodsId}&skuId=${item.skuId}`)">
{{item.goodsName}}
</div>
</i-col>
<i-col span="4">{{item.createBy | secrecyMobile}}</i-col>
<i-col span="4">
</div>
<div span="4">{{ $filters.secrecyMobile(item.createBy ) }}</div>
<div span="4">
{{item.grade==='GOOD'?'好评' : item.grade === 'WORSE'?'差评' : '中评'}}
</i-col>
<i-col span="4">
<Tooltip transfer>
</div>
<div span="4">
<el-tooltip>
<div class="content">{{item.content}}</div>
<div style="white-space: normal;word-break:break-all" slot="content">
{{item.content}}
</div>
</Tooltip>
</i-col>
</Row>
<template #content>
<div style="white-space: normal;word-break:break-all">
{{item.content}}
</div>
</template>
</el-tooltip>
</div>
</div>
</div>
</div>
<Spin v-if="loading"></Spin>
<el-skeleton v-if="loading"></el-skeleton>
</div>
<!-- 分页 -->
<div class="page-size">
<Page :total="total" @on-change="changePageNum"
@on-page-size-change="changePageSize"
:page-size="params.pageSize"
show-total
show-sizer>
</Page>
<el-pagination :total="total" @current-change="changePageNum"
@size-change="changePageSize"
:page-size="params.pageSize" layout="total, sizes, prev, pager, next"></el-pagination>
</div>
</div>
</template>

View File

@@ -9,7 +9,7 @@
</p>
</div>
<Alert class="l_title" show-icon type="warning">我的申诉信息</Alert>
<el-alert class="l_title" show-icon type="warning">我的申诉信息</el-alert>
<table cellspacing="0" cellpadding='0' border="1">
<tr>
<td>投诉商品</td>
@@ -31,7 +31,7 @@
<div class="demo-upload-list" v-for="(img, index) in detail.images.split(',')" :key="index">
<img :src="img">
<div class="demo-upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(img)"></Icon>
<el-icon @click="handleView(img)"><View /></el-icon>
</div>
</div>
</template>
@@ -41,7 +41,7 @@
</tr>
</table>
<Alert class="l_title" show-icon type="warning">商家申诉信息</Alert>
<el-alert class="l_title" show-icon type="warning">商家申诉信息</el-alert>
<table cellspacing="0" cellpadding='0' border="1">
<tr>
<td>申诉时间</td>
@@ -60,7 +60,7 @@
<div class="demo-upload-list" v-for="(img, index) in detail.appealImages.split(',')" :key="index">
<img :src="img">
<div class="demo-upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(img)"></Icon>
<el-icon @click="handleView(img)"><View /></el-icon>
</div>
</div>
</template>
@@ -70,7 +70,7 @@
</tr>
</table>
<Alert class="l_title" show-icon type="warning">平台仲裁</Alert>
<el-alert class="l_title" show-icon type="warning">平台仲裁</el-alert>
<table cellspacing="0" cellpadding='0' border="1">
<tr>
<td>仲裁意见</td>
@@ -78,7 +78,7 @@
</tr>
</table>
<Alert class="l_title" show-icon type="warning">对话详情</Alert>
<el-alert class="l_title" show-icon type="warning">对话详情</el-alert>
<div class="speak-way" v-if="detail.orderComplaintCommunications && detail.orderComplaintCommunications.length">
<div
class="speak-msg seller"
@@ -108,22 +108,24 @@
<tr>
<td></td>
<td>
<Button type="primary" :loading="submitLoading" @click="handleSubmit" style="margin-left: 5px">
<el-button type="primary" :loading="submitLoading" @click="handleSubmit" style="margin-left: 5px">
回复
</Button>
</el-button>
</td>
</tr>
</table>
<Modal title="View Image" v-model="visible">
<el-dialog title="View Image" v-model="visible">
<img :src="previewImage" v-if="visible" style="width: 100%">
</Modal>
</el-dialog>
</div>
</template>
<script>
import { View } from '@element-plus/icons-vue';
import {getComplainDetail} from '@/api/member.js';
import {communication} from '@/api/order';
export default {
components: { View },
data () {
return {
detail: {}, // 评价详情

View File

@@ -4,12 +4,12 @@
<div class="order">
<div class="order-title">
<Row class="order-row title">
<i-col span="12">商品信息</i-col>
<i-col span="4">投诉状态</i-col>
<i-col span="4">投诉主题</i-col>
<i-col span="6"></i-col>
</Row>
<div class="order-row title">
<div span="12">商品信息</div>
<div span="4">投诉状态</div>
<div span="4">投诉主题</div>
<div span="6"></div>
</div>
</div>
<empty v-if="list.length === 0" />
@@ -21,40 +21,39 @@
<span class="hover-pointer fontsize_12 eval-detail" @click="goDetail(item.id)">投诉详情</span>
<span class="hover-pointer fontsize_12 eval-detail" style="right: 90px" v-if="item.complainStatus === 'APPLYING' || item.complainStatus === 'NEW'" @click="cancel(item.id)">取消投诉</span>
</div>
<Row class="order-item-view">
<i-col span="12" class="item-view-name">
<div class="order-item-view">
<div span="12" class="item-view-name">
<div class="order-img hover-color" @click="linkTo(`/goodsDetail?goodsId=${item.goodsId}&skuId=${item.skuId}`)">
<img :src="item.goodsImage" alt="" />
</div>
<div class="order-name hover-color" @click="linkTo(`/goodsDetail?goodsId=${item.goodsId}&skuId=${item.skuId}`)">
{{item.goodsName}}
</div>
</i-col>
<i-col span="4">{{statusLabel[item.complainStatus]}}</i-col>
<i-col span="4">
</div>
<div span="4">{{statusLabel[item.complainStatus]}}</div>
<div span="4">
<div class="content">{{item.complainTopic}}</div>
</i-col>
<i-col span="4">
<Tooltip >
</div>
<div span="4">
<el-tooltip>
<div class="content">{{item.content}}</div>
<div style="white-space: normal;" slot="content">
{{item.content}}
</div>
</Tooltip>
</i-col>
</Row>
<template #content>
<div style="white-space: normal;">
{{item.content}}
</div>
</template>
</el-tooltip>
</div>
</div>
</div>
</div>
<Spin v-if="loading"></Spin>
<el-skeleton v-if="loading"></el-skeleton>
</div>
<!-- 分页 -->
<div class="page-size">
<Page :total="total" @on-change="changePageNum"
@on-page-size-change="changePageSize"
:page-size="params.pageSize"
show-total
show-sizer>
</Page>
<el-pagination :total="total" @current-change="changePageNum"
@size-change="changePageSize"
:page-size="params.pageSize" layout="total, sizes, prev, pager, next"></el-pagination>
</div>
</div>
</template>

View File

@@ -4,39 +4,38 @@
<!-- 分销申请 -->
<div v-if="status === 0">
<Alert type="warning">分销商申请</Alert>
<Form ref="form" :model="applyForm" :rules="rules">
<FormItem label="姓名" prop="name">
<Input v-model="applyForm.name"></Input>
</FormItem>
<FormItem label="身份证号" prop="idNumber">
<Input v-model="applyForm.idNumber"></Input>
</FormItem>
<FormItem label="银行开户行" prop="settlementBankBranchName">
<Input v-model="applyForm.settlementBankBranchName"></Input>
</FormItem>
<FormItem label="银行开户名" prop="settlementBankAccountName">
<Input v-model="applyForm.settlementBankAccountName"></Input>
</FormItem>
<FormItem label="银行账号" prop="settlementBankAccountNum">
<Input v-model="applyForm.settlementBankAccountNum"></Input>
</FormItem>
<el-alert type="warning">分销商申请</el-alert>
<el-form ref="form" :model="applyForm" :rules="rules">
<el-form-item label="姓名" prop="name">
<el-input v-model="applyForm.name"></el-input>
</el-form-item>
<el-form-item label="身份证号" prop="idNumber">
<el-input v-model="applyForm.idNumber"></el-input>
</el-form-item>
<el-form-item label="银行开户行" prop="settlementBankBranchName">
<el-input v-model="applyForm.settlementBankBranchName"></el-input>
</el-form-item>
<el-form-item label="银行开户名" prop="settlementBankAccountName">
<el-input v-model="applyForm.settlementBankAccountName"></el-input>
</el-form-item>
<el-form-item label="银行账号" prop="settlementBankAccountNum">
<el-input v-model="applyForm.settlementBankAccountNum"></el-input>
</el-form-item>
<FormItem>
<Button type="primary" :loading="applyLoading" @click="apply"
>提交申请</Button
<el-form-item>
<el-button type="primary" :loading="applyLoading" @click="apply"
>提交申请</el-button
>
</FormItem>
</Form>
</el-form-item>
</el-form>
</div>
<!-- 分销审核 -->
<div v-if="status === 1">
<Alert type="success">
您提交的信息正在审核
<template slot="desc"
>提交认证申请后工作人员将在三个工作日进行核对完成审核</template
>
</Alert>
<el-alert
type="success"
title="您提交的信息正在审核"
description="提交认证申请后工作人员将在三个工作日进行核对完成审核"
/>
</div>
<!-- 分销提现商品订单 -->
<div v-if="status === 2">
@@ -54,211 +53,173 @@
<div class="mb_20 account-price">
<span class="subTips">可提现金额</span>
<span class="fontsize_48 global_color"
>{{ result.canRebate | unitPrice }}</span
>
>{{ $filters.unitPrice(result.canRebate) }}</span>
<span class="subTips">冻结金额</span>
<span class="">{{ result.commissionFrozen | unitPrice }}</span>
<span class="">{{ $filters.unitPrice(result.commissionFrozen) }}</span>
<span class="subTips">返利总金额</span>
<span class="">{{ result.rebateTotal | unitPrice }}</span>
<Button
<span class="">{{ $filters.unitPrice(result.rebateTotal) }}</span>
<el-button
type="primary"
size="small"
class="ml_20"
@click="withdrawApplyModal = true"
>申请提现</Button
>申请提现</el-button
>
</div>
</div>
<Tabs :value="tabName" @on-click="tabPaneChange">
<TabPane label="已选商品" name="goodsChecked">
<Table stripe :columns="goodsColumns" :data="goodsData.records">
<template slot-scope="{ row }" slot="name">
<div
class="goods-msg"
@click="
linkTo(
`/goodsDetail?skuId=${row.skuId}&goodsId=${row.goodsId}`
)
"
>
<img
style="vertical-align: top"
:src="row.thumbnail"
width="60"
height="60"
alt=""
/>&nbsp; {{ row.goodsName }}
</div>
</template>
<template slot-scope="{ row }" slot="price">
<span> {{ row.price | unitPrice }}</span>
</template>
<template slot-scope="{ row }" slot="commission">
<span> {{ row.commission | unitPrice }}</span>
</template>
<template slot-scope="{ row }" slot="action">
<Button
type="success"
size="small"
style="margin-right: 5px"
@click="fenxiao(row)"
>分销商品</Button
>
<Button
type="error"
size="small"
@click="selectGoods(row.id, false)"
>取消选择</Button
>
</template>
</Table>
<el-tabs v-model="tabName" @tab-click="(tab) => tabPaneChange(tab.paneName)">
<el-tab-pane label="已选商品" name="goodsChecked">
<el-table stripe :data="goodsData.records || []">
<el-table-column label="商品名称" width="400">
<template #default="{ row }">
<div
class="goods-msg"
@click="linkTo(`/goodsDetail?skuId=${row.skuId}&goodsId=${row.goodsId}`)"
>
<img style="vertical-align: top" :src="row.thumbnail" width="60" height="60" alt="" />
&nbsp; {{ row.goodsName }}
</div>
</template>
</el-table-column>
<el-table-column label="商品价格">
<template #default="{ row }">
<span> {{ $filters.unitPrice(row.price) }}</span>
</template>
</el-table-column>
<el-table-column label="佣金">
<template #default="{ row }">
<span> {{ $filters.unitPrice(row.commission) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" min-width="120">
<template #default="{ row }">
<el-button type="success" size="small" style="margin-right: 5px" @click="fenxiao(row)">分销商品</el-button>
<el-button type="danger" size="small" @click="selectGoods(row.id, false)">取消选择</el-button>
</template>
</el-table-column>
</el-table>
<div class="page-size">
<Page
:current="params.pageNumber"
<el-pagination :current-page="params.pageNumber"
:total="goodsData.total"
:page-size="params.pageSize"
@on-change="changePage"
size="small"
show-total
show-elevator
></Page>
@current-change="changePage"
small
layout="total, prev, pager, next, jumper"></el-pagination>
</div>
</TabPane>
<TabPane label="未选商品" name="goodsUncheck">
<Table stripe :columns="goodsColumns" :data="goodsData.records">
<template slot-scope="{ row }" slot="name">
<div
class="goods-msg"
@click="
linkTo(
`/goodsDetail?skuId=${row.skuId}&goodsId=${row.goodsId}`
)
"
>
<img
style="vertical-align: top"
:src="row.thumbnail"
width="60"
height="60"
alt=""
/>&nbsp; {{ row.goodsName }}
</div>
</template>
<template slot-scope="{ row }" slot="price">
<span> {{ row.price | unitPrice }}</span>
</template>
<template slot-scope="{ row }" slot="commission">
<span> {{ row.commission | unitPrice }}</span>
</template>
<template slot-scope="{ row }" slot="action">
<Button
type="primary"
size="small"
style="margin-right: 5px"
@click="selectGoods(row.id, true)"
>选择商品</Button
>
</template>
</Table>
</el-tab-pane>
<el-tab-pane label="未选商品" name="goodsUncheck">
<el-table stripe :data="goodsData.records || []">
<el-table-column label="商品名称" width="400">
<template #default="{ row }">
<div
class="goods-msg"
@click="linkTo(`/goodsDetail?skuId=${row.skuId}&goodsId=${row.goodsId}`)"
>
<img style="vertical-align: top" :src="row.thumbnail" width="60" height="60" alt="" />
&nbsp; {{ row.goodsName }}
</div>
</template>
</el-table-column>
<el-table-column label="商品价格">
<template #default="{ row }">
<span> {{ $filters.unitPrice(row.price) }}</span>
</template>
</el-table-column>
<el-table-column label="佣金">
<template #default="{ row }">
<span> {{ $filters.unitPrice(row.commission) }}</span>
</template>
</el-table-column>
<el-table-column label="操作" min-width="120">
<template #default="{ row }">
<el-button type="primary" size="small" style="margin-right: 5px" @click="selectGoods(row.id, true)">选择商品</el-button>
</template>
</el-table-column>
</el-table>
<div class="page-size">
<Page
:current="params.pageNumber"
<el-pagination :current-page="params.pageNumber"
:total="goodsData.total"
:page-size="params.pageSize"
@on-change="changePage"
size="small"
show-total
show-elevator
></Page>
@current-change="changePage"
small
layout="total, prev, pager, next, jumper"></el-pagination>
</div>
</TabPane>
<TabPane label="提现记录" name="log">
<Table stripe :columns="logColumns" :data="logData.records">
<template slot-scope="{ row }" slot="sn">
<span>{{ row.sn }}</span>
</template>
<template slot-scope="{ row }" slot="time">
<span>{{ row.createTime }}</span>
</template>
<template slot-scope="{ row }" slot="price">
<span
v-if="row.distributionCashStatus == 'VIA_AUDITING'"
style="color: green"
>
+{{ row.price | unitPrice }}</span
>
<span v-else style="color: red">
-{{ row.price | unitPrice }}</span
>
</template>
<template slot-scope="{ row }" slot="status">
<span>
{{
row.distributionCashStatus == "APPLY"
? "待处理"
: row.distributionCashStatus == "VIA_AUDITING"
? "通过"
: "拒绝"
}}</span
>
</template>
</Table>
</el-tab-pane>
<el-tab-pane label="提现记录" name="log">
<el-table stripe :data="logData.records || []">
<el-table-column prop="sn" label="编号" />
<el-table-column prop="createTime" label="申请时间" />
<el-table-column label="提现金额">
<template #default="{ row }">
<span v-if="row.distributionCashStatus == 'VIA_AUDITING'" style="color: green">
+{{ $filters.unitPrice(row.price) }}
</span>
<span v-else style="color: red">
-{{ $filters.unitPrice(row.price) }}
</span>
</template>
</el-table-column>
<el-table-column label="提现状态">
<template #default="{ row }">
<span>
{{
row.distributionCashStatus == "APPLY"
? "待处理"
: row.distributionCashStatus == "VIA_AUDITING"
? "通过"
: "拒绝"
}}
</span>
</template>
</el-table-column>
</el-table>
<div class="page-size">
<Page
:current="logParams.pageNumber"
<el-pagination :current-page="logParams.pageNumber"
:total="logData.total"
:page-size="logParams.pageSize"
@on-change="changePageLog"
size="small"
show-total
show-elevator
></Page>
@current-change="changePageLog"
small
layout="total, prev, pager, next, jumper"></el-pagination>
</div>
</TabPane>
</Tabs>
</el-tab-pane>
</el-tabs>
</div>
<!-- 未开放 -->
<div v-if="status === 3">
<Alert type="error">
分销功能暂未开启
<template slot="desc"
>提交认证申请后工作人员将在三个工作日进行核对完成审核</template
>
</Alert>
<el-alert type="danger" title="分销功能暂未开启" />
</div>
<!-- 分销资格被清退 -->
<div v-if="status === 4">
<Alert type="error">
<el-alert type="danger">
您的分销资格已被清退请联系管理员或进行申诉
<Button style="margin-left: 50px;" type="warning" @click="repaying">申诉</Button>
</Alert>
<el-button style="margin-left: 50px;" type="warning" @click="repaying">申诉</el-button>
</el-alert>
</div>
<!-- 分销申诉审核 -->
<div v-if="status === 5">
<Alert type="success">
您提交的申诉正在审核
<template slot="desc"
>提交认证申请后工作人员将在三个工作日进行核对完成审核</template
>
</Alert>
<el-alert
type="success"
title="您提交的申诉正在审核"
description="提交认证申请后工作人员将在三个工作日进行核对完成审核"
/>
</div>
<Modal v-model="withdrawApplyModal" width="530">
<p slot="header">
<Icon type="edit"></Icon>
<el-dialog v-model="withdrawApplyModal" width="530">
<template #header><p>
<el-icon><Edit /></el-icon>
<span>提现金额</span>
</p>
</p></template>
<div>
<Input v-model="withdrawPrice" size="large" number maxlength="9"
><span slot="append"></span></Input
<el-input v-model="withdrawPrice" size="large" number maxlength="9"
><template #append><span></span></template></el-input
>
</div>
<div slot="footer" style="text-align: center">
<Button type="primary" size="large" @click="withdraw">提现</Button>
</div>
</Modal>
<Modal v-model="qrcodeShow" title="分销商品" width="800">
<Alert type="warning"> 下载二维码或者复制链接分享商品 </Alert>
<template #footer><div style="text-align: center">
<el-button type="primary" size="large" @click="withdraw">提现</el-button>
</div></template>
</el-dialog>
<el-dialog v-model="qrcodeShow" title="分销商品" width="800">
<el-alert type="warning"> 下载二维码或者复制链接分享商品 </el-alert>
<div class="qrcode">
<div style="width: 150px; height: 150px; border: 1px solid #eee">
<vue-qr
@@ -270,8 +231,8 @@
:size="150"
></vue-qr>
<div class="qrcode-platform">PC端</div>
<Button class="download-btn" type="success" @click="downloadQrcode"
>下载二维码</Button
<el-button class="download-btn" type="success" @click="downloadQrcode"
>下载二维码</el-button
>
</div>
<div style="width: 150px; height: 150px; border: 1px solid #eee">
@@ -284,20 +245,20 @@
:size="150"
></vue-qr>
<div class="qrcode-platform">移动应用端</div>
<Button class="download-btn" type="success" @click="downloadQrcodeH5"
>下载二维码</Button
<el-button class="download-btn" type="success" @click="downloadQrcodeH5"
>下载二维码</el-button
>
</div>
</div>
<div class="mt_10" style="margin-top: 100px;">
商品链接<Input style="width: 600px" v-model="qrcode"></Input>
</div>
</Modal>
商品链接<el-input style="width: 600px" v-model="qrcode"></el-input>
</div></el-dialog>
</div>
</template>
<script>
import { Edit } from '@element-plus/icons-vue';
import {
distribution,
applyDistribution,
@@ -311,7 +272,7 @@ import { checkBankno } from "@/plugins/Foundation";
import vueQr from "vue-qr";
export default {
name: "Distribution",
components: { vueQr },
components: { vueQr, Edit },
data() {
return {
config:require('@/config'),
@@ -358,20 +319,6 @@ export default {
withdrawPrice: 0, // 提现金额
goodsData: {}, // 商品数据
logData: {}, // 日志数据
goodsColumns: [
// 商品表头
{ title: "商品名称", slot: "name", width: 400 },
{ title: "商品价格", slot: "price" },
{ title: "佣金", slot: "commission" },
{ title: "操作", slot: "action", minWidth: 120 },
],
logColumns: [
// 日志表头
{ title: "编号", slot: "sn" },
{ title: "申请时间", slot: "time" },
{ title: "提现金额", slot: "price" },
{ title: "提现状态", slot: "status" },
],
params: {
// 商品请求参数
pageNumber: 1,
@@ -584,7 +531,7 @@ export default {
margin-left: 25px;
margin-top: 5px
}
::v-deep .ivu-alert-message {
:deep(.el-alert__content) {
p {
margin: 4px 0;
}

View File

@@ -17,22 +17,22 @@
</div>
<div v-else class="goodsTitle hover-pointer" @click="buynow(item.skuId, item.goodsId,item.id)" >
{{ item.storeName }}
<Tag color="error" class="operated" v-if="item.selfOperated">商家自营</Tag>
<el-tag color="error" class="operated" v-if="item.selfOperated">商家自营</el-tag>
</div>
<div class="goodsPrice">
<span v-if="params.type === 'GOODS'">{{ item.price | unitPrice('') }}</span>
<span v-if="params.type === 'GOODS'">{{ $filters.unitPrice(item.price, '') }}</span>
</div>
<div class="goodsBuy">
<Button size="small" type="primary" @click="buynow(item.skuId, item.goodsId)"
v-if="params.type === 'GOODS'">立即购买</Button>
<Button size="small" type="primary" @click="goShop(item.id)" v-else>店铺购买</Button>
<Button size="small" v-if="params.type === 'GOODS'" @click="cancel(item.skuId)">取消收藏</Button>
<Button size="small" v-if="params.type === 'STORE'" @click="cancelStore(item.id)">取消收藏</Button>
<el-button size="small" type="primary" @click="buynow(item.skuId, item.goodsId)"
v-if="params.type === 'GOODS'">立即购买</el-button>
<el-button size="small" type="primary" @click="goShop(item.id)" v-else>店铺购买</el-button>
<el-button size="small" v-if="params.type === 'GOODS'" @click="cancel(item.skuId)">取消收藏</el-button>
<el-button size="small" v-if="params.type === 'STORE'" @click="cancelStore(item.id)">取消收藏</el-button>
</div>
</div>
</div>
<Spin size="large" fix v-if="spinShow"></Spin>
<el-skeleton size="large" fix v-if="spinShow"></el-skeleton>
</div>
<empty v-else />
</div>

View File

@@ -9,7 +9,7 @@
<div class="gradeNameRow">
<span class="gradeNameText">{{ currentGrade.gradeName || '暂无等级' }}</span>
<span v-if="currentGradeBenefits.length" class="benefitTagsInline">
<Tag v-for="b in currentGradeBenefits" :key="b.id" class="benefitTag" color="blue">{{ b.benefitName || '-' }}</Tag>
<el-tag v-for="b in currentGradeBenefits" :key="b.id" class="benefitTag" color="blue">{{ b.benefitName || '-' }}</el-tag>
</span>
</div>
<div class="gradeExp">
@@ -24,54 +24,58 @@
</div>
</div>
<Tabs value="rules">
<TabPane label="获取经验值方式" name="rules">
<Table :columns="ruleColumns" :data="ruleList" :loading="rulesLoading">
<template slot-scope="{ row }" slot="ruleItem">
<div class="ruleItem">
<div class="ruleTop">
<div class="ruleName">
<span>{{ row.ruleName || row.ruleKey || '-' }}</span>
<el-tabs value="rules">
<el-tab-pane label="获取经验值方式" name="rules">
<el-table v-loading="rulesLoading" :data="ruleList">
<el-table-column label="获取方式" min-width="720">
<template #default="{ row }">
<div class="ruleItem">
<div class="ruleTop">
<div class="ruleName">
<span>{{ row.ruleName || row.ruleKey || '-' }}</span>
</div>
<el-tag v-if="row.completed === true" color="success">已完成</el-tag>
<el-tag v-else color="default">未完成</el-tag>
</div>
<div class="ruleDesc">{{ getRuleDesc(row.ruleKey) }}</div>
<div class="ruleMeta">
<span class="metaItem">单次获得<b>+{{ row.value == null ? 0 : row.value }}</b></span>
<span v-if="row.maxValue != null && Number(row.maxValue) > 0" class="metaItem">限额<b>{{ row.maxValue }}</b></span>
<span class="metaItem">已获得<b>{{ row.gainedExperience == null ? 0 : row.gainedExperience }}</b></span>
</div>
<Tag v-if="row.completed === true" color="success">已完成</Tag>
<Tag v-else color="default">未完成</Tag>
</div>
<div class="ruleDesc">{{ getRuleDesc(row.ruleKey) }}</div>
<div class="ruleMeta">
<span class="metaItem">单次获得<b>+{{ row.value == null ? 0 : row.value }}</b></span>
<span v-if="row.maxValue != null && Number(row.maxValue) > 0" class="metaItem">限额<b>{{ row.maxValue }}</b></span>
<span class="metaItem">已获得<b>{{ row.gainedExperience == null ? 0 : row.gainedExperience }}</b></span>
</div>
</div>
</template>
</Table>
</template>
</el-table-column>
</el-table>
<div class="rulesDesc" v-if="rulesDescription">{{ rulesDescription }}</div>
</TabPane>
<TabPane label="经验值记录" name="logs">
<Table :columns="logColumns" :data="experienceLogs.records || []" :loading="logLoading">
<template slot-scope="{ row }" slot="rule">
<span>{{ getRuleName(row.ruleKey) }}</span>
</template>
<template slot-scope="{ row }" slot="delta">
<div :style="{color: getLogDeltaColor(row)}">
<span v-if="getLogDeltaSign(row) === '+'">+</span>{{ getLogDeltaAbsValue(row) }}
</div>
</template>
</Table>
<Page
style="float:right;margin-top:10px"
:current="params.pageNumber"
</el-tab-pane>
<el-tab-pane label="经验值记录" name="logs">
<el-table v-loading="logLoading" :data="experienceLogs.records || []">
<el-table-column prop="createTime" label="时间" align="center" min-width="160" />
<el-table-column label="规则" align="center" min-width="160">
<template #default="{ row }">
<span>{{ getRuleName(row.ruleKey) }}</span>
</template>
</el-table-column>
<el-table-column label="变动值" align="center" min-width="120">
<template #default="{ row }">
<div :style="{ color: getLogDeltaColor(row) }">
<span v-if="getLogDeltaSign(row) === '+'">+</span>{{ getLogDeltaAbsValue(row) }}
</div>
</template>
</el-table-column>
</el-table>
<el-pagination style="float:right;margin-top:10px"
:current-page="params.pageNumber"
:total="experienceLogs.total || 0"
:page-size="params.pageSize"
@on-change="changePage"
@on-page-size-change="changePageSize"
:page-size-opts="[10, 20, 50]"
size="small"
show-total
show-elevator
></Page>
</TabPane>
</Tabs>
@current-change="changePage"
@size-change="changePageSize"
:page-sizes="[10, 20, 50]"
small
layout="total, prev, pager, next, jumper"></el-pagination>
</el-tab-pane>
</el-tabs>
</div>
@@ -100,34 +104,7 @@ export default {
pageNumber: 1,
pageSize: 10
},
experienceLogs: {},
ruleColumns: [
{
title: '获取方式',
slot: 'ruleItem',
minWidth: 720
}
],
logColumns: [
{
title: '时间',
key: 'createTime',
align: 'center',
minWidth: 160
},
{
title: '规则',
slot: 'rule',
align: 'center',
minWidth: 160
},
{
title: '变动值',
slot: 'delta',
align: 'center',
minWidth: 120
}
]
experienceLogs: {}
}
},
computed: {

View File

@@ -2,77 +2,78 @@
<div class="wrapper">
<card _Title="账户安全"/>
<!-- 手机号验证 -->
<Form ref="formData" :model="formData" label-position="left" :label-width="100" :rules="ruleInLines"
<el-form ref="formData" :model="formData" label-position="left" label-width="100px" :rules="ruleInLines"
v-if="(status == 2 || status == 3) && !showPwd">
<FormItem label="手机号">
<el-form-item label="手机号">
<div class="phone">1234567890</div>
</FormItem>
<FormItem label="图片验证码" prop="picture" style="width: 350px">
<i-input v-model="formData.picture" size="large" maxlength="4"></i-input>
</FormItem>
<FormItem label="短信验证码" prop="msg">
<i-input v-model="formData.msg" size="large" maxlength="6" style="width: 250px">
<span slot="append">输入验证码</span>
</i-input>
</FormItem>
</Form>
<div slot="footer" v-if="(status == 2 || status == 3) && !showPwd" style="text-align: center;width: 50%">
<Button type="primary" class="ml_10" @click="submitRegister">下一步</Button>
</el-form-item>
<el-form-item label="图片验证码" prop="picture" style="width: 350px">
<el-input v-model="formData.picture" size="large" maxlength="4"></el-input>
</el-form-item>
<el-form-item label="短信验证码" prop="msg">
<el-input v-model="formData.msg" size="large" maxlength="6" style="width: 250px">
<template #append><span>输入验证码</span></template>
</el-input>
</el-form-item>
</el-form>
<div v-if="(status == 2 || status == 3) && !showPwd" style="text-align: center;width: 50%">
<el-button type="primary" class="ml_10" @click="submitRegister">下一步</el-button>
</div>
<!-- 修改 -->
<Form ref="formRegister" :model="formRegister" :rules="ruleInline" :label-width="80" v-if="status == 1 && !showPwd">
<FormItem label="旧密码" prop="password">
<i-input type="password" v-model="formRegister.password" clearable size="large" placeholder="请输入旧密码"
<el-form ref="formRegister" :model="formRegister" :rules="ruleInline" label-width="80px" v-if="status == 1 && !showPwd">
<el-form-item label="旧密码" prop="password">
<el-input type="password" v-model="formRegister.password" clearable size="large" placeholder="请输入旧密码"
style="width: 300px"
maxlength="12">
<Icon type="md-lock" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem label="新密码" prop="newPassword">
<i-input type="password" v-model="formRegister.newPassword" clearable size="large" placeholder="请输入新密码"
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item label="新密码" prop="newPassword">
<el-input type="password" v-model="formRegister.newPassword" clearable size="large" placeholder="请输入新密码"
style="width: 300px"
maxlength="12">
<Icon type="md-lock" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem label="确认密码" prop="againPassword">
<i-input type="password" v-model="formRegister.againPassword" clearable size="large" placeholder="请输入确认密码"
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item label="确认密码" prop="againPassword">
<el-input type="password" v-model="formRegister.againPassword" clearable size="large" placeholder="请输入确认密码"
style="width: 300px"
maxlength="12">
<Icon type="md-lock" slot="prepend"></Icon>
</i-input>
</FormItem>
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
</Form>
<div slot="footer" v-if="status == 1 && !showPwd" style="width: 50%;text-align: center">
<Button type="primary" class="ml_10" @click="handleRegist">修改</Button>
</el-form>
<div v-if="status == 1 && !showPwd" style="width: 50%;text-align: center">
<el-button type="primary" class="ml_10" @click="handleRegist">修改</el-button>
</div>
<!-- 设置&修改的第二种情况 -->
<Form ref="formDataUpdate" :model="formDataUpdate" label-position="left" :label-width="100" :rules="ruleIn"
<el-form ref="formDataUpdate" :model="formDataUpdate" label-position="left" label-width="100px" :rules="ruleIn"
v-if="showPwd">
<FormItem label="新密码" prop="newPassword">
<i-input type="password" v-model="formDataUpdate.newPassword" clearable size="large" placeholder="请输入新密码"
<el-form-item label="新密码" prop="newPassword">
<el-input type="password" v-model="formDataUpdate.newPassword" clearable size="large" placeholder="请输入新密码"
style="width: 300px"
maxlength="12">
<Icon type="md-lock" slot="prepend"></Icon>
</i-input>
</FormItem>
<FormItem label="确认密码" prop="againPassword">
<i-input type="password" v-model="formDataUpdate.againPassword" clearable size="large" placeholder="请输入确认密码"
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
<el-form-item label="确认密码" prop="againPassword">
<el-input type="password" v-model="formDataUpdate.againPassword" clearable size="large" placeholder="请输入确认密码"
style="width: 300px"
maxlength="12">
<Icon type="md-lock" slot="prepend"></Icon>
</i-input>
</FormItem>
</Form>
<div slot="footer" v-if="showPwd" style="text-align: center;width: 50%">
<Button type="primary" class="ml_10" @click="setPassword">设置</Button>
<template #prepend><el-icon><Lock /></el-icon></template>
</el-input>
</el-form-item>
</el-form>
<div v-if="showPwd" style="text-align: center;width: 50%">
<el-button type="primary" class="ml_10" @click="setPassword">设置</el-button>
</div>
</div>
</template>
<script>
import { Lock } from '@element-plus/icons-vue';
import {
setPwd,
editPwd
@@ -80,6 +81,7 @@ import {
import {md5} from '@/plugins/md5.js'
export default {
components: { Lock },
name: 'modifyPwd',
data () {
return {

View File

@@ -6,26 +6,27 @@
<span>累计获得<span>{{ pointObj.totalPoint || 0 }}</span></span>
</div>
<h3>积分日志</h3>
<Table :columns="logColumns" :data="logData.records">
<template slot-scope="{ row }" slot="point">
<div :style="{color:row.pointType === 'INCREASE' ? 'green' : 'red'}">
<span v-if="row.pointType === 'INCREASE'">+</span>{{ row.variablePoint }}
</div>
</template>
</Table>
<el-table :data="logData.records || []">
<el-table-column prop="content" label="日志内容" align="center" />
<el-table-column prop="createTime" label="时间" align="center" />
<el-table-column label="积分明细" align="center">
<template #default="{ row }">
<div :style="{ color: row.pointType === 'INCREASE' ? 'green' : 'red' }">
<span v-if="row.pointType === 'INCREASE'">+</span>{{ row.variablePoint }}
</div>
</template>
</el-table-column>
</el-table>
<!-- 分页 -->
<Page
style="float:right;margin-top:10px"
:current="params.pageNumber"
<el-pagination style="float:right;margin-top:10px"
:current-page="params.pageNumber"
:total="logData.total"
:page-size="params.pageSize"
@on-change="changePage"
@on-page-size-change="changePageSize"
:page-size-opts="[10, 20, 50]"
size="small"
show-total
show-elevator
></Page>
@current-change="changePage"
@size-change="changePageSize"
:page-sizes="[10, 20, 50]"
small
layout="total, prev, pager, next, jumper"></el-pagination>
</div>
</template>
<script>
@@ -42,23 +43,6 @@ export default {
pageNumber: 1,
pageSize: 10
},
logColumns: [ // table展示数据
{
title: '日志内容',
key: 'content',
align: 'center'
},
{
title: '时间',
key: 'createTime',
align: 'center'
},
{
title: '积分明细',
slot: 'point',
align: 'center'
}
]
}
},
mounted () {

View File

@@ -1,38 +1,38 @@
<template>
<div class="wrapper">
<card _Title="用户信息" />
<Form :model="formItem" :rules="rules" ref="form" :label-width="80">
<FormItem label="头像">
<Avatar v-if="formItem.face" :src="formItem.face" size="80"/>
<Avatar v-else icon="ios-person" size="80"/>
<Upload
<el-form :model="formItem" :rules="rules" ref="form" label-width="80px">
<el-form-item label="头像">
<el-avatar v-if="formItem.face" :src="formItem.face" :size="80" />
<el-avatar v-else :size="80"><el-icon><User /></el-icon></el-avatar>
<el-upload
:show-upload-list="false"
:on-success="handleSuccess"
:format="['jpg','jpeg','png']"
:action="action"
:headers="accessToken"
>
<Button class="mt_10">上传头像</Button>
</Upload>
</FormItem>
<FormItem label="昵称" prop="nickName">
<Input class="wrapper-user-name" style="width:187px" v-model="formItem.nickName" placeholder="" />
</FormItem>
<el-button class="mt_10">上传头像</el-button>
</el-upload>
</el-form-item>
<el-form-item label="昵称" prop="nickName">
<el-input class="wrapper-user-name" style="width:187px" v-model="formItem.nickName" placeholder="" />
</el-form-item>
<FormItem label="生日">
<DatePicker type="date" placeholder="选择您的生日" v-model="formItem.birthday"></DatePicker>
</FormItem>
<FormItem label="性别">
<RadioGroup v-model="formItem.sex" type="button" button-style="solid">
<Radio :label="1"></Radio>
<Radio :label="0"></Radio>
</RadioGroup>
</FormItem>
<FormItem>
<Button type="primary" @click="save">确认修改</Button>
<el-form-item label="生日">
<el-date-picker type="date" placeholder="选择您的生日" v-model="formItem.birthday"></el-date-picker>
</el-form-item>
<el-form-item label="性别">
<el-radio-group v-model="formItem.sex" type="button" button-style="solid">
<el-radio :label="1"></el-radio>
<el-radio :label="0"></el-radio>
</el-radio-group>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="save">确认修改</el-button>
</FormItem>
</Form>
</el-form-item>
</el-form>
</div>
</template>
@@ -40,7 +40,9 @@
import { editMemberInfo } from '@/api/account.js';
import { commonUrl } from '@/plugins/request.js';
import storage from '@/plugins/storage.js';
import { User } from '@element-plus/icons-vue';
export default {
components: { User },
name: 'Profile',
data () {
return {
@@ -103,7 +105,7 @@ export default {
})
},
handleSuccess (res, file) { // 上传成功
this.$set(this.formItem, 'face', res.result)
this.formItem['face'] = res.result
},
}

View File

@@ -11,9 +11,9 @@
<div class="delivery-rate">
<div class="fontsize_16">物流服务评价</div>
<div class="color999">
<span>物流评价<Rate v-model="form.deliveryScore" /></span>
<span>服务评价<Rate v-model="form.serviceScore" /></span>
<span>描述评价<Rate v-model="form.descriptionScore" /></span>
<span>物流评价<el-rate v-model="form.deliveryScore" /></span>
<span>服务评价<el-rate v-model="form.serviceScore" /></span>
<span>描述评价<el-rate v-model="form.descriptionScore" /></span>
</div>
</div>
<!-- 添加订单评价 左侧商品详情 右侧评价框 -->
@@ -22,28 +22,28 @@
<div class="goods-con">
<img :src="orderGoods.image" class="hover-pointer" alt="" width="100" @click="goGoodsDetail(orderGoods.skuId, orderGoods.goodsId)">
<p class="hover-pointer color999" @click="goGoodsDetail(orderGoods.skuId, orderGoods.goodsId)">{{orderGoods.goodsName}}</p>
<p>{{orderGoods.goodsPrice | unitPrice('¥')}}</p>
<p>{{ $filters.unitPrice(orderGoods.goodsPrice, '¥') }}</p>
</div>
<div class="eval-con">
<div>
<span class="color999">商品评价</span>
<RadioGroup style="margin-bottom:5px;color:#999" v-model="orderGoods.grade" type="button" button-style="solid">
<Radio label="GOOD">好评</Radio>
<Radio label="MODERATE">中评</Radio>
<Radio label="WORSE">差评</Radio>
</RadioGroup>
<Input type="textarea" maxlength="500" show-word-limit :rows="4" v-model="orderGoods.content" />
<el-radio-group style="margin-bottom:5px;color:#999" v-model="orderGoods.grade" type="button" button-style="solid">
<el-radio label="GOOD">好评</el-radio>
<el-radio label="MODERATE">中评</el-radio>
<el-radio label="WORSE">差评</el-radio>
</el-radio-group>
<el-input type="textarea" maxlength="500" show-word-limit :rows="4" v-model="orderGoods.content" />
</div>
<div style="display:flex;align-items:center;">
<div class="demo-upload-list" v-for="(img, index) in orderGoods.uploadList" :key="index">
<img :src="img">
<div class="demo-upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(img)"></Icon>
<Icon type="ios-trash-outline" @click.native="handleRemove(index)"></Icon>
<el-icon @click="handleView(img)"><View /></el-icon>
<el-icon @click="handleRemove(index)"><Delete /></el-icon>
</div>
</div>
<Upload
<el-upload
:show-upload-list="false"
:on-success="handleSuccess"
:before-upload="handleBeforeUpload"
@@ -52,25 +52,27 @@
:headers="accessToken"
style="display: inline-block;width:58px;">
<div class="hover-pointer icon-upload" style="">
<Icon type="ios-camera" size="20"></Icon>
<el-icon :size="20"><Camera /></el-icon>
</div>
</Upload>
</el-upload>
</div>
</div>
</li>
</ul>
<Button type="primary" class="mt_10" :loading="loading" @click="save">发表</Button>
<Modal title="View Image" v-model="visible">
<el-button type="primary" class="mt_10" :loading="loading" @click="save">发表</el-button>
<el-dialog title="View Image" v-model="visible">
<img :src="previewImage" v-if="visible" style="width: 100%">
</Modal>
</el-dialog>
</div>
</template>
<script>
import { Camera, Delete, View } from '@element-plus/icons-vue';
import { orderDetail } from '@/api/order.js';
import { addEvaluation } from '@/api/member.js';
import { commonUrl } from '@/plugins/request.js';
import storage from '@/plugins/storage';
export default {
components: { Camera, Delete, View },
data () {
return {
order: {}, // 订单详情
@@ -92,7 +94,7 @@ export default {
orderDetail(this.$route.query.sn).then(res => {
this.order = res.result
this.orderGoods = res.result.orderItems[this.$route.query.index]
this.$set(this.orderGoods, 'grade', 'GOOD')
this.orderGoods['grade'] = 'GOOD'
this.orderGoods.uploadList = []
})
},

View File

@@ -3,8 +3,7 @@
<div class="title">
<card _Title="评价详情" :_Size="16"></card>
<p>
<span class="color999">创建人</span
><span>{{ orderGoods.createBy | secrecyMobile }}</span>
<span class="color999">创建人</span><span>{{ $filters.secrecyMobile( orderGoods.createBy ) }}</span>
<span class="color999 ml_20">{{ orderGoods.createTime }}</span>
</p>
</div>
@@ -12,10 +11,10 @@
<div class="delivery-rate">
<div class="fontsize_16">物流服务评价</div>
<div class="color999">
<span>物流评价<Rate disabled :value="Number(orderGoods.deliveryScore)" /></span>
<span>服务评价<Rate disabled :value="Number(orderGoods.serviceScore)" /></span>
<span>物流评价<el-rate disabled :value="Number(orderGoods.deliveryScore)" /></span>
<span>服务评价<el-rate disabled :value="Number(orderGoods.serviceScore)" /></span>
<span
>服务评价<Rate disabled :value="Number(orderGoods.descriptionScore)"
>服务评价<el-rate disabled :value="Number(orderGoods.descriptionScore)"
/></span>
</div>
</div>
@@ -41,17 +40,17 @@
<div class="eval-con">
<div>
<span class="color999">商品评价</span>
<RadioGroup
<el-radio-group
style="margin-bottom: 5px; color: #999"
v-model="orderGoods.grade"
type="button"
button-style="solid"
>
<Radio label="GOOD" disabled>好评</Radio>
<Radio label="MODERATE" disabled>中评</Radio>
<Radio label="WORSE" disabled>差评</Radio>
</RadioGroup>
<Input
<el-radio label="GOOD" disabled>好评</el-radio>
<el-radio label="MODERATE" disabled>中评</el-radio>
<el-radio label="WORSE" disabled>差评</el-radio>
</el-radio-group>
<el-input
type="textarea"
maxlength="500"
readonly
@@ -64,7 +63,7 @@
<template v-if="orderGoods.images">
<div class="demo-upload-list" v-for="(img, index) in orderGoods.images.split(',')" :key="index">
<img :src="img" />
<div class="demo-upload-list-cover"><Icon type="ios-eye-outline" @click.native="handleView(img)"></Icon></div>
<div class="demo-upload-list-cover"><el-icon @click="handleView(img)"><View /></el-icon></div>
</div>
</template>
</div>
@@ -75,7 +74,7 @@
<template v-if="orderGoods.replyImage">
<div class="demo-upload-list" v-for="(img, index) in orderGoods.replyImage.split(',')" :key="index">
<img :src="img" />
<div class="demo-upload-list-cover"><Icon type="ios-eye-outline" @click.native="handleView(img)"></Icon></div>
<div class="demo-upload-list-cover"><el-icon @click="handleView(img)"><View /></el-icon></div>
</div>
</template>
</div>
@@ -84,14 +83,16 @@
</div>
</li>
</ul>
<Modal title="View Image" v-model="visible">
<el-dialog title="View Image" v-model="visible">
<img :src="previewImage" v-if="visible" style="width: 100%" />
</Modal>
</el-dialog>
</div>
</template>
<script>
import { View } from '@element-plus/icons-vue';
import { evaluationDetail } from "@/api/member.js";
export default {
components: { View },
data() {
return {
order: {}, // 订单详情

View File

@@ -2,21 +2,39 @@
<div class="msg-list">
<card _Title="我的消息" :_Tabs="status" :_Size="16" @_Change="statusChange"/>
<Table v-if="params.status != 'ALREADY_REMOVE' " :columns="messageColumns" :data="messageData.records"></Table>
<Table v-if="params.status == 'ALREADY_REMOVE' " :columns="messageDelColumns" :data="messageData.records"></Table>
<!-- 分页 -->
<Page
<el-table v-if="params.status != 'ALREADY_REMOVE'" :data="messageData.records || []">
<el-table-column prop="title" label="消息标题" align="left" show-overflow-tooltip />
<el-table-column prop="content" label="消息内容" align="left" show-overflow-tooltip />
<el-table-column prop="createTime" label="发送时间" align="left" width="240" />
<el-table-column label="操作" align="center" fixed="right" width="150">
<template #default="{ row }">
<el-button
v-if="row.status === 'UN_READY'"
type="primary"
size="small"
style="margin-right: 5px"
@click="setRead(row.id)"
>已读</el-button>
<el-button type="danger" size="small" @click="removeMessage(row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-table v-else :data="messageData.records || []">
<el-table-column prop="title" label="消息标题" align="left" show-overflow-tooltip />
<el-table-column prop="content" label="消息内容" align="left" show-overflow-tooltip />
<el-table-column prop="createTime" label="发送时间" align="left" width="240" />
</el-table>
<el-pagination
style="float:right;margin-top:10px"
:current="params.pageNumber"
:current-page="params.pageNumber"
:total="messageData.total"
:page-size="params.pageSize"
@on-change="changePage"
@on-page-size-change="changePageSize"
:page-size-opts="[10, 20, 50]"
size="small"
show-total
show-elevator
></Page>
@current-change="changePage"
@size-change="changePageSize"
:page-sizes="[10, 20, 50]"
small
layout="total, prev, pager, next, jumper"
/>
</div>
</template>
<script>
@@ -24,146 +42,37 @@ import {memberMsgList, readMemberMsg, delMemberMsg} from '@/api/member.js'
export default {
data() {
return {
messageData: {}, // 消息数据
messageData: {},
status: ['未读', '已读', '回收站'],
params: { // 请求参数
params: {
pageNumber: 1,
pageSize: 10,
status: 'UN_READY'
},
messageDelColumns: [ // table展示数据
{
title: '消息标题',
key: 'title',
align: 'left',
tooltip: true,
},
{
title: '消息内容',
key: 'content',
align: 'left',
tooltip: true
},
{
title: '发送时间',
key: 'createTime',
align: 'left',
width: 240
},
],
messageColumns: [ // table展示数据
{
title: '消息标题',
key: 'title',
align: 'left',
tooltip: true,
},
{
title: '消息内容',
key: 'content',
align: 'left',
tooltip: true
},
{
title: '发送时间',
key: 'createTime',
align: 'left',
width: 240
},
{
title: '操作',
key: 'action',
align: 'center',
fixed: 'right',
width: 150,
render: (h, params) => {
if (params.row.status === 'UN_READY') {
return h('div', [
h(
'Button',
{
props: {
type: 'info',
size: 'small'
},
style: {
marginRight: '5px'
},
on: {
click: () => {
this.setRead(params.row.id);
}
}
},
'已读'
), h(
'Button',
{
props: {
size: 'small',
type: 'error'
},
on: {
click: () => {
this.removeMessage(params.row.id);
}
}
},
'删除'
)
]);
} else if (params.row.status === 'ALREADY_READY') {
return h('div', [
h(
'Button',
{
props: {
size: 'small',
type: 'error'
},
on: {
click: () => {
this.removeMessage(params.row.id);
}
}
},
'删除'
)
]);
} else {
}
}
}
]
}
},
methods: {
// 消息状态发生变化
statusChange (index) {
if (index === 0) { this.params.status = 'UN_READY' }
if (index === 1) { this.params.status = 'ALREADY_READY' }
if (index === 2) { this.params.status = 'ALREADY_REMOVE' }
this.getList()
},
// 修改页码
changePage (v) {
this.params.pageNumber = v;
this.getList();
},
// 修改页数
changePageSize (v) {
this.params.pageSize = v;
this.getList();
},
getList () { // 获取消息列表
getList () {
memberMsgList(this.params).then(res => {
if (res.success) {
this.messageData = res.result;
}
})
},
// 设置消息已读
setRead (id) {
readMemberMsg(id).then(res => {
if (res.success) {
@@ -171,15 +80,12 @@ export default {
}
})
},
// 消息放入回收站
removeMessage (id) {
this.$Modal.confirm({
title: '确认删除',
// 记得确认修改此处
content: '确认要删除此消息?',
loading: true,
onOk: () => {
// 删除
delMemberMsg(id).then((res) => {
this.$Modal.remove();
if (res.success) {

View File

@@ -2,33 +2,33 @@
<div>
<card _Title="收货地址" />
<div class="add-box">
<Form :model="formData" ref="form" label-position="left" :label-width="100" :rules="ruleInline">
<FormItem label="收件人" prop="name">
<i-input v-model="formData.name" placeholder="请输入收件人姓名" style="width: 600px"></i-input>
</FormItem>
<FormItem label="收件地区" prop="address">
<el-form :model="formData" ref="form" label-position="left" label-width="100px" :rules="ruleInline">
<el-form-item label="收件人" prop="name">
<el-input v-model="formData.name" placeholder="请输入收件人姓名" style="width: 600px"></el-input>
</el-form-item>
<el-form-item label="收件地区" prop="address">
<span>{{ formData.address || '暂无地址' }}</span>
<Button type="default" style="margin-left: 10px;" size="small" @click="$refs.map.open()">选择</Button>
</FormItem>
<FormItem label="详细地址" prop="detail">
<i-input v-model="formData.detail" placeholder="请输入详细地址" style="width: 600px"></i-input>
</FormItem>
<FormItem label="手机号码" prop="mobile">
<i-input v-model="formData.mobile" placeholder="请输入收件人手机号" style="width: 600px"></i-input>
</FormItem>
<FormItem label="地址别名">
<i-input v-model="formData.alias" length :maxlength="4" placeholder="请输入地址别名,例如公司" style="width: 600px">
</i-input>
</FormItem>
<FormItem label="默认地址">
<i-switch v-model="formData.isDefault" />
</FormItem>
</Form>
<el-button type="default" style="margin-left: 10px;" size="small" @click="$refs.map.open()">选择</el-button>
</el-form-item>
<el-form-item label="详细地址" prop="detail">
<el-input v-model="formData.detail" placeholder="请输入详细地址" style="width: 600px"></el-input>
</el-form-item>
<el-form-item label="手机号码" prop="mobile">
<el-input v-model="formData.mobile" placeholder="请输入收件人手机号" style="width: 600px"></el-input>
</el-form-item>
<el-form-item label="地址别名">
<el-input v-model="formData.alias" length :maxlength="4" placeholder="请输入地址别名,例如公司" style="width: 600px">
</el-input>
</el-form-item>
<el-form-item label="默认地址">
<el-switch v-model="formData.isDefault" />
</el-form-item>
</el-form>
</div>
<div class="mt_20">
<Button type="primary" class="mr_10" :loading="loading" @click="save">保存收货地址</Button>
<Button @click="$router.back()">返回</Button>
<el-button type="primary" class="mr_10" :loading="loading" @click="save">保存收货地址</el-button>
<el-button @click="$router.back()">返回</el-button>
</div>
<multipleMap ref="map" @callback="getAddress" />
@@ -124,15 +124,15 @@ export default {
if(val.type === 'select'){
const paths = val.data.map(item => item.name).join(',')
const ids = val.data.map(item => item.id).join(',')
this.$set(this.formData,'address',paths)
this.$set(this.formData,'consigneeAddressIdPath',ids)
this.formData['address'] = paths
this.formData['consigneeAddressIdPath'] = ids
const coord = val.data[val.data.length - 1].center.split(',')
this.formData.lat = coord[1]
this.formData.lon = coord[0]
}else{
this.$set(this.formData, "address", val.data.addr);
this.$set(this.formData, "consigneeAddressIdPath", val.data.addrId);
this.$set(this.formData, "detail", val.data.address);
this.formData["address"] = val.data.addr;
this.formData["consigneeAddressIdPath"] = val.data.addrId;
this.formData["detail"] = val.data.address;
this.formData.lat = val.data.position.lat;
this.formData.lon = val.data.position.lng;
}

View File

@@ -5,12 +5,12 @@
<!-- 搜索 筛选 -->
<div class="mb_20 box">
<div class="global_float_right">
<Input
<el-input
class="width_300"
search
enter-button
v-model="params.keywords"
@on-search="getList"
@keyup.enter="getList"
placeholder="请输入订单号搜索"
/>
</div>
@@ -18,18 +18,18 @@
<!-- 列表 -->
<empty v-if="orderList.length === 0"/>
<div class="order-content" v-else>
<template v-for="(order, onderIndex) in orderList">
<div class="order-list" :key="onderIndex">
<template v-for="(order, onderIndex) in orderList" :key="order.sn || onderIndex">
<div class="order-list">
<div class="order-header">
<div>
<div v-if="order.serviceStatus">{{ filterOrderStatus(order.serviceStatus) }}</div>
<div>
售后单号{{ order.sn }} &nbsp; &nbsp; &nbsp;{{ order.createTime }}
&nbsp; &nbsp;{{ order.memberName | secrecyMobile }}
&nbsp; &nbsp;{{ $filters.secrecyMobile( order.memberName ) }}
</div>
</div>
<div>
<span>申请退款金额<span class="global_color">{{ order.applyRefundPrice | unitPrice("¥") }}</span></span>
<span>申请退款金额<span class="global_color">{{ $filters.unitPrice(order.applyRefundPrice, "¥") }}</span></span>
</div>
</div>
<div class="order-body">
@@ -47,33 +47,31 @@
</div>
<div>
<!-- 订单基础操作 -->
<Button @click="goDetail(order.sn)" type="info" size="small">售后详情</Button>
<Button @click="openModal(order)"
<el-button @click="goDetail(order.sn)" type="info" size="small">售后详情</el-button>
<el-button @click="openModal(order)"
v-if="order.serviceStatus == 'PASS' &&
order.serviceType != 'RETURN_MONEY'"
type="warning" size="small">提交物流
</Button>
<Button @click="cancel(order.sn)" type="error" v-if="order.afterSaleAllowOperationVO.cancel" size="small">
</el-button>
<el-button @click="cancel(order.sn)" type="danger" v-if="order.afterSaleAllowOperationVO.cancel" size="small">
取消售后
</Button>
</el-button>
</div>
</div>
</div>
</template>
<Spin size="large" fix v-if="spinShow"></Spin>
<el-skeleton size="large" fix v-if="spinShow"></el-skeleton>
</div>
<!-- 分页 -->
<div class="page-size">
<Page :total="total" @on-change="changePageNum"
@on-page-size-change="changePageSize"
:page-size="params.pageSize"
show-sizer>
</Page>
<el-pagination :total="total" @current-change="changePageNum"
@size-change="changePageSize"
:page-size="params.pageSize" layout="sizes, prev, pager, next"></el-pagination>
</div>
<Modal v-model="logisticsShow" width="530">
<p slot="header">
<el-dialog v-model="logisticsShow" width="530">
<template #header><p>
<span>提交物流信息</span>
</p>
</p></template>
<div>
<div class="goods-list modal-goods">
<img @click="goodsDetail(singleOrder.skuId, singleOrder.goodsId)" class="hover-color"
@@ -84,31 +82,30 @@
</div>
<div class="mt_10">
<span class="global_color"
>{{ singleOrder.flowPrice | unitPrice("¥") }} </span
>x {{ singleOrder.num }}
>{{ $filters.unitPrice(singleOrder.flowPrice, "¥") }} </span>x {{ singleOrder.num }}
</div>
</div>
</div>
<Form ref="form" :model="form" label-position="left" :label-width="100" :rules="rules">
<FormItem label="物流公司" prop="logisticsId">
<Select v-model="form.logisticsId" placeholder="请选择物流公司">
<Option v-for="item in companyList" :value="item.id" :key="item.id">{{ item.name }}</Option>
</Select>
</FormItem>
<FormItem label="物流单号" prop="logisticsNo">
<Input v-model="form.logisticsNo" placeholder="请填写物流单号"></Input>
</FormItem>
<FormItem label="发货时间" prop="mDeliverTime">
<DatePicker type="date" style="width:100%" v-model="form.mDeliverTime" @on-change="changeTime"
format="yyyy-MM-dd" placeholder="选择发货时间"></DatePicker>
</FormItem>
</Form>
<el-form ref="form" :model="form" label-position="left" label-width="100px" :rules="rules">
<el-form-item label="物流公司" prop="logisticsId">
<el-select v-model="form.logisticsId" placeholder="请选择物流公司">
<el-option v-for="item in companyList" :value="item.id" :key="item.id">{{ item.name }}</el-option>
</el-select>
</el-form-item>
<el-form-item label="物流单号" prop="logisticsNo">
<el-input v-model="form.logisticsNo" placeholder="请填写物流单号"></el-input>
</el-form-item>
<el-form-item label="发货时间" prop="mDeliverTime">
<el-date-picker type="date" style="width:100%" v-model="form.mDeliverTime" @change="changeTime"
format="yyyy-MM-dd" placeholder="选择发货时间"></el-date-picker>
</el-form-item>
</el-form>
</div>
<div slot="footer" style="text-align: right">
<Button @click="logisticsShow = false">关闭</Button>
<Button type="primary" :loading="submitLoading" @click="submitDelivery">提交</Button>
</div>
</Modal>
<template #footer><div style="text-align: right">
<el-button @click="logisticsShow = false">关闭</el-button>
<el-button type="primary" :loading="submitLoading" @click="submitDelivery">提交</el-button>
</div></template>
</el-dialog>
</div>
</template>
@@ -324,7 +321,7 @@ export default {
}
}
.ivu-icon {
.el-icon {
color: #ff8f23;
cursor: pointer;
@@ -337,7 +334,7 @@ export default {
> div:nth-child(3) {
width: 100px;
.ivu-btn {
.el-button {
margin-bottom: 10px;
}
}

View File

@@ -2,12 +2,12 @@
<div class="order-detail">
<card _Title="售后详情" :_Size="16"></card>
<!-- 操作按钮 -->
<Card class="mb_10" v-if="(afterSale.serviceStatus == 'PASS' &&
<el-card class="mb_10" shadow="never" v-if="(afterSale.serviceStatus == 'PASS' &&
afterSale.serviceType != 'RETURN_MONEY') || (afterSale.afterSaleAllowOperationVO && afterSale.afterSaleAllowOperationVO.cancel)">
<Button type="success" @click="openModal" v-if="afterSale.serviceStatus == 'PASS' &&
afterSale.serviceType != 'RETURN_MONEY'" size="small">提交物流</Button>&nbsp;
<Button type="error" @click="cancel(afterSale.sn)" v-if="afterSale.afterSaleAllowOperationVO && afterSale.afterSaleAllowOperationVO.cancel" size="small">取消售后</Button>
</Card>
<el-button type="success" @click="openModal" v-if="afterSale.serviceStatus == 'PASS' &&
afterSale.serviceType != 'RETURN_MONEY'" size="small">提交物流</el-button>&nbsp;
<el-button type="danger" @click="cancel(afterSale.sn)" v-if="afterSale.afterSaleAllowOperationVO && afterSale.afterSaleAllowOperationVO.cancel" size="small">取消售后</el-button>
</el-card>
<div class="order-card">
<h3>{{afterSale.serviceName}}</h3>
<p class="global_color fontsize_18">{{ afterSale.orderStatusValue }}</p>
@@ -25,14 +25,13 @@
</div>
<div class="order-card">
<h3>售后进程</h3>
<Steps class="progress" :current="logList.length" direction="vertical">
<Step
:content="'操作人:'+ log.operatorName + ' ' + log.createTime"
<el-steps class="progress" :current="logList.length" direction="vertical">
<el-step :content="'操作人:'+ log.operatorName + ' ' + log.createTime"
:title="log.message"
v-for="(log, index) in logList"
:key="index"
></Step>
</Steps>
></el-step>
</el-steps>
</div>
<div class="order-card">
<h3 class="mb_10">服务单信息</h3>
@@ -41,10 +40,10 @@
<td>退款方式</td><td>{{afterSale.refundWay == 'ORIGINAL' ? '原路退回' : '账号退款'}}</td>
</tr>
<tr>
<td>申请退款金额</td><td>{{afterSale.applyRefundPrice | unitPrice('¥')}}</td>
<td>申请退款金额</td><td>{{ $filters.unitPrice(afterSale.applyRefundPrice, '¥') }}</td>
</tr>
<tr v-if="afterSale.actualRefundPrice">
<td>实际退款金额</td><td>{{afterSale.actualRefundPrice | unitPrice('¥')}}</td>
<td>实际退款金额</td><td>{{ $filters.unitPrice(afterSale.actualRefundPrice, '¥') }}</td>
</tr>
<template v-if="afterSale.refundWay === 'OFFLINE'">
<tr>
@@ -74,30 +73,30 @@
<img :src="img" width="200" height="200" @click="perviewImg(img)" class="hover-pointer" alt="">
</div>
</div>
<Modal v-model="logisticsShow" width="530">
<p slot="header">
<el-dialog v-model="logisticsShow" width="530">
<template #header><p>
<span>提交物流信息</span>
</p>
</p></template>
<div>
<Form ref="form" :model="form" label-position="left" :label-width="100" :rules="rules">
<FormItem label="物流公司" prop="logisticsId">
<Select v-model="form.logisticsId" placeholder="请选择物流公司">
<Option v-for="item in companyList" :value="item.id" :key="item.id">{{ item.name }}</Option>
</Select>
</FormItem>
<FormItem label="物流单号" prop="logisticsNo">
<Input v-model="form.logisticsNo" placeholder="请填写物流单号"></Input>
</FormItem>
<FormItem label="发货时间" prop="mDeliverTime">
<DatePicker type="date" style="width:100%" v-model="form.mDeliverTime" @on-change="changeTime" format="yyyy-MM-dd" placeholder="选择发货时间"></DatePicker>
</FormItem>
</Form>
<el-form ref="form" :model="form" label-position="left" label-width="100px" :rules="rules">
<el-form-item label="物流公司" prop="logisticsId">
<el-select v-model="form.logisticsId" placeholder="请选择物流公司">
<el-option v-for="item in companyList" :value="item.id" :key="item.id">{{ item.name }}</el-option>
</el-select>
</el-form-item>
<el-form-item label="物流单号" prop="logisticsNo">
<el-input v-model="form.logisticsNo" placeholder="请填写物流单号"></el-input>
</el-form-item>
<el-form-item label="发货时间" prop="mDeliverTime">
<el-date-picker type="date" style="width:100%" v-model="form.mDeliverTime" @change="changeTime" format="yyyy-MM-dd" placeholder="选择发货时间"></el-date-picker>
</el-form-item>
</el-form>
</div>
<div slot="footer" style="text-align: right">
<Button @click="logisticsShow = false">关闭</Button>
<Button type="primary" :loading="submitLoading" @click="submitDelivery">提交</Button>
</div>
</Modal>
<template #footer><div style="text-align: right">
<el-button @click="logisticsShow = false">关闭</el-button>
<el-button type="primary" :loading="submitLoading" @click="submitDelivery">提交</el-button>
</div></template>
</el-dialog>
</div>
</template>
<script>
@@ -139,7 +138,7 @@ export default {
if (pattern3.test(this.afterSale.reason)) {
this.getReason(this.afterSale.serviceType)
} else {
this.$set(this.afterSale, 'reasonName', this.afterSale.reason)
this.afterSale['reasonName'] = this.afterSale.reason
}
}
})
@@ -150,7 +149,7 @@ export default {
this.reasonList = res.result
this.reasonList.forEach(e => {
if (e.id === this.afterSale.reason) {
this.$set(this.afterSale, 'reasonName', e.reason)
this.afterSale['reasonName'] = e.reason
}
})
}

View File

@@ -1,49 +1,51 @@
<template>
<div class="apply-after-sale">
<card _Title="申请售后"></card>
<Table
border
:columns="columns"
:data="goodsData"
>
<template slot-scope="{ row }" slot="goodsName">
<div style="padding:5px;display:flex;">
<img :src="row.image" style="vertical-align: top;" width="60" height="60" alt=""> <span class="ml_10">{{row.goodsName}}</span>
</div>
</template>
<template slot-scope="{ row }" slot="goodsPrice">
<div>{{row.applyRefundPrice | unitPrice('¥')}}</div>
</template>
</Table>
<el-table :data="goodsData" border>
<el-table-column label="商品名称">
<template #default="{ row }">
<div style="padding:5px;display:flex;">
<img :src="row.image" style="vertical-align: top;" width="60" height="60" alt="">
<span class="ml_10">{{ row.goodsName }}</span>
</div>
</template>
</el-table-column>
<el-table-column label="价格">
<template #default="{ row }">
<div>{{ $filters.unitPrice(row.applyRefundPrice, '¥') }}</div>
</template>
</el-table-column>
<el-table-column prop="num" label="购买数量" />
</el-table>
<div>
<Form :model="form" ref="form" class="mt_10" :rules="rules" :label-width="80">
<FormItem label="售后类别">
<RadioGroup v-model="form.serviceType" @on-change="changeReason" type="button" button-style="solid">
<Radio v-if="info.returnGoods" label="RETURN_GOODS">退货</Radio>
<Radio v-if="info.returnMoney" label="RETURN_MONEY">退款</Radio>
</RadioGroup>
</FormItem>
<FormItem label="提交数量" prop="num">
<Input type="number" v-model="form.num" style="width:260px" />
</FormItem>
<FormItem label="提交原因" prop="reason">
<Select v-model="form.reason" style="width:260px">
<Option v-for="item in reasonList" :value="item.id" :key="item.id">{{ item.reason }}</Option>
</Select>
</FormItem>
<FormItem label="问题描述" prop="problemDesc">
<Input type="textarea" :rows="4" maxlength="500" style="width:260px" show-word-limit v-model="form.problemDesc" />
</FormItem>
<FormItem label="图片信息">
<el-form :model="form" ref="form" class="mt_10" :rules="rules" label-width="80px">
<el-form-item label="售后类别">
<el-radio-group v-model="form.serviceType" @change="changeReason" type="button" button-style="solid">
<el-radio v-if="info.returnGoods" label="RETURN_GOODS">退货</el-radio>
<el-radio v-if="info.returnMoney" label="RETURN_MONEY">退款</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="提交数量" prop="num">
<el-input type="number" v-model="form.num" style="width:260px" />
</el-form-item>
<el-form-item label="提交原因" prop="reason">
<el-select v-model="form.reason" style="width:260px">
<el-option v-for="item in reasonList" :value="item.id" :key="item.id">{{ item.reason }}</el-option>
</el-select>
</el-form-item>
<el-form-item label="问题描述" prop="problemDesc">
<el-input type="textarea" :rows="4" maxlength="500" style="width:260px" show-word-limit v-model="form.problemDesc" />
</el-form-item>
<el-form-item label="图片信息">
<div style="display:flex;align-items:center;">
<div class="demo-upload-list" v-for="(img, index) in uploadList" :key="index">
<img :src="img">
<div class="demo-upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(img)"></Icon>
<Icon type="ios-trash-outline" @click.native="handleRemove(index)"></Icon>
<el-icon @click="handleView(img)"><View /></el-icon>
<el-icon @click="handleRemove(index)"><Delete /></el-icon>
</div>
</div>
<Upload
<el-upload
:show-upload-list="false"
:on-success="handleSuccess"
:before-upload="handleBeforeUpload"
@@ -52,44 +54,46 @@
:headers="accessToken"
style="display: inline-block;width:58px;">
<div class="hover-pointer icon-upload" style="">
<Icon type="md-add" size="20"></Icon>
<el-icon :size="20"><Plus /></el-icon>
</div>
</Upload>
</el-upload>
</div>
</FormItem>
<FormItem label="退款方式">
</el-form-item>
<el-form-item label="退款方式">
<div>{{info.refundWay == 'ORIGINAL' ? '原路退回' : '账号退款'}}</div>
</FormItem>
</el-form-item>
<template v-if="info.accountType === 'BANK_TRANSFER' && info.applyRefundPrice != 0">
<FormItem label="开户行" prop="bankDepositName">
<Input v-model="form.bankDepositName" type="text" placeholder="请输入银行开户行" style="width:260px" />
</FormItem>
<FormItem label="开户名" prop="bankAccountName">
<Input v-model="form.bankAccountName" type="text" placeholder="请输入银行开户名" style="width:260px" />
</FormItem>
<FormItem label="银行账号" prop="bankAccountNumber">
<Input v-model="form.bankAccountNumber" type="text" placeholder="请输入银行账号" style="width:260px" />
</FormItem>
<el-form-item label="开户行" prop="bankDepositName">
<el-input v-model="form.bankDepositName" type="text" placeholder="请输入银行开户行" style="width:260px" />
</el-form-item>
<el-form-item label="开户名" prop="bankAccountName">
<el-input v-model="form.bankAccountName" type="text" placeholder="请输入银行开户名" style="width:260px" />
</el-form-item>
<el-form-item label="银行账号" prop="bankAccountNumber">
<el-input v-model="form.bankAccountNumber" type="text" placeholder="请输入银行账号" style="width:260px" />
</el-form-item>
</template>
<FormItem label="返回方式" v-if="form.serviceType === 'RETURN_GOODS'">
<el-form-item label="返回方式" v-if="form.serviceType === 'RETURN_GOODS'">
<div>快递至第三方卖家</div>
</FormItem>
<FormItem>
<Button type="primary" @click="apply">提交申请</Button>
</FormItem>
</Form>
<Modal title="View Image" v-model="visible">
</el-form-item>
<el-form-item>
<el-button type="primary" @click="apply">提交申请</el-button>
</el-form-item>
</el-form>
<el-dialog title="View Image" v-model="visible">
<img :src="previewImage" v-if="visible" style="width: 100%">
</Modal>
</el-dialog>
</div>
</div>
</template>
<script>
import { Delete, Plus, View } from '@element-plus/icons-vue';
import { afterSaleReason, afterSaleInfo, applyAfterSale } from '@/api/member.js'
import { commonUrl } from '@/plugins/request.js';
import storage from '@/plugins/storage';
import * as RegExp from '@/plugins/RegExp'
export default {
components: { Delete, Plus, View },
data () {
const checkNum = (rule, value, callback) => {
if (value === '') {
@@ -104,11 +108,6 @@ export default {
}
};
return {
columns: [ // 表格表头
{title: '商品名称', slot: 'goodsName'},
{title: '价格', slot: 'goodsPrice'},
{title: '购买数量', key: 'num'}
],
goodsData: [], // 商品数据
reasonList: [], // 售后原因列表
info: {}, // 售后信息

View File

@@ -12,26 +12,26 @@
<div class="goods-con">
<img :src="orderGoods.image" class="hover-pointer" alt="" width="100" @click="goGoodsDetail(orderGoods.skuId, orderGoods.goodsId)">
<p class="hover-pointer color999" @click="goGoodsDetail(orderGoods.skuId, orderGoods.goodsId)">{{orderGoods.goodsName}}</p>
<p>{{orderGoods.goodsPrice | unitPrice('¥')}}</p>
<p>{{ $filters.unitPrice(orderGoods.goodsPrice, '¥') }}</p>
</div>
<div class="eval-con">
<div>
<span class="color999">投诉主题</span>
<Select v-model="form.complainTopic" style="width:260px;margin-bottom:10px">
<Option v-for="item in reasonList" :value="item.reason" :key="item.id">{{ item.reason }}</Option>
</Select>
<Input type="textarea" maxlength="500" show-word-limit :rows="4" placeholder="请输入投诉内容" v-model="form.content" />
<el-select v-model="form.complainTopic" style="width:260px;margin-bottom:10px">
<el-option v-for="item in reasonList" :value="item.reason" :key="item.id">{{ item.reason }}</el-option>
</el-select>
<el-input type="textarea" maxlength="500" show-word-limit :rows="4" placeholder="请输入投诉内容" v-model="form.content" />
</div>
<div style="display:flex;align-items:center;">
<div class="demo-upload-list" v-for="(img, index) in orderGoods.uploadList" :key="index">
<img :src="img">
<div class="demo-upload-list-cover">
<Icon type="ios-eye-outline" @click.native="handleView(img)"></Icon>
<Icon type="ios-trash-outline" @click.native="handleRemove(index)"></Icon>
<el-icon @click="handleView(img)"><View /></el-icon>
<el-icon @click="handleRemove(index)"><Delete /></el-icon>
</div>
</div>
<Upload
<el-upload
:show-upload-list="false"
:on-success="handleSuccess"
:before-upload="handleBeforeUpload"
@@ -40,25 +40,27 @@
:headers="accessToken"
style="display: inline-block;width:58px;">
<div class="hover-pointer icon-upload" style="">
<Icon type="ios-camera" size="20"></Icon>
<el-icon :size="20"><Camera /></el-icon>
</div>
</Upload>
</el-upload>
<div class="describe">上传投诉凭证最多5张</div>
</div>
</div>
</div>
<Button type="primary" class="mt_10" :loading="loading" @click="save">提交</Button>
<Modal title="View Image" v-model="visible">
<el-button type="primary" class="mt_10" :loading="loading" @click="save">提交</el-button>
<el-dialog title="View Image" v-model="visible">
<img :src="previewImage" v-if="visible" style="width: 100%">
</Modal>
</el-dialog>
</div>
</template>
<script>
import { Camera, Delete, View } from '@element-plus/icons-vue';
import { orderDetail } from '@/api/order.js';
import { afterSaleReason, handleComplain } from '@/api/member.js';
import { commonUrl } from '@/plugins/request.js';
import storage from '@/plugins/storage';
export default {
components: { Camera, Delete, View },
data () {
return {
order: {}, // 订单详情
@@ -85,7 +87,7 @@ export default {
afterSaleReason('COMPLAIN').then(res => {
if (res.success) {
this.reasonList = res.result
this.$set(this.form, 'complainTopic', res.result[0].reason)
this.form['complainTopic'] = res.result[0].reason
this.$forceUpdate()
}
})

View File

@@ -5,12 +5,12 @@
<div class="address-header">
<span>
{{ item.name }}
<Tag class="ml_10" v-if="item.isDefault" color="red">默认地址</Tag>
<Tag class="ml_10" v-if="item.alias" color="warning">{{item.alias}}</Tag>
<el-tag class="ml_10" v-if="item.isDefault" color="red">默认地址</el-tag>
<el-tag class="ml_10" v-if="item.alias" color="warning">{{item.alias}}</el-tag>
</span>
<div class="address-action">
<span @click="edit(item.id)"><Icon type="edit"></Icon>修改</span>
<span @click="del(item.id)"><Icon type="trash-a"></Icon>删除</span>
<span @click="edit(item.id)"><el-icon><Edit /></el-icon>修改</span>
<span @click="del(item.id)"><el-icon><Delete /></el-icon>删除</span>
</div>
</div>
<div class="address-content">
@@ -18,8 +18,7 @@
<span class="address-content-title"> :</span> {{ item.name }}
</p>
<p>
<span class="address-content-title">收货地区:</span
>{{ item.consigneeAddressPath | unitAddress }}
<span class="address-content-title">收货地区:</span>{{ $filters.unitAddress(item.consigneeAddressPath) }}
</p>
<p>
<span class="address-content-title">详细地址:</span> {{ item.detail }}
@@ -33,10 +32,12 @@
</template>
<script>
import { Delete, Edit } from '@element-plus/icons-vue';
import card from '@/components/card';
import { memberAddress, delMemberAddress } from '@/api/address.js';
export default {
components: { Delete, Edit },
name: 'MyAddress',
data () {

View File

@@ -6,12 +6,12 @@
<!-- 搜索 筛选 -->
<div class="mb_24 box" v-if="!homePage">
<div class="global_float_right" >
<Input
<el-input
class="width_300"
search
enter-button
v-model="params.keywords"
@on-search="getList"
@keyup.enter="getList"
placeholder="请输入订单号搜索"
/>
</div>
@@ -32,8 +32,8 @@
</div>
</div>
<div>
<Button v-if="order.orderStatus === 'COMPLETED'" @click="delOrder(order.sn)" class="del-btn mr_10 fontsize_16" style="margin-top:-5px;" type="text" icon="ios-trash-outline" size="small"></Button>
<span>{{ order.flowPrice | unitPrice("¥") }}</span>
<el-button v-if="order.orderStatus === 'COMPLETED'" @click="delOrder(order.sn)" class="del-btn mr_10 fontsize_16" style="margin-top:-5px;" type="text" icon="ios-trash-outline" size="small"></el-button>
<span>{{ $filters.unitPrice(order.flowPrice, "¥") }}</span>
</div>
</div>
<div class="order-body">
@@ -51,11 +51,11 @@
<div>
<div class="hover-color" @click="goodsDetail(goods.skuId, goods.goodsId)">{{ goods.name }}</div>
<div class="mt_10">
<span class="global_color">{{ goods.goodsPrice | unitPrice("¥") }} </span>x {{ goods.num }}
<span class="global_color">{{ $filters.unitPrice(goods.goodsPrice, "¥") }} </span>x {{ goods.num }}
<span style="margin-left: 10px;color: #ff9900;">{{refundPriceList(goods.isRefund)}}</span>
</div>
<Button v-if="goods.commentStatus == 'UNFINISHED'" @click="comment(order.sn, goodsIndex)" size="small" type="success" class="fontsize_12" style="position:relative;top:-22px;left:190px;margin-right:10px">评价</Button>
<Button v-if="goods.complainStatus == 'NO_APPLY'" @click="complain(order.sn, goodsIndex)" type="warning" class="fontsize_12" size="small" style="position:relative;top:-22px;left:190px">投诉</Button>
<el-button v-if="goods.commentStatus == 'UNFINISHED'" @click="comment(order.sn, goodsIndex)" size="small" type="success" class="fontsize_12" style="position:relative;top:-22px;left:190px;margin-right:10px">评价</el-button>
<el-button v-if="goods.complainStatus == 'NO_APPLY'" @click="complain(order.sn, goodsIndex)" type="warning" class="fontsize_12" size="small" style="position:relative;top:-22px;left:190px">投诉</el-button>
</div>
</div>
</div>
@@ -64,47 +64,41 @@
</div>
<div>
<!-- 订单基础操作 -->
<Button @click="orderDetail(order.sn)" type="info" size="small">订单详情</Button>
<Button @click="handleCancelOrder(order.sn)" type="error" v-if="order.allowOperationVO.cancel" size="small">取消订单</Button>
<Button @click="goPay(order.sn)" size="small" type="success" v-if="order.allowOperationVO.pay">去支付</Button>
<Button @click="received(order.sn)" size="small" type="warning" v-if="order.allowOperationVO.rog">确认收货</Button>
<el-button @click="orderDetail(order.sn)" type="info" size="small">订单详情</el-button>
<el-button @click="handleCancelOrder(order.sn)" type="danger" v-if="order.allowOperationVO.cancel" size="small">取消订单</el-button>
<el-button @click="goPay(order.sn)" size="small" type="success" v-if="order.allowOperationVO.pay">去支付</el-button>
<el-button @click="received(order.sn)" size="small" type="warning" v-if="order.allowOperationVO.rog">确认收货</el-button>
<!-- 售后 -->
<Button v-if="order.groupAfterSaleStatus && (order.groupAfterSaleStatus.includes('NOT_APPLIED')|| order.groupAfterSaleStatus.includes('PART_AFTER_SALE'))"
@click="applyAfterSale(order.orderItems)" size="small">申请售后</Button>
<el-button v-if="order.groupAfterSaleStatus && (order.groupAfterSaleStatus.includes('NOT_APPLIED')|| order.groupAfterSaleStatus.includes('PART_AFTER_SALE'))"
@click="applyAfterSale(order.orderItems)" size="small">申请售后</el-button>
</div>
</div>
</div>
<Spin size="large" fix v-if="spinShow"></Spin>
<el-skeleton size="large" fix v-if="spinShow"></el-skeleton>
</div>
<!-- 分页 -->
<div class="page-size" v-if="!homePage">
<Page :total="total" @on-change="changePageNum"
@on-page-size-change="changePageSize"
:page-size="params.pageSize"
show-total
show-sizer>
</Page>
<el-pagination :total="total" @current-change="changePageNum"
@size-change="changePageSize"
:page-size="params.pageSize" layout="total, sizes, prev, pager, next"></el-pagination>
</div>
<!-- 选择售后商品 -->
<Modal v-model="afterSaleModal" title="请选择申请售后的商品">
<el-dialog v-model="afterSaleModal" title="请选择申请售后的商品">
<div>
<Table
border
:columns="afterSaleColumns"
:data="afterSaleArr"
@on-row-click="afterSaleSelect"
>
</Table>
<el-table :data="afterSaleArr" border @row-click="afterSaleSelect">
<el-table-column prop="name" label="商品名称" />
<el-table-column prop="goodsPrice" label="价格" />
</el-table>
</div>
<div slot="footer"></div>
</Modal>
<Modal v-model="cancelAvail" title="请选择取消订单原因" @on-ok="sureCancel" @on-cancel="cancelAvail = false">
<RadioGroup v-model="cancelParams.reason" vertical type="button" button-style="solid">
<Radio :label="item.reason" v-for="item in cancelReason" :key="item.id">
<template #footer><div></div></template>
</el-dialog>
<el-dialog v-model="cancelAvail" title="请选择取消订单原因" @ok="sureCancel" @cancel="cancelAvail = false">
<el-radio-group v-model="cancelParams.reason" vertical type="button" button-style="solid">
<el-radio :label="item.reason" v-for="item in cancelReason" :key="item.id">
{{item.reason}}
</Radio>
</RadioGroup>
</Modal>
</el-radio>
</el-radio-group>
</el-dialog>
</div>
</template>
@@ -140,10 +134,6 @@ export default {
total: 0, // 数据总数
spinShow: false, // 加载状态
afterSaleModal: false, // 选择售后商品模态框
afterSaleColumns: [ // 售后商品表头
{title: '商品名称', key: 'name'},
{title: '价格', key: 'goodsPrice'}
],
afterSaleArr: [], // 售后商品列表
cancelAvail: false, // 取消订单modal控制
cancelReason: [] // 取消订单原因
@@ -374,7 +364,7 @@ export default {
color: $theme_color;
}
}
.ivu-icon {
.el-icon {
color: #ff8f23;
cursor: pointer;
&:hover {
@@ -385,7 +375,7 @@ export default {
> div:nth-child(3) {
width: 100px;
.ivu-btn {
.el-button {
margin-bottom: 10px;
}
}

View File

@@ -1,37 +1,35 @@
<template>
<div class="order-detail" v-if="order.order">
<card _Title="订单详情" :_Size="16"></card>
<Card
<el-card
class="mb_10"
shadow="never"
v-if="
order.allowOperationVO.pay ||
order.allowOperationVO.rog ||
order.allowOperationVO.cancel
"
>
<Button
<el-button
type="success"
@click="goPay(order.order.sn)"
size="small"
v-if="order.allowOperationVO.pay"
>去支付</Button
>
<Button
>去支付</el-button>
<el-button
type="info"
@click="received(order.order.sn)"
size="small"
v-if="order.allowOperationVO.rog"
>确认收货</Button
>
<Button
type="error"
>确认收货</el-button>
<el-button
type="danger"
@click="handleCancelOrder(order.order.sn)"
v-if="order.allowOperationVO.cancel"
size="small"
>取消订单</Button
>
<Button v-if="order.allowOperationVO.showLogistics || orderPackage.length > 0 || logistics" type="info" @click="logisticsList()" size="small">查看物流</Button>
</Card>
>取消订单</el-button>
<el-button v-if="order.allowOperationVO.showLogistics || orderPackage.length > 0 || logistics" type="info" @click="logisticsList()" size="small">查看物流</el-button>
</el-card>
<p class="verificationCode" v-if="order.order.verificationCode">
核验码:<span>{{ order.order.verificationCode }}</span>
</p>
@@ -41,25 +39,24 @@
<div style="color: #999" class="operation-time">
操作时间:{{ order.order.updateTime || order.order.createTime }}
</div>
<Steps
<el-steps
class="progress"
:current="progressList.length"
direction="vertical"
>
<Step
:title="progress.message"
<el-step :title="progress.message"
:content="progress.createTime"
v-for="(progress, index) in progressList"
:key="index"
></Step>
</Steps>
></el-step>
</el-steps>
</div>
<div class="order-card" v-if="order.order.deliveryMethod === 'LOGISTICS' && order.order.orderType !== 'VIRTUAL'">
<h3>收货人信息</h3>
<p>收货人:{{ order.order.consigneeName }}</p>
<p>手机号码:{{ order.order.consigneeMobile | secrecyMobile }}</p>
<p>手机号码:{{ $filters.secrecyMobile( order.order.consigneeMobile ) }}</p>
<p>
收货地址:{{ order.order.consigneeAddressPath | unitAddress }}
收货地址:{{ $filters.unitAddress(order.order.consigneeAddressPath) }}
{{ order.order.consigneeDetail }}
</p>
</div>
@@ -128,9 +125,9 @@
收票人邮箱:{{ order.receipt.receiptEmail }}
</p>
<div v-if="Number(order.receipt.receiptStatus) === 1" class="receipt-action">
<Button size="small" type="primary" ghost @click="viewReceiptInvoice(order.receipt)">
<el-button size="small" type="primary" ghost @click="viewReceiptInvoice(order.receipt)">
查看发票
</Button>
</el-button>
</div>
</template>
<div v-else style="color: #999; margin-left: 5px">未开发票</div>
@@ -171,13 +168,13 @@
</div>
</td>
<td>{{ goods.id }}</td>
<td>{{ goods.goodsPrice | unitPrice("¥") }}</td>
<td>{{ $filters.unitPrice(goods.goodsPrice, "¥") }}</td>
<td>{{ goods.num }}</td>
<td>{{refundPriceList(goods.isRefund)}}</td>
<td>{{ goods.refundPrice | unitPrice("¥") }}</td>
<td>{{ (goods.goodsPrice * goods.num) | unitPrice("¥") }}</td>
<td>{{ $filters.unitPrice(goods.refundPrice, "¥") }}</td>
<td>{{ $filters.unitPrice((goods.goodsPrice * goods.num), "¥") }}</td>
<td>
<Button
<el-button
v-if="
goods.afterSaleStatus.includes('NOT_APPLIED') ||
goods.afterSaleStatus.includes('PART_AFTER_SALE')
@@ -186,23 +183,23 @@
type="info"
size="small"
class="mb_5"
>申请售后</Button
>申请售后</el-button
>
<Button
<el-button
v-if="goods.commentStatus == 'UNFINISHED'"
@click="comment(order.order.sn, goodsIndex)"
size="small"
type="success"
class="fontsize_12 mb_5"
>评价</Button
>评价</el-button
>
<Button
<el-button
v-if="goods.complainStatus == 'NO_APPLY'"
@click="complain(order.order.sn, goodsIndex)"
type="warning"
class="fontsize_12"
size="small"
>投诉</Button
>投诉</el-button
>
</td>
</tr>
@@ -214,68 +211,52 @@
<span>商品件数:</span><span>{{ order.order.goodsNum }}件</span>
</div>
<div>
<span>商品总价:</span
><span>{{ order.order.goodsPrice | unitPrice("¥") }}</span
><br />
<span>商品总价:</span><span>{{ $filters.unitPrice(order.order.goodsPrice, "¥") }}</span><br />
</div>
<div v-if="order.order.orderType !== 'VIRTUAL'">
<span>运费:</span
><span>+{{ order.order.freightPrice | unitPrice("¥") }}</span
><br />
<span>运费:</span><span>+{{ $filters.unitPrice(order.order.freightPrice, "¥") }}</span><br />
</div>
<div v-if="order.order.priceDetailDTO.couponPrice">
<span>优惠券:</span
><span
>-{{
order.order.priceDetailDTO.couponPrice || 0 | unitPrice("¥")
}}</span
>
<span>优惠券:</span><span
>-{{ $filters.unitPrice(order.order.priceDetailDTO.couponPrice || 0, "¥") }}</span>
</div>
<div v-if="order.order.priceDetailDTO.giftCardPrice">
<span>礼品卡抵扣:</span
><span
>-{{
order.order.priceDetailDTO.giftCardPrice || 0 | unitPrice("¥")
}}</span
>
<span>礼品卡抵扣:</span><span
>-{{ $filters.unitPrice(order.order.priceDetailDTO.giftCardPrice || 0, "¥") }}</span>
</div>
<div v-if="order.order.discountPrice">
<span>活动优惠:</span
><span>-{{ order.order.discountPrice | unitPrice("¥") }}</span>
<span>活动优惠:</span><span>-{{ $filters.unitPrice(order.order.discountPrice, "¥") }}</span>
</div>
<div v-if="order.order.priceDetailDTO.updatePrice">
<span>修改价格:</span
><span>{{ order.order.priceDetailDTO.updatePrice | unitPrice("¥") }}</span>
<span>修改价格:</span><span>{{ $filters.unitPrice(order.order.priceDetailDTO.updatePrice, "¥") }}</span>
</div>
<div>
<span>应付金额:</span>
<span class="actrual-price">{{
order.order.flowPrice | unitPrice("¥")
}}</span>
<span class="actrual-price">{{ $filters.unitPrice(order.order.flowPrice, "¥") }}</span>
</div>
</div>
</div>
<Modal
<el-dialog
v-model="cancelAvail"
title="请选择取消订单原因"
@on-ok="sureCancel"
@on-cancel="cancelAvail = false"
@ok="sureCancel"
@cancel="cancelAvail = false"
>
<RadioGroup
<el-radio-group
v-model="cancelParams.reason"
vertical
type="button"
button-style="solid"
>
<Radio :label="item.reason" v-for="item in cancelReason" :key="item.id">
<el-radio :label="item.reason" v-for="item in cancelReason" :key="item.id">
{{ item.reason }}
</Radio>
</RadioGroup>
</Modal>
</el-radio>
</el-radio-group>
</el-dialog>
<!--查询物流-->
<Modal v-model="logisticsModal" width="40">
<p slot="header"><span>查询物流</span></p>
<el-dialog v-model="logisticsModal" width="40">
<template #header><p><span>查询物流</span></p></template>
<div class="layui-layer-wrap">
<dl>
<dt>订单号:</dt>
@@ -331,10 +312,10 @@
</div>
</div>
</div>
<div slot="footer" style="text-align: right">
<Button @click="logisticsModal = false">取消</Button>
</div>
</Modal>
<template #footer><div style="text-align: right">
<el-button @click="logisticsModal = false">取消</el-button>
</div></template>
</el-dialog>
</div>
</template>
@@ -455,7 +436,7 @@ export default {
if (receiptId) {
const receiptRes = await receiptDetail(receiptId);
if (receiptRes && receiptRes.success && receiptRes.result) {
this.$set(this.order, "receipt", receiptRes.result);
this.order["receipt"] = receiptRes.result;
}
}
this.progressList = res.result.orderLogs;
@@ -592,7 +573,7 @@ export default {
color: $theme_color;
}
}
.ivu-icon {
.el-icon {
color: #ff8f23;
cursor: pointer;
&:hover {
@@ -698,15 +679,15 @@ table {
.layui-layer-wrap > .div-express-log {
max-height: 300px;
}
::v-deep .layui-layer-wrap > .div-express-log::-webkit-scrollbar{
:deep .layui-layer-wrap > .div-express-log::-webkit-scrollbar{
width: 1px;
height: 5px;
}
::v-deep .layui-layer-wrap > .div-express-log::-webkit-scrollbar-thumb{
:deep .layui-layer-wrap > .div-express-log::-webkit-scrollbar-thumb{
border-radius: 1em;
background-color: rgba(50,50,50,.3);
}
::v-deep .layui-layer-wrap > .div-express-log::-webkit-scrollbar-track{
:deep .layui-layer-wrap > .div-express-log::-webkit-scrollbar-track{
border-radius: 1em;
background-color: rgba(50,50,50,.1);
}

View File

@@ -9,14 +9,11 @@
<span
v-if="item.couponType === 'PRICE'"
class="fontsize_12 global_color"
><span class="price">{{ item.price | unitPrice }}</span></span
>
><span class="price">{{ $filters.unitPrice(item.price) }}</span></span>
<span
v-if="item.couponType === 'DISCOUNT'"
class="fontsize_12 global_color"
><span class="price">{{ item.discount }}</span
></span
>
><span class="price">{{ item.discount }}</span></span>
<span class="describe">{{ item.consumeThreshold }}元可用</span>
</div>
<p>使用范围{{ useScope(item.scopeType, item.storeName) }}</p>
@@ -33,17 +30,13 @@
<i class="circle-bottom"></i>
</li>
</ul>
<Page
:total="total"
@on-change="changePageNum"
<el-pagination :total="total"
@current-change="changePageNum"
class="pageration"
@on-page-size-change="changePageSize"
@size-change="changePageSize"
:page-size="params.pageSize"
show-total
show-sizer
>
</Page>
<Spin v-if="loading" fix></Spin>
layout="total, sizes, prev, pager, next"></el-pagination>
<el-skeleton v-if="loading" fix></el-skeleton>
</div>
</template>

View File

@@ -5,164 +5,202 @@
<div class="box">
<div class="mb_20 account-price">
<span class="subTips">账户余额</span>
<span class="global_color mr_10" style="font-size:26px">{{ memberDeposit | unitPrice }}</span>
<span class="global_color mr_10" style="font-size:26px">{{ $filters.unitPrice(memberDeposit) }}</span>
<span class="subTips">冻结金额</span>
<span class="">{{ frozenDeposit | unitPrice }}</span>
<span class="">{{ $filters.unitPrice(frozenDeposit) }}</span>
</div>
<div class="account-btns">
<Button type="primary" @click="recharge">在线充值</Button>
<Button @click="withdrawalApply">申请提现</Button>
<el-button type="primary" @click="recharge">在线充值</el-button>
<el-button @click="withdrawalApply">申请提现</el-button>
</div>
</div>
<Modal v-model="modal" width="530">
<p slot="header">
<Icon type="edit"></Icon>
<el-dialog v-model="modal" width="530">
<template #header><p>
<el-icon><Edit /></el-icon>
<span>充值金额</span>
</p>
</p></template>
<div>
<Form
<el-form
ref="formData"
:label-width="100"
label-width="100px"
:model="formData"
:rules="formValidate"
label-position="left"
>
<FormItem label="充值金额" prop="price">
<Input v-model="formData.price" maxlength="9" number size="large"
><span slot="append"></span></Input>
</FormItem>
</Form>
<el-form-item label="充值金额" prop="price">
<el-input v-model="formData.price" maxlength="9" number size="large"
><template #append><span></span></template></el-input>
</el-form-item>
</el-form>
</div>
<div slot="footer" style="text-align: center">
<Button size="large" type="success" @click="rechargePrice">充值</Button>
</div>
</Modal>
<template #footer><div style="text-align: center">
<el-button size="large" type="success" @click="rechargePrice">充值</el-button>
</div></template>
</el-dialog>
<!-- 提现申请 -->
<Modal v-model="withdrawApplyModal" width="530">
<p slot="header">
<Icon type="edit"></Icon>
<el-dialog v-model="withdrawApplyModal" width="530">
<template #header><p>
<el-icon><Edit /></el-icon>
<span>提现金额</span>
</p>
</p></template>
<div>
<Form
<el-form
ref="withdrawApplyFormData"
:label-width="120"
label-width="120px"
:model="withdrawApplyFormData"
:rules="withdrawApplyFormValidate"
>
<FormItem label="提现类型" prop="type">
<Select v-model="withdrawApplyFormData.type" disabled>
<Option value="ALI">支付宝</Option>
<Option value="WECHAT">微信</Option>
</Select>
</FormItem>
<FormItem label="提现金额" prop="price">
<Input
<el-form-item label="提现类型" prop="type">
<el-select v-model="withdrawApplyFormData.type" disabled>
<el-option value="ALI">支付宝</el-option>
<el-option value="WECHAT">微信</el-option>
</el-select>
</el-form-item>
<el-form-item label="提现金额" prop="price">
<el-input
v-model="withdrawApplyFormData.price"
maxlength="9"
number
size="large"
><span slot="append"></span></Input>
><template #append><span></span></template></el-input>
<span style="color: red">最低提现金额 {{ withdrawApplyFormData.minPrice }}</span>
</FormItem>
<FormItem v-if="withdrawApplyFormData.type === 'ALI'" label="真实姓名" prop="realName">
<Input
</el-form-item>
<el-form-item v-if="withdrawApplyFormData.type === 'ALI'" label="真实姓名" prop="realName">
<el-input
v-model="withdrawApplyFormData.realName"
maxlength="9"
number
size="large"
></Input>
</FormItem>
<FormItem v-if="withdrawApplyFormData.type === 'ALI'" label="第三方登录账号" prop="connectNumber">
<Input
></el-input>
</el-form-item>
<el-form-item v-if="withdrawApplyFormData.type === 'ALI'" label="第三方登录账号" prop="connectNumber">
<el-input
v-model="withdrawApplyFormData.connectNumber"
maxlength="9"
number
size="large"
></Input>
</FormItem>
</Form>
></el-input>
</el-form-item>
</el-form>
</div>
<div slot="footer" style="text-align: center">
<Button size="large" type="success" @click="withdrawal">提现</Button>
</div>
</Modal>
<template #footer><div style="text-align: center">
<el-button size="large" type="success" @click="withdrawal">提现</el-button>
</div></template>
</el-dialog>
<!-- 余额日志 -->
<Tabs value="log" @on-click="tabPaneChange">
<TabPane label="余额日志" name="log">
<Table :columns="logColumns" :data="logColumnsData.records"></Table>
<el-tabs v-model="activeWalletTab" @tab-click="(tab) => tabPaneChange(tab.paneName)">
<el-tab-pane label="余额日志" name="log">
<el-table :data="logColumnsData.records || []">
<el-table-column prop="createTime" label="时间" width="190" />
<el-table-column label="金额" width="180">
<template #default="{ row }">
<span v-if="row.money > 0" style="color: green">{{ $filters.unitPrice(row.money, '+ ¥') }}</span>
<span v-else-if="row.money < 0" style="color: red">{{ $filters.unitPrice(0 - row.money, '- ¥') }}</span>
</template>
</el-table-column>
<el-table-column prop="detail" label="变动日志" />
</el-table>
<!-- 分页 -->
<div class="page-size">
<Page
:current="walletForm.pageNumber"
<el-pagination :current-page="walletForm.pageNumber"
:page-size="walletForm.pageSize"
:page-size-opts="[10, 20, 50]"
:page-sizes="[10, 20, 50]"
:total="logColumnsData.total"
show-sizer
show-total
size="small"
transfer
@on-change="changePage"
@on-page-size-change="changePageSize"
></Page>
small
@current-change="changePage"
@size-change="changePageSize"
layout="total, sizes, prev, pager, next"></el-pagination>
</div>
</TabPane>
</el-tab-pane>
<!-- 充值记录 -->
<TabPane label="充值记录" name="recharge">
<Table
:columns="rechargeListColumns"
:data="rechargeListData.records"
></Table>
<el-tab-pane label="充值记录" name="recharge">
<el-table :data="rechargeListData.records || []">
<el-table-column prop="createTime" label="充值时间" width="168" />
<el-table-column prop="rechargeSn" label="支付单号" width="200" />
<el-table-column label="充值金额">
<template #default="{ row }">
<span v-if="row.payStatus === 'PAID'" style="color: green">{{ $filters.unitPrice(row.rechargeMoney, '+ ¥') }}</span>
<span v-else>{{ $filters.unitPrice(row.rechargeMoney, '¥') }}</span>
</template>
</el-table-column>
<el-table-column label="支付状态">
<template #default="{ row }">
<span v-if="row.payStatus === 'PAID'">已付款</span>
<span v-else-if="row.payStatus === 'UNPAID'">未付款</span>
<span v-else-if="row.payStatus === 'CANCEL'">已取消</span>
</template>
</el-table-column>
<el-table-column label="支付方式">
<template #default="{ row }">
<span v-if="row.rechargeWay === 'ALIPAY'">支付宝</span>
<span v-else-if="row.rechargeWay === 'WECHAT'">微信</span>
<span v-else-if="row.rechargeWay === 'BANK_TRANSFER'">线下转账</span>
</template>
</el-table-column>
<el-table-column prop="payTime" label="支付时间" width="180" />
</el-table>
<!-- 分页 -->
<div class="page-size">
<Page
:current="rechargeForm.pageNumber"
<el-pagination :current-page="rechargeForm.pageNumber"
:page-size="rechargeForm.pageSize"
:page-size-opts="[10, 20, 50]"
:page-sizes="[10, 20, 50]"
:total="rechargeListData.total"
show-sizer
show-total
size="small"
transfer
@on-change="rechargeChangePage"
@on-page-size-change="rechargeChangePageSize"
></Page>
small
@current-change="rechargeChangePage"
@size-change="rechargeChangePageSize"
layout="total, sizes, prev, pager, next"></el-pagination>
</div>
</TabPane>
</el-tab-pane>
<TabPane label="提现记录" name="withdrawApply">
<Table
:columns="withdrawApplyColumns"
:data="withdrawApplyColumnsListData.records"
></Table>
<el-tab-pane label="提现记录" name="withdrawApply">
<el-table :data="withdrawApplyColumnsListData.records || []">
<el-table-column prop="createTime" label="申请时间" width="168" />
<el-table-column prop="sn" label="提现单号" width="200" />
<el-table-column label="提现金额" width="110">
<template #default="{ row }">
<span v-if="row.applyStatus === 'VIA_AUDITING'" style="color: green">{{ $filters.unitPrice(row.applyMoney, '+ ¥') }}</span>
<span v-else>{{ $filters.unitPrice(row.applyMoney, '¥') }}</span>
</template>
</el-table-column>
<el-table-column label="提现状态" width="95">
<template #default="{ row }">
<span v-if="row.applyStatus === 'APPLY'">申请中</span>
<span v-else-if="row.applyStatus === 'VIA_AUDITING'">审核通过</span>
<span v-else-if="row.applyStatus === 'SUCCESS'">提现成功</span>
<span v-else-if="row.applyStatus === 'ERROR'">提现失败</span>
<span v-else>审核拒绝</span>
</template>
</el-table-column>
<el-table-column prop="inspectTime" label="审核时间" width="168" />
<el-table-column prop="inspectRemark" label="审核备注" show-overflow-tooltip />
</el-table>
<!-- 分页 -->
<div class="page-size">
<Page
:current="withdrawApplyForm.pageNumber"
<el-pagination :current-page="withdrawApplyForm.pageNumber"
:page-size="withdrawApplyForm.pageSize"
:page-size-opts="[10, 20, 50]"
:page-sizes="[10, 20, 50]"
:total="withdrawApplyColumnsListData.total"
show-sizer
show-total
size="small"
transfer
@on-change="withdrawChangePage"
@on-page-size-change="withdrawChangePageSize"
></Page>
small
@current-change="withdrawChangePage"
@size-change="withdrawChangePageSize"
layout="total, sizes, prev, pager, next"></el-pagination>
</div>
</TabPane>
</Tabs>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
import {getDepositLog, getMembersWallet, getRecharge, getWithdrawApply, recharge, withdrawalApply} from '@/api/member';
import {withdrawalSettingVO} from "@/api/pay";
import { Edit } from '@element-plus/icons-vue';
export default {
name: 'MoneyManagement',
components: { Edit },
data() {
return {
activeWalletTab: "log",
frozenDeposit: 0, // 冻结余额
memberDeposit: 0, // 余额
@@ -225,172 +263,9 @@ export default {
}
]
},
// 余额日志
logColumns: [
{
title: '时间',
width: 190,
key: 'createTime'
},
{
title: '金额',
key: 'money',
width: 180,
render: (h, params) => {
if (params.row.money > 0) {
return h('div', [
h(
'span',
{
style: {
color: 'green'
}
},
this.$options.filters.unitPrice(params.row.money, '+ ¥')
)
]);
} else if (params.row.money < 0) {
return h('div', [
h(
'span',
{
style: {
color: 'red'
}
},
this.$options.filters.unitPrice(0 - params.row.money, '- ¥')
)
]);
}
}
},
{
title: '变动日志',
key: 'detail'
}
],
logColumnsData: {}, // 余额日志
// 充值记录
rechargeListColumns: [
{
title: '充值时间',
key: 'createTime',
width: 168
},
{
title: '支付单号',
key: 'rechargeSn',
width: 200
},
{
title: '充值金额',
key: 'rechargeMoney',
render: (h, params) => {
if (params.row.payStatus === 'PAID') {
return h('div', [h('span', {
style: {
color: 'green'
}
}, this.$options.filters.unitPrice(params.row.rechargeMoney, '+ ¥'))]);
} else {
return h('div', [h('span', this.$options.filters.unitPrice(params.row.rechargeMoney, '¥'))]);
}
}
},
{
title: '支付状态',
key: 'payStatus',
render: (h, params) => {
if (params.row.payStatus === 'PAID') {
return h('div', [h('span', {}, '已付款')]);
} else if (params.row.payStatus === 'UNPAID') {
return h('div', [h('span', {}, '未付款')]);
} else if (params.row.payStatus === 'CANCEL') {
return h('div', [h('span', {}, '已取消')]);
}
}
},
{
title: '支付方式',
key: 'rechargeWay',
render: (h, params) => {
if (params.row.rechargeWay === 'ALIPAY') {
return h('div', [h('span', {}, '支付宝')]);
} else if (params.row.rechargeWay === 'WECHAT') {
return h('div', [h('span', {}, '微信')]);
} else if (params.row.rechargeWay === 'BANK_TRANSFER') {
return h('div', [h('span', {}, '线下转账')]);
} else {
return h('div', [h('span', {}, '')]);
}
}
},
{
title: '支付时间',
key: 'payTime',
width: 180
}
],
rechargeListData: {}, // 充值记录数据
// 提现记录
withdrawApplyColumns: [
{
title: '申请时间',
key: 'createTime',
width: 168
},
{
title: '提现单号',
key: 'sn',
width: 200
},
{
title: '提现金额',
key: 'applyMoney',
width: 110,
render: (h, params) => {
if (params.row.applyStatus === 'VIA_AUDITING') {
return h('div', [h('span', {
style: {
color: 'green'
}
}, this.$options.filters.unitPrice(params.row.applyMoney, '+ ¥'))]);
} else {
return h('div', [h('span', this.$options.filters.unitPrice(params.row.applyMoney, '¥'))]);
}
}
},
{
title: '提现状态',
key: 'applyStatus',
width: 95,
render: (h, params) => {
if (params.row.applyStatus === 'APPLY') {
return h('div', [h('span', {}, '申请中')]);
} else if (params.row.applyStatus === 'VIA_AUDITING') {
return h('div', [h('span', {}, '审核通过')]);
} else if (params.row.applyStatus === 'SUCCESS') {
return h('div', [h('span', {}, '提现成功')]);
} else if (params.row.applyStatus === 'ERROR') {
return h('div', [h('span', {}, '提现失败')]);
} else {
return h('div', [h('span', {}, '审核拒绝')]);
}
}
},
{
title: '审核时间',
key: 'inspectTime',
width: 168
},
{
title: '审核备注',
key: 'inspectRemark',
tooltip: true
}
],
withdrawApplyColumnsListData: {} // 提现记录
logColumnsData: {},
rechargeListData: {},
withdrawApplyColumnsListData: {}
};
},
mounted() {
@@ -548,7 +423,7 @@ export default {
margin: 10px 0;
}
.ivu-btn {
.el-button {
margin: 0 4px;
}

View File

@@ -4,33 +4,33 @@
<div class="bind-section mb_20">
<div class="section-title">兑换礼品卡</div>
<Form ref="bindForm" :model="bindForm" :rules="bindRules" inline class="bind-form">
<FormItem label="卡号" prop="cardNo" :label-width="60">
<Input v-model="bindForm.cardNo" placeholder="请输入卡号" maxlength="64" style="width: 220px" />
</FormItem>
<FormItem label="兑换码" prop="cardSecret" :label-width="70">
<Input
<el-form ref="bindForm" :model="bindForm" :rules="bindRules" inline class="bind-form">
<el-form-item label="卡号" prop="cardNo" label-width="60px">
<el-input v-model="bindForm.cardNo" placeholder="请输入卡号" maxlength="64" style="width: 220px" />
</el-form-item>
<el-form-item label="兑换码" prop="cardSecret" label-width="70px">
<el-input
v-model="bindForm.cardSecret"
type="password"
placeholder="请输入兑换码(卡密)"
maxlength="128"
style="width: 220px"
/>
</FormItem>
<FormItem :label-width="0">
<Button type="primary" :loading="bindSubmitting" @click="submitBind">兑换</Button>
</FormItem>
</Form>
</el-form-item>
<el-form-item label-width="0px">
<el-button type="primary" :loading="bindSubmitting" @click="submitBind">兑换</el-button>
</el-form-item>
</el-form>
</div>
<Tabs v-model="statusTab" class="status-tabs mb_16" @on-click="onStatusTab">
<TabPane label="可用" name="AVAILABLE" />
<TabPane label="不可用" name="UNAVAILABLE" />
<TabPane label="待激活" name="PENDING_ACTIVATION" />
</Tabs>
<el-tabs v-model="statusTab" class="status-tabs mb_16" @tab-click="(tab) => onStatusTab(tab.paneName)">
<el-tab-pane label="可用" name="AVAILABLE" />
<el-tab-pane label="不可用" name="UNAVAILABLE" />
<el-tab-pane label="待激活" name="PENDING_ACTIVATION" />
</el-tabs>
<div class="card-list-wrap">
<Spin v-if="loading" fix />
<el-skeleton v-if="loading" fix />
<template v-if="!loading">
<empty v-if="list.length === 0" />
<div v-else class="gift-card-grid">
@@ -51,7 +51,7 @@
</div>
<div class="gcc-card-body">
<div class="gcc-row">
当前余额<span class="gcc-strong" v-if="item.balance != null">¥{{ item.balance | unitPrice }}</span><span class="gcc-strong" v-else></span>
当前余额<span class="gcc-strong" v-if="item.balance != null">¥{{ $filters.unitPrice(item.balance) }}</span><span class="gcc-strong" v-else></span>
</div>
<button
@@ -73,28 +73,23 @@
</div>
<div class="page-size">
<Page
:current="params.pageNumber"
<el-pagination :current-page="params.pageNumber"
:page-size="params.pageSize"
:page-size-opts="[10, 20, 50]"
:page-sizes="[10, 20, 50]"
:total="total"
show-sizer
show-total
size="small"
transfer
@on-change="changePage"
@on-page-size-change="changePageSize"
/>
small
@current-change="changePage"
@size-change="changePageSize"
layout="total, sizes, prev, pager, next" />
</div>
<Modal v-model="noticeModal" title="使用须知" footer-hide width="520">
<el-dialog v-model="noticeModal" title="使用须知" footer-hide width="520">
<p class="gcc-notice-text">
请在有效期内使用本礼品卡消费时将优先使用卡内余额具体使用范围以活动规则为准如有疑问请联系客服
</p>
<div class="gcc-notice-footer">
<Button type="primary" @click="noticeModal = false">我知道了</Button>
</div>
</Modal>
<el-button type="primary" @click="noticeModal = false">我知道了</el-button>
</div></el-dialog>
</div>
</template>
@@ -314,7 +309,7 @@ export default {
gap: 4px 8px;
}
.status-tabs {
::v-deep .ivu-tabs-bar {
:deep(.el-tabs__header) {
margin-bottom: 0;
}
}

View File

@@ -2,7 +2,7 @@
<div class="wrapper">
<!-- 卡片组件 -->
<card _Title="我的足迹" :_Size="16"></card>
<Button class="del-btn" @click="clearAll" type="primary">删除全部</Button>
<el-button class="del-btn" @click="clearAll" type="primary">删除全部</el-button>
<!-- 订单列表 -->
<empty v-if="list.length === 0" />
<ul class="track-list" v-else>
@@ -13,29 +13,28 @@
>
<img :src="item.thumbnail" :alt="item.thumbnail" width="200" height="200" />
<p class="ellipsis">{{ item.goodsName }}</p>
<p>{{ item.price | unitPrice("¥") }}</p>
<p>{{ $filters.unitPrice(item.price, "¥") }}</p>
<span class="del-icon" @click.stop="clearById(item.goodsId)">
<Icon type="md-trash" />
<el-icon><Delete /></el-icon>
</span>
</li>
</ul>
<!-- 分页 -->
<div class="page-size">
<Page
:total="total"
@on-change="changePageNum"
@on-page-size-change="changePageSize"
<el-pagination :total="total"
@current-change="changePageNum"
@size-change="changePageSize"
:page-size="params.pageSize"
show-sizer
>
</Page>
layout="sizes, prev, pager, next"></el-pagination>
</div>
</div>
</template>
<script>
import { Delete } from '@element-plus/icons-vue';
import { tracksList, clearTracks, clearTracksById } from "@/api/member";
export default {
components: { Delete },
name: "MyTrack",
data() {
return {

View File

@@ -9,13 +9,13 @@
</div>
<div class="cart-steps">
<span :class="stepIndex == 1 ? 'active' : ''">1.我的购物车</span>
<Icon :class="stepIndex == 1 ? 'active-arrow' : ''" custom="icomoon icon-next"></Icon>
<i class="icomoon icon-next" :class="stepIndex == 1 ? 'active-arrow' : ''"></i>
<span :class="stepIndex == 1 ? 'active' : ''">2.填写订单信息</span>
<Icon :class="stepIndex == 1 ? 'active-arrow' : ''" custom="icomoon icon-next"></Icon>
<i class="icomoon icon-next" :class="stepIndex == 1 ? 'active-arrow' : ''"></i>
<span :class="stepIndex == 2 ? 'active' : ''">3.成功提交订单</span>
</div>
</div>
<Divider />
<el-divider />
<div class="content width_1200">
<!-- 收货地址 -->
<div class="address" v-if="selectedDeliverMethod === 'LOGISTICS' && goodsType !== 'VIRTUAL_GOODS'">
@@ -30,13 +30,13 @@
:key="index">
<div>
<span>{{ item.name }}</span>
<Tag class="ml_10" v-if="item.isDefault" color="red">默认</Tag>
<Tag class="ml_10" v-if="item.alias" color="warning">{{ item.alias }}
</Tag>
<el-tag class="ml_10" v-if="item.isDefault" color="red">默认</el-tag>
<el-tag class="ml_10" v-if="item.alias" color="warning">{{ item.alias }}
</el-tag>
</div>
<div>{{ item.mobile }}</div>
<div>
{{ item.consigneeAddressPath | unitAddress }} {{ item.detail }}
{{ $filters.unitAddress(item.consigneeAddressPath) }} {{ item.detail }}
</div>
<div class="edit-btn" v-show="showEditBtn === index">
<span @click.stop="editAddress(item.id)">修改</span>
@@ -44,18 +44,18 @@
</div>
<div class="corner-icon" v-show="selectedAddress.id === item.id">
<div></div>
<Icon type="md-checkmark" />
<el-icon><Check /></el-icon>
</div>
</div>
<div class="add-address" @click="editAddress('')">
<Icon type="ios-add-circle-outline" />
<el-icon><Plus /></el-icon>
<div>添加新地址</div>
</div>
</div>
<div class="more-addr" @click="moreAddr = !moreAddr" v-if="addressList.length > 3">
{{ moreAddr ? "收起地址" : "更多地址" }}
<Icon v-show="!moreAddr" type="md-arrow-dropdown" />
<Icon v-show="moreAddr" type="md-arrow-dropup" />
<el-icon :v-show="!moreAddr"><ArrowDown /></el-icon>
<el-icon :v-show="moreAddr"><ArrowUp /></el-icon>
</div>
</div>
@@ -73,18 +73,18 @@
</div>
<div>{{ item.mobile }}</div>
<div>
{{ item.address | unitAddress }} {{ item.detail }}
{{ $filters.unitAddress(item.address) }} {{ item.detail }}
</div>
<div class="corner-icon" v-show="selectedStoreAddress.id === item.id">
<div></div>
<Icon type="md-checkmark" />
<el-icon><Check /></el-icon>
</div>
</div>
</div>
<div class="more-addr" @click="storeMoreAddr = !storeMoreAddr" v-if="addressList.length > 3">
{{ storeMoreAddr ? "收起地址" : "更多地址" }}
<Icon v-show="!storeMoreAddr" type="md-arrow-dropdown" />
<Icon v-show="storeMoreAddr" type="md-arrow-dropup" />
<el-icon :v-show="!storeMoreAddr"><ArrowDown /></el-icon>
<el-icon :v-show="storeMoreAddr"><ArrowUp /></el-icon>
</div>
</div>
<div>
@@ -102,7 +102,7 @@
<div>{{ item.label }}</div>
<div class="corner-icon" v-show="selectedDeliverMethod === item.value">
<div></div>
<Icon type="md-checkmark" />
<el-icon><Check /></el-icon>
</div>
</div>
</div>
@@ -132,18 +132,14 @@
goods.goodsSku.goodsName
}}</span>
</span>
<span class="goods-price">{{
goods.purchasePrice | unitPrice("¥")
}}</span>
<span class="goods-price">{{ $filters.unitPrice(goods.purchasePrice, "¥") }}</span>
<span>x{{ goods.num }}</span>
<span>{{ goods.goodsSku.quantity > 0 ? "有货" : "无货" }}</span>
<span class="goods-price">{{
goods.subTotal | unitPrice("¥")
}}</span>
<span class="goods-price">{{ $filters.unitPrice(goods.subTotal, "¥") }}</span>
</div>
</div>
<div class="order-mark">
<Input type="textarea" maxlength="60" v-model="shop.remark" show-word-limit placeholder="订单备注" />
<el-input type="textarea" maxlength="60" v-model="shop.remark" show-word-limit placeholder="订单备注" />
<span style="font-size: 12px; color: #999">提示请勿填写有关支付收货发票方面的信息</span>
</div>
</div>
@@ -153,7 +149,7 @@
<div class="invoice">
<div class="card-head mt_20 mb_20">
<span class="relative">发票信息<span class="inv-tips">
<Icon type="ios-alert-outline" />开企业抬头发票须填写纳税人识别号以免影响报销
<el-icon><Warning /></el-icon>开企业抬头发票须填写纳税人识别号以免影响报销
</span></span>
</div>
<div class="inovice-content">
@@ -175,9 +171,7 @@
<li v-for="(item, index) in couponList" class="coupon-item" :key="index">
<div class="c-left">
<div>
<span v-if="item.couponType === 'PRICE'" class="fontsize_12 global_color">¥<span class="price">{{
item.price | unitPrice
}}</span></span>
<span v-if="item.couponType === 'PRICE'" class="fontsize_12 global_color">¥<span class="price">{{ $filters.unitPrice(item.price) }}</span></span>
<span v-if="item.couponType === 'DISCOUNT'" class="fontsize_12 global_color"><span class="price">{{
item.discount
}}</span></span>
@@ -201,12 +195,11 @@
<div class="pay-gcc-title">
使用礼品卡
<span class="pay-gcc-deduct">
(已抵扣 <span class="pay-gcc-deduct-num">{{ giftCardDeductAmount | unitPrice("¥") }}</span
>)
(已抵扣 <span class="pay-gcc-deduct-num">{{ $filters.unitPrice(giftCardDeductAmount, "¥") }}</span>)
</span>
</div>
<a href="javascript:void(0)" class="pay-gcc-help" @click.prevent="giftCardNoticeModal = true">
使用说明 <Icon type="ios-help-circle-outline" />
使用说明 <el-icon><Help /></el-icon>
</a>
</div>
<div class="pay-gcc-body">
@@ -234,14 +227,14 @@
</div>
</div>
<div class="pay-gcc-balance-row">
<span class="pay-gcc-amt">¥{{ item.balance != null ? (item.balance | unitPrice) : "0.00" }}</span>
<span class="pay-gcc-amt">¥{{ item.balance != null ? $filters.unitPrice(item.balance) : "0.00" }}</span>
<span class="pay-gcc-bal-label">余额</span>
</div>
<div class="pay-gcc-no">{{ item.cardNo }}</div>
</div>
</div>
<div v-if="isGiftCardSelected(item)" class="pay-gcc-corner">
<Icon type="md-checkmark" />
<el-icon><Check /></el-icon>
</div>
</div>
</div>
@@ -252,28 +245,26 @@
<!-- 订单价格 -->
<div class="order-price">
<div>
<span>{{ totalNum }}件商品总商品金额</span><span>{{ priceDetailDTO.goodsPrice | unitPrice("¥") }}</span>
<span>{{ totalNum }}件商品总商品金额</span><span>{{ $filters.unitPrice(priceDetailDTO.goodsPrice, "¥") }}</span>
</div>
<div v-if="priceDetailDTO.freightPrice > 0">
<span>运费</span><span>{{ priceDetailDTO.freightPrice | unitPrice("¥") }}</span>
<span>运费</span><span>{{ $filters.unitPrice(priceDetailDTO.freightPrice, "¥") }}</span>
</div>
<div v-if="priceDetailDTO.discountPrice > 0">
<span>优惠金额</span><span>-{{ priceDetailDTO.discountPrice | unitPrice("¥") }}</span>
<span>优惠金额</span><span>-{{ $filters.unitPrice(priceDetailDTO.discountPrice, "¥") }}</span>
</div>
<div v-if="priceDetailDTO.couponPrice > 0">
<span>优惠券金额</span><span>-{{ priceDetailDTO.couponPrice | unitPrice("¥") }}</span>
<span>优惠券金额</span><span>-{{ $filters.unitPrice(priceDetailDTO.couponPrice, "¥") }}</span>
</div>
<div v-if="giftCardDeductAmount > 0">
<span>礼品卡抵扣</span><span>-{{ giftCardDeductAmount | unitPrice("¥") }}</span>
<span>礼品卡抵扣</span><span>-{{ $filters.unitPrice(giftCardDeductAmount, "¥") }}</span>
</div>
<div v-if="$route.query.way === 'POINTS'">
<span>应付积分</span><span class="actrual-price">{{ priceDetailDTO.payPoint }}</span>
</div>
<div v-else>
<span>应付金额</span><span class="actrual-price">{{
priceDetailDTO.flowPrice | unitPrice("¥")
}}</span>
<span>应付金额</span><span class="actrual-price">{{ $filters.unitPrice(priceDetailDTO.flowPrice, "¥") }}</span>
</div>
</div>
</div>
@@ -281,7 +272,7 @@
<div class="order-footer width_1200">
<div class="pay ml_20" @click="pay">提交订单</div>
<div class="pay-address" v-if="addressList.length && selectedDeliverMethod === 'LOGISTICS'">
配送至{{ selectedAddress.consigneeAddressPath | unitAddress }}
配送至{{ $filters.unitAddress(selectedAddress.consigneeAddressPath) }}
{{ selectedAddress.detail }}&nbsp;&nbsp;收货人{{
selectedAddress.name
}}&nbsp;&nbsp;{{ selectedAddress.mobile }}
@@ -295,18 +286,18 @@
<invoice-modal ref="invModal" :invoiceData="invoiceData" @change="getInvMsg" />
<!-- 选择地址模态框 -->
<address-manage ref="address" :id="addrId" @change="addrChange"></address-manage>
<Modal v-model="giftCardNoticeModal" title="礼品卡使用说明" footer-hide width="520">
<el-dialog v-model="giftCardNoticeModal" title="礼品卡使用说明" footer-hide width="520">
<p class="pay-gcc-notice-p">
请在礼品卡有效期内使用结算时勾选礼品卡即可按规则抵扣订单金额可与优惠券等活动叠加规则以平台说明为准放弃勾选或取消抵扣将恢复对应余额
</p>
<div class="pay-gcc-notice-foot">
<Button type="primary" @click="giftCardNoticeModal = false">我知道了</Button>
</div>
</Modal>
<el-button type="primary" @click="giftCardNoticeModal = false">我知道了</el-button>
</div></el-dialog>
</div>
</template>
<script>
import { ArrowDown, ArrowUp, Check, Help, Plus, Warning } from '@element-plus/icons-vue';
import invoiceModal from "@/components/invoiceModal";
import addressManage from "@/components/addressManage";
import { memberAddress, delMemberAddress } from "@/api/address";
@@ -928,7 +919,7 @@ export default {
padding: 0 15px;
}
.ivu-icon {
.el-icon {
@include content_color($light_content_color);
font-size: 20px;
margin: 0 15px;
@@ -1008,7 +999,7 @@ export default {
border-right: 20px solid $theme_color;
}
.ivu-icon {
.el-icon {
font-size: 12px;
position: absolute;
bottom: 0;
@@ -1045,7 +1036,7 @@ export default {
justify-content: center;
flex-direction: column;
.ivu-icon {
.el-icon {
font-size: 24px;
}
@@ -1091,7 +1082,7 @@ export default {
border-right: 20px solid $theme_color;
}
.ivu-icon {
.el-icon {
font-size: 12px;
position: absolute;
bottom: 0;
@@ -1115,7 +1106,7 @@ export default {
>span:nth-child(1) {
font-weight: bold;
.ivu-icon {
.el-icon {
color: #ff8f23;
&:hover {
@@ -1232,7 +1223,7 @@ export default {
left: -9px;
}
.ivu-icon {
.el-icon {
color: #ff8f23;
margin-right: 3px;
font-size: 16px;
@@ -1333,7 +1324,7 @@ export default {
}
}
.ivu-divider {
.el-divider {
background: $theme_color;
height: 2px;
}
@@ -1551,7 +1542,7 @@ export default {
background: #e54d42;
transform: rotate(45deg);
}
.pay-gcc-corner .ivu-icon {
.pay-gcc-corner .el-icon {
position: absolute;
right: 3px;
bottom: 3px;

View File

@@ -5,9 +5,9 @@
<img src="../../assets/images/pay-success.png">
</div>
<div class="pay-btn">
<Button type="primary" @click="$router.push('/')">继续逛逛</Button>
<Button type="info" v-if="$route.query.orderType ==='RECHARGE'" @click="$router.push('/home/MoneyManagement')">查看余额</Button>
<Button type="info" v-else @click="$router.push('/home/myOrder')">查看订单</Button>
<el-button type="primary" @click="$router.push('/')">继续逛逛</el-button>
<el-button type="info" v-if="$route.query.orderType ==='RECHARGE'" @click="$router.push('/home/MoneyManagement')">查看余额</el-button>
<el-button type="info" v-else @click="$router.push('/home/myOrder')">查看订单</el-button>
</div>
</div>
</template>

View File

@@ -6,19 +6,11 @@
<div class="left-tips">订单提交成功请尽快付款</div>
<div class="left-tips-time">请您尽快完成支付否则订单会被自动取消</div>
<div class="left-tips-count-down">
<mv-count-down :startTime="startTime" class="count-down"
:endTime="endTime"
:endText="endText"
:dayTxt="'天'"
:hourTxt="'小时'"
:minutesTxt="'分钟'"
:secondsTxt="'秒'"
:isStart="isStart"></mv-count-down>
<span class="count-down">{{ countdownText }}</span>
</div>
</div>
<div class="head-right">
<div>应付金额 <span class="price">{{ payDetail.price | unitPrice }}</span></div>
<div>应付金额 <span class="price">{{ $filters.unitPrice(payDetail.price) }}</span></div>
</div>
</div>
<div class="wrapper-box">
@@ -35,9 +27,9 @@
<span>微信</span>
</div>
<div v-if="support.includes('WALLET') && $route.query.orderType !== 'RECHARGE'" class="-box-item" @click="handlePay('WALLET')">
<Icon custom="icomoon icon-wallet" size="60"/>
<i class="icomoon icon-wallet" style="font-size: 60px"></i>
<span>余额支付</span>
<span>当前剩余({{ walletValue | unitPrice('¥') }})</span>
<span>当前剩余({{ $filters.unitPrice(walletValue, '¥') }})</span>
</div>
</div>
<BaseFooter></BaseFooter>
@@ -46,25 +38,34 @@
<script>
import {tradeDetail, pay} from '@/api/pay.js';
import MvCountDown from 'mv-count-down'
import {Message} from 'view-design';
import { Message } from '@/utils/message';
export default {
components: {
MvCountDown
},
data () {
return {
payDetail: {}, // 支付详情
support: [], // 支持配送方式
walletValue: 0, // 当前余额
qrcode: '', // 支付二维码
startTime: new Date().getTime(), // 开始时间(时间戳)
endTime: 0, // 完成的时间(时间戳)
endText: '订单已超时取消', // 倒计时完成的提示文本
isStart: false // 控制倒计时开始的时机(异步请求完成开启)
payDetail: {},
support: [],
walletValue: 0,
qrcode: '',
endTime: 0,
endText: '订单已超时取消',
isStart: false,
now: Date.now(),
countdownTimer: null,
};
},
computed: {
countdownText () {
if (!this.isStart || !this.endTime) return '';
const diff = this.endTime - this.now;
if (diff <= 0) return this.endText;
const days = Math.floor(diff / 86400000);
const hours = Math.floor((diff % 86400000) / 3600000);
const minutes = Math.floor((diff % 3600000) / 60000);
const seconds = Math.floor((diff % 60000) / 1000);
return `${days}${hours}小时${minutes}分钟${seconds}`;
},
},
methods: {
// 获取订单详情
getTradeDetail () {
@@ -118,7 +119,13 @@ export default {
},
mounted () {
this.getTradeDetail();
}
this.countdownTimer = setInterval(() => {
this.now = Date.now();
}, 1000);
},
beforeUnmount () {
if (this.countdownTimer) clearInterval(this.countdownTimer);
},
};
</script>
<style scoped lang="scss">

View File

@@ -7,7 +7,7 @@
<div class="left-tips-time">请您尽快完成支付否则订单会被自动取消</div>
</div>
<div class="head-right">
<div>应付金额 <span class="price">{{$route.query.price | unitPrice}}</span></div>
<div>应付金额 <span class="price">{{ $filters.unitPrice($route.query.price) }}</span></div>
</div>
</div>
<div class="content">
@@ -17,14 +17,14 @@
<vue-qr :text="qrcode" :margin="0" colorDark="#000" colorLight="#fff" :size="200"></vue-qr>
</div>
<div class="intro">
<Icon type="md-qr-scanner" /> 请使用{{params.paymentMethod === 'ALIPAY' ? '支付宝' : '微信'}}扫码付款
<el-icon><Iphone /></el-icon> 请使用{{params.paymentMethod === 'ALIPAY' ? '支付宝' : '微信'}}扫码付款
</div>
</div>
<div class="btn-div">
<p class="mb_10">支付成功后自动跳转如未跳转请点击按钮手动跳转</p>
<div>
<Button @click="handlePay">重新支付</Button>
<Button type="success" @click="$router.push('/payDone')">支付成功</Button>
<el-button @click="handlePay">重新支付</el-button>
<el-button type="success" @click="$router.push('/payDone')">支付成功</el-button>
</div>
</div>
<a @click="$router.back()">选择其他支付方式></a>
@@ -33,10 +33,11 @@
</div>
</template>
<script>
import { Iphone } from '@element-plus/icons-vue';
import vueQr from 'vue-qr';
import { payCallback, pay } from '@/api/pay.js';
export default {
components: { vueQr },
components: { vueQr, Iphone },
data () {
return {
qrcode: '', // 二维码

View File

@@ -4,10 +4,10 @@
<Search style="border-bottom:2px solid red;"></Search>
<!-- <drawer></drawer> -->
<div class="base-width cate-container">
<Breadcrumb>
<BreadcrumbItem to="/">首页</BreadcrumbItem>
<BreadcrumbItem>{{goodsMsg.pointsGoodsCategoryName}}</BreadcrumbItem>
</Breadcrumb>
<el-breadcrumb>
<el-breadcrumb-item to="/">首页</el-breadcrumb-item>
<el-breadcrumb-item>{{goodsMsg.pointsGoodsCategoryName}}</el-breadcrumb-item>
</el-breadcrumb>
</div>
<!-- 商品信息展示 -->
<div class="item-detail-show">
@@ -15,7 +15,13 @@
<div class="item-detail-left">
<!-- 大图放大镜 -->
<div class="item-detail-big-img">
<pic-zoom v-if="goodsSku.thumbnail" :url="goodsSku.thumbnail" :scale="2"></pic-zoom>
<el-image
v-if="goodsSku.thumbnail"
:src="goodsSku.thumbnail"
:preview-src-list="[goodsSku.thumbnail]"
fit="contain"
style="width: 100%; height: 400px"
/>
</div>
<div class="item-detail-img-row">
<div class="item-detail-img-small">
@@ -49,7 +55,7 @@
<p>数量</p>
</div>
<div class="item-select-row">
<InputNumber :min="1" :disabled="goodsSku.quantity === 0" v-model="count"></InputNumber>
<el-input-number :min="1" :disabled="goodsSku.quantity === 0" v-model="count"></el-input-number>
<span class="inventory"> 库存{{goodsSku.quantity}}</span>
</div>
</div>
@@ -62,7 +68,7 @@
</div>
</div>
<div class="add-buy-car">
<Button type="error" :loading="loading" :disabled="goodsSku.quantity === 0" @click="pointBuy">积分购买</Button>
<el-button type="danger" :loading="loading" :disabled="goodsSku.quantity === 0" @click="pointBuy">积分购买</el-button>
</div>
</div>
</div>
@@ -73,14 +79,13 @@
<div v-html="goodsSku.intro" class="mt_10 ml_10" v-if="goodsSku.intro"></div>
<div v-else style="margin:20px;">暂无商品介绍</div>
</div>
<Spin size="large" fix v-if="isLoading"></Spin>
<el-skeleton size="large" fix v-if="isLoading"></el-skeleton>
<BaseFooter></BaseFooter>
</div>
</template>
<script>
import Search from '@/components/Search';
import PicZoom from 'vue-piczoom';
import { addCartGoods } from '@/api/cart.js';
import { pointGoodsDetail } from '@/api/promotion';
export default {
@@ -157,7 +162,7 @@ export default {
}
},
components: {
Search, PicZoom
Search,
}
};
</script>

View File

@@ -4,9 +4,9 @@
<Search></Search>
<cateNav></cateNav>
<h3 class="promotion-decorate">积分商品</h3>
<Select @on-select="selectCate" size="small" class="cate-select-con" v-model="cateId">
<Option v-for="(cate, index) in cateList" :value="cate.id" :key="index">{{cate.name}}</Option>
</Select>
<el-select @select="selectCate" size="small" class="cate-select-con" v-model="cateId">
<el-option v-for="(cate, index) in cateList" :value="cate.id" :key="index">{{cate.name}}</el-option>
</el-select>
<!-- 列表 -->
<div class="goods-list">
<empty v-if="goodsList.length === 0" />
@@ -29,8 +29,7 @@
<span>{{ item.goodsSku.goodsName }}</span>
</div>
<div class="goods-show-num">
已有<span>{{ item.commentNum || 0 }}</span
>人评价
已有<span>{{ item.commentNum || 0 }}</span>人评价
</div>
<div class="goods-show-seller">
<span>{{ item.storeName }}</span>
@@ -38,12 +37,9 @@
</div>
</div>
<div class="page-size">
<Page :total="total" @on-change="changePageNum"
@on-page-size-change="changePageSize"
:page-size="params.pageSize"
show-total
show-sizer>
</Page>
<el-pagination :total="total" @current-change="changePageNum"
@size-change="changePageSize"
:page-size="params.pageSize" layout="total, sizes, prev, pager, next"></el-pagination>
</div>
<BaseFooter></BaseFooter>
</div>

View File

@@ -32,12 +32,8 @@
</div>
<div class="goods-show-price">
<span>
<span class="seckill-price text-danger">{{
item.price | unitPrice("¥")
}}</span>
<span style="color: #999; text-decoration: line-through">{{
item.originalPrice | unitPrice("¥")
}}</span>
<span class="seckill-price text-danger">{{ $filters.unitPrice(item.price, "¥") }}</span>
<span style="color: #999; text-decoration: line-through">{{ $filters.unitPrice(item.originalPrice, "¥") }}</span>
</span>
</div>
<div class="goods-show-detail" style="margin-bottom: 20px">
@@ -59,12 +55,15 @@
(item.salesNum / (item.quantity)) * 100
)
: 100) + "%"
}}</span><Progress hide-info stroke-color="#df0021" style="width: 110px" class="ml_10" :percent="item.quantity && item.quantity > 0
? Math.ceil(
(item.salesNum / (item.quantity)) * 100
)
: 100
" />
}}</span><el-progress
:show-text="false"
color="#df0021"
style="width: 110px"
class="ml_10"
:percentage="item.quantity && item.quantity > 0
? Math.ceil((item.salesNum / item.quantity) * 100)
: 100"
/>
</div>
<div class="goods-show-seller">
<span>{{ item.storeName }}</span>
@@ -88,8 +87,7 @@ export default {
nowHour: new Date().getHours(), // 当前小时数
};
},
beforeDestroy () {
// 销毁前清除定时器
beforeUnmount () {
clearInterval(this.interval);
},
watch: {
@@ -265,7 +263,7 @@ export default {
justify-content: center;
}
.ivu-progress-success .ivu-progress-bg {
background-color: #111fff;
.el-progress-bar__inner {
background-color: #df0021;
}
</style>

View File

@@ -1,79 +1,78 @@
<template>
<div class="company-msg">
<Form ref="firstForm" :model="form" :rules="rules" :label-width="140">
<el-form ref="firstForm" :model="form" :rules="rules" label-width="140px">
<h4>基础信息</h4>
<FormItem prop="companyName" label="公司名称">
<Input
<el-form-item prop="companyName" label="公司名称">
<el-input
type="text"
v-model="form.companyName"
placeholder="请填写公司信息"
/>
</FormItem>
<FormItem prop="companyAddressIdPath" label="公司所在地">
</el-form-item>
<el-form-item prop="companyAddressIdPath" label="公司所在地">
<span>{{ form.companyAddressPath || '暂无地址' }}</span>
<Button type="default" style="margin-left: 10px;" @click="$refs.map.open()">选择</Button>
</FormItem>
<FormItem prop="companyAddress" label="公司详细地址">
<Input
<el-button type="default" style="margin-left: 10px;" @click="$refs.map.open()">选择</el-button>
</el-form-item>
<el-form-item prop="companyAddress" label="公司详细地址">
<el-input
type="text"
v-model="form.companyAddress"
placeholder="请填写公司详细信息"
/>
</FormItem>
<FormItem prop="employeeNum" label="员工总数">
<Input
</el-form-item>
<el-form-item prop="employeeNum" label="员工总数">
<el-input
type="text"
v-model="form.employeeNum"
placeholder="请填写公司员工总数"
><span slot="append"></span>
</Input>
</FormItem>
<FormItem prop="companyPhone" label="公司电话">
<Input
><template #append><span></span></template></el-input>
</el-form-item>
<el-form-item prop="companyPhone" label="公司电话">
<el-input
type="text"
v-model="form.companyPhone"
placeholder="请填写公司电话"
></Input>
</FormItem>
<FormItem prop="registeredCapital" label="注册资金">
<Input
></el-input>
</el-form-item>
<el-form-item prop="registeredCapital" label="注册资金">
<el-input
type="text"
v-model="form.registeredCapital"
placeholder="请填写注册资金"
><span slot="append">万元</span></Input>
</FormItem>
<FormItem prop="linkName" label="联系人姓名">
<Input
><template #append><span>万元</span></template></el-input>
</el-form-item>
<el-form-item prop="linkName" label="联系人姓名">
<el-input
type="text"
v-model="form.linkName"
placeholder="请填写联系人姓名"
/>
</FormItem>
<FormItem prop="linkPhone" label="联系人电话">
<Input
</el-form-item>
<el-form-item prop="linkPhone" label="联系人电话">
<el-input
type="text"
v-model="form.linkPhone"
placeholder="请填写联系人电话"
/>
</FormItem>
<FormItem prop="companyEmail" label="电子邮箱">
<Input
</el-form-item>
<el-form-item prop="companyEmail" label="电子邮箱">
<el-input
type="text"
v-model="form.companyEmail"
placeholder="请填写电子邮箱"
/>
</FormItem>
</el-form-item>
<h4>营业执照信息</h4>
<FormItem prop="licenseNum" label="营业执照号">
<Input
<el-form-item prop="licenseNum" label="营业执照号">
<el-input
type="text"
v-model="form.licenseNum"
placeholder="请填写营业执照号"
/>
</FormItem>
<FormItem prop="scope" label="法定经营范围">
<Input
</el-form-item>
<el-form-item prop="scope" label="法定经营范围">
<el-input
type="textarea"
v-model="form.scope"
maxlength="200"
@@ -81,9 +80,9 @@
:rows="4"
placeholder="请输入营业执照所示经营范围"
/>
</FormItem>
<FormItem prop="licencePhoto" label="营业执照电子版">
<Upload
</el-form-item>
<el-form-item prop="licencePhoto" label="营业执照电子版">
<el-upload
ref="uploadLicence"
:show-upload-list="false"
:on-success="handleSuccess"
@@ -97,8 +96,8 @@
:action="action"
:headers="accessToken"
>
<Button type="info" :loading="uploadLoading">证照上传</Button>
</Upload>
<el-button type="info" :loading="uploadLoading">证照上传</el-button>
</el-upload>
<div class="describe">
请压缩图片在2M以内格式为gifjpgpng并确保文字清晰以免上传或审核失败
</div>
@@ -109,36 +108,30 @@
>
<img :src="item" width="100" alt="" />
<div class="cover">
<Icon
type="ios-eye-outline"
@click.native="handleView(item)"
></Icon>
<Icon
type="ios-trash-outline"
@click.native="handleRemove(index, 'licencePhoto')"
></Icon>
<el-icon @click="handleView(item)"><View /></el-icon>
<el-icon @click="handleRemove(index, 'licencePhoto')"><Delete /></el-icon>
</div>
</div>
</FormItem>
</el-form-item>
<h4>法人信息</h4>
<FormItem prop="legalName" label="法人姓名">
<Input
<el-form-item prop="legalName" label="法人姓名">
<el-input
type="text"
v-model="form.legalName"
maxlength="20"
placeholder="请输入法人姓名"
/>
</FormItem>
<FormItem prop="legalId" label="法人证件号">
<Input
</el-form-item>
<el-form-item prop="legalId" label="法人证件号">
<el-input
type="text"
v-model="form.legalId"
placeholder="请输入法人证件号"
/>
</FormItem>
<FormItem prop="legalPhoto" label="法人证件电子版">
<Upload
</el-form-item>
<el-form-item prop="legalPhoto" label="法人证件电子版">
<el-upload
ref="uploadLegal"
:show-upload-list="false"
:on-success="handleSuccess1"
@@ -152,8 +145,8 @@
:action="action"
:headers="accessToken"
>
<Button type="info" :loading="uploadLoading1">证照上传</Button>
</Upload>
<el-button type="info" :loading="uploadLoading1">证照上传</el-button>
</el-upload>
<div class="describe">
请压缩图片在2M以内身份证正反面两张照片确保图片清晰无缺角
</div>
@@ -164,38 +157,33 @@
>
<img :src="item" width="100" alt="" />
<div class="cover">
<Icon
type="ios-eye-outline"
@click.native="handleView(item)"
></Icon>
<Icon
type="ios-trash-outline"
@click.native="handleRemove(index, 'legalPhoto')"
></Icon>
<el-icon @click="handleView(item)"><View /></el-icon>
<el-icon @click="handleRemove(index, 'legalPhoto')"><Delete /></el-icon>
</div>
</div>
</FormItem>
<FormItem>
<Button type="primary" :loading="loading" @click="next"
>填写财务资质信息</Button
</el-form-item>
<el-form-item>
<el-button type="primary" :loading="loading" @click="next"
>填写财务资质信息</el-button
>
</FormItem>
</Form>
<Modal title="View Image" v-model="visible">
</el-form-item>
</el-form>
<el-dialog title="View Image" v-model="visible">
<img :src="previewPicture" v-if="visible" style="width: 100%" />
</Modal>
</el-dialog>
<multipleMap ref="map" @callback="getAddress" />
</div>
</template>
<script>
import { Delete, View } from '@element-plus/icons-vue';
import { applyFirst } from '@/api/shopentry';
import * as RegExp from '@/plugins/RegExp.js';
import multipleMap from "@/components/map/multiple-map";
import storage from '@/plugins/storage';
import { commonUrl } from '@/plugins/request.js';
export default {
components: { multipleMap },
components: { multipleMap, View, Delete },
props: {
content: {
default: {},
@@ -262,11 +250,11 @@ export default {
if(val.type === 'select'){
const paths = val.data.map(item => item.name).join(',')
const ids = val.data.map(item => item.id).join(',')
this.$set(this.form, 'companyAddressIdPath', ids)
this.$set(this.form, 'companyAddressPath', paths)
this.form['companyAddressIdPath'] = ids
this.form['companyAddressPath'] = paths
}else{
this.$set(this.form, 'companyAddressIdPath', val.data.addrId)
this.$set(this.form, 'companyAddressPath', val.data.addr)
this.form['companyAddressIdPath'] = val.data.addrId
this.form['companyAddressPath'] = val.data.addr
}
},
@@ -376,7 +364,7 @@ h4 {
line-height: 40px;
text-align: left;
}
.ivu-input-wrapper {
.el-input {
width: 300px;
}
.img-list {

View File

@@ -1,43 +1,43 @@
<template>
<div class="photo-msg">
<Form ref="secondForm" :model="form" :rules="rules" :label-width="140">
<el-form ref="secondForm" :model="form" :rules="rules" label-width="140px">
<h4>基础信息</h4>
<FormItem prop="settlementBankAccountName" label="银行开户名">
<Input
<el-form-item prop="settlementBankAccountName" label="银行开户名">
<el-input
type="text"
v-model="form.settlementBankAccountName"
placeholder="请填写银行开户名称"
/>
</FormItem>
<FormItem prop="settlementBankAccountNum" label="银行账号">
<Input
</el-form-item>
<el-form-item prop="settlementBankAccountNum" label="银行账号">
<el-input
type="text"
v-model="form.settlementBankAccountNum"
placeholder="请填写银行账号"
/>
</FormItem>
<FormItem prop="settlementBankBranchName" label="开户银行支行名称">
<Input
</el-form-item>
<el-form-item prop="settlementBankBranchName" label="开户银行支行名称">
<el-input
type="text"
v-model="form.settlementBankBranchName"
placeholder="请填写开户银行支行名称"
/>
</FormItem>
<FormItem prop="settlementBankJointName" label="支行联行号">
<Input
</el-form-item>
<el-form-item prop="settlementBankJointName" label="支行联行号">
<el-input
type="text"
v-model="form.settlementBankJointName"
placeholder="请填写支行联行号"
/>
</FormItem>
</el-form-item>
<FormItem>
<Button @click="$emit('change', 0)">返回</Button>
<Button type="primary" :loading="loading" @click="next"
>填写其他信息</Button
<el-form-item>
<el-button @click="$emit('change', 0)">返回</el-button>
<el-button type="primary" :loading="loading" @click="next"
>填写其他信息</el-button
>
</FormItem>
</Form>
</el-form-item>
</el-form>
</div>
</template>
<script>
@@ -110,7 +110,7 @@ h4 {
line-height: 40px;
text-align: left;
}
.ivu-input-wrapper {
.el-input {
width: 300px;
}
</style>

View File

@@ -3,12 +3,12 @@
<div style="height: 20px"></div>
<div class="content">
<h1>店铺入驻</h1>
<Steps :current="currentIndex" class="margin">
<Step title="企业资质信息"></Step>
<Step title="财务资质信息"></Step>
<Step title="其他信息"></Step>
<Step title="提交审核"></Step>
</Steps>
<el-steps :current="currentIndex" class="margin">
<el-step title="企业资质信息"></el-step>
<el-step title="财务资质信息"></el-step>
<el-step title="其他信息"></el-step>
<el-step title="提交审核"></el-step>
</el-steps>
<first-apply v-if="currentIndex == 0 && dataReview" :content="firstData" @change="nextPage"></first-apply>
<second-apply v-if="currentIndex == 1 && dataReview" :content="secondData" @change="nextPage"></second-apply>
@@ -21,24 +21,24 @@
<span v-if="storeDisable == 'CLOSED'">店铺已关闭重申请联系管理员</span>
<span v-if="storeDisable == 'REFUSED'">审核未通过,请修改资质信息如有疑问请联系管理员</span>
</div>
<Button v-if="currentIndex === 3" @click="$router.push('/')">返回</Button>
<el-button v-if="currentIndex === 3" @click="$router.push('/')">返回</el-button>
&nbsp;
<Button type="primary" @click='currentIndex = 0'
v-if="storeDisable === 'REFUSED' && currentIndex === 3">重新申请</Button>
<el-button type="primary" @click='currentIndex = 0'
v-if="storeDisable === 'REFUSED' && currentIndex === 3">重新申请</el-button>
</div>
<Modal title="店铺入驻协议" v-model="showAgreement" width="1200" :closable="false" :mask-closable="false">
<el-dialog title="店铺入驻协议" v-model="showAgreement" width="1200" :closable="false" :close-on-click-modal="false">
<Scroll :on-reach-bottom="handleReachBottom">
<div class="agreeent-con" v-html="agreementCon"></div>
</Scroll>
<div slot="footer" style="text-align: center">
<template #footer><div style="text-align: center">
<p>
<Checkbox v-model="checked">我已同意以上协议</Checkbox>
<el-checkbox v-model="checked">我已同意以上协议</el-checkbox>
</p>
<Button type="primary" :disabled="!checked" class="margin" @click="showAgreement = false">同意协议填写资质信息</Button>
</div>
</Modal>
<el-button type="primary" :disabled="!checked" class="margin" @click="showAgreement = false">同意协议填写资质信息</el-button>
</div></template>
</el-dialog>
</div>
</template>
<script>
@@ -182,7 +182,7 @@ export default {
}
.agreeent-con {
max-height: 500px;
::v-deep img{
:deep img{
max-width: 100%;
}

View File

@@ -1,17 +1,17 @@
<template>
<div class="person-msg">
<Form ref="thirdForm" :model="form" :rules="rules" :label-width="140">
<el-form ref="thirdForm" :model="form" :rules="rules" label-width="140px">
<h4>基础信息</h4>
<FormItem prop="storeName" label="店铺名称">
<Input
<el-form-item prop="storeName" label="店铺名称">
<el-input
type="text"
v-model="form.storeName"
placeholder="请填写店铺名称"
/>
</FormItem>
</el-form-item>
<FormItem prop="storeLogo" label="店铺logo">
<Upload
<el-form-item prop="storeLogo" label="店铺logo">
<el-upload
ref="uploadLogo"
:show-upload-list="false"
:on-success="handleSuccess"
@@ -25,8 +25,8 @@
:action="action"
:headers="accessToken"
>
<Button type="info" :loading="uploadLoading">上传logo</Button>
</Upload>
<el-button type="info" :loading="uploadLoading">上传logo</el-button>
</el-upload>
<div class="describe">请压缩图片在2M以内格式为gifjpgpng</div>
<div
class="img-list"
@@ -35,45 +35,38 @@
>
<img :src="item" width="100" height="" alt="" />
<div class="cover">
<Icon
type="ios-eye-outline"
@click.native="handleView(item)"
></Icon>
<Icon
type="ios-trash-outline"
@click.native="handleRemove(index, 'storeLogo')"
></Icon>
<el-icon @click="handleView(item)"><View /></el-icon>
<el-icon @click="handleRemove(index, 'storeLogo')"><Delete /></el-icon>
</div>
</div>
</FormItem>
<FormItem prop="goodsManagementCategory" label="店铺经营类目">
<Select
</el-form-item>
<el-form-item prop="goodsManagementCategory" label="店铺经营类目">
<el-select
v-model="form.goodsManagementCategory"
multiple
style="width: 300px"
>
<Option
v-for="item in categoryList"
<el-option v-for="item in categoryList"
:value="item.id"
:key="item.id"
>{{ item.name }}</Option
>{{ item.name }}</el-option
>
</Select>
</FormItem>
</el-select>
</el-form-item>
<FormItem prop="storeAddressIdPath" label="店铺所在地">
<el-form-item prop="storeAddressIdPath" label="店铺所在地">
<span>{{ form.storeAddressPath || '暂无地址' }}</span>
<Button type="default" style="margin-left: 10px;" @click="$refs.map.open()">选择</Button>
</FormItem>
<FormItem prop="storeAddressDetail" label="店铺详细地址">
<Input
<el-button type="default" style="margin-left: 10px;" @click="$refs.map.open()">选择</el-button>
</el-form-item>
<el-form-item prop="storeAddressDetail" label="店铺详细地址">
<el-input
type="text"
v-model="form.storeAddressDetail"
placeholder="请填写店铺详细地址"
/>
</FormItem>
<FormItem prop="storeDesc" label="店铺简介">
<Input
</el-form-item>
<el-form-item prop="storeDesc" label="店铺简介">
<el-input
type="textarea"
v-model="form.storeDesc"
maxlength="200"
@@ -81,22 +74,23 @@
:rows="4"
placeholder="请输入店铺简介"
/>
</FormItem>
</el-form-item>
<FormItem>
<Button @click="$emit('change', 1)">返回</Button>
<Button type="primary" :loading="loading" @click="next"
>提交平台审核</Button
<el-form-item>
<el-button @click="$emit('change', 1)">返回</el-button>
<el-button type="primary" :loading="loading" @click="next"
>提交平台审核</el-button
>
</FormItem>
</Form>
<Modal title="View Image" v-model="visible">
</el-form-item>
</el-form>
<el-dialog title="View Image" v-model="visible">
<img :src="previewPicture" v-if="visible" style="width: 100%" />
</Modal>
</el-dialog>
<multipleMap ref="map" @callback="getAddress" />
</div>
</template>
<script>
import { Delete, View } from '@element-plus/icons-vue';
import { applyThird } from '@/api/shopentry';
import { getCategory } from '@/api/goods';
@@ -114,7 +108,7 @@ export default {
type: Object
}
},
components: { multipleMap },
components: { multipleMap, View, Delete },
data () {
return {
loading: false, // 加载状态
@@ -211,17 +205,15 @@ export default {
if(val.type === 'select'){
const paths = val.data.map(item => item.name).join(',')
const ids = val.data.map(item => item.id).join(',')
this.$set(this.form, "storeAddressPath", paths);
this.$set(this.form, "storeAddressIdPath", ids);
this.form["storeAddressPath"] = paths;
this.form["storeAddressIdPath"] = ids;
this.form.storeCenter = val.data[val.data.length - 1].center
}else{
this.$set(this.form, "storeAddressPath", val.data.addr);
this.$set(this.form, "storeAddressIdPath", val.data.addrId);
this.$set(
this.form,
'storeCenter',
val.data.position.lng + ',' + val.data.position.lat
);
this.form["storeAddressPath"] = val.data.addr;
this.form["storeAddressIdPath"] = val.data.addrId;
this.form['storeCenter'] = val.data.position.lng + ',' + val.data.position.lat
;
}
},
// 获取商品分类
@@ -264,7 +256,7 @@ h4 {
line-height: 40px;
text-align: left;
}
.ivu-input-wrapper {
.el-input {
width: 300px;
}
.img-list {

View File

@@ -3,15 +3,13 @@
<BaseHeader></BaseHeader>
<div class="container width_1200">
<Layout class="layoutAll">
<Sider class="side-bar" ref="side" :collapsed-width="78">
<Menu
<div class="layoutAll">
<el-aside class="side-bar" width="200px">
<el-menu
class="side-menu"
theme="light"
width="auto"
:active-name="$route.name"
:open-names="['订单中心', '会员中心']"
@on-select="onSelect"
:default-active="$route.name"
:default-openeds="['订单中心', '会员中心']"
@select="onSelect"
>
<div class="user-icon">
<div class="user-img">
@@ -21,68 +19,60 @@
v-if="userInfo.face"
alt
/>
<Avatar icon="ios-person" class="mb_10" v-else size="96" />
<el-avatar v-else :size="96" class="mb_10"><el-icon><User /></el-icon></el-avatar>
</div>
<p>{{ userInfo.nickName }}</p>
</div>
<!-- 循环导航栏 -->
<Submenu
v-for="(menu, index) in menuList"
:key="index"
:name="menu.title"
>
<template slot="title" v-if="menu.display">
<Icon type="location"></Icon>
<span>{{ menu.title }}</span>
</template>
<MenuItem
v-for="(chlidren, i) in menu.menus"
:key="i"
:name="chlidren.path"
>{{ chlidren.title }}</MenuItem
>
</Submenu>
</Menu>
</Sider>
<Layout class="layout ml_10">
<Content class="content">
<transition mode="out-in">
<router-view></router-view>
</transition>
</Content>
</Layout>
</Layout>
<template v-for="(menu, index) in menuList" :key="index">
<el-sub-menu v-if="menu.display" :index="menu.title">
<template #title>
<el-icon><Location /></el-icon>
<span>{{ menu.title }}</span>
</template>
<el-menu-item
v-for="(chlidren, i) in menu.menus"
:key="i"
:index="chlidren.path"
>{{ chlidren.title }}</el-menu-item>
</el-sub-menu>
</template>
</el-menu>
</el-aside>
<el-main class="content ml_10">
<transition mode="out-in">
<router-view></router-view>
</transition>
</el-main>
</div>
</div>
</div>
</template>
<script>
import { Location, User } from '@element-plus/icons-vue';
import menuList from "./menu";
import Storage from "@/plugins/storage.js";
export default {
components: { Location, User },
name: "Home",
data() {
return {
menuList, // 会员中心左侧列表
menuList,
};
},
computed: {
userInfo() {
// 用户信息
if (Storage.getItem("userInfo")) {
return JSON.parse(Storage.getItem("userInfo"));
} else {
return {};
}
return {};
},
},
methods: {
// 每次点击左侧bar的callback
onSelect(name) {
this.$router.push({ name: name });
this.$router.push({ name });
},
},
};
@@ -110,6 +100,7 @@ export default {
}
.layoutAll {
display: flex;
min-height: 1200px;
@include background_color($light_background_color);
}
@@ -141,7 +132,6 @@ export default {
.layout-footer-center {
padding: 0px 15px;
padding-bottom: 15px;
text-align: center;
}