index.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. <template>
  2. <div class="newScene">
  3. <div class="newScene-head flex">
  4. <div class="manageTitle">预警报警场景</div>
  5. <el-button type="primary" plain @click="handleAdd" size="small">新增</el-button>
  6. </div>
  7. <div v-loading="loading" element-loading-text="拼命加载中" element-loading-spinner="el-icon-loading" element-loading-background="rgba(0, 0, 0, 0.8)" class="newScene-content">
  8. <el-table v-el-table-infinite-scroll="load" :data="tableData" border height="100%" style="width: 100%">
  9. <!-- <el-table-column prop="alarmsceneID" label="场景ID">
  10. </el-table-column> -->
  11. <el-table-column prop="alarmsceneName" label="场景描述">
  12. </el-table-column>
  13. <el-table-column prop="alarmscenerule" label="场景规则">
  14. </el-table-column>
  15. <el-table-column label="操作" width="300px">
  16. <template slot-scope="scope">
  17. <el-button type="primary" plain @click="handleEdit(scope.row)" size="small">编辑规则</el-button>
  18. <el-button type="primary" plain @click="handleEditCj(scope.row)" size="small">编辑策略</el-button>
  19. <el-button type="danger" plain @click="handleRemove(scope.row)" size="small">删除</el-button>
  20. </template>
  21. </el-table-column>
  22. </el-table>
  23. </div>
  24. <!--高级查询-->
  25. <Dialog :flag="dialogFlag" width="852px">
  26. <AdvanceQuery :tableColMunt="tableCols" :tableMix="tableMix" @getColData="getColData" @dialogHide="dialogHide" />
  27. </Dialog>
  28. <!--删除-->
  29. <Dialog :flag="rmFlag">
  30. <div class="airportInfoDialog">
  31. <div class="title del-title">删除</div>
  32. <div class="content del-content">
  33. <span class="el-icon-error error r10"></span>您是否确认删除<span class="error l10">{{ remObj.alarmsceneName }}</span>
  34. </div>
  35. <div class="foot right Delfoot">
  36. <el-button size="medium" class="r24" @click="tableRemove" type="danger">删除</el-button>
  37. <el-button size="medium" @click="rmFlag = false">取消</el-button>
  38. </div>
  39. </div>
  40. </Dialog>
  41. </div>
  42. </template>
  43. <script>
  44. import Dialog from "@/layout/components/Dialog/index.vue";
  45. import AdvanceQuery from './components/advanceQuery.vue';
  46. import { getAuthData } from "@/utils/validate";
  47. import { Query, newData, modifyData, moveData } from "@/api/webApi";
  48. import pb from '@/layout/mixin/publicFunc'
  49. export default {
  50. name: 'NewScene',
  51. mixins: [pb],
  52. components: { Dialog, AdvanceQuery },
  53. data () {
  54. return {
  55. dialogFlag: false,
  56. tableCols: [], //表头数据
  57. tableMix: [],
  58. tableData: [],
  59. page: 0,
  60. pageSize: 20,
  61. dataContent: {},
  62. authId: '',
  63. noMore: false,
  64. loading: false,
  65. urlParams: '',
  66. serviceId: '',
  67. queryId: '',
  68. dataType: 'add',
  69. remObj: {},
  70. rmFlag: false,
  71. }
  72. },
  73. created () {
  74. const { query } = this.$route
  75. const { auth_id } = this.$route.meta
  76. const { arrs } = getAuthData(auth_id)
  77. const table = arrs.filter(item => item.auth_type == 4)
  78. this.urlParams = query
  79. if (table && table.length) {
  80. const obj = table[0]
  81. this.authId = obj.auth_id
  82. this.queryId = obj.queryTemplateID
  83. } else {
  84. if (auth_id) {
  85. this.queryId = auth_id
  86. this.authId = auth_id
  87. }
  88. }
  89. this.getRule()
  90. },
  91. methods: {
  92. //获取高级查询条件
  93. getColData (val) {
  94. const chName = []
  95. const arr = [...val]
  96. const arrAll = _.cloneDeep(this.tableCols)
  97. arrAll.forEach(item => {
  98. arr.map(p => {
  99. if (item.columnName == p.column) {
  100. const column = item.columnLabel
  101. const comparator = this.formatFh(p.comparator)
  102. const value = p.value
  103. const connector = p.connector == 'and' ? '并且' : '或者'
  104. const alarmsceneName = column + comparator + value + connector
  105. chName.push(alarmsceneName)
  106. }
  107. })
  108. })
  109. if (this.dataType == 'add') {
  110. this.dataChange(arr, chName, 1)
  111. } else {
  112. this.dataChange(arr, chName, 2)
  113. }
  114. },
  115. //新增
  116. async dataChange (a1, a2, event) {
  117. const newVal = []
  118. const newObj = {}
  119. const obj = {
  120. alarmsceneName: a2.join(''),
  121. alarmscenerule: JSON.stringify(a1)
  122. }
  123. newObj.Value = obj
  124. if (event == 2) {
  125. newObj.filter = {
  126. alarmsceneID: this.remObj.alarmsceneID
  127. }
  128. }
  129. newVal.push(newObj)
  130. const result = event == 1 ? await newData({
  131. serviceId: this.serviceId,
  132. dataContent: newVal,
  133. event: `${event}`
  134. }) : await modifyData({
  135. serviceId: this.serviceId,
  136. dataContent: newVal,
  137. event: `${event}`
  138. })
  139. if (result.code == 0) {
  140. this.$message.success(result.message)
  141. this.resetTable()
  142. this.load()
  143. } else {
  144. this.$message.error(result.message)
  145. this.dialogFlag = false
  146. }
  147. },
  148. //新增
  149. handleAdd () {
  150. this.dataType = 'add'
  151. this.dialogFlag = true
  152. },
  153. //编辑
  154. handleEdit (row) {
  155. this.dataType = 'edit'
  156. this.dialogFlag = true
  157. this.remObj = row
  158. this.tableMix = JSON.parse(row.alarmscenerule)
  159. },
  160. handleEditCj (row) {
  161. this.$router.push({
  162. path: 'alarmstrategySetting',
  163. query: {
  164. alarmsceneID: row.alarmsceneID
  165. }
  166. })
  167. },
  168. //删除
  169. handleRemove (row) {
  170. this.rmFlag = true
  171. this.remObj = row
  172. },
  173. //表格-删除-确认
  174. async tableRemove () {
  175. const { code } = await moveData({
  176. serviceId: this.serviceId,
  177. dataContent: [
  178. {
  179. alarmsceneID: this.remObj.alarmsceneID
  180. }
  181. ],
  182. event: '3'
  183. })
  184. if (code == 0) {
  185. this.$message.success('删除成功')
  186. this.resetTable()
  187. this.load()
  188. } else {
  189. this.$message.success('删除失败')
  190. }
  191. this.rmFlag = false
  192. },
  193. formatFh (fh) {
  194. switch (fh) {
  195. case '=':
  196. return '等于'
  197. break;
  198. case '>':
  199. return '大于'
  200. break;
  201. case '<':
  202. return '小于'
  203. break;
  204. case '>=':
  205. return '大于等于'
  206. break;
  207. case '<=':
  208. return '小于等于'
  209. break;
  210. default:
  211. break;
  212. }
  213. },
  214. //高级查询关闭
  215. dialogHide () {
  216. this.dialogFlag = false
  217. },
  218. load () {
  219. if (this.noMore || this.loading) {
  220. return
  221. }
  222. this.getQuery(this.queryId)
  223. },
  224. resetTable () {
  225. this.dataContent = {}
  226. this.page = 0;
  227. this.noMore = false;
  228. this.tableData = [];
  229. },
  230. async getRule () {
  231. const { code, returnData } = await this.getQueryList(200252)
  232. if (code == 0 && returnData && returnData.length) {
  233. const arrData = []
  234. const arrObj = [...returnData][0]
  235. for (const key in arrObj) {
  236. const ele = arrObj[key]
  237. const obj = {
  238. "columnName": key,
  239. "columnLabel": ele,
  240. "needShow": 1,
  241. }
  242. arrData.push(obj)
  243. }
  244. this.tableCols = arrData
  245. } else {
  246. }
  247. },
  248. //获取表格数据
  249. async getQuery (id, dataContent = this.dataContent) {
  250. try {
  251. this.loading = true;
  252. const { code, returnData } = await Query({
  253. serviceId: id,
  254. page: ++this.page,
  255. pageSize: this.pageSize,
  256. dataContent,
  257. authId: this.authId,
  258. event: '0'
  259. });
  260. if (code == 0) {
  261. if (returnData.length === 0) {
  262. this.page--;
  263. this.noMore = true;
  264. this.loading = false;
  265. }
  266. this.tableData.push(...returnData);
  267. // this.tableCols = columnset;
  268. this.serviceId = id;
  269. setTimeout(() => {
  270. this.loading = false;
  271. }, 100);
  272. } else {
  273. this.page--;
  274. this.loading = false;
  275. this.$message.error("获取表格数据失败");
  276. }
  277. } catch (error) {
  278. this.page--;
  279. this.loading = false;
  280. }
  281. },
  282. }
  283. }
  284. </script>
  285. <style lang="scss" scoped>
  286. .newScene {
  287. padding: 24px;
  288. height: calc(100vh - 100px);
  289. &-head {
  290. margin-bottom: 22px;
  291. }
  292. &-content {
  293. height: calc(100% - 40px);
  294. ::v-deep .el-table {
  295. thead {
  296. .cell {
  297. color: #000;
  298. }
  299. }
  300. .cell {
  301. text-align: center;
  302. }
  303. }
  304. }
  305. }
  306. </style>