Просмотр исходного кода

2023-02-28 update

1. 调整settings 页面及接口
2. 降级node-sass 以解决4.14.1版本 core dump的问题
moccus 2 лет назад
Родитель
Сommit
3a32475e15
6 измененных файлов с 2956 добавлено и 1687 удалено
  1. 3 0
      README.md
  2. 1586 1462
      package-lock.json
  3. 1 1
      package.json
  4. 20 0
      src/api/index.js
  5. 381 0
      src/components/setting copy.vue
  6. 965 224
      src/components/setting.vue

+ 3 - 0
README.md

@@ -17,3 +17,6 @@ npm run build
 
 ### Customize configuration
 See [Configuration Reference](https://cli.vuejs.org/config/).
+
+
+采用node 14 版本

Разница между файлами не показана из-за своего большого размера
+ 1586 - 1462
package-lock.json


+ 1 - 1
package.json

@@ -39,7 +39,7 @@
     "electron-devtools-installer": "^3.1.0",
     "less": "^3.0.4",
     "less-loader": "^5.0.0",
-    "node-sass": "^4.14.1",
+    "node-sass": "4.13.1",
     "sass-loader": "^8.0.2",
     "vue-cli-plugin-electron-builder": "~2.1.1"
   },

+ 20 - 0
src/api/index.js

@@ -401,6 +401,24 @@ const returnSetting = (data) => {
     });
 };
 
+//获取报警列表
+const warningSetting = (data) => {
+    return request({
+        baseURL: process.env.VUE_APP_API,
+        url: `/api/settings/alarminfos?stationId=${data.stationId}&modelId=${data.modelId}`,
+        method: "get"
+    })
+}
+
+//获取预警列表
+const costumeSetting = (data) => {
+    return request({
+        baseURL: process.env.VUE_APP_API,
+        url: `/api/settings/costume-alarminfos?stationId=${data.stationId}&modelId=${data.modelId}`,
+        method: "get"
+    })
+}
+
 //刷新报警信息
 const getAlarmSnap = (data) => {
     return request({
@@ -458,6 +476,8 @@ export default {
     getStationModels,
     getSettings,
     updateSettings,
+    warningSetting,
+    costumeSetting,
     recommended,
     statusChange,
     returnSetting,

+ 381 - 0
src/components/setting copy.vue

@@ -0,0 +1,381 @@
+<template>
+    <el-dialog width="70%" @open="opened" @closed="closed" :fullscreen="true" :show-close="true" class="dialogs">
+        <template #title>
+            <div class="showTitles currentShowTitles">
+                <div class="titles">设置</div>
+            </div>
+        </template>
+        <div class="body">
+            <div class="title">
+                <div :class="current === item.id ? 'title-onItem' : 'title-item'" v-for="(item, index) in stationList"
+                    :key="index" @click="handleChange(item.id)">
+                    {{ item.name }}
+                </div>
+            </div>
+            <div class="content">
+                <div class="models">
+                    <div class="models-left">
+                        <div class="models-name">机型:</div>
+                        <el-select class="inputs" v-model="selectValue" placeholder="请选择" @change="getData()">
+                            <el-option v-for="item in models" :key="item" :label="item" :value="item">
+                            </el-option>
+                        </el-select>
+                    </div>
+                    <div class="returns" @click="handleReturn()">恢复默认设置</div>
+                </div>
+                <div class="control">
+                    <div class="control-item">
+                        <div class="control-title">是否推荐启动:</div>
+                        <el-switch v-model="settingsControl.start" @change="updateSettings()">
+                        </el-switch>
+                    </div>
+                    <div class="control-item">
+                        <div class="control-title">是否推荐停机:</div>
+                        <el-switch v-model="settingsControl.stop" @change="updateSettings()">
+                        </el-switch>
+                    </div>
+                    <div class="control-item">
+                        <div class="control-title">是否推荐限电停机:</div>
+                        <el-switch v-model="settingsControl.limitedPowerStop" @change="updateSettings()">
+                        </el-switch>
+                    </div>
+                    <div class="control-item">
+                        <div class="control-title">是否推荐维护:</div>
+                        <el-switch v-model="settingsControl.maintain" @change="updateSettings()">
+                        </el-switch>
+                    </div>
+                    <div class="control-item">
+                        <div class="control-title">是否推荐取消维护:</div>
+                        <el-switch v-model="settingsControl.unMaintain" @change="updateSettings()">
+                        </el-switch>
+                    </div>
+                    <div class="control-item">
+                        <div class="control-title">是否推荐复位:</div>
+                        <el-switch v-model="settingsControl.reset" @change="updateSettings()">
+                        </el-switch>
+                    </div>
+                </div>
+            </div>
+            <div class="warningTable" v-if="settingsControl.reset">
+                <div class="teble-buttons">
+                    <div class="button" @click="toggleRowExpansionAll(true)">全部展开</div>
+                    <div class="button" @click="toggleRowExpansionAll(false)">全部收回</div>
+                </div>
+                <el-table :data="alertInfo" row-key="id" border default-expand-all ref="dataTreeList"
+                    :tree-props="{ children: 'children', hasChildren: false }" height="70vh"
+                    style="background-color: #000000;border: 1px solid #000000;" :header-cell-style="{
+                        background: 'rgb(30,30,30)',
+                        color: 'rgb(220,220,220)',
+                        padding: '4px',
+                        fontSize: '14px',
+                        'border-bottom': 'solid 1px rgba(77, 77, 77, 1)',
+                    }" :cell-style="{
+    height: '40px',
+    background: 'rgb(30,30,30)',
+    color: 'rgb(220,220,220)',
+    padding: '3px',
+    fontSize: '12px',
+    'border-bottom': '1px solid #000000',
+}">
+                    <el-table-column prop="name" label="名称" sortable width="200" align="center">
+                    </el-table-column>
+                    <!-- <el-table-column prop="stationId" label="风场" sortable>
+                    </el-table-column> -->
+                    <!-- <el-table-column prop="modelId" label="机型" sortable>
+                    </el-table-column> -->
+                    <el-table-column prop="lastUpdateTime" label="故障触发时间" align="center">
+                    </el-table-column>
+                    <!-- <el-table-column prop="rank" label="故障等级" sortable>
+                    </el-table-column> -->
+                    <el-table-column prop="alertText" label="故障描述" align="center">
+                    </el-table-column>
+                    <el-table-column label="是否不可复位" width="180" align="center">
+                        <template #default="scope">
+                            <span>
+                                <el-switch @change="handleSwitchChange(scope.row)" v-model="scope.row.notResettable">
+                                </el-switch>
+                            </span>
+                        </template>
+                    </el-table-column>
+                </el-table>
+            </div>
+        </div>
+    </el-dialog>
+</template>
+  
+<script>
+import api from "api/index";
+export default {
+    data() {
+        return {
+            stationList: [],
+            current: "",
+            models: [],
+            selectValue: "",
+            settingsControl: {},
+            alertInfo: [],
+        };
+    },
+    mounted() { },
+    methods: {
+        opened() {
+            let stationList = [];
+            let stations = this.$store.state.stationList;
+            stations.forEach((item) => {
+                if (item.id.indexOf("FDC") != -1) {
+                    stationList.push(item);
+                }
+            });
+            this.stationList = stationList;
+            this.current = stationList[0].id;
+            this.getStationModels(true)
+        },
+        handleChange(val) {
+            this.current = val;
+            this.tableData = []
+            this.pagenum = 1
+            this.getStationModels()
+        },
+        getStationModels(flag) {
+            api.getStationModels({
+                stationid: this.current
+            }).then(res => {
+                if (res.data) {
+                    this.models = res.data
+                    this.selectValue = res.data[0]
+                    this.getData(flag);
+                }
+            })
+        },
+        getData(flag) {
+            api.getSettings({
+                stationId: this.current,
+                modelId: this.selectValue,
+            }).then(res => {
+                if (res.data) {
+                    this.alertInfo = []
+                    this.settingsControl = res.data.settings
+                    if (flag) {
+                        this.alertInfo = res.data.alertInfo
+                    } else {
+                        console.log(this.alertInfo);
+                        setTimeout(() => {
+                            this.alertInfo = res.data.alertInfo
+                        }, 100);
+                    }
+
+
+                    // this.toggleRowExpansionAll(this.alertInfo, true)
+                }
+            })
+        },
+        toggleRowExpansionAll(isExpansion) {
+            this.alertInfo.forEach((item) => {
+                this.$refs.dataTreeList.toggleRowExpansion(item, isExpansion);
+            });
+        },
+        updateSettings() {
+            api.updateSettings(this.settingsControl).then(res => {
+                if (res.data.message === 'success') {
+                    this.$notify({
+                        title: "控制",
+                        message: '修改成功',
+                        type: "success",
+                        position: "bottom-right",
+                        offset: 60,
+                        duration: 3000,
+                    });
+                    this.getData()
+                }
+            })
+        },
+        handleSwitchChange(data) {
+            if (!data.modelId) {
+                if (data.notResettable) {
+                    data.children.forEach(item => {
+                        item.notResettable = true
+                        this.settingsControl.prohibitResetUniformCodes.push(item.uniformCode)
+                    })
+                    this.settingsControl.prohibitResetParts.push(data.id)
+                } else {
+                    for (var i = 0; i < this.settingsControl.prohibitResetParts.length; i++) {
+                        if (this.settingsControl.prohibitResetParts[i] == data.id) {
+                            this.settingsControl.prohibitResetParts.splice(i, 1);
+                        }
+                    }
+                }
+            } else {
+                if (data.notResettable) {
+                    this.settingsControl.prohibitResetUniformCodes.push(data.uniformCode)
+                } else {
+                    for (var i = 0; i < this.settingsControl.prohibitResetUniformCodes.length; i++) {
+                        if (this.settingsControl.prohibitResetUniformCodes[i] == data.uniformCode) {
+                            this.settingsControl.prohibitResetUniformCodes.splice(i, 1);
+                        }
+                    }
+                }
+            }
+            this.updateSettings()
+        },
+        handleReturn(){
+            
+            this.$confirm('确定恢复默认设置?', '提示', {
+          confirmButtonText: '确定',
+          cancelButtonText: '取消',
+          type: 'warning'
+        }).then(() => {
+          api.returnSetting({
+                stationId: this.current,
+                modelId: this.selectValue,
+            }).then(res =>{
+                this.$notify({
+                        title: "控制",
+                        message: '修改成功',
+                        type: "success",
+                        position: "bottom-right",
+                        offset: 60,
+                        duration: 3000,
+                    });
+                    this.getData()
+            })
+        }).catch(() => {
+          this.$message({
+            type: 'info',
+            message: '已取消恢复'
+          });          
+        });
+            
+        },
+        closed() {
+
+        },
+
+    },
+};
+</script>
+<style lang="less" scoped>
+.body {
+    background-color: #000000;
+    height: 89vh;
+    width: 102%;
+    margin-left: -1%;
+    margin-top: -40px;
+}
+
+.title {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    margin-left: 3vw;
+    padding-top: 8px;
+    position: absolute;
+    width: 100%;
+    background-color: #000000;
+    padding-bottom: 10px;
+
+    .title-item {
+        background-color: #242424;
+        border-radius: 4px;
+        padding: 8px 27px 7px 25px;
+        font-size: 14px;
+        color: #b4bdc0;
+        margin-right: 10px;
+    }
+
+    .title-onItem {
+        background-color: rgba(37, 116, 219, 1);
+        border-radius: 4px;
+        padding: 8px 27px 7px 25px;
+        font-size: 14px;
+        color: #b4bdc0;
+        margin-right: 10px;
+    }
+}
+
+.content {
+    margin-left: 3vw;
+    padding-top: 7vh;
+    width: 100%;
+
+    .models {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        justify-content: space-between;
+        .models-left{
+            display: flex;
+        flex-direction: row;
+        align-items: center;
+        .models-name {
+            margin-right: 10px;
+            color: #ffffff;
+            font-size: 17px;
+        }
+        }
+        .returns{
+            background-color: #666666;
+            border-radius: 4px;
+            padding: 8px 15px 7px 15px;
+            font-size: 14px;
+            color: #ffffff;
+            margin-right: 50px;
+        }
+    }
+}
+
+.control {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    margin-top: 15px;
+
+    .control-item {
+        display: flex;
+        flex-direction: row;
+        align-items: center;
+        margin-right: 30px;
+
+        .control-title {
+            margin-right: 10px;
+            color: #ffffff;
+            font-size: 17px;
+        }
+    }
+}
+
+.inputs {
+    width: 150px !important;
+}
+
+.el-switch {
+    width: 50px !important;
+}
+
+.warningTable {
+    margin-left: 58px;
+    margin-top: 20px;
+    width: 96%;
+}
+
+.el-table--border::after,
+.el-table--group::after,
+.el-table::before {
+    background-color: #000000 !important;
+}
+
+.teble-buttons {
+    display: flex;
+    flex-direction: row;
+    align-items: center;
+    margin: 10px 0;
+
+    .button {
+        background-color: rgba(37, 116, 219, 1);
+        border-radius: 4px;
+        padding: 8px 27px 7px 25px;
+        font-size: 14px;
+        color: #b4bdc0;
+        margin-right: 10px;
+    }
+}
+</style>

Разница между файлами не показана из-за своего большого размера
+ 965 - 224
src/components/setting.vue