You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

194 lines
6.7 KiB

<template>
<el-card>
<extra-area>
<template v-slot:extra>
<el-input
v-model="temp.filter"
size="small"
placeholder="筛选分类"
clearable
suffix-icon="el-icon-search"
style="margin-bottom: 10px"
@input="filter"
/>
<category-tree ref="tree" :filter-node-method="filterNode" @node-click="nodeClick"/>
</template>
<search-form>
<search-form-item label="商品分类">
<el-input :value="temp.cname" maxlength="100" clearable @clear="clearCidSearch"/>
</search-form-item>
<search-form-item label="采购订单">
<el-input v-model="searchForm.cgddid" maxlength="100" clearable/>
</search-form-item>
<search-form-item label="采购入库单">
<el-input v-model="searchForm.cgrkid" maxlength="100" clearable/>
</search-form-item>
<search-form-item label="入库时间">
<el-date-picker
v-model="temp.ctime"
format="yyyy-MM-dd"
range-separator="-"
type="daterange"
value-format="timestamp"
/>
</search-form-item>
</search-form>
<el-row class="button-group">
<el-button icon="el-icon-search" size="small" type="primary" @click="search">查 询</el-button>
<el-button icon="el-icon-download" size="small" type="info" @click="downloadExcel">导 出</el-button>
</el-row>
<el-row v-loading="config.loading" class="table-container">
<abstract-table
:data="tableData"
:highlight-current-row="false"
show-summary
:summary-method="summary"
>
<el-table-column align="center" label="#" type="index" width="80"/>
<el-table-column align="center" label="商品分类">
<a slot-scope="{row}" type="primary" @click="() => more(row)">{{ row.cname }}</a>
</el-table-column>
<el-table-column align="center" label="库存数量" prop="totalNum" show-overflow-tooltip/>
<el-table-column align="center" label="总 值" prop="totalPrice" show-overflow-tooltip/>
</abstract-table>
<abstract-pagination :model="searchForm" @current-change="pageChange"/>
</el-row>
</extra-area>
<detail-dialog v-model="detailDialog" :title="title" :cid="cid"/>
</el-card>
</template>
<script>
import tableMixin from '@/mixin/tablePageMixin'
import CategoryTree from '@/component/biz/CategoryTree'
import DetailDialog from "./DetailDialog"
import ExtraArea from '@/component/ExtraArea'
import SearchForm from "@/component/SearchForm"
import SearchFormItem from "@/component/SearchForm/item"
import {search} from "@/api/stock/current"
import {isEmpty, debounce} from "@/util"
import {exportExcel} from "@/util/excel"
import {plus} from "@/util/math"
import {getNodeId} from "@/util/tree"
export default {
name: "currentStock",
mixins: [tableMixin],
components: {CategoryTree, DetailDialog, ExtraArea, SearchForm, SearchFormItem},
data() {
return {
searchForm: {
cids: null,
cgddids: null,
cgrkids: null
},
temp: {
filter: '',
cname: null,
cids: null,
ctime: []
},
detailDialog: false,
excel: {
columns: [
{header: '序号', prop: 'id', width: 20, merge: true},
{header: '分类名称', prop: 'cname', width: 20, merge: true},
{header: '库存总数', prop: 'totalNum', width: 20, merge: true},
{header: '库存总值', prop: 'totalPrice', width: 20, merge: true},
{header: '采购订单号', prop: 'cgddid', width: 20, merge: true},
{header: '采购单价', prop: 'cgPrice', width: 20, merge: true},
{header: '采购数量', prop: 'cgNum', width: 20, merge: true},
{header: '采购入库单号', prop: 'cgrkid', width: 20},
{header: '入库时间', prop: 'ctime', width: 20},
{header: '入库数量', prop: 'rkNum', width: 20},
],
merge: {primaryKey: 'cid', orderKey: 'id'}
}
}
},
computed: {
title() {
return this.row ? `库存详细(${this.row.cname})` : ''
},
cid() {
return this.row ? this.row.cid : null
}
},
methods: {
summary({data}) {
let sum = ['合计', '', '', 0]
data.forEach(i => {
sum[3] = plus(sum[3], i.totalPrice)
})
return sum
},
filterNode(value, data) {
if (isEmpty(value)) return true
return data.name.includes(value)
},
filter(v) {
this.$refs.tree.filter(v)
},
mergeSearchForm() {
return {
...this.searchForm,
startTime: this.temp.ctime ? this.temp.ctime[0] : null,
endTime: this.temp.ctime ? this.temp.ctime[1] + 86400000 : null
}
},
search() {
if (this.config.loading) return
this.config.loading = true
search
.request(this.mergeSearchForm())
.then(({data: {list, total}}) => {
this.searchForm.total = total
this.tableData = list
})
.finally(() => this.config.loading = false)
},
downloadExcel() {
exportExcel(`/stock/current/export`, this.mergeSearchForm(), this.excel)
},
nodeClick(obj) {
const ids = getNodeId(obj.children)
ids.unshift(obj.id)
this.searchForm.cids = ids.join(',')
this.temp.cname = obj.name
},
clearCidSearch() {
this.searchForm.cids = null
this.temp.cname = null
let tree = this.$refs.tree.$refs.tree
tree.setCurrentKey()
},
more(row) {
this.row = row
this.detailDialog = true
}
},
created() {
this.filter = debounce(this.filter, 500)
}
}
</script>