Merge remote-tracking branch 'origin/sit-Carl-V3' into sit-Carl-V3

This commit is contained in:
Carl 2022-01-29 02:09:52 +08:00
commit abf53cae07
72 changed files with 28354 additions and 1539 deletions

View File

@ -31,13 +31,13 @@ export const courselist = (offset, courseId, type, sort, selectScreen = []) => {
courseId,
selectScreenStr
}
return fetch('/api/courselist', data)
return fetch( '/api/courselist', data)
}
/**
* 获取课程详情
*/
export const getDetail = (id) => {
fetch('/api/courseDetail/index/' + id)
fetch( '/api/courseDetail/index/' + id)
}
/**
@ -56,33 +56,41 @@ export const getleckCourse = (name, offset) => {
* 加入购物车
*/
export const postCourseId = (productCode, buyCount, memberId, mobile, productImg, productName, productPrice, specifications, leftAllotment) => {
export const postCourseId = (productCode, buyCount, memberId, mobile, productImg, productName, productPrice, specifications, leftAllotment, basePiont) => {
var data = {
buyCount: buyCount,
buyCount:buyCount,
memberId: memberId,
mobile: mobile,
productCode: productCode,
mobile:mobile,
productCode:productCode,
productImg: productImg,
productName: productName,
productPrice: productPrice,
specifications: specifications,
leftAllotment: leftAllotment
leftAllotment: leftAllotment,
basePiont: basePiont
}
return fetch('/insertCartProductInfo', data, 'POST')
return fetch('/insertCartProductInfo', data,'POST')
}
/**
* 是否存在购物车
*/
export const isexistCart = (id, pet, address) => {
export const isexistCart = (id, pet,address) => {
var data = { }
return fetch('getCartProductInfo?memberId='+id,data,'POST')
}
/**
* 支付监听
*/
export const monitorOrderNotify = (OrderNumber) => {
var data = {}
return fetch('getCartProductInfo?memberId=' + id, data, 'POST')
return fetch('monitorOrderNotify?OrderNumber=' + OrderNumber, data, 'POST')
}
/**
* 删除购物车
*/
export const deleteCart = ( productCode) => {
debugger;
var data = {
productCode
}
@ -92,7 +100,7 @@ export const deleteCart = ( productCode) => {
* 购物车批量提交
*/
export const mostAddClass = (id) => {
return fetch('/api/mostAddClass/', { id })
return fetch('/api/mostAddClass/', {id})
}
/**
* 删除购物车
@ -108,68 +116,68 @@ export const mostAddClass = (id) => {
/**
* 发送验证码
*/
export const sendMsg = (mobile, pet, address) => {
export const sendMsg = (mobile, pet,address) => {
var data = {
phoneNumber: mobile,
phoneNumber:mobile,
}
return fetch('sendMsg', data, 'POST')
return fetch('sendMsg', data, 'POST' )
}
/**
* 发送验证码数据
*/
export const vadatnmsg = (msgNum, hash, tamp) => {
export const vadatnmsg = (msgNum,hash,tamp) => {
var data = {
msgNum: msgNum,
tamp: tamp,
hash: hash
msgNum:msgNum,
tamp:tamp,
hash:hash
}
return fetch('validateNum', data, 'POST')
return fetch('validateNum', data, 'POST' )
}
/**
* 筛选标签
*/
export const userstype = (stype, pet, address) => {
export const userstype = (stype, pet,address) => {
var data = {
petType: 0,
petType:0,
}
return fetch('productSearchTag/query?petType=' + 0, data, 'POST')
return fetch('productSearchTag/query?petType=' + 0, data, 'POST' )
}
/**
* 登录
*/
export const userLongin = (mobile, pet, address) => {
export const userLongin = (mobile, pet,address) => {
var data = {
id: '',
mobile: mobile,
id:'',
mobile:mobile,
}
return fetch('member?type=get', data, 'POST')
return fetch('member?type=get', data, 'POST' )
}
//注册
export const useredit = (mobile, pet, address) => {
//注册
export const useredit = (mobile, pet,address) => {
var data = {
mobile: mobile,
memberName: '',
realName: '',
gender: '',
email: '',
openId: '',
unionId: '',
birthday: '',
provinceId: '',
cityId: '',
districtId: '',
storeCode: '',
remark: '',
memberMark: '',
remark: ''
mobile:mobile,
memberName:'',
realName:'',
gender:'',
email:'',
openId:'',
unionId:'',
birthday:'',
provinceId:'',
cityId:'',
districtId:'',
storeCode:'',
remark:'',
memberMark:'',
remark:''
}
return fetch('member?type=add', data, 'POST')
return fetch('member?type=add', data, 'POST' )
}
//查询标品全部信息
//查询标品全部信息
// export const userquery = (mobile, pet,address) => {
// var data = {
// channelId:"15",
@ -179,14 +187,14 @@ export const useredit = (mobile, pet, address) => {
// return fetch('h5/brand/query', data, 'POST' )
// }
//点击商品全部信息
export const userquery = (stype,) => {
export const userquery = (stype, ) => {
console.log(stype);
var data = {
goodsName: stype
goodsName:stype
}
return fetch('goods?petType=' + stype, data, 'POST')
return fetch('goods?petType='+stype, data, 'POST' )
}
//处方信息
export const userque = (goodsName, curPage,curRow) => {
@ -199,62 +207,62 @@ export const userque = (goodsName, curPage,curRow) => {
queryTail = '?goodsName='+goodsName;
var data = {
}
return fetch('goods' + queryTail, data, 'POST')
return fetch('goods'+queryTail, data, 'POST' )
}
//标品全部信息
export const biaomessage = (stype, name, curPage, curRow) => {
if (!curPage)
curPage = 1;
if (!curRow)
curRow = 10;
let queryTail = '&page=' + curPage + '&rows=' + curRow;
if (stype.length > 1) {
let list = {};
stype.map(item => {
console.log(item);
list = item
})
var str = "?";
for (var key in list) {
str = str + key + "=" + list[key] + "&";
}
stype = str.substr(0, str.length - 1);
return fetch('product/query' + stype + queryTail, '', 'POST')
} else {
return fetch('product/query?petType=' + stype + queryTail, '', 'POST')
}
export const biaomessage = (stype,name,curPage,curRow) => {
if(!curPage)
curPage=1;
if(!curRow)
curRow=10;
let queryTail='&page='+curPage+'&rows='+curRow;
if(stype.length>1){
let list={};
stype.map(item=>{
console.log(item);
list=item
})
var str = "?";
for(var key in list){
str = str + key + "=" + list[key] + "&";
}
stype = str.substr(0,str.length-1);
return fetch('product/query'+stype+queryTail, '', 'POST' )
}else{
return fetch('product/query?petType='+stype+queryTail, '', 'POST' )
}
}
export const searchchanpin = (stype, usertype, curPage, curRow) => {
export const searchchanpin = (stype,usertype,curPage,curRow) => {
console.log(stype, usertype);
if (!curPage)
curPage = 1;
if (!curRow)
curRow = 10;
let queryTail = '&page=' + curPage + '&rows=' + curRow;
console.log(stype,usertype);
if(!curPage)
curPage=1;
if(!curRow)
curRow=10;
let queryTail='&page='+curPage+'&rows='+curRow;
console.log(stype);
let list = {};
stype.map(item => {
let list={};
stype.map(item=>{
console.log(item);
list = item
})
list=item
})
var str = "&";
for (var key in list) {
for(var key in list){
str = str + key + "=" + list[key] + "&";
}
str = str.substr(0, str.length - 1);
str = str + key + "=" + list[key] + "&";
}
str = str.substr(0,str.length-1);
var data = {
page: 1,
row: 10
page:1,
row:10
}
return fetch('product/query?petType=' + usertype + str + queryTail, data, 'POST')
return fetch('product/query?petType='+usertype+str+queryTail, data, 'POST' )
}
@ -269,58 +277,58 @@ export const searchchanpin = (stype, usertype, curPage, curRow) => {
//查询订单
export const userindent = (phoneNumber, orderNumber,) => {
var data = {
phoneNumber: phoneNumber,
orderNumber: orderNumber,
export const userindent = (phoneNumber,orderNumber,) => {
var data = {
phoneNumber:phoneNumber,
orderNumber:orderNumber,
}
return fetch('orderMaster/?type=query', data, 'POST')
return fetch('orderMaster/?type=query', data, 'POST' )
}
//查询订单详情
export const userin = (orderNumber,) => {
var data = {
orderNumber: orderNumber,
var data = {
orderNumber:orderNumber,
}
return fetch('orderMaster/?type=query', data, 'POST')
return fetch('orderMaster/?type=query', data, 'POST' )
}
//取消订单
export const canceldanhao = (phoneNumber, orderNumber) => {
export const canceldanhao = (phoneNumber,orderNumber) => {
var data = {
phoneNumber: phoneNumber,
orderNumber: orderNumber,
phoneNumber:phoneNumber,
orderNumber:orderNumber,
}
return fetch('cancelOrder/', data, 'POST')
return fetch('cancelOrder/', data, 'POST' )
}
export const biaomessa = (stype) => {
console.log(stype);
var data = {
name: stype,
page: 1,
row: 10
name:stype,
page:1,
row:10
}
return fetch('product/query', data, 'POST')
return fetch('product/query', data, 'POST' )
}
export const biaome = (usertype, stype, curPage, rows) => {
if (!curPage)
curPage = 1;
if (!rows)
rows = 10;
let queryTail = '&page=' + curPage + '&rows=' + rows;
let username = '&name=' + stype
export const biaome = (usertype,stype,curPage,rows) => {
if(!curPage)
curPage=1;
if(!rows)
rows=10;
let queryTail='&page='+curPage+'&rows='+rows;
let username='&name='+stype
console.log(stype);
var data = {
name: stype,
rows: 10,
page: 1,
name:stype,
rows:10,
page:1,
}
return fetch('product/query?petType=' + usertype + username + queryTail, data, 'POST')
return fetch('product/query?petType='+usertype+username+queryTail,data, 'POST' )
}
@ -329,9 +337,9 @@ export const biaome = (usertype, stype, curPage, rows) => {
export const memberAccount = (stype) => {
console.log(stype);
var data = {
memberId: stype
memberId:stype
}
return fetch('memberAccount?type=history', data, 'POST')
return fetch('memberAccount?type=history', data, 'POST' )
}
@ -339,20 +347,20 @@ export const memberAccount = (stype) => {
export const ordermaster = (stype) => {
console.log(stype);
var data = {
memberId: '223782'
memberId:'223782'
}
return fetch('memberAccount', data, 'POST')
return fetch('memberAccount', data, 'POST' )
}
//微信支付
export const payOrderWX = (stype) => {
console.log(stype);
var data = {
memberId: '223782'
memberId:'223782'
}
return fetch('memberAccount', data, 'POST')
return fetch('memberAccount', data, 'POST' )
}
@ -361,9 +369,9 @@ export const payOrderWX = (stype) => {
export const insercar = (stype) => {
console.log(stype);
var data = {
petType: stype
petType:stype
}
return fetch('product/insertCartProductInfo', data, 'POST')
return fetch('product/insertCartProductInfo', data, 'POST' )
}
@ -371,25 +379,25 @@ export const insercar = (stype) => {
//查询猫狗商品信息
export const catquery = (productCode, type) => {
export const catquery = (productCode,type) => {
console.log(productCode);
var data = {
petType: 0
petType:0
}
return fetch('h5/product/query', data, 'POST')
return fetch('h5/product/query', data, 'POST' )
}
//查询猫狗商品信息
export const dogquery = (productCode, type) => {
export const dogquery = (productCode,type) => {
console.log(productCode);
var data = {
petType: 1,
pet_type: 0
petType:1,
pet_type:0
}
return fetch('h5/product/query', data, 'POST')
return fetch('h5/product/query', data, 'POST' )
}
@ -400,11 +408,11 @@ export const dogquery = (productCode, type) => {
export const oncequery = (productCode) => {
var data = {
productCode: productCode
productCode:productCode
}
return fetch("goodsByProductCode?productCode=" + productCode, data, 'POST')
return fetch( "goodsByProductCode?productCode="+productCode, data, 'POST' )
}
@ -412,156 +420,162 @@ export const oncequery = (productCode) => {
export const goodsmessage = (productCode) => {
var data = {
productCode: productCode
productCode:productCode
}
return fetch("productMaster/query?productCode=" + productCode, data, 'POST')
return fetch( "productMaster/query?productCode="+productCode, data, 'POST' )
}
//优惠券的插入
export const inserdiscount = (mobile, couponId) => {
var data = {
mobile: mobile,
couponId: couponId
//优惠券的插入
export const inserdiscount = (mobile,couponId) => {
var data = {
mobile:mobile,
couponId:couponId
}
return fetch('coupon?type=fetch', data, 'POST' )
}
return fetch('coupon?type=fetch', data, 'POST')
}
//优惠券的查询
export const getdiscount = (memberId, channelSecurity, mobile) => {
var data = {
memberId: memberId,
mobile: mobile
//优惠券的查询
export const getdiscount = (memberId,channelSecurity,mobile) => {
var data = {
memberId:memberId,
mobile:mobile
}
return fetch('memberAddress?type=getAll', data, 'POST' )
}
//可用的优惠券
export const alldiscount = (memberId,channelSecurity,mobile) => {
var data = {
memberId:memberId,
}
return fetch('couponConfig?type=getAll', data, 'POST' )
}
//用户领取的优惠券
export const getdraw = (mobile,states) => {
var data = {
mobile:mobile,
status:states
}
return fetch('coupon?type=getAll', data, 'POST' )
}
//微信支付
export const generateOrderWX = (list) => {
var data = [{
}]
return fetch('generateOrderWX', list, 'POST' )
}
return fetch('memberAddress?type=getAll', data, 'POST')
}
//可用的优惠券
export const alldiscount = (memberId, channelSecurity, mobile) => {
var data = {
memberId: memberId,
//再次支付
export const repayOrde = (ordernumber) => {
console.log(ordernumber);
return fetch('repayOrderWX?orderNo='+ordernumber,'', 'POST' )
}
//用户所有的优惠券
export const allConfig = (memberId,channelSecurity,mobile) => {
var data = {
}
return fetch('couponConfig?type=getAll', data, 'POST' )
}
//用户领取优惠券
export const getConfig = (memberId,couponId) => {
var data = {
memberId:memberId,
couponId:couponId,
}
return fetch('coupon?type=fetch', data, 'POST' )
}
//用户下的优惠券
export const userConfig = (memberId,couponId) => {
var data = {
memberId:memberId,
couponId:couponId,
}
return fetch('coupon?type=fetch', data, 'POST' )
}
//用户订单的查询
// export const customerorders = (memberId,channelSecurity,mobile) => {
// var data = {
// productName:'幼猫全价粮',
// buyCount:'2',
// productId:'210352',
// payAmount:'517',
// memberId:'844350',
// phoneNumber:'18112621098',
// }
// return fetch('generateOrderWX', data, 'POST' )
// }
//地址的查询
export const selectaddress = (memberId, pet,address) => {
var data = {
memberId:memberId,
}
return fetch('memberAddress?type=getAll', data, 'POST' )
}
return fetch('couponConfig?type=getAll', data, 'POST')
}
//用户领取的优惠券
export const getdraw = (mobile, states) => {
var data = {
mobile: mobile,
status: states
//地址的添加 //id/详细地址/ 收货人姓名/收货人电话号码/省份id/城市id/区域编码
export const editaddress = (memberId, detailAddress,recipient,tel,provinceId,cityId,districtId) => {
var data = {
memberId:844350,
provinceId:25,
cityId:36,
districtId:418,
detailAddress:'古美路1455弄46号302',
recipient:'蒋缘缘2',
recipientPhone:'13671516167',
zipCode:'214423',
default:false,
}
return fetch('memberAddress?type=add', memberId, 'POST' )
}
return fetch('coupon?type=getAll', data, 'POST')
}
//删除
export const editdelete = (memberId,ids) => {
var data = {
memberId:memberId,
ids:ids,
}
return fetch('memberAddress?type=delete', data, 'POST' )
}
//微信支付
export const generateOrderWX = (list) => {
var data = [{
}]
return fetch('generateOrderWX', list, 'POST')
}
//用户所有的优惠券
export const allConfig = (memberId, channelSecurity, mobile) => {
var data = {
}
return fetch('couponConfig?type=getAll', data, 'POST')
}
//用户领取优惠券
export const getConfig = (memberId, couponId) => {
var data = {
memberId: memberId,
couponId: couponId,
}
return fetch('coupon?type=fetch', data, 'POST')
}
//用户下的优惠券
export const userConfig = (memberId, couponId) => {
var data = {
memberId: memberId,
couponId: couponId,
}
return fetch('coupon?type=fetch', data, 'POST')
}
//用户订单的查询
// export const customerorders = (memberId,channelSecurity,mobile) => {
// var data = {
// productName:'幼猫全价粮',
// buyCount:'2',
// productId:'210352',
// payAmount:'517',
// memberId:'844350',
// phoneNumber:'18112621098',
// }
// return fetch('generateOrderWX', data, 'POST' )
// }
//地址的查询
export const selectaddress = (memberId, pet, address) => {
var data = {
memberId: memberId,
}
return fetch('memberAddress?type=getAll', data, 'POST')
}
//地址的添加 //id/详细地址/ 收货人姓名/收货人电话号码/省份id/城市id/区域编码
export const editaddress = (memberId, detailAddress, recipient, tel, provinceId, cityId, districtId) => {
var data = {
memberId: 844350,
provinceId: 25,
cityId: 36,
districtId: 418,
detailAddress: '古美路1455弄46号302',
recipient: '蒋缘缘2',
recipientPhone: '13671516167',
zipCode: '214423',
default: false,
}
return fetch('memberAddress?type=add', memberId, 'POST')
}
//删除
export const editdelete = (memberId, ids) => {
var data = {
memberId: memberId,
ids: ids,
}
return fetch('memberAddress?type=delete', data, 'POST')
}
//地址的编辑
export const editupdate = (userid,) => {
// var data = {
// memberId:userid,
// id:id,
// isDefault:isDefault,
// }
return fetch('memberAddress?type=update', userid, 'POST')
}
//地址的编辑
export const editupdate = (userid,) => {
// var data = {
// memberId:userid,
// id:id,
// isDefault:isDefault,
// }
return fetch('memberAddress?type=update', userid, 'POST' )
}
//修改密码
export const userchange = (id, pet, address) => {
export const userchange = (id, pet,address) => {
var data = {
id: id,
id:id,
}
return fetch('member?type=update', data, 'POST')
return fetch('member?type=update', data, 'POST' )
}
@ -615,17 +629,14 @@ export const getOrderList = (user, status) => {
//购物车操作
export const memberAddress = (type, data) => {
return fetch('memberAddress?type=' + type, data, 'POST')
}
//购物车操作
export const memberAddress = (type,data) => {
return fetch('memberAddress?type='+type, data, 'POST' )
}
//微信支付二维码
export const updateOrderWX = (data) => {
return fetch('updateOrderWX', data, 'POST')
}
//支付宝支付二维码
export const generateOrderAlipay = (data) => {
return fetch('generateOrderAlipay', data, 'POST')
}
//支付宝支付二维码
export const generateOrderAlipay = (data) => {
return fetch('generateOrderAlipay', data, 'POST' )
}

9
rc-busness/app.html Normal file
View File

@ -0,0 +1,9 @@
<!DOCTYPE html>
<html {{ HTML_ATTRS }}>
<head {{ HEAD_ATTRS }}>
{{ HEAD }}
</head>
<body {{ BODY_ATTRS }}>
{{ APP }}
</body>
</html>

View File

@ -0,0 +1,56 @@
<!doctype html>
<html class="no-js" lang="" style='font-size:16px;'>
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title></title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type="text/css">
html,body{
width:100%;
height:100%;
overflow:hidden;
}
.wrapper{
width:100%;
height:100%;
display:flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
}
h2{
font-size: 2.5rem;
line-height: 3.5rem;
color:#e2001a;
}
a{
color:#666;
text-decoration: none;
padding-bottom:.25rem;
border-bottom: 1px solid #666;
}
a:hover {
color:#e2001a;
border-color: #e2001a;
}
</style>
</head>
<body>
<div class="wrapper">
<img src="./images/default.jpg">
<div>
<h2>检测到系统错误</h2>
<div>
请联系管理员或尝试其他操作
<br/><br/>
<a href="/">回到首页</a>
</div>
</div>
</div>
</body>
</html>

View File

@ -1,119 +1,123 @@
@media screen and (max-width:768px){
.allmain{
}
.active {
font-size: 14px;
color: #E2001A;
}
.unactive {
font-size: 14px;
color: #444444;
}
.rc-usermain{
.online{
margin-top: 0;
}
.allmain{
.rc {
display: flex;
align-items: center;
margin-left: 1rem;
span {
display: block;
margin-left: 32px;
font-weight: bold;
cursor: pointer;
}
span:first-child {
margin-left: 0;
}
}
.active {
font-size: 14px;
color: #E2001A;
}
.unactive {
font-size: 14px;
color: #444444;
}
.rc-usermain{
.online{
margin-top: 0;
}
.rc {
display: flex;
align-items: center;
margin-left: 1rem;
span {
display: block;
margin-left: 32px;
font-weight: bold;
cursor: pointer;
}
span:first-child {
margin-left: 0;
}
}
}
.rc-discount {
margin-left: 20px;
.rc-discount {
margin-left: 20px;
display: flex;
margin-top: 16px;
width: 335px;
background: #ffffff;
position: relative;
img {
display: block;
width: 100%;
height: 100%;
}
.rc-contair {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 8;
}
.rc-left {
display: flex;
margin-top: 16px;
width: 335px;
background: #ffffff;
position: relative;
img {
flex-direction: column;
align-items: center;
justify-content: center;
color: #e1001a;
text-align: center;
width: 30%;
font-weight: bold;
float: left;
height: 100%;
i {
font-style: normal;
font-size: 12px;
}
span {
font-size: 26px;
}
strong {
font-style: normal;
font-size: 12px;
display: block;
width: 100%;
height: 100%;
margin-left: 10px;
}
.rc-contair {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 8;
}
.rc-left {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.rc-right {
display: flex;
flex-direction: column;
height: 100%;
i {
font-style: normal;
font-size: 14px;
color: #e1001a;
text-align: center;
width: 30%;
font-weight: bold;
float: left;
height: 100%;
i {
font-style: normal;
font-size: 12px;
}
span {
font-size: 26px;
}
strong {
font-style: normal;
font-size: 12px;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis
}
.rc-userfont {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: #999999;
font-size: 12px;
strong{
display: block;
margin-top: 8px;
}
}
.rc-right {
em {
font-style: normal;
}
.ts-stand{
display: flex;
align-items: center;
justify-content: end;
padding-right: 17px;
margin-bottom: 8px;
}
.ts-standard-btn{
width: 72px;
display: flex;
flex-direction: column;
height: 100%;
i {
font-style: normal;
font-size: 14px;
color: #e1001a;
}
.rc-userfont {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: #999999;
font-size: 12px;
strong{
display: block;
margin-top: 8px;
}
}
em {
font-style: normal;
}
.ts-stand{
display: flex;
align-items: center;
justify-content: end;
padding-right: 17px;
margin-bottom: 8px;
}
.ts-standard-btn{
width: 72px;
display: flex;
height: 25px;
background: #E2001A;
border-radius: 100px;
@ -121,164 +125,169 @@ align-items: center;
font-size: 12px;
justify-content: center;
margin-top: 8px;
float: right;
margin-right: 28px;
}
span{
margin-top: 0;
}
margin-top: 17px;
padding-left: 36px;
}
.rc-footer {
display: flex;
align-items:flex-end;
span {
width: 72px;
height: 25px;
background: #e2001a;
text-align: center;
line-height: 25px;
font-size: 12px;
color: #ffffff;
margin-bottom: 8px;
border-radius: 100px;
margin-right: 30px;
}
}
}
span{
margin-top: 0;
}
margin-top: 17px;
padding-left: 36px;
}
.rc-footer {
display: flex;
align-items:flex-end;
span {
width: 72px;
height: 25px;
background: #e2001a;
text-align: center;
line-height: 25px;
font-size: 12px;
color: #ffffff;
margin-bottom: 8px;
border-radius: 100px;
margin-right: 30px;
}
}
}
}
@media screen and (min-width: 769px){
.online{
margin-top: 30px;
margin-top: 30px;
}
.allmain{
.rs-dis{
display: flex;
flex-flow: wrap;
justify-content: center;
}
.allmain{
.rs-dis{
display: flex;
flex-flow: wrap;
justify-content: center;
}
}
.active {
font-size: 14px;
color: #E2001A;
}
.unactive {
font-size: 14px;
color: #444444;
}
.rc-usermain{
.online{
margin-top: 0;
}
.active {
font-size: 14px;
color: #E2001A;
.rc {
height: 96px;
display: flex;
align-items: center;
justify-content: center;
span {
display: block;
margin-left: 40px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
}
.unactive {
font-size: 14px;
color: #444444;
}
.rc-usermain{
.online{
margin-top: 0;
}
.rc {
height: 96px;
display: flex;
align-items: center;
justify-content: center;
span {
display: block;
margin-left: 40px;
font-size: 16px;
font-weight: bold;
cursor: pointer;
}
span:first-child {
margin-left: 0;
}
span:first-child {
margin-left: 0;
}
}
}
.rc-discount {
margin-left: 20px;
.rc-discount {
margin-left: 20px;
display: flex;
margin-top: 16px;
width: 335px;
background: #ffffff;
position: relative;
img {
display: block;
width: 100%;
height: 100%;
}
.rc-contair {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 8;
}
.rc-left {
display: flex;
margin-top: 16px;
width: 335px;
background: #ffffff;
position: relative;
img {
flex-direction: column;
align-items: center;
justify-content: center;
color: #e1001a;
text-align: center;
width: 30%;
font-weight: bold;
float: left;
height: 100%;
i {
font-style: normal;
font-size: 12px;
}
span {
font-size: 26px;
}
strong {
font-style: normal;
font-size: 12px;
display: block;
width: 100%;
height: 100%;
}
.rc-contair {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 8;
}
.rc-left {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.rc-right {
display: flex;
flex-direction: column;
height: 100%;
i {
font-style: normal;
font-size: 16px;
color: #e1001a;
text-align: center;
width: 30%;
font-weight: bold;
float: left;
height: 100%;
i {
font-style: normal;
font-size: 12px;
}
span {
font-size: 26px;
}
strong {
font-style: normal;
font-size: 12px;
display: block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis
}
.rc-userfont {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: #999999;
font-size: 12px;
strong{
display: block;
margin-top: 8px;
}
}
.rc-right {
em {
font-style: normal;
}
.ts-stand{
display: flex;
align-items: center;
justify-content: end;
padding-right: 17px;
margin-bottom: 8px;
float: right;
}
.ts-standard-btn{
width: 72px;
display: flex;
flex-direction: column;
height: 100%;
i {
font-style: normal;
font-size: 16px;
color: #e1001a;
}
.rc-userfont {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
color: #999999;
font-size: 12px;
strong{
display: block;
margin-top: 8px;
}
}
em {
font-style: normal;
}
.ts-stand{
display: flex;
align-items: center;
justify-content: end;
padding-right: 17px;
margin-bottom: 8px;
float: right;
}
.ts-standard-btn{
width: 72px;
display: flex;
height: 25px;
background: #E2001A;
border-radius: 100px;
@ -286,33 +295,35 @@ align-items: center;
font-size: 12px;
justify-content: center;
margin-top: 8px;
float: right;
margin-right: 28px;
}
span{
margin-top: 0;
}
margin-top: 17px;
padding-left: 36px;
}
.rc-footer {
display: flex;
align-items:flex-end;
span {
width: 72px;
height: 25px;
background: #e2001a;
text-align: center;
line-height: 25px;
font-size: 12px;
color: #ffffff;
margin-bottom: 8px;
border-radius: 100px;
margin-right: 30px;
}
}
}
span{
margin-top: 0;
}
margin-top: 17px;
padding-left: 36px;
}
.rc-footer {
display: flex;
align-items:flex-end;
span {
width: 72px;
height: 25px;
background: #e2001a;
text-align: center;
line-height: 25px;
font-size: 12px;
color: #ffffff;
margin-bottom: 8px;
border-radius: 100px;
margin-right: 30px;
}
}
}
}

View File

@ -4,6 +4,13 @@ body {
line-height: 1.5;
color: #666;
}
.el-message-box .el-button--primary{
background-color: #e1001a !important;
color:#fff;
border:unset;
}
.rc-menu--xs .rc-screen-reader{
left:28%;
}
@ -14,12 +21,10 @@ body {
.fade-leave-active {
opacity: 0;
}
.ts-no-data {
text-align: center;
margin: 3rem 0;
}
.ts-mask {
width: 100%;
height: 100%;
@ -31,7 +36,15 @@ body {
justify-content: center;
align-items: center;
z-index: 99;
.ts-mask-close{
position:absolute;
top:1rem;
right:1rem;
width:1rem;
height:1rem;
background: url("../image/btn-close.png") center center no-repeat;
background-size:contain;
}
.ts-mask-bg {
background-color: #000;
opacity: .6;
@ -47,16 +60,17 @@ input[type=checkbox]{
position:relative;
cursor: pointer;
border:none;
border: 1px solid #d7d7d7;
//border: 1px solid #d7d7d7;
border-radius: 3px;
width: 1.5rem;
height: 1.5rem;
width: 1rem;
height: 1rem;
-webkit-appearance:none;
&:before {
top: 0;
left: 0;
content: "";
width: 1.5rem;
height: 1.5rem;
width: 1rem;
height: 1rem;
position: absolute;
display: inline-block;
background-color: #fff;
@ -69,7 +83,7 @@ input[type=checkbox]{
}
label {
input[type=checkbox] {
top:.375rem;
// top:.375rem;
}
}
@ -135,6 +149,9 @@ picture {
margin-left: auto;
margin-right: auto;
}
.useruantity{
margin: 1rem 1.25rem;
}
.ts-remove {
text-decoration: line-through;
@ -311,18 +328,18 @@ picture {
height: auto;
position: fixed;
right: 0;
top: 30%;
top: 56vh;
background: #FFFFFF;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.16);
border-radius: .25rem;
z-index:11;
ul{
width: 60px;
height: 181px;
width: 3.75rem;
height: 11.3rem;
background-color: white;
display: flex;
flex-direction: column;
justify-content: space-between;
li {
width: 100%;
display: flex;
@ -344,7 +361,7 @@ picture {
}
span {
font-size: 0.12rem;
font-size: .75rem;
}
.tuntop {
@ -405,7 +422,7 @@ picture {
}
label {
input[type=checkbox] {
top:.25rem;
top:0rem;
}
}
.rc-header__nav--primary{
@ -513,7 +530,12 @@ picture {
max-width: 768px;
margin: 0 auto;
}
div[data-js-modal-menu] {
display:none;
}
aside div[data-js-modal-menu] {
display:block;
}
html {
font-size: 16px;
}
@ -798,7 +820,11 @@ picture {
margin: 0 auto;
.el-dialog{
width: 100%;
}
.el-dialog__body{
max-height:50vh;
overflow-x:hidden;
overflow-y:auto;
}
}
#tns2-iw {

View File

@ -20,6 +20,14 @@
}
.ts-position-identifier{
}
.ts-mobile-player-container {
video {
width:100%;
height:auto;
position: relative;
z-index:2;
}
}
.ul-zhuan,.ul-dog{
li{
@ -83,6 +91,7 @@
}
li{
margin-top:1.875rem;
margin-left:0;
}
}
.ts-banner-swiper-container{
@ -211,9 +220,29 @@
width: 100%;
height:auto;
display: block;
video{
max-width:100%;
max-height:100%;
position:relative;
z-index:0;
&:before{
content:"";
background:#000;
opacity:.6;
position:absolute;
width:100%;
height:100%;
left:0;
top:0;
z-index:1;
}
&:after{
content:"";
position:absolute;
top:0;
left:0;
width:100%;
height:100%;
background:url("../image/btn-play.png") center center no-repeat;
background-size:90px 90px;
z-index:2;
}
}
}
@ -225,19 +254,32 @@
align-items: center;
border: 1px solid #d7d7d7;
border-radius:4px;
img{
object-fit: cover;
display: block;
z-index:0;
}
.rc-click{
width: 100%;
display: flex;
flex-direction: column;
justify-content: flex-start;
align-items: center;
img{
width: 100%;
height: auto;
position:relative;
}
}
img{
width: 10rem;
height: 10rem;
object-fit: cover;
display: block;
margin-top: 2.5rem;
.click-zone{
align-items: center;
display: flex;
flex-direction: column;
img{
width: 10rem;
height: 10rem;
margin-top: 2.5rem;
}
}
span{
font-size: 1.125rem;
@ -348,13 +390,13 @@
// }
}
.active {
font-size: 0.14rem;
font-size: .875rem;
img{
border-width: 1px;
}
}
.unactive {
font-size: 0.14rem;
font-size: .875rem;
img{
border-width: 1px;
}

View File

@ -14,6 +14,7 @@
}
.usecheck label{
display:flex;
align-items: center;
input{
margin-right:.687rem;
}
@ -48,10 +49,10 @@
.usecheck{
display: flex;
text-align: left;
width: 335px;
margin: 0 auto;
align-items: center;
margin-top: 18px;
border-bottom: 1px solid #d7d7d7;
}
.container {
@ -106,6 +107,20 @@
border: none;
outline: none;
}
.rc-one-column {
font-size: 12px;
strong{
font-size: 12px;
margin-left: 6px;
font-weight: bold;
}
i{
font-style: normal;
color: #E1001A;
font-weight: bold;
}
}
.rc-center {
font-size: 30px;
color: #333333;
@ -142,14 +157,50 @@
}
// /* 最小768px最大1920 *pc端/
@media screen and (min-width: 769px) {
.rc-one-column{
display: flex;
align-items: center;
flex-direction: column;
.rc-one-column {
font-size: 12px;
.rc-text--left{
strong{
font-size: 12px;
margin-left: 6px;
font-weight: bold;
}
}
i{
font-style: normal;
color: #E1001A;
font-weight: bold;
}
}
}
.usecheck{
display: flex;
text-align: left;
width: 395px;
margin: 0 auto;
align-items: center;
margin-top: 18px;
border-bottom: 1px solid #d7d7d7
}
.usecheck label{
display: flex;
align-items: center;
i{
font-style: normal;
color: #E1001A;
font-weight: bold;
}
}
.rc-one-column strong{
font-size: 12px;
margin-left: 6px;
font-weight: bold;
}
/deep/
.van-field-one{

View File

@ -253,6 +253,9 @@ ul li ol li em strong i {
width: 440px;
height: 652px;
}
.ts-crumbs {
padding-left:.25rem;
}
.ts-mypersonal{
margin-left:0;
.rc-column{
@ -433,7 +436,7 @@ ul li ol li em strong i {
text-align: center;
li{
float: left;
cursor:pointer;
}
img{
width: 96px;
@ -464,6 +467,7 @@ ul li ol li em strong i {
margin: 0 auto;
}
.rc-buy{
cursor: pointer;
img{
width: 96px;
height: 96px;

View File

@ -16,6 +16,9 @@
background:#f6f6f6;
}
}
.usercontshow.rc-max-width--xl{
min-height:72vh;
}
.useredit{
display: none;
}
@ -44,12 +47,12 @@ justify-content: center;
align-items: center;
font-size: 16px;
color: #FFFFFF;
margin:0 auto;
}
.rc-max-width--xl{
padding: 0px 20px 24px 20px;
min-height: 60vh;
padding: 0px 20px 0px 20px;
.rc-cat{
margin-top: 20px;
}
@ -121,12 +124,17 @@ color: #FFFFFF;
{
.rc-max-width--xl{
margin-bottom: 80px;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between
}
.usercontshow{
min-height: 20vh;
margin-bottom: 2rem;
padding-left:.5rem;
padding-right:.5rem;
}
.rc-button{
display: none;
@ -134,8 +142,8 @@ display: none;
.usercontend {
display:inline-block;
width: 48%;
margin-top: 40px;
padding: 24px 20px;
//margin-bottom: 40px;
//padding: 24px 20px;
}
.online{
@ -230,7 +238,7 @@ display: none;
-webkit-line-clamp: 2;
line-clamp: 2;
-webkit-box-orient: vertical;
font-size: 20px;
font-size: .875rem;
color: #333333;
}
@ -253,19 +261,13 @@ display: none;
}
.userdit{
width: 45%;
width: 48%;
height: 164px;
display: inline-block;
height: 164px;
border: 1px solid #D7D7D7;
border-radius: 3px;
margin-top: 65px;
box-sizing: border-box;
border: 1px solid #D7D7D7;
border-radius: 3px;
position: relative;
height: 164px;
box-sizing: border-box;
margin-left: 20px;
}

View File

@ -107,7 +107,7 @@
width: 96px;
height: 96px;
display: block;
object-fit:contain;
}
}
@ -279,7 +279,7 @@
align-items: center;
height: 164px;
.rc-usercenter{
width: 25%;
width: 27%;
em{
font-size: 18px;
}
@ -288,12 +288,12 @@
border: 1px solid #D8D8D8;
margin-left: 40px;
img {
width: 96px;
height: 96px;
display: block;
}
img {
width: 96px;
height: 96px;
display: block;
object-fit: contain;
}
}
.rc-right {
@ -329,7 +329,7 @@
display: flex;
justify-content: space-between;
align-items: center;
width: 58%;
width: 56%;
font-size: 20px;
color: #E1001A;
font-weight: bold;

View File

@ -451,7 +451,6 @@
}
span {
font-size: 45px;
font-weight: bold;
}
strong {
font-style: normal;

View File

@ -22019,9 +22019,6 @@ li:last-child .edge .rc-tab--view-control:focus,li:last-child
}
@media (max-width: 1024px) {
.rc-xl-up,.xl-up {
display: none !important;
}
.rc-flex-direction--reverse--xl-down {
-webkit-box-orient: vertical;

View File

@ -12,7 +12,6 @@ ul li ol li em strong i {
}
.rc-main {
position: relative;
margin-top: 5.25rem;
.active{
border: 2px solid #E2001A;
@ -33,7 +32,6 @@ ul li ol li em strong i {
width: 100%;
margin: 0 auto;
overflow: hidden;
margin-top: 20px;
.ts-scrollable-container{
h2{
font-weight: bold;
@ -291,7 +289,7 @@ border-radius: 100px;
.rc-bottom{
position: fixed;
background: white;
height: 617px;
height: 21.875rem;
bottom: 0;
left: 0;
z-index: 9;
@ -343,6 +341,7 @@ border-radius: 100px;
font-size: 18px;
color: #333333;
font-weight: bold;
margin-top:1rem;
}
.ts-scrollable{
margin-top: 1rem;
@ -382,9 +381,9 @@ border-radius: 100px;
@media screen and (min-width: 768px){
.usersearch {
width: 100%;
margin: 0 auto;
margin-left:auto;
margin-right:auto;
overflow: hidden;
margin-top: 40px;
.ts-scrollable-container{
h2{
font-weight: bold;
@ -441,7 +440,6 @@ cursor: pointer;
}
.rc-main {
margin-top: 7.25rem;
}
.ts-scrollable-container{

View File

@ -236,6 +236,7 @@ color: #333333;
font-style: normal;
display: flex;
justify-content: space-between;
align-items: baseline;
span {
font-size: 14px;
@ -251,6 +252,10 @@ color: #333333;
}
}
}
.ts-right-arr {
line-height:1rem;
height:1.5rem;
}
}

View File

@ -152,10 +152,11 @@ ul li ol li em strong i {
}
.rc-value{
display: flex;
justify-content: space-between;
}
.rc-value{
display: flex;
justify-content: space-between;
cursor: pointer;
}
}
.usermember{

View File

@ -2,8 +2,110 @@ ul li ol li em strong i {
list-style: none;
font-style: normal;
}
.rc-main{
margin: 0;
padding: 0;
}
//手机端
@media screen and (max-width: 768px) {
.online{
margin: 0;
&.bold{
height: 0.5rem;
}
}
// 订单状态
.rc-receiving {
width: 100%;
display: flex;
align-items: center;
// margin: 1rem 1.25rem;
em {
font-style: normal;
color: #e1001a;
font-size: 1.375rem;
font-weight: bold;
}
span {
color: #666666;
font-size: 0.875rem;
display: block;
margin-left: 1.125rem;
width: 62%;
margin-top: 0.5rem;
}
}
//快递列表
.delivery {
display: flex;
flex-direction: column;
margin: 1rem 1.25rem;
.to-delivery {
img{
width: 1rem;
height: 1rem;
object-fit: contain;
}
display: flex;
align-items: center;
font-style: normal;
span {
display: block;
margin-left: 0.18rem;
color: #333333;
font-size: 1rem;
font-weight: 500;
}
i {
font-style: normal;
margin-left: 0.5rem;
display: block;
color: #999999;
font-size: 0.75rem;
margin-top: 0.31rem;
}
}
.bo-delivery {
span {
font-size: 0.87rem;
color: #666666;
display: block;
margin-top: 0.5rem;
}
}
}
//地址列表
.mypersonal{
.my-delivery {
display: flex;
align-items: center;
font-style: normal;
span {
display: block;
font-size: 0.87rem;
color: #333333;
}
i {
font-style: normal;
display: block;
font-size: 0.87rem;
color: #333333;
margin-left: .5rem;
}
}
.per-delivery {
span {
font-size:0.875rem;
color: #666666;
display: block;
margin-top: 0.43rem;
}
}
}
.rc-margin-y--md{
width: 100%;
height: 80px;
@ -39,83 +141,7 @@ margin-right: 20px;
.rc-foo{
display: none;
}
.rc-receiving {
width: 100%;
height: 80px;
display: flex;
align-items: center;
em {
font-style: normal;
color: #e1001a;
font-size: 22px;
font-weight: bold;
}
span {
color: #666666;
font-size: 12px;
display: block;
margin-left: 18px;
width: 62%;
}
}
.delivery {
display: flex;
flex-direction: column;
height: 80px;
.to-delivery {
display: flex;
align-items: center;
font-style: normal;
span {
display: block;
margin-left: 3px;
}
i {
font-style: normal;
margin-left: 8px;
display: block;
}
}
.bo-delivery {
span {
font-size: 14px;
color: #666666;
display: block;
margin-top: 8px;
}
}
}
.mypersonal {
display: flex;
flex-direction: column;
height: 80px;
.my-delivery {
display: flex;
align-items: center;
font-style: normal;
span {
display: block;
margin-left: 3px;
}
i {
font-style: normal;
margin-left: 8px;
display: block;
}
}
.per-delivery {
span {
font-size: 14px;
color: #666666;
display: block;
margin-top: 8px;
}
}
}
.rc-usermain {
display: flex;
@ -127,6 +153,7 @@ margin-right: 20px;
width: 96px;
height: 96px;
display: block;
object-fit: contain;
}
}
@ -206,14 +233,16 @@ margin-right: 20px;
.rc-merchandise {
width: 100%;
margin-top: 32px;
margin-top: 24px;
padding-right: 0.7rem;
padding-left: 0.7rem;
ul {
width: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
line-height: 26px;
line-height: 30px;
i {
font-style: normal;
color: #666666;
@ -239,10 +268,15 @@ margin-right: 20px;
}
}
}
.useruantity{
padding-right: 20px;
}
}
.rc-payment{
padding-right: 0.7rem;
padding-left: 0.7rem;
width: 100%;
margin-top: 32px;
.u-trackingnumber{
@ -292,7 +326,49 @@ margin-right: 20px;
//pc端
@media screen and (min-width: 768px) and (max-width: 1920px) {
@media screen and (min-width: 768px){
//快递列表
.delivery {
display: flex;
flex-direction: column;
margin: 1rem 1.25rem;
.to-delivery {
margin-top: 20px;
img{
width: 24px;
height: 24px;
object-fit: contain;
}
display: flex;
align-items: center;
font-style: normal;
span {
display: block;
margin-left: 16px;
color: #333333;
font-size: 18px;
font-weight: 500;
}
i {
font-style: normal;
margin-left: 0.5rem;
display: block;
color: #999999;
font-size: 0.75rem;
margin-top: 0.31rem;
}
}
.bo-delivery {
margin-top: 16px;
span {
font-size: 0.87rem;
color: #666666;
display: block;
margin-top: 16px;
}
}
}
.rc-margin-y--md{
display: none;
}
@ -328,7 +404,6 @@ margin-right: 20px;
.delivery {
display: flex;
flex-direction: column;
height: 140px;
display: flex;
justify-content: center;
.viewdetails{
@ -416,6 +491,7 @@ margin-right: 20px;
img {
width: 96px;
height: 96px;
object-fit: contain;
display: block;
}
}
@ -442,7 +518,7 @@ margin-right: 20px;
width: 100%;
margin-left: 16px;
justify-content: end;
}
.rc-userright {

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

View File

@ -459,11 +459,11 @@ export default {
font-size: 16px;
margin-left: 2px;
width:100%;
padding-bottom:.25rem;
padding-bottom:.5rem;
background:url("../assets/image/ico-location.png") no-repeat 98% center;
background-size:16px;
position:relative;
top:.5rem;
top:.45rem;
padding-left:.875rem;
}
.ts-area-picker-mobile{

View File

@ -14,6 +14,7 @@
</template>
<script>
import { mapMutations } from "vuex";
export default {
data(){
return{
@ -39,6 +40,7 @@ export default {
}
},
methods:{
...mapMutations(["checkIsLogin"]),
lianxi(item,index){
if(item.title=='在线客服'){
var option = {
@ -85,10 +87,14 @@ export default {
this.gotop = false
}
}
},
created(){
},
mounted(){
//Check login
let usernot=JSON.parse(localStorage.getItem("userInfo"));
this.checkIsLogin();
let usernot = this.$store.state.userInfo;
//console.log(usernot);
if(usernot==null ||usernot==undefined){
this.loginornot=true

View File

@ -56,6 +56,8 @@
</span>
</button>
-->
<button data-js-trigger="search-bar" @click='searchturn' evt-name='页内弹窗' evt-cat='headerBtnClick' evt-val='全文搜索' class="rc-btn rc-btn--icon rc-icon rc-search--xs rc-iconography rc-interactive" aria-label="Search" role="menuitem" data-click-modifier=".rc-hidden">
<span class="rc-screen-reader-text">translations.feature.headerbar.search</span>
</button>
@ -304,7 +306,7 @@
<div class="rc-column rc-padding-x--none">
<ul class="rc-list rc-list--blank rc-list--align rc-btn-offset--top" role="menu">
<li class="rc-list__item">
<a class="rc-list__link rc-icon ts-login--xs rc-iconography--xs" role="menuitem" href="javascript:void();" @click="turnlogin">
<a class="rc-list__link rc-icon ts-login--xs rc-iconography--xs" role="menuitem" @click="turnlogin">
个人中心
<em class="rc-screen-reader" v-if="loginornot"></em>
</a>

View File

@ -1,9 +1,9 @@
<template>
<div class="crumbs" v-if="showTab">
<div class="ts-crumbs rc-max-width--xl rc-padding-y--md" v-if="showTab" :style="crumbStyle">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item to="/" >{{ this.homepageName }}</el-breadcrumb-item>
<el-breadcrumb-item :to=item.path v-for="(item, index) in crumbs"
<el-breadcrumb-item :to=item.path v-for="(item, index) in displayData"
:key="index">{{ item.title }}</el-breadcrumb-item>
</el-breadcrumb>
</div>
@ -11,171 +11,76 @@
<script>
import { mapState, mapMutations } from "vuex";
import tabs from "~/components/tabs.vue";
export default {
props:["crumbs"],
props:["crumbs","crumbStyle"],
name:"crumbs",
data() {
return {
homepageName:'首页'
displayData:[],
homepageName:'定制营养方案',
nameMapping:{
'/productdetails/productlist':'产品分类',
'/usersearch/search':'产品搜索',
'/personal/mypersonal':'个人中心',
'/personal/usermember/':'会员权益',
'/personal/integral/':'积分明细',
'/personal/settlement/':'订单确认',
'/personal/useraddress/':'我的订单',
'/myorder/userrecord/':'购物车',
'/useraddress/openaddress/':'收货地址',
'/personal/discount/':'优惠券'
},
};
},
created(){
if(this.showTab != false)
this.showTab=true;
this.build();
},
watch: {
crumbs(val) {
this.crumbs = val;
this.build();
}
},
mounted() {
},
methods: {
...mapMutations(["changemessage",'selectMenu'])
//...mapMutations(["changemessage",'selectMenu']),
build() {
let _self = this;
this.displayData=[];
if(this.crumbs && this.crumbs.length>0)
{
this.crumbs.forEach(function(ele,index){
let displayObj= {path:'',title:''};
if(ele.path) {
displayObj.path = ele.path;
for(let path in _self.nameMapping) {
if(ele.path.indexOf(path)>-1) {
displayObj.path = path;
displayObj.title = _self.nameMapping[path];
}
}
}
if(ele.title) {
displayObj.title = ele.title;
}
_self.displayData.push(displayObj);
});
}
}
}
};
</script>
<style lang="less" scoped>
.crumbs{
width: 93%;
margin: 0 auto;
display: flex;
height: 40px;
align-items: center;
margin-top: 70px;
/deep/.el-breadcrumb__inner.is-link:hover {
color:#E2001A;
}
.tags-scroll-content {
position: relative;
box-sizing: border-box;
width: 100%;
height: 43px;
z-index: 0;
overflow: hidden;
// padding: 0 66px 0 21px;
}
.tabs {
user-select: none;
z-index: 20;
width: 100%;
height: 43px;
top: 60px;
height: 42px;
background: white;
.tag {
display: inline-block;
height: 43px;
// position: absolute;
padding-right: 40px;
width: 100%;
overflow-x: auto;
white-space: nowrap;
}
.tags-scroll-content > i {
height: 40px;
line-height: 40px;
background: white;
cursor: pointer;
z-index: 1;
font-size: 16px;
}
.el-icon-arrow-left {
position: absolute;
left: 0;
width: 21px;
box-shadow: 0px 1px 8px 0px rgba(70, 70, 70, 0.32);
}
.el-icon-arrow-right {
position: absolute;
right: 40px;
width: 21px;
}
.close {
position: absolute;
right: 0;
top: 0;
color: black;
background: white;
height: 40px;
padding-left: 15px;
line-height: 40px;
width: 40px;
border-left: 1px solid #f1f1f1 !important;
font-size: 16px;
cursor: pointer;
}
.el-tag--dark {
background: white;
em {
display: inline-block;
vertical-align: middle;
height: 5px;
margin-right: 7px;
width: 5px;
border-radius: 50%;
background-color: #85ef47 !important;
box-shadow: 0 0 7px #b7eb8f;
}
}
.el-tag--dark {
color: #323233 !important;
.el-icon-close {
color: black !important;
}
}
.el-tag {
.el-icon-close {
font-size: 16px;
&:hover {
color: red !important;
background: white !important;
}
display: inline-block;
}
// width: 140px;
em {
display: inline-block;
vertical-align: middle;
height: 5px;
margin-right: 7px;
width: 5px;
border-radius: 50%;
background-color: white;
}
cursor: pointer;
height: 40px;
line-height: 40px;
display: inline-block;
text-align: center;
padding: 0;
color: #969799;
font-size: 13px;
float: left;
border-radius: 0;
border: 0;
> span {
display: inline-block;
vertical-align: middle;
}
i {
display: inline-block;
vertical-align: middle;
top: 0px;
}
.el-tag__close {
right: 0px;
color: #777777;
&:hover {
color: white;
}
}
.el-xie{
list-style: none;
font-style: normal;
margin: 0 8px;
}
}
.ts-crumbs{
padding-left:1.25rem;
}
</style>

View File

@ -2,4 +2,13 @@
module.exports={
//图片路径地址
rbs:'http://47.96.75.242:10086/royalcanin/',
//成猫肝脏全价处方量
hotcat:'https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-22642828081.211.262fb910fpPRF5&id=614604022166&rn=5eba1d0b816544b39888beddbf21d03a&abbucket=19&skuId=4624275223532',
//成猫优纤易消化全价处方粮
hotcat1:"https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-22642828081.75.6070b910aVqaCe&id=614817599199&rn=7413968dc827a6cae94ffaf684c78384&abbucket=19&skuId=4798969553513",
//成猫肠道全价处方粮(适中能量)
hotcat2:'https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-22642828081.150.6070b910aVqaCe&id=620738193181&rn=7413968dc827a6cae94ffaf684c78384&abbucket=19&skuId=4938650051548',
//成猫肠道全价处方粮
hotcat3:'https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-22642828081.51.6070b910aVqaCe&id=618722103730&rn=7413968dc827a6cae94ffaf684c78384&abbucket=19&skuId=4910398135159',
}

View File

@ -0,0 +1,67 @@
<template>
<div class="wrapper">
<img src="/images/default.jpg">
<div v-if='error.statusCode==404'>
<h2>{{ error.statusCode }} 找不到指定页面</h2>
<div>
<a href="javascript:history.back()">返回上一页</a>
</div>
</div>
<div v-if='error.statusCode!=404'>
<h2>{{ error.statusCode }} 发现未知错误</h2>
<div>
<a href="/">返回首页</a>
</div>
</div>
</div>
</template>
<script>
export default {
props: ['error'],
layout: 'error',
created(){
},
method:{
backToLastPage(){
window.history.back();
},
backToHome(){
window.location.href="/";
}
}
}
</script>
<style lang="less" scoped >
html,body{
width:100%;
height:100%;
overflow:hidden;
}
.wrapper{
width:100%;
height:100%;
display:flex;
flex-direction: column;
align-items: center;
justify-content: center;
text-align: center;
}
h2{
font-size: 2.5rem;
line-height: 3.5rem;
color:#e2001a;
}
a{
color:#666;
text-decoration: none;
padding-bottom:.25rem;
border-bottom: 1px solid #666;
}
a:hover {
color:#e2001a;
border-color: #e2001a;
}
</style>

View File

@ -1,7 +1,5 @@
export default ({store, route, redirect}) => {
route.matched.forEach((item, index) => {
item.meta.title = route.meta[index].title || '';
item.meta.redirect = route.meta[index].redirect || '';//设置重定向
})
}
}

25621
rc-busness/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -75,7 +75,7 @@
<!-- <h2>明星猫粮</h2> -->
<div class="pageFullScreen" id="xxxFullScreen" v-show="catproduct" ref="mingxing">
<!-- 内容 -->
<div class="rc-full-width rc-padding-y--md" id="swiper1">
<div class="rc-full-width rc-padding-y--md" id="swiper1" :style="usermargin" >
<h2 class="rc-beta rc-text--center">{{usertitle}}</h2>
<!-- 轮播图 -->
<div class="ts-carousel-container">
@ -97,17 +97,16 @@
</div>
</div>
<div class="sw-center" >
<div class="rc-click" @click="selectproduce(item,index)">
<div class="uservideo">
<video controls="controls" :poster=item.catimage preload="none">
<source :src= item.video type="video/ogg">
</video>
<div class="rc-click">
<div class="uservideo" @click="playMobileVideo(item)">
<img :src="item.catimage">
</div>
<div class='click-zone' @click="selectproduce(item,index)">
<img :src=item.productimage alt="">
<span>{{item.title}}</span>
<p>{{item.detail}}</p>
<em>{{item.price}}</em>
</div>
<img :src=item.productimage alt="">
<span>{{item.title}}</span>
<p>{{item.detail}}</p>
<em>{{item.price}}</em>
</div>
<div class="rc-full-width rc-margin-y--md">
<i @click="selectproduce(item,index)" class="ts-standard-btn ts-standard-btn--two center">立即购买</i>
@ -331,17 +330,16 @@
</div>
</div>
<div class="sw-center" >
<div class="rc-click" @click="selectproduce(item,index)">
<div class="uservideo">
<video controls="controls" preload="none" :poster="item.catimage">
<source :src= item.video type="video/ogg">
</video>
<div class="rc-click" >
<div class="uservideo" @click="playMobileVideo(item)">
<img :src="item.catimage">
</div>
<div class='click-zone' @click="selectproduce(item,index)">
<img :src=item.productimage alt="">
<span>{{item.title}}</span>
<p>{{item.detail}}</p>
<em>{{item.price}}</em>
</div>
<img :src=item.productimage alt="">
<span>{{item.title}}</span>
<p>{{item.detail}}</p>
<em>{{item.price}}</em>
</div>
<div class="rc-full-width rc-margin-y--md">
<i @click="selectproduce(item,index)" class="ts-standard-btn ts-standard-btn--two center">立即购买</i>
@ -694,8 +692,11 @@
</a>
</div>
</div>
<div class="ts-mask ts-mobile-player-container" v-show="mobileVideoPlaying">
<div class="ts-mask-bg"></div>
<div class="ts-mask-close" @click="closeMobileVideo"></div>
<video controls="controls" ref="mobile-video-player"></video>
</div>
</div>
@ -751,14 +752,16 @@
return{
fixedHeader:false,
dataLoaded:true,
usermargin:{marginTop: '0'},
useraindex:0,
mobileVideoPlaying:false,
usertitle:'明星猫粮',
dogtitle:'明星犬粮',
processinformation:[],
catshi:[],
userindex:0,
userstype:'',
usertop:true,
onemao:false,
twomao:false,
threemao:false,
@ -1096,7 +1099,7 @@
}
},
catStarProductswiperOption: {
loop: true,
//loop: true,
slidesPerView: 'auto',
centeredSlides: true,
speed:1000,
@ -1120,7 +1123,7 @@
}
},
dogStarProductswiperOption: {
loop: true,
//loop: true,
slidesPerView: 'auto',
centeredSlides: true,
speed:1000,
@ -1177,6 +1180,19 @@
window.removeEventListener('scroll', this.scrollToTop);
},
methods:{
playMobileVideo(item){
let videoPath=item.video;
let player = this.$refs['mobile-video-player'];
let _self = this;
player.src=videoPath;
player.play();
this.mobileVideoPlaying = true;
},
closeMobileVideo(){
this.mobileVideoPlaying = false;
let player = this.$refs['mobile-video-player'];
player.pause();
},
ifAdoid(item,index){
//console.log(index);
this.userindex=index;
@ -1190,10 +1206,13 @@
var bIsCE = sUserAgent.match(/windows ce/i) == "windows ce";
var bIsWM = sUserAgent.match(/windows mobile/i) == "windows mobile";
if (!(bIsIpad || bIsIphoneOs || bIsMidp || bIsUc7 || bIsUc || bIsAndroid || bIsCE || bIsWM)) {
//console.log("")
console.log("当前是电脑打开")
this.stypechange=false;
//console.log(this.usertitle)
this.usermargin={
marginTop:'0',
}
this.usertop=false,
this.catproduct=true;
this.onemao=false;
this.twomao=false;
@ -1206,12 +1225,13 @@
}
else
{
//console.log("")
console.log("当前是手机打开")
this.showingBanners=this.banners.mobile;
this.stypechange=true;
this.onemao=true;
this.twomao=true;
this.threemao=true;
this.usertop=true,
this.fourmao=true;
this.fivemao=true;
this.dogshow=true;
@ -1447,6 +1467,7 @@
this.fixedHeader=false;
this.gotop = true
this.searchBar=false
}
else
{
@ -1454,6 +1475,14 @@
this.gotop = false;
this.searchBar=true
}
console.log(this.searchBar);
if(this.searchBar==false && this.usertop==true){
this.usermargin={marginTop: '270px'};
}else{
this.usermargin={marginTop: '0px'};
}
},
async courseId(item) {
this.dataLoaded=false;

View File

@ -1,14 +1,14 @@
<template>
<div>
<div class="rc-header">
<Myheader></Myheader>
</div>
<div class="rc-main">
<tabs></tabs>
<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">
<label class="check-label" style="visibility: hidden;">
<input type="checkbox" v-model="checkAll" />
</label>
<span class="name">商品</span>
@ -22,7 +22,7 @@
<div class="header_ph">
<el-row>
<el-col :span="12">
<div class="list-left">
<div class="list-left" style="visibility: hidden;">
<label class="check-label">
<input type="checkbox" v-model="checkAll" />
</label>
@ -76,7 +76,7 @@
<div class="rc-footera">
<div class="rc-foote">
<div class="rc-shop">
<label>
<label style="visibility: hidden;">
<input type="checkbox" v-model="checkAll" />
全选
</label>
@ -114,12 +114,21 @@
import Myheader from "~/components/header.vue";
import MyFooter from '~/components/rc-footer.vue'
import tabs from "@/components/tabs.vue";
import { mapMutations } 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,
@ -174,26 +183,26 @@ export default {
},
mounted() {
this.carmessage();
this.checkIsLogin();
},
components: {
Myheader,
tabs,
MyFooter,
MyFooter
},
methods: {
//
...mapMutations(["checkIsLogin"]),
async carmessage() {
let user = JSON.parse(localStorage.getItem("userInfo"));
let user = this.$store.state.userInfo;
this.userid = user.data.id;
let data = await isexistCart(user.data.id);
this.cartData = data;
// this.goldmedal = data;
},
async userjie(list) {
let user = JSON.parse(localStorage.getItem("userInfo"));
console.log(user);
let user = this.$store.state.userInfo;
this.userid = user.data.id;
let data = await generateOrderWX(list);
if (data) {
@ -201,7 +210,6 @@ export default {
type: "warning",
message: data.msg,
});
console.log(data);
this.$router.push({
path: "/personal/settlement",
query: {
@ -209,12 +217,11 @@ export default {
},
});
}
console.log(data);
},
//
async deletsmessage(productCode) {
let user = JSON.parse(localStorage.getItem("userInfo"));
let user = this.$store.state.userInfo;
this.userid = user.data.id;
let data = await deleteCart( productCode);
if (data) {
@ -267,6 +274,15 @@ export default {
// });
},
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;
},
@ -287,7 +303,6 @@ export default {
if (this.ys1 == false) {
this.$nextTick(() => {
this.userdelete = "删除";
console.log(this.userdelete);
});
} else if (this.ys1 == true) {
this.$nextTick(() => {
@ -504,10 +519,6 @@ export default {
}
}
.rc-main {
width: 92%;
margin: 0 auto;
padding-top: 60px;
max-width: 1400px;
.cart-list {
width: 100%;
border: 1px solid #d7d7d7;
@ -775,8 +786,8 @@ export default {
width: 100%;
}
ul {
margin-top: -32px;
margin-left: 140px;
margin-top: -2rem;
margin-left: 9.75rem;
width: 50%;
.del {
display: none;
@ -796,6 +807,7 @@ export default {
bottom: 0;
width: 100%;
z-index: 10;
margin-bottom:0;
.rc-shop {
display: none;
}

View File

@ -2,64 +2,83 @@
<div class="user-main">
<Myheader></Myheader>
<div class="rc-top"></div>
<div class="rc-main" v-for="(item,index) in goldmedal" :key="item.id" >
<div class="rc-receiving" >
<em>{{item.status=='0'?'待付款':item.status=='1'?'待收货':item.status=='2'?'已完成':item.status=='3'?'已取消':'异常订单'}}</em>
<span>{{orderstatus}}</span>
<div class="rc-main" v-for="(item, index) in goldmedal" :key="item.id">
<div class="online bold">
</div>
<div class="rc-receiving useruantity">
<em>{{
item.status == "0"
? "待付款"
: item.status == "1"
? "待收货"
: item.status == "2"
? "已完成"
: item.status == "3"
? "已取消"
: "异常订单"
}}</em>
<span>{{ orderstatus }}</span>
</div>
<div class="online bold">
</div>
<div class="delivery useruantity" v-if="isshow">
<div class="to-delivery">
<img src="../../static/images/delivery.png" alt="">
<span>{{ trackingstates }}</span>
<!-- <i>2021-1-21</i> -->
</div>
<div class="rc-border"></div>
<div v-if="isshow">
<div class="delivery" v-for="(userdata,index) in delivery" :key="index" >
<div class="to-delivery">
<span>{{ userdata.state }}</span>
<i>{{ userdata.time }}</i>
</div>
<div class="bo-delivery">
<span>{{ userdata.address }}</span>
</div>
<div class="viewdetails">
<span>查看详情</span>
<img :src="leftico" alt="" />
</div>
<div class="bo-delivery">
<!-- <span> 广州天河刘某某15124617917正在派送中</span> -->
<!-- {{ logisticsCompany }} -->
</div>
</div>
<div
class="mypersonal"
v-for="(datddress, index) in useraddress"
:key="datddress.id"
>
<div class="my-delivery">
<span>{{ datddress.recipient }}</span>
<i>{{ datddress.recipientPhone }}</i>
</div>
<div class="per-delivery">
<span>{{ datddress.provinceName }}{{datddress.cityName}}{{datddress.districtName}}{{datddress.detailAddress}}</span>
</div>
<div class="viewdetails">
<span>查看详情</span>
<img :src="leftico" alt="" />
</div>
<div >
</div>
<div class="online bold">
</div>
<div class="mypersonal useruantity">
<div class="my-delivery">
<span>{{ item.addressUserName }}</span>
<i>{{ item.addressPhoneNumber }}</i>
</div>
<div class="per-delivery">
<span
>{{ item.addressProvinceName }}{{ item.addressCityName
}}{{ item.addressCountyName }}</span
>
</div>
</div>
<div class="online bold"></div>
<div>
<div class="rc-center">
<div class="rc-usermain" v-for="(userlist,index) in item.orderDetailList" :key="index">
<div
class="rc-usermain useruantity"
v-for="(userlist, index) in item.orderDetailList"
:key="index"
>
<div class="rc-image">
<img :src="item.catimage" alt="" />
<img :src="userlist.picFile" alt="" />
</div>
<div class="rc-right">
<div class="rc-usercenter">
<em>{{ userlist.productName }}</em>
<div class="rc-userright">
<span>规格:{{ item.productId }}</span>
<span>规格:{{ userlist.specifications }}</span>
</div>
</div>
<div class="rc-userbottom">
<span>数量:{{ item.pcs }}</span>
<i>{{ item.ecPrice }}</i>
<div class="rc-bottom">
<span @click="userpay()">{{customer}}</span>
</div>
<span>数量:{{ userlist.pcs }}</span>
<i>{{ userlist.ecPrice }}</i>
<div class="rc-bottom">
<span @click="userpay()">{{ customer }}</span>
</div>
</div>
<div class="rc-bottomm">
<span @click="userpay()">{{ customer }}</span>
</div>
<div class="rc-bottomm">
<span @click="userpay()">{{customer}}</span>
</div>
<!-- <div class="rc-userbottomm">
<i>{{ item.userprice }}</i>
<span>{{ item.orderstype }}</span>
@ -67,8 +86,10 @@
</div> -->
</div>
</div>
<div class="online bold"></div>
</div>
<div class="rc-merchandise">
<div class="rc-merchandise ">
<div class="rc-merchandise ">
<ul>
<li>
<span>商品总价:</span>
@ -88,8 +109,10 @@
</li>
</ul>
</div>
</div>
<div class="rc-payment">
<div class="rc-payment">
<div class="rc-payment">
<ul>
<li>
<span>订单编号::</span>
@ -97,7 +120,7 @@
</li>
<li>
<span>下单时间::</span>
<i>{{ item.orderDate }}</i>
<i>{{ logisticsDate }}</i>
</li>
<li>
<span>付款方式::</span>
@ -110,262 +133,259 @@
<li>
<span>快递单号:</span>
<div class="u-trackingnumber">
<i>{{ logisticsNumber }}
</i>
<!-- <img :src="information.catimage" alt=""> -->
</div>
<i>{{ logisticsNumber }} </i>
<!-- <img :src="information.catimage" alt=""> -->
</div>
</li>
</ul>
</div>
<div class="rc-foot">
<div class="rc-foo">
<div style="padding-top:55px">
<div style="padding-top: 55px">
<i>合计金额:</i>
<em>{{usersalesAmount}}</em>
</div>
<div style="padding-bottom:40px">
<span @click="onceagain">再次购买</span>
</div>
<em>{{ usersalesAmount }}</em>
</div>
<div style="padding-bottom: 40px; cursor: pointer">
<span @click="onceagain(item)"> {{ payorsucess }}</span>
</div>
</div>
</div>
</div>
</div>
<div class="rc-full-width rc-margin-y--md">
<i class="ts-standard-btn ts-standard-btn--two center" @click="onceagain">
{{payorsucess}}
</i>
</div>
</div>
<div class="rc-full-width rc-margin-y--md">
<i
class="ts-standard-btn ts-standard-btn--two center"
@click="onceagain()"
>
{{ payorsucess }}
</i>
</div>
</div>
<MyFooter></MyFooter>
<MyFooter></MyFooter>
</div>
</template>
<script>
import Myheader from "~/components/header.vue";
import { mapMutations } from "vuex";
import { userin} from "../../ajax/getData";
import MyFooter from '~/components/rc-footer.vue'
import {selectaddress,canceldanhao,generateOrderWX} from "../../ajax/getData";
import { userin } from "../../ajax/getData";
import MyFooter from "~/components/rc-footer.vue";
import Vue from "vue";
let vm = new Vue();
import formatConversion from "../../static/js/date";
import {
selectaddress,
canceldanhao,
generateOrderWX,
} from "../../ajax/getData";
export default {
data() {
return {
goldmedal:[],
userproductId:'',
userphone:'',
logisticsNumber:'',
customer:'',//
payorsucess:'', //
goldmedal: [],
userproductId: "",
logisticsDate: "",
addressPhoneNumber: "",
userphone: "",
logisticsNumber: "",
customer: "", //
payorsucess: "", //
addressstype: null,
addressUserName:'',
orderstatus: '',
goldastates:'',
userisdelivery:'待收货',
addressUserName: "",
logisticsCompany: "", //
orderstatus: "",
goldastates: "",
userisdelivery: "待收货",
userdelivery: "派送中",
isshow:true,
usersalesAmount:'',
isshow: true,
usersalesAmount: "",
leftico: require("../../assets/image/rc-left.png"),
orderNumber:'',
userdata:"",
usermessage:null,
userid: null,
useralllist:[],
delivery: [
],
orderNumber: "",
userdata: "",
usermessage: null,
userid: null,
trackingstates: "", //
useralllist: [],
delivery: [],
useraddress: [
],
useraddress: [],
goldmedal: [
],
shopprice: {
},
goldmedal: [],
shopprice: {},
information: {
reference: "1111111111111111",
ordertime: "2012-12-01 11:20:00",
paymentmethod: "微信支付",
distribution: "快递",
trackingnumber: "11111111111111",
catimage: require("../../assets/image/rc-left.png"),
catimage: require("../../assets/image/rc-left.png"),
},
};
},
methods: {
...mapMutations(["checkIsLogin"]),
refreshDesktopNav:function(){
RCDL.navigation.currentState=null;
RCDL.navigation.rebuild();
},
...mapMutations(["checkIsLogin"]),
refreshDesktopNav: function () {
RCDL.navigation.currentState = null;
RCDL.navigation.rebuild();
},
//
async canceldanhao(orderNumber) {
let data = await canceldanhao(this.userphone,this.orderNumber);
async canceldanhao(orderNumber) {
let data = await canceldanhao(this.userphone, this.orderNumber);
if (data) {
this.$message({
type: "warning",
message: "取消订单成功",
});
setTimeout(() => {
this.$router.push({
path: "/personal/useraddress",
query: {
stype: 1,
},
});
this.$router.push({
path: "/personal/useraddress",
query: {
stype: 1,
},
});
}, 500);
}
},
userpay(){
console.log('---');
if(this.goldastates==0){
this.canceldanhao();
}
else if( this.customer='联系客服申请售后'){
var option = {
customer: {id: '', name: '', email: '', mobile: '', memberId: this.userdata.data.id}
}
dis_livchat(option);
}
},
//
onceagain(){
console.log(this.payorsucess);
if(this.payorsucess=='立即支付'){
console.log('----')
this.getwei();
}else{
this.$router.push({
path: "/productdetails/producted",
query: {
stype: 1,
productCode: this.userproductId
},
});
console.log('不是立即支付');
}
},
async orderquantity(orderNumber){
let data=await userin(orderNumber);
if(data){
this.goldmedal=data;
for(let i=0;i<this.goldmedal.length;i++){
// this.goldmedal[i].status=0
this.goldastates=this.goldmedal[i].status;
this.userproductId=this.goldmedal[i].orderDetailList[0].productId;
this.logisticsNumber=this.goldmedal[i].orderDetailList[0].logisticsNumber;
this.orderNumber=this.goldmedal[i].orderNumber
this.usersalesAmount=this.goldmedal[i].salesAmount;
this.addressUserName=this.goldmedal[i].addressUserName;
}
console.log(this.goldmedal,this.userproductId,this.usersalesAmount);
}
},
//
async getwei(user) {
let postData = [];
let oneProduct = {
productName: item.productName,
buyCount: item.buyCount,
productId: item.productCode,
payAmount: item.productPrice,
memberId: item.memberId,
phoneNumber: item.mobile,
orderAddress: {
addressPhoneNumber: orderAddress[0].recipientPhone,
addressUserName: orderAddress[0].recipient,
addressProvinceName: orderAddress[0].provinceName,
addressCityName: orderAddress[0].cityName,
addressCountyName: orderAddress[0].districtName,
addressDetailInfo: orderAddress[0].detailAddress,
userpay() {
console.log("---");
if (this.goldastates == 0) {
this.canceldanhao();
} else if ((this.customer = "联系客服申请售后")) {
var option = {
customer: {
id: "",
name: "",
email: "",
mobile: "",
memberId: this.userdata.data.id,
},
};
let res = await generateOrderWX(postData);
let userPayData = {
orderId: res.data,
userprice: this.usersalesAmount, //
userinformation:
this.addressUserName+ //
" " +
this.userphone, //
wxPay: "weixin://wxpay/bizpayurl?pr=4RJbokxzz",
};
this.$router.push({
path: "/personal/userpay",
dis_livchat(option);
}
},
//
onceagain(item) {
console.log(this.payorsucess);
if (this.payorsucess == "立即支付") {
console.log("----");
this.getwei(item);
} else {
this.$router.push({
path: "/productdetails/producted",
query: {
userPayData:JSON.stringify(userPayData),
stype: 1,
productCode: this.userproductId,
},
});
console.log("不是立即支付");
}
},
async editaddress(user) {
// user.data.id=844350;
let data = await selectaddress(this.userid);
console.log(data);
let list=[]
this.useraddress=data.data;
for(let i =0;i<this.useraddress.length;i++){
if(this.useraddress[i].isDefault==true){
list.push(this.useraddress[i]);
async orderquantity(orderNumber) {
let data = await userin(orderNumber);
if (data) {
this.goldmedal = data;
console.log(this.goldmedal);
for (let i = 0; i < this.goldmedal.length; i++) {
this.goldastates = this.goldmedal[i].status;
this.userproductId = this.goldmedal[i].orderDetailList[0].productId;
this.logisticsNumber =
this.goldmedal[i].orderDetailList[0].logisticsNumber; //
this.trackingstates = this.goldmedal[i].orderDetailList[0].status; //
if (this.trackingstates == 0) {
this.trackingstates = "运输中";
} else if (this.trackingstates == 1) {
this.trackingstates = "已签收";
} else if (this.trackingstates == 2) {
this.trackingstates = "未发货";
}
this.logisticsDate = this.formatConversion(
this.goldmedal[i].orderDate
); //
this.logisticsCompany =
this.goldmedal[i].orderDetailList[0].logisticsCompany; //
this.orderNumber = this.goldmedal[i].orderNumber;
this.usersalesAmount = this.goldmedal[i].salesAmount;
this.addressUserName = this.goldmedal[i].addressUserName;
this.addressPhoneNumber = this.goldmedal[i].addressPhoneNumber;
}
this.useraddress=list;
console.log(list);
console.log(this.goldmedal);
// console.log(this.list);
console.log(this.goldmedal, this.userproductId, this.usersalesAmount);
}
},
//
async getwei(user) {
console.log(user);
let userPayData = {
userprice: this.usersalesAmount,
orderId: this.orderNumber,
userinformation: this.addressUserName + " " + this.addressPhoneNumber,
};
this.$router.push({
path: "/personal/userpay",
query: {
userData: this.orderNumber,
stype: 1,
userPayData: JSON.stringify(userPayData),
},
});
},
async editaddress(user) {
// user.data.id=844350;
let data = await selectaddress(this.userid);
let list = [];
this.useraddress = data.data;
for (let i = 0; i < this.useraddress.length; i++) {
if (this.useraddress[i].isDefault == true) {
list.push(this.useraddress[i]);
}
}
this.useraddress = list;
console.log(this.useraddress[0].recipient);
// console.log(this.list);
},
},
mounted() {
this.checkIsLogin();
this.userdata=this.$store.state.userInfo;
console.log(this.userdata);
this.userdata = this.$store.state.userInfo;
console.log(this.userdata);
this.usermessage = JSON.parse(localStorage.getItem("userInfo"));
this.userid = this.usermessage.data.id;
this.userphone=this.usermessage.data.mobile;
this.editaddress(this.userid);
this.userid = this.usermessage.data.id;
this.userphone = this.usermessage.data.mobile;
this.editaddress(this.userid);
this.addressstype = this.$route.query.stype;
this.orderNumber=this.$route.query.orderNumber;
this.orderquantity(this.orderNumber)
if(this.addressstype==2){
this.orderstatus='您的订单已完成';
this.isshow=false;
this.userisdelivery='待发货';
this.customer='联系客服申请售后'
this.payorsucess='再次购买'
console.log( this.orderstatus);
}else if(this.addressstype==0){
this.orderstatus='您的订单还未付款,请尽快付款!';
this.isshow=false;
this.userisdelivery='待付款';
this.customer='取消订单'
this.payorsucess='立即支付'
}
else if(this.addressstype==1){
this.orderstatus='您的订单已发出,请耐心等候。';
this.isshow=true;
this.userisdelivery='待收货';
this.customer='联系客服申请售后'
this.payorsucess='再次购买'
}
else if(this.addressstype==3){
this.orderstatus='您的订单已取消!';
this.isshow=false;
this.userisdelivery='已取消';
this.customer='联系客服申请售后'
this.payorsucess='再次购买'
this.orderNumber = this.$route.query.orderNumber;
this.orderquantity(this.orderNumber);
if (this.addressstype == 2) {
this.orderstatus = "您的订单已完成";
this.isshow = false;
this.userisdelivery = "待发货";
this.customer = "联系客服申请售后";
this.payorsucess = "再次购买";
console.log(this.orderstatus);
} else if (this.addressstype == 0) {
this.orderstatus = "您的订单还未付款,请尽快付款!";
this.isshow = false;
this.userisdelivery = "待付款";
this.customer = "取消订单";
this.payorsucess = "立即支付";
} else if (this.addressstype == 1) {
this.orderstatus = "您的订单已发出,请耐心等候。";
this.isshow = true;
this.userisdelivery = "待收货";
this.customer = "联系客服申请售后";
this.payorsucess = "再次购买";
} else if (this.addressstype == 3) {
this.orderstatus = "您的订单已取消!";
this.isshow = false;
this.userisdelivery = "已取消";
this.customer = "联系客服申请售后";
this.payorsucess = "再次购买";
}
console.log(this.addressstype);
},
@ -379,5 +399,4 @@ console.log(this.userdata);
<style lang="less" scoped>
@import url("../../assets/css/global.less");
@import url("../../assets/css/usertion.less");
</style>

View File

@ -4,6 +4,7 @@
<Myheader></Myheader>
<!-- <tabs></tabs> -->
<div class="rc-top"></div>
<tabs :crumbs="crumbs"></tabs>
<div class="rc-usermain">
<div class="rc rc-column">
@ -17,7 +18,7 @@
</span>
<!-- <span @click="tanchu()">弹出</span> -->
</div>
<div class="online bold"></div>
<div class="online bold"></div>
<div class="rs-dis">
<div
@ -29,22 +30,27 @@
<div class="rc-contair">
<div class="rc-left" ref="userleft" id="userleft" :style='usercolor'>
<div>
<i></i><span>{{item.couponTypeId=='4'?parseInt(((item.discount) *10))+ '折':item.couponAmount}}</span>
<i v-if="(item.couponTypeId!='4' && item.couponAmount>0)">
</i>
<span>
{{ item.couponAmount?item.couponAmount:(parseInt((item.discount)*10)+'折') }}
</span>
</div>
<strong>{{ item.couponName }}</strong>
</div>
<div class="rc-right">
<i :style='usercolor'>
{{ item.couponName }}
{{ item.couponDesc }}
</i>
<div class="rc-userfont">
<strong>有效期</strong>
<span>{{item.validFrom}}</span>
<em>{{item.validTo}}</em>
</div>
<nuxt-link :to="`/productdetails/productlist`">
<div v-if="userload" class="ts-stand">
<nuxt-link :to="`/productdetails/productlist`" v-if="activeIndex==0">
<div class="ts-standard-btn">
立即使用
</div>
</nuxt-link>
</div>
@ -59,14 +65,22 @@
<script>
import {allConfig,getdraw} from "../../ajax/getData";
// import tabs from "@/components/tabs.vue";
import {allConfig,getdraw} from "../../ajax/getData";
import tabs from "@/components/tabs.vue";
export default {
// middleware: 'metaTitle',
// // middleware: 'metaTitle',
// meta: {title: ''},
data() {
return {
crumbs:[
{
path:'/personal/mypersonal/',
},
{
path:'/personal/discount/',
}
],
userload: true,
pastdue: false,
unused: false,
@ -209,6 +223,7 @@ export default {
},
components: {
Myheader,
tabs
},
};
import Myheader from "~/components/header.vue";
@ -216,6 +231,5 @@ import Myheader from "~/components/header.vue";
<style lang="less" scoped>
//
@import url("../../assets/css/global.less");
@import url("../../assets/css/discount.less");
</style>

View File

@ -2,7 +2,8 @@
<div>
<Myheader></Myheader>
<div class="rc-top"></div>
<div class="rc-max-width--xl rc-padding-y--md">
<tabs :crumbs="crumbs"></tabs>
<div class="rc-max-width--xl rc-padding-bottom--md">
<ul>
<li v-for="(item,index) in userrecord" :key="index">
{{item.title}}
@ -36,6 +37,14 @@ import Myheader from '~/components/header.vue'
export default {
data(){
return{
crumbs:[
{
path:'/personal/mypersonal',
},
{
path:'/personal/integral/',
}
],
userrecord:[
{
title:'日期',

View File

@ -3,6 +3,7 @@
<Myheader></Myheader>
<!-- <tabs></tabs> -->
<div class="rc-top"></div>
<tabs :crumbs="crumbs"></tabs>
<div class="rc-layout-container rc-one-column rc-full-width ts-mypersonal">
<div class="rc-column">
<!-- <div class="rc-title">
@ -152,16 +153,21 @@ export default {
meta: {title: '个人中心'},
data() {
return {
userlog:false,
islogin:false,
dialogInfo1:false,
userid:null,
usertitle:'',
rcvalue:5000,
usermessage:'关注皇家爱宠荟,修改个人资料',
userimage:require("../../assets/image/rc-new.png"),
userlogin:'登录注册',
userorder: "新手铲屎官",
crumbs:[
{
path:'/personal/mypersonal',
}
],
userlog:false,
islogin:false,
dialogInfo1:false,
userid:null,
usertitle:'',
rcvalue:5000,
usermessage:'关注皇家爱宠荟,修改个人资料',
userimage:require("../../assets/image/rc-new.png"),
userlogin:'登录注册',
userorder: "新手铲屎官",
prefecture: [
{
title: "待付款",

View File

@ -6,13 +6,98 @@ ul li ol li em strong i {
.rc-header {
width: 100%;
}
.settlement {
padding-top: 60px;
}
.rc-merchandise {
li {
align-items: baseline;
}
}
.discountInfo {
i,em {
font-size:.875rem;
}
}
.rc-discount {
position: relative;
width: 100%;
img {
display: block;
width: 100%;
height: 100%;
}
.rc-contair {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
.rc-left {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
color: #e1001a;
width: 34%;
float: left;
height: 100%;
i {
font-style: normal;
font-size: 12px;
}
span {
font-size: 45px;
}
strong {
font-style: normal;
font-size: 12px;
display: block;
margin-top: 8px;
}
}
.rc-right {
display: flex;
flex-direction: column;
padding: 5px 10px;
justify-content: center;
height: 100%;
i {
font-style: normal;
font-size: 16px;
color: #e1001a;
}
.rc-main {
color: #999999;
font-size: 12px;
}
span {
display: block;
margin-top: 2px;
}
em {
font-style: normal;
}
}
.rc-footer {
display: flex;
justify-content: flex-end;
margin-right: 10px;
span {
width: 72px;
height: 25px;
background: #e2001a;
text-align: center;
line-height: 25px;
font-size: 12px;
color: #ffffff;
margin-bottom: 8px;
border-radius: 100px;
margin-right: 8px;
cursor: pointer;
}
}
}
.rc-main {
width: 92%;
@ -183,12 +268,13 @@ ul li ol li em strong i {
border: 1px solid #d8d8d8;
margin-right: 20px;
width: 96px;
height: 96px;
height: 96px;
img {
width: 96px;
height: 96px;
display: block;
object-fit:contain;
}
}
@ -254,7 +340,7 @@ ul li ol li em strong i {
}
ul {
width: 25%;
width: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
@ -340,8 +426,8 @@ ul li ol li em strong i {
display: flex;
justify-content: flex-end;
flex-direction: column;
align-items: self-end;
align-items: flex-end;
text-align: right;
i {
font-style: normal;
color: #333333;
@ -353,7 +439,15 @@ ul li ol li em strong i {
font-style: normal;
color: #e1001a;
font-size: 26px;
display:inline-block;
min-width:6rem;
}
.discountInfo {
i,em {
font-size:1rem;
}
}
span {
display: block;
@ -465,7 +559,9 @@ ul li ol li em strong i {
display: none;
border: none;
padding: 0;
&.show {
display:block;
}
&.active {
display: block;
border: none;

View File

@ -1,9 +1,7 @@
<template>
<div class="settlement">
<Myheader></Myheader>
<div class="rc-main">
<tabs></tabs>
</div>
<div class="rc-top"></div>
<div class="rc_contline"></div>
<div class="rc-main">
<div class="address-list">
@ -28,7 +26,7 @@
<span>{{ item.address }}</span>
</div>
</div>
<div class="mypersonal add">
<div class="mypersonal add" :class="useraddress.length>0?'':'show'">
<div
class="my-delivery"
@click="addAddress"
@ -54,7 +52,7 @@
<div class="rc-userbottom">
<p>{{ item.productPrice }}</p>
<p>X{{ item.buyCount }}</p>
<p class="price">{{ item.productPrice }}</p>
<p class="price">{{ item.productPrice * item.buyCount }}</p>
</div>
</div>
</div>
@ -67,10 +65,12 @@
<span>配送方式:</span>
<i>{{ shopprice.price }}</i>
</li>
<li>
<span> 活动促销:</span>
<i>{{ shopprice.distribution }}</i>
<i class="ts-right-arr ts-right-arr--two" @click="userget()">{{ curCoupon.couponName }}</i>
</li>
<li>
<span>商品总价:</span>
<i class="red">{{ sumPrice }}</i>
@ -88,11 +88,15 @@
<div class="rc-foot">
<div class="rc-foo">
<div>
<div class="discountInfo" v-if="discountAmount">
<i>优惠金额:</i>
<em>{{ discountAmount }}</em>
</div>
<i>合计金额:</i>
<em>{{ sumPrice }}</em>
<em>{{ finalAmount }}</em>
</div>
<div style="font-weight: bold">
<span @click="jiesuan()">提交订单</span>
<span @click="preJiesuan()">提交订单</span>
</div>
</div>
</div>
@ -147,21 +151,72 @@
</div>
</div>
</el-dialog>
<el-dialog :visible.sync="dialogInfo1" class="pop_coupon" :close-on-click-modal="false">
<div class="ts-no-data" v-if="drawlist.length<=0">您还没有优惠券可在商品的详情页面中领取</div>
<div class="rs-dis">
<div
class="rc-discount"
v-for="(item, index) in drawlist"
:key="index"
>
<img :src="userimage" alt="" />
<div class="rc-contair">
<div class="rc-left" :style='usercolor'>
<div>
<i v-if="(item.couponTypeId!='4' && item.couponAmount>0)">
</i>
<span>
{{ item.couponAmount?item.couponAmount:(parseInt((item.discount)*10)+'折') }}
</span>
</div>
<strong>{{ item.couponName }}</strong>
</div>
<div class="rc-right">
<i :style='usercolor'>
{{ item.couponName }}
</i>
<div class="rc-userfont">
<strong>有效期</strong>
<span>{{item.validFrom}}</span>
<em>{{item.validTo}}</em>
</div>
<div class="rc-footer">
<span @click="pickCoupon(item)">立即使用</span>
</div>
</div>
</div>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import Myheader from "~/components/header.vue";
import { userin, memberAddress, generateOrderWX } from "../../ajax/getData";
import { userin, memberAddress, generateOrderWX, getdraw } from "../../ajax/getData";
import tabs from "@/components/tabs.vue";
import myAddress from "~/components/address.vue";
import { mapMutations } from "vuex";
import itemMixin from "../../../smart-admin-web/src/components/main/components/side-menu/item-mixin";
export default {
middleware: "metaTitle",
meta: { title: "订单结算" },
data() {
return {
crumbs:[
{
path:'/productdetails/productlist/',
},
{
path:'/personal/settlement'
}
],
usercolor:{color:'#e1001a'},
userimage: require("../../assets/image/unused.png"),
curCoupon:{couponName:'未选择可用优惠券'},
drawlist:[],
dialogInfo1:false,
goldmedal: [],
dialogAddTitle: "",
addressstype: null,
@ -196,18 +251,113 @@ export default {
promotion: "¥167.00",
payment: "¥0.00 ",
},
discountAmount:0,
finalAmount:0,
discountedProductCode:undefined,
};
},
computed: {
//
sumPrice() {
return this.goldmedal.reduce((pre, cur) => {
console.log(pre);
return pre + cur.buyCount * cur.productPrice;
}, 0);
},
sumPrice() {
return this.goldmedal.reduce((pre, cur) => {
return pre + cur.buyCount * cur.productPrice;
}, 0);
},
//
},
methods: {
...mapMutations(["checkIsLogin"]),
discountedSumPrice() {
let total = 0;
if(this.curCoupon.productCodes)
this.finalAmount = this.qualifiedProductDiscount();
else
this.finalAmount = this.wholeOrderDiscount();
this.finalAmount = parseFloat(this.finalAmount).toFixed(2);
this.discountAmount = parseFloat(this.discountAmount).toFixed(2);
},
wholeOrderDiscount(){
this.discountedItemIndex = 0;
let checkResult = true;
if(this.curCoupon.minPrice && this.curCoupon.minPrice > this.sumPrice) {
checkResult = false;
}
if(this.curCoupon.couponAmount && this.curCoupon.couponAmount > this.sumPrice) {
checkResult = false;
}
if(checkResult) {
if(this.curCoupon.couponAmount && this.curCoupon.couponAmount>0) {
this.discountAmount = this.curCoupon.couponAmount;
return this.sumPrice - this.curCoupon.couponAmount;
} else if(this.curCoupon.discount && this.curCoupon.discount>0) {
this.discountAmount = this.sumPrice*this.curCoupon.discount;
return this.sumPrice * (1-this.curCoupon.discount);
}
} else {
return this.sumPrice;
}
},
qualifiedProductDiscount(){
this.discountedItemIndex = 0;
let total = 0;
let couponUsed = false;
let tmpShoppingCartList = this.arrSort(this.goldmedal);
for(let itemInCart of tmpShoppingCartList) {
if((!this.curCoupon.productCodes || this.curCoupon.productCodes.indexOf(itemInCart.productCode)>-1) && !couponUsed) {
if(this.curCoupon.minQuantity && this.curCoupon.minQuantity>itemInCart.buyCount) {
//Check minQuantity
total+=(itemInCart.buyCount * itemInCart.productPrice);
} else if(this.curCoupon.minPrice && this.curCoupon.minPrice > (itemInCart.buyCount * itemInCart.productPrice)) {
//Check minPrice
total+=(itemInCart.buyCount * itemInCart.productPrice);
} else {
//Into coupon discount calculation
switch(this.curCoupon.couponTypeId) {
case 1: //Amount deduct
total = total + (itemInCart.productPrice * itemInCart.buyCount - this.curCoupon.couponAmount);
this.discountAmount = this.curCoupon.couponAmount;
this.discountedProductCode = itemInCart.productCode;
couponUsed=true;
break;
case 2: //Amount deduct with minPrice restriction
case 6:
total = total + (itemInCart.productPrice * itemInCart.buyCount) - this.curCoupon.couponAmount;
this.discountAmount = this.curCoupon.couponAmount;
this.discountedProductCode = itemInCart.productCode;
couponUsed=true;
break;
case 3: //Limited product % discount
case 4: //% discount
total = total + (itemInCart.productPrice * itemInCart.buyCount) * this.curCoupon.discount;
this.discountAmount = (itemInCart.productPrice * itemInCart.buyCount) * ( 1 - this.curCoupon.discount);
this.discountedProductCode = itemInCart.productCode;
couponUsed=true;
break;
default:
total += itemInCart.productPrice * itemInCart.buyCount;
break;
}
//Into coupon discount calculation end
}
} else {
total += itemInCart.productPrice * itemInCart.buyCount;
}
}
return total;
},
arrSort(arr) {
let userarr=[]
let a=[];
for(let i in arr){
arr[i].total=arr[i].productPrice*arr[i].buyCount;
if(arr[i].total){
userarr.push(arr[i]);
}
}
return userarr.sort((n1,n2)=>{
return n2.total-n1.total;
});
},
async getAddressList() {
let memberId = JSON.parse(localStorage.getItem("userInfo")).data.id;
let { data } = await memberAddress("getAll", { memberId: memberId });
@ -220,6 +370,67 @@ export default {
});
this.useraddress = data;
},
userget(){
let user = this.$store.state.userInfo;
if (user) {
this.userdraw(user.data.mobile);
this.dialogInfo1 = true;
} else {
this.$router.push({
path: "/userlogin/login",
});
}
},
//
async userdraw(mobile) {
let data = await getdraw(mobile);
let _self = this;
let curTime = new Date().getTime();
let valDateFromTime=0;
let valDateToTime=0;
let dateChecked=true;
if (data) {
this.drawlist=[];
for(let itemInCart of this.goldmedal) {
let tmpIndex=0;
for(let myCoupon of data.data) {
valDateFromTime=0;
valDateToTime=0;
dateChecked=true;
if(myCoupon.fValidFrom) {
valDateFromTime = new Date(myCoupon.fValidFrom).getTime();
}
if(myCoupon.fValidTo) {
valDateToTime = new Date(myCoupon.fValidTo).getTime();
}
if(valDateFromTime && curTime < valDateFromTime) {
dateChecked=false;
}
if(valDateToTime && curTime > valDateToTime) {
dateChecked=false;
}
if(myCoupon.minQuantity && myCoupon.minQuantity>itemInCart.buyCount) {
dateChecked=false;
}
if(myCoupon.minPrice && myCoupon.minPrice>this.sumPrice) {
dateChecked=false;
}
if(dateChecked && myCoupon.activityId != 10 && myCoupon.status == 0 && (!myCoupon.productCodes || myCoupon.productCodes.indexOf(itemInCart.productCode)>-1)) {
data.data.splice(tmpIndex,1);
_self.drawlist.push(myCoupon);
}
tmpIndex++;
}
}
}
},
pickCoupon(item){
this.curCoupon = item;
this.dialogInfo1 = false;
this.discountedSumPrice();
},
editAddress(item) {
this.dialogAddTitle = "修改收货地址";
this.editAddressData = {
@ -272,17 +483,43 @@ export default {
this.dialogAdd = parm;
this.getAddressList();
},
preJiesuan(){
let checkResult=true;
if(this.useraddress.length<=0) {
this.$message({
type: "error",
message: '请先添加收件信息',
});
checkResult=false;
}
if(checkResult)
this.jiesuan();
},
async jiesuan() {
let orderAddress = this.useraddress.filter((item) => item.isDefault);
let userInfo = this.$store.state.userInfo;
if(!userInfo) {
this.$router.push({
path: "/userlogin/login",
query: {
},
});
return;
}
let postData = [];
let tmpCounter=0;
this.goldmedal.forEach((item) => {
let basePoint = (item.basePoint?item.basePoint:0);
let oneProduct = {
basePoint:basePoint,
productName: item.productName,
buyCount: item.buyCount,
productId: item.productCode,
productCode: item.productCode,
payAmount: item.productPrice,
memberId: item.memberId,
phoneNumber: item.mobile,
memberId: userInfo.data.id,
phoneNumber: userInfo.data.mobile,
// couponId: "NGQ2022P12",
// couponTypeId: "4",
// couponName: "",
@ -297,7 +534,15 @@ export default {
addressDetailInfo: orderAddress[0].detailAddress,
},
};
if(this.curCoupon.couponId && item.productCode == this.discountedProductCode) {
oneProduct.couponId = this.curCoupon.couponId;
oneProduct.couponTypeId = this.curCoupon.couponTypeId;
oneProduct.couponName = this.curCoupon.couponName;
oneProduct.couponCode = this.curCoupon.couponCode;
oneProduct.couponAmount = (this.curCoupon.couponAmount?this.curCoupon.couponAmount:this.curCoupon.discount);
}
postData.push(oneProduct);
tmpCounter++;
});
// let postData = [
// {
@ -346,14 +591,15 @@ export default {
let res = await generateOrderWX(postData);
if (res.success) {
let userPayData = {
orderId: res.data,
userprice: this.sumPrice,
orderId: res.data.orderNumber,
userprice: parseFloat(res.data.orderAmount).toFixed(2),
userinformation:
postData[0].orderAddress.addressUserName +
" " +
postData[0].orderAddress.addressPhoneNumber,
// wxPay: "weixin://wxpay/bizpayurl?pr=4RJbokxzz",
wxPay: res.data,
// wxPay: "weixin://wxpay/bizpayurl?pr=4RJbokxzz",
wxPay: res.msg,
};
this.$router.push({
path: "/personal/userpay",
@ -370,14 +616,13 @@ export default {
},
async canceldanhao(orderNumber) {
let data = await userin(orderNumber);
console.log(data);
// this.goldmedal=data;
console.log(this.goldmedal);
},
},
mounted() {
this.goldmedal = JSON.parse(this.$route.query.list);
this.getAddressList();
this.checkIsLogin();
this.finalAmount = this.sumPrice;
// this.addressstype = this.$route.query.stype;
// this.orderNumber = this.$route.query.orderNumber;
// this.canceldanhao(this.orderNumber);
@ -393,7 +638,7 @@ export default {
</script>
<style lang="less" scoped>
@import url("../../assets/css/global.less");
//@import url("../../assets/css/global.less");
@import "./settlement.less";
// @import url("../../assets/css/settlement.less");
</style>

View File

@ -2,6 +2,7 @@
<div>
<Myheader></Myheader>
<div class="rc-top"></div>
<tabs :crumbs="crumbs"></tabs>
<div class="online bold"></div>
<div class="usercontshow rc-max-width--xl">
<div class="rc-headera">
@ -43,28 +44,28 @@
</div>
<div class="rc-usermain" >
<div class="rc-image">
<img :src="item.catimage" alt="" />
<img :src= item.picFile alt="" />
</div>
<div class="rc-right" @click="usertiaozhuan(item)">
<div class="rc-usercenter">
<em>{{ item.usereat }}</em>
<em>{{ item.productName }}</em>
<div class="rc-userright">
<span>规格:{{ item.num }}</span>
<span>规格:{{ item.specifications }}</span>
</div>
</div>
<div class="rc-userbottom">
<span>数量:{{ item.pcs }}</span>
<i>10</i>
<i>{{item.ecPrice}}</i>
</div>
<div class="rc-userbottomm">
<i>{{ item.userprice }}</i>
<span>{{ item.orderstype }}</span>
<i>{{ item.userprice }}</i>
<i>{{ item.ecPrice }}</i>
<span>{{ item.pcs }}</span>
<i>{{ item.salesAmount }}</i>
</div>
</div>
<div class="pc-bottom">
<span @click="userpay(item, index)">{{
<span v-if="item.status!=1" @click="userpay(item, index)">{{
item.status == "0"
? "取消订单"
: item.status == "1"
@ -137,11 +138,20 @@
<script>
import Myheader from "~/components/header.vue";
import MyFooter from '~/components/rc-footer.vue'
import MyFooter from '~/components/rc-footer.vue';
import tabs from "~/components/tabs.vue";
import { customerorders, userindent, canceldanhao,generateOrderWX } from "../../ajax/getData";
export default {
data() {
return {
crumbs:[
{
path:'/personal/mypersonal/',
},
{
path:'/personal/useraddress/',
}
],
activeIndex: 0,
userstype:'',
alllist:[],
@ -280,7 +290,8 @@ export default {
},
components: {
Myheader,
MyFooter
MyFooter,
tabs
},
methods: {
async indet(mobile, stype) {
@ -297,7 +308,6 @@ export default {
this.alllist.push(this.goldmedal[i].orderDetailList[0])
this.allmessage.push(this.goldmedal[i].orderDetailList[0])
if(this.goldmedal[i].status==0){
console.log("+++++++++++++");
this.obligation.push(this.goldmedal[i].orderDetailList[0]);
}else if(this.goldmedal[i].status==1){
this.receiving.push(this.goldmedal[i].orderDetailList[0]);
@ -306,13 +316,18 @@ export default {
this.pending.push(this.goldmedal[i].orderDetailList[0]);
}
}
for (var i = 0; i < this.useralllist.length; i++) {
this.useralllist[i].orderNumber = this.goldmedal[i].orderNumber;
this.useralllist[i].status = this.goldmedal[i].status;
this.useralllist[i].addressUserName = this.goldmedal[i].addressUserName;
this.useralllist[i].phoneNumber = this.goldmedal[i].phoneNumber;
this.useralllist[i].phoneNumber = this.goldmedal[i].addressPhoneNumber;
this.useralllist[i].salesAmount = this.goldmedal[i].salesAmount;
// this.useralllist[i].picFile = this.goldmedal[i].picFile; //
// this.useralllist[i].productName=this.goldmedal[i].productName;//
// this.useralllist[i].ecPrice=this.goldmedal[i].ecPrice//
// this.useralllist[i].pcs=this.goldmedal[i].pcs//
this.useralllist[i].lengthnum=this.goldmedal[i].orderDetailList.length
}
console.log(this.obligation)
@ -333,38 +348,22 @@ export default {
//
async getwei(item) {
console.log(item);
let postData = [];
// let oneProduct = {
// productName: item.productName,
// buyCount: item.buyCount,
// productId: item.productCode,
// payAmount: item.productPrice,
// memberId: item.memberId,
// phoneNumber: item.mobile,
// orderAddress: {
// addressPhoneNumber: orderAddress[0].recipientPhone,
// addressUserName: orderAddress[0].recipient,
// addressProvinceName: orderAddress[0].provinceName,
// addressCityName: orderAddress[0].cityName,
// addressCountyName: orderAddress[0].districtName,
// addressDetailInfo: orderAddress[0].detailAddress,
// },
// };
// postData.push(oneProduct);
let res = await generateOrderWX(postData);
let userPayData = {
orderId: res.data,
userprice: item.salesAmount, //
userinformation:
item.addressUserName+ //
let userPayData = {
userprice: item.salesAmount,
orderId:item.orderNumber,
userinformation:item.addressUserName +
" " +
item.phoneNumber, //
item.phoneNumber,
wxPay: "weixin://wxpay/bizpayurl?pr=4RJbokxzz",
};
this.$router.push({
path: "/personal/userpay",
query: {
userPayData:JSON.stringify(userPayData),
userData:item.orderNumber,
stype:1,
userPayData: JSON.stringify(userPayData),
},
});
},
@ -407,7 +406,10 @@ export default {
this.receiving=[];
this.pending=[];
}, 500);
}
} else if(item.status == 1) { //
}
if (item.buttontitle == "立即支付") {
this.$router.push({
path: "/personal/userpay",
@ -484,6 +486,5 @@ export default {
</script>
<style lang="less" scoped>
@import url("../../assets/css/global.less");
@import url("../../assets/css/orderquantity.less");
</style>

View File

@ -2,47 +2,44 @@
<div>
<Myheader></Myheader>
<div class="rc-top"></div>
<div class="rc-full-width rc-max-width--xl rc-padding-y--lg">
<div class="rc-main">
<div class="rc-center" >
<van-swipe @change="onChange">
<van-swipe-item v-for="(banner, index) in banners" :key="index">
<img :src="banner.src" class="useraimg"/>
</van-swipe-item>
</van-swipe>
<!-- <img :src='userimage' /> -->
</div>
<div class="rc-order">
<span>当前等级{{userorder}}</span>
</div>
<div class="rc-cordd">
<span>距离升级还差:{{ rcvalue }} </span>
<div class="block">
<div class="r-block" ref="userblock"></div>
<!-- <el-slider v-model="value" range show-stops :max="10"> </el-slider> -->
</div>
<div class="rc-value">
<span>新手铲屎官</span>
<span>资深铲屎官</span>
<span>金牌铲屎官</span>
</div>
</div>
<div class="rc-layout-container">
<div class="usermember rc-column" v-for="(item,index) in newlist" :key="index">
<div class="rc-image">
<img :src="item.catimage" alt="" />
<tabs :crumbs="crumbs"></tabs>
<div class="rc-full-width rc-max-width--xl rc-padding-bottom--lg">
<div class="rc-main">
<div class="rc-center" >
<van-swipe @change="onChange">
<van-swipe-item v-for="(banner, index) in banners" :key="index">
<img :src="banner.src" class="useraimg"/>
</van-swipe-item>
</van-swipe>
<!-- <img :src='userimage' /> -->
</div>
<div class="rc-userorder">
<em>{{item.title}}</em>
<span>{{item.usereat}}</span>
<div class="rc-order">
<span>当前等级{{userorder}}</span>
</div>
<div class="rc-cordd">
<span>距离升级还差:{{ rcvalue }} </span>
<div class="block">
<div class="r-block" ref="userblock"></div>
<!-- <el-slider v-model="value" range show-stops :max="10"> </el-slider> -->
</div>
<div class="rc-value">
<span class="rc-styled-link" @click="onChange(0)">新手铲屎官</span>
<span class="rc-styled-link" @click="onChange(1)">资深铲屎官</span>
<span class="rc-styled-link" @click="onChange(2)">金牌铲屎官</span>
</div>
</div>
<div class="rc-layout-container">
<div class="usermember rc-column" v-for="(item,index) in newlist" :key="index">
<div class="rc-image">
<img :src="item.catimage" alt="" />
</div>
<div class="rc-userorder">
<em>{{item.title}}</em>
<span>{{item.usereat}}</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<Myfooter></Myfooter>
@ -53,15 +50,24 @@
<script>
import Myheader from '~/components/header.vue'
import Myfooter from '~/components/rc-footer.vue'
import tabs from "~/components/tabs.vue";
export default {
data(){
return{
banners:[
{src:require("../../assets/image/rc-new.png"),link:""},
{src:require("../../assets/image/rc-new1.png"),link:""},
{src:require("../../assets/image/rc-new2.png"),link:""},
],
crumbs:[
{
path:'/personal/mypersonal',
},
{
path:'/personal/usermember/',
}
],
banners:[
{src:require("../../assets/image/rc-new.png"),link:""},
{src:require("../../assets/image/rc-new1.png"),link:""},
{src:require("../../assets/image/rc-new2.png"),link:""},
],
userid:null,
userimage:require("../../assets/image/rc-new.png"),
userorder:'新手铲屎官',
@ -236,22 +242,23 @@ data(){
}
},
methods:{
onChange(index){
console.log(index);
if(index==0){
this.newlist=this.newlista;
}else if(index==1){
this.newlist=this.senior
}else if(index==2){
this.newlist=this.goldmedal
}
console.log(this.newlist)
}
onChange(index){
console.log(index);
if(index==0){
this.newlist=this.newlista;
}else if(index==1){
this.newlist=this.senior
}else if(index==2){
this.newlist=this.goldmedal
}
console.log(this.newlist)
}
},
components:{
Myheader,
Myfooter
Myfooter,
tabs
},
mounted(){
console.log(this.$refs.userblock);

View File

@ -1,8 +1,8 @@
<template>
<div class="page_modules">
<Myheader></Myheader>
<div class="rc-top rc-md-up"></div>
<div class="cont_modules">
<tabs></tabs>
<el-row class="order_info">
<el-col :span="6" class="ph_hidden">
<ul class="li_inline">
@ -19,7 +19,7 @@
<el-col :span="6" class="ready_right">
<div class="inline_right">
<p>付款金额:</p>
<p class="price">{{ userPayData.userprice }}</p>
<p class="price" v-if="userPayData.userprice">{{ userPayData.userprice }}</p>
</div>
<div class="inline_right">
<p>收货信息:</p>
@ -64,7 +64,9 @@
<p>您的商品我们正在抓紧打包请耐心等候</p>
<div class="line_dashed"></div>
<div class="userer">
<div class="qrcode"><vue-qr :text="qrtext" :size="260"></vue-qr></div>
<div class="qrcode">
<img src="/images/paysucess.jpg">
</div>
<p>微信扫一扫识别二维码</p>
<p class="tips">加入社群0元试用商品随单发放</p>
</div>
@ -87,41 +89,59 @@ import Myheader from "~/components/header.vue";
import tabs from "@/components/tabs.vue";
import vueQr from 'vue-qr'
import { generateOrderAlipay, updateOrderWX } from "../../ajax/getData";
import { generateOrderAlipay, updateOrderWX, monitorOrderNotify,repayOrde } from "../../ajax/getData";
export default {
data() {
return {
activeIndex: 0,
paymentTimer:undefined,
isSucess: false,
dialogSuccess: true,
paytype: "微信",
userpaystype: [
{
paytype: "微信",
payimage: require("../../assets/pay/wx.png"),
},
/*
{
paytype: "支付宝",
payimage: require("../../assets/pay/zfb.png"),
},
*/
],
dialogSuccess: true,
dialogFail: false,
userPayData: {},
qrtext:'',
userData:'',
};
},
computed: {},
mounted() {
this.userPayData = JSON.parse(this.$route.query.userPayData);
this.qrtext=this.userPayData.wxPay;
this.payOrderWX()
let stype=this.$route.query.stype;
console.log(stype)
if(stype==1){
this.userData = this.$route.query.userData;
this.repayOrde(this.userData);
this.userPayData = JSON.parse(this.$route.query.userPayData);
console.log(this.userPayData);
}else{
this.userPayData = JSON.parse(this.$route.query.userPayData);
console.log(this.userPayData);
}
this.qrtext=this.userPayData.wxPay
this.payOrderWX();
},
methods: {
closeDialogSuccess() {
this.qrtext = '';
// this.$router.push({
// path: "/index",
// });
this.qrtext = '';
this.$router.push({
path: "/myorder/usertion",
query:{
stype:1,
orderNumber:this.userPayData.orderId
}
});
},
closeDialogFail() {
this.qrtext = '';
@ -130,6 +150,16 @@ export default {
// });
},
async repayOrde(ordernumber) {
let res = await repayOrde(ordernumber);
console.log(ordernumber);
if (res) {
console.log(res)
this.qrtext=res.msg
console.log(this.qrtext);
}
},
async selectGoods(item, index) {
this.activeIndex = index;
this.paytype = item.paytype;
@ -142,15 +172,20 @@ export default {
}
},
//
async payOrderWX() {
let res = await updateOrderWX();
let res = await monitorOrderNotify(this.userPayData.orderId);
if (res.success) {
this.qrtext = '成功加入群的二维码';
this.dialogSuccess = true;
} else if (res.fail) {
this.dialogFail = true;
}else{
this.payOrderWX()
let _self = this;
this.paymentTimer = setTimeout(function(){
_self.payOrderWX()
},5000);
}
},
},
@ -290,7 +325,7 @@ export default {
}
}
.paycord {
display: none;
//display: none;
}
}
</style>

View File

@ -2,9 +2,9 @@
<div>
<div class="user">
<Myheader></Myheader>
<unlogin></unlogin>
<tabs></tabs>
<div class="online" id="fixed-catbar-seperator"></div>
<div class="rc-top"></div>
<tabs :crumbs="crumbs"></tabs>
<div class="online rc-margin--none" id="fixed-catbar-seperator"></div>
<div class="rc-top"></div>
<div
class="
@ -106,7 +106,13 @@
<div class="rc-productdetail" v-if="!userbuy">
<i class="ts-row-title">所属分类</i>
<span>{{ curItem.categoryName }}</span>
</div>
<div class="rc-button ">
<span @click="chuafangbuy()">立即购买</span>
</div>
<div class="rc-productdetail" v-if="userbuy">
<i class="ts-row-title">商品价格</i>
<span class="ts-realprice">{{ curItem.ecPrice }}</span>
@ -135,7 +141,7 @@
<i class="ts-row-title">商品规格</i>
</div>
<div class="ts-tag-list">
<em v-for="(item, index) in newlist" :key="index" @click="selectsearch(item, index)" :class="[activeIndexa==index?'active':'unactive',item.leftAllotment>0?'':'disabled']">
<em v-for="(item, index) in newlist" :key="index" @click="selectsearch(item, index)" :class="[(activeIndexa==index && item.leftAllotment>0)?'active':'unactive',item.leftAllotment>0?'':'disabled']">
{{ item.specifications }}
</em>
</div>
@ -147,7 +153,7 @@
</div>
</div>
<div class="rc-main">
<div class="rc-produnnum">
<div class="rc-produnnum" v-if="(userbuy && curItem.leftAllotment>0)">
<div><i class="ts-row-title">商品数量</i></div>
<img
src="../../assets/image/userjian.png"
@ -187,15 +193,16 @@
<li>
<span
><i class="ts-row-title">商品编号</i
><i>{{ curItem.brandCode }}</i></span
><i>{{ curItem.productCode }}</i></span
>
</li>
</ul>
</div>
<div class="rc-button" v-if="userbuy">
<div class="rc-button" v-if="(userbuy && curItem.leftAllotment>0)">
<span @click="usertanchu(curItem, 0)">加入购物车</span>
<span @click="usertanchu(curItem, 1)">立即购买</span>
</div>
</div>
<div class="online bold rc-md-down"></div>
</div>
@ -207,8 +214,10 @@
</div>
<FixRight></FixRight>
<Myfooter v-on:litentop="showmesg"></Myfooter>
</div>
<el-dialog :visible.sync="dialogInfo1" @close="userclose" class="pop_coupon">
<el-dialog :visible.sync="dialogInfo1" @close="userclose" class="pop_coupon" :close-on-click-modal="false">
<div class="ts-no-data" v-if="usernewlist.length<=0">目前还没有可用的优惠券</div>
<div class="rs-dis">
<div
class="rc-discount"
@ -216,25 +225,32 @@
:key="index"
>
<img :src="userimage" alt="" />
<div class="rc-contair">
<div class="rc-left">
<div v-if="item.couponAmount">
<i></i><span>{{ item.couponAmount }}</span>
</div>
</div>
<div class="rc-right">
<i>
{{ item.couponDesc }}
</i>
<div>
<span>有效期</span>
<em>{{ item.validTo }}</em>
</div>
<div class="rc-footer">
<span @click="usergetconf(item)">立即领取</span>
</div>
</div>
</div>
<div class="rc-contair">
<div class="rc-left">
<div>
<i v-if="(item.couponTypeId!='4' && item.couponAmount>0)">
</i>
<span>
{{ item.couponAmount?item.couponAmount:(parseInt((item.discount)*10)+'折') }}
</span>
</div>
<strong>{{ item.couponName }}</strong>
</div>
<div class="rc-right">
<i>
{{ item.couponName }}
</i>
<div class="rc-userfont">
<strong>有效期</strong>
<span>{{item.validFrom}}</span>
<em>{{item.validTo}}</em>
</div>
<div class="rc-footer">
<span @click="usergetconf(item)">立即领取</span>
</div>
</div>
</div>
</div>
</div>
</el-dialog>
@ -254,10 +270,12 @@
</nuxt-link>
</div>
</el-dialog>
<div class="rc-button rc-md-down">
<div class="rc-button rc-md-down" v-if="(userbuy && curItem.leftAllotment>0)">
<span @click="usertanchu(curItem, 0)">加入购物车</span>
<span @click="usertanchu(curItem, 1)">立即购买</span>
</div>
</div>
</template>
@ -267,6 +285,8 @@ import tabs from "@/components/tabs.vue";
import FixRight from "~/components/fixed-right.vue";
import unlogin from "~/components/unlogin.vue";
import Myfooter from "~/components/rc-footer.vue";
import { mapMutations } from "vuex";
const settings = require("@/config");
import {
goodsmessage,
getConfig,
@ -276,26 +296,30 @@ import {
oncequery,
biaomessage
} from "../../ajax/getData";
import { mapMutations } from "vuex";
const settings = require("@/config");
export default {
async asyncData (context) {
let isRxGoods = context.route.query.isRxGoods;
let userbuy = true;
let newlist = [];
let curItem = {};
let chufang = {};
let productAttachmentList = [];
let userlistmenu = [];
isRxGoods = (isRxGoods == '1'?true:false);
let mainProductCode = context.route.query.mainProductCode;
let productCode = context.route.query.productCode;
let activeIndexa = 0;
if(!productCode || productCode.length<=0)
throw new Error('Empty product code');
productCode = productCode.split(",");
// console.log(this.productCode);
if(isRxGoods){
let data = await oncequery(mainProductCode);
let outputObj = {};
if (data) {
console.log(data);
chufang=data;
outputObj = data;
outputObj.productName = data.name;
outputObj.picture = 'https://royalcanincn.escase.cn/jc/royalcanin/'+outputObj.picture;
@ -306,6 +330,9 @@ export default {
let insertTmpObj = {id:1, attachmentType:1, sort:1, attachmentPath:newlist[0].picture};
productAttachmentList = [insertTmpObj];
userbuy = false;
console.log('这是处方量数据')
} else {
let stopLeftAllotmentChecking = false;
let stopIndex = 0;
@ -321,21 +348,33 @@ export default {
stopIndex++;
}
}
productAttachmentList = newlist[0].productAttachmentList;
if(curItem.productAttachmentList != undefined)
productAttachmentList = curItem.productAttachmentList;
if(curItem.productName == undefined)
curItem = newlist[0];
userbuy = true;
}
if(!curItem || curItem.productName == undefined)
throw new Error("商品信息错误");
let crumbs = [
{
path:'/productdetails/productlist/',
},
{
title: curItem.productName,
}
];
return {
crumbs,
activeIndexa,
curItem,
newlist,
chufang,
productAttachmentList,
userbuy
}
},
// middleware: 'metaTitle',
// // middleware: 'metaTitle',
// meta: {title: ''},
data() {
data() {
return {
tableLabelTest: [],
userimage: require("../../assets/image/unused.png"),
@ -354,6 +393,7 @@ export default {
productlist: [],
userbuy: true,
sales_num: 1,
productAttachmentList: [],
usernewlist: [
{
@ -373,20 +413,6 @@ export default {
catimage: require("../../assets/image/unused.png"),
},
],
fixedlist: [
{
title: "购物车",
catimage: require("../../assets/buy.png"),
},
{
title: "在线客服",
catimage: require("../../assets/service.png"),
},
{
title: "营养专家",
catimage: require("../../assets/consult.png"),
},
],
newlist: [
{
@ -417,6 +443,10 @@ export default {
Myfooter,
FixRight
},
// middleware: 'metaTitle',
// // middleware: 'metaTitle',
// meta: {title: ''},
mounted() {
this.checkIsLogin();
if (this.usermessage !== "" || this.usermessage.data !== undefined) {
@ -462,6 +492,10 @@ export default {
});
}
},
//
chuafangbuy(){
window.location.href =this.chufang.goodUrl;
},
// changeName(newName){
// this.name = newName;
@ -469,6 +503,7 @@ export default {
userclose() {
this.userlist = [];
this.dialogInfo1=false;
},
async userquery() {
let data = await goodsmessage(this.productCode);
@ -515,7 +550,7 @@ export default {
let alllist = [];
this.userlist = this.alldraw.data;
this.userlist.forEach((element, index) => {
if (typeof element.productCodes == "string") {
if (typeof element.productCodes == "string" || !element.productCodes) {
userlist.push(element);
// let s=element.productCodes.split(',');
// console.log(s.indexOf(this.productCode) != -1 )
@ -524,14 +559,36 @@ export default {
});
let menualist = [];
userlist.filter((item) => {
item.productCodes = item.productCodes.split(",");
item.productCodes.forEach((element) => {
if (element == this.productCode && item.activityId !== 10) {
console.log(element);
console.log(this.productCode);
menualist.push(item);
}
});
let valDateFromTime=0;
let valDateToTime=0;
let curTime = new Date().getTime();
let dateChecked=true;
if(item.fValidFrom) {
valDateFromTime = new Date(item.fValidFrom).getTime();
}
if(item.fValidTo) {
valDateToTime = new Date(item.fValidTo).getTime();
}
if(valDateFromTime && curTime < valDateFromTime) {
dateChecked=false;
}
if(valDateToTime && curTime > valDateToTime) {
dateChecked=false;
}
if(dateChecked && item.activityId!=10) {
if(!item.productCodes) {
menualist.push(item);
} else {
item.productCodes = item.productCodes.split(",");
item.productCodes.forEach((element) => {
if (element == this.curItem.productCode) {
menualist.push(item);
}
});
}
} else {
//Expired coupons
}
});
this.usernewlist = menualist;
}
@ -560,6 +617,8 @@ export default {
// let userid=JSON.parse(location.getItem('userInfo'));
// let mobile=JSON.parse(location.getItem('userInfo'));
// console.log(userid,mobile);
let basePoint = item.basePoint;
basePoint = basePoint?basePoint:0;
let data = await postCourseId(
item.productCode,
this.sales_num,
@ -567,9 +626,10 @@ export default {
this.usermessage.data.mobile,
item.picFile,
item.productName,
item.basePrice,
item.ecPrice,
item.specifications,
item.leftAllotment
item.leftAllotment,
basePoint
);
if (data) {
this.productlist = data;
@ -597,9 +657,11 @@ export default {
productName: item.productName,
productImg: item.picFile,
specifications: item.specifications,
buyCount: item.pcs,
memberId: "884258",
mobile: "13480231061",
leftAllotment: item.leftAllotment,
basePoint: item.basePoint,
buyCount: this.sales_num,
memberId: "",
mobile: "",
checked: true,
},
];
@ -619,7 +681,7 @@ export default {
this.dialogInfo2 = true;
return;
} else {
this.userdraw(this.usermessage.data.mobile);
//this.userdraw(this.usermessage.data.mobile);
this.alldrawlist(this.usermessage.data.id);
this.dialogInfo1 = true;
}
@ -630,6 +692,8 @@ export default {
this.activeIndexa = index;
this.curItem = item;
this.productAttachmentList = item.productAttachmentList;
this.crumbs.pop();
this.crumbs.push({title: item.productName});
},
},
@ -638,6 +702,5 @@ export default {
</script>
<style lang="less" scoped>
@import url("../../assets/css/global.less");
@import url("../../assets/css/producted.less");
</style>

View File

@ -110,7 +110,7 @@
</div>
<div class="rc-column">
<div class="rc-click" @click="selectproduce(item)">
<span>{{ item.categoryName }}</span>
<span>{{ item.name }}</span>
<i>{{ item.ecPrice?("¥"+item.ecPrice):'' }}</i>
</div>
<strong
@ -325,7 +325,6 @@ export default {
crumbs:[
{
path:'/productdetails/productlist/',
title:'产品列表',
}
],
value: "",

View File

@ -21,7 +21,7 @@
<div class="rc-max-width--xl rc-people rc-useaddress">
<span>详细地址:</span>
<input type="text" placeholder="小区、门牌号等" class="userinput" v-model="alladdress">
<textarea rows="10" cols="30" placeholder="请输入详细地址">
<textarea rows="10" cols="30" placeholder="请输入详细地址" v-model="alladdress">
</textarea>
</div>
@ -91,20 +91,18 @@ export default {
},
methods: {
onGetMenu(values){
console.log(values,+'111111');
let user=values[2].id;
user=user.split('-');
this.provinceId=user[0];
this.cityId=user[1];
this.districtId=user[2];
console.log(values,+'111111');
let user=values[2].id;
user=user.split('-');
this.provinceId=user[0];
this.cityId=user[1];
this.districtId=user[2];
},
handleClose1(){
this.dialogInfo1 = false
this.dialogInfo1 = false
},
register(){
console.log(this.tel)
if ( this.alladdress==='') {
if (this.alladdress==='') {
this.$message({
type: 'warning',
message: '请输入详细地址 '

View File

@ -2,6 +2,7 @@
<div>
<Myheader></Myheader>
<div class="rc-top"></div>
<tabs :crumbs="crumbs"></tabs>
<div class="online bold"></div>
<div class="usercontshow rc-max-width--xl">
<div class="usercontend" v-for="(item, index) in list" :key="index">
@ -67,10 +68,19 @@
<script>
import Myheader from '~/components/header.vue'
import MyFooter from '~/components/rc-footer.vue'
import tabs from "~/components/tabs.vue";
import { selectaddress,editupdate,editdelete} from "../../ajax/getData";
export default {
data() {
return {
crumbs:[
{
path:'/personal/mypersonal/',
},
{
path:'/useraddress/openaddress/',
}
],
chosenAddressId: "1",
checked: true,
userid: null,
@ -176,7 +186,8 @@ export default {
},
components: {
Myheader,
MyFooter
MyFooter,
tabs
},
mounted() {
@ -191,6 +202,5 @@ export default {
</script>
<style lang="less" scoped >
@import url("../../assets/css/global.less");
@import url("../../assets/css/openaddress.less");
</style>

View File

@ -256,10 +256,14 @@ export default {
else{
//let user= JSON.parse(localStorage.getItem("userInfo"));
let data = await this.vadmsg();
if(data.code=="1")
console.log(data.code)
if(data.code=1)
{
console.log('---');
data=await useredit(this.tel);
if(data.code=='1'){
console.log(this.tel);
console.log(data);
if(data.code=1){
let couponId='0000000123';
this.serdiscount(this.tel,couponId);
setTimeout(() => {

View File

@ -75,14 +75,40 @@
<label>
<input
type="checkbox"
@click="checkBox()"
style="width: 24px; height: 24px"
@click="checkBox($event,2)"
v-model="inRank"
/>使
/>
<strong>本人已年满16周岁,同意并接受公司按<a href="https://royalcanin.com.cn/privacy"><i>隐私政策</i></a><a href="https://royalcanin.com.cn/declaration"><i>法律声明</i></a>的规定收集和处理我的个人信息
您可以就隐私问题通过隐私政策中的方式联系我们并行使您的个人信息权利</strong>
</label>
</div>
<div class="usecheck rc-column rc-text--left">
<label>
<input
type="checkbox"
@click="checkBox($event,3)"
v-model="inRanka"
/>
<strong>
我已阅读和了解皇家爱宠荟的<a href="https://royalcanin.com.cn/member-principle"><i>会员规则</i></a>并同意接受其中所有的条框</strong>
</label>
</div>
<div class="usecheck rc-column rc-text--left">
<label>
<input
type="checkbox"
@click="checkBox($event,1)"
v-model="allcheck"
/>
<i>
一键勾选
</i>
</label>
</div>
</div>
<div class="rc-layout-container rc-two-column rc-button">
<!-- <div class="rc-layout-container rc-two-column rc-button">
<div class="rc-column rc-text--left">
<a href="https://royalcanin.com.cn/privacy" target="_blank" class="rc-styled-link"><span>隐私政策</span></a>
</div>
@ -91,7 +117,7 @@
<span>注册账户</span>
</nuxt-link>
</div>
</div>
</div> -->
<div class="rc-layout-container rc-one-column">
<div class="rc-column">
@ -126,8 +152,14 @@ export default {
layerMSg: "手机格式不对",
tel: "",
password: "",
allcheck:false,
activeIndex: 0,
tamp:'',
radioData: [
{ value: '全部' ,href:'https://royalcanin.com.cn/privacy' },
{ value: '部分' ,href:''},
{ value: '零散' }
],
hash:'',
text: "",
sms: "",
@ -141,6 +173,7 @@ export default {
ifpassword: false,
checked: false,
inRank: false,
inRanka: false,
usercheckbox:false,
swiperData: [
@ -188,13 +221,20 @@ export default {
// console.log(this.inRank);
// },
methods: {
...mapMutations(["changeClod"]),
checkBox(){
console.log(event.target.checked)
this.usercheckbox=event.target.checked
//
checkBoxa(e,order){
let checked=e.target.checked;
console.log(checked)
},
checkBox(e,order){
console.log(e.target.checked)
this.usercheckbox=e.target.checked;
this.inRank= this.usercheckbox;
},
...mapMutations(["changeClod"]),
//
async usermsg() {
//console.log("-----");

View File

@ -1,11 +1,8 @@
<template>
<div>
<transition name="fade">
<div class="userloding" v-show="isLoading"></div>
</transition>
<Myheader></Myheader>
<div class="rc-top"></div>
<tabs :crumbs="crumbs"></tabs>
<div class="rc-max-width--xl rc-main">
<div class="usersearch">
<div class="form-search">
@ -41,7 +38,7 @@
</li>
</ul>
</div>
<div class="usersearch">
<div class="usersearch rc-margin-top--md">
<div class="usercontentshow" ref="usercontent">
<div class="usercontentshow rc-product">
<h2>我想搜</h2>
@ -121,7 +118,7 @@
</div>
<div class="rc-column">
<div class="rc-click" @click="selectproduce(item)">
<span>{{ item.categoryName }}</span>
<span>{{ item.name }}</span>
<i>{{ item.ecPrice?("¥"+item.ecPrice):'' }}</i>
</div>
<strong
@ -224,6 +221,7 @@
</div>
</div>
<div class="rc-button">
<span @click="openclose()">取消</span>
<em @click="openclose()">确认</em>
@ -308,10 +306,12 @@
</div>
</div>
</div>
<!--
<div class="rc-button rc-padding-bottom--md">
<span @click="openclose()">取消</span>
<em @click="openclose()">确认</em>
</div>
-->
</el-dialog>
</div>
<!-- rc-main end -->
@ -329,13 +329,18 @@
import Myheader from "~/components/header.vue";
import MyFooter from '~/components/rc-footer.vue'
import FixRight from "~/components/fixed-right.vue";
import tabs from "~/components/tabs.vue";
import { biaome, userstype, searchchanpin, userquery } from "../../ajax/getData";
export default {
data() {
return {
value: "",
crumbs:[
{
path:'/usersearch/search/',
}
],
isLoading: true,
userserachlist: [
{
categoryName: [], //
@ -516,7 +521,8 @@ export default {
components: {
Myheader,
MyFooter,
FixRight
FixRight,
tabs
},
mounted() {
this.usetmessage();

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

@ -0,0 +1,28 @@
//时间戳转化成格式时间
import Vue from 'vue';
Vue.prototype.formatConversion = function (te){
if(te == ''){
return '';
}else if(te.length == 10){
var time = new Date(te * 1000); //时间戳为10位需*1000时间戳为13位的话不需乘1000
var y = time.getFullYear();
var m = time.getMonth() < 9 ? '0' + (time.getMonth() + 1) : time.getMonth() + 1;
var d = time.getDate() < 10 ? '0' + time.getDate() : time.getDate();
var h = time.getHours() < 10 ? '0' + time.getHours() : time.getHours();
var mm = time.getMinutes() < 10 ? '0' + time.getMinutes() : time.getMinutes();
var s = time.getSeconds() < 10 ? '0' + time.getSeconds() : time.getSeconds();
var timedate = y + '-' + m + '-' + d + ' ' + h + ':' + mm + ':' + s;
return timedate;
}else{
var time = new Date(te);
var y = time.getFullYear();
var m = time.getMonth() < 9 ? '0' + (time.getMonth() + 1) : time.getMonth() + 1;
var d = time.getDate() < 10 ? '0' + time.getDate() : time.getDate();
var h = time.getHours() < 10 ? '0' + time.getHours() : time.getHours();
var mm = time.getMinutes() < 10 ? '0' + time.getMinutes() : time.getMinutes();
var s = time.getSeconds() < 10 ? '0' + time.getSeconds() : time.getSeconds();
var timedate = y + '-' + m + '-' + d + ' ' + h + ':' + mm + ':' + s;
return timedate;
}
}

View File

@ -44,6 +44,7 @@ public class ResponseDTO<T> {
this.success = responseCodeConst.isSuccess();
}
private ResponseDTO(ResponseCodeConst responseCodeConst) {
this.code = responseCodeConst.getCode();
this.msg = responseCodeConst.getMsg();
@ -64,6 +65,8 @@ public class ResponseDTO<T> {
return new ResponseDTO(ResponseCodeConst.SUCCESS, data, msg);
}
public static <T> ResponseDTO<T> succData(T data) {
return new ResponseDTO(ResponseCodeConst.SUCCESS, data);
}

View File

@ -1,6 +1,5 @@
package net.lab1024.smartadmin.module.system.alipay;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradePrecreateModel;
@ -13,7 +12,6 @@ import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.QueryEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.UUID;
@Service

View File

@ -1,5 +1,6 @@
package net.lab1024.smartadmin.module.system.alipay;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
@ -10,10 +11,21 @@ import com.alipay.api.response.AlipayTradePrecreateResponse;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import net.lab1024.smartadmin.common.anno.OperateLog;
import net.lab1024.smartadmin.common.heartbeat.StringUtil;
import net.lab1024.smartadmin.constant.SwaggerTagConst;
import net.lab1024.smartadmin.module.system.alipay.alipayModel.AliPayEntity;
import net.lab1024.smartadmin.module.system.alipay.conf.AlipayConfig;
import net.lab1024.smartadmin.module.system.qrcode.QRCodeUtil;
import net.lab1024.smartadmin.module.system.royalcanin.MemberAccountService;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderEntity;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.ProductMasterQueryEntity;
import net.lab1024.smartadmin.module.system.royalcanin.good.service.OrderService;
import net.lab1024.smartadmin.module.system.royalcanin.memberAccount.MemberAccountChangeEntity;
import net.lab1024.smartadmin.module.system.royalcanin.notify.model.NotifyEntity;
import net.lab1024.smartadmin.module.system.royalcanin.notify.service.NotifyService;
import net.lab1024.smartadmin.util.MapRemoveNullUtil;
import net.lab1024.smartadmin.util.SmartHttpUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -23,7 +35,7 @@ import java.util.Iterator;
import java.util.Map;
import java.util.UUID;
@Api(tags = {SwaggerTagConst.Admin.MANAGER_MALL_PAY_API})
@Api(tags = {SwaggerTagConst.Admin.MANAGER_MALL_API})
@OperateLog
@Slf4j
@RestController
@ -32,6 +44,17 @@ public class AlipayController {
public static String notify_url = "";
@Autowired
private OrderService orderService;
String url = "https://miniapp-test.royalcanin.com.cn/rcmini/h5/";
@Autowired
private MemberAccountService memberAccountService;
@Autowired
private NotifyService notifyService;
/**
* @Description: 前往支付宝第三方网关进行支付
*/
@ -65,47 +88,88 @@ public class AlipayController {
}
//
// @RequestMapping("royalcanin/updateOrderAliPay")
// public String returnUrl(HttpServletRequest request) throws Exception {
// Map<String,String> params = new HashMap<String,String>();
// Map<String,String[]> requestParams = request.getParameterMap();
// for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
// String name = (String) iter.next();
// String[] values = (String[]) requestParams.get(name);
// String valueStr = "";
// for (int i = 0; i < values.length; i++) {
// valueStr = (i == values.length - 1) ? valueStr + values[i]
// : valueStr + values[i] + ",";
// }
// //乱码解决这段代码在出现乱码时使用(如果感觉自己配置没问题然后验签一直失败就把这个注释掉试试反正我的是这个问题)
// //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
// params.put(name, valueStr);
// }
// System.out.println("params:"+params);
// boolean signVerified = AlipaySignature.rsaCheckV1(params,AlipayConfig.alipay_public_key,AlipayConfig.charset,AlipayConfig.sign_type); //调用SDK验证签名
// System.out.println(signVerified);
// //请在这里编写您的程序以下代码仅作参考
// if(signVerified) {
// // 更新订单状态
// //商户订单号
// String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
// //付款金额
// String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");
//
//
// //支付宝交易号
// String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
// OrderEntity orderEntity = orderService.findByOrderId(out_trade_no);
// String[] products = orderEntity.getProductCode().split(",");
// ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
// double basePoint = 0;
// //自动获取会员积分
// for (String product : products) {
// productMasterQueryEntity.setProductCode(product);
// Map<String, String> paramMap = MapRemoveNullUtil.setConditionMap(productMasterQueryEntity);
// MapRemoveNullUtil.removeNullEntry(paramMap);
// paramMap.put("secret", "H5@2021");
// paramMap.put("channelId", "15");
// String sb = SmartHttpUtil.sendPostForm(url + "productMaster/query", paramMap, null);
// JSONObject jsonObject = JSONObject.parseObject(sb);
// com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(jsonObject.getString("data"));
// JSONObject jsonObjectData = (JSONObject) jsonArray.get(0);
// basePoint = basePoint + Double.parseDouble(jsonObjectData.getString("basePoint"));
// }
// MemberAccountChangeEntity memberAccountChangeEntity = new MemberAccountChangeEntity();
// memberAccountChangeEntity.setChangeTypeId("1");
// memberAccountChangeEntity.setChangeValue(StringUtil.toString(basePoint));
// memberAccountChangeEntity.setMemberId(orderEntity.getMemberId());
// memberAccountService.memberAccountChange(memberAccountChangeEntity);
// NotifyEntity notifyEntity = new NotifyEntity();
// notifyEntity.setAppId(AlipayConfig.app_id);
// notifyEntity.setMchId(request.getParameter("seller_id"));
// notifyEntity.setSign(request.getParameter("sign"));
// notifyEntity.setResultCode(request.getParameter("code"));
// notifyEntity.setOpenid(request.getParameter("merchant_order_no"));
// notifyEntity.setOutTradeNo(out_trade_no);
// notifyEntity.setTotalFee(total_amount);
// notifyEntity.setTradeType(request.getParameter("sub_code"));
// notifyEntity.setFeeType("CNY");
// notifyEntity.setNonceStr(trade_no);
// notifyService.insertNotify(notifyEntity);
//
//
//
//
//
//
// String trade_status= new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
// System.out.println("trade_status"+trade_status);
// return "trade_no:"+trade_no+"<br/>out_trade_no:"+out_trade_no+"<br/>total_amount:"+total_amount;
// }else {
// return "验签失败";
// }
// }
@RequestMapping("royalcanin/updateOrderAliPay")
public String returnUrl(HttpServletRequest request) throws UnsupportedEncodingException, AlipayApiException{
Map<String,String> params = new HashMap<String,String>();
Map<String,String[]> requestParams = request.getParameterMap();
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
String name = (String) iter.next();
String[] values = (String[]) requestParams.get(name);
String valueStr = "";
for (int i = 0; i < values.length; i++) {
valueStr = (i == values.length - 1) ? valueStr + values[i]
: valueStr + values[i] + ",";
}
//乱码解决这段代码在出现乱码时使用(如果感觉自己配置没问题然后验签一直失败就把这个注释掉试试反正我的是这个问题)
//valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");
params.put(name, valueStr);
}
System.out.println("params:"+params);
boolean signVerified = AlipaySignature.rsaCheckV1(params,AlipayConfig.alipay_public_key,AlipayConfig.charset,AlipayConfig.sign_type); //调用SDK验证签名
System.out.println(signVerified);
//请在这里编写您的程序以下代码仅作参考
if(signVerified) {
//商户订单号
String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");
//支付宝交易号
String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");
//付款金额
String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");
String trade_status= new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");
System.out.println("trade_status"+trade_status);
return "trade_no:"+trade_no+"<br/>out_trade_no:"+out_trade_no+"<br/>total_amount:"+total_amount;
}else {
return "验签失败";
}
}
@RequestMapping(value = "/alipayNotifyNotice")
@ResponseBody
public String alipayNotifyNotice(HttpServletRequest request, HttpServletRequest response) throws Exception {
@ -151,6 +215,7 @@ public class AlipayController {
String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"), "UTF-8");
if (trade_status.equals("TRADE_FINISHED")) {
return "TRADE_FINISHED";
//判断该笔订单是否在商户网站中已经做过处理
//如果没有做过处理根据订单号out_trade_no在商户网站的订单系统中查到该笔订单的详细并执行商户的业务程序
//如果有做过处理不执行商户的业务程序
@ -167,23 +232,48 @@ public class AlipayController {
// 修改叮当状态改为 支付成功已付款; 同时新增支付流水
// ordersService.updateOrderStatus(out_trade_no, trade_no, total_amount);
//
// //这里不用 只是为了 看日志 查的方法应该卸载 同步回调 页面
// Orders order = ordersService.getOrderById(out_trade_no);
// Product product = productService.getProductById(order.getProductId());
//
// LOGGER.info("********************** 支付成功(支付宝异步通知)查询 只是为了 看日志 **********************");
// LOGGER.info("* 订单号: {}", out_trade_no);
// LOGGER.info("* 支付宝交易号: {}", trade_no);
// LOGGER.info("* 实付金额: {}", total_amount);
// LOGGER.info("* 购买产品: {}", product.getName());
// LOGGER.info("***************************************************************");
OrderEntity orderEntity = orderService.findByOrderId(out_trade_no);
String[] products = orderEntity.getProductCode().split(",");
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
double basePoint = 0;
//自动获取会员积分
for (String product : products) {
productMasterQueryEntity.setProductCode(product);
Map<String, String> paramMap = MapRemoveNullUtil.setConditionMap(productMasterQueryEntity);
MapRemoveNullUtil.removeNullEntry(paramMap);
paramMap.put("secret", "H5@2021");
paramMap.put("channelId", "15");
String sb = SmartHttpUtil.sendPostForm(url + "productMaster/query", paramMap, null);
JSONObject jsonObject = JSONObject.parseObject(sb);
com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(jsonObject.getString("data"));
JSONObject jsonObjectData = (JSONObject) jsonArray.get(0);
basePoint = basePoint + Double.parseDouble(jsonObjectData.getString("basePoint"));
}
MemberAccountChangeEntity memberAccountChangeEntity = new MemberAccountChangeEntity();
memberAccountChangeEntity.setChangeTypeId("1");
memberAccountChangeEntity.setChangeValue(StringUtil.toString(basePoint));
memberAccountChangeEntity.setMemberId(orderEntity.getMemberId());
memberAccountService.memberAccountChange(memberAccountChangeEntity);
NotifyEntity notifyEntity = new NotifyEntity();
notifyEntity.setAppId(AlipayConfig.app_id);
notifyEntity.setMchId(request.getParameter("seller_id"));
notifyEntity.setSign(request.getParameter("sign"));
notifyEntity.setResultCode(request.getParameter("code"));
notifyEntity.setOpenid(request.getParameter("merchant_order_no"));
notifyEntity.setOutTradeNo(out_trade_no);
notifyEntity.setTotalFee(total_amount);
notifyEntity.setTradeType(request.getParameter("sub_code"));
notifyEntity.setFeeType("CNY");
notifyEntity.setNonceStr(trade_no);
notifyService.insertNotify(notifyEntity);
}else {
return "验签失败";
}
// LOGGER.info("支付成功...");
} else {//验证失败
// LOGGER.info("支付, 验签失败...");
return "支付, 验签失败";
}
return "success";

View File

@ -21,7 +21,7 @@ public class MemberService {
public String memberGet(MemberGetEntity memberGetEntity, HttpServletRequest request)throws Exception {
public String memberGet(MemberGetEntity memberGetEntity)throws Exception {
Map<String, String> paramMap = MapRemoveNullUtil.setConditionMap(memberGetEntity);
paramMap.put("id",StringUtil.toString(memberGetEntity.getId()).equals("0")?null:StringUtil.toString(memberGetEntity.getId()));
MapRemoveNullUtil.removeNullEntry(paramMap);
@ -31,9 +31,10 @@ public class MemberService {
JSONObject json = JSONObject.parseObject(jsonObject.getString("data"));
String id = json.getString("id");
jsonObject.put("xaccessToken", SmartJWTUtil.generateToken(id));
jsonObject.put("type","1");
return jsonObject.toJSONString();
}else {
return sb;
return jsonObject.toJSONString();
}
}
public String memberCheck(MemberCheckEntity memberCheckEntity)throws Exception {
@ -42,7 +43,7 @@ public class MemberService {
return SmartHttpUtil.sendPostForm(url+"check",paramMap,null);
}
public String memberAdd(MemberAddEntity memberAddEntity)throws Exception {
public String memberAdd(MemberAddEntity memberAddEntity){
Map<String, String> paramMap = MapRemoveNullUtil.setConditionMap(memberAddEntity);
paramMap.put("cityId",StringUtil.toString(memberAddEntity.getCityId()).equals("0")?null:StringUtil.toString(memberAddEntity.getCityId()));
paramMap.put("gender",StringUtil.toString(memberAddEntity.getGender()).equals("0")?null:StringUtil.toString(memberAddEntity.getGender()));
@ -50,7 +51,17 @@ public class MemberService {
paramMap.put("provinceId",StringUtil.toString(memberAddEntity.getProvinceId()).equals("0")?null:StringUtil.toString(memberAddEntity.getProvinceId()));
MapRemoveNullUtil.removeNullEntry(paramMap);
net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(paramMap);
return SmartHttpUtil.httpPostRaw(url+"add",jsonObject.toString(),null,"utf-8");
String sb = SmartHttpUtil.httpPostRaw(url+"add",jsonObject.toString(),null,"utf-8");
JSONObject jsonObjectResult = JSONObject.parseObject(sb);
if(jsonObjectResult.getString("code").equals("0")){
JSONObject json = JSONObject.parseObject(jsonObjectResult.getString("data"));
String id = json.getString("id");
jsonObjectResult.put("xaccessToken", SmartJWTUtil.generateToken(id));
jsonObjectResult.put("type","2");
return jsonObjectResult.toJSONString();
}else {
return jsonObjectResult.toJSONString();
}
}
public String memberUpdateMemberLevel(MemberUpdateMemberLevelEntity memberUpdateMemberLevelEntity)throws Exception {

View File

@ -4,7 +4,6 @@ import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.log4j.Log4j2;
import net.lab1024.smartadmin.common.anno.OperateLog;
import net.lab1024.smartadmin.common.domain.ResponseDTO;
import net.lab1024.smartadmin.common.heartbeat.StringUtil;
@ -14,8 +13,6 @@ import net.lab1024.smartadmin.module.system.royalcanin.couponConfig.CouponConfig
import net.lab1024.smartadmin.module.system.royalcanin.couponConfig.CouponConfigGetEntity;
import net.lab1024.smartadmin.module.system.royalcanin.domain.RoyalcaninOperateLogEntity;
import net.lab1024.smartadmin.module.system.royalcanin.domain.RoyalcaninOperateLogService;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderEntity;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.ProductMasterQueryEntity;
import net.lab1024.smartadmin.module.system.royalcanin.good.service.GoodService;
import net.lab1024.smartadmin.module.system.royalcanin.good.service.OrderService;
import net.lab1024.smartadmin.module.system.royalcanin.member.*;
@ -27,16 +24,14 @@ import net.lab1024.smartadmin.module.system.royalcanin.memberAddress.MemberAddre
import net.lab1024.smartadmin.module.system.royalcanin.memberAddress.MemberAddressUpdateEntity;
import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.AddOrSaveEntity;
import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.QueryEntity;
import net.lab1024.smartadmin.util.MapRemoveNullUtil;
import net.lab1024.smartadmin.util.SmartHttpUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Map;
@Api(tags = {SwaggerTagConst.Admin.MANAGER_MALL_API})
@ -78,13 +73,13 @@ public class TransitionController {
switch (type)
{
case "get":
result = memberService.memberGet(objectMapper.convertValue(object,MemberGetEntity.class),request);
result = memberService.memberGet(objectMapper.convertValue(object,MemberGetEntity.class)).toString();
break;
case "check":
result = memberService.memberCheck(objectMapper.convertValue(object,MemberCheckEntity.class));
break;
case "add":
result = memberService.memberAdd(objectMapper.convertValue(object,MemberAddEntity.class));
result = memberService.memberAdd(objectMapper.convertValue(object,MemberAddEntity.class)).toString();
break;
case "updateMemberLevel":
result = memberService.memberUpdateMemberLevel(objectMapper.convertValue(object, MemberUpdateMemberLevelEntity.class));
@ -101,6 +96,28 @@ public class TransitionController {
return result;
}
@ApiOperation(value = "登录或注册", notes = "会员查询,登录注册")
@PostMapping("royalcanin/regOrLogin")
public String regOrLogin(@RequestParam String phoneNumber) throws Exception {
MemberCheckEntity memberCheckEntity = new MemberCheckEntity();
memberCheckEntity.setMobile(phoneNumber);
JSONObject jsonObject = JSONObject.parseObject(memberService.memberCheck(memberCheckEntity));
if(jsonObject.getString("code").equals("103")){
MemberGetEntity memberGetEntity = new MemberGetEntity ();
memberGetEntity.setMobile(phoneNumber);
return memberService.memberGet(memberGetEntity);
}else if(jsonObject.getString("code").equals("0")){
MemberAddEntity memberAddEntity = new MemberAddEntity();
memberAddEntity.setMobile(phoneNumber);
return memberService.memberAdd(memberAddEntity);
}else{
return null;
}
}
@ApiOperation(value = "会员地址", notes = "查询会员地址,添加会员地址,更新会员地址,删除会员地址")
@PostMapping("royalcanin/memberAddress")
public String transferMemberAddress(String type ,@RequestBody Object object, HttpServletRequest request) throws Exception {

View File

@ -3,6 +3,7 @@ package net.lab1024.smartadmin.module.system.royalcanin.good;
import com.alibaba.fastjson.JSONObject;
import com.alipay.api.internal.util.AlipaySignature;
import com.beust.jcommander.Parameter;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.lab1024.smartadmin.common.anno.OperateLog;
@ -12,6 +13,8 @@ import net.lab1024.smartadmin.constant.SwaggerTagConst;
import net.lab1024.smartadmin.module.system.alipay.AliPayService;
import net.lab1024.smartadmin.module.system.alipay.alipayModel.AliPayEntity;
import net.lab1024.smartadmin.module.system.alipay.conf.AlipayConfig;
import net.lab1024.smartadmin.module.system.royalcanin.CouponService;
import net.lab1024.smartadmin.module.system.royalcanin.coupon.CouponGetAllEntity;
import net.lab1024.smartadmin.module.system.royalcanin.good.constant.OrderResponseCodeConst;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderAddress;
import net.lab1024.smartadmin.module.system.royalcanin.good.model.OrderEntity;
@ -20,15 +23,20 @@ import net.lab1024.smartadmin.module.system.royalcanin.good.service.CartService;
import net.lab1024.smartadmin.module.system.royalcanin.good.service.OrderService;
import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.OrderDatilListEntity;
import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.QueryEntity;
import net.lab1024.smartadmin.module.system.wxpay.MyConfig;
import net.lab1024.smartadmin.module.system.wxpay.WxpayService;
import net.lab1024.smartadmin.module.system.wxpay.wxPayModel.WxPayEntity;
import net.lab1024.smartadmin.util.GenerateSequenceUtil;
import net.sf.json.JSONArray;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.*;
@Api(tags = {SwaggerTagConst.Admin.MANAGER_MALL_API})
@ -48,10 +56,13 @@ public class OrderController {
@Autowired
private CartService cartService;
@Autowired
private CouponService couponService;
@ApiOperation(value = "微信支付订单", notes = "生成订单")
@PostMapping("royalcanin/generateOrderWX")
public ResponseDTO<String> generateOrderWX(@RequestBody List<OrdersEntity> ordersEntityList) throws Exception {
public ResponseDTO<Map<String, String>> generateOrderWX(@RequestBody List<OrdersEntity> ordersEntityList) throws Exception {
StringBuffer productId = new StringBuffer();
StringBuffer productName = new StringBuffer();
String memberId = "";
@ -73,10 +84,18 @@ public class OrderController {
orderDatilListEntity.setEcPrice(ordersEntitys.getPayAmount());
orderDatilListJson.add(orderDatilListEntity);
if(ordersEntitys.getCouponCode() != "" && ordersEntitys.getCouponCode() != null) {
ordersEntity.setCouponAmount(ordersEntitys.getCouponAmount());
ordersEntity.setCouponCode(ordersEntitys.getCouponCode());
ordersEntity.setCouponName(ordersEntitys.getCouponName());
ordersEntity.setCouponId(ordersEntitys.getCouponId());
CouponGetAllEntity couponGetAllEntity = new CouponGetAllEntity ();
couponGetAllEntity.setMemberId(ordersEntitys.getMemberId());
couponGetAllEntity.setCouponCode(ordersEntitys.getCouponCode());
String couponInfo = couponService.couponGetAll(couponGetAllEntity);
JSONObject jsonObject = JSONObject.parseObject(couponInfo);
com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(jsonObject.getString("data"));
JSONObject jsonObjectData = (JSONObject)jsonArray.get(0);
ordersEntity.setCouponAmount(jsonObjectData.getString("couponAmount") == null ?jsonObjectData.getString("discount"):jsonObjectData.getString("couponAmount"));
ordersEntity.setCouponCode(jsonObjectData.getString("couponCode"));
ordersEntity.setCouponName(jsonObjectData.getString("couponName"));
ordersEntity.setCouponId(jsonObjectData.getString("couponId"));
total_fee = total_fee + orderService.couponTotal(ordersEntitys.getCouponTypeId(),Double.parseDouble(ordersEntitys.getCouponAmount()),Double.parseDouble(ordersEntitys.getPayAmount()),ordersEntitys.getBuyCount());
}else{
total_fee = total_fee + Double.parseDouble(ordersEntitys.getPayAmount()) * ordersEntitys.getBuyCount() ;
@ -109,7 +128,11 @@ public class OrderController {
wxPayEntity.setProduct_id(ordersEntity.getProductCode());
wxPayEntity.setTotal_fee(StringUtil.toString(total_fee));
wxPayEntity.setOut_trade_no(ordersEntity.getOrderNo());
return ResponseDTO.succData(ordersEntity.getOrderNo(),wxpayService.generateQRCode(wxPayEntity));
Map<String, String> returnMap = new HashMap<>();
returnMap.put("orderNumber",ordersEntity.getOrderNo());
returnMap.put("orderAmount",ordersEntity.getOrderAmount());
// return ResponseDTO.succData(returnMap,wxpayService.generateQRCode(wxPayEntity));
return ResponseDTO.succData(returnMap,wxpayService.testGenerateQRCode(wxPayEntity));
}
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_FAIL);
}
@ -117,13 +140,14 @@ public class OrderController {
@ApiOperation(value = "微信支付H5订单", notes = "生成H5订单")
@PostMapping("royalcanin/generateOrderWXH5")
public Map<String, String> generateOrderWXH5(@RequestBody List<OrdersEntity> ordersEntityList) throws Exception {
public ResponseDTO<Map<String, String>> generateOrderWXH5(@RequestBody List<OrdersEntity> ordersEntityList) throws Exception {
StringBuffer productId = new StringBuffer();
StringBuffer productName = new StringBuffer();
String memberId = "";
String mobile = "";
int buyCount = 0;
double total_fee = 0 ;
double basePoint = 0 ;
WxPayEntity wxPayEntity = new WxPayEntity();
JSONArray orderDatilListJson = new JSONArray();
OrdersEntity ordersEntity = new OrdersEntity();
@ -138,14 +162,23 @@ public class OrderController {
orderDatilListEntity.setEcPrice(ordersEntitys.getPayAmount());
orderDatilListJson.add(orderDatilListEntity);
if(ordersEntitys.getCouponCode() != "" && ordersEntitys.getCouponCode() != null) {
ordersEntity.setCouponAmount(ordersEntitys.getCouponAmount());
ordersEntity.setCouponCode(ordersEntitys.getCouponCode());
ordersEntity.setCouponName(ordersEntitys.getCouponName());
ordersEntity.setCouponId(ordersEntitys.getCouponId());
CouponGetAllEntity couponGetAllEntity = new CouponGetAllEntity ();
couponGetAllEntity.setMemberId(ordersEntitys.getMemberId());
couponGetAllEntity.setCouponCode(ordersEntitys.getCouponCode());
String couponInfo = couponService.couponGetAll(couponGetAllEntity);
JSONObject jsonObject = JSONObject.parseObject(couponInfo);
com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(jsonObject.getString("data"));
JSONObject jsonObjectData = (JSONObject)jsonArray.get(0);
ordersEntity.setCouponAmount(jsonObjectData.getString("couponAmount") == null ?jsonObjectData.getString("discount"):jsonObjectData.getString("couponAmount"));
ordersEntity.setCouponCode(jsonObjectData.getString("couponCode"));
ordersEntity.setCouponName(jsonObjectData.getString("couponName"));
ordersEntity.setCouponId(jsonObjectData.getString("couponId"));
total_fee = total_fee + orderService.couponTotal(ordersEntitys.getCouponTypeId(),Double.parseDouble(ordersEntitys.getCouponAmount()),Double.parseDouble(ordersEntitys.getPayAmount()),ordersEntitys.getBuyCount());
}else{
total_fee = total_fee + Double.parseDouble(ordersEntitys.getPayAmount()) * ordersEntitys.getBuyCount() ;
}
basePoint = basePoint + ordersEntitys.getBasePoint();
orderAddress.setAddressCityName(ordersEntitys.getOrderAddress().getAddressCityName());
orderAddress.setAddressCountyName(ordersEntitys.getOrderAddress().getAddressCountyName());
orderAddress.setAddressDetailInfo(ordersEntitys.getOrderAddress().getAddressDetailInfo());
@ -154,7 +187,6 @@ public class OrderController {
orderAddress.setAddressProvinceName(ordersEntitys.getOrderAddress().getAddressProvinceName());
productId.append(ordersEntitys.getProductCode()+",");
productName.append(ordersEntitys.getProductName()+",");
memberId = ordersEntitys.getMemberId();
mobile = ordersEntitys.getPhoneNumber();
buyCount = buyCount + ordersEntitys.getBuyCount();
@ -168,18 +200,23 @@ public class OrderController {
ordersEntity.setBuyCount(buyCount);
ordersEntity.setOrderNo(GenerateSequenceUtil.generateSequenceNo());
ordersEntity.setOrderStatus("0");
ordersEntity.setBasePoint(basePoint);
ordersEntity.setPayType("3");
if(orderService.generateOrder(ordersEntity,orderDatilListJson) == 1){
wxPayEntity.setProduct_id(ordersEntity.getProductCode());
wxPayEntity.setTotal_fee(StringUtil.toString(total_fee));
wxPayEntity.setOut_trade_no(ordersEntity.getOrderNo());
return wxpayService.dounifiedOrder(wxPayEntity);
}else {
return null;
Map<String, String> returnMap = new HashMap<>();
returnMap.put("orderNumber",ordersEntity.getOrderNo());
returnMap.put("orderAmount",ordersEntity.getOrderAmount());
return ResponseDTO.succData(returnMap,wxpayService.dounifiedOrder(wxPayEntity));
}
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_FAIL);
}
@ApiOperation(value = "重新支付", notes = "重新支付")
@ApiOperation(value = "重新支付(二维码)", notes = "重新支付(二维码)")
@PostMapping("royalcanin/repayOrderWX")
public ResponseDTO<String> repayOrderWX(String orderNo) throws Exception {
OrderEntity ordersEntity = orderService.findByOrderId(orderNo);
@ -194,7 +231,40 @@ public class OrderController {
wxPayEntity.setProduct_id(ordersEntity.getProductCode());
wxPayEntity.setTotal_fee(jsonObject.getString("salesAmount"));
wxPayEntity.setOut_trade_no(ordersEntity.getOrderNo());
return ResponseDTO.succData(orderInfo, wxpayService.generateQRCode(wxPayEntity));
return ResponseDTO.succData(orderNo, wxpayService.generateQRCode(wxPayEntity));
}else {
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_ERROR,orderInfo);
}
}else {
return ResponseDTO.wrap(OrderResponseCodeConst.WITHOUT_ORDER);
}
}
@ApiOperation(value = "重定向", notes = "重定向")
@PostMapping("royalcanin/redirectUrlWXH5")
public void redirectUrl(HttpServletRequest request, HttpServletResponse response,@RequestBody String url) throws IOException {
response.addHeader("referer", MyConfig.NOTIFY_URL_H5);
JSONObject jonUrl = JSONObject.parseObject(url);
response.sendRedirect(jonUrl.getString("url"));
}
@ApiOperation(value = "重新支付H5", notes = "重新支付H5")
@PostMapping("royalcanin/repayOrderWXH5")
public ResponseDTO<String> repayOrderWXH5(String orderNo) throws Exception {
OrderEntity ordersEntity = orderService.findByOrderId(orderNo);
if(ordersEntity != null){
QueryEntity queryEntity = new QueryEntity();
queryEntity.setOrderNumber(ordersEntity.getOrderNo());
String orderInfo = orderService.query(queryEntity);
com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(orderInfo);
JSONObject jsonObject = (JSONObject)jsonArray.get(0);
if(jsonObject.getString("status").equals("0")) {
WxPayEntity wxPayEntity = new WxPayEntity();
wxPayEntity.setProduct_id(ordersEntity.getProductCode());
wxPayEntity.setTotal_fee(jsonObject.getString("salesAmount"));
wxPayEntity.setOut_trade_no(ordersEntity.getOrderNo());
return ResponseDTO.succData(orderNo,wxpayService.dounifiedOrder(wxPayEntity));
}else {
return ResponseDTO.wrap(OrderResponseCodeConst.GENERATE_ORDER_ERROR,orderInfo);
}
@ -212,6 +282,8 @@ public class OrderController {
wxpayService.orderCallBack(request,response);
}
@ApiOperation(value = "监听微信回调", notes = "监听微信回调")
@PostMapping(value = "royalcanin/monitorOrderNotify")
public ResponseDTO<String> monitorOrderNotify(@RequestParam String OrderNumber){
@ -221,11 +293,7 @@ public class OrderController {
return ResponseDTO.wrap(OrderResponseCodeConst.NOTIFY_ERROR);
}
@ApiOperation(value = "支付宝更新订单", notes = "支付宝更新订单")
@RequestMapping(value = "royalcanin/updateOrderAlipay")
public void updateOrderAlipay(HttpServletRequest request, HttpServletResponse response){
// aliPayService.orderCallBackAliPay(request,response);
}
@ApiOperation(value = "取消订单", notes = "取消订单")
@RequestMapping(value = "royalcanin/cancelOrder",method = RequestMethod.POST)
@ -249,7 +317,7 @@ public class OrderController {
AliPayEntity aliPayEntity = new AliPayEntity();
ordersEntity.setPayType("2");
ordersEntity.setOrderStatus("0");
if (orderService.updateOrder(ordersEntity) == 1) {
if (orderService.updateOrder(ordersEntity.getOrderNo()) == 1) {
aliPayEntity.setProduct_code(ordersEntity.getProductCode());
aliPayEntity.setTotal_amount(ordersEntity.getOrderAmount());
aliPayEntity.setOut_trade_no(ordersEntity.getOrderNo());

View File

@ -22,4 +22,6 @@ public interface OrdersDao extends BaseMapper<OrderEntity> {
Integer cancelOrder(String out_trade_no);
int updateByOrderNumber (@Param("orderNumber")String orderNumber);
}

View File

@ -34,4 +34,6 @@ public class GoodsEntity {
private int isSales;
private int isShow;
private String goodUrl;
}

View File

@ -41,6 +41,6 @@ public class OrdersEntity {
private OrderAddress orderAddress;
private Double basePoint;
private Double basePoint = 0.0;
}

View File

@ -53,9 +53,11 @@ public class GoodService {
paramMap.remove("tagFunction");
paramMap.remove("tagBreed");
paramMap.remove("tagStatus");
paramMap.put("count",StringUtil.toString(productQueryEntity.getCount()).equals("0")?null:productQueryEntity.getCount());
MapRemoveNullUtil.removeNullEntry(paramMap);
paramMap.put("secret","H5@2021");
paramMap.put("channelId","15");
paramMap.put("isSales","1");
String sb = SmartHttpUtil.sendPostForm(url+"product/query",paramMap,null);
JSONObject jsonObject = JSONObject.parseObject(sb);
String result = AESUtil.decryptLinux(jsonObject.getString("data"), AESUtil.KEY);

View File

@ -226,9 +226,24 @@ public class OrderService {
long elapsedTime = acceptTime - startTime;
JSONObject jsonObject = JSONObject.parseObject(result);
String afterDecodeResult = AESUtil.decryptLinux(jsonObject.getString("data"), AESUtil.KEY);
com.alibaba.fastjson.JSONArray jsonArray = JSONObject.parseArray(afterDecodeResult);
for (int i = 0; i < jsonArray.size();i++){
JSONObject jsonObjectResult = (JSONObject)jsonArray.get(i);
OrderEntity orderEntity = ordersDao.findByOrderId(jsonObjectResult.getString("orderNumber"));
if (orderEntity == null){
jsonObjectResult.put("paytype","0");
jsonObjectResult.put("basePoint","0");
}else {
//新增支付方式paytype
jsonObjectResult.put("paytype",orderEntity.getPayType());
jsonObjectResult.put("basePoint",orderEntity.getBasePoint());
}
}
//记录服务响应时间
addOperatreFullData(url+"orderMaster/query",queryEntity.toString(),result, startTime,elapsedTime,acceptTime);
return afterDecodeResult;
return jsonArray.toJSONString();
}
public ResponseDTO<String> addOperatreFullData(String type, String params, String result, Long startTime, Long elapsedTime, Long acceptTime){
@ -281,7 +296,7 @@ public class OrderService {
}
public int updateOrder(OrderEntity orderEntity){
return ordersDao.updateById(orderEntity);
public int updateOrder(String orderNumber){
return ordersDao.updateByOrderNumber(orderNumber);
}
}

View File

@ -13,4 +13,8 @@ public class QueryEntity {
private String phoneNumber;
private String page;
private String rows;
}

View File

@ -11,15 +11,15 @@ import java.io.*;
@Component
public class MyConfig implements WXPayConfig {
// private String path ="C:/Users/Administrator/IdeaProjects/smart-admin/smart-admin-service/smart-admin-api/src/main/resources/wxpay/";
private String path ="/home/royalcanin-dev/cert/";
// private String path ="C:/Users/Administrator/IdeaProjects/smart-admin/smart-admin-service/smart-admin-api/src/main/resources/wxpay/pro/";
private String path ="/home/royalcanin-dev/cert/pro/";
// public String notify_url = "http://47.96.75.242:10086/smart-admin-api/royalcanin/updateOrderWX";
public String notify_url = "https://royalcanincn.escase.cn/jc/royalcanin/royalcanin/updateOrderWX";
// 微信支付h5 回调地址
public static String NOTIFY_URL_H5 = "https://www.XXXXXX.com/server/weixin/WxQuery";
public static String NOTIFY_URL_H5 = "https://shop.royalcanin.com.cn/myorder/usertion?";
// 请求地址
public static String UFDODER_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder";
@ -34,18 +34,22 @@ public class MyConfig implements WXPayConfig {
certStream.close();
}
public String getAppID() {
return "wx3c51c14272f63a64";
return "wxa9a0ae603bbe6ceb";
}
//wxa9a0ae603bbe6ceb
//wx3c51c14272f63a64
public String getMchID() {
return "1315161001";
// public String getMchID() {
// return "16717629989";
// }
public String getMchID() {
return "1523977801";
}
// 16717629989
//1315161001
public String getKey() {
return "b69497999e8fd1f8f1f0a9591b24eb72";
return "indexphpcorecertapicert201903200";
}
//indexphpcorecertapicert201903200
//b69497999e8fd1f8f1f0a9591b24eb72
public InputStream getCertStream() {
ByteArrayInputStream certBis = new ByteArrayInputStream(this.certData);

View File

@ -9,13 +9,13 @@ import net.lab1024.smartadmin.module.system.royalcanin.good.service.OrderService
import net.lab1024.smartadmin.module.system.royalcanin.memberAccount.MemberAccountChangeEntity;
import net.lab1024.smartadmin.module.system.royalcanin.notify.model.NotifyEntity;
import net.lab1024.smartadmin.module.system.royalcanin.notify.service.NotifyService;
import net.lab1024.smartadmin.module.system.royalcanin.orderMaster.QueryEntity;
import net.lab1024.smartadmin.module.system.wxpay.sdk.WXPay;
import net.lab1024.smartadmin.module.system.wxpay.sdk.WXPayUtil;
import net.lab1024.smartadmin.module.system.wxpay.wxPayModel.WxPayEntity;
import net.lab1024.smartadmin.util.MapRemoveNullUtil;
import net.lab1024.smartadmin.util.SmartHttpUtil;
import net.lab1024.smartadmin.util.SmartIPUtil;
import org.apache.poi.hpsf.Decimal;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@ -25,8 +25,11 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.math.BigDecimal;
import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.URLEncoder;
import java.text.DecimalFormat;
import java.util.*;
@Service
@ -48,6 +51,27 @@ public class WxpayService {
String url = "https://miniapp-test.royalcanin.com.cn/rcmini/h5/";
private String urlNative = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";
public String testGenerateQRCode(WxPayEntity wxPayEntity)throws Exception{
String Authorization = "WECHATPAY2-SHA256-RSA2048";
long timestamp = System.currentTimeMillis();
SortedMap<String,String> data = new TreeMap<>();
SortedMap<String, Integer> amount = new TreeMap<>();
amount.put("total",Integer.parseInt(getMoney(wxPayEntity.getTotal_fee())));
data.put("out_trade_no",wxPayEntity.getOut_trade_no());
data.put("notify_url",config.notify_url);
data.put("description","皇家宠物食品官方商城");
data.put("appid",config.getAppID());
data.put("mchid",config.getMchID());
net.sf.json.JSONObject jsonObject = net.sf.json.JSONObject.fromObject(data);
jsonObject.put("amount",amount);
SortedMap<String ,String>hearder = new TreeMap<>();
hearder.put("Accept","application/json");
hearder.put("Authorization",Authorization +" mchid="+config.getMchID() +",nonce_str=" + WXPayUtil.generateNonceStr() + ",timestamp=" + timestamp + ",signature=" + WXPayUtil.generateSignature(data, config.getKey()) + ",serial_no=" + config.getKey());
String sb = SmartHttpUtil.httpPostRaw(urlNative,jsonObject.toString(),hearder,"utf-8");
return sb;
}
@ -67,7 +91,7 @@ public class WxpayService {
try {
Map<String, String> resp = wxpay.unifiedOrder(data);
if (resp != null) {
return resp.get("code_url");
return resp.get("code_url") == null ?resp.get("err_code_des"):resp.get("code_url");
}
} catch (Exception e) {
e.printStackTrace();
@ -96,7 +120,8 @@ public class WxpayService {
// 更新订单状态
if ("SUCCESS".equals(sortedMap.get("result_code"))) {
String outTradeNo = sortedMap.get("out_trade_no"); // 流水号
String totalFee = sortedMap.get("total_fee"); // 交易金额
DecimalFormat df = new DecimalFormat("0.00");
String totalFee = StringUtil.toString(df.format(df.format(Double.parseDouble(sortedMap.get("total_fee")) / 100))); // 交易金额
OrderEntity orderEntity = orderService.findByOrderId(outTradeNo);
String [] products = orderEntity.getProductCode().split(",");
ProductMasterQueryEntity productMasterQueryEntity = new ProductMasterQueryEntity();
@ -140,10 +165,6 @@ public class WxpayService {
response.getWriter().println("<xml> <return_code><![CDATA[SUCCESS]]></return_code> <return_msg><![CDATA[OK]]></return_msg> </xml>");
response.setContentType("text/html");
response.getWriter().println("SUCCESS");
QueryEntity queryEntity = new QueryEntity();
queryEntity.setOrderNumber(outTradeNo);
String orderEntityJson = orderService.query(queryEntity);
orderService.completeOrder(totalFee,orderEntityJson);
}
}else {
// 未成功就都处理为失败订单
@ -167,7 +188,7 @@ public class WxpayService {
* @return
* @throws Exception
*/
public Map<String, String> dounifiedOrder(WxPayEntity wxPayEntity) throws Exception {
public String dounifiedOrder(WxPayEntity wxPayEntity) throws Exception {
//返回参数
Map<String, String> returnMap = new HashMap<>();
WXPay wxpay = new WXPay(config);
@ -179,7 +200,7 @@ public class WxpayService {
data.put("fee_type","CNY");
data.put("total_fee",getMoney(wxPayEntity.getTotal_fee()));
data.put("spbill_create_ip", SmartIPUtil.getLocalHostIP());
data.put("trade_type", "MWEB"); // 此处指定为扫码支付
data.put("trade_type", "MWEB"); // 此处指定为H5支付
data.put("body","皇家宠物食品官方商城");
data.put("nonce_str", WXPayUtil.generateNonceStr());
data.put("product_id",wxPayEntity.getProduct_id());
@ -193,18 +214,20 @@ public class WxpayService {
if (returnCode.equals("SUCCESS")) {
returnMap.put("ok", "200");
//拼接返回跳转地址
String url= config.NOTIFY_URL_H5;
String url= config.NOTIFY_URL_H5+"/myorder/usertion?orderNumber="+wxPayEntity.getOut_trade_no() + "&tradeType=MWEB";
returnMap.put("url", response.get("mweb_url")+"&redirect_url="+url);
return response.get("mweb_url") == null ? response.get("err_code_des"):returnMap.get("url");
} else {
returnMap.put("ok", "201");
returnMap.put("url",null);
return returnMap;
return returnMap.get("url");
}
} catch (Exception e) {
System.out.println(e);
return "Error";
//系统等其他错误的时候
}
return returnMap;
}

View File

@ -15,7 +15,7 @@ public class SmartJWTUtil {
/**
* 过期时间一天
*/
private static final int EXPIRE_SECONDS = 1 * 24 * 3600;
private static final int EXPIRE_SECONDS = 365 * 24 * 3600;
/**
* jwt加密字段
*/
@ -78,7 +78,7 @@ public class SmartJWTUtil {
}
public static void main(String[] args) {
String token = SmartJWTUtil.generateToken("884127");
String token = SmartJWTUtil.generateToken("884159");
System.out.println(token);
System.out.println(SmartJWTUtil.decodeToken(token));
}

View File

@ -14,7 +14,7 @@ public class SmsUtil {
SMSServiceSoap_BindingStub stub = (SMSServiceSoap_BindingStub) service.getSMSServiceSoap(protAddres);
java.util.Calendar cal= java.util.Calendar.getInstance();
cal.set(2021,12,31,0,0,0);
String sMSGID = stub.sendSMS(number,8,"您好,您的验证码:" + verifyNumber + ", 5分钟有效期 【皇家宠物食品】",cal,"7101567100151709");
String sMSGID = stub.sendSMS(number,8,"您好,您的验证码:" + verifyNumber + ", 5分钟有效期 ",cal,"7101567100151709");
if (sMSGID.startsWith("OK:"))
System.out.println("Send successful!");
System.out.println("msgId = " + sMSGID);

View File

@ -22,4 +22,10 @@
</update>
<update id="updateByOrderNumber" >
update t_good_orders
set pay_type ='2'
where order_no = #{orderNumber}
</update>
</mapper>

View File

@ -19,6 +19,7 @@
tagUsedAge,
category_name,
picture,
good_url,
show_img_file
from t_good_goods
where isShow = 1

View File

@ -1,10 +1,10 @@
######################### server ###################
server.servlet.context-path=/smart-admin-api
server.port=10088
server.servlet.context-path=/royalcanin
server.port=10086
spring.profiles.active=@profiles.active@
######################### tomcat ###################
server.tomcat.basedir=/home/logs/smart-admin/tomcat-logs
server.tomcat.basedir=/home/royalcanin-prod/tomcat-9/smart-admin/tomcat-logs
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%t %{X-Forwarded-For}i %a "%r" %s %D (%D ms)
@ -23,9 +23,9 @@ spring.servlet.multipart.max-request-size=30MB
file-upload-service.path=/home/upload/smart-admin-file
######################### database #########################
spring.datasource.url=jdbc:mysql://172.16.0.201:3306/smart-admin-prod?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true
spring.datasource.username=smart-admin
spring.datasource.password=Admin@123457
spring.datasource.url=jdbc:mysql://rc-hub-mysql.mysql.database.chinacloudapi.cn/smart-admin-prod?autoReconnect=true&useServerPreparedStmts=false&rewriteBatchedStatements=true&characterEncoding=UTF-8&useSSL=false&allowMultiQueries=true
spring.datasource.username=azureuser@rc-hub-mysql
spring.datasource.password=(G=q0D5ez2Fz
spring.datasource.initial-size=2
spring.datasource.min-idle=1
spring.datasource.max-active=100

View File

@ -1640,6 +1640,7 @@ CREATE TABLE `t_good_goods` (
`tagUsedAge` varchar(11) DEFAULT NULL COMMENT '适用阶段',
`picture` varchar(200) DEFAULT NULL COMMENT '标品头图',
`show_img_file` varchar(200) DEFAULT NULL COMMENT '身体头图',
`good_url` varchar(500) DEFAULT NULL COMMENT '处方粮跳转连接',
`isSales` int(11) DEFAULT NULL COMMENT '0:未销售1销售',
`isShow` int(11) DEFAULT NULL COMMENT '0:不展示1展示',
PRIMARY KEY (`id`)

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIID6TCCAtGgAwIBAgIUMO4qJG/XR9oQeHQphVQ7usz5/0YwDQYJKoZIhvcNAQEL
BQAwXjELMAkGA1UEBhMCQ04xEzARBgNVBAoTClRlbnBheS5jb20xHTAbBgNVBAsT
FFRlbnBheS5jb20gQ0EgQ2VudGVyMRswGQYDVQQDExJUZW5wYXkuY29tIFJvb3Qg
Q0EwHhcNMjIwMTI0MDgxMTA3WhcNMjcwMTIzMDgxMTA3WjB7MRMwEQYDVQQDDAox
NTIzOTc3ODAxMRswGQYDVQQKDBLlvq7kv6HllYbmiLfns7vnu58xJzAlBgNVBAsM
HuS4iua1t+aHi+avheWVhui0uOaciemZkOWFrOWPuDELMAkGA1UEBgwCQ04xETAP
BgNVBAcMCFNoZW5aaGVuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
yRnwfm/9lHyq16cAJjx8/7x9WQF+/mKry6MvJIquaXUXBQKDO3d4deBLq8By7dXD
xi7S7bPFeUkjXhgxs/WD15xyzNZj4qpKmXuEaFi0g1VLNUs3RmlWaR9OX0On+G2X
vj4Zw1bi7sbefA1UrgNB7CH6nAaIVVWDdggxnUeX18F1y7BUBjPBh64Trbi0n011
U/m738gyH37tfcSZCMM7aBO4/8BqRmRmNr58Owci8ee7G2yybGbRyVpT/3Y7cWLt
k4pyOavIjpmaIo/CPbwMC5hOR4fxwyZUaTpyZh7foQFytz05UHvxp35hKZLnxI2d
U+0wtymYYxTFGe6BngVHVwIDAQABo4GBMH8wCQYDVR0TBAIwADALBgNVHQ8EBAMC
BPAwZQYDVR0fBF4wXDBaoFigVoZUaHR0cDovL2V2Y2EuaXRydXMuY29tLmNuL3B1
YmxpYy9pdHJ1c2NybD9DQT0xQkQ0MjIwRTUwREJDMDRCMDZBRDM5NzU0OTg0NkMw
MUMzRThFQkQyMA0GCSqGSIb3DQEBCwUAA4IBAQCOhr56rhhVqckEiN63f1JHD+SG
4DRLCkcJ5oon2EvKOxCKFW9sqcggjtoF3R5ZQe8TwpGl/Pp7t0tbcpor9Gpr3V75
fkkCsvotCaB3Hbpw/VzXP96848cQ8B/QtU+7oLCkCnakXeorgf/cLN/IlZ8ZAb5B
R7ZEf8qthobPqAygrk1ZLmRNKzEMD+kWaFvffkYGeGP1chZPqevb4sS0BlckBaP/
xeeU7R9Y5p5FANzIDCmHoFxqsrGLnF7Dh+bQSPSnG/rZjXnCYJFG6Jp/VvXP6enh
5fpVimiUe/62aP6XkKLSm1sX9b86GuTaAl58n78oocNa/XBcKNJNa/3A37bW
-----END CERTIFICATE-----

View File

@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDJGfB+b/2UfKrX
pwAmPHz/vH1ZAX7+YqvLoy8kiq5pdRcFAoM7d3h14EurwHLt1cPGLtLts8V5SSNe
GDGz9YPXnHLM1mPiqkqZe4RoWLSDVUs1SzdGaVZpH05fQ6f4bZe+PhnDVuLuxt58
DVSuA0HsIfqcBohVVYN2CDGdR5fXwXXLsFQGM8GHrhOtuLSfTXVT+bvfyDIffu19
xJkIwztoE7j/wGpGZGY2vnw7ByLx57sbbLJsZtHJWlP/djtxYu2TinI5q8iOmZoi
j8I9vAwLmE5Hh/HDJlRpOnJmHt+hAXK3PTlQe/GnfmEpkufEjZ1T7TC3KZhjFMUZ
7oGeBUdXAgMBAAECggEBAKmjzA+cgRjlIWjRY3rdw8QnSMXwUSReL/WULoxwwDgN
oeGEARgE7ATjtHGp4klm7cMcdKo33/k0DTWuyx63mQQk4WKR56ipZkyauVMcoQm4
xbyrOnGXImGDGyWZePRD3qGI2UrC3KP39m5HAIvaC54Z+8HqcM8rV74Vo2S9pAVH
mhdH9VC5tnp2cBnOh8UyhIYmqAj/SXSk5Becq2IoYG8r5vojvohtxL/w5hbEfBnz
VhjZo82t0hhFGHfFJHw/3D2JjGdYI8QTxTZ78pMb0uK5XsJtxdQFKf5jS4XopJ5k
2h/YtAHxFv6K1cqyAaS3ZoyYGTOWy+eQrycGm62nNqECgYEA6UMsK8t/eS4NE1rK
capEufddSDzUr2C34ZLxZgXXOpLEdbvvADlCVqqT0/N682xxeM0iK+HVHRpmbzE9
v0MKPeMuRJ14aoiQEdGhDwEWgkyZr3GGdkgsIxO3/x9TNBK4F9pxZPFLSvkNDscO
75A2CBtB18gm6yAHkr+UQRlpXpsCgYEA3LQ4Tfme2xD6sa0WE+SFGk4hW/wfMawi
C1v5xJEjmI2ucKw3i19fKT+3a1LHY47ytjNS0hRQUoEYO0iEe1wO9t1TExmreLar
mUW4jcnoLEUBBYHfu6vTbyoRePUXhtk9jb2cFEMpDXI3qNwGN+2LTRz3Q1G8T+D9
kdHHGLF+h/UCgYB1GH5dAcvdBiwUMjh8NNBJVo7iS38tBu1n9H7wCzCPO8wZmh0R
TK0rmneZJ5nqBt8zmC52PujfsjgHy31GvR2wEZJRaYdgW2uPNl+Wi6JECLYBp4ir
afGWLjjofk4jTt5RQxw3YxW77igK6gxqYEdvbFdyPgyjbbG/jiKbR2lozwKBgQCU
PwXW8oYO1e/eqsm6oPP7AGIN/GMjpWDUynoR2//R99ElY7iHiI9OELtufpLpv9ou
InlOHVD6qjYRlBtRFTwD/BRSLxrroZ/P+3IE44ttOQh/n4Yd9EO4VsSXv+GGtaNP
8v3E6nvHyWGzrd8LcCbyrDM2Z8+axCDu8r7OSmMYhQKBgQDa3hTeI/sV72kH+8vz
GaTbQBtuxI34sKOxdsp7vR2IfTJjOPhTHgxCnISUaHFvgnYpmNgSZbLBMasIWouz
9NbU+lEwGBXKcNbCKQaWut7z3CArsV5j/9kKQrBwXWVsFNgKYwO0Md7aEKtcruLN
WjetT3R9CLwHFB2H+K3Mi0+5JA==
-----END PRIVATE KEY-----