From c84b78391bbc6ff68ffb4a1e55ff9b603fa697dc Mon Sep 17 00:00:00 2001
From: 张晓波 <bingbo1993@126.com>
Date: 星期三, 18 十月 2023 14:40:58 +0800
Subject: [PATCH] Merge branch 'master' of http://111.30.93.211:10101/r/supipe
---
web/src/api/modules/report.js | 11
hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/controller/PipeReportController.java | 31 +
web/src/App.vue | 95 ----
web/src/views/DuctpiecePLM/ReportCenter/BearReport.vue | 230 +++++++++++
web/src/api/modules/device.js | 30 +
web/src/views/LayoutIndex/index.vue | 93 ++++
hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/service/impl/PipeReportServiceImpl.java | 48 ++
hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/mapper/PipeReportMapper.java | 28 +
web/src/assets/report_icons.png | 0
web/src/views/EquipmentManage/EquipSpot.vue | 325 ++++++++++++++++
web/src/views/DuctpiecePLM/ReportCenter/DuctReport.vue | 206 ++++++++++
hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/entity/PipeReportEntity.java | 51 ++
web/src/views/LayoutIndex/components/LayoutAside.vue | 6
hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/service/PipeReportService.java | 17
14 files changed, 1,072 insertions(+), 99 deletions(-)
diff --git a/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/controller/PipeReportController.java b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/controller/PipeReportController.java
new file mode 100644
index 0000000..8c4c4af
--- /dev/null
+++ b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/controller/PipeReportController.java
@@ -0,0 +1,31 @@
+package com.thhy.secure.modules.biz.pipereport.controller;
+
+import com.thhy.general.common.BasicResult;
+import com.thhy.secure.modules.biz.pipereport.service.PipeReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Map;
+
+/**
+ * @Author QiuYuHao
+ * @CreateDate 2023-10-17 17:13:01
+ * 管片报表控制层
+ */
+@RestController
+@RequestMapping(value = "szpipereport")
+public class PipeReportController {
+
+ @Autowired
+ private PipeReportService pipeReportService;
+
+ @PostMapping(value = "pipeReport")
+ public BasicResult pipeReport(@RequestBody Map<String,Object> map){
+ return pipeReportService.getPipeReportList(map);
+ }
+
+ @PostMapping(value = "steelReport")
+ public BasicResult steelReport(@RequestBody Map<String,Object> map){
+ return pipeReportService.getSteelReportList(map);
+ }
+}
diff --git a/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/entity/PipeReportEntity.java b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/entity/PipeReportEntity.java
new file mode 100644
index 0000000..e1e48e4
--- /dev/null
+++ b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/entity/PipeReportEntity.java
@@ -0,0 +1,51 @@
+package com.thhy.secure.modules.biz.pipereport.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+
+/**
+ * @Author QiuYuHao
+ * @CreateDate 2023-10-17 17:19:23
+ * 管片报表实体
+ */
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class PipeReportEntity implements Serializable {
+ /**
+ * 项目名称
+ */
+ private String proName;
+ private String proId;
+
+ /**
+ * 生产总数
+ */
+ private Integer produceTotal;
+
+ /**
+ * 合格总数
+ */
+ private Integer qualifiedTotal;
+
+ /**
+ * 未入模数量
+ */
+ private Integer moldedNotNum;
+
+ /**
+ * 入模数量
+ */
+ private Integer moldedNum;
+
+ /**
+ * 发运数量
+ */
+ private Integer shippingNum;
+
+}
diff --git a/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/mapper/PipeReportMapper.java b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/mapper/PipeReportMapper.java
new file mode 100644
index 0000000..65e4a17
--- /dev/null
+++ b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/mapper/PipeReportMapper.java
@@ -0,0 +1,28 @@
+package com.thhy.secure.modules.biz.pipereport.mapper;
+
+import com.thhy.secure.modules.biz.pipereport.entity.PipeReportEntity;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author QiuYuHao
+ * @CreateDate 2023-10-18 8:46:07
+ * 管片、钢筋笼报表mapper
+ */
+@Mapper
+public interface PipeReportMapper {
+
+ /**
+ * 管片生产报表
+ * @return
+ */
+ List<PipeReportEntity> getPipeReportList(Map<String,Object> map);
+
+ /**
+ * 钢筋笼生产报表
+ * @return
+ */
+ List<PipeReportEntity> getSteelReportList(Map<String,Object> map);
+}
diff --git a/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/service/PipeReportService.java b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/service/PipeReportService.java
new file mode 100644
index 0000000..ed1cad7
--- /dev/null
+++ b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/service/PipeReportService.java
@@ -0,0 +1,17 @@
+package com.thhy.secure.modules.biz.pipereport.service;
+
+import com.thhy.general.common.BasicResult;
+
+import java.util.Map;
+
+/**
+ * @Author QiuYuHao
+ * @CreateDate 2023-10-18 9:18:18
+ */
+public interface PipeReportService {
+
+ BasicResult getPipeReportList(Map<String,Object> map);
+
+ BasicResult getSteelReportList(Map<String,Object> map);
+
+}
diff --git a/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/service/impl/PipeReportServiceImpl.java b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/service/impl/PipeReportServiceImpl.java
new file mode 100644
index 0000000..f8fd726
--- /dev/null
+++ b/hd/pipe/secure/src/main/java/com/thhy/secure/modules/biz/pipereport/service/impl/PipeReportServiceImpl.java
@@ -0,0 +1,48 @@
+package com.thhy.secure.modules.biz.pipereport.service.impl;
+
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.thhy.general.common.BasicResult;
+import com.thhy.general.config.SysUserInfo;
+import com.thhy.general.utils.UserInfoUtils;
+import com.thhy.secure.modules.biz.pipereport.entity.PipeReportEntity;
+import com.thhy.secure.modules.biz.pipereport.mapper.PipeReportMapper;
+import com.thhy.secure.modules.biz.pipereport.service.PipeReportService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author QiuYuHao
+ * @CreateDate 2023-10-18 9:22:33
+ * 管片和钢筋笼报表实现
+ */
+@Service
+public class PipeReportServiceImpl implements PipeReportService
+{
+
+ @Autowired
+ private PipeReportMapper pipeReportMapper;
+
+ @Override
+ public BasicResult getPipeReportList(Map<String,Object> map) {
+ SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo();
+ String companyId = sysUserInfo.getCompanyId();
+ map.put("companyId",companyId);
+ PageHelper.startPage((Integer) map.get("pageNum"),(Integer)map.get("pageSize"));
+ List<PipeReportEntity> pipeReportList = pipeReportMapper.getPipeReportList(map);
+ return BasicResult.success(new PageInfo<PipeReportEntity>(pipeReportList));
+ }
+
+ @Override
+ public BasicResult getSteelReportList(Map<String, Object> map) {
+ SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo();
+ String companyId = sysUserInfo.getCompanyId();
+ map.put("companyId",companyId);
+ PageHelper.startPage((Integer) map.get("pageNum"),(Integer)map.get("pageSize"));
+ List<PipeReportEntity> steelReportList = pipeReportMapper.getSteelReportList(map);
+ return BasicResult.success(new PageInfo<PipeReportEntity>(steelReportList));
+ }
+}
diff --git a/web/src/App.vue b/web/src/App.vue
index e7defbc..0b4f5f3 100644
--- a/web/src/App.vue
+++ b/web/src/App.vue
@@ -12,52 +12,14 @@
name: 'App',
data(){
return{
- closeNotify:null,
- timer:null,//定时器
- alarmList:[
- ],//报警信息组
+
}
},
mounted(){
- this.timer = setInterval(()=>{
- this.getAlarmDatas()
- },60000)
+
},
methods:{
- //展示报警信息
- showAlarmTips(){
- const h = this.$createElement
- this.alarmList.forEach((item)=>{
- this.closeNotify =window.setTimeout(()=>{
- this.$notify({
- position: 'bottom-right',
- showClose:true,
- duration:5000,
- dangerouslyUseHTMLString: true,
- message:h("div",{class:"alarm_tips"},[
- h("div",{class:"alarm_tip_header"},[
- h("div",{class:"alarm_tip_text"},'钢筋预警'),
- ]),
- h("div",{class:"alarm_tip_content"},[
- h("div",{class:'alarm_tip_content_text'},`${item.steelName}`),
- h("div",{class:"alarm_tip_content_datas"},'已低于预警库存')
- ]),
- ])
- });
- },0)
- })
- },
- //获取报警数据
- getAlarmDatas(){
- this.$api.Rebar.alarmTipsBear({}).then(res=>{
- if(res.statusMsg =='ok'){
- this.alarmList = res.data
- this.showAlarmTips()
- }else{
- this.$message.warning(res.statusMsg)
- }
- })
- },
+
}
}
</script>
@@ -85,58 +47,7 @@
background: url("./assets/alarm_bg.png") no-repeat;
background-size: 100% 100%;
}
-.alarm_tips{
- display: flex;
- flex-direction: column;
- position: relative;
- line-height: 45px;
- .alarm_tip_header{
- width: 100%;
- display: flex;
- justify-content: space-between;
- position: absolute;
- top: -20px;
-
- .alarm_tip_text{
- color:#fff;
- font-size: 16px;
- margin-left: 10px;
- padding-right:35px;
- position: relative;
- &::before{
- content: "";
- position: absolute;
- top: 14px;
- left: -20px;
- width: 15px;
- height: 15px;
- background: url("./assets/alarm_icons.png") no-repeat;
- background-size: 100% 100%;
- }
- }
- .alarm_tip_time{
- color: #999;
- }
- .alarm_tip_close{
- color: #f42829;
- cursor: pointer;
- }
- }
- .alarm_tip_content{
- display: flex;
- padding-top: 5px;
- .alarm_tip_content_text{
- padding-top: 15px;
- color: #f42829;
- }
- .alarm_tip_content_datas{
- padding-left: 15px;
- padding-top: 15px;
- color: #fff;
- }
- }
-}
.el-form-item {
margin-bottom: 1.5rem;
diff --git a/web/src/api/modules/device.js b/web/src/api/modules/device.js
index a8d580f..43833a5 100644
--- a/web/src/api/modules/device.js
+++ b/web/src/api/modules/device.js
@@ -133,4 +133,34 @@
// 删除设备维修信息
deleteServiceDevice: params =>
axios.get('/engineering/overhaul/overhaulDel', {params}),
+
+ /**
+ * 设备点检
+ */
+ // 查询设备点检列表信息
+ searchSpotCheckList: (params) =>
+ axios({
+ method: 'post',
+ url: '/m/checkDevice/findList',
+ headers: {
+ pageNum: params.pageNum,
+ pageSize: params.pageSize
+ },
+ data: params
+ }),
+ // 添加设备点检信息
+ insertSpotCheckInfo: (params) =>
+ axios.post('m/checkDevice/addCheckDevice', params),
+ // 修改设备点检信息
+ updateSpotCheckInfo: (params) =>
+ axios.post('m/checkDevice/addCheckDevice', params),
+ //删除设备点检信息
+ deleteSpotCheckInfo: (params) =>
+ axios.post('/m/checkDevice/delete', params),
+ // 获取点检详情
+ getSpotCheckDetail: (params) =>
+ axios.post('m/checkDevice/checkDeviceInfo', params),
+ // 获取全部设备信息
+ getAllDeviceData: () =>
+ axios.post('/m/checkDevice/deviceList'),
}
\ No newline at end of file
diff --git a/web/src/api/modules/report.js b/web/src/api/modules/report.js
index 5d8374e..6d67229 100644
--- a/web/src/api/modules/report.js
+++ b/web/src/api/modules/report.js
@@ -10,6 +10,17 @@
searchDieList: params =>
axios.post('/engineering/device/mouldList', params),
+ /**
+ * 钢筋笼生产报表
+ */
+ searchBearsReports: params =>
+ axios.post('/secure/szpipereport/steelReport', params),
+
+ /**
+ * 管片生产报表
+ */
+ searchPipesReports: params =>
+ axios.post('/secure/szpipereport/pipeReport', params),
/**
* 安全考核报表
diff --git a/web/src/assets/report_icons.png b/web/src/assets/report_icons.png
new file mode 100644
index 0000000..25d18b2
--- /dev/null
+++ b/web/src/assets/report_icons.png
Binary files differ
diff --git a/web/src/views/DuctpiecePLM/ReportCenter/BearReport.vue b/web/src/views/DuctpiecePLM/ReportCenter/BearReport.vue
index 0b5e368..bddacd3 100644
--- a/web/src/views/DuctpiecePLM/ReportCenter/BearReport.vue
+++ b/web/src/views/DuctpiecePLM/ReportCenter/BearReport.vue
@@ -1,3 +1,229 @@
<template>
- <div>钢筋笼生产报表</div>
-</template>
\ No newline at end of file
+ <div class="main">
+ <div class="main_header">
+ <!-- <div class="header_item">
+ <span class="header_label">采集时间:</span>
+ <el-date-picker
+ v-model="search.time"
+ type="daterange"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ :default-time="['00:00:00','23:59:59']"
+ range-separator="-"
+ start-placeholder="起始时间"
+ end-placeholder="结束时间">
+ </el-date-picker>
+ </div>
+ <div class="header_item">
+ <el-button :size="size" icon="el-icon-search" v-if="showButton('search')" @click="searchButtonInfo(true)">查询</el-button>
+ <el-button :size="size" icon="el-icon-upload2" v-if="showButton('export')" @click="exportProp">导出Excel</el-button>
+ </div> -->
+ </div>
+ <div class="main_content">
+ <div class="main_cards" v-for="(item,index) in dataList" :key="index">
+ <div class="main_cards_headers">{{item.proName}}</div>
+ <div class="main_cards_numbers">
+ <div class="cards_numbers_rows">
+ <div class="cards_numbers_show" style="margin-right:15px">
+ <div class="numbers_rows_text">生产总数</div>
+ <div class="numbers_rows_datas">{{item.produceTotal}}</div>
+ </div>
+ <div class="cards_numbers_show">
+ <div class="numbers_rows_text">合格总数</div>
+ <div class="numbers_rows_datas">{{item.qualifiedTotal}}</div>
+ </div>
+ </div>
+ <div class="cards_numbers_rows">
+ <div class="cards_numbers_show" style="margin-right:15px">
+ <div class="numbers_rows_text">未入模</div>
+ <div class="numbers_rows_datas">{{item.moldedNotNum}}</div>
+ </div>
+ <div class="cards_numbers_show">
+ <div class="numbers_rows_text">已入模</div>
+ <div class="numbers_rows_datas">{{item.moldedNum}}</div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="main_footer">
+ <!-- <el-pagination
+ background
+ @current-change="changePageNum"
+ @size-change="changePageSize"
+ :current-page="pageNum"
+ :page-sizes="[10, 20, 50, 100]"
+ :page-size="pageSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total">
+ </el-pagination> -->
+ </div>
+ </div>
+</template>
+
+<script>
+import { buttonPinia } from '../../../pinia/index';
+import { changeSize,downFiles } from '../../../plugins/public'; // 导入节流、动态切换组件尺寸方法
+ export default {
+ data() {
+ return {
+ size: changeSize(), // 组件尺寸
+ pageNum: 1,
+ pageSize: 10,
+ search:{},//查询条件
+ total: 0,
+ loading: false,
+ dataList: [], //钢筋笼生产报表列表
+ asyncTitle: true, // 对话框title 新增:true 修改:false
+ asyncVisible: false, // 添加 修改对话框
+ }
+ },
+ watch: {
+ asyncVisible(bol) {
+ if(!bol) {
+ this.ruleForm = {};
+ this.$refs.ruleForm.resetFields();
+ }
+ }
+ },
+ mounted() {
+ const that = this;
+ // 根据窗口大小动态修改组件尺寸
+ window.onresize = () => {
+ that.size = changeSize();
+ }
+ that.searchButtonInfo(true);
+ },
+ methods: {
+ // 查询按钮列表信息
+ searchButtonInfo(bol) {
+ if(bol) {
+ this.pageNum = 1;
+ }
+ let params = Object.assign({},this.search,{
+ pageNum: this.pageNum,
+ pageSize: this.pageSize
+ })
+ this.loading = true;
+ this.$api.Report.searchBearsReports(params).then((res) => {
+ if(res.statusMsg === 'ok') {
+ this.total = res.data.total;
+ this.dataList = res.data.list;
+ }
+ this.loading = false;
+ })
+ },
+ // 转圈圈
+ functionLoading() {
+ this.loadingView = this.$loading({
+ lock: true,
+ text: '请稍后...',
+ spinner: 'el-icon-loading',
+ background: 'rgba(0, 0, 0, 0.7)'
+ });
+ },
+ // 导出按钮信息
+ exportProp() {
+ this.functionLoading();
+ let params = Object.assign({},this.search)
+ params.strTime = this.search.time&&this.search.time[0]
+ params.endTime = this.search.time&&this.search.time[1]
+ delete params.time
+ this.$api.DuctpiecePLM.exportSegmentSteam(params).then(res => {
+ downFiles(res, '管片蒸养信息', 'xls')
+ this.loadingView.close()
+ })
+ .catch(() => {
+ this.loadingView.close();
+ })
+ },
+ // 判断按钮权限信息
+ showButton(str) {
+ const pinia = buttonPinia();
+ return pinia.$state.buttonInfo.includes(str);
+ },
+ // 切换页数
+ changePageNum(page) {
+ this.pageNum = page;
+ this.searchButtonInfo();
+ },
+ // 切换每页条数
+ changePageSize(size) {
+ this.pageSize = size;
+ this.searchButtonInfo();
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+@import '../../../style/layout-main.scss';
+.main_content{
+ display: flex;
+ align-content: flex-start;
+ flex-wrap: wrap;
+ overflow: auto!important;
+ .main_cards{
+ width: 500px;
+ height: 220px;
+ background-color: #031A46;
+ border-radius: 4px;
+ margin: 10px;
+ display: flex;
+ flex-direction: column;
+
+ .main_cards_headers{
+ flex: none;
+ width: 100%;
+ line-height: 50px;
+ position: relative;
+ color: #EBF8F9;
+ font-size: 24px;
+ padding-left: 50px;
+ background-color: #11ACBC;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ &::before{
+ content: "";
+ width: 20px;
+ height: 20px;
+ position: absolute;
+ top: 15px;
+ left: 15px;
+ background: url("../../../assets/report_icons.png") no-repeat;
+ background-size: 100% 100%;
+ }
+
+ }
+ .main_cards_numbers{
+ height: calc(100% - 50px);
+ display: flex;
+ flex-direction: column;
+ justify-content: space-evenly;
+ flex: 1;
+ padding: 15px;
+
+ .cards_numbers_rows{
+ line-height: 40px;
+ display: flex;
+ justify-content: space-around;
+ border-radius: 4px;
+ .cards_numbers_show{
+ width: 50%;
+ display: flex;
+ justify-content: space-around;
+ background-color: #085172;
+ border-radius: 4px;
+ .numbers_rows_text{
+ font-size: 20px;
+ color: #EBF1F3;
+ }
+ .numbers_rows_datas{
+ font-size: 24px;
+ color: #18F7F9;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/web/src/views/DuctpiecePLM/ReportCenter/DuctReport.vue b/web/src/views/DuctpiecePLM/ReportCenter/DuctReport.vue
index d409c58..b16145e 100644
--- a/web/src/views/DuctpiecePLM/ReportCenter/DuctReport.vue
+++ b/web/src/views/DuctpiecePLM/ReportCenter/DuctReport.vue
@@ -1,3 +1,205 @@
<template>
- <div>管片生产报表</div>
-</template>
\ No newline at end of file
+ <div class="main">
+ <div class="main_header">
+ <!-- <div class="header_item">
+ <span class="header_label">采集时间:</span>
+ <el-date-picker
+ v-model="search.time"
+ type="daterange"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ :default-time="['00:00:00','23:59:59']"
+ range-separator="-"
+ start-placeholder="起始时间"
+ end-placeholder="结束时间">
+ </el-date-picker>
+ </div>
+ <div class="header_item">
+ <el-button :size="size" icon="el-icon-search" v-if="showButton('search')" @click="searchButtonInfo(true)">查询</el-button>
+ <el-button :size="size" icon="el-icon-upload2" v-if="showButton('export')" @click="exportProp">导出Excel</el-button>
+ </div> -->
+ </div>
+ <div class="main_content">
+ <div class="main_cards" v-for="(item,index) in dataList" :key="index">
+ <div class="main_cards_headers">{{item.proName}}</div>
+ <div class="main_cards_numbers">
+ <div class="cards_numbers_rows">
+ <div class="cards_numbers_show" style="margin-right:15px">
+ <div class="numbers_rows_text">生产总数</div>
+ <div class="numbers_rows_datas">{{item.produceTotal}}</div>
+ </div>
+ <div class="cards_numbers_show">
+ <div class="numbers_rows_text">合格总数</div>
+ <div class="numbers_rows_datas">{{item.qualifiedTotal}}</div>
+ </div>
+ </div>
+ <div class="cards_numbers_rows">
+ <div class="cards_numbers_show" style="margin-right:15px">
+ <div class="numbers_rows_text">已发运数</div>
+ <div class="numbers_rows_datas">{{item.shippingNum}}</div>
+ </div>
+ <div class="cards_numbers_show" style="background:none">
+ <div class="numbers_rows_text"></div>
+ <div class="numbers_rows_datas"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+ <div class="main_footer">
+ <!-- <el-pagination
+ background
+ @current-change="changePageNum"
+ @size-change="changePageSize"
+ :current-page="pageNum"
+ :page-sizes="[10, 20, 50, 100]"
+ :page-size="pageSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total">
+ </el-pagination> -->
+ </div>
+ </div>
+</template>
+
+<script>
+import { buttonPinia } from '../../../pinia/index';
+import { changeSize } from '../../../plugins/public'; // 导入节流、动态切换组件尺寸方法
+ export default {
+ data() {
+ return {
+ size: changeSize(), // 组件尺寸
+ pageNum: 1,
+ pageSize: 10,
+ search:{},//查询条件
+ total: 0,
+ loading: false,
+ dataList: [], //管片生产报表列表
+ asyncTitle: true, // 对话框title 新增:true 修改:false
+ asyncVisible: false, // 添加 修改对话框
+ }
+ },
+ watch: {
+ asyncVisible(bol) {
+ if(!bol) {
+ this.ruleForm = {};
+ this.$refs.ruleForm.resetFields();
+ }
+ }
+ },
+ mounted() {
+ const that = this;
+ // 根据窗口大小动态修改组件尺寸
+ window.onresize = () => {
+ that.size = changeSize();
+ }
+ that.searchButtonInfo(true);
+ },
+ methods: {
+ // 查询按钮列表信息
+ searchButtonInfo(bol) {
+ if(bol) {
+ this.pageNum = 1;
+ }
+ let params = Object.assign({},this.search,{
+ pageNum: this.pageNum,
+ pageSize: this.pageSize
+ })
+ this.loading = true;
+ this.$api.Report.searchPipesReports(params).then((res) => {
+ if(res.statusMsg === 'ok') {
+ this.total = res.data.total;
+ this.dataList = res.data.list;
+ }
+ this.loading = false;
+ })
+ },
+ // 判断按钮权限信息
+ showButton(str) {
+ const pinia = buttonPinia();
+ return pinia.$state.buttonInfo.includes(str);
+ },
+ // 切换页数
+ changePageNum(page) {
+ this.pageNum = page;
+ this.searchButtonInfo();
+ },
+ // 切换每页条数
+ changePageSize(size) {
+ this.pageSize = size;
+ this.searchButtonInfo();
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+@import '../../../style/layout-main.scss';
+.main_content{
+ display: flex;
+ align-content: flex-start;
+ flex-wrap: wrap;
+ overflow: auto!important;
+ .main_cards{
+ width: 500px;
+ height: 220px;
+ background-color: #031A46;
+ border-radius: 4px;
+ margin: 10px;
+ display: flex;
+ flex-direction: column;
+
+ .main_cards_headers{
+ flex: none;
+ width: 100%;
+ line-height: 50px;
+ position: relative;
+ color: #EBF8F9;
+ font-size: 24px;
+ padding-left: 50px;
+ background-color: #11ACBC;
+ border-top-left-radius: 4px;
+ border-top-right-radius: 4px;
+ &::before{
+ content: "";
+ width: 20px;
+ height: 20px;
+ position: absolute;
+ top: 15px;
+ left: 15px;
+ background: url("../../../assets/report_icons.png") no-repeat;
+ background-size: 100% 100%;
+ }
+
+ }
+ .main_cards_numbers{
+ height: calc(100% - 50px);
+ display: flex;
+ flex-direction: column;
+ justify-content: space-evenly;
+ flex: 1;
+ padding: 15px;
+
+ .cards_numbers_rows{
+ line-height: 40px;
+ display: flex;
+ justify-content: space-around;
+ border-radius: 4px;
+ .cards_numbers_show{
+ width: 50%;
+ display: flex;
+ justify-content: space-around;
+ background-color: #085172;
+ border-radius: 4px;
+ .numbers_rows_text{
+ font-size: 20px;
+ color: #EBF1F3;
+ }
+ .numbers_rows_datas{
+ font-size: 24px;
+ color: #18F7F9;
+ }
+ }
+ }
+ }
+ }
+}
+</style>
\ No newline at end of file
diff --git a/web/src/views/EquipmentManage/EquipSpot.vue b/web/src/views/EquipmentManage/EquipSpot.vue
index 5058d0b..c4742f6 100644
--- a/web/src/views/EquipmentManage/EquipSpot.vue
+++ b/web/src/views/EquipmentManage/EquipSpot.vue
@@ -1,3 +1,324 @@
<template>
- <div>设备点检</div>
-</template>
\ No newline at end of file
+ <div class="main">
+ <div class="main_header">
+ <div class="header_item">
+ <span class="header_label">设备编号:</span>
+ <el-input v-model="bigDeviceName" clearable placeholder="请输入设备编号"></el-input>
+ </div>
+ <div class="header_item">
+ <span class="header_label">点检日期:</span>
+ <el-date-picker
+ v-model="timeData"
+ type="daterange"
+ value-format="yyyy-MM-dd"
+ range-separator="至"
+ start-placeholder="开始日期"
+ end-placeholder="结束日期">
+ </el-date-picker>
+ </div>
+ <div class="header_item">
+ <el-button icon="el-icon-search" v-if="showButton('search')" @click="searchSpotCheckList(true)">查询</el-button>
+ <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('insert')" @click="propInsert()">新增</el-button>
+ </div>
+ </div>
+ <div class="main_content">
+ <el-table
+ v-loading="loading"
+ :data="spotCheckList"
+ height="100%">
+ <el-table-column label="序号" align="center" >
+ <template #default="scope">
+ <div>
+ <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span>
+ </div>
+ </template>
+ </el-table-column>
+ <el-table-column prop="bigDeviceName" label="设备名称" align="center" ></el-table-column>
+ <el-table-column prop="bigDeviceModel" label="规格型号" align="center" ></el-table-column>
+ <el-table-column prop="bigNumber" label="设备编号" align="center" show-overflow-tooltip></el-table-column>
+ <el-table-column prop="bigTypeStr" label="设备类型" align="center" ></el-table-column>
+ <el-table-column prop="checkTime" label="点检时间" align="center" ></el-table-column>
+ <el-table-column prop="checkTypeName" label="点检类型" align="center" ></el-table-column>
+ <el-table-column prop="adminUserName" label="责任人" align="center" ></el-table-column>
+ <el-table-column prop="adminUserPhone" label="责任人电话" align="center" ></el-table-column>
+ <el-table-column prop="checkContent" show-overflow-tooltip label="点检内容及结果" align="center" ></el-table-column>
+ <el-table-column label="操作" align="center" >
+ <template #default="{ row }">
+ <el-button class="table_btn" size="mini" v-if="showButton('update')" @click="updateProp(row)">修改</el-button>
+ <el-button class="delete_btn" size="mini" v-if="showButton('delete')" @click="deleteInfo(row)">删除</el-button>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <div class="main_footer">
+ <el-pagination
+ background
+ @current-change="changePageNum"
+ @size-change="changePageSize"
+ :current-page="pageNum"
+ :page-sizes="[10, 20, 50, 100]"
+ :page-size="pageSize"
+ layout="total, sizes, prev, pager, next, jumper"
+ :total="total">
+ </el-pagination>
+ </div>
+ <!-- 新增 修改 -->
+ <el-dialog
+ class="prop_dialog"
+ :title="asyncTitle ? '新增点检' : '修改点检信息'"
+ :visible.sync="asyncSpot"
+ width="35%">
+ <el-form ref="form" :model="formSpot" :rules="rulesSpot" label-width="auto" class="rule_form">
+ <el-form-item label="设备名称:" prop="deviceId">
+ <el-select v-model="formSpot.deviceId" clearable placeholder="请选择设备" @change="selectDevice">
+ <el-option
+ v-for="item in deviceData"
+ :key="item.bigDeviceId"
+ :label="item.bigDeviceName"
+ :value="item.bigDeviceId">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="规格型号:" prop="bigDeviceModel">
+ <el-input v-model="formSpot.bigDeviceModel" disabled placeholder="请输入规格型号"></el-input>
+ </el-form-item>
+ <el-form-item label="设备编号:" prop="bigNumber">
+ <el-input v-model="formSpot.bigNumber" disabled placeholder="请输入设备编号"></el-input>
+ </el-form-item>
+ <el-form-item label="设备类型:" prop="bigTypeName">
+ <el-input v-model="formSpot.bigTypeName" disabled placeholder="请输入设备类型"></el-input>
+ </el-form-item>
+ <el-form-item label="开始时间:" prop="checkTime">
+ <el-date-picker
+ v-model="formSpot.checkTime"
+ type="datetime"
+ value-format="yyyy-MM-dd HH:mm:ss"
+ placeholder="请选择开始时间">
+ </el-date-picker>
+ </el-form-item>
+ <el-form-item label="点检类型:" prop="checkType">
+ <el-select v-model="formSpot.checkType" clearable placeholder="请选择点检类型">
+ <el-option
+ v-for="item in checkTypeData"
+ :key="item.dictId"
+ :label="item.dictName"
+ :value="item.dictId">
+ </el-option>
+ </el-select>
+ </el-form-item>
+ <el-form-item label="点检内容及结果:" prop="checkContent">
+ <el-input
+ type="textarea"
+ v-model="formSpot.checkContent"
+ clearable
+ placeholder="请输入点检内容及结果">
+ </el-input>
+ </el-form-item>
+ </el-form>
+ <div slot="footer">
+ <el-button @click="asyncSpot = false">取 消</el-button>
+ <el-button class="submit_btn" @click="asyncTitle ? submitInsertForm() : submitUpdateForm()">提 交</el-button>
+ </div>
+ </el-dialog>
+ </div>
+</template>
+
+<script>
+import { buttonPinia } from '../../pinia';
+import { throttle } from '../../plugins/public';
+ export default {
+ data() {
+ return {
+ bigDeviceName: '',
+ timeData: '',
+ pageNum: 1,
+ pageSize: 10,
+ total: 0,
+ loading: false,
+ spotCheckList: [],
+ asyncTitle: true, // true 新增 false 修改
+ asyncSpot: false,
+ formSpot: {},
+ rulesSpot: {
+ deviceId: [{
+ required: true,
+ message: '请选择设备',
+ trigger: ['blur', 'change']
+ }]
+ },
+ deviceData: [],
+ checkTypeData: []
+ }
+ },
+ mounted() {
+ this.searchSpotCheckList(true);
+ },
+ methods: {
+ // 获取全部设备信息
+ async getAllDeviceData() {
+ const { data } = await this.$api.Device.getAllDeviceData();
+ this.deviceData = data;
+ },
+ // 获取点检类型
+ async getChackAllTypes(){
+ const { data } = await this.$api.Dictionary.searchDictionary({
+ pageNum: 1,
+ pageSize: 100000000,
+ dictType: 'check_type'
+ });
+ this.checkTypeData = data.list;
+ },
+ // 查询设备点检列表信息
+ searchSpotCheckList(bol) {
+ if(bol) {
+ this.pageNum = 1;
+ }
+ this.loading = true;
+ this.spotCheckList = [];
+ this.$api.Device.searchSpotCheckList({
+ pageNum: this.pageNum,
+ pageSize: this.pageSize,
+ startTime: this.timeData ? this.timeData[0] : '',
+ endTime: this.timeData ? this.timeData[1] : ''
+ }).then(res => {
+ if(res.success) {
+ this.total = res.data.total;
+ this.spotCheckList = res.data.list;
+ }
+ this.loading = false;
+ }).catch(() => {
+ this.loading = false;
+ })
+ },
+ // 打开添加
+ propInsert() {
+ this.asyncTitle = true;
+ this.asyncSpot = true;
+ },
+ // 选择设备获取设备信息
+ selectDevice(data) {
+ this.$set(this.formSpot, 'bigDeviceModel', '');
+ this.$set(this.formSpot, 'bigNumber', '');
+ this.$set(this.formSpot, 'bigTypeName', '');
+ if(!data) return;
+ this.$api.Device.detailsBigDevice({
+ bigDeviceId: data
+ }).then(res => {
+ this.$set(this.formSpot, 'bigDeviceModel', res.data.bigDeviceModel);
+ this.$set(this.formSpot, 'bigNumber', res.data.bigNumber);
+ this.$set(this.formSpot, 'bigTypeName', res.data.bigTypeName);
+ })
+ },
+ // 打开修改信息
+ updateProp(row) {
+ this.$api.Device.getSpotCheckDetail({
+ id: row.id
+ }).then((res) => {
+ this.selectDevice(res.data.deviceId);
+ this.$set(this.formSpot, 'id', res.data.id);
+ this.$set(this.formSpot, 'deviceId', res.data.deviceId);
+ this.$set(this.formSpot, 'checkTime', res.data.checkTime);
+ this.$set(this.formSpot, 'checkType', res.data.checkType);
+ this.$set(this.formSpot, 'checkContent', res.data.checkContent);
+ });
+ this.asyncTitle = false;
+ this.asyncSpot = true;
+ },
+ // 删除设备点检信息
+ deleteInfo(row) {
+ this.$confirm("该操作将删除该点检信息,是否继续删除?", "提示", {
+ confirmButtonText: "确定",
+ cancelButtonText: "取消",
+ type: "warning"
+ })
+ .then(() => {
+ this.$api.Device.deleteSpotCheckInfo({id: row.id})
+ .then(res => {
+ if(res.statusMsg === 'ok') {
+ this.searchSpotCheckList(true);
+ this.$message.success("删除成功!");
+ } else {
+ this.$message.warning(res.statusMsg);
+ }
+ })
+ })
+ .catch(() => {
+ this.$message.warning("您已取消");
+ })
+ },
+ // 提交添加信息
+ submitInsertForm: throttle(function() {
+ this.$refs.form.validate((valid) => {
+ if(valid) {
+ const params = {};
+ params.deviceId = this.formSpot.deviceId;
+ params.checkTime = this.formSpot.checkTime;
+ params.checkType = this.formSpot.checkType;
+ params.checkContent = this.formSpot.checkContent;
+ params.fileList = [];
+ this.$api.Device.insertSpotCheckInfo(params).then(res => {
+ if(res.success) {
+ this.asyncSpot = false;
+ this.searchSpotCheckList(true);
+ this.$message.success('添加成功!');
+ } else {
+ this.$message.warning(res.statusMsg);
+ }
+ })
+ }
+ })
+ }, 3000),
+ // 提交添加信息
+ submitUpdateForm: throttle(function() {
+ this.$refs.form.validate((valid) => {
+ if(valid) {
+ const params = {};
+ params.id = this.formSpot.id;
+ params.deviceId = this.formSpot.deviceId;
+ params.checkTime = this.formSpot.checkTime;
+ params.checkType = this.formSpot.checkType;
+ params.checkContent = this.formSpot.checkContent;
+ params.fileList = [];
+ this.$api.Device.updateSpotCheckInfo(params).then(res => {
+ if(res.success) {
+ this.asyncSpot = false;
+ this.searchSpotCheckList(true);
+ this.$message.success('修改成功!');
+ } else {
+ this.$message.warning(res.statusMsg);
+ }
+ })
+ }
+ })
+ }, 3000),
+ // 判断按钮权限信息
+ showButton(str) {
+ const pinia = buttonPinia();
+ return pinia.$state.buttonInfo.includes(str);
+ },
+ // 切换页数
+ changePageNum(page) {
+ this.pageNum = page;
+ },
+ // 切换每页条数
+ changePageSize(size) {
+ this.pageSize = size;
+ }
+ },
+ watch: {
+ asyncSpot(bol) {
+ if(bol) {
+ this.getAllDeviceData();
+ this.getChackAllTypes();
+ } else {
+ this.formSpot = {};
+ this.$refs.form.resetFields();
+ }
+ }
+ }
+ }
+</script>
+
+<style lang="scss" scoped>
+@import '@/style/layout-main.scss';
+</style>
\ No newline at end of file
diff --git a/web/src/views/LayoutIndex/components/LayoutAside.vue b/web/src/views/LayoutIndex/components/LayoutAside.vue
index 3ed7255..8d29a32 100644
--- a/web/src/views/LayoutIndex/components/LayoutAside.vue
+++ b/web/src/views/LayoutIndex/components/LayoutAside.vue
@@ -21,7 +21,7 @@
<template v-for="three in item.children">
<template v-if="three.children && three.children.length > 1">
- <el-submenu :key="three.name" :index="three.path">
+ <el-submenu :key="three.name" :index="three.path" class="titles_two">
<template slot="title">
<span>{{three.meta.title}}</span>
</template>
@@ -117,6 +117,10 @@
}
}
+.titles_two{
+ padding-left: 15px;
+}
+
/deep/ .el-menu {
border-right: 0;
}
diff --git a/web/src/views/LayoutIndex/index.vue b/web/src/views/LayoutIndex/index.vue
index b137c47..2dd17a2 100644
--- a/web/src/views/LayoutIndex/index.vue
+++ b/web/src/views/LayoutIndex/index.vue
@@ -98,6 +98,10 @@
}
};
return {
+ closeNotify:null,
+ timer:null,//定时器
+ alarmList:[
+ ],//报警信息组
size: changeSize(),
realName:sessionStorage.getItem('realName'),
asyncPassword: false, // 修改密码
@@ -129,8 +133,45 @@
meta: item.meta
}
})
+ this.timer = setInterval(()=>{
+ this.getAlarmDatas()
+ },60000)
},
methods: {
+ //展示报警信息
+ showAlarmTips(){
+ const h = this.$createElement
+ this.alarmList.forEach((item)=>{
+ this.closeNotify =window.setTimeout(()=>{
+ this.$notify({
+ position: 'bottom-right',
+ showClose:true,
+ duration:5000,
+ dangerouslyUseHTMLString: true,
+ message:h("div",{class:"alarm_tips"},[
+ h("div",{class:"alarm_tip_header"},[
+ h("div",{class:"alarm_tip_text"},'钢筋预警'),
+ ]),
+ h("div",{class:"alarm_tip_content"},[
+ h("div",{class:'alarm_tip_content_text'},`${item.steelName}`),
+ h("div",{class:"alarm_tip_content_datas"},'已低于预警库存')
+ ]),
+ ])
+ });
+ },0)
+ })
+ },
+ //获取报警数据
+ getAlarmDatas(){
+ this.$api.Rebar.alarmTipsBear({}).then(res=>{
+ if(res.statusMsg =='ok'){
+ this.alarmList = res.data
+ this.showAlarmTips()
+ }else{
+ this.$message.warning(res.statusMsg)
+ }
+ })
+ },
// 退出登录
quitSystem(val) {
if(val === 'logout'){
@@ -190,6 +231,58 @@
<style lang="scss" scoped>
@import '../../style/layout-main.scss';
+.alarm_tips{
+ display: flex;
+ flex-direction: column;
+ position: relative;
+ line-height: 45px;
+
+ .alarm_tip_header{
+ width: 100%;
+ display: flex;
+ justify-content: space-between;
+ position: absolute;
+ top: -20px;
+
+ .alarm_tip_text{
+ color:#fff;
+ font-size: 16px;
+ margin-left: 10px;
+ padding-right:35px;
+ position: relative;
+ &::before{
+ content: "";
+ position: absolute;
+ top: 14px;
+ left: -20px;
+ width: 15px;
+ height: 15px;
+ background: url("../../assets/alarm_icons.png") no-repeat;
+ background-size: 100% 100%;
+ }
+ }
+ .alarm_tip_time{
+ color: #999;
+ }
+ .alarm_tip_close{
+ color: #f42829;
+ cursor: pointer;
+ }
+ }
+ .alarm_tip_content{
+ display: flex;
+ padding-top: 5px;
+ .alarm_tip_content_text{
+ padding-top: 15px;
+ color: #f42829;
+ }
+ .alarm_tip_content_datas{
+ padding-left: 15px;
+ padding-top: 15px;
+ color: #fff;
+ }
+ }
+}
.layout {
width: 100%;
height: 100%;
--
Gitblit v1.9.3