From 3d81e48c5df05117225726fa06f44c9c33f76861 Mon Sep 17 00:00:00 2001 From: 马宇豪 <978517621@qq.com> Date: 星期一, 26 六月 2023 10:14:51 +0800 Subject: [PATCH] 转库提交 --- src/views/stock/components/addStock.vue | 254 +++++++++++++ src/views/stock/components/stockDetail.vue | 2 src/views/stock/stockManage.vue | 192 ++++++++++ config/index.js | 2 src/views/stock/enterprisePurchaseStatistics.vue | 2 src/views/stock/stockSupervision.vue | 267 ++++++++++++++ src/router/index.js | 14 src/views/enterprise/enterpriseDetailForm.vue | 36 - src/views/stock/components/stockRecords.vue | 176 +++++++++ src/views/stock/statePurchaseStatistics.vue | 2 config/dev.env.js | 12 src/views/stock/components/editStock.vue | 97 +++++ src/views/stock/components/deliverUsage.vue | 68 +++ 13 files changed, 1,090 insertions(+), 34 deletions(-) diff --git a/config/dev.env.js b/config/dev.env.js index b493a6e..680a165 100644 --- a/config/dev.env.js +++ b/config/dev.env.js @@ -14,14 +14,14 @@ // BASE_API: '"http://192.168.0.35:8100"', // 最新 +// BASE_API: '"http://39.104.85.193:4105"', +// 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://39.104.85.193:4105"', IMG_API: '"http://39.104.85.193:4105/upload/"', - // - - // BASE_API: '"http://192.168.0.29:8100"', - // IMG_API: '"http://192.168.0.29: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/"', // IMG_API: '"https://sinanoaq.com:8100/upload/"', // BASE_API: '"http://220.171.99.118:4100"', diff --git a/config/index.js b/config/index.js index 98cab24..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: '0.0.0.0', + 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/router/index.js b/src/router/index.js index d57f811..4201441 100644 --- a/src/router/index.js +++ b/src/router/index.js @@ -123,7 +123,19 @@ component: () => import('@/views/dashboard/index'), name: 'Dashboard1', meta: { title: '首页', icon: 'el-icon-dash', noCache: true, affix: true } - } + }, + { + path: 'stockManage', + component: () => import('@/views/stock/stockManage'), + name: 'stockManage', + meta: { title: '库房管理', icon: 'el-icon-dash', noCache: true, affix: true } + }, + { + path: 'stockSupervision', + component: () => import('@/views/stock/stockSupervision'), + name: 'stockSupervision', + meta: { title: '库房监管', icon: 'el-icon-dash', noCache: true, affix: true } + } ], hidden: true }, diff --git a/src/views/enterprise/enterpriseDetailForm.vue b/src/views/enterprise/enterpriseDetailForm.vue index 8e159c0..b56e3d6 100644 --- a/src/views/enterprise/enterpriseDetailForm.vue +++ b/src/views/enterprise/enterpriseDetailForm.vue @@ -286,34 +286,24 @@ } } - } - else{ + } else{ let updateForm = this.$refs.enterpriseBasicInformation.dataForm - if(updateForm.validstarttime == null){ + let res = await updateNewEnterprise(updateForm) + if(res.data.code === "200"){ + this.$emit('getinfo') + this.dialogVisible = false this.$notify({ - title:'警告', - message:'请填写许可证期限', - type:'warning' + type:'success', + duration:2000, + message:'成功', + title:'成功', }) }else { - let res = await updateNewEnterprise(updateForm) - if(res.data.code === "200"){ - this.$emit('getinfo') - this.dialogVisible = false - this.$notify({ - type:'success', - duration:2000, - message:'成功', - title:'成功', - }) - }else { - this.$message({ - type:'warning', - message:res.data.message - }) - } + this.$message({ + type:'warning', + message:res.data.message + }) } - } } }, diff --git a/src/views/stock/components/addStock.vue b/src/views/stock/components/addStock.vue new file mode 100644 index 0000000..9222aa2 --- /dev/null +++ b/src/views/stock/components/addStock.vue @@ -0,0 +1,254 @@ +<template> + <el-dialog :visible.sync="dialogVisible" :modal-append-to-body="false" :close-on-click-modal="false" title="创建库区" center + width="50%"> + <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 > + <el-col :span="22"> + <el-form-item label="库区名称:" prop="stockName" > + <el-input v-model.trim="dataForm.stockName"/> + </el-form-item> + </el-col> + </el-row> + <el-row > + <el-col :span="22"> + <el-form-item label="所属企业:" prop="companyName" > + <el-input v-model.trim="dataForm.companyName"/> + </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')"> + <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')"> + <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="district" class="selector"> + <el-select v-model="dataForm.district" clearable filterable @change="changeArea('district')"> + <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="address" > + <el-input v-model.trim="dataForm.address"/> + </el-form-item> + </el-col> + </el-row> + <el-row :gutter="20"> + <el-col :span="11"> + <el-form-item label="库区总面积:" prop="totalSize" class="numInput"> + <el-input type="number" v-model.number="dataForm.totalSize"><template slot="append">㎡</template></el-input> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="有效仓储面积:" prop="totalSize" class="numInput"> + <el-input type="number" v-model.number="dataForm.actualSize"><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="actualStorage" class="numInput"> + <el-input type="number" v-model.number="dataForm.actualStorage"><template slot="append">箱</template></el-input> + </el-form-item> + </el-col> + <el-col :span="11"> + <el-form-item label="核药量:" prop="actualUsage" class="numInput"> + <el-input type="number" v-model.number="dataForm.actualUsage"><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> + <el-table v-loading="listLoading" :data="dataForm.stockList" border fit highlight-current-row style="width: 100%;"> + <el-table-column type="index" label="序号" align="center" width="60"/> + <el-table-column label="库房名称" prop="name" align="center"></el-table-column> + <el-table-column label="库房面积" prop="size" align="center"></el-table-column> + <el-table-column label="有效仓储面积" prop="actualSize" align="center"></el-table-column> + <el-table-column label="核定储量(箱)" prop="actualStock" align="center"></el-table-column> + <el-table-column label="等级" prop="level" align="center"></el-table-column> + <el-table-column label="核药量(kg)" prop="actualUsage" 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="editItem(scope.row)">编辑</el-button> + <el-button type="text" @click="deleteItem(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <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="dialogVisible = false">保 存</el-button> + </span> + <el-dialog :visible.sync="editDialogVisible" append-to-body :title="dialogTitle" center width="600px"> + <el-form ref="editForm" :rules="editFormRules" :model="editForm" label-width="140px" class="editForm"> + <el-form-item label="库房名称:" prop="stockName"> + <el-input v-model="editForm.stockName"/> + </el-form-item> + <el-form-item label="库房面积:" prop="totalSize" class="numInput"> + <el-input type="number" v-model.number="editForm.totalSize"><template slot="append">㎡</template></el-input> + </el-form-item> + <el-form-item label="有效仓储面积:" prop="totalSize" class="numInput"> + <el-input type="number" v-model.number="editForm.actualSize"><template slot="append">㎡</template></el-input> + </el-form-item> + <el-form-item label="核定储量:" prop="actualStorage" class="numInput"> + <el-input type="number" v-model.number="editForm.actualStorage"><template slot="append">箱</template></el-input> + </el-form-item> + <el-form-item label="核药量:" prop="actualUsage" class="numInput"> + <el-input type="number" v-model.number="editForm.actualUsage"><template slot="append">kg</template></el-input> + </el-form-item> + <el-form-item label="等级:" prop="level" class="numInput"> + <el-input type="number" v-model.number="editForm.level"/> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="editDialogVisible = false">取 消</el-button> + <el-button type="primary" @click="editDialogVisible = false">保 存</el-button> + </span> + </el-dialog> + </el-dialog> +</template> + +<script> + import {mapGetters} from "vuex"; + import {getCityListData, getProvinceListData} from "../../../api/area"; + + export default { + name: "addStock", + data() { + return { + dialogVisible: false, + editDialogVisible: false, + dialogTitle: '新增库房', + dataForm: { + stockName: '', + companyName: '', + province: '', + city: '', + district: '' + }, + editForm: { + + }, + listLoading: false, + provinceList:[], + cityList:[], + districtList:[], + dataFormRules:{ + department:[ + { required: true, message: '请选择行政主管部门', trigger: 'change' }, + ] + }, + editFormRules:{} + } + }, + created() { + const t = this + t.getProvince() + }, + computed: { + ...mapGetters([ + 'userType', + 'username' + ]) + }, + methods: { + open(){ + this.dialogVisible = true; + }, + addItem(){ + this.editDialogVisible = true + }, + 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.district = '' + 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.district = '' + let res = await getCityListData({type:3, parenttype:2, parentname:this.dataForm.city}) + if (res.data.code === "200") { + this.districtList = res.data.result + } + } + } + } + } +</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/stock/components/deliverUsage.vue b/src/views/stock/components/deliverUsage.vue new file mode 100644 index 0000000..0680133 --- /dev/null +++ b/src/views/stock/components/deliverUsage.vue @@ -0,0 +1,68 @@ +<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="companyList"> + <el-checkbox label="公司A" checked border style="display: block"></el-checkbox> + <el-checkbox label="公司B" border style="display: block"></el-checkbox> + <el-checkbox label="公司C" border disabled style="display: block"></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="deliverDialog = false">提 交</el-button> + </span> + </el-dialog> +</template> + +<script> + import {computePageCount} from "@/utils"; + + export default { + name: "deliverUsage", + components: {}, + data(){ + return{ + tableStatus: true, + tableKey:'', + stockName: '仓库XXXX使用权分配', + listLoading:false, + companyList:[], + deliverDialog:false, + } + }, + created() { + const t = this + }, + methods:{ + open(){ + this.deliverDialog = true + }, + } + } +</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/stock/components/editStock.vue b/src/views/stock/components/editStock.vue new file mode 100644 index 0000000..5cf6d5e --- /dev/null +++ b/src/views/stock/components/editStock.vue @@ -0,0 +1,97 @@ +<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.areaName"/></el-form-item> + <el-form-item label="当前库房:"><el-input readonly v-model="stockInfo.stockName"/></el-form-item> + <el-form-item label="当前总库存:"><el-input readonly v-model="stockInfo.stockNum"/></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="baozhu" class="numInput"> + <el-input v-model="editForm.baozhu"/> + </el-form-item> + <el-form-item label="喷花类:" prop="penhua" class="numInput"> + <el-input type="number" v-model.number="editForm.penhua"/> + </el-form-item> + <el-form-item label="旋转类:" prop="xuanzhuan" class="numInput"> + <el-input type="number" v-model.number="editForm.xuanzhuan"/> + </el-form-item> + <el-form-item label="吐珠类:" prop="tuzhu" class="numInput"> + <el-input type="number" v-model.number="editForm.tuzhu"/> + </el-form-item> + <el-form-item label="玩具类:" prop="wanju" class="numInput"> + <el-input type="number" v-model.number="editForm.wanju"/> + </el-form-item> + <el-form-item label="组合类:" prop="zuhe" class="numInput"> + <el-input type="number" v-model.number="editForm.zuhe"/> + </el-form-item> + </el-form> + <span slot="footer" class="dialog-footer"> + <el-button @click="editDialogVisible = false">取 消</el-button> + <el-button type="primary" @click="editDialogVisible = false">完 成</el-button> + </span> + </el-dialog> +</template> + +<script> + import {mapGetters} from "vuex"; + + export default { + name: "editStock", + data() { + return { + editDialogVisible: false, + stockInfo:{}, + editForm: {}, + listLoading: false, + editFormRules:{ + department:[ + { required: true, message: '请选择行政主管部门', trigger: 'change' }, + ] + } + } + }, + created() { + const t = this + }, + computed: { + ...mapGetters([ + 'userType', + 'username' + ]) + }, + methods: { + open(){ + this.editDialogVisible = true; + } + } + } +</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/stock/components/stockDetail.vue b/src/views/stock/components/stockDetail.vue index 48d17da..35ceca5 100644 --- a/src/views/stock/components/stockDetail.vue +++ b/src/views/stock/components/stockDetail.vue @@ -17,7 +17,7 @@ fit highlight-current-row style="width: 100%;"> - <el-table-column type="index" label="" align="center" width="60"/> + <el-table-column type="index" label="序号" align="center" width="60"/> <el-table-column label="产品名称" prop="name" align="center"> </el-table-column> <el-table-column label="流向码" prop="directioncode" align="center"> diff --git a/src/views/stock/components/stockRecords.vue b/src/views/stock/components/stockRecords.vue new file mode 100644 index 0000000..a7b57e9 --- /dev/null +++ b/src/views/stock/components/stockRecords.vue @@ -0,0 +1,176 @@ +<template> + <el-dialog + :visible.sync="recordDialog" + :close-on-click-modal="false" + width="50%" + :append-to-body="true" + :title="tableStatus?'仓库出库记录':'仓库入库记录'" + center + > + <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="结束日期" + > + </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-switch + v-model="tableStatus" + inactive-color="#13ce66" + active-text="出库记录" + inactive-text="入库记录"> + </el-switch> + </div> + </div> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="stockRecords" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="序号" type="index" align="center" width="60"/> + <el-table-column label="入库单号" prop="inCode" align="center"></el-table-column> + <el-table-column label="入库企业" prop="name" align="center"></el-table-column> + <el-table-column label="创建时间" prop="creatTime" align="center"></el-table-column> + <el-table-column label="运输证号" prop="transportNum" align="center"></el-table-column> + <el-table-column label="数量(箱)" prop="num" align="center"></el-table-column> + <el-table-column label="入库类型" prop="type" align="center"> + <template slot-scope="scope"> + <span type="text">{{scope.row.type}}</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(scope.row)">查看</el-button> + </template> + </el-table-column> + </el-table> + <br> + <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" + /> + <br> + </div> + </div> + </el-dialog> +</template> + +<script> + import {computePageCount} from "@/utils"; + + export default { + name: "stockRecords", + components: {}, + data(){ + return{ + tableStatus: true, + tableKey:'', + listLoading:false, + pageSize: 10, + recordTotal: 0, + currentPage: 1, + validTime: ['', ''], + stockRecords:[], + recordDialog:false, + listQuery: { + starttime:'', + endtime:'', + }, + } + }, + created() { + const t = this + t.initValidTime() + }, + methods:{ + open(){ + this.recordDialog = true + }, + initValidTime() { + const end = new Date(); + console.log(end.getDate(),end.getMonth(),end.getFullYear(),'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"; + } + }, + 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 + } + }, + // async getInStorageDetailList(){ + // this.listLoading = true + // let res = await getSaleDetailListData(this.listQuery) + // if(res.data.code === "200"){ + // this.recordTotal = res.data.result.total + // this.pageSize = res.data.result.size + // this.currentPage = res.data.result.current + // this.stockRecords = res.data.result.records + // }else{ + // this.$message({ + // type:'warning', + // message:res.data.message + // }) + // } + // this.listLoading = false + // }, + handleSizeChange(val) { + this.listQuery.pageSize = val + // this.getInStorageDetailList() + }, + handleCurrentChange(val) { + this.listQuery.pageIndex = val + // this.getInStorageDetailList() + }, + } + } +</script> + +<style scoped> + .basic_search{ + display:inline-block; + } +</style> diff --git a/src/views/stock/enterprisePurchaseStatistics.vue b/src/views/stock/enterprisePurchaseStatistics.vue index 2ba0d35..cc76fbb 100644 --- a/src/views/stock/enterprisePurchaseStatistics.vue +++ b/src/views/stock/enterprisePurchaseStatistics.vue @@ -133,7 +133,7 @@ import FileSaver from 'file-saver' import XLSX from 'xlsx' export default { - name: "enterpriseEntryStatistics", + name: "enterprisePurchaseStatistics", components: {PurchaseDetail}, data(){ return{ diff --git a/src/views/stock/statePurchaseStatistics.vue b/src/views/stock/statePurchaseStatistics.vue index 939b587..3a5cd8d 100644 --- a/src/views/stock/statePurchaseStatistics.vue +++ b/src/views/stock/statePurchaseStatistics.vue @@ -130,7 +130,7 @@ import FileSaver from 'file-saver' import XLSX from 'xlsx' export default { - name: "enterpriseEntryStatistics", + name: "statePurchaseStatistics", components: {PurchaseDetail}, data() { return { diff --git a/src/views/stock/stockManage.vue b/src/views/stock/stockManage.vue new file mode 100644 index 0000000..7a5d2f0 --- /dev/null +++ b/src/views/stock/stockManage.vue @@ -0,0 +1,192 @@ +<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="addStock()">创建库区</el-button> + </div> + </div> + </div> + <div class="table_content"> + <el-table + v-loading="listLoading" + :key="tableKey" + :data="stateStockData" + :span-method="objectSpanMethod" :cell-class-name="tableRowClassName" @cell-mouse-leave="cellMouseLeave" @cell-mouse-enter="cellMouseEnter" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="区域" align="center"> + <template slot-scope="scope"> + <el-link type="primary" @click="digDetail(scope.row)">{{ scope.row.region }}</el-link> + </template> + </el-table-column> + <el-table-column label="库区名称" prop="" align="center"></el-table-column> + <el-table-column label="所属企业" prop="" align="center"></el-table-column> + <el-table-column label="库区面积" prop="" align="center"></el-table-column> + <el-table-column label="有效存储总面积" prop="" align="center"></el-table-column> + <el-table-column label="核药量" prop="" align="center"></el-table-column> + <el-table-column label="地址" prop="" align="center"></el-table-column> + <el-table-column label="库房名称" prop="" align="center"> + <template slot-scope="scope"> + <el-link type="primary" @click="openRecord(scope.row)"></el-link> + </template> + </el-table-column> + <el-table-column label="库房面积" prop="" align="center"></el-table-column> + <el-table-column label="有效存储面积" prop="" align="center"></el-table-column> + <el-table-column label="等级" prop="" align="center"></el-table-column> + <el-table-column label="库容量" prop="" align="center"></el-table-column> + <el-table-column label="核药量" prop="" align="center"></el-table-column> + <el-table-column label="当前总库存" prop="" align="center"></el-table-column> + <el-table-column label="本公司库存" prop="" align="center"></el-table-column> + <el-table-column label="爆竹类(箱)" prop="baozhuCount" align="center"></el-table-column> + <el-table-column label="喷花类(箱)" prop="penhuaCount" align="center"></el-table-column> + <el-table-column label="旋转类(箱)" prop="xuanzhuanCount" align="center"></el-table-column> + <el-table-column label="吐珠类(箱)" prop="tuzhuCount" align="center"></el-table-column> + <el-table-column label="玩具类(箱)" prop="wanjuCount" align="center"></el-table-column> + <el-table-column label="组合烟花类(箱)" prop="zuheCount" 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">否</span> + <el-button type="text" @click="stockEdit(scope.row)">允许盘库</el-button> + </template> + </el-table-column> + </el-table> + <br> + <add-stock ref="addStock"></add-stock> + <deliver-usage ref="deliverUsage"></deliver-usage> + <stock-records ref="stockRecords"></stock-records> + <edit-stock ref="editStock"></edit-stock> + </div> + </div> +</template> + +<script> +import {computePageCount} from "../../utils"; +import {getCityListData, getProvinceListData} from "../../api/area" +import {regionPifaBox} from "../../api/stock" +import addStock from "./components/addStock" +import deliverUsage from "./components/deliverUsage" +import stockRecords from "./components/stockRecords" +import editStock from "./components/editStock" +import Cookies from "js-cookie" +export default { + name: "stockManage", + components: {addStock,deliverUsage,stockRecords,editStock}, + data() { + return { + tableKey: '', + provinceList: [], + cityList: [], + districtList: [], + Cookies: Cookies, + listLoading: false, + stateStockData: [], + } + }, + created() { + const t = this + setTimeout(()=>{ + t.$refs.deliverUsage.open() + },1000) + }, + mounted() { + }, + watch: {}, + methods: { + addStock(){ + const t = this + t.$refs.addStock.open() + }, + openRecord(row){ + const t = this + t.$refs.stockRecords.open() + }, + deliverUsage(row){ + const t = this + t.$refs.stockRecords.open() + }, + // async getRegionPifaBox() { + // let res = await regionPifaBox() + // if (res.data.code === "200") { + // const stateStockData = res.data.result || [] + // if(Array.isArray(stateStockData)){ + // stateStockData.map(item=>{ + // if(Array.isArray(item.enterprises)){ + // item.enterprises.map((subRes, subIndex)=>{ + // let content = {} + // content = subRes + // content['area'] = item.area + // content['enterpriseNum'] = item.enterpriseNum + // // 重点!赋值合并的行数数值,只需要取子循环的第一个数赋值待合并的行数即可 + // if(subIndex == 0){ + // content['rowNum'] = item.enterprises.length + // } + // t.tableRowData.push(content) + // }) + // } + // }) + // } + // } else { + // this.$message({ + // type: 'warning', + // message: res.data.message + // }) + // } + // this.listLoading = false + // }, + digDetail(row){ + }, + + stockEdit(row){ + const t = this + t.$refs.editStock.open() + + }, + 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 scoped> +.basic_search { + display: inline-block; +} +</style> diff --git a/src/views/stock/stockSupervision.vue b/src/views/stock/stockSupervision.vue new file mode 100644 index 0000000..8d9bcb7 --- /dev/null +++ b/src/views/stock/stockSupervision.vue @@ -0,0 +1,267 @@ +<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.district" clearable filterable @change="changeArea('district')"> + <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.companyName" style="width:200px"> + </el-input> + </div> + <div class="basic_search"> + <span>库区名称:</span> + <el-input filterable clearable v-model="listQuery.stockName" 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" + :key="tableKey" + :data="stateStockData" + show-summary + :span-method="objectSpanMethod" :cell-class-name="tableRowClassName" @cell-mouse-leave="cellMouseLeave" @cell-mouse-enter="cellMouseEnter" + border + fit + highlight-current-row + style="width: 100%;" + > + <el-table-column label="库区" prop="" align="center"></el-table-column> + <el-table-column label="所属地区" align="center"> + <template slot-scope="scope"> + <el-link type="primary" @click="digDetail(scope.row)">{{ scope.row.region }}</el-link> + </template> + </el-table-column> + <el-table-column label="所属企业" prop="" align="center"></el-table-column> + <el-table-column label="地址" prop="" align="center"></el-table-column> + <el-table-column label="库区总面积" prop="" align="center"></el-table-column> + <el-table-column label="有效存储总面积" prop="" align="center"></el-table-column> + <el-table-column label="总库容量" prop="" align="center"></el-table-column> + <el-table-column label="总核药量" prop="" align="center"></el-table-column> + <el-table-column label="库房名称" prop="" align="center"> + <template slot-scope="scope"> + <el-link type="primary" @click="openRecord(scope.row)"></el-link> + </template> + </el-table-column> + <el-table-column label="总库存" prop="" align="center"></el-table-column> + <el-table-column label="库房面积" prop="" align="center"></el-table-column> + <el-table-column label="有效存储面积" prop="" align="center"></el-table-column> + <el-table-column label="库容量" prop="" align="center"></el-table-column> + <el-table-column label="核药量" prop="" align="center"></el-table-column> + <el-table-column label="爆竹类(箱)" prop="baozhuCount" align="center"></el-table-column> + <el-table-column label="喷花类(箱)" prop="penhuaCount" align="center"></el-table-column> + <el-table-column label="旋转类(箱)" prop="xuanzhuanCount" align="center"></el-table-column> + <el-table-column label="吐珠类(箱)" prop="tuzhuCount" align="center"></el-table-column> + <el-table-column label="玩具类(箱)" prop="wanjuCount" align="center"></el-table-column> + <el-table-column label="组合烟花类(箱)" prop="zuheCount" align="center"></el-table-column> + <el-table-column label="是否超量" prop="" align="center"> + <template slot-scope="scope"> + <span></span> + </template> + </el-table-column> + <el-table-column label="是否允许盘库" prop="" align="center"> + <template slot-scope="scope"> + <el-switch v-model="scope.row.tableStatus"></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"> + <el-button type="text" @click="digDetail(scope.row)">查看详情</el-button> + <el-button type="text" @click="deleteData(scope.row)">删除</el-button> + </template> + </el-table-column> + </el-table> + <br> + <add-stock ref="addStock"></add-stock> + <stock-records ref="stockRecords"></stock-records> + </div> + </div> +</template> + +<script> +import {computePageCount} from "../../utils"; +import {getCityListData, getProvinceListData} from "../../api/area" +import {regionPifaBox} from "../../api/stock" +import addStock from "./components/addStock" +import stockRecords from "./components/stockRecords" +import Cookies from "js-cookie" +export default { + name: "stockSupervision", + components: {addStock,stockRecords}, + data() { + return { + tableKey: '', + provinceList: [], + cityList: [], + districtList: [], + Cookies: Cookies, + listLoading: false, + stateStockData: [], + listQuery: { + province: '', + city: '', + district: '', + companyName: '', + stockName: '', + }, + } + }, + created() { + const t = this + t.getProvince() + setTimeout(()=>{ + + },1000) + }, + mounted() { + }, + watch: {}, + methods: { + openRecord(row){ + const t = this + t.$refs.stockRecords.open() + }, + // async getRegionPifaBox() { + // this.listLoading = true + // let res = await regionPifaBox(this.listQuery) + // if (res.data.code === "200") { + // const stateStockData = res.data.result || [] + // if(Array.isArray(stateStockData)){ + // stateStockData.map(item=>{ + // if(Array.isArray(item.enterprises)){ + // item.enterprises.map((subRes, subIndex)=>{ + // let content = {} + // content = subRes + // content['area'] = item.area + // content['enterpriseNum'] = item.enterpriseNum + // // 重点!赋值合并的行数数值,只需要取子循环的第一个数赋值待合并的行数即可 + // if(subIndex == 0){ + // content['rowNum'] = item.enterprises.length + // } + // t.tableRowData.push(content) + // }) + // } + // }) + // } + // } else { + // this.$message({ + // type: 'warning', + // message: res.data.message + // }) + // } + // this.listLoading = false + // }, + digDetail(row){ + const t = this + t.$refs.addStock.open() + }, + async getProvince() { + let res = await getProvinceListData() + if (res.data.code === "200") { + this.provinceList = res.data.result.provinceList + } + },//获取省 + + async changeArea(value) { + if (value === 'province') { + this.listQuery.city = '' + this.listQuery.district = '' + this.areaListQuery = { + type: 2, + parenttype: 1, + parentname: this.listQuery.province, + } + let res = await getCityListData(this.areaListQuery) + if (res.data.code === "200") { + this.cityList = res.data.result + } + } else if (value === 'city') { + this.listQuery.district = '' + this.areaListQuery = { + type: 3, + parenttype: 2, + parentname: this.listQuery.city, + } + let res = await getCityListData(this.areaListQuery) + if (res.data.code === "200") { + this.districtList = res.data.result + } + } + }, + objectSpanMethod({ row, column, rowIndex, columnIndex }) { + // columnIndex 代表列数,从0开始计数,我们要合并的字段属于第一列,取0 + if(columnIndex <=8){ + 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 scoped> +.basic_search { + display: inline-block; +} +</style> -- Gitblit v1.9.2