Browse Source

feat(pssr): 新增PSSR模板选择和开车时间字段

- 在PSSR新增界面添加模板选择下拉框和预计开车时间日期选择器
- 验证预计开车时间为必填字段-优化子表数据查询逻辑,避免空指针异常- 升级ECharts版本以支持新特性
- 添加LDPE和EOEG两个新的首页模块
- 注释掉锁页面的导入按钮及相关布局
- 移除TPssrAboveall实体中的drivingTime设置逻辑
- 引入CollectionUtils工具类用于集合判空处理
jiangbiao 2 months ago
parent
commit
3f6ef80bf4

+ 61 - 57
master/src/main/java/com/ruoyi/project/pssr/controller/TPssrAboveallController.java

@@ -21,6 +21,7 @@ import com.ruoyi.project.system.domain.SysMessage;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.service.ISysMessageService;
 import com.ruoyi.project.system.service.ISysUserService;
+import org.apache.commons.collections4.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
@@ -270,7 +271,7 @@ public class TPssrAboveallController extends BaseController {
             tPssrAboveall.setUnit(aboveall.getUnit());
             tPssrAboveall.setRegion(aboveall.getRegion());
             tPssrAboveall.setId(null);
-            tPssrAboveall.setDrivingTime(aboveall.getDrivingTime());
+//            tPssrAboveall.setDrivingTime(aboveall.getDrivingTime());
             tPssrAboveall.setIncludePublic(aboveall.getIncludePublic());
         }
         if (tPssrAboveall.getIncludePublic() == 1) {
@@ -591,62 +592,65 @@ public class TPssrAboveallController extends BaseController {
             TPssrSubcontent sub = new TPssrSubcontent();
             sub.setAboveallId(newData.getId());
             sub.setForShort(oldSub.getForShort());
-            TPssrSubcontent newSub = tPssrSubcontentService.selectTPssrSubcontentList(sub).get(0);
-            switch (oldSub.getForShort()) {
-                case "jxxm":
-                    genJxxm(oldSub, newSub, userId);
-                    break;
-                case "kgfa":
-                    genKgfa(oldSub, newSub, userId);
-                    break;
-                case "sjbg":
-                    genSjgb(oldSub, newSub, userId);
-                    break;
-                case "mb":
-                    genMb(oldSub, newSub, userId);
-                    break;
-                case "sbqjd":
-                    genSbqjd(oldSub, newSub, userId);
-                    break;
-                case "qm":
-                    genQm(oldSub, newSub, userId);
-                    break;
-                case "sksgfmzt":
-                    genSksgfmzt(oldSub, newSub, userId);
-                    break;
-                case "sys":
-                    genSys(oldSub, newSub, userId);
-                    break;
-                case "dj":
-                    genDj(oldSub, newSub, userId);
-                    break;
-                case "dqzh":
-                    genDqzh(oldSub, newSub, userId);
-                    break;
-                case "aqss":
-                    genAqss(oldSub, newSub, userId);
-                    break;
-                case "jb":
-                    genJb(oldSub, newSub, userId);
-                    break;
-                case "ybjy":
-                    genYbjy(oldSub, newSub, userId);
-                    break;
-                case "yblscs":
-                    genYblscs(oldSub, newSub, userId);
-                    break;
-                case "bjlszqr":
-                    genBjlszqr(oldSub, newSub, userId);
-                    break;
-                case "djsb":
-                    genDjsb(oldSub, newSub, userId);
-                    break;
-                case "qtjcy":
-                    genQtjcy(oldSub, newSub, userId);
-                    break;
-                case "zxfxy":
-                    genZxfxy(oldSub, newSub, userId);
-                    break;
+            List<TPssrSubcontent> tPssrSubcontents = tPssrSubcontentService.selectTPssrSubcontentList(sub);
+            if (CollectionUtils.isNotEmpty(tPssrSubcontents)) {
+                TPssrSubcontent newSub = tPssrSubcontents.get(0);
+                switch (oldSub.getForShort()) {
+                    case "jxxm":
+                        genJxxm(oldSub, newSub, userId);
+                        break;
+                    case "kgfa":
+                        genKgfa(oldSub, newSub, userId);
+                        break;
+                    case "sjbg":
+                        genSjgb(oldSub, newSub, userId);
+                        break;
+                    case "mb":
+                        genMb(oldSub, newSub, userId);
+                        break;
+                    case "sbqjd":
+                        genSbqjd(oldSub, newSub, userId);
+                        break;
+                    case "qm":
+                        genQm(oldSub, newSub, userId);
+                        break;
+                    case "sksgfmzt":
+                        genSksgfmzt(oldSub, newSub, userId);
+                        break;
+                    case "sys":
+                        genSys(oldSub, newSub, userId);
+                        break;
+                    case "dj":
+                        genDj(oldSub, newSub, userId);
+                        break;
+                    case "dqzh":
+                        genDqzh(oldSub, newSub, userId);
+                        break;
+                    case "aqss":
+                        genAqss(oldSub, newSub, userId);
+                        break;
+                    case "jb":
+                        genJb(oldSub, newSub, userId);
+                        break;
+                    case "ybjy":
+                        genYbjy(oldSub, newSub, userId);
+                        break;
+                    case "yblscs":
+                        genYblscs(oldSub, newSub, userId);
+                        break;
+                    case "bjlszqr":
+                        genBjlszqr(oldSub, newSub, userId);
+                        break;
+                    case "djsb":
+                        genDjsb(oldSub, newSub, userId);
+                        break;
+                    case "qtjcy":
+                        genQtjcy(oldSub, newSub, userId);
+                        break;
+                    case "zxfxy":
+                        genZxfxy(oldSub, newSub, userId);
+                        break;
+                }
             }
         }
 //        }, "新增模板子表数据").start();

+ 1 - 1
ui/package.json

@@ -59,7 +59,7 @@
     "clipboard": "2.0.4",
     "core-js": "3.6.5",
     "dayjs": "^1.10.6",
-    "echarts": "4.2.1",
+    "echarts": "^6.0.0",
     "echarts-liquidfill": "^3.1.0",
     "element-ui": "2.15.8",
     "file-saver": "2.0.1",

+ 190 - 0
ui/src/views/dashboard/ldpe/PanelGroup.vue

@@ -0,0 +1,190 @@
+<template>
+  <el-row :gutter="40" class="panel-group">
+    <el-col :lg="6" :sm="12" :xs="12" class="card-panel-col">
+      <div class="card-panel">
+        <div class="card-panel-icon-wrapper icon-people">
+          <svg-icon class-name="card-panel-icon" icon-class="dev"/>
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            总设备数
+          </div>
+          <count-to :duration="3000" :end-val="devNum" :start-val="0" class="card-panel-num"/>
+        </div>
+      </div>
+    </el-col>
+    <el-col :lg="6" :sm="12" :xs="12" class="card-panel-col">
+      <div class="card-panel">
+        <div class="card-panel-icon-wrapper icon-message">
+          <svg-icon class-name="card-panel-icon" icon-class="uncheck"/>
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            本月未完成计划
+          </div>
+          <count-to :duration="3000" :end-val="uncheckPlanNum" :start-val="0" class="card-panel-num"/>
+        </div>
+      </div>
+    </el-col>
+    <el-col :lg="6" :sm="12" :xs="12" class="card-panel-col">
+      <div class="card-panel">
+        <div class="card-panel-icon-wrapper icon-money">
+          <svg-icon class-name="card-panel-icon" icon-class="checked"/>
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            本月已完成计划
+          </div>
+          <count-to :duration="3000" :end-val="checkedPlanNum" :start-val="0" class="card-panel-num"/>
+        </div>
+      </div>
+    </el-col>
+    <el-col :lg="6" :sm="12" :xs="12" class="card-panel-col">
+      <div class="card-panel">
+        <div class="card-panel-icon-wrapper icon-shopping">
+          <svg-icon class-name="card-panel-icon" icon-class="issue"/>
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            未处理问题数量
+          </div>
+          <count-to :duration="3000" :end-val="issueNum" :start-val="0" class="card-panel-num"/>
+        </div>
+      </div>
+    </el-col>
+  </el-row>
+</template>
+
+<script>
+import CountTo from 'vue-count-to'
+
+export default {
+  components: {
+    CountTo
+  },
+  data() {
+    return {
+      devNum: 0,
+      uncheckPlanNum: 0,
+      checkedPlanNum: 0,
+      issueNum: 0,
+    }
+  },
+  created() {
+      this.devNum = 1000;
+      this.uncheckPlanNum = 1000;
+      this.checkedPlanNum = 1000;
+      this.issueNum = 1000;
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.panel-group {
+  margin-top: 18px;
+
+  .card-panel-col {
+    margin-bottom: 32px;
+  }
+
+  .card-panel {
+    height: 108px;
+    cursor: pointer;
+    font-size: 12px;
+    position: relative;
+    overflow: hidden;
+    color: #666;
+    background: #fff;
+    box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
+    border-color: rgba(0, 0, 0, .05);
+
+    &:hover {
+      .card-panel-icon-wrapper {
+        color: #fff;
+      }
+
+      .icon-people {
+        background: #40c9c6;
+      }
+
+      .icon-message {
+        background: #36a3f7;
+      }
+
+      .icon-money {
+        background: #f4516c;
+      }
+
+      .icon-shopping {
+        background: #34bfa3
+      }
+    }
+
+    .icon-people {
+      color: #40c9c6;
+    }
+
+    .icon-message {
+      color: #36a3f7;
+    }
+
+    .icon-money {
+      color: #f4516c;
+    }
+
+    .icon-shopping {
+      color: #34bfa3
+    }
+
+    .card-panel-icon-wrapper {
+      float: left;
+      margin: 14px 0 0 14px;
+      padding: 16px;
+      transition: all 0.38s ease-out;
+      border-radius: 6px;
+    }
+
+    .card-panel-icon {
+      float: left;
+      font-size: 48px;
+    }
+
+    .card-panel-description {
+      float: right;
+      font-weight: bold;
+      margin: 26px;
+      margin-left: 0px;
+
+      .card-panel-text {
+        line-height: 18px;
+        color: rgba(0, 0, 0, 0.45);
+        font-size: 16px;
+        margin-bottom: 12px;
+      }
+
+      .card-panel-num {
+        font-size: 20px;
+      }
+    }
+  }
+}
+
+@media (max-width: 550px) {
+  .card-panel-description {
+    display: none;
+  }
+
+  .card-panel-icon-wrapper {
+    float: none !important;
+    width: 100%;
+    height: 100%;
+    margin: 0 !important;
+
+    .svg-icon {
+      display: block;
+      margin: 14px auto !important;
+      float: none !important;
+    }
+  }
+}
+</style>

+ 97 - 0
ui/src/views/dashboard/ldpe/PieChart.vue

@@ -0,0 +1,97 @@
+<template>
+    <div  :style="{height:height,width:width,borderRadius:'10px'}"/>
+</template>
+
+<script>
+import * as echarts from 'echarts';
+import resize from "@/views/patrol/home/dashboard/mixins/resize";
+
+require('echarts/theme/macarons') // echarts theme
+
+export default {
+  name: "PieChart",
+  mixins: [resize],
+  props: {
+    className: {
+      type: String,
+      default: 'chart'
+    },
+    width: {
+      type: String,
+      default: '100%'
+    },
+    height: {
+      type: String,
+      default: '610px'
+    }
+  },
+  data() {
+    return {
+      chart: null
+    }
+  },
+  mounted() {
+    this.initChart();
+  },
+  beforeDestroy() {
+    if (!this.chart) {
+      return
+    }
+    this.chart.dispose()
+    this.chart = null
+  },
+  methods: {
+    initChart() {// 在项目中运行以下代码,查看控制台输出
+      console.log('ECharts version:', echarts.version);
+      this.chart = echarts.init(this.$el, 'macarons')
+
+      this.chart.setOption({
+        tooltip: {
+          trigger: 'item'
+        },
+        legend: {
+          top: '5%',
+          left: 'center'
+        },
+        series: [
+          {
+            name: 'Access From',
+            type: 'pie',
+            radius: ['40%', '70%'],
+            avoidLabelOverlap: false,
+            padAngle: 5,
+            itemStyle: {
+              borderRadius: 10
+            },
+            label: {
+              show: false,
+              position: 'center'
+            },
+            emphasis: {
+              label: {
+                show: true,
+                fontSize: 40,
+                fontWeight: 'bold'
+              }
+            },
+            labelLine: {
+              show: false
+            },
+            data: [
+              { value: 1048, name: 'Search Engine' },
+              { value: 735, name: 'Direct' },
+              { value: 580, name: 'Email' },
+              { value: 484, name: 'Union Ads' },
+              { value: 300, name: 'Video Ads' }
+            ]
+          }
+        ]
+      })
+    }
+
+  }
+};
+</script>
+
+<style scoped>
+</style>

+ 31 - 0
ui/src/views/dashboard/ldpe/TableChart.vue

@@ -0,0 +1,31 @@
+<template>
+  <div :style="{height:height,width:width}">
+    <h3>******</h3>
+    <div class="text-container">
+      <el-table border>
+
+      </el-table>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  name: 'tableChart',
+  props: {
+    height: {
+      type: String,
+      default: '610px'
+    },
+    width: {
+      type: String,
+      default: '100%'
+    }
+  },
+  data() {
+    return {
+    }
+  },
+  mounted() {
+  }
+}
+</script>

+ 31 - 0
ui/src/views/dashboard/ldpe/pending.vue

@@ -0,0 +1,31 @@
+<template>
+  <div :style="{height:height,width:width}">
+    <h3>我的待办</h3>
+    <div class="text-container">
+      <el-table border>
+
+      </el-table>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  name: 'pendingChart',
+  props: {
+    height: {
+      type: String,
+      default: '610px'
+    },
+    width: {
+      type: String,
+      default: '100%'
+    }
+  },
+  data() {
+    return {
+    }
+  },
+  mounted() {
+  }
+}
+</script>

+ 191 - 0
ui/src/views/eoeg/home/dashboard/PanelGroup.vue

@@ -0,0 +1,191 @@
+<template>
+  <el-row :gutter="40" class="panel-group">
+    <el-col :lg="6" :sm="12" :xs="12" class="card-panel-col">
+      <div class="card-panel">
+        <div class="card-panel-icon-wrapper icon-people">
+          <svg-icon class-name="card-panel-icon" icon-class="dev"/>
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            总设备数
+          </div>
+          <count-to :duration="3000" :end-val="devNum" :start-val="0" class="card-panel-num"/>
+        </div>
+      </div>
+    </el-col>
+    <el-col :lg="6" :sm="12" :xs="12" class="card-panel-col">
+      <div class="card-panel">
+        <div class="card-panel-icon-wrapper icon-message">
+          <svg-icon class-name="card-panel-icon" icon-class="uncheck"/>
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            本月未完成计划
+          </div>
+          <count-to :duration="3000" :end-val="uncheckPlanNum" :start-val="0" class="card-panel-num"/>
+        </div>
+      </div>
+    </el-col>
+    <el-col :lg="6" :sm="12" :xs="12" class="card-panel-col">
+      <div class="card-panel">
+        <div class="card-panel-icon-wrapper icon-money">
+          <svg-icon class-name="card-panel-icon" icon-class="checked"/>
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            本月已完成计划
+          </div>
+          <count-to :duration="3000" :end-val="checkedPlanNum" :start-val="0" class="card-panel-num"/>
+        </div>
+      </div>
+    </el-col>
+    <el-col :lg="6" :sm="12" :xs="12" class="card-panel-col">
+      <div class="card-panel">
+        <div class="card-panel-icon-wrapper icon-shopping">
+          <svg-icon class-name="card-panel-icon" icon-class="issue"/>
+        </div>
+        <div class="card-panel-description">
+          <div class="card-panel-text">
+            未处理问题数量
+          </div>
+          <count-to :duration="3000" :end-val="issueNum" :start-val="0" class="card-panel-num"/>
+        </div>
+      </div>
+    </el-col>
+  </el-row>
+</template>
+
+<script>
+import CountTo from 'vue-count-to'
+import {getCountNums} from "@/api/patrol";
+
+export default {
+  components: {
+    CountTo
+  },
+  data() {
+    return {
+      devNum: 0,
+      uncheckPlanNum: 0,
+      checkedPlanNum: 0,
+      issueNum: 0,
+    }
+  },
+  created() {
+      this.devNum = 1000;
+      this.uncheckPlanNum = 1000;
+      this.checkedPlanNum = 1000;
+      this.issueNum = 1000;
+  },
+}
+</script>
+
+<style lang="scss" scoped>
+.panel-group {
+  margin-top: 18px;
+
+  .card-panel-col {
+    margin-bottom: 32px;
+  }
+
+  .card-panel {
+    height: 108px;
+    cursor: pointer;
+    font-size: 12px;
+    position: relative;
+    overflow: hidden;
+    color: #666;
+    background: #fff;
+    box-shadow: 4px 4px 40px rgba(0, 0, 0, .05);
+    border-color: rgba(0, 0, 0, .05);
+
+    &:hover {
+      .card-panel-icon-wrapper {
+        color: #fff;
+      }
+
+      .icon-people {
+        background: #40c9c6;
+      }
+
+      .icon-message {
+        background: #36a3f7;
+      }
+
+      .icon-money {
+        background: #f4516c;
+      }
+
+      .icon-shopping {
+        background: #34bfa3
+      }
+    }
+
+    .icon-people {
+      color: #40c9c6;
+    }
+
+    .icon-message {
+      color: #36a3f7;
+    }
+
+    .icon-money {
+      color: #f4516c;
+    }
+
+    .icon-shopping {
+      color: #34bfa3
+    }
+
+    .card-panel-icon-wrapper {
+      float: left;
+      margin: 14px 0 0 14px;
+      padding: 16px;
+      transition: all 0.38s ease-out;
+      border-radius: 6px;
+    }
+
+    .card-panel-icon {
+      float: left;
+      font-size: 48px;
+    }
+
+    .card-panel-description {
+      float: right;
+      font-weight: bold;
+      margin: 26px;
+      margin-left: 0px;
+
+      .card-panel-text {
+        line-height: 18px;
+        color: rgba(0, 0, 0, 0.45);
+        font-size: 16px;
+        margin-bottom: 12px;
+      }
+
+      .card-panel-num {
+        font-size: 20px;
+      }
+    }
+  }
+}
+
+@media (max-width: 550px) {
+  .card-panel-description {
+    display: none;
+  }
+
+  .card-panel-icon-wrapper {
+    float: none !important;
+    width: 100%;
+    height: 100%;
+    margin: 0 !important;
+
+    .svg-icon {
+      display: block;
+      margin: 14px auto !important;
+      float: none !important;
+    }
+  }
+}
+</style>

+ 97 - 0
ui/src/views/eoeg/home/dashboard/PieChart.vue

@@ -0,0 +1,97 @@
+<template>
+    <div  :style="{height:height,width:width,borderRadius:'10px'}"/>
+</template>
+
+<script>
+import * as echarts from 'echarts';
+import resize from "@/views/patrol/home/dashboard/mixins/resize";
+
+require('echarts/theme/macarons') // echarts theme
+
+export default {
+  name: "PieChart",
+  mixins: [resize],
+  props: {
+    className: {
+      type: String,
+      default: 'chart'
+    },
+    width: {
+      type: String,
+      default: '100%'
+    },
+    height: {
+      type: String,
+      default: '610px'
+    }
+  },
+  data() {
+    return {
+      chart: null
+    }
+  },
+  mounted() {
+    this.initChart();
+  },
+  beforeDestroy() {
+    if (!this.chart) {
+      return
+    }
+    this.chart.dispose()
+    this.chart = null
+  },
+  methods: {
+    initChart() {// 在项目中运行以下代码,查看控制台输出
+      console.log('ECharts version:', echarts.version);
+      this.chart = echarts.init(this.$el, 'macarons')
+
+      this.chart.setOption({
+        tooltip: {
+          trigger: 'item'
+        },
+        legend: {
+          top: '5%',
+          left: 'center'
+        },
+        series: [
+          {
+            name: 'Access From',
+            type: 'pie',
+            radius: ['40%', '70%'],
+            avoidLabelOverlap: false,
+            padAngle: 5,
+            itemStyle: {
+              borderRadius: 10
+            },
+            label: {
+              show: false,
+              position: 'center'
+            },
+            emphasis: {
+              label: {
+                show: true,
+                fontSize: 40,
+                fontWeight: 'bold'
+              }
+            },
+            labelLine: {
+              show: false
+            },
+            data: [
+              { value: 1048, name: 'Search Engine' },
+              { value: 735, name: 'Direct' },
+              { value: 580, name: 'Email' },
+              { value: 484, name: 'Union Ads' },
+              { value: 300, name: 'Video Ads' }
+            ]
+          }
+        ]
+      })
+    }
+
+  }
+};
+</script>
+
+<style scoped>
+</style>

+ 31 - 0
ui/src/views/eoeg/home/dashboard/TableChart.vue

@@ -0,0 +1,31 @@
+<template>
+  <div :style="{height:height,width:width}">
+    <h3>******</h3>
+    <div class="text-container">
+      <el-table border>
+
+      </el-table>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  name: 'tableChart',
+  props: {
+    height: {
+      type: String,
+      default: '610px'
+    },
+    width: {
+      type: String,
+      default: '100%'
+    }
+  },
+  data() {
+    return {
+    }
+  },
+  mounted() {
+  }
+}
+</script>

+ 31 - 0
ui/src/views/eoeg/home/dashboard/pending.vue

@@ -0,0 +1,31 @@
+<template>
+  <div :style="{height:height,width:width}">
+    <h3>我的待办</h3>
+    <div class="text-container">
+      <el-table border>
+
+      </el-table>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  name: 'pendingChart',
+  props: {
+    height: {
+      type: String,
+      default: '610px'
+    },
+    width: {
+      type: String,
+      default: '100%'
+    }
+  },
+  data() {
+    return {
+    }
+  },
+  mounted() {
+  }
+}
+</script>

