diff --git a/src/components/Navbar.vue b/src/components/Navbar.vue
index d94de51..c6c29b9 100644
--- a/src/components/Navbar.vue
+++ b/src/components/Navbar.vue
@@ -50,7 +50,7 @@ import filesStore from '@/stores/files.js';
import AllMapDataStore from '@/stores/allMapData.js';
import IconSearch from '@/components/icons/IconSearch.vue';
import IconSetting from '@/components/icons/IconSetting.vue';
-import { saveFilter } from '@/module/alertModal.js';
+import { saveFilter, savedSuccessfully } from '@/module/alertModal.js';
export default {
data() {
@@ -72,22 +72,38 @@ export default {
},
watch: {
'$route':'getNavViewName',
+ filterName: function(newVal, oldVal) {
+ this.filterName = newVal;
+ },
+ // createfilterId: function(newVal, oldVal) {
+ // // this.filterName = newVal;
+ // console.log(newVal);
+ // console.log(oldVal);
+ // },
+ postRuleData: function(newVal, oldVal) {
+ // this.filterName = newVal;
+ console.log(newVal);
+ console.log(oldVal);
+ },
},
setup() {
const store = filesStore();
const allMapDataStore = AllMapDataStore();
- const { tempFilterId } = storeToRefs(allMapDataStore);
+ const { tempFilterId, createfilterId, filterName, postRuleData, isUpdataFilter } = storeToRefs(allMapDataStore);
- return { store, allMapDataStore, tempFilterId}
+ return { store, allMapDataStore, tempFilterId, createfilterId, filterName, postRuleData, isUpdataFilter}
},
components: {
IconSearch,
IconSetting,
- saveFilter
+ saveFilter,
+ savedSuccessfully
},
mounted() {
this.showNavbarBreadcrumb = this.$route.matched[0].name !== ('AuthContainer')? true : false;
this.getNavViewName();
+ let filterId = this.$route.params.filterId;
+ this.createfilterId = filterId;
},
methods: {
switchNavItem(event) {
@@ -98,9 +114,14 @@ export default {
},
showAlert() {
// 先判斷有沒有 filter Id,有就儲存 return,沒有就往下走
-
- // 沒有 filter Id, 有暫存 tempFilterId Id 可以另存新檔
- saveFilter(this.allMapDataStore.addFilterId);
+ // 沒有 filter Id, 有暫存 tempFilterId Id 可以另存新檔
+ if(this.createfilterId) {
+ this.allMapDataStore.updataFilter();
+ console.log(this.isUpdataFilter);
+ if(this.isUpdataFilter) savedSuccessfully(this.filterName);
+ }else{
+ saveFilter(this.allMapDataStore.addFilterId);
+ }
}
},
}
diff --git a/src/module/alertModal.js b/src/module/alertModal.js
index aef2568..10ae74f 100644
--- a/src/module/alertModal.js
+++ b/src/module/alertModal.js
@@ -35,20 +35,22 @@ export async function saveFilter(addFilterId) {
// 存檔成功
if(isConfirmed) await addFilterId(filterName);
// 顯示儲存完成
- if (value) {
- await Swal.fire({
- title: 'SAVE COMPLETE',
- html: `${value} has been saved in Lucia.`,
- showConfirmButton: false,
- icon: 'success',
- iconColor: '#0099FF',
- customClass: customClass
- })
- };
+ if (value) savedSuccessfully(value);
// 清空欄位
filterName = '';
}
+export async function savedSuccessfully(value) {
+ await Swal.fire({
+ title: 'SAVE COMPLETE',
+ html: `${value} has been saved in Lucia.`,
+ showConfirmButton: false,
+ icon: 'success',
+ iconColor: '#0099FF',
+ customClass: customClass
+ })
+};
+
export async function leaveFilter(next, addFilterId) {
const result = await Swal.fire({
title: 'ARE YOU SURE TO LEAVE MAP?',
diff --git a/src/router/index.js b/src/router/index.js
index 9a144b0..2f64aa8 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -40,15 +40,15 @@ const routes = [
component: Files,
},
{
- path: "/discover/:logId",
- name: "Discover",
+ path: "/discover/logs/:logId",
+ name: "DiscoverLog",
component: Discover,
-
- // 先注意,之後思考是否修改,網址打 discover 時,要跳預設的頁面
- // path: "discover",
- // redirect: 'discover/12345'
-
- }
+ },
+ {
+ path: "/discover/filters/:filterId",
+ name: "DiscoverFilter",
+ component: Discover,
+ },
]
},
{
diff --git a/src/stores/allMapData.js b/src/stores/allMapData.js
index 84c7e18..8527750 100644
--- a/src/stores/allMapData.js
+++ b/src/stores/allMapData.js
@@ -16,6 +16,7 @@ export default defineStore('allMapDataStore', {
traceId: 1,
tempFilterId: null,
createFilterId: null,
+ filterName: null,
allProcessMap: {},
allBpmn: {},
allStats: {},
@@ -35,6 +36,7 @@ export default defineStore('allMapDataStore', {
ruleData: [], // Funnle view's data
isRuleData: [], // toggle button data
allFunnelData: [],
+ isUpdataFilter: false, // 是否成功儲存 Filter 檔
}),
getters: {
processMap: state => {
@@ -190,6 +192,9 @@ export default defineStore('allMapDataStore', {
$toast.default('Failed to load the Filter Parameters.',{position: 'bottom'});
};
},
+ /**
+ * Test if the Filter Rules Result in Any Data
+ */
async checkHasResult() {
let logId = this.logId;
const api = `/api/filters/has-result?log_id=${logId}`;
@@ -209,6 +214,9 @@ export default defineStore('allMapDataStore', {
$toast.default('Failed to load the Has Result.',{position: 'bottom'});
};
},
+ /**
+ * Add a New Temporary Filter
+ */
async addTempFilterId() {
let logId = this.logId;
const api = `/api/temp-filters?log_id=${logId}`;
@@ -228,6 +236,9 @@ export default defineStore('allMapDataStore', {
$toast.default('Failed to add the Temporary Filters.',{position: 'bottom'});
};
},
+ /**
+ * Add a New Filter
+ */
async addFilterId(value) {
let logId = this.logId;
const api = `/api/filters?log_id=${logId}`;
@@ -251,7 +262,7 @@ export default defineStore('allMapDataStore', {
};
},
/**
- * Fetch event logs api
+ * Get Filter Detail
*/
async fetchFunnel(createfilterId) {
const api = `/api/filters/${createfilterId}`;
@@ -260,6 +271,8 @@ export default defineStore('allMapDataStore', {
try {
const response = await this.$axios.get(api);
this.temporaryData = response.data.rules;
+ this.logId = response.data.log.id;
+ this.filterName = response.data.name;
}catch(error) {
this.httpStatus = error.request.status;
await delay();
@@ -267,9 +280,30 @@ export default defineStore('allMapDataStore', {
await delay(1000);
loading.isLoading = false;
await delay(500);
- $toast.default('Failed to load the Filters.',{position: 'bottom'});
+ $toast.default('Failed to get Filter Detail.',{position: 'bottom'});
}
}
},
+ /**
+ * Updata an Existing Filter
+ */
+ async updataFilter() {
+ let createFilterId = this.createFilterId
+ const api = `/api/filters/${createFilterId}`;
+ const data = this.postRuleData;
+
+ try {
+ const response = await this.$axios.put(api, data);
+ this.isUpdataFilter = response.data.is_modified;
+ }catch(error) {
+ this.httpStatus = error.request.status;
+ await delay();
+ loading.isLoading = true;
+ await delay(1000);
+ loading.isLoading = false;
+ await delay(500);
+ $toast.default('Failed to updata an Existing Filter.',{position: 'bottom'});
+ }
+ }
},
})
diff --git a/src/views/Discover/index.vue b/src/views/Discover/index.vue
index 98108d2..1385cf1 100644
--- a/src/views/Discover/index.vue
+++ b/src/views/Discover/index.vue
@@ -68,9 +68,9 @@ export default {
const loadingStore = LoadingStore();
const allMapDataStore = AllMapDataStore();
const { isLoading } = storeToRefs(loadingStore);
- const { processMap, bpmn, stats, insights, traces, traceTaskSeq, cases, filterTasks, filterStartToEnd, filterEndToStart, filterTimeframe, filterTrace, temporaryData, isRuleData, ruleData, createFilterId } = storeToRefs(allMapDataStore);
+ const { processMap, bpmn, stats, insights, traces, traceTaskSeq, cases, filterTasks, filterStartToEnd, filterEndToStart, filterTimeframe, filterTrace, temporaryData, isRuleData, ruleData, logId, createFilterId } = storeToRefs(allMapDataStore);
- return { isLoading, processMap, bpmn, stats, insights, traces, traceTaskSeq, cases, filterTasks, filterStartToEnd, filterEndToStart, filterTimeframe, filterTrace, createFilterId, temporaryData, isRuleData, ruleData, allMapDataStore}
+ return { isLoading, processMap, bpmn, stats, insights, traces, traceTaskSeq, cases, filterTasks, filterStartToEnd, filterEndToStart, filterTimeframe, filterTrace, logId, createFilterId, temporaryData, isRuleData, ruleData, allMapDataStore}
},
components: {
SidebarView,
@@ -294,15 +294,22 @@ export default {
},
},
async created() {
- this.allMapDataStore.logId = this.$route.params.logId;
+ // Log 檔前往 DiscoverLog 頁, Filter 檔前往 DiscoverFilter 頁
+ if(this.$route.name === 'DiscoverLog'){
+ this.logId = this.$route.params.logId;
+ }else if(this.$route.name === 'DiscoverFilter') {
+ this.createFilterId = this.$route.params.filterId;
+ // 取得 logID 和上次儲存的 Funnel
+ await this.allMapDataStore.fetchFunnel(this.createFilterId);
+ this.isRuleData = await Array.from(this.temporaryData);
+ this.ruleData = await this.isRuleData.map(e => this.$refs.sidevarFilterRef.setRule(e));
+ }
+ // 取得 logId 後才 call api
await this.allMapDataStore.getAllMapData();
await this.allMapDataStore.getAllTrace();
await this.allMapDataStore.getTraceDetail();
this.createCy(this.mapType);
await this.allMapDataStore.getFilterParams();
- await this.allMapDataStore.fetchFunnel(this.createFilterId)
- this.isRuleData = await Array.from(this.temporaryData);
- this.ruleData = await this.isRuleData.map(e => this.$refs.sidevarFilterRef.setRule(e));
this.isLoading = true;
await new Promise(resolve => setTimeout(resolve, 1000));
diff --git a/src/views/Files/index.vue b/src/views/Files/index.vue
index 1486c42..41f14e0 100644
--- a/src/views/Files/index.vue
+++ b/src/views/Files/index.vue
@@ -133,16 +133,19 @@
*/
enterDiscover(file){
let logId;
+ let filterId;
+
if(file.fileType === 'Log'){
- logId = file.id;
this.createFilterId = null;
+ logId = file.id;
+ this.$router.push({name: 'DiscoverLog', params: { logId: logId }})
}
else if(file.fileType === 'Filter') {
this.createFilterId = file.id;
- logId = file.log.id;
+ filterId = file.id;
+ this.$router.push({name: 'DiscoverFilter', params: { filterId: filterId }})
}
- this.$router.push({ name: 'Discover', params: { logId: logId }});
- },
+ }
},
mounted() {
this.store.fetchEventLog();
diff --git a/src/views/MainContainer.vue b/src/views/MainContainer.vue
index 6ada27b..dba088d 100644
--- a/src/views/MainContainer.vue
+++ b/src/views/MainContainer.vue
@@ -33,7 +33,8 @@ export default {
},
watch: {
$route: function(to, from) {
- if(to.name !== 'Discover') {
+ // 離開 DiscoverLog 頁要將 Funnel 的規則刪除, DiscoverFilter 會帶上次儲存的 Funnel, 所以不用錯做
+ if(to.name !== 'DiscoverLog') {
this.tempFilterId = null;
this.temporaryData = []
this.postRuleData = []
@@ -60,7 +61,7 @@ export default {
},
beforeRouteUpdate(to, from, next) {
// 離開 Discover 頁時判斷是否有無資料和需要存檔
- if (from.name === 'Discover' && this.tempFilterId) {
+ if ((from.name === 'DiscoverLog' || from.name === 'DiscoverFilter') && this.tempFilterId) {
leaveFilter(next, this.allMapDataStore.addFilterId)
} else {
next();