提交 95ba9fff 编写于 作者: yafei.li's avatar yafei.li

Merge branch 'develop' into 'test'

Develop

See merge request com.pica.cloud.education.frontend/pica.cloud.web-education-admin!287
......@@ -205,7 +205,6 @@
},
// 搜索框中输入文字 时 page=1 pageSize=30
handleInputSearch() {
// debugger;
clearTimeout(this.searchFlagTimer);
let that = this;
that.page = 1;
......
......@@ -255,7 +255,6 @@ export const getGoodsExportUrl = (params) => {
};
export const getOrdersExportUrl = (params) => {
debugger
return fetch({
headers,
url: getBaseUrl('/store/orders/admin/export'),
......@@ -265,6 +264,45 @@ export const getOrdersExportUrl = (params) => {
})
};
export const uploadExpress = (params) => {
return fetch({
headers,
url: getBaseUrl(`/store/batch/upload/express`),
method: 'POST',
data: params,
description: '批量更新物流操作',
})
};
export const uploadRefund = (params) => {
return fetch({
headers,
url: getBaseUrl(`/store/batch/upload/refund`),
method: 'POST',
data: params,
description: '批量取消退款操作',
})
};
export const getUploadExpressProgress = (id) => {
return fetch({
headers,
url: getBaseUrl(`store/batch/upload/progress/express/${id}`),
method: 'GET',
description: '查询批量更新物流处理进度,id为批次id',
})
};
export const getUploadRefundProgress = (id) => {
return fetch({
headers,
url: getBaseUrl(`store/batch/upload/progress/refund/${id}`),
method: 'GET',
description: '查询批量取消退款处理进度,id为批次id',
})
};
export const getExamAwardList = (params) => {
return fetch({
......@@ -347,3 +385,7 @@ export const delActivity = (params) => {
description: '活动列表',
})
};
......@@ -107,23 +107,8 @@
</el-select>
</el-form-item>
</el-col>
<!-- <el-col :span="6">-->
<!-- <el-form-item label="订单类型">-->
<!-- <el-select-->
<!-- v-model="searchForm.saleType"-->
<!-- placeholder="请选择订单类型"-->
<!-- size="small"-->
<!-- clearable>-->
<!-- <el-option-->
<!-- v-for="item in saleTypeList"-->
<!-- :key="item.value"-->
<!-- :label="item.label"-->
<!-- :value="item.value"-->
<!-- ></el-option>-->
<!-- </el-select>-->
<!-- </el-form-item>-->
<!-- </el-col>-->
<el-col :span="6" style="text-align: right">
<div class="button-container">
<el-button type="primary" size="small" @click="searchList"
>查询</el-button
>
......@@ -137,6 +122,21 @@
<el-button type="primary" size="small" @click="exportOrder"
>导出订单</el-button
>
</div>
<div class="button-container">
<el-button
type="primary"
size="small"
@click="ShowExportDialog(1)"
>导入物流单号</el-button
>
<el-button
type="primary"
size="small"
@click="ShowExportDialog(2)"
>批量取消订单</el-button
>
</div>
</el-col>
</el-row>
</el-form>
......@@ -258,6 +258,15 @@
</p>
</template>
</el-table-column>
<!-- <el-table-column
prop="fanxxxx"
label="返现"
min-width="100"
align="center"
>
</el-table-column> -->
<el-table-column
prop="saleTypeStr"
label="销售方式"
......@@ -347,7 +356,11 @@
>查看详情</el-button
>
<el-button
v-if="(scope.row.storeType == 1 || scope.row.storeType == 2) &&scope.row.showStatus == 3 &&scope.row.refundStatus == 0"
v-if="
(scope.row.storeType == 1 || scope.row.storeType == 2) &&
scope.row.showStatus == 3 &&
scope.row.refundStatus == 0
"
@click="openTuiDialog(scope.row)"
type="text"
size="small"
......@@ -473,8 +486,7 @@
</div>
<div>
<el-button type="text" @click="copyTxt">复制单号</el-button>
<el-button type="text" @click="updateOrderNo"
v-if="showStatus == 2"
<el-button type="text" @click="updateOrderNo" v-if="showStatus == 2"
>修改物流单号</el-button
>
</div>
......@@ -482,7 +494,7 @@
<div class="steps-logistics">
<el-steps direction="vertical" :active="0">
<el-step
v-for="(item,index) in expressData"
v-for="(item, index) in expressData"
:title="item.time"
:description="item.context"
:key="index"
......@@ -580,7 +592,6 @@
>
</span>
</el-dialog>
<el-dialog
class="tui-dialog"
title="修改物流单号"
......@@ -610,13 +621,190 @@
>
</span>
</el-dialog>
<!-- 导入物流单号 dialog-->
<el-dialog
class="exportlogistics-dialog"
:title="ExportType == 1 ? '导入物流单号' : '批量取消订单'"
:visible="exportDialog"
@close="exportDialog = false"
width="600px"
>
<el-form label-width="120px">
<el-form-item label="导入文档:">
<el-upload
class="upload-excel"
action="#"
accept=".xlsx"
multiple
:limit="1"
:show-file-list="false"
:before-upload="uploadfile"
>
<div class="upload-container">
<el-input
class="file-name"
v-model="fileData.fileName"
size="mini"
readonly
></el-input
><el-button type="primary" size="mini">选择文件</el-button>
</div>
</el-upload>
</el-form-item>
<el-form-item label="模板:">
<a v-if="ExportType == 1" class="importUrl" :href="LogisticsUrl">
物流单号修改模板.xlxs</a
>
<a v-else class="importUrl" :href="CancelOrderUrl">
批量取消模板.xlxs</a
>
</el-form-item>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button size="small" @click="cancelExport">取消</el-button>
<el-button
size="small"
:loading="isLoading"
type="primary"
@click="confirmExport"
>确认</el-button
>
</div>
</el-dialog>
<!-- 导出进度loading -->
<el-dialog
class="exportlogistics-dialog"
:visible="progressFlag"
width="600px"
:close-on-click-modal="false"
:show-close="false"
>
<div>
<div class="progress-container">
<div class="progress-tag">
{{ ProgressData.doneNum }}/{{ ProgressData.totalNum }}
<div class="popper__arrow"></div>
</div>
<div class="progress-content">正在导入...</div>
</div>
</div>
</el-dialog>
<!-- 结果统计 -->
<el-dialog
class="exportlogistics-dialog"
title="导入完成"
:visible="statFlg"
@close="statFlg = false"
width="600px"
>
<div class="stat-container">
<div class="stat-title">模板数据共{{ ProgressData.totalNum }}条</div>
<div class="stat-result">
<div class="success">成功:{{ ProgressData.successNum }}条</div>
<div class="repetition">重复:{{ ProgressData.repeatNum }}条</div>
<div class="failure">失败:{{ ProgressData.failNum }}条</div>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button size="small" @click="statFlg = false">取消</el-button>
<el-button size="small" type="primary" @click="showReasondialog"
>查看失败原因</el-button
>
</div>
</el-dialog>
<!-- 失败原因 -->
<el-dialog
class="exportlogistics-dialog"
title="失败记录"
:visible="FailureReasonFlag"
@close="FailureReasonFlag = false"
width="1000px"
>
<div class="FailureReasonFlag-container" v-if="ExportType == 1">
<el-table
:data="ProgressData.errorList"
border
height="300"
style="width: 100%"
>
<el-table-column
prop="subOrderId"
label="订单号"
align="center"
width="210"
></el-table-column>
<el-table-column
prop="expressName"
label="快递公司"
align="center"
></el-table-column>
<el-table-column prop="expressNo" label="快递单号" align="center">
</el-table-column>
<el-table-column prop="remark" label="备注" align="center">
</el-table-column>
<el-table-column prop="failInfo" label="失败原因" align="center">
</el-table-column>
<el-table-column
prop="operationGuide"
label="操作指引"
align="center"
>
</el-table-column>
</el-table>
</div>
<div class="FailureReasonFlag-container" v-else>
<el-table
:data="ProgressData.errorList"
border
height="300"
style="width: 100%"
>
<el-table-column
prop="subOrderId"
label="订单号"
align="center"
width="210"
></el-table-column>
<el-table-column
prop="refundReason"
label="取消原因"
align="center"
></el-table-column>
<el-table-column prop="failInfo" label="失败原因" align="center">
</el-table-column>
<el-table-column
prop="operationGuide"
label="操作指引"
align="center"
>
</el-table-column>
</el-table>
</div>
<div slot="footer" class="dialog-footer">
<el-button size="small" @click="FailureReasonFlag = false"
>取消</el-button
>
<a :href="ProgressData.errorFileUrl">
<el-button size="small" type="primary">导出失败记录</el-button>
</a>
</div>
</el-dialog>
</div>
</template>
<script>
import { openLoading, closeLoading } from "../../utils/utils";
import BreadCrumb from "@/components/breadcrumb.vue";
import SendSetDialog from "@/components/shop/send-set-dialog";
import { getOrdersExportUrl } from "@/utils/yqrange/yqrangeApi";
import {
getOrdersExportUrl,
uploadExpress,
uploadRefund,
getUploadExpressProgress,
getUploadRefundProgress,
} from "@/utils/yqrange/yqrangeApi";
import {
queryOrderList,
updateExpress,
......@@ -624,7 +812,7 @@ import {
brokerListAll,
brokerOwnerListAll,
updateExpressNo,
expressInfo
expressInfo,
} from "@/utils/shop";
import { toDecimal2 } from "@/utils";
......@@ -639,7 +827,7 @@ export default {
curmbFirst: "云鹊店铺",
curmbSecond: "订单管理",
activeName: "all",
showStatus:-1,
showStatus: -1,
searchForm: {
showStatus: -1,
storeId: 0,
......@@ -656,8 +844,15 @@ export default {
pageSize: 10,
saleType: 0,
},
// 确认物流
statFlg: false,
exportDialog: false,
ExportType: 1, // 1导入物流信息 2、批量取消订单
FailureReasonFlag: false,
progressFlag: false,
totalRows: 0,
tableData: [],
FailureTable: [],
closeTradeDialog: false,
reasonTxt: "",
changePriceDialog: false,
......@@ -681,10 +876,12 @@ export default {
{ required: true, message: "请选择退款对象", trigger: "blur" },
],
},
expressData:[{
time:"2021-06-23 12:21:21",
context:"待揽收"
}],
expressData: [
{
time: "2021-06-23 12:21:21",
context: "待揽收",
},
],
showTuiDialog: false,
tuiForm: {
order: null,
......@@ -746,15 +943,37 @@ export default {
label: "批发",
},
],
fileData: {
fileBaseStr: "",
fileName: "",
},
ownerId: "",
brokerList: [],
brokerOwnerList: [],
showOrderNoFlag: false,
LogisticsUrl:
"https://pica-pro.oss-cn-shanghai.aliyuncs.com/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet/2021/08/12/20210812101318239-4c4e680b.xlsx",
CancelOrderUrl:
"https://pica-pro.oss-cn-shanghai.aliyuncs.com/application/vnd.openxmlformats-officedocument.spreadsheetml.sheet/2021/08/12/2021081210125196-5a8743b1.xlsx",
timer: null,
pickerOptions1: {
disabledDate: (time) => {
return time.getTime() > new Date().getTime(); //减去一天的时间代表可以选择同一天;
},
},
ProgressData: {
totalNum: "", //总数
status: "", // 1完成 0进行中
doneNum: "", // doneNum 完成数量
successNum: "", // 成功数量
failNum: "", //失败数量
repeatNum: "",
errorFileUrl: "", // 失败 原因文件
errorList: [], // 失败列表
},
isLoading: false,
// errorFileUrl:"",
};
},
created() {
......@@ -765,6 +984,165 @@ export default {
this.brokerOwnerListAll();
},
methods: {
// 确认导入
confirmExport() {
if (this.ExportType == 1) {
this.uploadExpress();
} else {
this.uploadRefund();
}
},
//
ShowExportDialog(type) {
this.ExportType = type;
this.exportDialog = true;
this.fileData = {
fileBaseStr: "",
fileName: "",
};
},
// 批量更新物流操作
uploadExpress() {
this.isLoading = true;
openLoading(this);
uploadExpress(this.fileData)
.then((res) => {
if (res && res.code == "000000") {
closeLoading(this);
this.getUploadExpressProgressInterval(
res.data.tradeBatchUploadLogId
);
} else {
this.isLoading = false;
this.$message.error(res.message);
}
})
.catch((err) => {
this.isLoading = false;
closeLoading(this);
});
},
// 批量取消退款操作
uploadRefund() {
this.isLoading = true;
openLoading(this);
uploadRefund(this.fileData)
.then((res) => {
console.log(res);
if (res && res.code == "000000") {
closeLoading(this);
this.getUploadRefundProgressInterval(res.data.tradeBatchUploadLogId);
} else {
this.isLoading = false;
this.$message.error(res.message);
}
})
.catch((err) => {
this.isLoading = false;
closeLoading(this);
});
},
// 获取物流上传进度
async getUploadExpressProgressInterval(id) {
clearInterval(this.timer);
let status = await this.getUploadExpressProgress(id);
if (status == 0) {
console.log("status------", status);
this.timer = setInterval(() => {
this.getUploadExpressProgress(id);
}, 2000);
}
},
getUploadExpressProgress(id) {
return getUploadExpressProgress(id).then((res) => {
if (res && res.code == "000000") {
this.isLoading = false;
this.exportDialog = false;
this.progressFlag = true;
this.ProgressData = res.data;
if (res.data.status == 1) {
clearInterval(this.timer);
setTimeout(() => {
this.progressFlag = false;
this.statFlg = true;
}, 2000);
}
return res.data.status;
} else {
this.isLoading = false;
this.$message.error(res.message);
return;
}
});
},
// 获取批量取消进度
async getUploadRefundProgressInterval(id) {
clearInterval(this.timer);
let status = await this.getUploadRefundProgress(id);
if (status == 0) {
this.timer = setInterval(() => {
this.getUploadRefundProgress(id);
}, 2000);
}
},
getUploadRefundProgress(id) {
return getUploadRefundProgress(id).then((res) => {
if (res && res.code == "000000") {
this.exportDialog = false;
this.progressFlag = true;
this.ProgressData = res.data;
this.isLoading = false;
if (res.data.status == 1) {
clearInterval(this.timer);
setTimeout(() => {
this.progressFlag = false;
this.statFlg = true;
}, 2000);
}
return res.data.status;
} else {
this.isLoading = false;
this.$message.error(res.message);
return;
}
});
},
// 取消导入物流信息
cancelExport() {
(this.fileData = {
fileBaseStr: "",
fileName: "",
}),
(this.exportDialog = false);
},
// 导入物流单号
uploadfile(file) {
let _this = this;
let arr = file.type.split("/");
let ext = "." + arr[1];
let name = file.name;
let reader = new FileReader();
reader.onload = function (e) {
_this.fileData.fileName = name;
_this.fileData.fileBaseStr = e.target.result.substr(
e.target.result.indexOf("base64,") + 7
);
console.log("fileJson", _this.fileData);
};
reader.readAsDataURL(file);
},
// 确认取消订单
showReasondialog() {
this.statFlg = false;
this.FailureReasonFlag = true;
},
searchList() {
this.searchForm.orderBeginTime = this.createRangeTime[0];
this.searchForm.orderEndTime = this.createRangeTime[1];
......@@ -880,16 +1258,16 @@ export default {
},
//查看物流
viewLogistics(row) {
console.log("row-----",row)
console.log("row-----", row);
expressInfo({ expressNo: row.expressNo }).then((res) => {
if (res.code == "000000") {
this.expressData=[...res.data.data,...this.expressData]
this.expressData = [...res.data.data, ...this.expressData];
this.logisticeInfo = `${row.expressName} ${row.expressNo}`;
this.expressForm.order = row;
this.expressForm.company = `${row.expressName}`;
this.expressForm.no = `${row.expressNo}`;
this.expressForm.extendMessage = `${row.remark}`;
this.showStatus=row.showStatus;
this.showStatus = row.showStatus;
this.viewLogisticsDialog = true;
}
});
......@@ -1092,11 +1470,11 @@ export default {
</script>
<style lang="scss">
.order-manage-wrapper {
.el-step__icon{
.el-step__icon {
border: none;
background: transparent;
}
.el-step__title{
.el-step__title {
font-size: 14px;
}
......@@ -1104,7 +1482,7 @@ export default {
display: block !important;
height: 30%;
}
.dot{
.dot {
border-radius: 50%;
height: 8px;
width: 8px;
......@@ -1114,6 +1492,9 @@ export default {
.order-manage-content {
background: #fff;
padding: 10px;
.button-container {
margin-bottom: 10px;
}
.header-title {
padding: 10px 12px;
font-size: 13px;
......@@ -1205,4 +1586,90 @@ export default {
width: 193px;
}
}
.exportlogistics-dialog {
}
.upload-container {
display: flex;
justify-content: flex-start;
align-items: center;
.file-name {
margin-right: 5px;
}
}
.progress-container {
display: flex;
justify-content: center;
align-items: center;
flex-direction: column;
}
.progress-content {
width: 150px;
height: 40px;
background: #449284;
border-radius: 5px;
display: flex;
justify-content: center;
align-items: center;
color: #fff;
}
.progress-tag {
width: 150px;
height: 40px;
border: 1px solid #ebeef5;
display: flex;
justify-content: center;
align-items: center;
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.1);
margin-bottom: 10px;
position: relative;
.popper__arrow {
position: absolute;
bottom: 0px;
left: 50%;
margin-right: 3px;
transform: translateX(-3px);
border-bottom-width: 0;
&::after {
position: absolute;
display: block;
width: 0;
height: 0;
border-top-color: #fff;
border-left-color: transparent;
border-bottom-color: transparent;
border-right-color: transparent;
border-style: solid;
content: " ";
border-width: 6px;
}
}
}
.stat-container {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
.stat-title {
color: #333;
font-size: 16px;
font-weight: bold;
margin-bottom: 10px;
}
.stat-result {
display: flex;
justify-content: space-between;
width: 300px;
.failure {
color: #e63c3c;
}
}
}
.importUrl {
color: #449284;
}
</style>
......@@ -511,7 +511,6 @@
this.updatedTree = true;
},
getTreeCheck() {
debugger
//重构归并树
let checkedTree = operationData.getSimpleCheckedNodes(
this.$refs.tree.store
......@@ -1338,4 +1337,3 @@
left: 0;
}
</style>
\ No newline at end of file
......@@ -4414,12 +4414,12 @@ vjs.SeekBar.prototype.onMouseMove = function(event){
};
vjs.SeekBar.prototype.onMouseUp = function(event){
debugger
vjs.Slider.prototype.onMouseUp.call(this, event);
this.player_.scrubbing = false;
if (this.videoWasPlaying) {
debugger
this.player_.play();
}
};
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册