From d5f70e01396783b1d2b84b49344b6d2798eb1097 Mon Sep 17 00:00:00 2001
From: 马宇豪 <978517621@qq.com>
Date: 星期二, 19 十二月 2023 16:09:48 +0800
Subject: [PATCH] 仓储管理
---
src/views/stock/components/enterprisePurchaseDetail.vue | 9
src/views/license/licenseInfo/components/licenseDelayForm.vue | 4
src/views/stock/stockManage.vue | 6
src/views/purchase/dailySaleReport.vue | 23
config/index.js | 2
src/views/purchase/person.vue | 3
src/views/stock/enterprisePurchaseStatistics.vue | 4
src/api/warehouse.js | 213 ++++
src/views/warehouse/components/stockRecords.vue | 261 ++++++
src/views/warehouse/stockSupervision.vue | 403 +++++++++
src/views/warehouse/components/enterpriseStock.vue | 103 ++
src/views/warehouse/components/addStock.vue | 365 ++++++++
config/dev.env.js | 6
src/views/license/licenseInfo/components/licenseModForm.vue | 12
src/views/warehouse/stockManage.vue | 218 +++++
src/views/layout/components/AppMain.vue | 2
src/views/warehouse/components/editStock.vue | 146 +++
src/views/warehouse/stockAnalyse.vue | 425 +++++++++
src/views/layout/Layout.vue | 4
src/views/specialCheck/index.vue | 4
src/views/warehouse/components/recordDetail.vue | 162 +++
src/views/warehouse/components/deliverUsage.vue | 139 +++
src/views/license/licenseInfo/components/licenseInfoForm.vue | 12
23 files changed, 2,486 insertions(+), 40 deletions(-)
diff --git a/config/dev.env.js b/config/dev.env.js
index 680a165..4007947 100644
--- a/config/dev.env.js
+++ b/config/dev.env.js
@@ -18,8 +18,10 @@
// IMG_API: '"http://39.104.85.193:4105/upload/"',
//
//
-// BASE_API: '"http://192.168.0.31:8100"',
-// IMG_API: '"http://192.168.0.31:8100/upload/"',
+// BASE_API: '"http://192.168.0.70:8100"',
+// IMG_API: '"http://192.168.0.70:8100/upload/"',
+
+ // 正式地址
BASE_API: '"http://39.104.85.193:4105"',
IMG_API: '"http://39.104.85.193:4105/upload/"',
// IMG_API: '"http://127.0.0.1:8100/upload/"',
diff --git a/config/index.js b/config/index.js
index da68a8d..a52ff93 100644
--- a/config/index.js
+++ b/config/index.js
@@ -15,7 +15,7 @@
// can be overwritten by process.env.HOST
// if you want dev by ip, please set host: '0.0.0.0'
- host: 'localhost',
+ host: '192.168.0.65',
port: 8101, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
autoOpenBrowser: true,
errorOverlay: true,
diff --git a/src/api/warehouse.js b/src/api/warehouse.js
new file mode 100644
index 0000000..75fd542
--- /dev/null
+++ b/src/api/warehouse.js
@@ -0,0 +1,213 @@
+import request from '@/utils/request'
+import { getToken } from '@/utils/auth'
+
+export function getStorehouseDataByUser(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/select/getStorehouseDataByUser',
+ method: 'post',
+ data
+ })
+}
+
+export function getReservesForUser(params) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/select/getReservesForUser',
+ method: 'get',
+ params: params || {}
+ })
+}
+
+export function saveReserveInfo(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/insert/saveReserveInfo',
+ method: 'post',
+ data
+ })
+}
+
+export function editReserveInfo(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/update/editReserveInfo',
+ method: 'post',
+ data
+ })
+}
+
+export function getInfoById(params) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/select/getReserveAndStorehouseInfo',
+ method: 'get',
+ params: params || {}
+ })
+}
+
+// 授权信息
+export function listStockhouseEnterpriseUserInfo(params) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/select/listStockhouseEnterpriseUserInfo',
+ method: 'get',
+ params: params || {}
+ })
+}
+
+// 修改授权信息
+export function editEnterpriseUserAuthority(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/update/editEnterpriseUserAuthority',
+ method: 'post',
+ data
+ })
+}
+
+// 各企业存货信息
+export function listStockDataByStorehouseId(params) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/select/listStockDataByStorehouseId',
+ method: 'get',
+ params: params || {}
+ })
+}
+
+// 进行盘库
+export function updateStorehouseData(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/update/updateStorehouseData',
+ method: 'post',
+ data
+ })
+}
+
+// 进行盘库
+export function getStorehouseData(params) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/select/getStorehouseData',
+ method: 'get',
+ params: params || {}
+ })
+}
+
+// 开关盘库
+export function changeInventory(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/update/openInventory',
+ method: 'post',
+ data
+ })
+}
+
+export function delStore(params) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/reserveManage/delete/deleteStorehouseById',
+ method: 'get',
+ params: params || {}
+ })
+}
+
+
+// 监管
+export function getSupervisionStatistics(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/warehouse/supervision/statistics',
+ method: 'post',
+ data
+ })
+}
+
+// 出库记录
+export function getOutboundQuery(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/delivery/store/house/outbound-query',
+ method: 'post',
+ data
+ })
+}
+
+// 出库详情
+export function getOutboundDetail(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/delivery/store/house/outbound-detail',
+ method: 'post',
+ data
+ })
+}
+
+// 入库记录
+export function getInboundQuery(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/entry/store/house/inbound-query',
+ method: 'post',
+ data
+ })
+}
+
+// 入库详情
+export function getInboundDetail(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/entry/store/house/inbound-detail',
+ method: 'post',
+ data
+ })
+}
+
+// 汇总分析
+export function getAnalysis(data) {
+ return request({
+ headers: {
+ 'Authorization': getToken()
+ },
+ url: process.env.BASE_API + '/warehouse/analysis/statistics',
+ method: 'post',
+ data
+ })
+}
diff --git a/src/views/layout/Layout.vue b/src/views/layout/Layout.vue
index fa534de..e2f1ad4 100644
--- a/src/views/layout/Layout.vue
+++ b/src/views/layout/Layout.vue
@@ -18,8 +18,8 @@
:label="item.meta.title"
:name="item.path"
>
- <div class="main-container">
- <app-main />
+ <div class="main-container" v-if="editableTabsValue == item.path">
+ <app-main/>
</div>
</el-tab-pane>
</el-tabs>
diff --git a/src/views/layout/components/AppMain.vue b/src/views/layout/components/AppMain.vue
index a4be393..d082f17 100644
--- a/src/views/layout/components/AppMain.vue
+++ b/src/views/layout/components/AppMain.vue
@@ -2,7 +2,7 @@
<section class="app-main">
<transition name="fade-transform" mode="out-in">
<keep-alive :include="cachedViews">
- <router-view :key="key" />
+ <router-view :key="key"/>
</keep-alive>
</transition>
</section>
diff --git a/src/views/license/licenseInfo/components/licenseDelayForm.vue b/src/views/license/licenseInfo/components/licenseDelayForm.vue
index 11ce664..af0af69 100644
--- a/src/views/license/licenseInfo/components/licenseDelayForm.vue
+++ b/src/views/license/licenseInfo/components/licenseDelayForm.vue
@@ -734,8 +734,8 @@
checkMore4:[],
checkMore5:[],
checkMore6:[],
- checkList1:['C级'],
- checkList2:['D级'],
+ checkList1:['C级','D级'],
+ checkList2:['C级','D级'],
checkMoreList:['C级','D级'],
storage1:{
id:null,
diff --git a/src/views/license/licenseInfo/components/licenseInfoForm.vue b/src/views/license/licenseInfo/components/licenseInfoForm.vue
index 4821401..fbacdc3 100644
--- a/src/views/license/licenseInfo/components/licenseInfoForm.vue
+++ b/src/views/license/licenseInfo/components/licenseInfoForm.vue
@@ -732,8 +732,8 @@
checkMore4:[],
checkMore5:[],
checkMore6:[],
- checkList1:['C级'],
- checkList2:['D级'],
+ checkList1:['C级','D级'],
+ checkList2:['C级','D级'],
checkMoreList:['C级','D级'],
storage1:{
id:null,
@@ -1088,13 +1088,13 @@
justifySingle(value){
if(value === 1){
if(this.checked1 === true){
- this.checkMore1 = ['C级']
+ this.checkMore1 = ['C级','D级']
}else{
this.checkMore1 = []
}
}else if(value ===2){
if(this.checked2 === true){
- this.checkMore2 = ['D级']
+ this.checkMore2 = ['C级','D级']
}else{
this.checkMore2 = []
}
@@ -1106,7 +1106,7 @@
}
}else if(value === 4){
if(this.checked4 === true){
- this.checkMore4 = ['C级']
+ this.checkMore4 = ['C级','D级']
}else{
this.checkMore4 = []
}
@@ -1118,7 +1118,7 @@
}
}else{
if(this.checked6 === true){
- this.checkMore6 = ['D级']
+ this.checkMore6 = ['C级','D级']
}else{
this.checkMore6 = []
}
diff --git a/src/views/license/licenseInfo/components/licenseModForm.vue b/src/views/license/licenseInfo/components/licenseModForm.vue
index 7bd36aa..a1c3147 100644
--- a/src/views/license/licenseInfo/components/licenseModForm.vue
+++ b/src/views/license/licenseInfo/components/licenseModForm.vue
@@ -737,8 +737,8 @@
checkMore4:[],
checkMore5:[],
checkMore6:[],
- checkList1:['C级'],
- checkList2:['D级'],
+ checkList1:['C级','D级'],
+ checkList2:['C级','D级'],
checkMoreList:['C级','D级'],
storage1:{
id:null,
@@ -980,13 +980,13 @@
justifySingle(value){
if(value === 1){
if(this.checked1 === true){
- this.checkMore1 = ['C级']
+ this.checkMore1 = ['C级','D级']
}else{
this.checkMore1 = []
}
}else if(value ===2){
if(this.checked2 === true){
- this.checkMore2 = ['D级']
+ this.checkMore2 = ['C级','D级']
}else{
this.checkMore2 = []
}
@@ -998,7 +998,7 @@
}
}else if(value === 4){
if(this.checked4 === true){
- this.checkMore4 = ['C级']
+ this.checkMore4 = ['C级','D级']
}else{
this.checkMore4 = []
}
@@ -1010,7 +1010,7 @@
}
}else{
if(this.checked6 === true){
- this.checkMore6 = ['D级']
+ this.checkMore6 = ['C级','D级']
}else{
this.checkMore6 = []
}
diff --git a/src/views/purchase/dailySaleReport.vue b/src/views/purchase/dailySaleReport.vue
index db9656c..0aff90d 100644
--- a/src/views/purchase/dailySaleReport.vue
+++ b/src/views/purchase/dailySaleReport.vue
@@ -1,6 +1,6 @@
<template>
<div class="container">
- <div class="filter-container">
+ <div class="filter-container" style="padding: 20px">
<el-row>
时间:  
<el-date-picker
@@ -11,16 +11,16 @@
:clearable="false"
:default-time="['00:00:00','23:59:59']">
</el-date-picker>
+ <el-button class="filter-item" style="margin-left: 10px;margin-bottom: 0" type="primary" icon="el-icon-back"
+ @click="dayForward">前一天</el-button>
+ <el-button class="filter-item" style="margin-left: 10px;margin-bottom: 0" type="primary" icon="el-icon-right"
+ @click="dayBackward">后一天</el-button>
+<!-- <el-button class="filter-item" style="margin-left: 10px;margin-bottom: 0" type="primary" icon="el-icon-search"-->
+<!-- @click="queryHandle"/>-->
</el-row>
<el-row style="padding-top: 10px">
- <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-back"
- @click="dayForward">前一天</el-button>
- <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-right"
- @click="dayBackward">后一天</el-button>
- <el-button class="filter-item" style="margin-left: 10px;" type="primary" icon="el-icon-search"
- @click="queryHandle"/>
</el-row>
</div>
<div class="table_content">
@@ -114,9 +114,9 @@
this.queryDateHandle();
},
methods:{
- queryHandle(){
- this.getReportList();
- },
+ // queryHandle(){
+ // this.getReportList();
+ // },
getReportList(){
const _this = this;
const params = {};
@@ -178,6 +178,7 @@
end.setMinutes(59);
end.setSeconds(59);
this.dateRange = [start,end]
+ this.getReportList()
}
},
dayBackward(){
@@ -193,6 +194,7 @@
end.setMinutes(59);
end.setSeconds(59);
this.dateRange = [start,end]
+ this.getReportList()
}
},
queryDateHandle(){
@@ -207,6 +209,7 @@
this.dateRange.push(start,end);
this.startDate = start;
this.endDate = end;
+ this.getReportList()
},
sortChange(param){
this.sort = param.prop;
diff --git a/src/views/purchase/person.vue b/src/views/purchase/person.vue
index cd82d61..b9030ae 100644
--- a/src/views/purchase/person.vue
+++ b/src/views/purchase/person.vue
@@ -206,7 +206,7 @@
import Cookies from "js-cookie";
export default {
- name: "addSelfExam",
+ name: "person",
data(){
return{
tableKey:'',
@@ -282,6 +282,7 @@
uploadDialog
},
created() {
+ console.log('Component created:', this.$options.name);
this.initValidTime()
this.getPersonProductList()
this.getProvince()
diff --git a/src/views/specialCheck/index.vue b/src/views/specialCheck/index.vue
index 6f64d86..b5ac286 100644
--- a/src/views/specialCheck/index.vue
+++ b/src/views/specialCheck/index.vue
@@ -109,8 +109,10 @@
t.$refs.wholesale.currentPage = 1
t.$refs.wholesale.pageSize = 10
if(key.split('-')[1] == '1' || key.split('-')[1] == '2'){
+ console.log(keyPath,'path')
t.$refs.wholesale.taskId = Number(keyPath[0].split('-')[0])
- t.$refs.wholesale.taskName = keyPath[0].split('-')[1]
+ t.$refs.wholesale.taskName = keyPath[0].split('-').slice(1).join('-')
+ console.log(t.$refs.wholesale.taskName,'name')
t.$refs.wholesale.enterpriseType = Number(key.split('-')[1])
t.$refs.wholesale.getEnterpriseCompleteInfoList()
}else{
diff --git a/src/views/stock/components/enterprisePurchaseDetail.vue b/src/views/stock/components/enterprisePurchaseDetail.vue
index 9c8a95c..f8e27a5 100644
--- a/src/views/stock/components/enterprisePurchaseDetail.vue
+++ b/src/views/stock/components/enterprisePurchaseDetail.vue
@@ -6,7 +6,7 @@
:append-to-body="true"
>
<div class="app-container">
- <div class="table_title">新疆吉庆烟花爆竹有限公司<span v-if="timeValue!==''">({{ timeValue }})</span>进货情况</div>
+ <div class="table_title">{{company}}<span v-if="timeValue!==''">({{ timeValue }})</span>进货情况</div>
<div class="table_content">
<el-table
v-loading="listLoading"
@@ -50,6 +50,7 @@
return{
scList: [],
timeValue: '',
+ company: '',
tableKey:'',
listLoading:false,
purchaseDetailVisible:false,
@@ -57,8 +58,9 @@
},
components: {},
methods:{
- open(scItems,timeRange,startTime,endTime){
- this.scList = scItems;
+ open(data,timeRange,startTime,endTime){
+ this.scList = data.scItems
+ this.company = data.pifaCompany
for(let i of this.scList){
i.firecracker = i.items.filter(it=>it.type === '爆竹类').length>0?i.items.filter(it=>it.type === '爆竹类')[0].boxCount:0
i.spray = i.items.filter(it=>it.type === '喷花类').length>0?i.items.filter(it=>it.type === '喷花类')[0].boxCount:0
@@ -72,6 +74,7 @@
if(timeRange){
this.timeValue = startTime.split(' ')[0] + '~' + endTime.split(' ')[0]
}
+
}
}
}
diff --git a/src/views/stock/enterprisePurchaseStatistics.vue b/src/views/stock/enterprisePurchaseStatistics.vue
index cc76fbb..d2f9e72 100644
--- a/src/views/stock/enterprisePurchaseStatistics.vue
+++ b/src/views/stock/enterprisePurchaseStatistics.vue
@@ -379,9 +379,9 @@
},
showDetail(param){
if( this.validTime !== null ){
- this.$refs.purchaseDetail.open(param.scItems,true,this.validTime[0],this.validTime[1])
+ this.$refs.purchaseDetail.open(param,true,this.validTime[0],this.validTime[1])
}else{
- this.$refs.purchaseDetail.open(param.scItems,false)
+ this.$refs.purchaseDetail.open(param,false)
}
},
},
diff --git a/src/views/stock/stockManage.vue b/src/views/stock/stockManage.vue
index 7a5d2f0..913ec42 100644
--- a/src/views/stock/stockManage.vue
+++ b/src/views/stock/stockManage.vue
@@ -94,9 +94,9 @@
},
created() {
const t = this
- setTimeout(()=>{
- t.$refs.deliverUsage.open()
- },1000)
+ // setTimeout(()=>{
+ // t.$refs.deliverUsage.open()
+ // },1000)
},
mounted() {
},
diff --git a/src/views/warehouse/components/addStock.vue b/src/views/warehouse/components/addStock.vue
new file mode 100644
index 0000000..b07eca3
--- /dev/null
+++ b/src/views/warehouse/components/addStock.vue
@@ -0,0 +1,365 @@
+<template>
+ <el-dialog :visible.sync="dialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" :title="dialogTitle" center
+ width="75%" @close="reset()">
+ <el-form ref="dataForm" :rules="dataFormRules" :model="dataForm" label-position="right" label-width="150px" element-loading-text="保存中...">
+ <div class="part-title">
+ <span>库区基本信息填写</span>
+ </div>
+ <el-divider></el-divider>
+ <div>
+ <el-row :gutter="20">
+ <el-col :span="12">
+ <el-form-item label="库区名称:" prop="reserveName" >
+ <el-input v-model.trim="dataForm.reserveName"/>
+ </el-form-item>
+ </el-col>
+ <el-col :span="12">
+ <el-form-item label="所属企业:">
+ <el-input disabled v-model.trim="dataForm.company"/>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="10">
+ <el-form-item label="所属省份:" prop="province">
+ <el-select v-model="dataForm.province" clearable @change="changeArea('province')" style="width: 100%;">
+ <el-option
+ v-for="item in provinceList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item prop="city" class="selector">
+ <el-select v-model="dataForm.city" prop="city" clearable @change="changeArea('city')" style="width: 100%;">
+ <el-option
+ v-for="item in cityList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ <el-col :span="6">
+ <el-form-item prop="area" class="selector">
+ <el-select v-model="dataForm.area" clearable filterable @change="changeArea('district')" style="width: 100%;">
+ <el-option
+ v-for="item in districtList"
+ :key="item.id"
+ :label="item.name"
+ :value="item.name"
+ >
+ </el-option>
+ </el-select>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row>
+ <el-col :span="22">
+ <el-form-item label="库区地址:" prop="reserveAddress" >
+ <el-input v-model.trim="dataForm.reserveAddress"/>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="11">
+ <el-form-item label="库区总面积:" prop="square" class="numInput">
+ <el-input type="number" v-model.number="dataForm.square"><template slot="append">㎡</template></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11">
+ <el-form-item label="有效仓储面积:" prop="effectiveStorageSquare" class="numInput">
+ <el-input type="number" v-model.number="dataForm.effectiveStorageSquare"><template slot="append">㎡</template></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ <el-row :gutter="20">
+ <el-col :span="11">
+ <el-form-item label="核定储量:" prop="approvedReserves" class="numInput">
+ <el-input type="number" v-model.number="dataForm.approvedReserves"><template slot="append">箱</template></el-input>
+ </el-form-item>
+ </el-col>
+ <el-col :span="11">
+ <el-form-item label="核药量:" prop="nuclearDose" class="numInput">
+ <el-input type="number" v-model.number="dataForm.nuclearDose"><template slot="append">kg</template></el-input>
+ </el-form-item>
+ </el-col>
+ </el-row>
+ </div>
+ <div class="part-title">
+ <span>库房列表</span>
+ </div>
+ <el-divider></el-divider>
+ <tr>
+ <td class="w-12">序号</td>
+ <td class="w-20">库房名称</td>
+ <td>库房面积</td>
+ <td>有效仓储面积</td>
+ <td>核定储量(箱)</td>
+ <td>等级</td>
+ <td>核药量</td>
+ <td>操作</td>
+ </tr>
+ <tr v-for="(item,index) in dataForm.storehouseInfos" :key="index">
+ <td class="w-12">
+ {{ index + 1 }}
+ </td>
+ <td class="w-20">
+ <el-input v-model="item.storehouseName"></el-input>
+ </td>
+ <td>
+ <el-input type="number" v-model.number="item.square"><template slot="append">㎡</template></el-input>
+ </td>
+ <td>
+ <el-input type="number" v-model.number="item.effectiveStorageSquare"><template slot="append">㎡</template></el-input>
+ </td>
+ <td>
+ <el-input type="number" v-model.number="item.approvedReserves"><template slot="append">箱</template></el-input>
+ </td>
+ <td>
+ <el-select v-model="item.storehouseLevel" clearable filterable>
+ <el-option label="1.1" :value="1.1"></el-option>
+ <el-option label="1.3" :value="1.3"></el-option>
+ </el-select>
+ </td>
+ <td>
+ <el-input type="number" v-model.number="item.nuclearDose"><template slot="append">kg</template></el-input>
+ </td>
+ <td>
+ <el-button type="danger" @click="delItem(item,index)">删除</el-button>
+ </td>
+ </tr>
+ <el-button type="primary" style="margin-top: 20px" @click="addItem()">新增仓库</el-button>
+ </el-form>
+ <br>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="dialogVisible = false">取 消</el-button>
+ <el-button type="primary" @click="handleSubmit">保 存</el-button>
+ </span>
+ </el-dialog>
+</template>
+
+<script>
+ import {mapGetters} from "vuex";
+ import {getCityListData, getProvinceListData} from "../../../api/area";
+ import {saveReserveInfo, getInfoById, editReserveInfo} from '../../../api/warehouse'
+ import Cookies from 'js-cookie'
+ export default {
+ name: "addStock",
+ data() {
+ return {
+ dialogVisible: false,
+ dialogTitle: '新增库区',
+ dataForm: {
+ id: null,
+ enterpriseId: null,
+ reserveName: '',
+ company: '',
+ reserveAddress: '',
+ province: '',
+ city: '',
+ area: '',
+ square: null,
+ effectiveStorageSquare: null,
+ approvedReserves: null,
+ nuclearDose: null,
+ storehouseInfos: []
+ },
+ listLoading: false,
+ provinceList:[],
+ cityList:[],
+ districtList:[],
+ dataFormRules:{
+ reserveName:[{ required: true, message: '请填写库区名称', trigger: 'blur' }],
+ province:[{ required: true, message: '请选择所在区划', trigger: 'blur' }],
+ city:[{ required: true, message: '请选择所在区划', trigger: 'blur' }],
+ area:[{ required: true, message: '请选择所在区划', trigger: 'blur' }],
+ reserveAddress:[{ required: true, message: '请填写库区地址', trigger: 'blur' }],
+ square:[{ required: true, message: '请填写库区总面积', trigger: 'blur' }],
+ effectiveStorageSquare:[{ required: true, message: '请填写库区有效仓储面积', trigger: 'blur' }],
+ approvedReserves:[{ required: true, message: '请填写库区核定储量', trigger: 'blur' }],
+ nuclearDose:[{ required: true, message: '请填写库区核药量', trigger: 'blur' }]
+ },
+ }
+ },
+ created() {
+ const t = this
+ },
+ computed: {
+ ...mapGetters([
+ 'userType',
+ 'username'
+ ])
+ },
+ methods: {
+ open(type,data){
+ this.getProvince()
+ if(type == 'add'){
+ this.dataForm.company = Cookies.get('company')
+ this.dialogTitle = '新增库区'
+ }else{
+ this.dialogTitle = '编辑库区'
+ getInfoById({id: data.topId}).then((res)=>{
+ if(res.data.code == 200){
+ if(res.data.result){
+ for(let i in this.dataForm){
+ if(this.isKey(i,res.data.result)){
+ this.dataForm[i] = res.data.result[i]
+ }
+ }
+ }
+ this.dataForm['storehouseInfos'] = res.data.result.storehouseInfo.map((i)=>{
+ const{reserveId,...data} = i
+ return data
+ })
+ this.dataForm['company'] = data.enterpriseName
+ this.dataForm['enterpriseId'] = res.data.result.enterpriseId
+ }
+ }).catch((res)=>{
+ this.$message.warning(res.data.message)
+ })
+ }
+ this.dialogVisible = true
+ },
+ isKey(key,obj){
+ return key in obj
+ },
+
+ delItem(item,index){
+ this.dataForm.storehouseInfos.splice(index,1);
+ },
+ addItem(){
+ const obj = {
+ storehouseName: '',
+ square: null,
+ effectiveStorageSquare: null,
+ approvedReserves: null,
+ storehouseLevel: null,
+ nuclearDose: null
+ }
+ this.dataForm.storehouseInfos.push(obj)
+ },
+ async getProvince(){
+ let res = await getProvinceListData()
+ if(res.data.code === "200"){
+ this.provinceList = res.data.result.provinceList
+ }
+ },
+ async changeArea(value) {
+ if (value === 'province') {
+ this.dataForm.city = ''
+ this.dataForm.area = ''
+ let res = await getCityListData({type:2, parenttype:1, parentname:this.dataForm.province})
+ if (res.data.code === "200") {
+ this.cityList = res.data.result
+ }
+ } else if (value === 'city') {
+ this.dataForm.area = ''
+ let res = await getCityListData({type:3, parenttype:2, parentname:this.dataForm.city})
+ if (res.data.code === "200") {
+ this.districtList = res.data.result
+ }
+ }
+ },
+ handleSubmit(){
+ if(this.dataForm.storehouseInfos == 0){
+ this.$message.warning('库区应至少包含一间仓库')
+ return
+ }
+ if(this.dataForm.storehouseInfos.find(i=>i.storehouseName == ''|| i.square == null || i.effectiveStorageSquare == null || i.approvedReserves == null||i.storehouseLevel == null|| i.nuclearDose == null)){
+ this.$message.warning('请完善部分仓库信息')
+ return
+ }
+ this.$refs.dataForm.validate(async (valid) => {
+ if (valid) {
+ if(this.dialogTitle == '新增库区'){
+ const {company,id,enterpriseId,...data} = this.dataForm
+ const res = await saveReserveInfo(data)
+ if(res.data.code == 200){
+ this.$message.success(res.data.message)
+ this.$refs.dataForm.resetFields()
+ this.$refs.dataForm.clearValidate()
+ this.$emit('refresh')
+ this.dialogVisible = false
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.data.message
+ })
+ }
+ }else{
+ const {company,...data} = this.dataForm
+ const res = await editReserveInfo(data)
+ if(res.data.code == 200){
+ this.$message.success(res.data.message)
+ this.$refs.dataForm.resetFields()
+ this.$refs.dataForm.clearValidate()
+ this.$emit('refresh')
+ this.dialogVisible = false
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.data.message
+ })
+ }
+ }
+ }
+ })
+
+ },
+ reset(){
+ this.$refs.dataForm.resetFields()
+ this.$refs.dataForm.clearValidate()
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .part-title{
+ font-size: 16px;
+ font-weight: bolder;
+ }
+ .selector{
+ /deep/ .el-form-item__content{
+ margin-left: 0 !important;
+ }
+ }
+ .editForm{
+ .el-form-item{
+ display: flex !important;
+ }
+ /deep/ .el-form-item__content{
+ width: 100%;
+ margin-left: 0 !important;
+ }
+ }
+
+ .numInput{
+ /deep/ .el-input__inner{
+ padding-right: 0;
+ }
+ }
+ tr{
+ display: flex;
+ td{
+ flex: 1;
+ display: flex;
+ justify-content: center;
+ padding: 5px;
+ align-items: center;
+ }
+ .w-12{
+ flex: 0.5;
+ }
+ .w-20{
+ flex: 2;
+ }
+ }
+</style>
diff --git a/src/views/warehouse/components/deliverUsage.vue b/src/views/warehouse/components/deliverUsage.vue
new file mode 100644
index 0000000..f81e955
--- /dev/null
+++ b/src/views/warehouse/components/deliverUsage.vue
@@ -0,0 +1,139 @@
+<template>
+ <el-dialog
+ :visible.sync="deliverDialog"
+ :close-on-click-modal="false"
+ width="50%"
+ :append-to-body="true"
+ :title=stockName
+ center
+ size="medium"
+ >
+ <div class="app-container">
+ <div class="upTitle">
+ 请勾选或取消勾选允许使用该仓库的批发企业,您允许使用的企业可将货物入库到该仓库。
+ </div>
+ <div class="table_content">
+ <el-checkbox-group v-model="authorityCorts" @change="changeData">
+ <el-checkbox v-for="item in companyList" :key="item.enterpriseId" :label="item.enterpriseId" :disabled="item.enterpriseAuthority == 1? true: false" border style="display: block">
+ {{item.enterpriseName}}
+ </el-checkbox>
+ </el-checkbox-group>
+ </div>
+ </div>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="deliverDialog = false">取 消</el-button>
+ <el-button type="primary" @click="handleSubmit()">提 交</el-button>
+ </span>
+ </el-dialog>
+</template>
+
+<script>
+ import {computePageCount} from "@/utils";
+ import {listStockhouseEnterpriseUserInfo,editEnterpriseUserAuthority} from "../../../api/warehouse";
+
+ export default {
+ name: "deliverUsage",
+ components: {},
+ data(){
+ return{
+ tableStatus: true,
+ tableKey:'',
+ stockName: '',
+ listLoading:false,
+ companyList:[],
+ authorityCorts: [],
+ deliverDialog:false,
+ reserveId: null,
+ storehouseId: null,
+ submitForm: {
+ addEnterprises: [],
+ addStatus: false,
+ deleteEnterprises: [],
+ deleteStatus: false
+ }
+ }
+ },
+ created() {
+ const t = this
+ },
+ methods:{
+ open(data){
+ this.submitForm = {
+ addEnterprises: [],
+ addStatus: false,
+ deleteEnterprises: [],
+ deleteStatus: false
+ }
+ this.reserveId = data.topId
+ this.storehouseId = data.id
+ listStockhouseEnterpriseUserInfo({id: data.id}).then((res)=>{
+ this.stockName = '仓库【'+ data.storehouseName + '】使用权分配'
+ if(res.data.code == 200){
+ this.companyList = res.data.result.enterpriseUserAuthorityInfo
+ this.authorityCorts = this.companyList.filter(item=>item.enterpriseAuthority == 1 || item.enterpriseAuthority == 2).map(i=>{return i.enterpriseId})
+ }else{
+ this.$message.warning(res.data.message)
+ }
+ this.deliverDialog = true
+ }).catch(()=>{
+ this.$message.warning('数据获取失败')
+ })
+ },
+ changeData(value){
+ console.log(value,'val')
+ },
+ async handleSubmit(){
+ const originList = this.companyList.filter(i=>i.enterpriseAuthority == 1 || i.enterpriseAuthority==2)
+ const companyIds = originList.map(i=>i.enterpriseId)
+ const addedElementsSet = new Set(this.authorityCorts.filter(element => !companyIds.includes(element)))
+ const removedElementsSet = new Set(companyIds.filter(element => !this.authorityCorts.includes(element)))
+ const addedElements = Array.from(addedElementsSet)
+ const removedElements = Array.from(removedElementsSet)
+ if(addedElements.length>0){
+ this.submitForm.addStatus = true
+ this.submitForm.addEnterprises = addedElements.map((i)=>{
+ return {
+ enterpriseId: i,
+ reserveId: this.reserveId,
+ storehouseId: this.storehouseId
+ }
+ })
+ }
+ if(removedElements.length>0){
+ this.submitForm.deleteStatus = true
+ for(let i of this.companyList){
+ if(removedElements.find(item=>item == i.enterpriseId)){
+ this.submitForm.deleteEnterprises.push({
+ id: i.id?i.id:null,
+ enterpriseId: i.enterpriseId,
+ reserveId: this.reserveId,
+ storehouseId: this.storehouseId
+ })
+ }
+ }
+ }
+ const res = await editEnterpriseUserAuthority(this.submitForm)
+ if(res.data.code == 200){
+ this.$message.success('仓库使用权修改成功')
+ }else{
+ this.$message.warning(res.data.message)
+ }
+ this.deliverDialog = false
+ this.$emit('refresh')
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .upTitle{
+ font-size: 16px;
+ margin-bottom: 20px;
+ }
+ /deep/ .el-checkbox{
+ width: 80%;
+ margin-left: 0 !important;
+ margin-right: 0 !important;
+ margin-bottom: 10px !important;
+ }
+</style>
diff --git a/src/views/warehouse/components/editStock.vue b/src/views/warehouse/components/editStock.vue
new file mode 100644
index 0000000..481be5b
--- /dev/null
+++ b/src/views/warehouse/components/editStock.vue
@@ -0,0 +1,146 @@
+<template>
+ <el-dialog :visible.sync="editDialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" title="批发企业盘库(单位:箱)" center
+ width="30%">
+ <el-form :model="stockInfo" label-width="140px" class="editForm">
+ <el-form-item label="企业名称:"><el-input readonly v-model="stockInfo.enterpriseName"/></el-form-item>
+ <el-form-item label="当前库区:"><el-input readonly v-model="stockInfo.reserveName"/></el-form-item>
+ <el-form-item label="当前库房:"><el-input readonly v-model="stockInfo.storehouseName"/></el-form-item>
+ <el-form-item label="当前总库存:"><el-input readonly v-model="stockInfo.totalInventory"/></el-form-item>
+ </el-form>
+ <el-divider></el-divider>
+ <el-form ref="editForm" :rules="editFormRules" :model="editForm" label-width="140px" class="editForm">
+ <el-form-item label="爆竹类:" prop="firecracker" class="numInput">
+ <el-input type="number" v-model.number="editForm.firecracker"/>
+ </el-form-item>
+ <el-form-item label="喷花类:" prop="spray" class="numInput">
+ <el-input type="number" v-model.number="editForm.spray"/>
+ </el-form-item>
+ <el-form-item label="旋转类:" prop="rotation" class="numInput">
+ <el-input type="number" v-model.number="editForm.rotation"/>
+ </el-form-item>
+ <el-form-item label="吐珠类:" prop="bead" class="numInput">
+ <el-input type="number" v-model.number="editForm.bead"/>
+ </el-form-item>
+ <el-form-item label="玩具类:" prop="toy" class="numInput">
+ <el-input type="number" v-model.number="editForm.toy"/>
+ </el-form-item>
+ <el-form-item label="组合类:" prop="combined" class="numInput">
+ <el-input type="number" v-model.number="editForm.combined"/>
+ </el-form-item>
+ </el-form>
+ <span slot="footer" class="dialog-footer">
+ <el-button @click="editDialogVisible = false">取 消</el-button>
+ <el-button type="primary" @click="handleUpdate()">完 成</el-button>
+ </span>
+ </el-dialog>
+</template>
+
+<script>
+ import {mapGetters} from "vuex";
+ import {getStorehouseData, updateStorehouseData} from '../../../api/warehouse'
+ export default {
+ name: "editStock",
+ data() {
+ return {
+ editDialogVisible: false,
+ stockInfo:{
+ enterpriseName: '',
+ reserveName: '',
+ storehouseName: '',
+ totalInventory: null
+ },
+ editForm: {
+ id: null,
+ enterpriseId: null,
+ storehouseId: 0,
+ bead: 0,
+ combined: 0,
+ firecracker: 0,
+ rotation: 0,
+ spray: 0,
+ toy: 0
+ },
+ listLoading: false,
+ editFormRules:{
+ firecracker:[{ required: true, message: '请填写数量', trigger: 'blur'}],
+ spray:[{ required: true, message: '请填写数量', trigger: 'blur'}],
+ rotation:[{ required: true, message: '请填写数量', trigger: 'blur'}],
+ bead:[{ required: true, message: '请填写数量', trigger: 'blur'}],
+ toy:[{ required: true, message: '请填写数量', trigger: 'blur'}],
+ combined:[{ required: true, message: '请填写数量', trigger: 'blur'}]
+ }
+ }
+ },
+ created() {
+ const t = this
+ },
+ computed: {
+ ...mapGetters([
+ 'userType',
+ 'username'
+ ])
+ },
+ methods: {
+ open(data){
+ this.editDialogVisible = true
+ this.stockInfo.enterpriseName = data.enterpriseName
+ this.stockInfo.reserveName = data.reserveName
+ this.stockInfo.storehouseName = data.storehouseName
+ this.stockInfo.totalInventory = data.totalInventory
+ getStorehouseData({id: data.id}).then((res)=>{
+ if(res.data.code == 200){
+ this.editForm = res.data.result
+ this.editForm['id'] = data.topId
+ this.editForm['enterpriseId'] = data.enterpriseUserId
+ this.editForm['storehouseId'] = data.id
+ }else{
+ this.$message.warning(res.data.message)
+ }
+ }).catch(()=>{
+ this.$message.warning('数据获取失败')
+ })
+ },
+ handleUpdate(){
+ this.$refs.editForm.validate(async (valid) => {
+ if (valid) {
+ const res = await updateStorehouseData(this.editForm)
+ if(res.data.code == 200){
+ this.$message.success('盘库提交成功')
+
+ }else{
+ this.$message.warning(res.data.message)
+ }
+ this.editDialogVisible = false
+ }
+ })
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .part-title{
+ font-size: 16px;
+ font-weight: bolder;
+ }
+ .selector{
+ /deep/ .el-form-item__content{
+ margin-left: 0 !important;
+ }
+ }
+ .editForm{
+ .el-form-item{
+ display: flex !important;
+ }
+ /deep/ .el-form-item__content{
+ width: 100%;
+ margin-left: 0 !important;
+ }
+ }
+
+ .numInput{
+ /deep/ .el-input__inner{
+ padding-right: 0;
+ }
+ }
+</style>
diff --git a/src/views/warehouse/components/enterpriseStock.vue b/src/views/warehouse/components/enterpriseStock.vue
new file mode 100644
index 0000000..fdd9e13
--- /dev/null
+++ b/src/views/warehouse/components/enterpriseStock.vue
@@ -0,0 +1,103 @@
+<template>
+ <el-dialog
+ :visible.sync="dialogVisible"
+ width="70%"
+ :append-to-body="true"
+ :title="title"
+ >
+ <div class="app-container">
+ <div class="table_content">
+ <el-table
+ v-loading="listLoading"
+ :key="tableKey"
+ :data="listData"
+ border
+ fit
+ highlight-current-row
+ style="width: 100%;"
+ show-summary
+ >
+ <el-table-column label="企业名称" prop="enterpriseUser" 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>
+ <br>
+<!-- <el-pagination-->
+<!-- v-show="recordTotal>0"-->
+<!-- :current-page="currentPage"-->
+<!-- :page-sizes="[10, 15]"-->
+<!-- :page-size="pageSize"-->
+<!-- :total="recordTotal"-->
+<!-- layout="total, sizes, prev, pager, next, jumper"-->
+<!-- background-->
+<!-- style="float:right;"-->
+<!-- @size-change="handleSizeChange"-->
+<!-- @current-change="handleCurrentChange"-->
+<!-- />-->
+<!-- <br>-->
+ </div>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+ import {computePageCount} from "@/utils";
+ import {listStockDataByStorehouseId} from "../../../api/warehouse";
+
+ export default {
+ name: "index",
+ data(){
+ return{
+ title:'',
+ tableKey:'',
+ listLoading:false,
+ listData:[],
+ dialogVisible:false,
+ }
+ },
+ components: {},
+ methods:{
+ open(data){
+ this.getList(data.id || data.storehouseId)
+ this.dialogVisible = true
+ },
+ async getList(id){
+ this.listLoading = true
+ let res = await listStockDataByStorehouseId({id: id})
+ if(res.data.code === "200"){
+ this.listData = res.data.result.stockDataInfos
+ this.title = '库区:'+res.data.result.reserveName +' 仓库:'+ res.data.result.storehouseName + '各企业库存情况'
+ }else{
+ this.$message({
+ type:'warning',
+ message:res.data.message
+ })
+ }
+ this.listLoading = false
+ }
+ }
+ }
+</script>
+
+<style scoped>
+ .basic_search{
+ display:inline-block;
+ }
+ .table_title{
+ font-size: 18px;
+ margin-bottom: 20px;
+ }
+</style>
diff --git a/src/views/warehouse/components/recordDetail.vue b/src/views/warehouse/components/recordDetail.vue
new file mode 100644
index 0000000..4bc9f83
--- /dev/null
+++ b/src/views/warehouse/components/recordDetail.vue
@@ -0,0 +1,162 @@
+<template>
+ <el-dialog :visible.sync="detailVisible" append-to-body :close-on-click-modal="false" :title="title" center
+ width="75%">
+ <div class="app-container">
+ <div class="table_content">
+ <el-table
+ v-loading="listLoading"
+ :data="detailRecords"
+ border
+ fit
+ highlight-current-row
+ style="width: 100%;"
+ >
+ <el-table-column label="序号" type="index" align="center" width="60"/>
+ <el-table-column v-if="title == '出库详情'" label="产品名称" prop="itemname" align="center"></el-table-column>
+ <el-table-column v-if="title == '入库详情'" label="产品名称" prop="productname" align="center"></el-table-column>
+ <el-table-column label="产品包装码" prop="itemcode" align="center"></el-table-column>
+ <el-table-column label="类型" prop="type" align="center"></el-table-column>
+ <el-table-column label="规格" prop="specification" align="center"></el-table-column>
+ <el-table-column label="含药量" prop="explosivecontent" align="center"></el-table-column>
+ <el-table-column label="箱含量" prop="boxnumber" align="center"></el-table-column>
+ <el-table-column :label="title == '入库详情'?'入库数量':'出库数量'" prop="num" align="center"></el-table-column>
+ </el-table>
+ <el-pagination
+ v-show="recordTotal>0"
+ :current-page="currentPage"
+ :page-sizes="[10, 20, 30, 50]"
+ :page-size="pageSize"
+ :total="recordTotal"
+ layout="total, sizes, prev, pager, next, jumper"
+ background
+ style="float:right;"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ </div>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+ import {mapGetters} from "vuex";
+ import {getInboundDetail, getOutboundDetail} from '../../../api/warehouse'
+ import Cookies from "_js-cookie@2.2.0@js-cookie";
+ export default {
+ name: "recordDetail",
+ data() {
+ return {
+ detailVisible: false,
+ title: '',
+ stockInfo:{
+ enterpriseName: '',
+ reserveName: '',
+ storehouseName: '',
+ totalInventory: null
+ },
+ detailRecords: [],
+ listLoading: false,
+ pageSize: 10,
+ recordTotal: 0,
+ currentPage: 1,
+ listQuery: {
+ pageIndex: 1,
+ pageSize: 10,
+ filter: {
+ storehouseId: null,
+ code: ''
+ }
+ }
+ }
+ },
+ created() {
+ const t = this
+ },
+ computed: {
+ ...mapGetters([
+ 'userType',
+ 'username'
+ ])
+ },
+ methods: {
+ open(type,data,storehouseId){
+ this.detailRecords = []
+ this.detailVisible = true
+ this.listQuery.filter.storehouseId = storehouseId
+ if(type=='out'){
+ this.title = '出库详情'
+ this.listQuery.filter.code = data.ordercode
+ this.getOut()
+ }else{
+ this.title = '入库详情'
+ this.listQuery.filter.code = data.code
+ this.getIn()
+ }
+ },
+
+ async getOut(){
+ const res = await getOutboundDetail(this.listQuery)
+ if(res.data.code == 200){
+ this.detailRecords = res.data.result.records
+ this.recordTotal = res.data.result.total
+ }else{
+ this.$message.warning(res.data.message)
+ }
+ },
+
+ async getIn(){
+ const res = await getInboundDetail(this.listQuery)
+ if(res.data.code == 200){
+ this.detailRecords = res.data.result.records
+ this.recordTotal = res.data.result.total
+ }else{
+ this.$message.warning(res.data.message)
+ }
+ },
+
+ handleSizeChange(val) {
+ this.listQuery.pageSize = val
+ if(this.title == '出库详情'){
+ this.getOut()
+ }else{
+ this.getIn()
+ }
+ },
+ handleCurrentChange(val) {
+ this.listQuery.pageIndex = val
+ if(this.title == '出库详情'){
+ this.getOut()
+ }else{
+ this.getIn()
+ }
+ },
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+ .part-title{
+ font-size: 16px;
+ font-weight: bolder;
+ }
+ .selector{
+ /deep/ .el-form-item__content{
+ margin-left: 0 !important;
+ }
+ }
+ .editForm{
+ .el-form-item{
+ display: flex !important;
+ }
+ /deep/ .el-form-item__content{
+ width: 100%;
+ margin-left: 0 !important;
+ }
+ }
+
+ .numInput{
+ /deep/ .el-input__inner{
+ padding-right: 0;
+ }
+ }
+</style>
diff --git a/src/views/warehouse/components/stockRecords.vue b/src/views/warehouse/components/stockRecords.vue
new file mode 100644
index 0000000..7f1c350
--- /dev/null
+++ b/src/views/warehouse/components/stockRecords.vue
@@ -0,0 +1,261 @@
+<template>
+ <el-dialog
+ :visible.sync="recordDialog"
+ :close-on-click-modal="false"
+ width="75%"
+ :title="tableStatus?'仓库出库记录':'仓库入库记录'"
+ center
+ append-to-body
+ >
+ <div class="app-container">
+ <div class="filter-container">
+ <div style="display: flex;justify-content: space-between">
+ <div class="basic_search" style="padding-top: 10px">
+ <span style="font-size: 16px">在</span>
+ <el-date-picker
+ value-format="yyyy-MM-dd HH:mm:ss"
+ v-model="validTime"
+ type="datetimerange"
+ :default-time="['00:00:00','23:59:59']"
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期"
+ @change="updateTime"
+ >
+ </el-date-picker>
+<!-- <span v-if="tableStatus" style="font-size: 16px">期间总计出库</span>-->
+<!-- <span v-else style="font-size: 16px">期间总计入库</span>-->
+<!-- <span style="font-size: 16px">2333</span>-->
+<!-- <span style="font-size: 16px">箱</span>-->
+ </div>
+ <div class="basic_search" style="margin-right: 10px;padding-top: 10px">
+ <el-radio-group v-model="tableStatus" @input="changeStatus">
+ <el-radio-button :label="true">出库记录</el-radio-button>
+ <el-radio-button :label="false">入库记录</el-radio-button>
+ </el-radio-group>
+ </div>
+ </div>
+ </div>
+ <div class="table_content">
+ <el-table
+ v-loading="listLoading"
+ :key="tableKey"
+ :data="stockRecords"
+ border
+ fit
+ highlight-current-row
+ style="width: 100%;"
+ v-if="tableStatus"
+ >
+ <el-table-column label="序号" type="index" align="center" width="60"/>
+ <el-table-column label="出库单号" prop="ordercode" align="center"></el-table-column>
+ <el-table-column label="出库企业" prop="shop" align="center"></el-table-column>
+ <el-table-column label="创建时间" prop="createat" align="center"></el-table-column>
+ <el-table-column label="运输证号" prop="transportcert" align="center"></el-table-column>
+ <el-table-column label="数量(箱)" prop="realboxnum" align="center"></el-table-column>
+ <el-table-column prop="type" align="center">
+ <template slot-scope="scope">
+ <span type="text">{{scope.row.type == 1? '常规出库':scope.row.type == 2? '快速出库':scope.row.type == 3? '退货出库':'--'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" fixed="right">
+ <template slot-scope="scope">
+ <el-button type="text" @click="showDetails('out',scope.row)">查看</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-table
+ v-loading="listLoading"
+ :key="tableKey"
+ :data="stockRecords"
+ border
+ fit
+ highlight-current-row
+ style="width: 100%;"
+ v-if="!tableStatus"
+ >
+ <el-table-column label="序号" type="index" align="center" width="60"/>
+ <el-table-column label="入库单号" prop="code" align="center"></el-table-column>
+ <el-table-column label="入库企业" prop="unit" align="center"></el-table-column>
+ <el-table-column label="创建时间" prop="createddate" align="center"></el-table-column>
+ <el-table-column label="运输证号" prop="transportcert" align="center"></el-table-column>
+ <el-table-column label="数量(箱)" prop="boxnum" align="center"></el-table-column>
+ <el-table-column :label="tableStatus?'出库类型':'入库类型'" prop="type" align="center">
+ <template slot-scope="scope">
+ <span type="text">{{scope.row.type == 1? '常规入库':scope.row.type == 2? '快速入库':scope.row.type == 3? '退货入库':'--'}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column label="操作" align="center" width="120" class-name="small-padding fixed-width" fixed="right">
+ <template slot-scope="scope">
+ <el-button type="text" @click="showDetails('in',scope.row)">查看</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <el-pagination
+ v-show="recordTotal>0"
+ :current-page="currentPage"
+ :page-sizes="[10, 20, 30, 50]"
+ :page-size="pageSize"
+ :total="recordTotal"
+ layout="total, sizes, prev, pager, next, jumper"
+ background
+ style="float:right;"
+ @size-change="handleSizeChange"
+ @current-change="handleCurrentChange"
+ />
+ <record-detail ref="detailRef"></record-detail>
+ </div>
+ </div>
+ </el-dialog>
+</template>
+
+<script>
+ import {computePageCount} from "@/utils";
+ import {getInboundQuery, getOutboundQuery} from "../../../api/warehouse"
+ import recordDetail from "./recordDetail";
+ import Cookies from "_js-cookie@2.2.0@js-cookie";
+
+ export default {
+ name: "stockRecords",
+ components: {recordDetail},
+ data(){
+ return{
+ tableStatus: true,
+ tableKey:'',
+ listLoading:false,
+ pageSize: 10,
+ recordTotal: 0,
+ currentPage: 1,
+ validTime: ['', ''],
+ stockRecords:[],
+ recordDialog:false,
+ listQuery: {
+ pageIndex: 1,
+ pageSize: 10,
+ filter: {
+ storehouseId: null,
+ starttime: '',
+ endtime: ''
+ }
+ },
+ }
+ },
+ created() {
+ const t = this
+ },
+ methods:{
+ open(row){
+ this.listQuery.pageIndex = 1
+ this.listQuery.filter.storehouseId = row.storehouseId
+ this.initValidTime()
+ if(this.tableStatus){
+ this.getOutbound()
+ }else{
+ this.getInbound()
+ }
+ this.recordDialog = true
+ },
+
+ async getOutbound(){
+ const res = await getOutboundQuery(this.listQuery)
+ if(res.data.code == 200){
+ this.stockRecords = res.data.result.records
+ this.recordTotal = res.data.result.total
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.data.message
+ })
+ }
+ },
+
+ async getInbound(){
+ const res = await getInboundQuery(this.listQuery)
+ if(res.data.code == 200){
+ this.stockRecords = res.data.result.records
+ this.recordTotal = res.data.result.total
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.data.message
+ })
+ }
+ },
+
+ initValidTime() {
+ const end = new Date();
+ if (end.getDate() - 1 === 0) {
+ this.validTime[0] = [end.getFullYear(), end.getMonth()-1, this.returnDay(end.getMonth()-1, end.getFullYear())].join("-") + " 00:00:00";
+ this.validTime[1] = [end.getFullYear(), end.getMonth(), this.returnDay(end.getMonth(), end.getFullYear())].join("-") + " 23:59:59";
+ } else if (end.getDate() - 1 === 0 && end.getMonth() === 0) {
+ this.validTime[0] = [end.getFullYear() - 1, 11, 30].join("-") + " 00:00:00";
+ this.validTime[1] = [end.getFullYear() - 1, 12, 31].join("-") + " 23:59:59";
+ } else {
+ this.validTime[0] = [end.getFullYear(), end.getMonth(), end.getDate() - 1].join("-") + " 00:00:00";
+ this.validTime[1] = [end.getFullYear(), end.getMonth() + 1, end.getDate() - 1].join("-") + " 23:59:59";
+ }
+ this.listQuery.filter.starttime = this.validTime[0]
+ this.listQuery.filter.endtime = this.validTime[1]
+ },
+ returnDay(value, year) {
+ if (value === 1 || value === 3 || value === 5 || value === 7 || value === 8 || value === 10 || value === 12) {
+ return 31
+ } else if (value === 2) {
+ if (year % 4 === 0) {
+ return 29
+ } else {
+ return 28
+ }
+ } else {
+ return 30
+ }
+ },
+ changeStatus(val){
+ this.listQuery.pageIndex = 1
+ if(val == true){
+ this.getOutbound()
+ }else{
+ this.getInbound()
+ }
+ },
+
+ updateTime(){
+ this.listQuery.pageIndex = 1
+ this.listQuery.filter.starttime = this.validTime[0]
+ this.listQuery.filter.endtime = this.validTime[1]
+ if(this.tableStatus == true){
+ this.getOutbound()
+ }else{
+ this.getInbound()
+ }
+ },
+
+ handleSizeChange(val) {
+ this.listQuery.pageSize = val
+ if(this.tableStatus == true){
+ this.getOutbound()
+ }else{
+ this.getInbound()
+ }
+ },
+ handleCurrentChange(val) {
+ this.listQuery.pageIndex = val
+ if(this.tableStatus == true){
+ this.getOutbound()
+ }else{
+ this.getInbound()
+ }
+ },
+
+ showDetails(type,row){
+ this.$refs.detailRef.open(type,row,this.listQuery.filter.storehouseId)
+ }
+ }
+ }
+</script>
+
+<style scoped>
+ .basic_search{
+ display:inline-block;
+ }
+</style>
diff --git a/src/views/warehouse/stockAnalyse.vue b/src/views/warehouse/stockAnalyse.vue
new file mode 100644
index 0000000..9cc28ed
--- /dev/null
+++ b/src/views/warehouse/stockAnalyse.vue
@@ -0,0 +1,425 @@
+<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="gName" align="center" fixed="left"></el-table-column>
+ <el-table-column label="企业总库存" prop="gStock" align="center" fixed="left"></el-table-column>
+ <el-table-column label="库区" prop="reserveName" align="center">
+ <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="gName" 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="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, getAnalysis} 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: "stockAnalyse",
+ components: {addStock,stockRecords, enterpriseStock},
+ data() {
+ return {
+ tableKey: '',
+ disable: false,
+ provinceList: [],
+ cityList: [],
+ districtList: [],
+ Cookies: Cookies,
+ listLoading: false,
+ stateStockData: [],
+ rowIndex: '-1',
+ OrderIndexArr: [],
+ hoverOrderArr: [],
+ listQuery: {
+ enterpriseName: '',
+ },
+ }
+ },
+ 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 getAnalysis(this.listQuery)
+ if(res.data.code == 200){
+ this.stateStockData=[]
+ const tableData = res.data.result.enterprises
+ let gData = []
+ if(Array.isArray(tableData)){
+ tableData.map(item=>{
+ if(Array.isArray(item.reserves)){
+ item.reserves.map((subRes, subIndex)=>{
+ let content = {}
+ content = subRes
+ content['gId'] = item.enterpriseId
+ content['gStock'] = item.enterpriseStock
+ content['gName'] = item.enterpriseName
+ // 重点!赋值合并的行数数值,只需要取子循环的第一个数赋值待合并的行数即可
+ if(subIndex == 0){
+ content['gNum'] = item.reserves.length
+ }
+ gData.push(content)
+ })
+ }
+ })
+ }
+ console.log(gData,'gData')
+ if(Array.isArray(gData)){
+ gData.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 content2 = {}
+ content2 = subRes
+ content2['gId'] = item.enterpriseId
+ content2['gStock'] = item.gStock
+ content2['gName'] = item.gName
+ content2['gNum'] = item.gNum || null
+ content2['topId'] = item.reserveId
+ content2['reserveName'] = item.reserveName
+ content2['topSquare'] = item.square
+ content2['topStorageSquare'] = item.storageSquare
+ content2['topApprovedReserves'] = item.approvedReserves
+ content2['topNuclearDose'] = item.nuclearDose
+ // 重点!赋值合并的行数数值,只需要取子循环的第一个数赋值待合并的行数即可
+ if(subIndex == 0){
+ content2['rowNum'] = item.storehouse.warehouses.length
+ }
+ this.stateStockData.push(content2)
+ })
+ }
+ })
+ }
+ if(res.data.result.total){
+ const total = res.data.result.total
+ let totalObj = {
+ topId: null,
+ reserveName: total.name,
+ gId: null,
+ gName: total.name,
+ gStock: total.enterpriseTotalStock,
+ storehouseName: total.name,
+ gNum: 1,
+ 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,
+ bead: total.totalBead,
+ combined: total.totalCombined,
+ approvedReserves: total.whTotalApprovedReserves,
+ square: total.whTotalSquare,
+ storageSquare: total.whTotalStorageSquare,
+ nuclearDose: total.whTotalNuclearDose,
+ }
+ this.stateStockData.push(totalObj)
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.data.message
+ })
+ }
+ },
+
+ searchData(){
+ this.getList()
+ },
+
+ reset(){
+ this.listQuery={
+ enterpriseName: ''
+ }
+ 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
+ })
+ }
+ }).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 ==0 || columnIndex ==1){
+ return {
+ rowspan: row.gNum * row.rowNum, // 待合并行数 -- 合并的行数长度就等于之前赋值的子数据的长度;未赋值的即表示0,不显示
+ colspan: row.gNum>0?1:0 // 待合并列数 -- 合并的列数自身占一列,被合并的要返回0,表示不显示
+ };
+ }
+ if(columnIndex >1 && 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>
diff --git a/src/views/warehouse/stockManage.vue b/src/views/warehouse/stockManage.vue
new file mode 100644
index 0000000..f64983c
--- /dev/null
+++ b/src/views/warehouse/stockManage.vue
@@ -0,0 +1,218 @@
+<template>
+ <div class="app-container">
+ <div class="filter-container">
+ <div style="display: block;">
+ <div class="basic_search" style="margin-right: 10px;padding-top: 10px">
+ <el-button style="margin-left: 10px;" type="primary" @click="openStock('add',{})">创建库区</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">
+ <el-link type="primary" @click="openStock('edit',scope.row)">{{scope.row.reserveName}}</el-link>
+ </template>
+ </el-table-column>
+ <el-table-column label="区域" align="center" fixed="left">
+ <template slot-scope="scope">
+ {{ scope.row.province }}/{{scope.row.city}}/{{scope.row.area}}
+ </template>
+ </el-table-column>
+ <el-table-column label="所属企业" prop="enterpriseName" align="center"></el-table-column>
+ <el-table-column label="地址" prop="reserveAddress" align="center"></el-table-column>
+ <el-table-column label="库区面积/㎡" prop="topSquare" align="center"></el-table-column>
+ <el-table-column label="有效存储总面积/㎡" prop="topEffectiveStorageSquare" align="center"></el-table-column>
+ <el-table-column label="核药量/kg" prop="topNuclearDose" align="center"></el-table-column>
+ <el-table-column label="库房名称" prop="storehouseName" align="center">
+ <template slot-scope="scope">
+ <el-link 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="effectiveStorageSquare" align="center"></el-table-column>
+ <el-table-column label="等级" prop="storehouseLevel" 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="totalInventory" align="center"></el-table-column>
+ <el-table-column label="本公司库存" prop="inventoryOfTheCompany" 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="操作" align="center" width="120" class-name="small-padding fixed-width" fixed="right">
+ <template slot-scope="scope">
+ <el-button type="text" @click="showEnterprises(scope.row)">存货企业</el-button>
+ <el-button type="text" @click="deliverUsage(scope.row)">分配使用权</el-button>
+ </template>
+ </el-table-column>
+ <el-table-column label="是否允许盘库" align="center" width="120" class-name="small-padding fixed-width" fixed="right">
+ <template slot-scope="scope">
+ <span type="text" v-if="scope.row.inventoryStatus == 1">否</span>
+ <el-button v-if="scope.row.inventoryStatus == 0" type="text" @click="stockEdit(scope.row)">允许盘库</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ <br>
+
+ <add-stock ref="addStock" @refresh="getList"></add-stock>
+ <deliver-usage ref="deliverUsage" @refresh="getList"></deliver-usage>
+ <stock-records ref="stockRecords"></stock-records>
+ <edit-stock ref="editStock"></edit-stock>
+ <enterprise-stock ref="enterStock"></enterprise-stock>
+ </div>
+ </div>
+</template>
+
+<script>
+import {computePageCount} from "../../utils";
+import {getReservesForUser, getStorehouseDataByUser} from "../../api/warehouse"
+import addStock from "./components/addStock"
+import deliverUsage from "./components/deliverUsage"
+import stockRecords from "./components/stockRecords"
+import editStock from "./components/editStock"
+import enterpriseStock from "./components/enterpriseStock"
+import Cookies from "js-cookie"
+export default {
+ name: "stockManage",
+ components: {enterpriseStock,addStock,deliverUsage,stockRecords,editStock},
+ data() {
+ return {
+ tableKey: '',
+ provinceList: [],
+ cityList: [],
+ districtList: [],
+ Cookies: Cookies,
+ listLoading: false,
+ stateStockData: [],
+ rowIndex: '-1',
+ OrderIndexArr: [],
+ hoverOrderArr: []
+ }
+ },
+ created() {
+ const t = this
+ t.getList()
+ },
+ mounted() {
+ },
+ watch: {},
+ methods: {
+ async getList(){
+ const res = await getStorehouseDataByUser()
+ if(res.data.code == 200){
+ this.stateStockData=[]
+ if(res.data.result.reserveData && Array.isArray(res.data.result.reserveData)){
+ const tableData = res.data.result.reserveData
+ if(tableData.length>0){
+ tableData.map(item=>{
+ if(Array.isArray(item.storehouseInfos)){
+ item.storehouseInfos.map((subRes, subIndex)=>{
+ let content = {}
+ content = subRes
+ content['topId'] = item.id
+ content['reserveName'] = item.reserveName
+ content['enterpriseName'] = item.enterpriseName
+ content['province'] = item.province
+ content['city'] = item.city
+ content['area'] = item.area
+ content['reserveAddress'] = item.reserveAddress
+ content['topSquare'] = item.square
+ content['topEffectiveStorageSquare'] = item.effectiveStorageSquare
+ content['topNuclearDose'] = item.nuclearDose
+ // 重点!赋值合并的行数数值,只需要取子循环的第一个数赋值待合并的行数即可
+ if(subIndex == 0){
+ content['rowNum'] = item.storehouseInfos.length
+ }
+ this.stateStockData.push(content)
+ })
+ }
+ })
+ }
+ }
+ }else{
+ this.$message({
+ type:'warning',
+ message: res.data.message
+ })
+ }
+ },
+
+ openStock(type,data){
+ const t = this
+ t.$refs.addStock.open(type,data)
+ },
+ openRecord(row){
+ const t = this
+ t.$refs.stockRecords.open()
+ },
+ showEnterprises(row){
+ const t = this
+ t.$refs.enterStock.open(row)
+ },
+ deliverUsage(row){
+ const t = this
+ t.$refs.deliverUsage.open(row)
+ },
+
+ stockEdit(row){
+ const t = this
+ t.$refs.editStock.open(row)
+
+ },
+ objectSpanMethod({ row, column, rowIndex, columnIndex }) {
+ // columnIndex 代表列数,从0开始计数,我们要合并的字段属于第一列,取0
+ if(columnIndex <= 6){
+ 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>
diff --git a/src/views/warehouse/stockSupervision.vue b/src/views/warehouse/stockSupervision.vue
new file mode 100644
index 0000000..c1b64d5
--- /dev/null
+++ b/src/views/warehouse/stockSupervision.vue
@@ -0,0 +1,403 @@
+<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="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
+ })
+ }
+ }).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>
--
Gitblit v1.9.2