<template>
|
<div class="app-container">
|
<div class="filter-container">
|
<div style="display: block;">
|
<div class="basic_search">
|
<span>区域:</span>
|
<el-select v-model="listQuery.province" clearable filterable @change="changeArea('province')">
|
<el-option
|
v-for="item in provinceList"
|
:key="item.id"
|
:label="item.name"
|
:value="item.name"
|
>
|
</el-option>
|
</el-select>
|
</div>
|
<div class="basic_search">
|
<el-select v-model="listQuery.city" prop="city" clearable filterable @change="changeArea('city')">
|
<el-option
|
v-for="item in cityList"
|
:key="item.id"
|
:label="item.name"
|
:value="item.name"
|
>
|
</el-option>
|
</el-select>
|
</div>
|
<div class="basic_search">
|
<el-select v-model="listQuery.area" clearable filterable @change="changeArea('area')">
|
<el-option
|
v-for="item in districtList"
|
:key="item.id"
|
:label="item.name"
|
:value="item.name"
|
>
|
</el-option>
|
</el-select>
|
</div>
|
<div class="basic_search">
|
<span>企业名称:</span>
|
<el-input filterable clearable v-model="listQuery.enterpriseName" style="width:200px">
|
</el-input>
|
</div>
|
<div class="basic_search">
|
<span>库区名称:</span>
|
<el-input filterable clearable v-model="listQuery.reserveName" style="width:200px">
|
</el-input>
|
</div>
|
<div class="basic_search" style="margin-right: 10px">
|
<el-button style="margin-left: 10px;" type="primary" @click="reset()">重置</el-button>
|
<el-button style="margin-left: 10px;" type="primary" icon="el-icon-search" @click="searchData()">查询</el-button>
|
</div>
|
</div>
|
</div>
|
<div class="table_content">
|
<el-table
|
v-loading="listLoading"
|
:data="stateStockData"
|
:span-method="objectSpanMethod"
|
:cell-class-name="tableRowClassName" @cell-mouse-leave="cellMouseLeave" @cell-mouse-enter="cellMouseEnter"
|
border
|
:stripe="false"
|
style="width: 100%;"
|
>
|
<el-table-column label="库区名称" prop="reserveName" align="center" fixed="left">
|
<template slot-scope="scope">
|
<span v-if="scope.row.reserveName =='合计'">{{scope.row.reserveName}}</span>
|
<el-link v-else type="primary" @click="openStock('edit',scope.row)">{{scope.row.reserveName}}</el-link>
|
</template>
|
</el-table-column>
|
<el-table-column label="所属区域" prop="region" align="center" fixed="left"/>
|
<el-table-column label="所属企业" prop="enterpriseName" align="center"></el-table-column>
|
<el-table-column label="地址" prop="topAddress" align="center"></el-table-column>
|
<el-table-column label="库区面积/㎡" prop="topSquare" align="center"></el-table-column>
|
<el-table-column label="有效存储总面积/㎡" prop="topStorageSquare" align="center"></el-table-column>
|
<el-table-column label="总库容量" prop="topApprovedReserves" align="center"></el-table-column>
|
<el-table-column label="总核药量" prop="topNuclearDose" align="center"></el-table-column>
|
<el-table-column label="库房名称" prop="storehouseName" align="center">
|
<template slot-scope="scope">
|
<span v-if="scope.row.storehouseName == '本库区合计'||scope.row.storehouseName == '合计'">{{scope.row.storehouseName}}</span>
|
<el-link v-else type="primary" @click="openRecord(scope.row)">{{scope.row.storehouseName}}</el-link>
|
</template>
|
</el-table-column>
|
<el-table-column label="库房面积/㎡" prop="square" align="center"></el-table-column>
|
<el-table-column label="有效存储面积/㎡" prop="storageSquare" align="center"></el-table-column>
|
<el-table-column label="库容量/箱" prop="approvedReserves" align="center"></el-table-column>
|
<el-table-column label="核药量/kg" prop="nuclearDose" align="center"></el-table-column>
|
<el-table-column label="当前总库存" prop="totalStock" align="center"></el-table-column>
|
<!-- <el-table-column label="存药量" prop="totalStock" align="center"></el-table-column>-->
|
<el-table-column label="爆竹类(箱)" prop="firecracker" align="center"></el-table-column>
|
<el-table-column label="喷花类(箱)" prop="spray" align="center"></el-table-column>
|
<el-table-column label="旋转类(箱)" prop="rotation" align="center"></el-table-column>
|
<el-table-column label="吐珠类(箱)" prop="bead" align="center"></el-table-column>
|
<el-table-column label="玩具类(箱)" prop="toy" align="center"></el-table-column>
|
<el-table-column label="组合烟花类(箱)" prop="combined" align="center"></el-table-column>
|
<el-table-column label="是否超量" prop="overShoot" align="center">
|
<template slot-scope="scope">
|
<span>{{scope.row.overShoot ==0?'否':scope.row.overShoot ==1?'是':'--'}}</span>
|
</template>
|
</el-table-column>
|
<el-table-column label="是否允许盘库" prop="inventoryStatus" align="center">
|
<template slot-scope="scope">
|
<span v-if="scope.row.inventoryStatus == null">--</span>
|
<el-switch :disabled="disable" v-else v-model="scope.row.inventoryStatus" :active-value="1" :inactive-value="0" @change="changeStatus($event,scope.row)"></el-switch>
|
</template>
|
</el-table-column>
|
<el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" fixed="right">
|
<template slot-scope="scope" v-if="scope.row.storehouseName !== '本库区合计' && scope.row.storehouseName !== '合计'">
|
<el-button type="text" @click="showEnterprises(scope.row)">查看详情</el-button>
|
<el-button type="text" @click="delData(scope.row)">删除</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<br>
|
<add-stock ref="addStock" @refresh="getList"></add-stock>
|
<stock-records ref="stockRecords"></stock-records>
|
<enterprise-stock ref="enterStock"></enterprise-stock>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import {computePageCount} from "../../utils";
|
import {delStore, getReservesForUser, getSupervisionStatistics, changeInventory} from "../../api/warehouse"
|
import addStock from "./components/addStock"
|
import stockRecords from "./components/stockRecords"
|
import enterpriseStock from "./components/enterpriseStock"
|
import Cookies from "js-cookie"
|
import {getCityListData, getProvinceListData} from "../../api/area";
|
import {MessageBox} from "_element-ui@2.14.1@element-ui";
|
export default {
|
name: "stockSupervision",
|
components: {addStock,stockRecords, enterpriseStock},
|
data() {
|
return {
|
tableKey: '',
|
disable: false,
|
provinceList: [],
|
cityList: [],
|
districtList: [],
|
Cookies: Cookies,
|
listLoading: false,
|
stateStockData: [],
|
rowIndex: '-1',
|
OrderIndexArr: [],
|
hoverOrderArr: [],
|
listQuery: {
|
province: '',
|
city: '',
|
area: '',
|
enterpriseName: '',
|
reserveName: '',
|
},
|
}
|
},
|
created() {
|
const t = this
|
t.getList()
|
t.getProvince()
|
const roles = JSON.parse(Cookies.get('roles'))
|
if(roles.find(i=>i.name == '管理员'|| i.name == '监管部门')){
|
this.disable = false
|
}else{
|
this.disable = true
|
}
|
},
|
mounted() {
|
},
|
watch: {},
|
methods: {
|
async getList(){
|
const res = await getSupervisionStatistics(this.listQuery)
|
if(res.data.code == 200){
|
this.stateStockData=[]
|
const tableData = res.data.result.reserves
|
if(Array.isArray(tableData)){
|
tableData.map(item=>{
|
if(Array.isArray(item.storehouse.warehouses) && item.storehouse.whTotal){
|
let obj = {
|
approvedReserves: item.storehouse.whTotal.wtotalApprovedReserves,
|
bead: item.storehouse.whTotal.wtotalBead,
|
combined: item.storehouse.whTotal.wtotalCombined,
|
firecracker: item.storehouse.whTotal.wtotalFirecracker,
|
inventoryStatus: null,
|
nuclearDose: item.storehouse.whTotal.wtotalNuclearDose,
|
overShoot: null,
|
rotation: item.storehouse.whTotal.wtotalRotation,
|
spray: item.storehouse.whTotal.wtotalSpray,
|
square: item.storehouse.whTotal.wtotalSquare,
|
storageSquare: item.storehouse.whTotal.wtotalStorageSquare,
|
storehouseId: null,
|
storehouseName: item.storehouse.whTotal.wname,
|
totalStock: item.storehouse.whTotal.wtotalStock,
|
toy: item.storehouse.whTotal.wtotalToy,
|
}
|
item.storehouse.warehouses.push(obj)
|
item.storehouse.warehouses.map((subRes, subIndex)=>{
|
let content = {}
|
content = subRes
|
content['topId'] = item.reserveId
|
content['reserveName'] = item.reserveName
|
content['enterpriseName'] = item.enteripriseName
|
content['region'] = item.region
|
content['topAddress'] = item.reserveAddress
|
content['topSquare'] = item.square
|
content['topStorageSquare'] = item.storageSquare
|
content['topApprovedReserves'] = item.approvedReserves
|
content['topNuclearDose'] = item.nuclearDose
|
// 重点!赋值合并的行数数值,只需要取子循环的第一个数赋值待合并的行数即可
|
if(subIndex == 0){
|
content['rowNum'] = item.storehouse.warehouses.length
|
}
|
this.stateStockData.push(content)
|
})
|
}
|
})
|
}
|
if(res.data.result.total){
|
const total = res.data.result.total
|
let totalObj = {
|
topId: null,
|
reserveName: total.name,
|
region: '--',
|
topAddress: '--',
|
enterpriseName: '--',
|
storehouseName: '合计',
|
rowNum: 1,
|
topSquare: total.resTotalSquare,
|
topStorageSquare: total.resTotalStorageSquare,
|
topApprovedReserves: total.resTotalApprovedReserves,
|
topNuclearDose: total.resTotalNuclearDose,
|
firecracker: total.totalFirecracker,
|
rotation: total.totalRotation,
|
spray: total.totalSpray,
|
totalStock: total.totalStock,
|
toy: total.totalToy,
|
approvedReserves: total.whTotalApprovedReserves,
|
square: total.whTotalSquare,
|
storageSquare: total.whTotalStorageSquare,
|
nuclearDose: total.whTotalNuclearDose,
|
bead: total.totalBead,
|
combined: total.totalCombined
|
}
|
this.stateStockData.push(totalObj)
|
}
|
}else{
|
this.$message({
|
type:'warning',
|
message: res.data.message
|
})
|
}
|
},
|
|
searchData(){
|
this.getList()
|
},
|
|
reset(){
|
this.listQuery={
|
province: '',
|
city: '',
|
area: '',
|
enterpriseName: '',
|
reserveName: ''
|
}
|
this.getList()
|
},
|
|
showEnterprises(row){
|
const t = this
|
t.$refs.enterStock.open(row,'监管')
|
},
|
|
openStock(type,data){
|
const t = this
|
t.$refs.addStock.open(type,data)
|
},
|
|
openRecord(row){
|
const t = this
|
t.$refs.stockRecords.open(row)
|
},
|
|
delData(row){
|
const t = this
|
MessageBox.confirm('确定删除库房名为:' + row.storehouseName + '的信息', '确定删除', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(() => {
|
t.deleteStore(row.storehouseId)
|
}).catch(() => {
|
console.log('已取消删除')
|
})
|
},
|
|
async deleteStore(id){
|
const res = await delStore({id: id})
|
if(res.data.code == 200){
|
this.$message({
|
type:'success',
|
message: '删除成功'
|
})
|
}else{
|
this.$message({
|
type:'warning',
|
message: res.data.message
|
})
|
}
|
},
|
|
async getProvince(){
|
let res = await getProvinceListData()
|
if(res.data.code === "200"){
|
this.provinceList = res.data.result.provinceList
|
}
|
},
|
|
changeStatus(val,row){
|
MessageBox.confirm('确定删除库房名为:' + row.storehouseName + '的盘库许可状态', '确定修改', {
|
confirmButtonText: '确定',
|
cancelButtonText: '取消',
|
type: 'warning'
|
}).then(async () => {
|
const res = await changeInventory({inventoryStatus: val,id: row.storehouseId})
|
if(res.data.code == 200){
|
this.$message({
|
type:'success',
|
message: '修改成功'
|
})
|
}else{
|
this.$message({
|
type:'warning',
|
message: res.data.message
|
})
|
}
|
await this.getList()
|
}).catch(() => {
|
this.getList()
|
})
|
},
|
|
async changeArea(value) {
|
if (value === 'province') {
|
this.listQuery.city = ''
|
this.listQuery.area = ''
|
let res = await getCityListData({type:2, parenttype:1, parentname:this.listQuery.province})
|
if (res.data.code === "200") {
|
this.cityList = res.data.result
|
}
|
} else if (value === 'city') {
|
this.listQuery.area = ''
|
let res = await getCityListData({type:3, parenttype:2, parentname:this.listQuery.city})
|
if (res.data.code === "200") {
|
this.districtList = res.data.result
|
}
|
}
|
},
|
|
objectSpanMethod({ row, column, rowIndex, columnIndex }) {
|
// columnIndex 代表列数,从0开始计数,我们要合并的字段属于第一列,取0
|
if(columnIndex <= 7){
|
return {
|
rowspan: row.rowNum, // 待合并行数 -- 合并的行数长度就等于之前赋值的子数据的长度;未赋值的即表示0,不显示
|
colspan: row.rowNum>0?1:0 // 待合并列数 -- 合并的列数自身占一列,被合并的要返回0,表示不显示
|
};
|
}
|
},
|
tableRowClassName({row,rowIndex}) {
|
let arr = this.hoverOrderArr
|
for (let i = 0; i < arr.length; i++) {
|
if (rowIndex == arr[i]) {
|
return 'hovered-row'
|
}
|
}
|
},
|
cellMouseEnter(row, column, cell, event) {
|
this.rowIndex = row.rowIndex;
|
this.hoverOrderArr = [];
|
this.OrderIndexArr.forEach(element => {
|
if (element.indexOf(this.rowIndex) >= 0) {
|
this.hoverOrderArr = element
|
}
|
})
|
},
|
cellMouseLeave(row, column, cell, event) {
|
this.rowIndex = '-1'
|
this.hoverOrderArr = [];
|
},
|
},
|
}
|
</script>
|
<style>
|
.el-table .hovered-row {
|
background: #f5f7fa;
|
}
|
</style>
|
<style scoped>
|
.basic_search {
|
display: inline-block;
|
}
|
/deep/.el-table .el-table__body-wrapper table tr:nth-child(2n) td{
|
background: #fff !important;
|
}
|
</style>
|