From 9db7b73d2ca0b451a8cd63b3b407bdc95ae42cca Mon Sep 17 00:00:00 2001 From: chiayin Date: Wed, 12 Jul 2023 09:56:23 +0800 Subject: [PATCH] Conformance: layout done.(not time range) --- package-lock.json | 24 ++- src/assets/vendors.css | 7 + .../Conformance/ConformanceResults.vue | 8 +- .../Conformance/ConformanceSidebar.vue | 34 ++- .../ConformanceSidebar/ActList.vue | 21 +- .../ConformanceSidebar/ActRadio.vue | 24 +++ .../ConformanceSidebar/ActSeqDrag.vue | 120 +++++++++++ .../ConformanceRadioGroup.vue | 35 +++- .../ConformanceSelectResult.vue | 70 ++++++- .../ConformanceSidebar/ConformanceShowBar.vue | 63 +++++- .../ConformanceTimeRange.vue | 49 +++++ .../Discover/Conformance/MoreModal.vue | 113 +++++++++- .../Discover/Conformance/StatusBar.vue | 14 +- src/components/durationjs.vue | 198 ++++++++++++++++++ src/module/sortNumEngZhtw.js | 22 ++ src/stores/conformance.js | 50 ++++- src/views/Discover/Conformance/index.vue | 18 +- 17 files changed, 805 insertions(+), 65 deletions(-) create mode 100644 src/components/Discover/Conformance/ConformanceSidebar/ActRadio.vue create mode 100644 src/components/Discover/Conformance/ConformanceSidebar/ActSeqDrag.vue create mode 100644 src/components/Discover/Conformance/ConformanceSidebar/ConformanceTimeRange.vue create mode 100644 src/components/durationjs.vue create mode 100644 src/module/sortNumEngZhtw.js diff --git a/package-lock.json b/package-lock.json index f402622..ccb7aee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "frontend", - "version": "0.99.0", + "version": "0.99.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "frontend", - "version": "0.99.0", + "version": "0.99.1", "dependencies": { "autoprefixer": "^10.4.13", "axios": "^1.2.2", @@ -33,6 +33,7 @@ "vue-router": "^4.1.6", "vue-sweetalert2": "^5.0.5", "vue-toast-notification": "^3.0.4", + "vue3-timepicker": "^1.0.0-beta.2", "vuedraggable": "^4.1.0" }, "devDependencies": { @@ -6192,6 +6193,17 @@ "vue": "^3.0" } }, + "node_modules/vue3-timepicker": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/vue3-timepicker/-/vue3-timepicker-1.0.0-beta.2.tgz", + "integrity": "sha512-j4IVU7PPLrO5HADspv1E+tXTkMc9gWfCu/ruwJqJdX7qugAaVk3yNF7Mj4icRGlU4uKeSohlXWA8/Uj1ePiTxQ==", + "dependencies": { + "vue": "^3.0.5" + }, + "peerDependencies": { + "vue": "^3.0.5" + } + }, "node_modules/vuedraggable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", @@ -10961,6 +10973,14 @@ "integrity": "sha512-rEhLtcKg8SVdBpdN7PrNst5nmY8dw0j3NkNImqurhlGurqR/QDKoou0t2PuCReEOCTKqHvfLCle2I3kwQWDWDQ==", "requires": {} }, + "vue3-timepicker": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/vue3-timepicker/-/vue3-timepicker-1.0.0-beta.2.tgz", + "integrity": "sha512-j4IVU7PPLrO5HADspv1E+tXTkMc9gWfCu/ruwJqJdX7qugAaVk3yNF7Mj4icRGlU4uKeSohlXWA8/Uj1ePiTxQ==", + "requires": { + "vue": "^3.0.5" + } + }, "vuedraggable": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", diff --git a/src/assets/vendors.css b/src/assets/vendors.css index 031a900..321cd53 100644 --- a/src/assets/vendors.css +++ b/src/assets/vendors.css @@ -76,3 +76,10 @@ p-radiobutton-icon */ .p-radiobutton-icon { @apply !bg-primary } +/* Dialog */ +.p-dialog-header { + @apply !p-0 !px-4 !bg-neutral-100 +} +.p-dialog-content { + @apply !p-0 +} diff --git a/src/components/Discover/Conformance/ConformanceResults.vue b/src/components/Discover/Conformance/ConformanceResults.vue index 24487bd..89dd52f 100644 --- a/src/components/Discover/Conformance/ConformanceResults.vue +++ b/src/components/Discover/Conformance/ConformanceResults.vue @@ -1,14 +1,14 @@ + diff --git a/src/components/Discover/Conformance/ConformanceSidebar/ActList.vue b/src/components/Discover/Conformance/ConformanceSidebar/ActList.vue index e5c6fbd..e052e30 100644 --- a/src/components/Discover/Conformance/ConformanceSidebar/ActList.vue +++ b/src/components/Discover/Conformance/ConformanceSidebar/ActList.vue @@ -1,22 +1,23 @@ diff --git a/src/components/Discover/Conformance/ConformanceSidebar/ActSeqDrag.vue b/src/components/Discover/Conformance/ConformanceSidebar/ActSeqDrag.vue new file mode 100644 index 0000000..5efd518 --- /dev/null +++ b/src/components/Discover/Conformance/ConformanceSidebar/ActSeqDrag.vue @@ -0,0 +1,120 @@ + + + diff --git a/src/components/Discover/Conformance/ConformanceSidebar/ConformanceRadioGroup.vue b/src/components/Discover/Conformance/ConformanceSidebar/ConformanceRadioGroup.vue index 59aff86..6500d54 100644 --- a/src/components/Discover/Conformance/ConformanceSidebar/ConformanceRadioGroup.vue +++ b/src/components/Discover/Conformance/ConformanceSidebar/ConformanceRadioGroup.vue @@ -4,7 +4,7 @@

