footer.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  1. <template>
  2. <footer class="footer">
  3. <div class="foot-connection">
  4. <strong>Connection</strong>
  5. <span>OK</span>
  6. </div>
  7. <div class="foot-numbering">
  8. <span class="num1">{{eventState.critical}}</span>
  9. <span class="num2">{{eventState.major}}</span>
  10. <span class="num3">{{eventState.minor}}</span>
  11. </div>
  12. <div class="foot-state" v-show="eventState.latestSeverity">{{eventState.latestSeverity}}</div>
  13. <p class="foot-txt">
  14. <!-- Sbi-0-chosim[server]-198 HTTP2 CONNECTION ALARM (sysId=821, rsysId=198, rsysId=198, rsysName=AMF[server]) -->
  15. {{eventState.latestCause +' '+eventState.latestLocation}}
  16. </p>
  17. <div class="foot-btn-wrap">
  18. <!-- <button><i class="ico ico1"></i>Event View</button> -->
  19. <button class="evt-view" @click="fnEventView()"><i class="ico ico1"></i>Event View</button>
  20. </div>
  21. <span class="foot-logo">SAMSUNG SDS</span>
  22. </footer>
  23. <!-- 이벤트 이력 -->
  24. <div class="footer--dialog" :class="[eventViewPop == true ? 'active' : '']">
  25. <div class="footer--dialog--after"></div>
  26. <div class="v-common-dialog-wrapper custom-dialog">
  27. <div class="modal-tit">
  28. <strong>이벤트 이력</strong>
  29. <span class="bar"></span>
  30. <v-switch v-model="curAlarm" label="CURRENT ALARM" hide-details></v-switch>
  31. <div class="select-on">
  32. <v-btn class="custom-btn btn-blue btn-evt mini" :disabled="!curAlarm" @click="fnClearAlarmConfirm()" v-if="selectedItem.length"><i class="ico"></i>알람 해제</v-btn>
  33. <v-checkbox class="custom-check type2" hide-details v-if="selectedItem.length" readonly v-model="defaultCheckbox" style="pointer-events:none;">
  34. <template v-slot:label>
  35. 목록 <span class="strong">{{selectedItem.length}}</span>건 선택
  36. </template>
  37. </v-checkbox>
  38. </div>
  39. <div class="btn-wrap">
  40. <v-btn class="custom-btn mini btn-white btn-pip" @click="fnEventViewOpenPop()"><i class="ico"></i>전체 보기</v-btn>
  41. <v-btn class="custom-btn btn-white mini" @click="fnReset()" v-if="!curAlarm"><i class="ico"></i>초기화</v-btn>
  42. <v-btn class="custom-btn btn-gray mini" @click="fnFixWindow()"><i class="ico"></i>창 고정</v-btn>
  43. </div>
  44. </div>
  45. <div class="modal-cont">
  46. <div class="tbl-wrapper">
  47. <div class="tbl-wrap">
  48. <ag-grid-vue
  49. style="width:100%; height:calc(50vh - 7.13rem)"
  50. class="ag-theme-quartz"
  51. :gridOptions="gridOptions"
  52. :columnDefs="getHeaders"
  53. :defaultColDef="defaultColDef"
  54. :rowData="listObj.rowData"
  55. :suppressPaginationPanel="true"
  56. :suppressScrollOnNewData="true"
  57. @selection-changed="fnOnSelectChange"
  58. @rowClicked="fnRowClick"
  59. @grid-ready="fnOnGridReady"
  60. >
  61. </ag-grid-vue>
  62. </div>
  63. </div>
  64. </div>
  65. <div class="foot-btn-wrap">
  66. <button class="evt-view" @click="fnEventView()"><i class="ico ico1"></i>Event View</button>
  67. </div>
  68. </div>
  69. </div>
  70. <!-- 이벤트 이력 상세 정보 -->
  71. <eventDetailView ref="refEventDetailView" :isEventDetailModal="isEventDetailModal" :eventDetailData="eventDetailData" :currentAlarmYn="curAlarm" @closeModal="fnCloseEventDetailModal"/>
  72. </template>
  73. <script setup>
  74. import customNullValue from '@/components/cellRenderer/customNullValue.vue';
  75. import "ag-grid-community/styles/ag-grid.css"; // Mandatory CSS required by the Data Grid
  76. import "ag-grid-community/styles/ag-theme-quartz.css"; // Optional Theme applied to the Data Grid
  77. import { AgGridVue } from "ag-grid-vue3"; // Vue Data Grid Component
  78. import { useI18n } from 'vue-i18n';
  79. import eventDetailView from './footer/eventDetailView.vue';
  80. /***********************
  81. * plugins inject
  82. ************************/
  83. const {$toast, $log, $dayjs, $eventBus } = useNuxtApp()
  84. const i18n = useI18n()
  85. /***********************
  86. * data & created
  87. ************************/
  88. const pageId = 'footer'
  89. const eventClientId = ref('')
  90. const eventState = ref({
  91. critical: 0,
  92. major: 0,
  93. minor: 0,
  94. warning: 0,
  95. latestCause: '', // 최근발생이벤트 원인
  96. latestLocation: '', // 최근발생이벤트 위치
  97. latestSeverity: '' // 최근발생이벤트 심각도
  98. })
  99. const eventInterval = ref(null)
  100. const curAlarm = ref(false)
  101. const gridApi = shallowRef() // Grid Api
  102. const remToPx = () => parseFloat(getComputedStyle(document.documentElement).fontSize);
  103. const rowHeightRem = 3.125; // 원하는 rem 값
  104. const rowHeightPx = rowHeightRem * remToPx();
  105. // grid default 옵션
  106. const defaultColDef = ref({
  107. lockVisible: true, // 열을 그리드 밖으로 꺼내지 않음
  108. })
  109. let listObj = ref({
  110. currentData: [],
  111. eventData: [],
  112. rowData: []
  113. })
  114. const objSlt = ref({
  115. eventTypeList: [],
  116. severityList: [],
  117. alarmGroupList: [],
  118. alarmStateList: []
  119. })
  120. const getHeaders = computed(() => {
  121. let headers = [
  122. { field: "no", headerName: "No", width:100, cellRenderer: customNullValue},
  123. { field: "eventType", headerName: "이벤트 유형", width:130, cellRenderer: customNullValue},
  124. { field: "eventCode", headerName: "이벤트 코드", width:130, cellRenderer: customNullValue},
  125. { field: "severity", headerName: "심각도", width:130, cellRenderer: fnSeverityRenderer},
  126. { field: "alarmGroup", headerName: "알람 그룹", cellRenderer: customNullValue},
  127. { field: "location", headerName: "위치", cellRenderer: customNullValue},
  128. { field: "probcause", headerName: "발생 원인", cellRenderer: customNullValue},
  129. { field: "alarmTime", headerName: "발생 시간", cellRenderer: customNullValue},
  130. { field: "clearTime", headerName: "해제 시간", cellRenderer: customNullValue},
  131. { field: "alarmState", headerName: "상태", cellRenderer: customNullValue}
  132. ]
  133. if(curAlarm.value){
  134. headers.unshift({ field: "checkbox", headerName: "", checkboxSelection: true, headerCheckboxSelection: true,
  135. showDisabledCheckboxes: true, //비활성화 체크박스 보이게 설정
  136. width:50, checkboxSelection: params => {
  137. let activeState = ['Uncleared', 'Audit', 'Unack', 'Ack']
  138. let isCheckBoxStatus = (params.data.neId === -1 && params.data.eventType === 'Alarm' && _includes(activeState, params.data.alarmState))
  139. return isCheckBoxStatus // alarmState가 'Uncleared'일 경우만 체크박스 활성화
  140. }
  141. })
  142. }
  143. return headers
  144. })
  145. const gridOptions = {
  146. columnDefs: getHeaders.value,
  147. rowData: listObj.value.rowData, // 테이블 데이터
  148. rowSelection : 'multiple',
  149. suppressMovableColumns: false,
  150. autoSizeStrategy: {
  151. type: "fitGridWidth", // width맞춤
  152. },
  153. headerHeight : rowHeightPx,
  154. rowHeight: rowHeightPx,
  155. pagination: false,
  156. suppressPaginationPanel: true, // 하단 default 페이징 컨트롤 숨김
  157. suppressRowClickSelection: true, // 행 클릭 체크박스 무시
  158. localeText: {
  159. noRowsToShow: i18n.t('common.noData')
  160. },
  161. isRowSelectable: (rowNode) => {
  162. // 나이가 30 미만이면 체크박스 비활성화
  163. let activeState = ['Uncleared', 'Audit', 'Unack', 'Ack']
  164. let isCheckBoxStatus = (rowNode.data.neId === -1 && rowNode.data.eventType === 'Alarm' && _includes(activeState, rowNode.data.alarmState))
  165. return isCheckBoxStatus
  166. }
  167. // onRowSelected: (event) => {
  168. // // 조건에 따라 선택 비활성화 처리
  169. // if (event.node.data.neId === -1 && event.node.data.eventType === 'Alarm') {
  170. // //console.log(event.node.data.neId)
  171. // //console.log(event.node.data.eventType)
  172. // // 선택 비활성화
  173. // event.node.setSelected(false)
  174. // }
  175. // },
  176. // onSelectionChanged: () => {
  177. // const selectedNodes = gridOptions.api.getSelectedNodes()
  178. // console.log(selectedNodes)
  179. // selectedNodes.forEach(node => {
  180. // console.log(node.data.neId)
  181. // // if (node.data.age < 30) {
  182. // // gridOptions.api.deselectNode(node); // 선택 해제
  183. // // }
  184. // })
  185. // }
  186. }
  187. let eventViewPop = ref(false); // 이벤트 이력 팝업
  188. const eventDetailData = ref({}) // 이벤트뷰어 상세 데이터
  189. const refEventDetailView = ref(null) // 이벤트뷰어 상세 ref 참조
  190. const isEventDetailModal = ref(false) // 이벤트뷰어 상세 모달
  191. const getEventTypeText = computed(() => {
  192. return (val) => {
  193. if(!useUtil.isNull(val) && val !== '-') {
  194. let titleValue = useUtil.nvl(_find(objSlt.value.eventTypeList, { value: val }), '-')
  195. return titleValue.title
  196. }else{
  197. return val
  198. }
  199. }
  200. })
  201. const getSeverityText = computed(() => {
  202. return (val) => {
  203. if(!useUtil.isNull(val) && val !== '-') {
  204. let titleValue = useUtil.nvl(_find(objSlt.value.severityList, { value: val }), '-')
  205. return titleValue.title
  206. }else{
  207. return val
  208. }
  209. }
  210. })
  211. const getAlarmGroupText = computed(() => {
  212. return (val) => {
  213. if(!useUtil.isNull(val) && val !== '-') {
  214. let titleValue = useUtil.nvl(_find(objSlt.value.alarmGroupList, { value: val }), '-')
  215. return titleValue.title
  216. }else{
  217. return val
  218. }
  219. }
  220. })
  221. const getAlarmStateText = computed(() => {
  222. return (val) => {
  223. if(!useUtil.isNull(val) && val !== '-') {
  224. let titleValue = useUtil.nvl(_find(objSlt.value.alarmStateList, { value: val }), '-')
  225. return titleValue.title
  226. }else{
  227. return val
  228. }
  229. }
  230. })
  231. let fixWindowYN = ref((useUtil.nvl(localStorage.getItem('eventViewFix'), 'N')))
  232. if(fixWindowYN.value === 'Y') {
  233. eventViewPop.value = true
  234. } else {
  235. eventViewPop.value = false
  236. }
  237. const selectedItem = ref([]) // 선택한항목 리스트
  238. const defaultCheckbox = ref(true) // ..건 선택 체크박스 상태
  239. watchEffect(() =>{
  240. // 감시하고자 하는 데이터를 해당 블럭내에서 사용하면 호출된다.
  241. // getLang.value를 감시하는 상태
  242. fnGetEnumCode(useLangStore().getLang)
  243. })
  244. watch(() => curAlarm.value, (newV, oldV) => {
  245. fnGetEventViewer()
  246. },{ deep: true, immediate: false })
  247. onMounted(() => {
  248. if(!useUtil.isNull(eventInterval.value)) {
  249. clearInterval(eventInterval.value)
  250. }
  251. fnGetEventViewer()
  252. eventInterval.value = setInterval(() => {
  253. fnGetEventViewer()
  254. }, 5000)
  255. //}, 1000 * 30)
  256. })
  257. $eventBus.off('SET_FOOTER')
  258. $eventBus.on('SET_FOOTER', () => {
  259. //console.log('%c [SET_FOOTER]' ,'color:#bada55')
  260. clearInterval(eventInterval.value)
  261. })
  262. $eventBus.off('DELETE_CLEAR_ALARM')
  263. $eventBus.on('DELETE_CLEAR_ALARM', () => {
  264. fnClearAlarm()
  265. })
  266. /***********************
  267. * Methods
  268. ************************/
  269. /**
  270. * @SCRIPT
  271. * ENUM 업데이트
  272. * @param lang
  273. */
  274. function fnGetEnumCode(lang){
  275. lang = useUtil.nvl(lang, 'kr')
  276. let objEnum = useEnumCode.getEnumCode(lang)
  277. objSlt.value.alarmStateList = [...objEnum.alarmState]
  278. objSlt.value.alarmGroupList = [...objEnum.alarmGroup]
  279. objSlt.value.severityList = [...objEnum.severity]
  280. objSlt.value.eventTypeList = [...objEnum.eventType]
  281. }
  282. /**
  283. * @SCRIPT
  284. * 이벤트뷰어 리스트 단건 클릭 이벤트
  285. */
  286. function fnRowClick(params){
  287. eventDetailData.value = params.data
  288. isEventDetailModal.value = true
  289. // 데이터 초기화
  290. refEventDetailView.value.fnInit()
  291. }
  292. /**
  293. * @SCRIPT
  294. * 이벤트뷰어 상세페이지 닫기
  295. */
  296. function fnCloseEventDetailModal() {
  297. isEventDetailModal.value = false
  298. }
  299. /**
  300. * @SCRIPT
  301. * Grid 데이터 바인딩
  302. */
  303. function fnOnGridReady(params){
  304. gridApi.value = params.api
  305. // gridApi.value.api.setRowData(rowData.value);
  306. //fnGetLoginHistory()
  307. }
  308. /**
  309. * @SCRIPT
  310. * 초기화 버튼 이벤트
  311. */
  312. function fnReset() {
  313. gridApi.value.setGridOption('rowData', [])
  314. }
  315. /**
  316. * @SCRIPT
  317. * 창 고정 버튼 이벤트
  318. */
  319. function fnFixWindow() {
  320. if(fixWindowYN.value === 'Y') {
  321. fixWindowYN.value = 'N'
  322. eventViewPop.value = false
  323. localStorage.setItem('eventViewFix', 'N')
  324. } else {
  325. fixWindowYN.value = 'Y'
  326. eventViewPop.value = true
  327. localStorage.setItem('eventViewFix', 'Y')
  328. }
  329. }
  330. /**
  331. * @SCRIPT
  332. * 이벤트뷰어 활성화 이벤트
  333. */
  334. function fnEventView() {
  335. if(fixWindowYN.value === 'N') {
  336. // 창고정이 꺼져있는경우
  337. if(eventViewPop.value) {
  338. eventViewPop.value = false
  339. } else {
  340. eventViewPop.value = true
  341. }
  342. } else {
  343. eventViewPop.value = true
  344. }
  345. }
  346. /**
  347. * @SCRIPT
  348. * 체크박스 선택 시 이벤트
  349. */
  350. function fnOnSelectChange() {
  351. const selectedRows = gridApi.value.getSelectedRows()
  352. let arrData = []
  353. selectedRows.forEach((row) => {
  354. arrData.push(row)
  355. })
  356. selectedItem.value = arrData
  357. }
  358. /**
  359. * @SCRIPT
  360. * 이벤트뷰어 윈도우 팝업 이벤트
  361. */
  362. // const eventAllPop = () => { // 이벤트 이력 전체 보기
  363. // window.open("/design/evtHisPip", "_blank", "width=");
  364. // components\common\footer\eventViewWindowPop.vue
  365. // }
  366. function fnEventViewOpenPop() {
  367. const width = window.screen.width
  368. const height = window.screen.height
  369. const url = window.location.origin+'/view/home/eventView/eventViewWindowPop'
  370. const popupWindow = window.open(url, '_blank', `width=${width},height=${height},top=0,left=0`)
  371. if (popupWindow) {
  372. popupWindow.focus()
  373. }
  374. // 전체보기에 대한 이벤트 처리
  375. // popupWindow.onload = function () {
  376. // let dataObj = []
  377. // console.log(':::::::::::::fnEventViewOpenPop:::::::::::::')
  378. // dataObj = listObj.value.currentData
  379. // dataObj.clientId = eventClientId.value
  380. // //dataObj.clientId = eventClientId.value
  381. // console.log(dataObj)
  382. // popupWindow.postMessage({message: JSON.stringify(dataObj)}, '*')
  383. // }
  384. }
  385. /**
  386. * @API
  387. * event viewer
  388. */
  389. function fnGetEventViewer(){
  390. let _req = {}
  391. _req.clientId = useUtil.nvl(eventClientId.value, -1)
  392. useAxios().post(useApi.eventViewer, _req).then((res) => {
  393. //fetch('/test.json').then(response => response.json()).then(res => {
  394. let temp = []
  395. let currentTotalCnt = 0
  396. let eventTotalCnt = 0
  397. let resClientId = res.data.data.clientId
  398. let curAlarm = res.data.data.curAlarm // {critical: 0, major: 0, minor: 0, warning: 0}
  399. let currentList = res.data.data.curAlarms
  400. let eventList = res.data.data.events
  401. eventTotalCnt = eventList.length
  402. currentTotalCnt = currentList.length
  403. eventClientId.value = resClientId
  404. // 상태값 데이터 셋팅
  405. eventState.value = {
  406. critical: curAlarm.critical,
  407. major: curAlarm.major,
  408. minor: curAlarm.minor,
  409. warning: curAlarm.warning,
  410. latestCause: useUtil.nvl(curAlarm.latestCause, ''),
  411. latestLocation: useUtil.nvl(curAlarm.latestLocation, ''),
  412. latestSeverity: curAlarm.latestSeverity
  413. }
  414. // CURRENT ALARM 활성화 시 보여질 데이터셋팅 실시간으로 값이 쌓이는 형식
  415. if(currentTotalCnt > 0) {
  416. currentList.forEach((item, idx) => {
  417. let obj = {}
  418. obj.no = idx + 1
  419. obj.seqNo = useUtil.nvl(item.seqNo, '-')
  420. obj.neId = useUtil.nvl(item.neId, '-')
  421. obj.neName = useUtil.nvl(item.neName, '-')
  422. obj.neGroup = useUtil.nvl(item.neGroup, '-')
  423. obj.emsName = useUtil.nvl(item.emsName, '-')
  424. obj.location = useUtil.nvl(item.location, '-')
  425. obj.eventCode = useUtil.nvl(item.eventCode, '-')
  426. obj.probcause = useUtil.nvl(item.probcause, '-')
  427. obj.tenantName = useUtil.nvl(item.tenantName, '-')
  428. obj.clearUser = useUtil.nvl(item.clearUser, '-')
  429. obj.clearSystem = useUtil.nvl(item.clearSystem, '-')
  430. obj.clearType = useUtil.nvl(item.clearType, '-')
  431. obj.ackTime = useUtil.nvl(item.ackTime, '-')
  432. obj.ackUser = useUtil.nvl(item.ackUser, '-')
  433. obj.ackSystem = useUtil.nvl(item.ackSystem, '-')
  434. obj.modifyUser = useUtil.nvl(item.modifyUser, '-')
  435. obj.modifySystem = useUtil.nvl(item.modifySystem, '-')
  436. obj.additionalText = useUtil.nvl(item.additionalText, '-')
  437. obj.eventType = getEventTypeText.value(item.eventType)
  438. obj.severity = getSeverityText.value(item.severity)
  439. obj.alarmGroup = getAlarmGroupText.value(item.alarmGroup)
  440. obj.alarmState = getAlarmStateText.value(item.alarmState)
  441. obj.alarmTime = useUtil.fnNullCheckFormatDate(item.alarmTime)
  442. obj.clearTime = useUtil.fnNullCheckFormatDate(item.clearTime)
  443. temp.push(obj)
  444. })
  445. listObj.value.currentData = _cloneDeep(temp)
  446. }
  447. // CURRENT ALARM 비활성화 시 보여질 이벤트데이터 셋팅 실시간으로 값이 쌓이는 형식
  448. if(eventTotalCnt > 0) {
  449. eventList.forEach((item) => {
  450. let obj = {}
  451. obj.no = 0
  452. obj.seqNo = useUtil.nvl(item.seqNo, '-')
  453. obj.neId = useUtil.nvl(item.neId, '-')
  454. obj.neName = useUtil.nvl(item.neName, '-')
  455. obj.neGroup = useUtil.nvl(item.neGroup, '-')
  456. obj.emsName = useUtil.nvl(item.emsName, '-')
  457. obj.location = useUtil.nvl(item.location, '-')
  458. obj.eventCode = useUtil.nvl(item.eventCode, '-')
  459. obj.probcause = useUtil.nvl(item.probcause, '-')
  460. obj.tenantName = useUtil.nvl(item.tenantName, '-')
  461. obj.clearUser = useUtil.nvl(item.clearUser, '-')
  462. obj.clearSystem = useUtil.nvl(item.clearSystem, '-')
  463. obj.clearType = useUtil.nvl(item.clearType, '-')
  464. obj.ackTime = useUtil.nvl(item.ackTime, '-')
  465. obj.ackUser = useUtil.nvl(item.ackUser, '-')
  466. obj.ackSystem = useUtil.nvl(item.ackSystem, '-')
  467. obj.modifyUser = useUtil.nvl(item.modifyUser, '-')
  468. obj.modifySystem = useUtil.nvl(item.modifySystem, '-')
  469. obj.additionalText = useUtil.nvl(item.additionalText, '-')
  470. obj.eventType = getEventTypeText.value(item.eventType)
  471. obj.severity = getSeverityText.value(item.severity)
  472. obj.alarmGroup = getAlarmGroupText.value(item.alarmGroup)
  473. obj.alarmState = getAlarmStateText.value(item.alarmState)
  474. obj.alarmTime = useUtil.fnNullCheckFormatDate(item.alarmTime)
  475. obj.clearTime = useUtil.fnNullCheckFormatDate(item.clearTime)
  476. listObj.value.eventData.unshift(obj)
  477. })
  478. }
  479. // 최종 데이터 가공
  480. fnSetData()
  481. $log.debug("[footer][fnGetEventViewer][success]")
  482. }).catch((error)=>{
  483. $log.debug("[footer][fnGetEventViewer][error]")
  484. useErrorHandler().fnSetCommErrorHandle(error, fnGetEventViewer)
  485. }).finally(()=>{
  486. $log.debug("[footer][fnGetEventViewer][finished]")
  487. })
  488. }
  489. /**
  490. * @API_REF
  491. * 조회 API 최종 가공 데이터
  492. */
  493. function fnSetData() {
  494. listObj.value.rowData = []
  495. if(curAlarm.value) {
  496. // currentAlarm이 활성화 되어있는 경우
  497. listObj.value.rowData = listObj.value.currentData
  498. } else {
  499. _each(listObj.value.eventData, (item, idx) => {
  500. item.no = idx + 1
  501. })
  502. listObj.value.rowData = listObj.value.eventData
  503. }
  504. gridApi.value.setGridOption('rowData', listObj.value.rowData)
  505. }
  506. /**
  507. * @API_REF
  508. * 데이터 가공 참조
  509. */
  510. function fnSeverityRenderer(params) {
  511. // Critical, Major, Minor, Warning, Normal
  512. let _cls = ''
  513. if(!useUtil.isNull(params.value) && params.value !== '-') {
  514. _cls = params.value == 'Critical' ? 'critical' : params.value == 'Major' ? 'major' : params.value == 'Minor' ? 'minor' : params.value == 'Warning' ? 'minor' : 'minor'
  515. }
  516. let el = `<span class="status--ele ${_cls}" title="${params.value}">${params.value}</span>`
  517. return el
  518. }
  519. /**
  520. * @API_REF
  521. * 알람해제 confirm
  522. */
  523. function fnClearAlarmConfirm() {
  524. if(selectedItem.value.length > 0){
  525. let contents = i18n.t('common.footer.eventView.clearAlarmConfirmMsg')
  526. let param = {
  527. id: pageId,
  528. title: '안내',
  529. content: contents,
  530. yes:{
  531. text: i18n.t('common.confirm'),
  532. isProc: true,
  533. event:'DELETE_CLEAR_ALARM',
  534. param: ''
  535. },
  536. no:{
  537. text: i18n.t('common.cancel'),
  538. isProc:false
  539. }
  540. }
  541. $eventBus.emit('OPEN_CONFIRM_POP_UP', param)
  542. }
  543. }
  544. /**
  545. * @API
  546. * 알람해제
  547. */
  548. function fnClearAlarm() {
  549. let clearNumbers = selectedItem.value.map(item=>item.seqNo).join(',')
  550. let _req = {
  551. seqNo: clearNumbers,
  552. clearUser: useAuthStore().getAccountId
  553. }
  554. useAxios().put(useApi.clearAlarm, _req).then((res) => {
  555. $log.debug("[footer][fnClearAlarm][success]")
  556. $toast.success('선택한 알람이 해제 되었습니다.')
  557. fnGetEventViewer()
  558. }).catch((error)=>{
  559. $log.debug("[footer][fnClearAlarm][error]")
  560. $toast.error('선택한 알람 해제를 실패하였습니다.')
  561. useErrorHandler().fnSetCommErrorHandle(error)
  562. }).finally(()=>{
  563. $log.debug("[footer][fnClearAlarm][finished]")
  564. })
  565. }
  566. </script>