+ 61 - 0
ui/src/views/eoeg/home/index.vue

@@ -0,0 +1,61 @@
+<template>
+  <div class="dashboard-editor-container">
+    <PanelGroup/>
+    <el-row :gutter="32">
+      <el-col :xs="24" :sm="24" :lg="8">
+        <div class="chart-wrapper">
+          <pie-chart/>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="24" :lg="8">
+        <div class="chart-wrapper">
+          <table-chart/>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="24" :lg="8">
+        <div class="chart-wrapper">
+          <pending-chart/>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import PanelGroup from "@/views/eoeg/home/dashboard/PanelGroup.vue";
+import PieChart from "@/views/eoeg/home/dashboard/PieChart.vue";
+import PendingChart from "@/views/eoeg/home/dashboard/pending.vue";
+import TableChart from "@/views/eoeg/home/dashboard/TableChart.vue";
+
+export default {
+  name: 'eoegHome',
+  components: {
+    TableChart,
+    PendingChart,
+    PieChart,
+    PanelGroup
+  }
+}
+</script>
+<style lang="scss" scoped>
+.dashboard-editor-container {
+  padding: 32px;
+  background-color: rgb(240, 242, 245);
+  position: relative;
+
+  .chart-wrapper {
+    background: #fff;
+    padding: 16px 16px 0;
+    //margin-bottom: 32px;
+  }
+}
+
+@media (max-width:1024px) {
+  .chart-wrapper {
+    padding: 8px;
+  }
+}
+.card-name {
+  font-size: 16px;
+}
+</style>

