## v1.3.1 更新列表

1. 【修复】申请退款后积分等操作可能出现错误的问题
	2. 【修复】拼团支付可能出现支付错误的问题
	3. 【修复】退款申请后的订单流程优化和积分赠送的问题
	4. 【修复】回收站中的商品无法恢复的问题
	5. 【修复】一号通短信查询记录不完整的问题
	6. 【修复】用户管理批量加分组,标签的问题
	7. 【修复】积分日志搜索显示有误的问题
	8. 【修复】手动发送优惠券可能会出错的问题
	9. 【修复】核销订单创建在某种条件下会出错的问题
	10. 【修复】移动端商品详情,购物车等样式兼容问题
	11. 【修复】业务流程性的优化
This commit is contained in:
337031187
2021-01-19 10:16:45 +08:00
parent dc2ac84276
commit 9c2062e521
136 changed files with 19904 additions and 23329 deletions

View File

@@ -100,7 +100,7 @@
<template slot-scope="scope">
<div v-if=" scope.row.productList && scope.row.productList.length">
<div v-for="(val, i ) in scope.row.productList" :key="i" class="tabBox acea-row row-middle" style="flex-wrap: inherit;">
<div class="demo-image__preview">
<div class="demo-image__preview mr10">
<el-image
:src="val.info.productInfo.image"
:preview-src-list="[val.info.productInfo.image]"
@@ -173,8 +173,10 @@
<el-dropdown-item @click.native="onOrderLog(scope.row.id)">订单记录</el-dropdown-item>
<el-dropdown-item @click.native="onOrderMark(scope.row)">订单备注</el-dropdown-item>
<el-dropdown-item v-show="scope.row.statusStr.key === 'refunding'" @click.native="onOrderRefuse(scope.row)">拒绝退款</el-dropdown-item>
<el-dropdown-item v-show="scope.row.statusStr.key !== 'refunded' && ((parseFloat(scope.row.payPrice) >= parseFloat(scope.row.refundPrice) || (scope.row.payPrice == 0 && [0,1].indexOf(scope.row.refundStatus) !== -1)))" @click.native="onOrderRefund(scope.row)">立即退款</el-dropdown-item>
<el-dropdown-item @click.native="handleDelete(scope.row, scope.$index)">删除订单</el-dropdown-item>
<!--(scope.row.payPrice == 0 && [0,1].indexOf(scope.row.refundStatus) !== -1))-->
<!--&& (parseFloat(scope.row.payPrice) >= parseFloat(scope.row.refundPrice))-->
<el-dropdown-item v-show="((scope.row.statusStr.key !== 'refunded' && scope.row.statusStr.key !== 'unPaid') && (parseFloat(scope.row.payPrice) >= parseFloat(scope.row.refundPrice))) || (scope.row.payPrice == 0 && [0,1].indexOf(scope.row.refundStatus) !== -1)" @click.native="onOrderRefund(scope.row)">立即退款</el-dropdown-item>
<el-dropdown-item v-show="scope.row.statusStr.key === 'deleted'" @click.native="handleDelete(scope.row, scope.$index)">删除订单</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</template>
@@ -204,6 +206,7 @@
:is-create="isCreate"
:edit-data="editData"
@submit="handlerSubmit"
@resetForm="resetForm"
/>
</el-dialog>
@@ -283,6 +286,7 @@
:is-create="1"
:edit-data="refundData"
@submit="refundhandlerSubmit"
v-if="refundVisible"
@resetForm="resetFormRefundhandler"
/>
</el-dialog>
@@ -297,7 +301,6 @@
import orderSend from './orderSend'
import { storeStaffListApi } from '@/api/storePoint'
import Cookies from 'js-cookie'
import { fromList } from '@/utils/constants.js'
import { isWriteOff } from "@/utils";
export default {
name: 'orderlistDetails',
@@ -342,7 +345,7 @@
},
orderChartType: {},
timeVal: [],
fromList: fromList,
fromList: this.$constants.fromList,
selectionList: [],
ids: '',
orderids: '',
@@ -368,7 +371,6 @@
this.$modalSure('核销订单吗').then(() => {
writeUpdateApi(row.verifyCode).then(() => {
this.$message.success('核销成功')
this.tableFrom.status = 'toBeWrittenOff'
this.tableFrom.page = 1
this.getList()
})
@@ -584,11 +586,10 @@
font-size: 12px;
}
.tabBox_tit {
/*width: 60%;*/
font-size: 12px !important;
margin: 0 2px 0 10px;
/*margin: 0 2px 0 10px;*/
letter-spacing: 1px;
padding: 5px 0;
/*padding: 5px 0;*/
box-sizing: border-box;
}
</style>

View File

@@ -102,50 +102,50 @@
</template>
<script>
import { orderDetailApi, getLogisticsInfoApi } from '@/api/order'
export default {
name: 'OrderDetail',
props: {
orderId: {
type: Number,
default: 0
}
import { orderDetailApi, getLogisticsInfoApi } from '@/api/order'
export default {
name: 'OrderDetail',
props: {
orderId: {
type: Number,
default: 0
}
},
data() {
return {
reverse: true,
dialogVisible: false,
orderDatalist: null,
loading: false,
modal2: false,
result: []
}
},
mounted() {
},
methods: {
openLogistics () {
this.getOrderData()
this.modal2 = true;
},
data() {
return {
reverse: true,
dialogVisible: false,
orderDatalist: null,
loading: false,
modal2: false,
result: []
}
// 获取订单物流信息
getOrderData () {
getLogisticsInfoApi({id:this.orderId}).then(async res => {
this.result = res.list;
})
},
mounted() {
},
methods: {
openLogistics () {
this.getOrderData()
this.modal2 = true;
},
// 获取订单物流信息
getOrderData () {
getLogisticsInfoApi({id:this.orderId}).then(async res => {
this.result = res.list;
})
},
getDetail(id) {
this.loading = true
orderDetailApi({id: id}).then(res => {
this.orderDatalist = res
this.loading = false
}).catch(() => {
this.orderDatalist = null
this.loading = false
})
}
getDetail(id) {
this.loading = true
orderDetailApi({id: id}).then(res => {
this.orderDatalist = res
this.loading = false
}).catch(() => {
this.orderDatalist = null
this.loading = false
})
}
}
}
</script>
<style scoped lang="scss">

View File

@@ -1,209 +1,222 @@
<template>
<el-dialog :visible.sync="modals" title="订单记录" class="order_box" :before-close="handleClose" width="600px">
<el-form ref="formItem" :model="formItem" label-width="110px" @submit.native.prevent :rules="rules">
<el-form-item label="选择类型:">
<el-radio-group v-model="formItem.type" @change="changeRadio(formItem.type)">
<el-radio label="1">发货</el-radio>
<el-radio label="2">送货</el-radio>
<el-radio label="3">虚拟</el-radio>
</el-radio-group>
</el-form-item>
<div v-if="formItem.type==='1'">
<el-form-item label="发货类型:" prop="expressId">
<el-radio-group v-model="formItem.expressRecordType" @change="changeRadio(formItem.expressRecordType)">
<el-radio label="1">手动填写</el-radio>
<el-radio label="2">电子面单打印</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="快递公司:" prop="expressCode">
<el-select v-model="formItem.expressCode" filterable style="width:80%;" @change="onChangeExport(formItem.expressCode)">
<el-option v-for="(item,i) in express" :value="item.code" :key="i" :label="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item v-if="formItem.expressRecordType === '1'" label="快递单号:" prop="expressNumber">
<el-input v-model="formItem.expressNumber" placeholder="请输入快递单号" style="width:80%;"></el-input>
</el-form-item>
<template v-if="formItem.expressRecordType === '2'">
<el-form-item label="电子面单:" class="express_temp_id" prop="expressTempId">
<div class="acea-row">
<el-select v-model="formItem.expressTempId" placeholder="请选择电子面单" :class="[formItem.expressTempId?'width9':'width8']" @change="onChangeImg">
<el-option v-for="(item,i) in exportTempList" :value="item.temp_id" :key="i" :label="item.title"></el-option>
</el-select>
<div v-if="formItem.expressTempId" style="position: relative;">
<!--<span class="tempImg" @click="">预览</span>-->
<div class="tempImgList ml10">
<div class="demo-image__preview">
<el-image
style="width: 36px; height: 36px"
:src="tempImg"
:preview-src-list="[tempImg]"
/>
</div>
</div>
</div>
<!--<Button v-if="formItem.expressTempId" type="text" @click="preview">预览</Button>-->
</div>
<el-dialog :visible.sync="modals" title="发送货" class="order_box" :before-close="handleClose" width="600px">
<el-form ref="formItem" :model="formItem" label-width="110px" @submit.native.prevent :rules="rules">
<el-form-item label="选择类型:">
<el-radio-group v-model="formItem.type" @change="changeRadioType(formItem.type)">
<el-radio label="1">发货</el-radio>
<el-radio label="2">送货</el-radio>
<el-radio label="3">虚拟</el-radio>
</el-radio-group>
</el-form-item>
<div v-if="formItem.type==='1'">
<el-form-item label="发货类型:" prop="expressId">
<el-radio-group v-model="formItem.expressRecordType" @change="changeRadio(formItem.expressRecordType)">
<el-radio label="1">手动填写</el-radio>
<el-radio label="2">电子面单打印</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="快递公司:" prop="expressCode">
<el-select v-model="formItem.expressCode" filterable style="width:80%;"
@change="onChangeExport(formItem.expressCode)">
<el-option v-for="(item,i) in express" :value="item.code" :key="i" :label="item.name"></el-option>
</el-select>
</el-form-item>
<el-form-item v-if="formItem.expressRecordType === '1'" label="快递单号" prop="expressNumber">
<el-input v-model="formItem.expressNumber" placeholder="请输入快递单号" style="width:80%;"></el-input>
</el-form-item>
<template v-if="formItem.expressRecordType === '2'">
<el-form-item label="电子面单:" class="express_temp_id" prop="expressTempId">
<div class="acea-row">
<el-select v-model="formItem.expressTempId" placeholder="请选择电子面单"
:class="[formItem.expressTempId?'width9':'width8']" @change="onChangeImg">
<el-option v-for="(item,i) in exportTempList" :value="item.temp_id" :key="i"
:label="item.title"></el-option>
</el-select>
<div v-if="formItem.expressTempId" style="position: relative;">
<!--<span class="tempImg" @click="">预览</span>-->
<div class="tempImgList ml10">
<div class="demo-image__preview">
<el-image
style="width: 36px; height: 36px"
:src="tempImg"
:preview-src-list="[tempImg]"
/>
</div>
</div>
</div>
<!--<Button v-if="formItem.expressTempId" type="text" @click="preview">预览</Button>-->
</div>
</el-form-item>
<el-form-item label="寄件人姓名:" prop="toName">
<el-input v-model="formItem.toName" placeholder="请输入寄件人姓名" style="width:80%;"></el-input>
</el-form-item>
<el-form-item label="寄件人电话:" prop="toTel">
<el-input v-model="formItem.toTel" placeholder="请输入寄件人电话" style="width:80%;"></el-input>
</el-form-item>
<el-form-item label="寄件人地址:" prop="toAddr">
<el-input v-model="formItem.toAddr" placeholder="请输入寄件人地址" style="width:80%;"></el-input>
</el-form-item>
</template>
</div>
<div v-if="formItem.type==='2'">
<el-form-item label="送货人姓名:" prop="deliveryName">
<el-input v-model="formItem.deliveryName" placeholder="请输入送货人姓名" style="width:80%;"></el-input>
</el-form-item>
<el-form-item label="送货人电话:" prop="deliveryTel">
<el-input v-model="formItem.deliveryTel" placeholder="请输入送货人电话" style="width:80%;"></el-input>
</el-form-item>
</div>
</el-form>
<div slot="footer">
<el-button size="mini" type="primary" @click="putSend('formItem')">提交</el-button>
<el-button size="mini" @click="cancel('formItem')">取消</el-button>
</div>
</el-dialog>
</el-form-item>
<el-form-item label="寄件人姓名:" prop="toName">
<el-input v-model="formItem.toName" placeholder="请输入寄件人姓名" style="width:80%;"></el-input>
</el-form-item>
<el-form-item label="寄件人电话:" prop="toTel">
<el-input v-model="formItem.toTel" placeholder="请输入寄件人电话" style="width:80%;"></el-input>
</el-form-item>
<el-form-item label="寄件人地址:" prop="toAddr">
<el-input v-model="formItem.toAddr" placeholder="请输入寄件人地址" style="width:80%;"></el-input>
</el-form-item>
</template>
</div>
<div v-if="formItem.type==='2'">
<el-form-item label="送货人姓名:" prop="deliveryName">
<el-input v-model="formItem.deliveryName" placeholder="请输入送货人姓名" style="width:80%;"></el-input>
</el-form-item>
<el-form-item label="送货人电话:" prop="deliveryTel">
<el-input v-model="formItem.deliveryTel" placeholder="请输入送货人电话" style="width:80%;"></el-input>
</el-form-item>
</div>
</el-form>
<div slot="footer">
<el-button size="mini" type="primary" @click="putSend('formItem')">提交</el-button>
<el-button size="mini" @click="cancel('formItem')">取消</el-button>
</div>
</el-dialog>
</template>
<script>
import { orderSendApi, sheetInfoApi } from '@/api/order'
import { expressAllApi, exportTempApi } from '@/api/sms'
const validatePhone = (rule, value, callback) => {
if (!value) {
return callback(new Error('请填写手机号'));
} else if (!/^1[3456789]\d{9}$/.test(value)) {
callback(new Error('手机号格式不正确!'));
} else {
callback();
}
};
export default {
name: 'orderSend',
props: {
orderId: Number
},
data () {
return {
formItem: {
type: '1',
expressRecordType: '1',
expressId: '',
expressCode: '',
id: '',
deliveryName: '',
deliveryTel: '',
// expressName: '',
expressNumber:'',
expressTempId: '',
toAddr: '',
toName: '',
toTel: '',
},
modals: false,
express: [],
exportTempList: [],
tempImg: '',
rules: {
toName: [
{ required: true, message: '请输寄件人姓名', trigger: 'blur' }
],
toTel: [
{ required: true, validator: validatePhone, trigger: 'blur' }
],
toAddr: [
{ required: true, message: '请输入寄件人地址', trigger: 'blur' }
],
expressCode: [
{ required: true, message: '请选择快递公司', trigger: 'change' }
],
expressNumber: [
{ required: true, message: '请输入快递单号', trigger: 'blur' }
],
expressTempId: [
{ required: true, message: '请选择电子面单', trigger: 'change' }
],
deliveryName: [
{ required: true, message: '请输入送货人姓名', trigger: 'blur' }
],
deliveryTel: [
{ required: true, validator: validatePhone, trigger: 'blur' }
]
}
}
},
mounted () {
},
methods: {
// 默认信息
sheetInfo () {
sheetInfoApi().then(async res => {
this.formItem.toAddr= res.exportToAddress || '';
this.formItem.toName= res.exportToName || '';
this.formItem.toTel= res.exportToTel || '';
})
},
// 快递公司选择
onChangeExport (val) {
this.formItem.expressTempId = '';
this.exportTemp(val);
},
// 电子面单模板
exportTemp (val) {
exportTempApi({ com: val }).then(async res => {
this.exportTempList = res.data.data || [];
})
},
onChangeImg (item) {
this.exportTempList.map(i => {
if (i.temp_id === item) this.tempImg = i.pic
})
},
changeRadio (o) {
if( o === '3'){
this.formItem.expressId = ''
this.formItem.expressCode = ''
}
},
// 物流公司列表
getList () {
expressAllApi().then(async res => {
this.express = res
})
},
// 提交
putSend(name) {
this.formItem.id = this.orderId
this.$refs[name].validate((valid) => {
if (valid) {
orderSendApi(this.formItem).then(async => {
this.$message.success('发送货成功');
this.modals = false;
this.$refs[name].resetFields();
this.$emit('submitFail')
})
} else {
this.$message.error('请填写信息');
}
})
},
handleClose(){
this.cancel('formItem');
},
cancel (name) {
this.modals = false;
this.$refs[name].resetFields();
this.formItem.type = '1';
this.formItem.expressRecordType = '1';
}
}
import {orderSendApi, sheetInfoApi} from '@/api/order'
import {expressAllApi, exportTempApi} from '@/api/sms'
const validatePhone = (rule, value, callback) => {
if (!value) {
return callback(new Error('请填写手机号'));
} else if (!/^1[3456789]\d{9}$/.test(value)) {
callback(new Error('手机号格式不正确!'));
} else {
callback();
}
};
export default {
name: 'orderSend',
props: {
orderId: Number
},
data() {
return {
formItem: {
type: '1',
expressRecordType: '1',
expressId: '',
expressCode: '',
id: '',
deliveryName: '',
deliveryTel: '',
// expressName: '',
expressNumber: '',
expressTempId: '',
toAddr: '',
toName: '',
toTel: '',
},
modals: false,
express: [],
exportTempList: [],
tempImg: '',
rules: {
toName: [
{required: true, message: '请输寄件人姓名', trigger: 'blur'}
],
toTel: [
{required: true, validator: validatePhone, trigger: 'blur'}
],
toAddr: [
{required: true, message: '请输入寄件人地址', trigger: 'blur'}
],
expressCode: [
{required: true, message: '请选择快递公司', trigger: 'change'}
],
expressNumber: [
{required: true, message: '请输入快递单号', trigger: 'blur'}
],
expressTempId: [
{required: true, message: '请选择电子面单', trigger: 'change'}
],
deliveryName: [
{required: true, message: '请输入送货人姓名', trigger: 'blur'}
],
deliveryTel: [
{required: true, validator: validatePhone, trigger: 'blur'}
]
},
expressType: 'normal'
}
},
mounted() {
},
methods: {
// 默认信息
sheetInfo() {
sheetInfoApi().then(async res => {
this.formItem.toAddr = res.exportToAddress || '';
this.formItem.toName = res.exportToName || '';
this.formItem.toTel = res.exportToTel || '';
})
},
// 快递公司选择
onChangeExport(val) {
this.formItem.expressTempId = '';
if (this.formItem.expressRecordType === '2') this.exportTemp(val);
},
// 电子面单模板
exportTemp(val) {
exportTempApi({com: val}).then(async res => {
this.exportTempList = res.data.data || [];
})
},
onChangeImg(item) {
this.exportTempList.map(i => {
if (i.temp_id === item) this.tempImg = i.pic
})
},
changeRadioType() {
this.formItem.expressId = ''
this.formItem.expressCode = ''
},
changeRadio(o) {
if (o == 2){
this.expressType = 'elec'
}else{
this.expressType = 'normal'
}
this.formItem.expressId = ''
this.formItem.expressCode = ''
this.getList();
},
// 物流公司列表
getList() {
expressAllApi({type: this.expressType}).then(async res => {
this.express = res
})
},
// 提交
putSend(name) {
this.formItem.id = this.orderId
this.$refs[name].validate((valid) => {
if (valid) {
orderSendApi(this.formItem).then(async => {
this.$message.success('发送货成功');
this.modals = false;
this.$refs[name].resetFields();
this.$emit('submitFail')
})
} else {
this.$message.error('请填写信息');
}
})
},
handleClose() {
this.cancel('formItem');
},
cancel(name) {
this.modals = false;
this.$refs[name].resetFields();
this.formItem.type = '1';
this.formItem.expressRecordType = '1';
}
}
}
</script>
<style scoped lang="scss">