|
@@ -34,17 +34,17 @@
|
|
|
|
|
|
<script>
|
|
|
const _ = require('lodash');
|
|
|
+import FileSaver from 'file-saver';
|
|
|
+const ExcelJS = require('exceljs');
|
|
|
import { mapState, mapGetters, createNamespacedHelpers } from 'vuex';
|
|
|
-const { mapActions } = createNamespacedHelpers('order');
|
|
|
export default {
|
|
|
name: 'form-1',
|
|
|
- props: {},
|
|
|
+ props: { deliverList: { type: Array } },
|
|
|
components: {},
|
|
|
data: function () {
|
|
|
return {
|
|
|
list: [],
|
|
|
fields: [
|
|
|
- // { label: '订单id', model: 'order_id' },
|
|
|
{ label: '订单编号', model: 'order_no' },
|
|
|
{ label: '商品名称', model: 'goods.name' },
|
|
|
{ label: '商品规格', model: 'name' },
|
|
@@ -58,44 +58,44 @@ export default {
|
|
|
await this.search();
|
|
|
},
|
|
|
methods: {
|
|
|
- ...mapActions(['query', 'fetch', 'create', 'update']),
|
|
|
// 查询
|
|
|
async search() {
|
|
|
- let data = this.data;
|
|
|
- let test = _(data).groupBy('address._id').values().value();
|
|
|
- let list = [];
|
|
|
- for (const p1 of test) {
|
|
|
- let goodsList = [];
|
|
|
- for (const p2 of p1) {
|
|
|
- for (const p3 of p2.goods) {
|
|
|
- // p3 = (({ goods, name, buy_num }) => ({ goods, name, buy_num }))(p3);
|
|
|
- delete p3.flow_money;
|
|
|
- delete p3.freight;
|
|
|
- delete p3.id;
|
|
|
- delete p3.status;
|
|
|
- delete p3._id;
|
|
|
- delete p3.meta;
|
|
|
- delete p3.num;
|
|
|
- delete p3.sell_money;
|
|
|
- delete p3.__v;
|
|
|
- delete p3.tags;
|
|
|
- delete p3.cart_id;
|
|
|
- let good = (({ name }) => ({ name }))(p3.goods);
|
|
|
- p3.goods = good;
|
|
|
- p3.order_no = p2.no;
|
|
|
- }
|
|
|
- goodsList.push(...p2.goods);
|
|
|
- let i = 0;
|
|
|
- for (const p4 of goodsList) {
|
|
|
- p4.index = i;
|
|
|
- i++;
|
|
|
+ let data = this.deliverList;
|
|
|
+ if (data) {
|
|
|
+ let test = _(data).groupBy('address._id').values().value();
|
|
|
+ let list = [];
|
|
|
+ for (const p1 of test) {
|
|
|
+ let goodsList = [];
|
|
|
+ for (const p2 of p1) {
|
|
|
+ for (const p3 of p2.goods) {
|
|
|
+ // p3 = (({ goods, name, buy_num }) => ({ goods, name, buy_num }))(p3);
|
|
|
+ delete p3.flow_money;
|
|
|
+ delete p3.freight;
|
|
|
+ delete p3.id;
|
|
|
+ delete p3.status;
|
|
|
+ delete p3._id;
|
|
|
+ delete p3.meta;
|
|
|
+ delete p3.num;
|
|
|
+ delete p3.sell_money;
|
|
|
+ delete p3.__v;
|
|
|
+ delete p3.tags;
|
|
|
+ delete p3.cart_id;
|
|
|
+ let good = (({ name }) => ({ name }))(p3.goods);
|
|
|
+ p3.goods = good;
|
|
|
+ p3.order_no = p2.no;
|
|
|
+ }
|
|
|
+ goodsList.push(...p2.goods);
|
|
|
+ let i = 0;
|
|
|
+ for (const p4 of goodsList) {
|
|
|
+ p4.index = i;
|
|
|
+ i++;
|
|
|
+ }
|
|
|
}
|
|
|
+ let address = (({ name, phone, province, city, area, address, _id }) => ({ name, phone, province, city, area, address, _id }))(p1[0].address);
|
|
|
+ list.push({ goodsList, address });
|
|
|
}
|
|
|
- let address = (({ name, phone, province, city, area, address }) => ({ name, phone, province, city, area, address }))(p1[0].address);
|
|
|
- list.push({ goodsList, address });
|
|
|
+ this.$set(this, 'list', list);
|
|
|
}
|
|
|
- console.log(list);
|
|
|
- this.$set(this, 'list', list);
|
|
|
},
|
|
|
handleSelect(goodsList, address) {
|
|
|
let fileList = [];
|
|
@@ -114,19 +114,76 @@ export default {
|
|
|
val.goodsList = goodsList;
|
|
|
}
|
|
|
} else {
|
|
|
+ // 判断this.fileList里是否有和选中的地址id相同的,不同就push到fileList里
|
|
|
this.fileList.push({ goodsList, address });
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- console.log(this.fileList);
|
|
|
},
|
|
|
toFile() {
|
|
|
- console.log(this.fileList);
|
|
|
- this.$message({ message: '导出成功', type: 'success' });
|
|
|
+ const workbook = new ExcelJS.Workbook();
|
|
|
+ let list = this.fileList;
|
|
|
+ for (let [index, p1] of list.entries()) {
|
|
|
+ let name = p1.address.name + index;
|
|
|
+ const worksheet = workbook.addWorksheet(name);
|
|
|
+ // 设置标题-start
|
|
|
+ // 获取单元格位置
|
|
|
+ let titleCell = worksheet.getCell('A1');
|
|
|
+ // 合并单元格
|
|
|
+ worksheet.mergeCells('A1:D1');
|
|
|
+ // 单元格内容
|
|
|
+ titleCell.value = '发货清单';
|
|
|
+ worksheet.columns.forEach(function (column, i) {
|
|
|
+ column.font = {
|
|
|
+ size: 14,
|
|
|
+ };
|
|
|
+ column.width = 38;
|
|
|
+ column.alignment = {
|
|
|
+ wrapText: true,
|
|
|
+ vertical: 'middle',
|
|
|
+ horizontal: 'left',
|
|
|
+ };
|
|
|
+ });
|
|
|
+ // 单元格内容样式
|
|
|
+ titleCell.style = {
|
|
|
+ alignment: {
|
|
|
+ vertical: 'middle',
|
|
|
+ horizontal: 'center',
|
|
|
+ },
|
|
|
+ font: {
|
|
|
+ size: 20,
|
|
|
+ bold: true,
|
|
|
+ },
|
|
|
+ };
|
|
|
+ // 设置标题-end
|
|
|
+ let data = [
|
|
|
+ ['收获人', p1.address.name],
|
|
|
+ ['联系电话', p1.address.phone],
|
|
|
+ ['收货地址', p1.address.province + p1.address.city + p1.address.area + p1.address.address],
|
|
|
+ ['订单号', '产品名称', '产品规格', '购买数量'],
|
|
|
+ ];
|
|
|
+ for (const p2 of p1.goodsList) {
|
|
|
+ let p4 = [[p2.order_no, p2.goods.name, p2.name, p2.buy_num]];
|
|
|
+ data.push(...p4);
|
|
|
+ }
|
|
|
+ const row = worksheet.getRow(1);
|
|
|
+ row.height = 40;
|
|
|
+ for (const val of data) {
|
|
|
+ worksheet.addRow(val);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ workbook.xlsx.writeBuffer().then((buffer) => {
|
|
|
+ FileSaver.saveAs(
|
|
|
+ new Blob([buffer], {
|
|
|
+ type: 'application/octet-stream',
|
|
|
+ }),
|
|
|
+ `发货清单.xlsx`
|
|
|
+ );
|
|
|
+ });
|
|
|
},
|
|
|
// 返回
|
|
|
toBack() {
|
|
|
- window.history.go('-1');
|
|
|
+ this.$emit('toBack');
|
|
|
},
|
|
|
},
|
|
|
computed: {
|