Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
jinli gu
JSH ERP
Commits
30b0e7ab
Commit
30b0e7ab
authored
Sep 08, 2021
by
季圣华
Browse files
报表增加导出功能
parent
8a3b5f98
Changes
5
Hide whitespace changes
Inline
Side-by-side
jshERP-web/package.json
View file @
30b0e7ab
...
...
@@ -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"
,
...
...
jshERP-web/src/utils/util.js
View file @
30b0e7ab
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
}
\ No newline at end of file
jshERP-web/src/views/report/AccountReport.vue
View file @
30b0e7ab
...
...
@@ -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
),
'
账户统计
'
)
}
}
}
...
...
jshERP-web/src/views/report/MaterialStock.vue
View file @
30b0e7ab
...
...
@@ -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
),
'
商品库存
'
)
}
}
}
...
...
jshERP-web/yarn.lock
View file @
30b0e7ab
...
...
@@ -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"
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment