| | |
| | | <template> |
| | | <div class="fa-card-a"> |
| | | <el-row :gutter="5"> |
| | | <div class="mod-taskReliability-simulatAssess"> |
| | | <el-form :inline="true" :model="dataForm" ref="dataForm" :disabled="dataForm.disabled"> |
| | | <zt-form-item label="产品节点" prop="productId" width="100px"> |
| | | <zt-select v-model="dataForm.productId" :datas="productList" @change="onProductSelected"/> |
| | | </zt-form-item> |
| | | <zt-form-item label="可靠性方案" prop="taskModelId" width="500px"> |
| | | <zt-select style="width: 400px" v-model="dataForm.name" :datas="schemeList" |
| | | @change="onSchemeSelected" :multiple="true"/> |
| | | </zt-form-item> |
| | | <zt-form-item> |
| | | <zt-button @click="compair()">方案对比</zt-button> |
| | | </zt-form-item> |
| | | </el-form> |
| | | <div> |
| | | <el-col :span="4"> |
| | | <div style="margin-right: 5px;height: calc(88vh - 100px)" v-if="isSelect"> |
| | | <product-model-tree @on-selected="onTreeSelected" showXdy="false" |
| | | ref="ProductModelTree" :isShow="false" basic="4" :productId="dataForm.productId"/> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="20"> |
| | | <div style="margin-top: 20px;position: relative;height: 600px"> |
| | | <div v-if="isShow"> |
| | | <el-button v-if="isZk" type="info" size="small" icon="el-icon-caret-bottom" |
| | | style="position: absolute;right: 10%;top: 10%;z-index: 1" @click="zk()"></el-button> |
| | | <el-button v-if="!isZk" type="info" size="small" icon="el-icon-caret-right" |
| | | style="position: absolute;right: 10%;top: 10%;z-index: 1" @click="zk()"></el-button> |
| | | <div v-if="isZk" style="position: absolute;right: 10%;top: 15%"> |
| | | <el-table :data="tableData" border style="width: 400px"> |
| | | <el-table-column |
| | | prop="name" |
| | | label="方案名称" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="MTBF" |
| | | label="MTBF" |
| | | width="80px" |
| | | align="right"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="MTTR" |
| | | label="MTTR" |
| | | width="80px" |
| | | align="right"> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="MSR" |
| | | label="MSR" |
| | | width="80px" |
| | | align="right"> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div :disabled="isShow"> |
| | | <div class="echart" id="myChart" :style="myChartStyle"></div> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-form :inline="true" :model="dataForm" ref="dataForm" :disabled="dataForm.disabled"> |
| | | <zt-form-item label="产品节点" prop="productId" width="100px"> |
| | | <zt-select v-model="dataForm.productId" :datas="productList" @change="onProductSelected"/> |
| | | </zt-form-item> |
| | | <zt-form-item label="可靠性方案" prop="taskModelId" width="500px"> |
| | | <zt-select style="width: 400px" v-model="dataForm.taskModelId" :datas="schemeList" |
| | | @change="onTaskSelected" :multiple="true"/> |
| | | </zt-form-item> |
| | | <zt-form-item label="时间分片" prop="samplPeriod"> |
| | | <el-input type="number" :min="1" v-model="dataForm.samplPeriod" style="width: 150px;vertical-align: baseline;"> |
| | | <template slot="append">分钟</template> |
| | | </el-input> |
| | | </zt-form-item> |
| | | <zt-form-item label="仿真次数" prop="simulatFrequency"> |
| | | <el-input type="number" :min="1" v-model="dataForm.simulatFrequency" style="width: 150px;vertical-align: baseline;"> |
| | | <template slot="append">次数</template> |
| | | </el-input> |
| | | </zt-form-item> |
| | | <zt-form-item> |
| | | <zt-button @click="compair()">方案对比</zt-button> |
| | | </zt-form-item> |
| | | </el-form> |
| | | <el-progress v-if="isShow" :percentage="percentage"></el-progress> |
| | | <el-col :span="4"> |
| | | <div style="margin-right: 5px;height: calc(100vh - 230px)" v-if="isSelect"> |
| | | <product-model-tree @on-selected="onTreeSelected" showXdy="false" |
| | | ref="ProductModelTree" :isShow="false" basic="4" :productId="dataForm.productId"/> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | <el-col :span="20"> |
| | | <div class="fa-card-a" style="position: relative;height: calc(100vh - 230px)"> |
| | | <div v-if="Show"> |
| | | <el-button v-if="isZk" type="info" size="small" icon="el-icon-caret-bottom" |
| | | style="position: absolute;right: 0;top: 0;z-index: 1" @click="zk()"></el-button> |
| | | <el-button v-if="!isZk" type="info" size="small" icon="el-icon-caret-right" |
| | | style="position: absolute;right: 0;top: 0;z-index: 1" @click="zk()"></el-button> |
| | | <div v-if="isZk" style="position: absolute;right: 0;top: 5%"> |
| | | <el-table :data="tableData" border style="width: 500px"> |
| | | <el-table-column |
| | | prop="name" |
| | | label="方案名称" |
| | | > |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="mtbf" |
| | | label="MTTF" |
| | | width="100px" |
| | | align="right"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ keepNumberBy2(scope.row.mtbf) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="mttr" |
| | | label="MTTR" |
| | | width="100px" |
| | | align="right"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ keepNumberBy2(scope.row.mttr) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="msr" |
| | | label="MSR" |
| | | width="100px" |
| | | align="right"> |
| | | <template slot-scope="scope"> |
| | | <span>{{ keepNumberBy4(scope.row.msr) }}</span> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | | </div> |
| | | </div> |
| | | <div :disabled="isShow"> |
| | | <div class="echart" id="SchemeCompar" :style="myChartStyle"></div> |
| | | </div> |
| | | </div> |
| | | </el-col> |
| | | </el-row> |
| | | <el-dialog v-dialogDrag :close-on-click-modal="false" top="8vh" :visible.sync="dialogVisible" title="模型检查" |
| | | width="60%" @close="dialogVisible = false"> |
| | | <el-tag type="danger" style="margin-bottom: 10px">模型定义/参数配置里存在以下问题:</el-tag> |
| | | <el-table :data="modelCheckResult" height="350" |
| | | :header-cell-style="{'text-align':'center'}"> |
| | | <el-table-column prop="category" label="检查结果" align="center" width="150"/> |
| | | <el-table-column prop="taskName" label="任务名称" align="center"/> |
| | | <el-table-column prop="taskPhaseName" label="任务阶段名称" align="center"/> |
| | | <el-table-column prop="gkName" label="工况名称" align="center"/> |
| | | <el-table-column prop="nodeName" label="节点名称" align="center"/> |
| | | <el-table-column prop="modelName" label="模型名称" align="center"/> |
| | | <el-table-column prop="deviceName" label="设备名称" align="center"/> |
| | | <el-table-column prop="paramName" label="参数名称" align="center"/> |
| | | </el-table> |
| | | <div slot="footer" class="dialog-footer"> |
| | | <el-button type="primary" @click="dialogVisible = false">关 闭</el-button> |
| | | </div> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | myChartStyle: {float: "left", width: "100%", height: "600px"}, //图表样式 |
| | | isSelect: false, |
| | | isShow: false, |
| | | Show: false, |
| | | isZk: true, |
| | | productList: [], |
| | | schemeList: [ |
| | | { |
| | | id: 1, |
| | | name: '方案一' |
| | | }, { |
| | | id: 2, |
| | | name: '方案二' |
| | | }, { |
| | | id: 3, |
| | | name: '方案三' |
| | | } |
| | | ], |
| | | schemeList: [], |
| | | dataForm: { |
| | | id: '', |
| | | name: [], |
| | | taskModelId: [], |
| | | productId: '', |
| | | showProductId: '', |
| | | taskModelId: '', |
| | | dataType: 'fz', |
| | | samplPeriod: '10', |
| | | simulatFrequency: 500, |
| | | }, |
| | | tableData: [ |
| | | { |
| | | name: '方案一', |
| | | MTBF: '68.74', |
| | | MTTR: '0.43', |
| | | MSR: '0.85' |
| | | }, { |
| | | name: '方案二', |
| | | MTBF: '78.74', |
| | | MTTR: '0.52', |
| | | MSR: '0.86' |
| | | }, { |
| | | name: '方案三', |
| | | MTBF: '69.84', |
| | | MTTR: '0.62', |
| | | MSR: '0.88' |
| | | } |
| | | ], |
| | | percentage: 2, |
| | | xDataList: [], |
| | | seriesList: [], |
| | | tableData: [], |
| | | taskList: [], |
| | | fzIdList: [], |
| | | dialogVisible: false, |
| | | modelCheckResult: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getProductList() |
| | | }, |
| | | computed: { |
| | | keepNumberBy4() { //过滤器保留4为小数 |
| | | return function (val) { // 对计算属性进行传参 |
| | | const numM = Number(val).toFixed(5); |
| | | return numM.substring(0, numM.length - 1); |
| | | } |
| | | }, |
| | | keepNumberBy2() { //过滤器保留4为小数 |
| | | return function (val) { // 对计算属性进行传参 |
| | | const numM = Number(val).toFixed(3); |
| | | return numM.substring(0, numM.length - 1); |
| | | } |
| | | }, |
| | | }, |
| | | components: { |
| | | ProductModelTree, |
| | | }, |
| | | |
| | | watch: { |
| | | // percentage() { |
| | | // if (this.percentage === 100) { |
| | | // this.getEcharts(); |
| | | // } |
| | | // } |
| | | }, |
| | | methods: { |
| | | onTreeSelected(data) { |
| | | if (this.dataForm.id) { |
| | | if (this.dataForm.taskModelId.length > 0) { |
| | | console.log(this.dataForm.taskModelId) |
| | | console.log(data, 'onProductSelected') |
| | | this.dataForm.showProductId = data.id |
| | | this.$refs.SimulatCurve.getProductEcharts(this.dataForm); |
| | | this.$nextTick(() => { |
| | | this.getEcharts() |
| | | }) |
| | | } |
| | | }, |
| | | // 获取信息 |
| | |
| | | this.isSelect = true |
| | | console.log(data, ' onProductSelected(data)') |
| | | this.dataForm.productId = data.id |
| | | this.getTaskList() |
| | | this.$nextTick(() => { |
| | | this.$refs.ProductModelTree.getProductList() |
| | | }) |
| | | }, |
| | | onSchemeSelected() { |
| | | console.log(this.dataForm.name) |
| | | onTaskSelected(data) { |
| | | console.log(data, 'onTaskSelected(data)') |
| | | for (let item of data) { |
| | | this.taskList.push(item.name) |
| | | } |
| | | }, |
| | | zk() { |
| | | this.isZk = !this.isZk; |
| | |
| | | this.productList = res.data |
| | | this.onProductSelected(this.productList[0]) |
| | | }, |
| | | compair() { |
| | | async getTaskList() { |
| | | let params = { |
| | | productId: this.dataForm.productId |
| | | } |
| | | let res = await this.$http.get('/taskReliability/Task/getTaskList', {params: params}) |
| | | console.log(res.data) |
| | | this.schemeList = res.data |
| | | }, |
| | | async getStroke() { |
| | | let param = { |
| | | taskList: this.fzIdList |
| | | } |
| | | let res = await this.$http.get(`/taskReliability/SimulatAssess/getCalcProgress`, {params: param}) |
| | | if (res.success) { |
| | | if (res.data) { |
| | | this.percentage = parseFloat(res.data) |
| | | if (this.percentage >= 100) { |
| | | clearInterval(this.timers) |
| | | this.percentage = 0 |
| | | await this.getEcharts(); |
| | | } |
| | | } |
| | | } else { |
| | | clearInterval(this.timers) |
| | | this.percentage = 0 |
| | | } |
| | | }, |
| | | async compair() { |
| | | this.isShow = true |
| | | this.dialogVisible = false |
| | | this.modelCheckResult = [] |
| | | let params = { |
| | | taskList: this.dataForm.taskModelId, |
| | | showProductId: this.dataForm.productId, |
| | | samplPeriod: this.dataForm.samplPeriod, |
| | | simulatFrequency: this.dataForm.simulatFrequency |
| | | } |
| | | console.log(this.dataForm.taskModelId, 'this.dataForm.taskModelId') |
| | | this.percentage = 0 |
| | | let res = await this.$http.get('/taskReliability/SimulatAssess/SchemeCompar', {params: params}) |
| | | console.log(res.data, "res") |
| | | if (res.success) { |
| | | if (res.data.type=="errorList") { |
| | | this.modelCheckResult = res.data.errList |
| | | this.dialogVisible = true |
| | | this.isShow = false |
| | | } else { |
| | | this.fzIdList = res.data.idList |
| | | this.timers = window.setInterval(this.getStroke, 1000) |
| | | } |
| | | } |
| | | }, |
| | | async getEcharts() { |
| | | let params = { |
| | | taskList: this.dataForm.taskModelId, |
| | | showProductId: this.dataForm.showProductId |
| | | } |
| | | let res = await this.$http.get('/taskReliability/SimulatAssess/getEcharts', {params: params}) |
| | | console.log(res.data, "res") |
| | | this.xDataList = res.data.xdataList |
| | | this.seriesList = res.data.curveList |
| | | this.tableData = res.data.dataList |
| | | |
| | | this.Show = true |
| | | this.option = { |
| | | xAxis: { |
| | | data: [0.0, 50.0, 100.0, 150.0, 200.0, 250.0, 300.0, 350.0, 400.0, 450.0, 500.0, 550.0], |
| | | name: '仿真总时长' |
| | | data: this.xDataList, |
| | | name: '仿真总时长', |
| | | type: 'category', |
| | | axisLabel: { |
| | | formatter: function (value) { |
| | | // 将 X 轴刻度值格式化为保留两位小数的字符串 |
| | | return parseFloat(value).toFixed(2); |
| | | } |
| | | } |
| | | }, |
| | | yAxis: { |
| | | type: 'value', |
| | | name: '可靠度', |
| | | }, |
| | | legend: { |
| | | data: ['方案一', '方案二', '方案三'] |
| | | data: this.taskList |
| | | }, |
| | | series: [ |
| | | { |
| | | name: '方案一', |
| | | type: 'line', |
| | | smooth: true, |
| | | data: [1.0, 0.6, 0.39, 0.39, 0.24, 0.14, 0.08, 0.06, 0.06, 0.04, 0.02, 0.01, 0.01, 0.0, 0.0] |
| | | }, |
| | | { |
| | | name: '方案二', |
| | | type: 'line', |
| | | smooth: true, |
| | | data: [1.0, 0.8, 0.59, 0.58, 0.34, 0.35, 0.18, 0.16, 0.16, 0.04, 0.04, 0.02, 0.01, 0.1, 0.0] |
| | | }, |
| | | { |
| | | name: '方案三', |
| | | type: 'line', |
| | | smooth: true, |
| | | data: [1.0, 0.7, 0.45, 0.44, 0.38, 0.38, 0.15, 0.08, 0.08, 0.02, 0.02, 0.01, 0.01, 0.1, 0.0] |
| | | } |
| | | ] |
| | | series: this.seriesList |
| | | }; |
| | | this.myChart = echart.init(document.getElementById("myChart")); |
| | | this.myChart = echart.init(document.getElementById("SchemeCompar")); |
| | | console.log(this.option, ' this.option ') |
| | | this.myChart.setOption(this.option); |
| | | //随着屏幕大小调节图表 |