Browse Source

批量发货导出工具

master
liupopo 1 year ago
parent
commit
ff4522f576
  1. 94
      src/api/lpk/ordertools.js
  2. 9
      src/layout/components/Sidebar/index.vue
  3. 13
      src/router/index.js
  4. 295
      src/views/ordertools/index.vue
  5. 194
      src/views/ordertools/indexInfo.vue

94
src/api/lpk/ordertools.js

@ -0,0 +1,94 @@
import request from '@/utils/request'
export default {
// 获取客户级预约单列表
pageOfCustomer: function(data) {
return request({
url: '/adminapi/reserve/pageOfCustomer',
method: 'post',
data: data
});
},
expExcelOfCustomer: function(params) {
return request({
url: '/adminapi/reserve/expExcelOfCustomer',
method: 'post',
data: params,
// headers: {
// "responseType": "blob" //将二进制流转换成blob对象
// },
headers: {
'Access-Control-Allow-Headers': 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild'
},
responseType: 'blob'
})
},
// 获取各提货点配货列表
pageOfStore: function(data) {
return request({
url: '/adminapi/reserve/pageOfStore',
method: 'post',
data: data
});
},
expExcelOfStore: function(params) {
return request({
url: '/adminapi/reserve/expExcelOfStore',
method: 'post',
data: params,
// headers: {
// "responseType": "blob" //将二进制流转换成blob对象
// },
headers: {
'Access-Control-Allow-Headers': 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild'
},
responseType: 'blob'
})
},
// 获取各支行配货列表
pageOfBank: function(data) {
return request({
url: '/adminapi/reserve/pageOfBank',
method: 'post',
data: data
});
},
expExcelOfBank: function(params) {
return request({
url: '/adminapi/reserve/expExcelOfBank',
method: 'post',
data: params,
// headers: {
// "responseType": "blob" //将二进制流转换成blob对象
// },
headers: {
'Access-Control-Allow-Headers': 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild'
},
responseType: 'blob'
})
},
// 获取总配货列表
pageOfAll: function(data) {
return request({
url: '/adminapi/reserve/pageOfAll',
method: 'post',
data: data
});
},
expExcelOfAll: function(params) {
return request({
url: '/adminapi/reserve/expExcelOfAll',
method: 'post',
data: params,
// headers: {
// "responseType": "blob" //将二进制流转换成blob对象
// },
headers: {
'Access-Control-Allow-Headers': 'Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild'
},
responseType: 'blob'
})
}
}

9
src/layout/components/Sidebar/index.vue

@ -455,6 +455,15 @@
},
name: '/appletBanner/index',
path: '/appletBanner/index'
}, {
alwaysShow: true,
component: 'OrdertoolsIndex',
meta: {
icon: 'el-icon-menu',
title: '订单发货导出工具'
},
name: '/ordertools/index',
path: '/ordertools/index'
}
]

13
src/router/index.js

@ -498,6 +498,19 @@ export const constantRoutes = [{
title: '小程序轮播图'
}
}, ]
}, {
path: '/ordertools',
component: Layout,
redirect: '/ordertools/index',
children: [{
path: '/ordertools/index',
component: () =>
import('@/views/ordertools/index.vue'),
name: 'OrdertoolsIndex',
meta: {
title: '订单发货导出工具'
}
}, ]
},

295
src/views/ordertools/index.vue

