报表增加导出功能
This commit is contained in:
parent
8a3b5f981e
commit
30b0e7ab37
@ -21,6 +21,7 @@
|
||||
"lodash.pick": "^4.4.0",
|
||||
"md5": "^2.2.1",
|
||||
"nprogress": "^0.2.0",
|
||||
"xlsx": "^0.14.3",
|
||||
"viser-vue": "^2.4.4",
|
||||
"vue": "^2.6.10",
|
||||
"vue-area-linkage": "^5.1.0",
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import * as api from '@/api/api'
|
||||
import { isURL } from '@/utils/validate'
|
||||
import Vue from 'vue'
|
||||
import XLSX from 'xlsx'
|
||||
|
||||
export function timeFix() {
|
||||
const time = new Date()
|
||||
@ -540,6 +540,35 @@ export function getNowFormatDateTime() {
|
||||
return currentdate;
|
||||
}
|
||||
|
||||
/**
|
||||
* js获取当前时间, 格式“MMddHHMMSS”
|
||||
*/
|
||||
export function getNowFormatStr() {
|
||||
var date = new Date();
|
||||
var month = date.getMonth() + 1;
|
||||
var strDate = date.getDate();
|
||||
var strHours = date.getHours();
|
||||
var strMinutes = date.getMinutes();
|
||||
var strSeconds = date.getSeconds();
|
||||
if (month >= 1 && month <= 9) {
|
||||
month = "0" + month;
|
||||
}
|
||||
if (strDate >= 0 && strDate <= 9) {
|
||||
strDate = "0" + strDate;
|
||||
}
|
||||
if (strHours >= 0 && strHours <= 9) {
|
||||
strHours = "0" + strHours;
|
||||
}
|
||||
if (strMinutes >= 0 && strMinutes <= 9) {
|
||||
strMinutes = "0" + strMinutes;
|
||||
}
|
||||
if (strSeconds >= 0 && strSeconds <= 9) {
|
||||
strSeconds = "0" + strSeconds;
|
||||
}
|
||||
var currentdate = month + strDate + strHours + strMinutes + strSeconds;
|
||||
return currentdate;
|
||||
}
|
||||
|
||||
/**
|
||||
* JS中根据指定值删除数组中的元素
|
||||
* @param arrylist
|
||||
@ -570,4 +599,58 @@ export function changeListFmtMinus(arr) {
|
||||
}
|
||||
}
|
||||
return newArr;
|
||||
}
|
||||
|
||||
/**
|
||||
通用的打开下载对话框方法,没有测试过具体兼容性
|
||||
@param url 下载地址,也可以是一个blob对象,必选
|
||||
@param saveName 保存文件名,可选
|
||||
*/
|
||||
export function openDownloadDialog (url, saveName) {
|
||||
if (typeof url === 'object' && url instanceof Blob) {
|
||||
url = URL.createObjectURL(url) // 创建blob地址
|
||||
}
|
||||
let aLink = document.createElement('a')
|
||||
aLink.href = url
|
||||
saveName = saveName + '_' + getNowFormatStr() + '.xlsx'
|
||||
aLink.download = saveName || '' // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
|
||||
let event
|
||||
if (window.MouseEvent) event = new MouseEvent('click')
|
||||
else {
|
||||
event = document.createEvent('MouseEvents')
|
||||
event.initMouseEvent('click', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null)
|
||||
}
|
||||
aLink.dispatchEvent(event)
|
||||
}
|
||||
|
||||
/**
|
||||
* 将一个sheet转成最终的excel文件的blob对象,然后利用URL.createObjectURL下载
|
||||
* @param sheet
|
||||
* @param sheetName
|
||||
* @returns {Blob}
|
||||
*/
|
||||
export function sheet2blob (aoa, sheetName) {
|
||||
let sheet = XLSX.utils.aoa_to_sheet(aoa)
|
||||
sheetName = sheetName || 'sheet1'
|
||||
let workbook = {
|
||||
SheetNames: [sheetName],
|
||||
Sheets: {}
|
||||
}
|
||||
workbook.Sheets[sheetName] = sheet
|
||||
// 生成excel的配置项
|
||||
let wopts = {
|
||||
bookType: 'xlsx', // 要生成的文件类型
|
||||
bookSST: false, // 是否生成Shared String Table,官方解释是,如果开启生成速度会下降,但在低版本IOS设备上有更好的兼容性
|
||||
type: 'binary'
|
||||
}
|
||||
let wbout = XLSX.write(workbook, wopts)
|
||||
let blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' })
|
||||
// 字符串转ArrayBuffer
|
||||
function s2ab (s) {
|
||||
let buf = new ArrayBuffer(s.length)
|
||||
let view = new Uint8Array(buf)
|
||||
for (let i = 0; i != s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF
|
||||
return buf
|
||||
}
|
||||
return blob
|
||||
}
|
||||
@ -17,10 +17,11 @@
|
||||
<a-input placeholder="请输入编号" v-model="queryParam.serialNo"></a-input>
|
||||
</a-form-item>
|
||||
</a-col>
|
||||
<a-col :md="3" :sm="24">
|
||||
<a-col :md="4" :sm="24">
|
||||
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
|
||||
<a-button type="primary" @click="searchQuery">查询</a-button>
|
||||
<a-button style="margin-left: 8px" v-print="'#reportPrint'" type="primary" icon="printer">打印</a-button>
|
||||
<a-button style="margin-left: 8px" v-print="'#reportPrint'" icon="printer">打印</a-button>
|
||||
<a-button style="margin-left: 8px" @click="exportExcel" icon="download">导出</a-button>
|
||||
</span>
|
||||
</a-col>
|
||||
<a-col :md="3" :sm="24">
|
||||
@ -63,6 +64,7 @@
|
||||
<script>
|
||||
import AccountInOutList from './modules/AccountInOutList'
|
||||
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
|
||||
import { openDownloadDialog, sheet2blob} from "@/utils/util"
|
||||
import JEllipsis from '@/components/jeecg/JEllipsis'
|
||||
import {getAction} from '@/api/manage'
|
||||
export default {
|
||||
@ -138,6 +140,15 @@
|
||||
this.$refs.accountInOutList.show(record);
|
||||
this.$refs.accountInOutList.title = "查看账户流水";
|
||||
this.$refs.accountInOutList.disableSubmit = false;
|
||||
},
|
||||
exportExcel() {
|
||||
let aoa = [['名称', '编号', '期初金额', '本月发生额', '账户流水']]
|
||||
for (let i = 0; i < this.dataSource.length; i++) {
|
||||
let ds = this.dataSource[i]
|
||||
let itemDevice = [ds.name, ds.serialNo, ds.initialAmount, ds.thisMonthAmount, ds.currentAmount]
|
||||
aoa.push(itemDevice)
|
||||
}
|
||||
openDownloadDialog(sheet2blob(aoa), '账户统计')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -35,7 +35,8 @@
|
||||
<span style="float: left;overflow: hidden;" class="table-page-search-submitButtons">
|
||||
<a-col :md="4" :sm="24">
|
||||
<a-button type="primary" @click="searchQuery">查询</a-button>
|
||||
<a-button style="margin-left: 8px" v-print="'#reportPrint'" type="primary" icon="printer">打印</a-button>
|
||||
<a-button style="margin-left: 8px" v-print="'#reportPrint'" icon="printer">打印</a-button>
|
||||
<a-button style="margin-left: 8px" @click="exportExcel" icon="download">导出</a-button>
|
||||
</a-col>
|
||||
</span>
|
||||
<a-col :md="3" :sm="24">
|
||||
@ -80,7 +81,7 @@
|
||||
import { JeecgListMixin } from '@/mixins/JeecgListMixin'
|
||||
import { getAction } from '@/api/manage'
|
||||
import {queryMaterialCategoryTreeList} from '@/api/api'
|
||||
import { getMpListShort } from "@/utils/util"
|
||||
import { getMpListShort, openDownloadDialog, sheet2blob} from "@/utils/util"
|
||||
import JEllipsis from '@/components/jeecg/JEllipsis'
|
||||
import moment from 'moment'
|
||||
import Vue from 'vue'
|
||||
@ -206,6 +207,16 @@
|
||||
this.$refs.materialInOutList.show(record);
|
||||
this.$refs.materialInOutList.title = "查看商品库存流水(全部仓库)";
|
||||
this.$refs.materialInOutList.disableSubmit = false;
|
||||
},
|
||||
exportExcel() {
|
||||
let aoa = [['条码', '名称', '规格', '型号', '颜色', '类别', '单位', '单价', '初始库存', '当前库存', '当前库存金额']]
|
||||
for (let i = 0; i < this.dataSource.length; i++) {
|
||||
let ds = this.dataSource[i]
|
||||
let itemDevice = [ds.mBarCode, ds.name, ds.standard, ds.model, ds.color, ds.categoryName, ds.unitName,
|
||||
ds.purchaseDecimal, ds.initialStock, ds.currentStock, ds.currentStockPrice]
|
||||
aoa.push(itemDevice)
|
||||
}
|
||||
openDownloadDialog(sheet2blob(aoa), '商品库存')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1470,6 +1470,21 @@ adjust-sourcemap-loader@^1.1.0:
|
||||
object-path "^0.9.2"
|
||||
regex-parser "^2.2.9"
|
||||
|
||||
adler-32@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.2.0.tgz#6a3e6bf0a63900ba15652808cb15c6813d1a5f25"
|
||||
integrity sha1-aj5r8KY5ALoVZSgIyxXGgT0aXyU=
|
||||
dependencies:
|
||||
exit-on-epipe "~1.0.1"
|
||||
printj "~1.1.0"
|
||||
|
||||
adler-32@~1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/adler-32/-/adler-32-1.3.0.tgz#3cad1b71cdfa69f6c8a91f3e3615d31a4fdedc72"
|
||||
integrity sha512-f5nltvjl+PRUh6YNfUstRaXwJxtfnKEWhAWWlmKvh+Y3J2+98a0KKVYDEhz6NdKGqswLhjNGznxfSsZGOvOd9g==
|
||||
dependencies:
|
||||
printj "~1.2.2"
|
||||
|
||||
aggregate-error@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0"
|
||||
@ -2932,6 +2947,15 @@ center-align@^0.1.1:
|
||||
align-text "^0.1.3"
|
||||
lazy-cache "^1.0.3"
|
||||
|
||||
cfb@^1.1.2:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/cfb/-/cfb-1.2.1.tgz#209429e4c68efd30641f6fc74b2d6028bd202402"
|
||||
integrity sha512-wT2ScPAFGSVy7CY+aauMezZBnNrfnaLSrxHUHdea+Td/86vrk6ZquggV+ssBR88zNs0OnBkL2+lf9q0K+zVGzQ==
|
||||
dependencies:
|
||||
adler-32 "~1.3.0"
|
||||
crc-32 "~1.2.0"
|
||||
printj "~1.3.0"
|
||||
|
||||
chalk@^1.1.1, chalk@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||
@ -3196,6 +3220,14 @@ codemirror@^5.46.0:
|
||||
resolved "https://registry.npmjs.org/codemirror/-/codemirror-5.52.0.tgz#4dbd6aef7f0e63db826b9a23922f0c03ac75c0a7"
|
||||
integrity sha512-K2UB6zjscrfME03HeRe/IuOmCeqNpw7PLKGHThYpLbZEuKf+ZoujJPhxZN4hHJS1O7QyzEsV7JJZGxuQWVaFCg==
|
||||
|
||||
codepage@~1.14.0:
|
||||
version "1.14.0"
|
||||
resolved "https://registry.yarnpkg.com/codepage/-/codepage-1.14.0.tgz#8cbe25481323559d7d307571b0fff91e7a1d2f99"
|
||||
integrity sha1-jL4lSBMjVZ19MHVxsP/5HnodL5k=
|
||||
dependencies:
|
||||
commander "~2.14.1"
|
||||
exit-on-epipe "~1.0.1"
|
||||
|
||||
collection-visit@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0"
|
||||
@ -3286,9 +3318,9 @@ commander@2, commander@^2.18.0, commander@^2.20.0:
|
||||
resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
|
||||
integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
|
||||
|
||||
commander@2.17.x:
|
||||
commander@2.17.x, commander@~2.17.1:
|
||||
version "2.17.1"
|
||||
resolved "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf"
|
||||
integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==
|
||||
|
||||
commander@^4.1.1:
|
||||
@ -3296,6 +3328,11 @@ commander@^4.1.1:
|
||||
resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068"
|
||||
integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==
|
||||
|
||||
commander@~2.14.1:
|
||||
version "2.14.1"
|
||||
resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa"
|
||||
integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw==
|
||||
|
||||
commander@~2.19.0:
|
||||
version "2.19.0"
|
||||
resolved "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a"
|
||||
@ -3507,6 +3544,14 @@ cosmiconfig@^5.0.0:
|
||||
js-yaml "^3.13.1"
|
||||
parse-json "^4.0.0"
|
||||
|
||||
crc-32@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208"
|
||||
integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA==
|
||||
dependencies:
|
||||
exit-on-epipe "~1.0.1"
|
||||
printj "~1.1.0"
|
||||
|
||||
create-ecdh@^4.0.0:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff"
|
||||
@ -5011,6 +5056,11 @@ execa@^3.3.0:
|
||||
signal-exit "^3.0.2"
|
||||
strip-final-newline "^2.0.0"
|
||||
|
||||
exit-on-epipe@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692"
|
||||
integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw==
|
||||
|
||||
expand-brackets@^2.1.4:
|
||||
version "2.1.4"
|
||||
resolved "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622"
|
||||
@ -5438,6 +5488,11 @@ forwarded@~0.1.2:
|
||||
resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
|
||||
integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=
|
||||
|
||||
frac@~1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/frac/-/frac-1.1.2.tgz#3d74f7f6478c88a1b5020306d747dc6313c74d0b"
|
||||
integrity sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==
|
||||
|
||||
fragment-cache@^0.2.1:
|
||||
version "0.2.1"
|
||||
resolved "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19"
|
||||
@ -8982,6 +9037,21 @@ pretty-error@^2.0.2, pretty-error@^2.1.1:
|
||||
renderkid "^2.0.1"
|
||||
utila "~0.4"
|
||||
|
||||
printj@~1.1.0:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222"
|
||||
integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ==
|
||||
|
||||
printj@~1.2.2:
|
||||
version "1.2.3"
|
||||
resolved "https://registry.yarnpkg.com/printj/-/printj-1.2.3.tgz#2cfb2b192a1e5385dbbe5b46658ac34aa828508a"
|
||||
integrity sha512-sanczS6xOJOg7IKDvi4sGOUOe7c1tsEzjwlLFH/zgwx/uyImVM9/rgBkc8AfiQa/Vg54nRd8mkm9yI7WV/O+WA==
|
||||
|
||||
printj@~1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/printj/-/printj-1.3.0.tgz#9018a918a790e43707f10625d6e10187a367cff6"
|
||||
integrity sha512-017o8YIaz8gLhaNxRB9eBv2mWXI2CtzhPJALnQTP+OPpuUfP0RMWqr/mHCzqVeu1AQxfzSfAtAq66vKB8y7Lzg==
|
||||
|
||||
private@^0.1.6, private@^0.1.8:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.npmjs.org/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff"
|
||||
@ -10132,6 +10202,13 @@ sprintf-js@~1.0.2:
|
||||
resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
|
||||
integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=
|
||||
|
||||
ssf@~0.10.2:
|
||||
version "0.10.3"
|
||||
resolved "https://registry.yarnpkg.com/ssf/-/ssf-0.10.3.tgz#8eae1fc29c90a552e7921208f81892d6f77acb2b"
|
||||
integrity sha512-pRuUdW0WwyB2doSqqjWyzwCD6PkfxpHAHdZp39K3dp/Hq7f+xfMwNAWIi16DyrRg4gg9c/RvLYkJTSawTPTm1w==
|
||||
dependencies:
|
||||
frac "~1.1.2"
|
||||
|
||||
sshpk@^1.7.0:
|
||||
version "1.16.1"
|
||||
resolved "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
|
||||
@ -11593,6 +11670,19 @@ ws@^6.0.0, ws@^6.2.1:
|
||||
dependencies:
|
||||
async-limiter "~1.0.0"
|
||||
|
||||
xlsx@^0.14.3:
|
||||
version "0.14.5"
|
||||
resolved "https://registry.yarnpkg.com/xlsx/-/xlsx-0.14.5.tgz#3637e914d791bdca7382816e173f7d725ed0e0d2"
|
||||
integrity sha512-s/5f4/mjeWREmIWZ+HtDfh/rnz51ar+dZ4LWKZU3u9VBx2zLdSIWTdXgoa52/pnZ9Oe/Vu1W1qzcKzLVe+lq4w==
|
||||
dependencies:
|
||||
adler-32 "~1.2.0"
|
||||
cfb "^1.1.2"
|
||||
codepage "~1.14.0"
|
||||
commander "~2.17.1"
|
||||
crc-32 "~1.2.0"
|
||||
exit-on-epipe "~1.0.1"
|
||||
ssf "~0.10.2"
|
||||
|
||||
xtend@^4.0.0, xtend@~4.0.1:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
||||
|
||||
Loading…
Reference in New Issue
Block a user