systemManage.vue 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. <template>
  2. <el-card class="box-card">
  3. <template #header>
  4. <div class="card-header">
  5. <span>报警配置</span>
  6. </div>
  7. </template>
  8. <el-tabs type="border-card" v-model="activeTab">
  9. <el-tab-pane
  10. v-for="(item, index) in alarmConfigArray"
  11. :key="index"
  12. :name="item.id"
  13. >
  14. <template #label>
  15. <div class="alartPaneLabel">
  16. <span>{{ getAlartLevelName(item.alarmLevel) }}级报警</span>
  17. <div class="alartBadge" :class="getAlartStatus(item)"></div>
  18. </div>
  19. </template>
  20. <el-form label-width="120px">
  21. <el-form-item label="报警弹窗:">
  22. <el-switch
  23. v-model="item.isAlart"
  24. active-text="弹出"
  25. inactive-text="不弹出"
  26. />
  27. </el-form-item>
  28. <el-form-item label="播放声音:">
  29. <el-switch
  30. v-model="item.isAlarmSound"
  31. active-text="播放"
  32. inactive-text="不播放"
  33. />
  34. </el-form-item>
  35. <el-form-item label="必须确认:">
  36. <el-switch
  37. v-model="item.isContinuousAlarm"
  38. active-text="是"
  39. inactive-text="否"
  40. />
  41. </el-form-item>
  42. </el-form>
  43. </el-tab-pane>
  44. </el-tabs>
  45. <div class="alarmNumBox">
  46. <span>报警气泡列数上限:</span>
  47. <el-input-number
  48. style="margin: 0 10px"
  49. size="small"
  50. v-model="columnNumber"
  51. :step="1"
  52. :min="columnNumberMin"
  53. :max="columnNumberMax"
  54. />
  55. <span>列</span>
  56. </div>
  57. <div class="alarmNumBox">
  58. <span>报警气泡每列至多显示数量:</span>
  59. <el-input-number
  60. style="margin: 0 10px"
  61. size="small"
  62. v-model="alarmShowNumber"
  63. :step="1"
  64. :min="alarmMinNumber"
  65. :max="alarmMaxNumber"
  66. />
  67. <span>个</span>
  68. </div>
  69. <div class="btnBox">
  70. <el-button type="primary" @click="save">保存规则</el-button>
  71. </div>
  72. </el-card>
  73. </template>
  74. <script>
  75. import { getAlartConfig, saveAlartConfig } from "@api/api.js";
  76. export default {
  77. data() {
  78. return {
  79. activeTab: "",
  80. alarmConfigArray: [],
  81. columnNumber: 1,
  82. columnNumberMin: 1,
  83. columnNumberMax: 5,
  84. alarmShowNumber: 0,
  85. alarmMinNumber: 0,
  86. alarmMaxNumber: 7,
  87. };
  88. },
  89. created() {
  90. this.alarmShowNumber = this.$store.state.alarmShowNumber;
  91. this.columnNumber = this.$store.state.columnNumber;
  92. if (localStorage.getItem("alarmConfigArray")) {
  93. this.alarmConfigArray = JSON.parse(
  94. localStorage.getItem("alarmConfigArray")
  95. );
  96. } else {
  97. this.alarmConfigArray = [
  98. {
  99. id: "1",
  100. alarmLevel: 1,
  101. isAlart: false,
  102. isAlarmSound: false,
  103. isContinuousAlarm: false,
  104. },
  105. {
  106. id: "2",
  107. alarmLevel: 2,
  108. isAlart: false,
  109. isAlarmSound: false,
  110. isContinuousAlarm: false,
  111. },
  112. {
  113. id: "3",
  114. alarmLevel: 3,
  115. isAlart: true,
  116. isAlarmSound: false,
  117. isContinuousAlarm: false,
  118. },
  119. {
  120. id: "4",
  121. alarmLevel: 4,
  122. isAlart: true,
  123. isAlarmSound: true,
  124. isContinuousAlarm: false,
  125. },
  126. {
  127. id: "5",
  128. alarmLevel: 5,
  129. isAlart: true,
  130. isAlarmSound: true,
  131. isContinuousAlarm: true,
  132. },
  133. ];
  134. localStorage.setItem(
  135. "alarmConfigArray",
  136. JSON.stringify(this.alarmConfigArray)
  137. );
  138. }
  139. this.activeTab = this.activeTab || this.alarmConfigArray?.[0]?.id;
  140. // this.getConfigArray();
  141. },
  142. methods: {
  143. getConfigArray() {
  144. this.alarmConfigArray = [];
  145. getAlartConfig().then((res) => {
  146. res.data.forEach((ele) => {
  147. for (let key in ele) {
  148. if (
  149. this.BASE.getType(ele[key]) === "number" &&
  150. key !== "alarmLevel"
  151. ) {
  152. ele[key] = !!ele[key];
  153. }
  154. }
  155. });
  156. this.alarmConfigArray = res.data;
  157. this.activeTab = this.activeTab || res?.data?.[0]?.id;
  158. });
  159. },
  160. getAlartStatus(alartItem) {
  161. if (
  162. alartItem.isAlart ||
  163. alartItem.isAlarmSound ||
  164. alartItem.isContinuousAlarm
  165. ) {
  166. return "badgeWork";
  167. } else {
  168. return "badgeNotworK";
  169. }
  170. },
  171. getAlartLevelName(lv) {
  172. if (lv === 1) {
  173. return "低级";
  174. } else if (lv === 2) {
  175. return "低中级";
  176. } else if (lv === 3) {
  177. return "中级";
  178. } else if (lv === 4) {
  179. return "中高级";
  180. } else if (lv === 5) {
  181. return "高级级";
  182. }
  183. },
  184. save() {
  185. // let configArray = this.BASE.deepCopy(this.alarmConfigArray);
  186. // let promiseArray = [];
  187. // configArray.forEach((ele) => {
  188. // for (let key in ele) {
  189. // if (ele[key] == true) {
  190. // ele[key] = 1;
  191. // } else if (ele[key] == false) {
  192. // ele[key] = 0;
  193. // }
  194. // }
  195. // promiseArray.push(saveAlartConfig(ele));
  196. // });
  197. // Promise.all(promiseArray).then(() => {
  198. // this.BASE.showMsg({
  199. // type: "success",
  200. // msg: "修改成功",
  201. // });
  202. // this.$store.commit("changeAlarmResetFlg");
  203. // this.$store.commit("changeAlarmShowNumber", this.alarmShowNumber);
  204. // this.$store.commit("changeColumnNumber", this.columnNumber);
  205. // localStorage.setItem("alarmShowNumber", this.alarmShowNumber);
  206. // localStorage.setItem("columnNumber", this.columnNumber);
  207. // this.getConfigArray();
  208. // });
  209. this.$store.commit("changeAlarmResetFlg");
  210. this.$store.commit("changeAlarmShowNumber", this.alarmShowNumber);
  211. this.$store.commit("changeColumnNumber", this.columnNumber);
  212. localStorage.setItem("alarmShowNumber", this.alarmShowNumber);
  213. localStorage.setItem("columnNumber", this.columnNumber);
  214. localStorage.setItem(
  215. "alarmConfigArray",
  216. JSON.stringify(this.alarmConfigArray)
  217. );
  218. this.BASE.showMsg({
  219. type: "success",
  220. msg: "修改成功",
  221. });
  222. },
  223. },
  224. watch: {
  225. "$store.state.alarmShowNumber"(value) {
  226. this.alarmShowNumber = value;
  227. },
  228. "$store.state.columnNumber"(value) {
  229. this.columnNumber = value;
  230. },
  231. },
  232. };
  233. </script>
  234. <style lang="scss" scoped>
  235. .alartPaneLabel {
  236. position: relative;
  237. .alartBadge {
  238. position: absolute;
  239. right: -10px;
  240. top: 8px;
  241. width: 8px;
  242. height: 8px;
  243. border-radius: 50%;
  244. overflow: hidden;
  245. }
  246. }
  247. .alarmNumBox {
  248. width: calc(100% - 30px);
  249. display: flex;
  250. justify-content: flex-start;
  251. align-items: center;
  252. color: var(--el-text-color-regular);
  253. font-size: var(--el-form-label-font-size);
  254. margin: 12px 0;
  255. padding: 0 15px;
  256. }
  257. .badgeWork {
  258. background: var(--el-color-success);
  259. }
  260. .badgeNotworK {
  261. background: var(--el-color-error);
  262. }
  263. </style>