dataQualityMeasurePoint.vue 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  1. <template>
  2. <div>
  3. <!-- 面包屑导航 -->
  4. <el-breadcrumb separator-class="el-icon-arrow-right" v-if="this.$router.currentRoute.path!='/home'">
  5. <el-breadcrumb-item :to="{ path: '/home' }">首页</el-breadcrumb-item>
  6. <el-breadcrumb-item>数据质量</el-breadcrumb-item>
  7. <el-breadcrumb-item>煤矿</el-breadcrumb-item>
  8. <el-breadcrumb-item :to="{ path: '/dataQualitySystem'}">系统</el-breadcrumb-item>
  9. <el-breadcrumb-item :to="{ path: '/dataQualitySubsystem'}">子系统</el-breadcrumb-item>
  10. <el-breadcrumb-item :to="{ path: '/dataQualityDevice'}">设备</el-breadcrumb-item>
  11. <el-breadcrumb-item :to="{ path: '/dataQualitySubdevice'}">子设备</el-breadcrumb-item>
  12. <el-breadcrumb-item>测点</el-breadcrumb-item>
  13. </el-breadcrumb>
  14. <!-- 页面主体区域 -->
  15. <el-main>
  16. <div class="block">
  17. <span class="demonstration" style="font-size: 10px;">搜索:</span>
  18. <el-cascader
  19. v-model="value"
  20. :options="measurepointoptions"
  21. :props="{ expandTrigger: 'hover'}"
  22. separator=" | "
  23. style="width: 50%;"
  24. placeholder="王家岭煤矿 | 煤流运输系统 | 2煤中央皮带子系统 | 头部1#驱动电机 | 电机本体"
  25. >
  26. <template slot-scope="{ node, data }">
  27. <span>{{ data.label }}</span>
  28. <span v-if="!node.isLeaf">({{ data.children.length }})</span>
  29. </template>
  30. </el-cascader>
  31. <!--搜索框后面的取消选择和修改按钮-->
  32. <el-button @click="toggleSelection()" style="margin: 20px 10px" type="primary" size="medium">取消选择</el-button>
  33. <el-button @click="updateMany()" :disabled="multipleSelection.length==0" style="margin: 20px 10px " type="primary" icon="el-icon-edit" size="medium">批量修改</el-button>
  34. <!--测试-新增测点的Test-->
  35. <!--<el-button @click="addMeasurePoint()" style="margin: 20px 10px " type="primary" icon="el-icon-edit" size="medium">新增测点的Test</el-button>-->
  36. </div>
  37. <br>
  38. <!--页面内容-->
  39. <el-card>
  40. <el-table
  41. ref="multipleTable"
  42. :data="tableData"
  43. tooltip-effect="dark"
  44. style="width: 100%"
  45. @selection-change="handleSelectionChange"
  46. border stripe>
  47. <el-table-column type="selection" width="40"></el-table-column>
  48. <el-table-column prop="name" label="测点" header-align="center" align="center" width="150">
  49. </el-table-column>
  50. <el-table-column label="完整性" header-align="center" align="center">
  51. <el-table-column prop="isExisted" label="数据是否存在" header-align="center" align="center" width="130">
  52. </el-table-column>
  53. </el-table-column>
  54. <el-table-column label="准确性" header-align="center" align="center" width="150">
  55. <el-table-column prop="type" label="数据类型" header-align="center" align="center" width="120">
  56. </el-table-column>
  57. <el-table-column label="阈值范围" header-align="center" align="center">
  58. <el-table-column prop="uprange" label="上阈值" header-align="center" align="center" width="120">
  59. </el-table-column>
  60. <el-table-column prop="lowrange" label="下阈值" header-align="center" align="center" width="120">
  61. </el-table-column>
  62. </el-table-column>
  63. <el-table-column prop="rationality" label="数据合理范围" header-align="center" align="center" >
  64. <el-table-column prop="rationalityuprange" label="上阈值" header-align="center" align="center" width="120">
  65. </el-table-column>
  66. <el-table-column prop="rationalitylowrange" label="下阈值" header-align="center" align="center" width="120">
  67. </el-table-column>
  68. </el-table-column>
  69. <el-table-column prop="storage_len" label="数据存储长度" header-align="center" align="center" width="130">
  70. </el-table-column>
  71. </el-table-column>
  72. <el-table-column label="时效性" header-align="center" align="center" width="150">
  73. <el-table-column prop="timedelay" label="时延要求" header-align="center" align="center" width="140">
  74. </el-table-column>
  75. <el-table-column prop="timesequence" label="时序性要求" header-align="center" align="center" width="140">
  76. </el-table-column>
  77. </el-table-column>
  78. </el-table>
  79. <!--批量修改对话框里面的内容-->
  80. <el-dialog title="批量修改测点数据质量" :visible.sync="ManyMPdialogVisible" width="100%" top="5vh" :before-close="cancel" >
  81. <span slot="footer" class="dialog-footer">
  82. <!--这里应该还有一个保存的方法没写-->
  83. <el-button @click="cancel()">取 消</el-button>
  84. <el-button type="primary" @click="saveMany()">确 定</el-button>
  85. </span>
  86. <el-table :data="ManyMPtable" >
  87. <el-table-column prop="name" label="测点" header-align="center" align="center" width="150">
  88. </el-table-column>
  89. <el-table-column label="完整性" header-align="center" align="center">
  90. <el-table-column prop="isExisted" label="数据是否存在" header-align="center" align="center" width="230" >
  91. <template slot-scope="scope">
  92. <el-select v-model="scope.row.isExisted" slot="prepend" size="small" style="width:35%;margin-top:10px">
  93. <el-option
  94. v-for="item in isExistedoptions"
  95. :key="item.value"
  96. :label="item.label"
  97. :value="item.value">
  98. </el-option>
  99. </el-select>
  100. <el-select v-model="scope.row.isExistedmethod" placeholder="请选择治理函数" slot="append" size="small" style="width:65%;margin-top:10px">
  101. <el-option
  102. v-for="item in Methodoptions"
  103. :key="item.id"
  104. :label="item.name"
  105. :value="item.id">
  106. </el-option>
  107. </el-select>
  108. </template>
  109. </el-table-column>
  110. </el-table-column>
  111. <el-table-column label="准确性" header-align="center" align="center">
  112. <el-table-column prop="type" label="数据类型" header-align="center" align="center" width="230">
  113. <template slot-scope="scope">
  114. <span style="width: 100%" @dblclick="dblcmodify()" ></span>
  115. <el-input v-model="scope.row.type" style="width:35%" ></el-input>
  116. <el-select v-model="scope.row.typemethod" placeholder="请选择治理函数" slot="append" size="small" style="width:65%;margin-top:10px">
  117. <el-option
  118. v-for="item in Methodoptions"
  119. :key="item.id"
  120. :label="item.name"
  121. :value="item.id">
  122. </el-option>
  123. </el-select>
  124. </template>
  125. </el-table-column>
  126. <el-table-column label="阈值范围" header-align="center" align="center" width="350">
  127. <el-table-column prop="uprange" label="上阈值" header-align="center" align="center" width="100">
  128. <template slot-scope="scope">
  129. <span style="width: 100%" @dblclick="dblcmodify()"></span>
  130. <el-input v-model="scope.row.uprange" ></el-input>
  131. </template>
  132. </el-table-column>
  133. <el-table-column prop="lowrange" label="下阈值" header-align="center" align="center" width="100" >
  134. <template slot-scope="scope">
  135. <span style="width: 100%" @dblclick="dblcmodify()"></span>
  136. <el-input v-model="scope.row.lowrange" ></el-input>
  137. </template>
  138. </el-table-column>
  139. </el-table-column>
  140. <el-table-column prop="rationality" label="数据合理范围" header-align="center" align="center" width="220">
  141. <el-table-column prop="rationalityuprange" label="上阈值" header-align="center" align="center" width="100">
  142. <template slot-scope="scope">
  143. <span style="width: 100%" @dblclick="dblcmodify()"></span>
  144. <el-input v-model="scope.row.rationalityuprange" ></el-input>
  145. </template>
  146. </el-table-column>
  147. <el-table-column prop="rationalitylowrange" label="下阈值" header-align="center" align="center" width="100">
  148. <template slot-scope="scope">
  149. <span style="width: 100%" @dblclick="dblcmodify()"></span>
  150. <el-input v-model="scope.row.rationalitylowrange" ></el-input>
  151. </template>
  152. </el-table-column>
  153. </el-table-column>
  154. <el-table-column prop="method" label="数据合理范围治理函数" header-align="center" align="center" width="150">
  155. <template slot-scope="scope">
  156. <el-select v-model="scope.row.rationalitymethod" placeholder="请选择治理函数" slot="append" size="small" style="width:100%;margin-top:10px">
  157. <el-option
  158. v-for="item in Methodoptions"
  159. :key="item.id"
  160. :label="item.name"
  161. :value="item.id">
  162. </el-option>
  163. </el-select>
  164. </template>
  165. </el-table-column>
  166. <el-table-column prop="storage_len" label="数据存储长度" header-align="center" align="center" width="205">
  167. <template slot-scope="scope">
  168. <span style="width: 100%" @dblclick="dblcmodify()"></span>
  169. <el-input v-model="scope.row.storage_len" style="width:30%"></el-input>
  170. <el-select v-model="scope.row.storage_lenmethod" placeholder="请选择治理函数" slot="append" size="small" style="width:70%;margin-top:10px">
  171. <el-option
  172. v-for="item in Methodoptions"
  173. :key="item.id"
  174. :label="item.name"
  175. :value="item.id">
  176. </el-option>
  177. </el-select>
  178. </template>
  179. </el-table-column>
  180. </el-table-column>
  181. <el-table-column label="时效性" header-align="center" align="center">
  182. <el-table-column prop="timedelay" label="时延要求" header-align="center" align="center" width="220">
  183. <template slot-scope="scope">
  184. <span style="width: 100%" @dblclick="dblcmodify()"></span>
  185. <el-input v-model="scope.row.timedelay" style="width:30%"></el-input>
  186. <el-select v-model="scope.row.timedelaymethod" placeholder="请选择治理函数" slot="append" size="small" style="width:70%;margin-top:10px">
  187. <el-option
  188. v-for="item in Methodoptions"
  189. :key="item.id"
  190. :label="item.name"
  191. :value="item.id">
  192. </el-option>
  193. </el-select>
  194. </template>
  195. </el-table-column>
  196. <el-table-column prop="timesequence" label="时序性要求" header-align="center" align="center" width="220">
  197. <template slot-scope="scope">
  198. <span style="width: 100%" @dblclick="dblcmodify()"></span>
  199. <el-input v-model="scope.row.timesequence" style="width:30%"></el-input>
  200. <el-select v-model="scope.row.timesequencemethod" placeholder="请选择治理函数" slot="append" size="small" style="width:70%;margin-top:10px">
  201. <el-option
  202. v-for="item in Methodoptions"
  203. :key="item.id"
  204. :label="item.name"
  205. :value="item.id">
  206. </el-option>
  207. </el-select>
  208. </template>
  209. </el-table-column>
  210. </el-table-column>
  211. <el-table-column label="版本" header-align="center" align="center" width="100">
  212. <template slot-scope="scope">
  213. <el-input type="textarea" v-model="scope.row.version"></el-input>
  214. </template>
  215. </el-table-column>
  216. <el-table-column label="修改记录" header-align="center" align="center" width="220">
  217. <template slot-scope="scope">
  218. <el-input type="textarea" v-model="scope.row.modifyrecord"></el-input>
  219. </template>
  220. </el-table-column>
  221. <el-table-column label="修改原因" header-align="center" align="center" width="220">
  222. <template slot-scope="scope">
  223. <el-input type="textarea" v-model="scope.row.modifyreason"></el-input>
  224. </template>
  225. </el-table-column>
  226. </el-table>
  227. </el-dialog>
  228. <!-- 分页区域 -->
  229. <div style="display: flex;justify-content: center">
  230. <el-pagination
  231. background
  232. @current-change="currentChange"
  233. @size-change="sizeChange"
  234. :current-page="page"
  235. :page-size="size"
  236. layout="sizes, prev, pager, next, jumper, ->, total, slot"
  237. :total="total">
  238. </el-pagination>
  239. </div>
  240. </el-card>
  241. </el-main>
  242. </div>
  243. </template>
  244. <script>
  245. export default {
  246. name: "dataQualityMeasurePoint",
  247. data() {
  248. return {
  249. multipleSelection: [],
  250. modifyMPdialogVisible: false,
  251. checkMPdialogVisible: false,
  252. ManyMPdialogVisible: false,
  253. inputisExistedMethod: '',
  254. versionsShow: true,
  255. value:[],
  256. isExistedoptions: [{
  257. value: '1',
  258. label: '是',
  259. }, {
  260. value: '0',
  261. label: '否',
  262. }],
  263. Methodoptions: [],
  264. // value: [],
  265. // versionoptions: [{
  266. // value: 'v1.0',
  267. // label: 'v1.0',
  268. // }, {
  269. // value: 'v2.0',
  270. // label: 'v2.0',
  271. // }, {
  272. // value: 'v3.0',
  273. // label: 'v3.0',
  274. // }],
  275. // versionoptions: [],
  276. value: [],
  277. measurepointoptions: [{
  278. value: 'WJL',
  279. label: '王家岭煤矿',
  280. children: [{
  281. value: 'MLYS',
  282. label: '煤流运输系统',
  283. children: [{
  284. value: '2MZYPDSS',
  285. label: '2煤中央皮带子系统',
  286. children: [{
  287. value: 'PDBT',
  288. label: '皮带本体',
  289. children: [{
  290. value: 'PDBT',
  291. label: '皮带本体',
  292. }]
  293. }, {
  294. value: '',
  295. label: '头部1#驱动电机',
  296. children: [{
  297. value: 'DJBT',
  298. label: '电机本体',
  299. }, {
  300. value: 'JSJ',
  301. label: '减速机',
  302. }, {
  303. value: 'BPQ',
  304. label: '变频器',
  305. }, {
  306. value: 'GYKGG',
  307. label: '高压开关柜',
  308. }]
  309. }]
  310. }, {
  311. value: 'ZPDPDSS',
  312. label: '主平硐皮带子系统'
  313. }, {
  314. value: 'SCPDSS',
  315. label: '上仓皮带子系统'
  316. }]
  317. }, {
  318. value: 'AQJC',
  319. label: '安全监控系统',
  320. }]
  321. }, {
  322. value: 'ZJL',
  323. label: '张家岭煤矿',
  324. }, {
  325. value: 'BALS',
  326. label: '巴拉素煤矿',
  327. }, {
  328. value: 'XXX',
  329. label: 'xxx煤矿'
  330. }],
  331. visible: false,
  332. // tableData: [{
  333. // id:'',
  334. // name: '电机绕组A相温度',
  335. // isExisted: '是',
  336. // type: 'float',
  337. // uprange: '120.0',
  338. // rationalityuprange: '125.0',
  339. // unit: '℃',
  340. // storage_len: '50',
  341. // timedelay: '5s',
  342. // timesequence: '10s',
  343. // version: [],
  344. // }, {
  345. // id:'',
  346. // name: '电机绕组B相温度',
  347. // isExisted: '是',
  348. // type: 'float',
  349. // uprange: '120.0',
  350. // rationalityuprange: '125.0',
  351. // unit: '℃',
  352. // storage_len: '50',
  353. // timedelay: '5s',
  354. // timesequence: '10s',
  355. // version: [],
  356. // }],
  357. tableData: [{
  358. id:'',
  359. name: '',
  360. isExisted: '',
  361. type: '',
  362. uprange: '',
  363. rationalityuprange: '',
  364. unit: '',
  365. storage_len: '',
  366. timedelay: '',
  367. timesequence: '',
  368. version: '',
  369. versionoptions: [],
  370. }],
  371. ManyMPtable: [{
  372. id:'',
  373. name: '',
  374. isExisted: '',
  375. isExistedmethod: '',
  376. type: '',
  377. typemethod: '',
  378. uprange: '',
  379. lowrange: '',
  380. rationalityuprange: '',
  381. rationalitylowrange: '',
  382. rationalitymethod: '',
  383. storage_len: '',
  384. storage_lenmethod: '',
  385. timedelay: '',
  386. timedelaymethod: '',
  387. timesequence: '',
  388. timesequencemethod: '',
  389. modifyrecord: '',
  390. modifyreason: '',
  391. }],
  392. currentSubEquipmentId: 1,
  393. page:1, //当前第几页
  394. size:10, //当前每页个数
  395. total:100, //全部数据行数
  396. }
  397. },
  398. mounted(){
  399. this.currentSubEquipmentId = window.sessionStorage.getItem("dataQualitysubdeviceId");
  400. if(this.currentSubEquipmentId == null) this.currentSubEquipmentId=1; //如果从菜单栏直接进入就没有上一级传过来的id
  401. this.initData();
  402. this.updateMeasurePoint();
  403. this.checkMeasurePoint();
  404. this.getMethodOptions();
  405. },
  406. methods: {
  407. // 监听 pagesize 改变的事件
  408. currentChange(currentPage){
  409. this.page=currentPage;
  410. this.initData();
  411. },
  412. sizeChange(currentSize) {
  413. this.size = currentSize;
  414. this.initData();
  415. },
  416. toggleSelection(rows) {
  417. if (rows) {
  418. rows.forEach(row => {
  419. this.$refs.multipleTable.toggleRowSelection(row);
  420. });
  421. } else {
  422. this.$refs.multipleTable.clearSelection();
  423. }
  424. },
  425. handleSelectionChange(val) {
  426. this.multipleSelection = val;
  427. },
  428. //批量处理
  429. updateMany() { //批量修改
  430. this.ManyMPdialogVisible = true;
  431. this.ManyMPtable = this.$refs.multipleTable.selection;
  432. //让modifyreason和modifyrecord变成空
  433. localStorage.setItem('obj', JSON.stringify(this.tableData)); //暂存原始数据
  434. },
  435. cancel() { //批量修改弹窗的“取消按钮”和“关闭按钮(二者效果同理)”,如果取消则恢复原来的数据
  436. let Item = JSON.parse(localStorage.getItem('obj'));
  437. this.tableData = Item;
  438. this.ManyMPdialogVisible = false;
  439. },
  440. saveMany() { //批量修改弹窗的保存按钮
  441. this.ManyMPtable.forEach(item=>{ //映射一下isExistedd
  442. if(item.isExisted=="是") this.$set(item, "isExisted",1);
  443. else if(item.isExisted=="否") this.$set(item, "isExisted", 0);
  444. });
  445. this.postRequest('/dataQualityMeasurePoint/insertManyDataQuality', this.ManyMPtable).then(resp => {
  446. if (resp) {
  447. this.ManyMPdialogVisible = false;
  448. this.$refs.multipleTable.clearSelection(); //取消显示选中
  449. // 映射一下isExisted的显示问题
  450. this.ManyMPtable.forEach(item=>{
  451. if(item.isExisted==1) this.$set(item,"isExisted","是");
  452. else if(item.isExisted==0) this.$set(item,"isExisted","否");
  453. });
  454. }
  455. });
  456. },
  457. // 单个修改-展示修改对话框
  458. updateMeasurePoint(data,row) { // 弹框修改测点,data是那一行的数据,row是行号,从0开始
  459. this.$nextTick(() => {
  460. this.modifyMPdialogVisible = true;
  461. this.$refs.modifyMeasurePoint.init(this.tableData[row],row);
  462. });
  463. },
  464. getChildData(arg){ //数据从子组件传到父组件,通过是否点击了取消按钮判断是否需要恢复数据
  465. let isCancel = arg[0];
  466. let row = arg[1];
  467. let Item = JSON.parse(localStorage.getItem('obj'));
  468. if(isCancel) this.$set(this.tableData,row,Item);
  469. },
  470. checkMeasurePoint(row) { //查看测点更多治理函数
  471. this.$nextTick( () => {
  472. this.checkMPdialogVisible=true;
  473. })
  474. },
  475. getMethodOptions() { //拿到全部的治理函数
  476. this.getRequest('/dataQualityMeasurePoint/getAllMethod').then( resp => {
  477. if(resp) {
  478. this.Methodoptions = resp.data;
  479. }
  480. })
  481. },
  482. initData(){
  483. this.currentSubEquipmentId = parseInt(this.currentSubEquipmentId);
  484. this.getRequest('/dataQualityMeasurePoint/getMeasurePointbySubEquipmentId/?SubEquipmentId=' + this.currentSubEquipmentId +
  485. '&page='+ this.page + '&size='+this.size).then( resp =>{ //通过子设备id拿到所有的测点数据质量要求,并且显示最新版本
  486. if (resp){
  487. this.tableData = resp.data;
  488. // this.ManyMPtable = resp.data;
  489. this.total = resp.data.size;
  490. this.tableData.forEach(item=>{ //拿到各个测点的versionoptions
  491. this.getRequest('/dataQualityMeasurePoint/getVersionOptionsbyMeasurePointId/?MeasurePointId=' + item.mpId).then( resp=> {
  492. if(resp) {
  493. this.$set(item, "versionoptions", resp.data)
  494. }
  495. });
  496. })
  497. }
  498. // console.log(this.tableData);
  499. })
  500. }
  501. },
  502. }
  503. </script>
  504. <style scoped>
  505. </style>