zaikudaochu

master
lion 2 months ago
parent da0ab68457
commit c1052046fd

@ -32,7 +32,8 @@
"vue-count-to": "^1.0.13", "vue-count-to": "^1.0.13",
"vue-resource": "^1.5.3", "vue-resource": "^1.5.3",
"vue-router": "3.0.6", "vue-router": "3.0.6",
"vuex": "3.1.0" "vuex": "3.1.0",
"xlsx": "^0.18.5"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "4.4.4", "@vue/cli-plugin-babel": "4.4.4",

@ -16,6 +16,16 @@ export function list(params) {
}) })
} }
export function exportList(params) {
return request({
url: '/api/admin/book_detail/index',
method: 'get',
params,
timeout: 60000,
isLoading: false
})
}
export function show(params) { export function show(params) {
return request({ return request({
url: '/api/admin/book_detail/show', url: '/api/admin/book_detail/show',

@ -0,0 +1,8 @@
import * as XLSX from 'xlsx'
export function exportJsonToXlsx(rows, sheetName, filename) {
const worksheet = XLSX.utils.json_to_sheet(rows)
const workbook = XLSX.utils.book_new()
XLSX.utils.book_append_sheet(workbook, worksheet, sheetName)
XLSX.writeFile(workbook, filename)
}

@ -22,6 +22,7 @@
<Button style="margin-left: 10px" type="primary" @click="select={page:1,keyword:''}">重置 <Button style="margin-left: 10px" type="primary" @click="select={page:1,keyword:''}">重置
</Button> </Button>
<Button style="margin-left: 10px" type="primary" @click="doSearch">查询</Button> <Button style="margin-left: 10px" type="primary" @click="doSearch">查询</Button>
<Button style="margin-left: 10px" type="primary" @click="doExport" :loading="exportLoading">导出</Button>
<Button style="margin-left: 10px" type="primary" @click="doPrint">打印</Button> <Button style="margin-left: 10px" type="primary" @click="doPrint">打印</Button>
</div> </div>
</slot> </slot>
@ -40,10 +41,14 @@
<script> <script>
import { import {
list as index, list as index,
exportList,
save, save,
del, del,
show show
} from "@/api/bookStore/storeList"; } from "@/api/bookStore/storeList";
import {
exportJsonToXlsx
} from '@/utils/exportExcel'
import putIn from '@/views/bookStore/components/putIn' import putIn from '@/views/bookStore/components/putIn'
export default { export default {
@ -72,6 +77,7 @@
], ],
total: 0, total: 0,
list: [], list: [],
exportLoading: false,
table: [{ table: [{
prop: 'no', prop: 'no',
label: '库存编号', label: '库存编号',
@ -184,6 +190,52 @@
let baseUrl = process.env.VUE_APP_BASE_API + "/print"; let baseUrl = process.env.VUE_APP_BASE_API + "/print";
window.open(baseUrl) window.open(baseUrl)
}, },
buildExportParams() {
const params = {
page: 1,
page_size: 99999,
keyword: this.select.keyword
}
if (this.select.borrow_status !== '' && this.select.borrow_status !== null && this.select.borrow_status !== undefined) {
params.borrow_status = this.select.borrow_status
}
return params
},
formatLocation(row) {
if (row.bookshelf && row.line && row.rows) {
return `书架:${row.bookshelf} 第${row.line}列 第${row.rows}行`
}
return ''
},
async doExport() {
this.exportLoading = true
try {
const res = await exportList(this.buildExportParams())
const rows = (res.data || []).map(item => ({
'库存编号': item.no || '',
'图书分类': item.book?.type?.name || '',
'图书': item.book?.name || item.book_name || '',
'作者': item.book?.author || '',
'装订方式': item.book?.bind_way || '',
'所在位置': this.formatLocation(item),
'入库日期': item.enter_date || '',
'借阅状态': item.borrow_status == 1 ? '借出' : '在库',
'备注': item.remark || '',
'创建时间': item.created_at || ''
}))
if (!rows.length) {
this.$Message.warning('暂无可导出数据')
return
}
const filename = `库存记录_${this.$moment().format('YYYYMMDDHHmmss')}.xlsx`
exportJsonToXlsx(rows, '库存记录', filename)
this.$Message.success(`导出成功,共 ${rows.length} 条`)
} catch (error) {
this.$Message.error('导出失败,请稍后重试')
} finally {
this.exportLoading = false
}
},
pageChange(e) { pageChange(e) {
this.select.page = e this.select.page = e
this.load(); this.load();

@ -15,6 +15,9 @@ const name = defaultSettings.title // page title
// port = 9528 npm run dev OR npm run dev --port = 9528 // port = 9528 npm run dev OR npm run dev --port = 9528
const port = process.env.port || process.env.npm_config_port || 8014 // dev port const port = process.env.port || process.env.npm_config_port || 8014 // dev port
/** 生产构建输出到 Laravel 后端 public/admin */
const adminOutputDir = path.resolve(__dirname, '../book-sqhj/public/admin')
/** 本地开发接口代理目标(来自 .env.development,勿提交敏感信息) */ /** 本地开发接口代理目标(来自 .env.development,勿提交敏感信息) */
const devProxyTarget = const devProxyTarget =
process.env.DEV_PROXY_TARGET || 'http://book-sqhj.ali251.langye.net' process.env.DEV_PROXY_TARGET || 'http://book-sqhj.ali251.langye.net'
@ -41,7 +44,7 @@ module.exports = {
* Detail: https://cli.vuejs.org/config/#publicpath * Detail: https://cli.vuejs.org/config/#publicpath
*/ */
publicPath: '/admin/', publicPath: '/admin/',
outputDir: './dist', outputDir: adminOutputDir,
assetsDir: 'static', assetsDir: 'static',
css: { css: {
loaderOptions: { // 向 CSS 相关的 loader 传递选项 loaderOptions: { // 向 CSS 相关的 loader 传递选项

Loading…
Cancel
Save