@ -0,0 +1,295 @@
<template>
<div class="app-container">
<div v-show="viewState == 1">
<button-bar ref="btnbar" view-title="订单发货导出工具" :btndisabled="btndisabled" @btnhandle="btnHandle" />
<div class="main-content">
<!-- Start 项目列表头部 -->
<div class="listtop">
<div class="tit">导入订单导出批量订单发货</div>
</div>
<el-card class="box-card">
<div slot="header" class="clearfix">
<span>导入订单</span>
</div>
<div>
<el-upload
ref="upload"
class="upload-demo"
:action="updateAction"
:on-change="handleChange"
:on-progress="handleProgress"
:on-preview="handlePreview"
:on-remove="handleRemove"
:on-success="handleSuccess"
:headers="headers"
:file-list="fileList"
:auto-upload="false"
:multiple="false"
:limit="1"
>
<el-button slot="trigger" size="small" type="primary">选取文件</el-button>
<el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>
<div slot="tip" class="el-upload__tip">上传 从微信商户平台导出的订单Excel文件</div>
</el-upload>
</div>
<!-- <div>
<h3>文件上传结果</h3>
<el-card class="box-card">
<div>{{ uploadResultMesssage }}</div>
</el-card>
</div> -->
<div>
<h3>库存汇总数据</h3>
<el-card class="box-card">
<div>{{ hzResultMesssage }}</div>
<div>
<el-button :disabled="!hzFilePath" size="small" type="primary" @click="doDownloadHz">下载 批量订单发货文件</el-button>
<!-- <el-button :disabled="!ychzFilePath" size="small" type="primary" @click="doDownloadHzYc">下载烟草汇总文件</el-button> -->
</div>
</el-card>
</div>
</el-card>
</div>
</div>
<!-- End 查询和其列表部分 -->
<!-- 新增修改部分组件 -->
</div>
</template>
<script>
import req from '@/api/lpk/ordertools.js'
import ButtonBar from '@/components/ButtonBar'
import {
getStorage
} from '@/utils/auth'
export default {
name: 'OrdertoolsIndex',
components: {
ButtonBar
},
data() {
return {
updateAction: process.env.VUE_APP_BASE_API + '/adminapi/ordertools/uploadExcelFile',
headers: {
token: getStorage()
},
fullscreenloading: null,
hzFilePath: '',
hzResultMesssage: '',
fileList: [],
btndisabled: false,
viewState: 1, // 1 2 3 4
isSearchShow: false,
searchxianshitit: '显示查询条件',
tableLoading: false,
dataList: [],
btnList: [
// {
// type: 'success',
// size: 'small',
// icon: 'export',
// btnKey: 'build',
// btnLabel: ''
// },
{
type: 'info',
size: 'small',
icon: 'cross',
btnKey: 'doClose',
btnLabel: '关闭'
}
],
page: {
total: 0, //
current: 1, //
size: 10, //
params: {
startDate: '',
endDate: '',
store: '',
bankSid: '',
cardType: ''
}
},
brandList: [],
bankList: [],
storeList: []
}
},
mounted() {
this.$refs['btnbar'].setButtonList(this.btnList)
},
created() {
// this.getAllStore()
// this.loadList()
// this.getBankList()
},
methods: {
//
clicksearchShow() {
this.isSearchShow = !this.isSearchShow
if (this.isSearchShow) {
this.searchxianshitit = '隐藏查询条件'
} else {
this.searchxianshitit = '显示查询条件'
}
},
btnHandle(btnKey) {
switch (btnKey) {
case 'build': //
this.doBuild()
break
case 'doClose':
this.doClose()
break
default:
break
}
},
bankSelect(val) {
console.log('>>>>>>>>>bankSelect', val)
this.page.params.bankSid = val
this.page.params.store = ''
this.initStore()
},
loadList() {
this.tableLoading = true
req.pageOfCustomer(this.page).then((resp) => {
this.tableLoading = false
if (resp.success) {
const data = resp.data
this.page.total = data.total
this.dataList = data.records
} else {
// resp.code
this.dataList = []
this.page.total = 0
}
}).catch(() => {
this.tableLoading = false
})
},
//
indexMethod(index) {
var pagestart = (this.page.current - 1) * this.page.size
var pageindex = index + 1 + pagestart
return pageindex
},
dosearch() {
this.page.current = 1
this.loadList()
},
resetQuery() {
this.page = {
current: 1,
size: 10,
total: 0,
params: {
startDate: '',
endDate: '',
store: '',
bankSid: '',
cardType: ''
}
}
this.loadList()
},
toRelevancy(row) {
this.viewState = 3
this.$refs['divadd'].showEdit(row)
},
resetState() {
this.viewState = 1
},
doClose() {
this.$store.dispatch('tagsView/delView', this.$route)
this.$router.go(-1)
},
submitUpload() {
this.$refs.upload.submit()
},
handleRemove(file, fileList) {
console.log(file, fileList)
},
handlePreview(file) {
console.log('handlePreview', file)
},
handleChange(file) {
console.log(this.fileList)
},
handleProgress(event, file, fileList) {
// this.progressFlag = true; //
// this.loadProgress = parseInt(event.percent); //
// if (this.loadProgress >= 100) {
// this.loadProgress = 100
// setTimeout( () => {this.progressFlag = false}, 1000) //
// }
const _this = this
this.fullscreenloading = this.$loading({
lock: true,
text: '文件正在上传',
spinner: 'el-icon-loading',
background: 'rgba(0, 0, 0, 0.7)'
})
console.log('111', event.percent)
if (event.percent >= 100) {
_this.fullscreenloading.text = '上传完成,正在解析并生成发货单文件'
}
},
handleSuccess(resp, file, fileList) {
if (this.fullscreenloading) this.fullscreenloading.close()
this.fullscreenloading = null
console.log('222', resp)
// const rdata = resp.data
const _this = this
_this.hzFilePath = resp.data
// _this.fullscreenloading.text = ''
// _this.uploadResultMesssage = '' + rdata.allNum + ' ' + rdata.validNum + ' ' + rdata.durations + ' '
// kchz()
// .then(res => {
// if (this.fullscreenloading) this.fullscreenloading.close()
// this.fullscreenloading = null
// console.log('333', res)
// _this.hzFilePath = res.data
// })
// .catch(e => {
// if (this.fullscreenloading) this.fullscreenloading.close()
// this.fullscreenloading = null
// })
// kchzyc()
// .then(res => {
// if (this.fullscreenloading) this.fullscreenloading.close()
// this.fullscreenloading = null
// console.log('444', res)
// _this.ychzFilePath = res.data
// })
// .catch(e => {
// if (this.fullscreenloading) this.fullscreenloading.close()
// this.fullscreenloading = null
// })
},
doDownloadHz() {
window.open(this.hzFilePath, '_blank')
// downloadhz({ filepath: this.hzFilePath })
// .then(res => {
// console.log('xxx', res)
// const blob = new Blob([res.data])
// const url = window.URL.createObjectURL(blob) // url blob
// const a = document.createElement('a')
// a.href = url
// a.download = '.xlsx'
// a.click()
// window.URL.revokeObjectURL(url) // ur
// })
// .catch(e => {
// console.log(e)
// })
}
}
}
</script>
<style scoped>
</style>

