You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

700 lines
20 KiB

<style lang="less">
@import "@/styles/table-common.less";
@import "./orderManage.less";
</style>
<template>
<div class="search">
<Card>
4 weeks ago
<Tabs v-model="tabName" :animated="false" @on-click="changeOrderTab">
<TabPane label="指派单" name="7"></TabPane>
<TabPane label="待接单" name="0"></TabPane>
<TabPane label="待取货" name="1"></TabPane>
<TabPane label="待送达" name="2"></TabPane>
<TabPane label="已完成" name="3"></TabPane>
<TabPane label="已取消" name="4"></TabPane>
<TabPane label="已退款" name="5"></TabPane>
<TabPane label="预订单" name="6"></TabPane>
</Tabs>
<Row v-show="openSearch" @keydown.enter.native="handleSearch">
<Form ref="searchForm" :model="searchForm" inline :label-width="70">
<FormItem label="状态" prop="orderId">
<Select ref="dep" @on-change="checkStatus" clearable="true">
<Option v-for="(item, i) in dictData" :key="i" :value="item.value">{{
item.title
}}</Option>
</Select>
</FormItem>
<FormItem label="名称" prop="orderLogistics">
<Input type="text" v-model="searchForm.searchStr" clearable placeholder="请输入收发货人名称"
style="width: 200px" />
</FormItem>
<FormItem label="收货人id" prop="kdOrderId1">
<Select v-model="shou" clearable='false' @on-clear="clearShou=true" filterable
:remote-method="getShouValue" :loading="loading1" placeholder="请选择或输入添加">
<Option v-for="item in shouList" :value="item.id" :key="item.username"
:label="item.shipperOrReceiverName" @on-change="checkShouValue(item)">
<span style="margin-right: 10px">{{ item.shipperOrReceiverName }}</span>
<span style="color: #ccc">{{ item.mobile }}</span>
</Option>
</Select>
</FormItem>
<FormItem label="发货人id" prop="kdOrderId">
<Select v-model="fa" clearable='false' filterable @on-clear="searchForm.shipperId =''"
:remote-method="getFaValue" :loading="loading2" placeholder="请选择或输入添加">
<Option v-for="item in faList" @on-change="checkFaValue(item)" :value="item.id"
:key="item.mobile" :label="item.shipperOrReceiverName">
<span style="margin-right: 10px">{{ item.shipperOrReceiverName }}</span>
<span style="color: #ccc">{{ item.mobile }}</span>
</Option>
</Select>
</FormItem>
<FormItem style="margin-left: -35px" class="br">
<Button @click="handleSearch" type="primary" icon="ios-search">搜索</Button>
<Button @click="handleReset">重置</Button>
</FormItem>
</Form>
</Row>
<Row align="middle" justify="space-between" class="operation">
<div class="icons">
<Tooltip content="刷新" placement="top" transfer>
<Icon type="md-refresh" size="18" class="item" @click="getDataList" />
</Tooltip>
<Tooltip :content="openSearch ? '关闭搜索' : '开启搜索'" placement="top" transfer>
<Icon type="ios-search" size="18" class="item tip" @click="openSearch = !openSearch" />
</Tooltip>
<Tooltip :content="openTip ? '关闭提示' : '开启提示'" placement="top" transfer>
<Icon type="md-bulb" size="18" class="item tip" @click="openTip = !openTip" />
</Tooltip>
<Tooltip content="表格密度" placement="top" transfer>
<Dropdown @on-click="changeTableSize" trigger="click">
<Icon type="md-list" size="18" class="item" />
<DropdownMenu slot="list">
<DropdownItem :selected="tableSize == 'default'" name="default">默认</DropdownItem>
<DropdownItem :selected="tableSize == 'large'" name="large">宽松</DropdownItem>
<DropdownItem :selected="tableSize == 'small'" name="small">紧密</DropdownItem>
</DropdownMenu>
</Dropdown>
</Tooltip>
</div>
</Row>
<Alert show-icon v-show="openTip">
已选择
<span class="select-count">{{ selectList.length }}</span>
<a class="select-clear" @click="clearSelectAll">清空</a>
</Alert>
4 weeks ago
<Table :loading="loading" border :columns="columns" :data="data" :size="tableSize" sortable="custom"
@on-sort-change="changeSort" @on-selection-change="showSelect" ref="table"></Table>
<Row type="flex" justify="end" class="page">
<Page :current="searchForm.pageNum" :total="total" :page-size="searchForm.pageSize"
@on-change="changePage" @on-page-size-change="changePageSize" :page-size-opts="[10, 20, 50]"
size="small" show-total show-elevator show-sizer></Page>
</Row>
</Card>
4 weeks ago
<!-- 订单详情 -->
<Modal :title="订单详情" v-model="Visiable" :mask-closable="false" :scrollabele="true" :width="1000">
<logistics-address v-if="Visiable" ref="dialog"></logistics-address>
<div slot="footer" v-show="Visiable">
<Button type="text" @click="Visiable = false">关闭</Button>
</div>
</Modal>
<!-- 自定义导出数据 -->
<Modal v-model="exportModalVisible" :title="exportTitle" :loading="loadingExport" @on-ok="exportCustomData">
<Form ref="exportForm" :label-width="100">
<FormItem label="导出文件名">
<Input v-model="filename" />
</FormItem>
<FormItem label="自定义导出列">
<CheckboxGroup v-model="chooseColumns">
<Checkbox v-for="(item, i) in exportColumns" :label="item.title" :key="i" :value="item.checked"
:disabled="item.disabled"></Checkbox>
</CheckboxGroup>
</FormItem>
</Form>
</Modal>
<!-- 导入数据 -->
<Drawer title="导入数据" closable v-model="importModalVisible" width="800" draggable>
<div style="
display: flex;
justify-content: space-between;
align-items: center;
">
<Upload action :before-upload="beforeUploadImport" accept=".xls, .xlsx">
<Button :loading="reading" icon="ios-cloud-upload-outline"
style="margin-right: 10px">上传Excel文件</Button>
<span v-if="uploadfile.name">当前选择文件{{ uploadfile.name }}</span>
</Upload>
<Button @click="clearImportData" icon="md-trash">清空数据</Button>
</div>
<Alert type="warning" show-icon>导入前请下载查看导入模版数据文件查看所需字段及说明确保数据格式正确不得修改列英文名称</Alert>
<Table :columns="importColumns" border :height="height" :data="importTableData" ref="importTable"></Table>
<div class="drawer-footer">
<Button @click="downloadTemple" type="info">下载导入模板</Button>
<div style="position: absolute; right: 15px; display: inline-block">
<Button @click="importModalVisible = false">关闭</Button>
<Button :loading="importLoading" :disabled="importTableData.length <= 0" @click="importData"
style="margin-left: 8px" type="primary">
确认导入
<span v-if="importTableData.length > 0">{{ importTableData.length }} 条数据</span>
</Button>
</div>
</div>
</Drawer>
<addEdit :data="form" :type="showType" v-model="showOrder" @on-submit="getDataList" />
</div>
</template>
<script>
import {
getLogisticsOrderPageList,
getLogisticsOrderStatistics,
batchUpdateOrderStatus,
4 weeks ago
getOrderList,
enableUser,
getLogisticsAddressBookPageList,
disableUser,
deleteOrder,
getAllUserData,
importUserData,
resetUserPass,
getDictDataByType,
} from "@/api/index";
import {
getAllLogiticsCompanyData,
getLogiticsCompanyData,
} from "@/api/app";
import {
shortcuts
} from "@/libs/shortcuts";
// 模版导入文件表数据
import {
userColumns,
userData
} from "./importTemplate";
// 指定导出列数据
import {
exportColumn
} from "./exportColumn";
import excel from "@/libs/excel";
import addEdit from "./addEdit.vue";
import dict from "@/views/my-components/hiver/dict";
4 weeks ago
import logisticsAddress from "@/views/app/business/logistics/logisticsAddress";
export default {
name: "order-manage",
components: {
addEdit,
dict,
4 weeks ago
logisticsAddress,
},
data() {
return {
tableSize: "default",
height: 510,
loading1: false,
loading2: false,
showOrder: false,
clearShou: false,
clearFa: false,
shouList: [],
shou: '',
fa: '',
faList: [],
orderStatistics: {},
showType: "0",
openSearch: true,
openTip: true,
loading: true,
reading: false,
importLoading: false,
loadingExport: true,
exportModalVisible: false,
importModalVisible: false,
drop: false,
dropDownContent: "展开",
dropDownIcon: "ios-arrow-down",
selectList: [],
searchForm: {
pageNum: 1,
pageSize: 10,
4 weeks ago
regionId: "",
searchType: 0,
shopName: "",
userId: ""
},
selectDate: null,
options: {
shortcuts: shortcuts,
},
form: {},
columns: [{
type: "index",
width: 60,
align: "center",
fixed: "left",
},
{
4 weeks ago
title: "订单编号",
key: "id",
width: 150,
align: "center",
},
{
4 weeks ago
title: "用户账号",
key: "receiverPhone",
width: 150,
align: "center",
},
{
4 weeks ago
title: "店铺名称",
key: "shopName",
width: 200,
align: "center",
},
{
4 weeks ago
title: "交易金额",
key: "companyName",
width: 100,
align: "center",
},
{
4 weeks ago
title: "订单总金额",
key: "totalAmount",
width: 160,
align: "center",
},
{
4 weeks ago
title: "商家优惠券金额",
key: "receiverName",
width: 150,
align: "center",
},
{
4 weeks ago
title: "平台优惠券金额",
key: "weight",
4 weeks ago
width: 150,
align: "center",
},
{
4 weeks ago
title: "完成支付时间",
key: "createTime",
width: 150,
align: "center",
},
{
4 weeks ago
title: "订单状态",
key: "status",
width: 200,
align: "center",
},
{
title: "操作",
key: "action",
width: 170,
align: "center",
fixed: "right",
render: (h, params) => {
return h("div", [
h(
"a", {
on: {
click: () => {
this.getDetail(params.row);
},
},
},
"查看详情"
),
]);
},
},
],
exportColumns: exportColumn,
chooseColumns: [],
filename: "订单数据",
exportTitle: "确认导出",
exportType: "",
importTableData: [],
importColumns: [],
uploadfile: {
name: "",
},
tempColumns: userColumns,
tempData: userData,
data: [],
exportData: [],
total: 0,
dictData: [{
title: "全部",
value: ""
}, {
title: "已付",
value: 0
}, {
title: "未付",
value: 1
}, {
title: "挂单",
value: 2
}],
};
},
computed: {
colHidden: function() {
return this.columns.filter(function(e) {
return !e.hidden;
})
}
},
mounted() {
// 计算高度
this.height = Number(document.documentElement.clientHeight - 230);
4 weeks ago
this.init();
},
methods: {
init() {
this.getLogisticsInfo()
// 初始化导出列数据
let array = [];
this.exportColumns.forEach((e) => {
// 指定列限制权限
//e.disabled = false;
array.push(e.title);
});
this.chooseColumns = array;
},
checkOrderStatus(v, status) {
let listStr = ''
if (v == '') {
console.log('selectList', this.selectList)
for (let i = 0; i < this.selectList.length; i++) {
if (this.selectList.length != (i + 1)) {
listStr += this.selectList[i].id + ','
} else {
listStr += this.selectList[i].id
}
}
}
this.$Modal.confirm({
title: "确认更改",
content: "您确认要更改此条数据吗?",
loading: true,
onOk: () => {
batchUpdateOrderStatus({
orderIds: v == '' ? listStr : v.id,
status: status
}).then((res) => {
this.$Modal.remove();
if (res.success) {
this.$Message.success("修改成功");
this.getDataList();
}
});
},
});
},
getMonth() {
let date = new Date()
let year = date.getFullYear().toString() //'年'
let month = date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1).toString() : (date.getMonth() + 1)
.toString() //'月'
let da = date.getDate() < 10 ? '0' + date.getDate().toString() : date.getDate().toString() //'日'
let single = year + '-' + month + '-' + da //当天
return single
},
checkStatus(v) {
console.log('下拉框选择', v)
this.searchForm.orderStatus = v
},
handleDropdown(name) {
if (name == "exportData") {
if (this.selectList.length <= 0) {
this.$Message.warning("您还未选择要导出的数据");
return;
}
this.exportType = "part";
this.exportModalVisible = true;
for (let i = 0; i < this.selectList.length; i++) {
// this.selectList[i].orderStatus = this.selectList[i].orderStatus == 0 ? '已付' : this.selectList[i]
// .orderStatus == 1 ? '未付' : this.selectList[i].orderStatus == 2 ? '挂单' : ""
if (this.selectList[i].methodOfSettlement == 0) { //现金
this.selectList[i].xianjin = this.selectList[i].allCost
this.selectList[i].yuefu = ""
} else if (this.selectList[i].methodOfSettlement == 1) {
this.selectList[i].xianjin = ""
this.selectList[i].yuefu = this.selectList[i].allCost
}
// this.selectList[i].methodOfSettlement = this.selectList[i].methodOfSettlement == 0 ? '现金' : this
// .selectList[i].methodOfSettlement == 1 ? '月付' : this.selectList[i].methodOfSettlement == 2 ?
// '提付' : ""
}
this.exportTitle = "确认导出 " + this.selectList.length + " 条数据";
} else if (name == "exportAll") {
this.exportType = "all";
this.exportModalVisible = true;
this.exportTitle = "确认导出全部 " + this.total + " 条数据";
this.searchForm.pageSize = 10000
getLogisticsOrderPageList(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
for (let i = 0; i < res.result.records.length; i++) {
// res.result.records[i].orderStatus = res.result.records[i].orderStatus == 0 ? '已付' :
// res.result.records[i].orderStatus == 1 ? '未付' : res.result.records[i]
// .orderStatus == 2 ? '挂单' : ""
if (res.result.records[i].methodOfSettlement == 0) { //现金
res.result.records[i].xianjin = res.result.records[i].allCost
res.result.records[i].yuefu = ""
} else if (res.result.records[i].methodOfSettlement == 1) {
res.result.records[i].xianjin = ""
res.result.records[i].yuefu = res.result.records[i].allCost
}
// res.result.records[i].methodOfSettlement = res.result.records[i]
// .methodOfSettlement == 0 ? '现金' : res.result.records[i].methodOfSettlement ==
// 1 ? '月付' : res.result.records[i].methodOfSettlement == 2 ? '提付' : ""
}
console.log(res.result.records)
this.exportData = res.result.records;
}
});
}
},
changePage(v) {
this.searchForm.pageNum = v;
this.getDataList();
this.clearSelectAll();
},
changePageSize(v) {
this.searchForm.pageSize = v;
this.getDataList();
},
checkShouValue(v) {
if (this.clearShou == true) {
this.searchForm.receiverId = ""
this.searchForm.receiverName = ""
this.searchForm.receiverMobile = ""
} else {
console.log('shou', v)
this.searchForm.receiverId = v.id
}
},
checkFaValue(v) {
if (this.clearFa == true) {
this.searchForm.shipperId = ""
this.searchForm.shipperName = ""
this.searchForm.shipperMobile = ""
} else {
console.log('发', v)
this.searchForm.shipperId = v.id
}
},
changeTableSize(v) {
this.tableSize = v;
},
4 weeks ago
//查询订单
getLogisticsInfo() {
4 weeks ago
getOrderList(this.searchForm).then((res) => {
this.loading = false;
if (res.success) {
4 weeks ago
this.data = res.result.records
this.total = res.result.total;
}
});
},
4 weeks ago
handleSearch() {
this.searchForm.pageNum = 1;
this.searchForm.pageSize = 10;
this.getDataList();
},
handleReset() {
this.$refs.searchForm.resetFields();
this.searchForm.pageNum = 1;
this.searchForm.pageSize = 10;
this.selectDate = null;
let dayTime = this.getMonth()
this.selectDate = [dayTime, dayTime]
this.searchForm.startDate = dayTime
this.searchForm.endDate = dayTime
this.searchForm.searchStr = "";
this.searchForm.companyId = "";
this.searchForm.companyName = "";
this.$refs.dep.clearSelect();
this.searchForm.departmentId = "";
// 重新加载数据
this.getDataList();
},
changeSort(e) {
this.searchForm.sort = e.key;
this.searchForm.order = e.order;
if (e.order == "normal") {
this.searchForm.order = "";
}
this.getDataList();
},
exportCustomData() {
if (this.filename == "") {
this.filename = "用户数据";
}
// 判断勾选导出列
let exportColumns = [];
this.exportColumns.forEach((e) => {
this.chooseColumns.forEach((c) => {
if (e.title == c && !e.disabled) {
exportColumns.push(e);
}
});
});
this.exportModalVisible = false;
let title = [];
let key = [];
exportColumns.forEach((e) => {
title.push(e.title);
key.push(e.key);
});
const params = {
title: title,
key: key,
data: this.exportData,
autoWidth: true,
filename: this.filename,
};
excel.export_array_to_excel(params);
},
beforeUploadImport(file) {
this.uploadfile = file;
const fileExt = file.name.split(".").pop().toLocaleLowerCase();
if (fileExt == "xlsx" || fileExt == "xls") {
this.readFile(file);
this.file = file;
} else {
this.$Notice.warning({
title: "文件类型错误",
desc: "所选文件‘ " +
file.name +
" ’不是EXCEL文件,请选择后缀为.xlsx或者.xls的EXCEL文件。",
});
}
return false;
},
// 读取文件
readFile(file) {
this.reading = true;
const reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onerror = (e) => {
this.reading = false;
this.$Message.error("文件读取出错");
};
reader.onload = (e) => {
const data = e.target.result;
const {
header,
results
} = excel.read(data, "array");
const tableTitle = header.map((item) => {
return {
title: item,
key: item,
minWidth: 130,
align: "center"
};
});
this.importTableData = results;
this.importColumns = tableTitle;
this.reading = false;
this.$Message.success("读取数据成功");
};
},
clearImportData() {
this.importTableData = [];
this.importColumns = [];
this.uploadfile = {};
},
downloadTemple() {
let title = [];
let key = [];
userColumns.forEach((e) => {
title.push(e.title);
key.push(e.key);
});
const params = {
title: title,
key: key,
data: userData,
autoWidth: true,
filename: "导入用户数据模版",
};
excel.export_array_to_excel(params);
},
importData() {
this.importLoading = true;
importUserData(this.importTableData).then((res) => {
this.importLoading = false;
if (res.success) {
this.importModalVisible = false;
this.getDataList();
this.$Modal.info({
title: "导入结果",
content: res.message,
});
}
});
},
showDetail(v) {
// 转换null为""
for (let attr in v) {
if (v[attr] == null) {
v[attr] = "";
}
}
let str = JSON.stringify(v);
let data = JSON.parse(str);
this.form = data;
if (this.form.methodOfSettlement == 0) { //现金
this.form.xianjin = this.form.allCost
this.form.yuefu = ""
} else if (this.form.methodOfSettlement == 1) {
this.form.xianjin = ""
this.form.yuefu = this.form.allCost
}
this.showType = "0";
this.showOrder = true;
},
4 weeks ago
getDetail(v) {
this.showDetail(v);
},
dropDown() {
if (this.drop) {
this.dropDownContent = "展开";
this.dropDownIcon = "ios-arrow-down";
} else {
this.dropDownContent = "收起";
this.dropDownIcon = "ios-arrow-up";
}
this.drop = !this.drop;
},
showSelect(e) {
this.exportData = e;
this.selectList = e;
},
clearSelectAll() {
this.$refs.table.selectAll(false);
},
}
};
</script>