From a1b85ef72062ca80db35546e4216dd564f3e0f57 Mon Sep 17 00:00:00 2001 From: WangHan <wwh_work@126,com> Date: 星期四, 03 四月 2025 15:58:19 +0800 Subject: [PATCH] 问题与漏洞修改 --- admin-web/src/views/dashboard/index.vue | 563 ++++++++++++++++++++++++++++++------------------------- 1 files changed, 308 insertions(+), 255 deletions(-) diff --git a/admin-web/src/views/dashboard/index.vue b/admin-web/src/views/dashboard/index.vue index c65a195..c22c2a6 100644 --- a/admin-web/src/views/dashboard/index.vue +++ b/admin-web/src/views/dashboard/index.vue @@ -1,212 +1,147 @@ <template> <div class="content"> -<!-- <el-row :gutter="10"> + <el-row :gutter="20"> <el-col :span="12"> - <el-row :gutter="10"> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/qbgd.png"></img> - <span>鍏ㄩ儴宸ュ崟</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">20<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/gdc.png"></img> - <span>宸ュ崟姹�</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">2<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/gdc.png"></img> - <span>寰呭搷搴斿伐鍗�</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">1<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - </el-row> + <el-card shadow="never"> + <div slot="header" class="clearfix"> + <span class="font-18 font-bold">璋冩嫧寰呭姙</span> + </div> + <div class="f-r f-r-between m-b-10"> + <el-radio-group @change="changeAudit" v-model="waitType" size="mini"> + <el-radio-button label="0">寰呭嚭搴�</el-radio-button> + <el-radio-button label="1">寰呭叆搴�</el-radio-button> + </el-radio-group> + <div class="to-more" @click="nav('/stock/transfer/transferissue')">鏌ョ湅鏇村 ></div> + </div> + <el-table v-loading="waitLoading" :data="waitWorkData" class="top-tb" height="220" :show-header="false" + size="medium"> + <el-table-column prop="businessFormCode" align="center" width="130"></el-table-column> + <el-table-column prop="inWarehouseName" align="left" min-width="130"> + <template slot-scope="{row}"> + <el-tooltip class="item" effect="dark" :content="row.inWarehouseName " placement="top-start"> + <div class="font-14 color-333" + style="width: 100%;white-space:nowrap;text-overflow: ellipsis;overflow: hidden"> + {{ row.inWarehouseName }} + </div> + </el-tooltip> + </template> + </el-table-column> + <el-table-column prop="operatorName" align="center" width="80"></el-table-column> + <el-table-column prop="createTime" align="center" width="160"> + <template slot-scope="scope"> + <span class="font-14 color-333">{{ formattTime(scope.row.createTime) }}</span> + </template> + </el-table-column> + <el-table-column prop="date" label="鎿嶄綔" fixed="right" align="center" width="80"> + <template slot-scope="scope"> + <el-button style="padding: 4px 15px" @click.native.prevent="aduitThis(scope.row)" size="mini" type="primary">澶勭悊</el-button> + </template> + </el-table-column> + <el-empty slot="empty" description="鏆傛棤鏁版嵁"></el-empty> + </el-table> + </el-card> </el-col> <el-col :span="12"> - <el-row :gutter="10"> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/jxzgd.png"></img> - <span>杩涜涓伐鍗�</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">3<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/gdc.png"></img> - <span>浜嬩欢姹�</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">{{eventInfo.pool}}<span class="font-12">涓�</span> </div> - <div> - <img v-if="eventInfo.poolLastNum>=0" class='arrow' src="@/assets/images/index/top.png"></img> - <img v-if="eventInfo.poolLastNum<0" class='arrow' src="@/assets/images/index/down.png"></img> - 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/dxy.png"></img> - <span>杩涜涓簨浠�</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">{{eventInfo.wait}}<span class="font-12">涓�</span> </div> - <div> - <img v-if="eventInfo.waitLastNum>=0" class='arrow' src="@/assets/images/index/top.png"></img> - <img v-if="eventInfo.waitLastNum<0" class='arrow' src="@/assets/images/index/down.png"></img> - 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - </el-row> + <el-card shadow="never"> + <div slot="header" class="clearfix"> + <span class="font-18 font-bold">棰勮閫氱煡</span> + </div> + <div class="f-r f-r-between m-b-10"> + <el-radio-group size="mini" v-model="earlyWarningType" @change="changeEarlyWarning"> + <el-radio-button label="">鍏ㄩ儴</el-radio-button> + <el-radio-button label="2">缂鸿揣 <span v-if="warningTypeNum.lowNum">锛坽{warningTypeNum.lowNum}}锛�</span></el-radio-button> + <el-radio-button label="1">瓒呭嚭 <span v-if="warningTypeNum.upNum">锛坽{warningTypeNum.upNum}}锛�</span></el-radio-button> + </el-radio-group> + <div class="to-more" @click="nav('/stock/ledger/alertQuery')">鏌ョ湅鏇村 ></div> + </div> + <el-table v-loading="earlyLoading" :data="earlyWarningData" class="top-tb" height="220" :show-header="false" + size="medium"> + <el-table-column prop="baseGoodsTemplateName" align="left" min-width="130"> + <template slot-scope="{row}"> + <el-tooltip class="item" effect="dark" :content="row.baseGoodsTemplateName " placement="top-start"> + <div class="font-14 color-333" + style="width: 100%;white-space:nowrap;text-overflow: ellipsis;overflow: hidden"> + {{ row.baseGoodsTemplateName }} + </div> + </el-tooltip> + </template> + </el-table-column> + <el-table-column prop="baseGoodsModelsName" align="left" min-width="130"> + <template slot-scope="{row}"> + <el-tooltip class="item" effect="dark" :content="row.baseGoodsModelsName " placement="top-start"> + <div class="font-14 color-333" + style="width: 100%;white-space:nowrap;text-overflow: ellipsis;overflow: hidden"> + {{ row.baseGoodsModelsName }} + </div> + </el-tooltip> + </template> + </el-table-column> + <el-table-column prop="surplus" align="left" min-width="130"> + <template slot-scope="{row}"> + <span class="font-14 color-333">鍓╀綑{{ row.warehouseCount }}{{ row.unit }}</span> + </template> + </el-table-column> + <el-table-column prop="warningTime" align="center" width="160"> + <template slot-scope="{row}"> + <span class="font-14 color-333">{{ formattTime(row.warningTime) }}</span> + </template> + </el-table-column> + <el-empty slot="empty" description="鏆傛棤鏁版嵁"></el-empty> + </el-table> + </el-card> </el-col> </el-row> - - <el-row :gutter="10" style="margin-top: 10px"> + <!-- 涓棿缁熻閮ㄥ垎--> + <div class="f-r f-r-between total-list"> + <div class="total-item"> + <div class="font-14 color-666">鐗╁搧鏁伴噺</div> + <div class="font-14 color-333" style="margin-top:6px;"><span + class="total-num">{{ goodsNumPrice.totalNum }}</span></div> + </div> + <div class="total-item"> + <div class="font-14 color-666">璧勪骇鎬婚噾棰�</div> + <div class="font-14 color-333" style="margin-top:6px;"><span + class="total-num">{{ goodsNumPrice.totalPrice }}</span>涓囧厓 + </div> + </div> + <div class="total-item"> + <div class="font-14 color-666">鐗╁搧鍗犵敤鐜�</div> + <div class="font-14 color-333" style="margin-top:6px;"><span + class="total-num">{{ goodsNumPrice.zhanYouPercent }}%</span></div> + </div> + <div class="total-item"> + <div class="font-14 color-666">A绫荤墿鍝佹暟閲�</div> + <div class="font-14 color-333" style="margin-top:6px;"><span + class="total-num">{{ goodsNumPrice.aTotalNum }}</span></div> + </div> + <div class="total-item"> + <div class="font-14 color-666">B绫荤墿鍝佹暟閲�</div> + <div class="font-14 color-333" style="margin-top:6px;"><span + class="total-num">{{ goodsNumPrice.bTotalNum }}</span></div> + </div> + </div> + <!-- 绫诲埆閲戦缁熻/绫诲埆鏁伴噺缁熻 --> + <el-row :gutter="20"> <el-col :span="12"> - <el-row :gutter="10"> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/wtc.png"></img> - <span>闂姹�</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">0<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/dxy.png"></img> - <span>寰呭搷搴旈棶棰�</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">0<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/gdc.png"></img> - <span>鍙樻洿宸ュ崟</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">0<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - </el-row> + <LBSLTJ :num="goodsNumPrice"></LBSLTJ> </el-col> <el-col :span="12"> - <el-row :gutter="10"> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/dxy.png"></img> - <span>寰呭搷搴斿彉鏇�</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">0<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/fbgd.png"></img> - <span>鍙戝竷宸ュ崟</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">2<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - <el-col :span="8"> - <div class="flex bg-fff box flex-between"> - <div class="flex f-c f-col"> - <img class="icon" src="@/assets/images/index/dxy.png"></img> - <span>寰呭搷搴斿彂甯�</span> - </div> - <div class="flex f-e f-col"> - <div class="font-28">5<span class="font-12">涓�</span> </div> - <div><img class='arrow' src="@/assets/images/index/top.png"></img> 鐜瘮涓婂懆</div> - </div> - </div> - </el-col> - </el-row> + <LBJETJ :num="goodsNumPrice"></LBJETJ> </el-col> </el-row> - <el-row :gutter="10"> - <el-col :span="12"> - <XMGZD></XMGZD> - </el-col> - <el-col :span="12"> - <XYZC></XYZC> - </el-col> - </el-row> - <el-card class="box-card"> - - <span style="font-weight: 600;font-size: 20px">宸ュ崟缁熻</span> - - <el-row :gutter="10"> - <el-col :span="6"> - <SJDJ></SJDJ> - </el-col> - <el-col :span="6"> - <GDLX></GDLX> - </el-col> - <el-col :span="6"> - <SJGDZB></SJGDZB> - </el-col> - <el-col :span="6"> - <progressMY></progressMY> - </el-col> - </el-row> - - </el-card>--> + <!-- 璧勪骇澧為暱/鎶ュ簾缁熻鍥撅紙鏁伴噺锛�--> + <XYZC></XYZC> </div> </template> <script> +import listPage from '@/views/mixins/listPage'; +import {getGoodsNumPrice} from '@/api/dashboard' // 鍒涘缓Context -import {formattedDate} from "@/utils/DateFormatter"; -import * as dash from '@/api/dashboard/dash' -// import * as createEvent from "@/api/eventManage/createEvent"; +import {LongToDateTime} from "@/utils/DateFormatter"; +import {transfeIncome, transferList, transferOutput} from "@/api/stock/transfer"; +import {getWarningTypeNum, geWarningList} from '@/api/stock/ledger' + const ComponentContext = require.context('./components', false, /\.vue$/i); let res_components = {}; // 鐢熸垚寰呭緟娉ㄥ唽缁勪欢闆嗗悎 @@ -217,86 +152,204 @@ export default { name: 'Dashboard', components: {...res_components}, + mixins: [listPage], data() { return { - eventInfo:{} + earlyLoading: false, + waitLoading: false, + goodsNumPrice: { + aTotalNum: 0, + aTotalPrice: 0, + bTotalNum: 0, + bTotalPrice: 0, + cTotalNum: 0, + cTotalPrice: 0, + tenantId: 0, + totalNum: 0, + totalPrice: 0, + xiaFaNum: 0, + zhanYouPercent: 0, + }, + waitType: '0', + waitWorkData: [], // 寰呭姙宸ヤ綔 + earlyWarningType: '', + warningTypeNum: { + lowNum: 0, + totalNum: 0, + upNum: 0, + }, + earlyWarningData: [] // 棰勮閫氱煡 }; }, created() { - // this.getEventInfo() + this.getAuditList() + this.getWarningList() + getGoodsNumPrice().then(res => { + if(res){ + this.goodsNumPrice = res + } + }) }, methods: { - // 鑾峰彇浜嬩欢鏁版嵁 - getEventInfo(){ - dash.getEventInfo().then(res => { - if (res) { - this.eventInfo = res - } - }) - } + // 鏍煎紡鍖栨椂闂� + formattTime(time) { + return LongToDateTime(time) + }, + changeAudit(e) { + this.waitType = e + this.$nextTick(() => { + this.getAuditList() + }) + }, + // 鑾峰彇棰勮閫氱煡鍒楄〃鏁版嵁 + getAuditList() { + this.waitLoading = true + this.waitWorkData = [] + let params = { + pageNum: 1, + pageSize: 5, + } + if (this.waitType === '0') { + params.outAgencyId = this.userInfo.tenantId + params.states = 0 + } else { + params.inAgencyId = this.userInfo.tenantId + params.states = 1 + } + transferList(params).then((res) => { + this.waitLoading = false + this.waitWorkData = res.datas; + }).catch(() => { + this.waitLoading = false + }); + }, + aduitThis(row) { + if (this.waitType === '0') { + this.handleOutput(row) + } else { + this.handleIncome(row) + } + }, + // 鍏ュ簱 + handleIncome(row) { + this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode} 鎺ユ敹鍏ュ簱鍚�?`, '鎺ユ敹鍏ュ簱', { + beforeClose: (action, instance, done) => { + if (action == 'confirm') { + instance.confirmButtonLoading = true; + instance.confirmButtonText = '鎵ц涓�...'; + transfeIncome({id: row.id}) + .then((res) => { + this.$message.success('鎺ユ敹鍏ュ簱鎴愬姛锛�'); + done(); + instance.confirmButtonLoading = false; + this.search(1); + }) + .catch(() => { + done(); + }); + } else { + done(); + } + }, + }); + }, + //鍑哄簱 + handleOutput(row) { + this.$confirm(`鎮ㄧ‘瀹� 鍗曞彿锛�${row.businessFormCode} 璋冩嫧鍑哄簱鍚�?`, '璋冩嫧鍑哄簱', { + beforeClose: (action, instance, done) => { + if (action == 'confirm') { + instance.confirmButtonLoading = true; + instance.confirmButtonText = '鎵ц涓�...'; + transferOutput({id: row.id}) + .then((res) => { + this.$message.success('璋冩嫧鍑哄簱鎴愬姛锛�'); + done(); + instance.confirmButtonLoading = false; + this.search(1); + }) + .catch(() => { + done(); + }); + } else { + done(); + } + }, + }); + }, + // 鍒囨崲棰勮閫氱煡 + changeEarlyWarning(e) { + this.earlyWarningType = e + this.$nextTick(() => { + this.getWarningList() + }) + }, + // 鑾峰彇棰勮閫氱煡鍒楄〃鏁版嵁 + getWarningList() { + this.earlyLoading = true + this.earlyWarningData = [] + getWarningTypeNum().then(res => { + this.warningTypeNum = res + geWarningList({ + warningType: this.earlyWarningType, + pageNum: 1, + pageSize: 5, + }).then(res => { + this.earlyLoading = false + this.earlyWarningData = res.datas; + }).catch(() => { + this.waitLoading = false + }); + }) + + }, + // 璺宠浆 + nav(url) { + this.$router.push(url) + } } }; </script> <style lang="scss" scoped> -.content{ - padding:10px +.content { + padding: 10px } -.box{ - border-radius: 10px; - padding: 20px 0; - align-items: flex-end; + +.to-more { + font-size: 14px; + color: #0d997c; + cursor: pointer; } -.flex{ - display: flex; -} -.flex-between{ - justify-content: space-around; -} -.f-col{ - flex-direction: column; -} -.f-c{ - align-items: center; -} -.f-e{ - align-items: flex-end; -} -.f-s{ - align-items: flex-start; -} -.c-1{ - color: #11AD6F; -} -.c-f{ - color: #FF4B4B; -} -.font-28{ - font-size: 28px; -} -.font-12{ - font-size: 12px; -} -.icon{ - width: 30px; - height: 30px; + +.m-b-10 { margin-bottom: 10px; } -.arrow{ - width: 12px; - height: 12px; -} -.box-card { - margin-top: 10px; + +.top-tb { width: 100%; - border-radius: 10px; - border: none; - .card-title-right { - display: flex; - align-items: center; - align-self: flex-end; - float: right; - } +} + +.total-list { + padding: 15px 0; +} + +.total-item { + width: 19%; + padding: 12px 20px; + border-radius: 4px; + margin-right: 1%; + background-color: #FFFFFF; + border-left: 4px solid #fb6260; +} + +.total-item:last-child { + margin: 0; +} + +.total-num { + font-size: 24px; + font-weight: bold; + margin-right: 3px; } </style> -- Gitblit v1.9.1