194
src/views/ordertools/indexInfo.vue

@ -0,0 +1,194 @@
<template>
<div>
<div class="tab-header webtop">
<!-- 标题 -->
<div>预约明细</div>
<!-- start 添加修改按钮 -->
<div>
<!-- <el-button type="primary" size="small" :disabled="submitdisabled" @click="saveOrUpdate">保存</el-button> -->
<el-button type="info" size="small" @click="handleReturn()">关闭</el-button>
</div>
<!-- end 添加修改按钮 -->
<!-- end 详情按钮 -->
</div>
<div class="listconadd">
<el-form ref="dataForm" :model="formobj" label-position="top" label-width="190px" class="formadd">
<div class="title" style="display: flex;align-items: center;justify-content: space-between;height:40px">
<div>主体信息</div>
</div>
<el-row>
<el-col :span="4" class="trightb">
<el-form-item class="trightb_item">
<span slot="label">提货卡号</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item class="trightb_item">
<span slot="label">{{formobj.code}}</span>
</el-form-item>
</el-col>
<el-col :span="4" class="trightb">
<el-form-item class="trightb_item">
<span slot="label">礼包类型</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item class="trightb_item">
<span slot="label">{{formobj.bagName}}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="4" class="trightb">
<el-form-item class="trightb_item">
<span slot="label">预约时间</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item class="trightb_item">
<span slot="label">{{formobj.reserveDate}}</span>
</el-form-item>
</el-col>
<el-col :span="4" class="trightb">
<el-form-item class="trightb_item">
<span slot="label">提货门店</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item class="trightb_item">
<span slot="label">{{formobj.store}}</span>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="4" class="trightb">
<el-form-item class="trightb_item">
<span slot="label">用户名称</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item class="trightb_item">
<span slot="label">{{formobj.userName}}</span>
</el-form-item>
</el-col>
<el-col :span="4" class="trightb">
<el-form-item class="trightb_item">
<span slot="label">联系电话</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item class="trightb_item">
<span slot="label">{{formobj.userPhone}}</span>
</el-form-item>
</el-col>
</el-row>
<el-collapse v-model="activeNames" style="margin-top: 20px;">
<el-collapse-item name="1" title="商品列表">
<!-- <template slot="title">
商品列表<span class="span" @click.stop="add()">添加</span>
</template> -->
<el-table v-loading="listLoading" :data="formobj.goodsVo" border style="width: 100%;"
:row-style="{height: '40px'}">
<el-table-column label="序号" type="index" width="80" :index="indexMethod" align="center" />
<!-- <el-table-column label="操作" wid align="center" width="150">
<template slot-scope="scope">
<el-button type="primary" size="mini"
@click="doGoodsDel(scope.row.goodsSid)">删除</el-button>
</template>
</el-table-column> -->
<el-table-column label="商品名称" prop="goodName" align="center" />
<el-table-column label="商品数量" prop="num" align="center" />
</el-table>
</el-collapse-item>
</el-collapse>
</el-form>
</div>
</div>
</template>
<script>
import req from '@/api/order/order.js'
export default {
data() {
return {
listLoading: false,
activeNames: ['1'],
submitdisabled: false,
formobj: {
sid: "",
code: '',
bagName: '',
reserveDate: '',
store: "",
userName: "",
userPhone: "",
goodsVo: []
},
}
},
methods: {
handleReturn(isreload) {
if (isreload === 'true') this.$emit('reloadlist')
this.formobj = {
sid: "",
code: '',
bagName: '',
reserveDate: '',
store: "",
userName: "",
userPhone: "",
goodsVo: []
}
this.$emit('doback')
},
indexMethod(index) {
return index + 1
},
showEdit(row) {
console.log("showAdd》》》》", row)
this.formobj = row
},
}
}
</script>
<style scoped>
.trightb {
display: flex;
align-items: center;
text-align: center;
justify-content: center;
}
.trightb_item {
padding-top: 5px;
}
.span {
margin-left: 50px;
font-size: 15px;
font-weight: 400;
}
/deep/.el-collapse-item__header {
height: 40px;
padding: 10px;
font-weight: bold;
font-size: 20px;
text-align: left;
color: #ffffff;
background-color: #0294d7;
}
/deep/.el-collapse-item__content {
padding-bottom: 0;
}
</style>
Loading…
Cancel
Save