+ 6 - 0
ui/src/views/index.vue

@@ -4,6 +4,8 @@
   <invoice v-else-if="homeType== 3"></invoice>
   <byxhome v-else-if="homeType== 4"></byxhome>
   <hcqhome v-else-if="homeType== 5"></hcqhome>
+  <ldpehome v-else-if="homeType== 6"></ldpehome>
+  <EoegHome v-else-if="homeType== 7"></EoegHome>
 <!--  <semshome v-show="homeType == 2"></semshome>-->
 </template>
 
@@ -18,6 +20,8 @@
   import semshome from "./sems/specanalysis/index";
   import invoice from "./invoice/bookingworkticket/index";
   import '@/common/flexible.js';
+  import EoegHome from "@/views/eoeg/home/index.vue";
+  import Ldpehome from "@/views/ldpehome.vue";
 
   export default {
     data() {
@@ -26,6 +30,8 @@
       };
     },
     components: {
+      Ldpehome,
+      EoegHome,
       homepage,
       semshome,
       invoice,

+ 61 - 0
ui/src/views/ldpehome.vue

@@ -0,0 +1,61 @@
+<template>
+  <div class="dashboard-editor-container">
+    <PanelGroup/>
+    <el-row :gutter="32">
+      <el-col :xs="24" :sm="24" :lg="8">
+        <div class="chart-wrapper">
+          <pie-chart/>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="24" :lg="8">
+        <div class="chart-wrapper">
+          <table-chart/>
+        </div>
+      </el-col>
+      <el-col :xs="24" :sm="24" :lg="8">
+        <div class="chart-wrapper">
+          <pending-chart/>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import PanelGroup from "@/views/dashboard/ldpe/PanelGroup.vue";
+import PieChart from "@/views/dashboard/ldpe/PieChart.vue";
+import PendingChart from "@/views/dashboard/ldpe/pending.vue";
+import TableChart from "@/views/dashboard/ldpe/TableChart.vue";
+
+export default {
+  name: 'ldpehome',
+  components: {
+    TableChart,
+    PendingChart,
+    PieChart,
+    PanelGroup
+  }
+}
+</script>
+<style lang="scss" scoped>
+.dashboard-editor-container {
+  padding: 32px;
+  background-color: rgb(240, 242, 245);
+  position: relative;
+
+  .chart-wrapper {
+    background: #fff;
+    padding: 16px 16px 0;
+    //margin-bottom: 32px;
+  }
+}
+
+@media (max-width:1024px) {
+  .chart-wrapper {
+    padding: 8px;
+  }
+}
+.card-name {
+  font-size: 16px;
+}
+</style>

+ 17 - 1
ui/src/views/pssr/aboveall/index.vue

@@ -316,6 +316,7 @@
     <el-dialog :close-on-click-modal="false" title="新增PSSR" :visible.sync="model.open" width="80%" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="100px">
         <el-form-item label="模板" prop="id">
+          <el-col :span="12">
           <el-select v-model="form.id" clearable filterable style="width: 100%;"
                      placeholder="请选择模板生成PSSR数据">
             <el-option
@@ -325,9 +326,21 @@
               :key="item.id"
             />
           </el-select>
+          </el-col>
+          <el-col :span="12">
+          <el-form-item label="预计开车时间" prop="drivingTime" label-width="140px">
+            <el-date-picker clearable
+                            v-model="form.drivingTime"
+                            type="date"
+                            value-format="yyyy-MM-dd"
+                            style="width: 100%"
+                            placeholder="选择确认时间">
+            </el-date-picker>
+          </el-form-item>
+        </el-col>
         </el-form-item>
         <el-card class="mb10">
-          <el-table :data="subcontents" v-loading="subloading" border :row-class-name="tableRowClassName"
+          <el-table ref="subcontentTable" :data="subcontents" v-loading="subloading" border :row-class-name="tableRowClassName"
                     @selection-change="handleSubSelectionChange" max-height="500">
             <el-table-column label="所属部门" align="center" prop="deptUnit" :show-overflow-tooltip="true" width="80"/>
             <el-table-column label="序号" align="center" prop="serialNumber" :show-overflow-tooltip="true" width="80"/>
@@ -486,6 +499,9 @@ export default {
         unit: [
           {required: true, message: '单元不能为空!', trigger: "blur"}
         ],
+        drivingTime: [
+          {required: true, message: '预计开车时间不能为空!', trigger: "blur"}
+        ],
       }
     };
   },

+ 2 - 2
ui/src/views/pssr/lock/index.vue

@@ -73,7 +73,7 @@
         >删除
         </el-button>
       </el-col>
-      <el-col :span="1.5">
+<!--      <el-col :span="1.5">
         <el-button
           type="info"
           icon="el-icon-upload2"
@@ -83,7 +83,7 @@
           v-hasPermi="['pssr:lock:edit']"
         >导入
         </el-button>
-      </el-col>
+      </el-col>-->
       <el-col :span="1.5">
         <el-button
           type="warning"