smart-admin/rc-busness/pages/myorder/userrecord.vue
lin 9f955a34eb 迭代功能需求
1.修改用户信息存储位置
2.修复订单显示的问题
3.修改优惠卷显示文字显示和选择提示
4.修复地址列表排版错位的问题
5.添加搜索链接跳转查询
2022-03-23 18:04:14 +08:00

828 lines
17 KiB
Vue

<template>
<div>
<Myheader></Myheader>
<div class="rc-top"></div>
<tabs :crumbs="crumbs"></tabs>
<div class="rc-main rc-max-width--xl">
<div class="cart-list">
<div class="header">
<div class="list-left">
<label class="check-label" style="visibility: hidden;"><input type="checkbox" v-model="checkAll" /></label>
<span class="name">商品</span>
</div>
<ul>
<li>单价</li>
<li>数量</li>
<li>操作</li>
</ul>
</div>
<div class="header_ph">
<el-row>
<el-col :span="12">
<div class="list-left" style="visibility: hidden;">
<label class="check-label"><input type="checkbox" v-model="checkAll" /></label>
<span class="name">全选</span>
</div>
</el-col>
<el-col :span="12" class="tr">
<span @click="editList()">
<i class="el-icon-edit"></i>
{{ editState }}
</span>
</el-col>
</el-row>
</div>
<div class="list" v-for="(item, index) in cartData" :key="index">
<div class="list-left">
<label class="check-label"><input type="checkbox" v-model="item.checked" /></label>
<div class="product">
<div class="product-img"><img :src="item.productImg" alt="" /></div>
<div class="right">
<p class="product-title" v-text="item.productName"></p>
<p class="specifications">规格:{{ item.specifications }}</p>
</div>
</div>
</div>
<ul>
<li class="product-price">¥{{ item.productPrice }}</li>
<li>
<div class="rc-jia">
<img src="../../assets/image/userjian.png" alt="" @click="sub(item.buyCount, index)" />
<input type="text" v-model="item.buyCount" />
<img src="../../assets/image/userjia.png" alt="" @click="plus(item.buyCount, index)" />
</div>
</li>
<li class="del"><em @click="userdele(item)">删除</em></li>
</ul>
</div>
</div>
<div class="rc-footera">
<div class="rc-foote">
<div class="rc-shop">
<label style="visibility: hidden;">
<input type="checkbox" v-model="checkAll" />
全选
</label>
</div>
<div class="rc-delete">
<div class="rc-num">
<div class="rc-usernum">
<div class="rc-usea">
<i>总计:</i>
<span>{{ sumPrice }}</span>
</div>
<em>共选择{{ sumlength }}件商品</em>
</div>
<strong @click="usejiesuan()">{{ mustpay }}</strong>
</div>
</div>
</div>
<!-- <div class="rc-shop">
<i>总计:</i>
<span>{{ ordersum }}</span>
</div>
<div class="rc-delete">
<span>
{{ userdelete }}
</span>
</div> -->
</div>
</div>
<MyFooter></MyFooter>
</div>
</template>
<script>
import Myheader from '~/components/header.vue';
import MyFooter from '~/components/rc-footer.vue';
import tabs from '@/components/tabs.vue';
import { mapMutations,mapState } from 'vuex';
import { isexistCart, generateOrderWX, deleteCart } from '../../ajax/getData';
export default {
middleware: 'metaTitle',
meta: { title: '购物车' },
data() {
return {
crumbs: [
{
path: '/productdetails/productlist/'
},
{
path: '/myorder/userrecord/'
}
],
ordersum: 1,
usercheckbox: false,
shopnum: 0,
checkAllFlag: false, //是否全选
checkone: false,
ys1: true,
ys2: true,
userdelete: '结算',
orderprice: '¥199.00',
mustpay: '立即结算',
editState: '编辑',
dellist: [],
totalMoney: '',
allChecked: false,
userid: null,
cartData: [
// {
// buyCount: 3,
// id: 1,
// memberId: "1",
// productCode: "432434",
// productImg: require("../../assets/image/rc-select.png"),
// productName: "测试商品",
// productPrice: 399.0,
// specifications: "5KG",
// checked: false,
// },
// {
// buyCount: 1,
// id: 2,
// memberId: "2",
// productCode: "432434",
// productImg: require("../../assets/image/rc-select.png"),
// productName: "测试商品222",
// productPrice: "199.00",
// specifications: "5KG",
// checked: true,
// },
// {
// buyCount: 4,
// id: 3,
// memberId: "3",
// productCode: "432434",
// productImg: require("../../assets/image/rc-select.png"),
// productName: "测试商品3333",
// productPrice: 69.01,
// specifications: "5KG",
// checked: true,
// },
]
};
},
mounted() {
if(this.userInfo && this.loginState){
this.carmessage();
// this.checkIsLogin();
}
},
watch: {
userInfo(newVal){
if(newVal && this.loginState){
this.carmessage();
}
}
},
components: {
Myheader,
tabs,
MyFooter
},
methods: {
//请求猫
...mapMutations(['checkIsLogin']),
async carmessage() {
let user = this.userInfo;
console.log(user);
this.userid = user.id;
let data = await isexistCart(user.id);
console.log(data,'datadata');
this.cartData = data;
// this.goldmedal = data;
},
async userjie(list) {
let user = this.userInfo;
this.userid = user.id;
let data = await generateOrderWX(list);
if (data) {
this.$message({
type: 'warning',
message: data.msg
});
this.$router.push({
path: '/personal/settlement',
query: {
wxdata: data.data
}
});
}
},
//删除购物车
async deletsmessage(productCode) {
let user = this.userInfo;
this.userid = user.id;
let data = await deleteCart(productCode);
if (data) {
this.$message({
type: 'warning',
message: data.msg
});
this.carmessage();
}
},
editList() {
if (this.editState == '完成') {
this.mustpay = '立即结算';
this.editState = ' 编辑';
} else {
this.mustpay = '删除';
this.editState = '完成';
}
},
// checkBox(){
// console.log(event.target.checked)
// this.usercheckbox=event.target.checked;
// this.goldmedal.forEach(item => {
// item.checked = this.usercheckbox
// });
// },
userdele(item) {
let delform = [];
if (item.length > 0) {
delform = item;
} else {
delform = [item.productCode];
}
this.$confirm('确定删除', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'success',
callback: action => {
if (action === 'confirm') {
this.deletsmessage(delform);
}
}
});
// this.$message({
// type: "warning",
// message: data.msg,
// });
},
plus(num, index) {
let leftAllotment = this.cartData[index].leftAllotment;
if (this.cartData[index].buyCount >= leftAllotment) {
this.$message({
type: 'error',
message: '已达到本品最大购买上限'
});
return;
}
this.cartData[index].buyCount = parseInt(this.cartData[index].buyCount) + 1;
},
// 数量减方法
sub(num, index) {
if (parseInt(num) <= 1) {
this.cartData[index].buyCount = 1;
} else {
this.cartData[index].buyCount = parseInt(this.cartData[index].buyCount) - 1;
}
},
// 求总价
useredit(e) {
this.ys1 = !this.ys1;
if (this.ys1 == false) {
this.$nextTick(() => {
this.userdelete = '删除';
});
} else if (this.ys1 == true) {
this.$nextTick(() => {
this.userdelete = '结算';
console.log(this.userdelete);
});
}
if (this.userdelete == '删除') {
}
},
usejiesuan() {
// let procode = [];
// let list = [];
// let menulist = [];
// this.cartData.filter((item) => {
// if (item.checked) {
// list.push(item);
// console.log(item);
// procode.push(item.productCode);
// } else {
// list.splice(index, 1);
// }
// });
// let list = [];
// list = this.cartData.filter((item) => item.checked);
// list.forEach((item) => {
// menulist.push({
// productName: item.productName,
// buyCount: item.buyCount,
// productId: item.productCode,
// payAmount: item.productPrice,
// memberId: item.memberId,
// phoneNumber: item.mobile,
// });
// });
let list = [];
list = this.cartData.filter(item => item.checked);
if (list.length == 0) {
this.$message({
type: 'warning',
message: '你还未选择商品'
});
return;
} else {
if (this.editState == '完成') {
let delList = [];
list.forEach(item => {
delList.push(item.productCode);
});
this.userdele(delList);
} else {
this.$router.push({
path: '/personal/settlement',
query: {
list: JSON.stringify(list)
}
// params: { test:'222'},
});
}
}
// list=[
// {
// "productName":"幼猫全价粮",
// "buyCount":"2",
// "productId":"210352",
// "payAmount":"517",
// "memberId":"844350",
// "phoneNumber":"18112621098"
// },
// {
// "productName":"幼猫全价粮",
// "buyCount":"2",
// "productId":"210352",
// "payAmount":"517",
// "memberId":"844350",
// "phoneNumber":"18112621098"
// }
// ]
// instance
// .post(`generateOrderWX`, list, configs)
// .then((res) => {
// console.log(res);
// });
}
// async userdelete(item) {
// let data = await isexistCart( this.userid,);
// },
},
computed: {
checkAll: {
// 设置值,当点击全选按钮的时候触发
set(v) {
this.cartData.forEach(item => {
item.checked = v;
});
},
// 取值,当列表中的选择改变之后触发
get() {
return this.cartData.length === this.cartData.filter(item => item.checked == true).length;
}
},
// 总价计算
sumPrice() {
return this.cartData
.filter(item => item.checked)
.reduce((pre, cur) => {
console.log(pre);
return pre + cur.buyCount * cur.productPrice;
}, 0);
},
sumlength() {
return this.cartData.filter(item => item.checked == true).length;
},
...mapState({
userInfo : state => state.user.userInfo,
loginState : state => state.login.loginState,
})
}
};
</script>
<style lang="less" scoped>
.rc-footer {
display: none;
}
.rc-footera {
background: #f6f6f6;
border: 1px solid #d7d7d7;
margin-bottom: 40px;
.rc-foote {
margin: 0 auto;
box-shadow: 0px -3px 6px rgba(0, 0, 0, 0.1);
height: 102px;
display: flex;
justify-content: space-between;
}
.rc-shop {
display: flex;
align-items: center;
margin-left: 24px;
img {
width: 24px;
height: 24px;
display: block;
}
span {
font-style: normal;
font-size: 18px;
color: #333333;
margin-left: 16px;
display: block;
}
}
.rc-delete {
display: flex;
align-items: center;
margin-right: 32px;
.rc-num {
display: flex;
align-items: center;
.rc-usernum {
display: flex;
flex-direction: column;
align-items: center;
margin-right: 25px;
.rc-usea {
display: flex;
align-items: center;
}
}
}
i {
font-size: 18px;
font-style: normal;
color: #333333;
margin-right: 8px;
display: block;
}
span {
font-size: 20px;
color: #e1001a;
}
em {
font-style: normal;
margin-top: 8px;
color: #333333;
font-size: 16px;
}
strong {
cursor: pointer;
width: 164px;
height: 48px;
background: #e2001a;
border-radius: 30px;
display: flex;
justify-content: center;
align-items: center;
font-size: 16px;
margin-right: 40px;
color: #ffffff;
}
}
}
.rc-main {
.cart-list {
width: 100%;
border: 1px solid #d7d7d7;
font-size: 16px;
color: #666666;
p {
margin: 0;
}
.header {
background: #f6f6f6;
border-radius: 3px 3px 0px 0px;
border-bottom: 1px solid #d7d7d7;
height: 64px;
display: flex;
justify-content: space-between;
}
.header_ph {
display: none;
}
.check-label {
display: block;
margin-left: 24px;
}
.name {
display: block;
margin-left: 56px;
}
.list-left {
display: flex;
align-items: center;
width: 50%;
}
ul {
display: flex;
width: 50%;
justify-content: space-around;
align-items: center;
}
.list {
display: flex;
justify-content: space-between;
border-bottom: 1px solid #d7d7d7;
padding: 15px 0;
.del {
em {
font-style: normal;
}
}
.product-price {
color: #e1001a;
font-weight: bold;
font-size: 20px;
width: 60px;
}
.del {
em {
color: #e1001a;
border-bottom: 1px solid #e1001a;
cursor: pointer;
}
}
.product {
display: flex;
justify-content: space-between;
margin-left: 56px;
.product-title {
color: #e1001a;
font-weight: bold;
font-size: 18px;
}
.product-img {
margin-right: 15px;
width: 96px;
height: 96px;
img {
width: 100%;
height: 100%;
}
}
}
.rc-jia {
display: flex;
align-items: center;
img,
input {
width: 30px;
height: 30px;
text-align: center;
margin: 0 5px;
}
input {
border: 1px solid #d7d7d7;
}
}
}
}
.rc-select {
border-bottom: 1px solid #d8d8d8;
height: 56px;
width: 100%;
display: flex;
display: none;
justify-content: space-between;
.select-left {
display: flex;
align-items: center;
img {
width: 24px;
height: 24px;
display: block;
}
span {
font-size: 14px;
color: #333333;
display: block;
margin-left: 8px;
}
}
.select-right {
display: flex;
align-items: center;
img {
width: 16px;
height: 16px;
display: block;
margin-right: 8px;
}
span {
font-size: 14px;
color: #333333;
}
}
}
.rc-userdemand {
width: 100%;
height: 180px;
border-bottom: 1px solid #d8d8d8;
display: flex;
.rc-userdeman {
display: flex;
align-items: center;
img {
width: 24px;
height: 24px;
display: block;
margin-left: 24px;
}
.re-message {
width: 96px;
height: 96px;
display: block;
border: 1px solid #d8d8d8;
margin-left: 56px;
}
}
.rc-userdem {
display: flex;
width: 100%;
margin-left: 8px;
span {
font-size: 18px;
color: #e1001a;
display: block;
font-weight: bold;
}
em {
font-style: normal;
font-size: 16px;
display: block;
margin-top: 8px;
color: #666666;
}
.rc-userdema {
display: flex;
flex-direction: column;
justify-content: center;
width: 10%;
}
.rc-userd {
display: flex;
align-items: center;
width: 87%;
justify-content: space-around;
.rc-jia {
display: flex;
align-items: center;
}
i {
font-size: 20px;
font-style: normal;
color: #e1001a;
}
img {
width: 23px;
height: 23px;
display: block;
margin-right: 5px;
}
img:last-child {
width: 23px;
height: 23px;
display: block;
margin-left: 10px;
}
em {
font-style: normal;
font-size: 20px;
cursor: pointer;
border-bottom: 1px solid #e2001a;
display: block;
margin-left: 40px;
color: #e1001a;
}
strong {
font-style: normal;
display: flex;
justify-content: center;
list-style: none;
align-items: center;
width: 24px;
color: #666666;
height: 24px;
border: 1px solid #d7d7d7;
font-size: 12px;
border-radius: 3px;
}
}
}
}
}
//手机端
@media screen and (max-width: 768px) {
.rc-main {
padding: 0;
width: 100%;
.cart-list {
border: none;
margin-bottom: 130px;
.header {
display: none;
}
.header_ph {
display: block;
border-bottom: 2px solid #d8d8d8;
padding: 20px 10px 20px 0;
border-top: 5px solid #f6f6f6;
}
.check-label {
margin-left: 10px;
}
.name {
margin-left: 16px;
}
.list {
display: block;
.product {
margin-left: 16px;
}
.list-left {
width: 100%;
}
ul {
margin-top: -2rem;
margin-left: 9.75rem;
width: 50%;
.del {
display: none;
}
}
.product-title {
width: 225px;
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
}
}
}
.rc-footera {
position: fixed;
bottom: 0;
width: 100%;
z-index: 10;
margin-bottom: 0;
.rc-shop {
display: none;
}
.rc-delete {
margin-right: 0;
width: 100%;
.rc-num {
width: 100%;
justify-content: space-between;
padding: 10px;
}
strong {
margin-right: 0;
}
}
}
.el-message-box {
width: 300px;
}
}
</style>