Rule Type

- +
@@ -25,7 +25,7 @@ -
+

Process Scope

@@ -33,13 +33,21 @@
-
+

Activity Sequence

+ +
+

Activity Sequence

+
+ + +
+
diff --git a/src/components/Discover/Conformance/ConformanceSidebar/ConformanceSelectResult.vue b/src/components/Discover/Conformance/ConformanceSidebar/ConformanceSelectResult.vue index a3b095a..718db6d 100644 --- a/src/components/Discover/Conformance/ConformanceSidebar/ConformanceSelectResult.vue +++ b/src/components/Discover/Conformance/ConformanceSidebar/ConformanceSelectResult.vue @@ -1,23 +1,81 @@ + diff --git a/src/components/Discover/Conformance/ConformanceSidebar/ConformanceShowBar.vue b/src/components/Discover/Conformance/ConformanceSidebar/ConformanceShowBar.vue index 516ac75..cc72bc9 100644 --- a/src/components/Discover/Conformance/ConformanceSidebar/ConformanceShowBar.vue +++ b/src/components/Discover/Conformance/ConformanceSidebar/ConformanceShowBar.vue @@ -1,11 +1,57 @@ @@ -14,18 +60,25 @@ import { storeToRefs } from 'pinia'; import LoadingStore from '@/stores/loading.js'; import ConformanceStore from '@/stores/conformance.js'; import ActList from './ActList.vue'; +import ActRadio from './ActRadio.vue'; +import ActSeqDrag from './ActSeqDrag.vue'; export default { setup() { const loadingStore = LoadingStore(); const conformanceStore = ConformanceStore(); const { isLoading } = storeToRefs(loadingStore); - const { selectedRuleType, selectedActivitySequence, selectedMode, selectedProcessScope, selectedActSeqMore } = storeToRefs(conformanceStore); + const { selectedRuleType, selectedActivitySequence, selectedMode, selectedProcessScope, selectedActSeqMore, selectedActSeqFromTo, conformanceTask } = storeToRefs(conformanceStore); - return { isLoading, selectedRuleType, selectedActivitySequence, selectedMode, selectedProcessScope, selectedActSeqMore } + return { isLoading, selectedRuleType, selectedActivitySequence, selectedMode, selectedProcessScope, selectedActSeqMore, selectedActSeqFromTo, conformanceTask } }, components: { - ActList, + ActList, ActRadio, ActSeqDrag + }, + data() { + return { + data:['到到到到到到到到到到到到到到到到到到到到到到院', '住住住住住住住住住住住住住住住住住住住住住住住住住住住住住住住住住院', '開開開開開開開開開開開開開開開開開開開開開開刀', '第第第第第第第第第第一次醫囑', 'aaaaaaaaaaaaaaaa', 'bb ccc ddddd eeee', '第二次醫囑', '照會', '繳費', '領藥', '出院', '到院 到院 到院 到院', '住院', '開刀', '第一次醫囑', '第二次醫囑', '照會', '繳費', '領藥', '出院', '到院', '住院', '開刀', '第一次醫囑囑囑囑囑囑囑囑囑囑囑囑囑囑囑囑囑囑囑囑囑', '第二次醫囑', '照會', '繳費', '領藥', '出院', '到院', '住院', '開刀', '第一次醫囑', '第二次醫囑', '照會', '繳費', '領藥', '出院院院院院院院院院院院院院院院院院院院院院院院院院院院', '到院', '住院', '開刀', '第一次醫囑', '第二次醫囑', '照會', '繳費', '領藥', '出院', '到院', '住院', '開刀', '第一次醫囑', '第二次醫囑', '照會', '繳費', '領藥', '出院'] + } } } diff --git a/src/components/Discover/Conformance/ConformanceSidebar/ConformanceTimeRange.vue b/src/components/Discover/Conformance/ConformanceSidebar/ConformanceTimeRange.vue new file mode 100644 index 0000000..d0ae97e --- /dev/null +++ b/src/components/Discover/Conformance/ConformanceSidebar/ConformanceTimeRange.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/components/Discover/Conformance/MoreModal.vue b/src/components/Discover/Conformance/MoreModal.vue index e2f6252..921482c 100644 --- a/src/components/Discover/Conformance/MoreModal.vue +++ b/src/components/Discover/Conformance/MoreModal.vue @@ -1,13 +1,116 @@ diff --git a/src/components/Discover/Conformance/StatusBar.vue b/src/components/Discover/Conformance/StatusBar.vue index 92662c1..e92e010 100644 --- a/src/components/Discover/Conformance/StatusBar.vue +++ b/src/components/Discover/Conformance/StatusBar.vue @@ -1,8 +1,7 @@ @@ -92,6 +89,9 @@ export default { isPanel: false, } }, + created() { + this.isPanel = true; + } } diff --git a/src/module/sortNumEngZhtw.js b/src/module/sortNumEngZhtw.js new file mode 100644 index 0000000..829f10a --- /dev/null +++ b/src/module/sortNumEngZhtw.js @@ -0,0 +1,22 @@ +/** + * 數字、英文、中文,排序 + * @param {array} data + * @returns + */ +export default function sortNumEngZhtw(data) { + return data.sort((a, b) => { + // 檢查兩個值是否都是數字 + var isANumber = !isNaN(parseFloat(a)) && isFinite(a); + var isBNumber = !isNaN(parseFloat(b)) && isFinite(b); + + // 如果兩個值都是數字,直接比較大小 + if (isANumber && isBNumber) return parseFloat(a) - parseFloat(b); + + // 如果其中一個值是數字,將數字視為最小,排在前面 + if (isANumber) return -1; + if (isBNumber) return 1; + + // 其他情況下,使用 localeCompare 方法進行中文排序 + return a.localeCompare(b, 'zh-Hant-TW', { sensitivity: 'accent' }); + }); +} diff --git a/src/stores/conformance.js b/src/stores/conformance.js index ae579e1..b89a153 100644 --- a/src/stores/conformance.js +++ b/src/stores/conformance.js @@ -1,17 +1,53 @@ import { defineStore } from "pinia"; import loadingStore from "./loading"; import pinia from '@/stores/main.js'; +import {useToast} from 'vue-toast-notification'; +import 'vue-toast-notification/dist/theme-sugar.css'; const loading = loadingStore(pinia); +const $toast = useToast(); +// Delay loading and toast 待模組化 +let delay = (s = 0) => new Promise((resolve, reject) => setTimeout(resolve, s)); export default defineStore('conformanceStore', { state: () => ({ - selectedRuleType: 'Have activity', - selectedActivitySequence: 'Start & End', - selectedMode: 'Directly follows', - selectedProcessScope: 'End to end', - selectedActSeqMore: 'All', + logId: null, + filterId: null, + allConformanceTask: [], + selectedRuleType: 'Have activity', // radio + selectedActivitySequence: 'Start & End', // radio + selectedMode: 'Directly follows', // radio + selectedProcessScope: 'End to end', // radio + selectedActSeqMore: 'All', // radio + selectedActSeqFromTo: 'From', // radio }), - getters: {}, - actions: {}, + getters: { + conformanceTask: state => { + return state.allConformanceTask; + } + }, + actions: { + /** + * fetch Log Conformance Parameters api for Rule Settings. + */ + async getLogConformanceParams() { + let logId = this.logId; + const api = `/api/log-checkers/params?log_id=${logId}`; + + try { + const response = await this.$axios.get(api); + console.log(response); + this.allConformanceTask = response.data.tasks; + + } catch(error) { + console.log(error); + await delay(); + loading.isLoading = true; + await delay(1000); + loading.isLoading = false; + await delay(500); + $toast.default('Failed to load the Conformance Parameters.',{position: 'bottom'}); + } + } + }, }) diff --git a/src/views/Discover/Conformance/index.vue b/src/views/Discover/Conformance/index.vue index f6f4051..1f1cdda 100644 --- a/src/views/Discover/Conformance/index.vue +++ b/src/views/Discover/Conformance/index.vue @@ -1,16 +1,17 @@