jobdone-shared-files 1.0.49 → 1.0.51
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ModuleInfo/LayoutNav.vue +251 -251
- package/ModuleInfo/logo-with-text.svg +22 -22
- package/ModuleInfo/navButton.vue +218 -218
- package/ProjectManagement/projectNavbar.vue +363 -363
- package/ProjectManagement/projectNavbarV2.vue +2 -2
- package/README.md +1 -0
- package/autocompleteSelect.vue +487 -465
- package/common/directives/collapse.js +12 -12
- package/common/directives/popovers.js +10 -10
- package/common/directives/selectPlaceholder.js +52 -52
- package/common/directives/textareaAutoHeight.js +10 -10
- package/common/directives/tooltip.js +10 -10
- package/common/format.js +26 -26
- package/index.js +14 -14
- package/lightboxWithOverview.vue +156 -156
- package/package.json +19 -19
- package/paginate.vue +141 -141
- package/style/css/vue-loading-overlay/index.css +40 -40
- package/style/scss/Common/Animation.scss +9 -9
- package/style/scss/Common/SelectableTable.scss +36 -36
- package/style/scss/Common/Tree.scss +281 -281
- package/style/scss/Common/filepond.scss +31 -31
- package/style/scss/Common/thumbnail-group.scss +14 -14
- package/style/scss/Layout/LayoutBase.scss +1032 -1032
- package/style/scss/Layout/LayoutInnerColumn.scss +263 -263
- package/style/scss/Layout/LayoutProject.scss +126 -126
- package/style/scss/Layout/LayoutSinglePage.scss +17 -17
- package/style/scss/Layout/LayoutTwoColumn.scss +60 -60
- package/style/scss/Settings/_Mixins.scss +232 -232
- package/style/scss/Settings/_MobileVariables.scss +11 -11
- package/style/scss/Settings/_bs-variables-dark.scss +70 -70
- package/style/scss/Settings/_bs-variables.scss +1743 -1743
- package/style/scss/Settings/_color-mode.scss +122 -122
- package/style/scss/Settings/_custom-variables.scss +10 -10
- package/tagEditor.vue +249 -249
- package/tree.vue +71 -71
- package/treeItem.vue +358 -358
- package/treeItemV2.vue +78 -78
- package/treeV2.vue +71 -71
- package/vueLoadingOverlay.vue +74 -74
package/treeItemV2.vue
CHANGED
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<li class="tree-item" :class="[itemClass]">
|
|
3
|
-
<div class="card flex-row d-flex input-group flex-nowrap">
|
|
4
|
-
<button type="button" class="btn text-primary border-end px-1"
|
|
5
|
-
:disabled="!item.children || item.children.length == 0" data-bs-toggle="collapse"
|
|
6
|
-
:data-bs-target="'#collapse-' + item.id">
|
|
7
|
-
<span class="material-icons">arrow_drop_down</span>
|
|
8
|
-
<slot name="icon-start"></slot>
|
|
9
|
-
</button>
|
|
10
|
-
<div class="btn-title d-flex text-start rounded-0 flex-grow-1" :for="item.id" @click="clickItem(item)">
|
|
11
|
-
<div class="btn btn-text border-start">{{ item.title }}</div>
|
|
12
|
-
<slot name="icon" :item="item">
|
|
13
|
-
<div class="btn d-flex align-items-center border-start rounded-0 text-primary h-100 ms-auto">
|
|
14
|
-
<span class="material-icons icon-18"></span>
|
|
15
|
-
</div>
|
|
16
|
-
</slot>
|
|
17
|
-
</div>
|
|
18
|
-
</div>
|
|
19
|
-
<template v-if="item.children">
|
|
20
|
-
<ul :id="'collapse-' + item.id" class="content-children show">
|
|
21
|
-
<TreeItem class="children-box" v-for="(subItem, subIndex) in item.children" :key="subItem.id" :item="subItem"
|
|
22
|
-
:index="subIndex" :click-item="clickItem" :active-id="activeId" :tree-item-class="treeItemClass">
|
|
23
|
-
<template v-slot:icon-start>
|
|
24
|
-
<slot name="icon-start"></slot>
|
|
25
|
-
</template>
|
|
26
|
-
<template v-slot:icon="slotProps">
|
|
27
|
-
<slot name="icon" :item="slotProps.item">
|
|
28
|
-
<div class="btn d-flex align-items-center border-start rounded-0 text-primary h-100 ms-auto">
|
|
29
|
-
<span class="material-icons icon-18"></span>
|
|
30
|
-
</div>
|
|
31
|
-
</slot>
|
|
32
|
-
</template>
|
|
33
|
-
</TreeItem>
|
|
34
|
-
</ul>
|
|
35
|
-
</template>
|
|
36
|
-
</li>
|
|
37
|
-
</template>
|
|
38
|
-
|
|
39
|
-
<script>
|
|
40
|
-
import { ref, computed } from 'vue';
|
|
41
|
-
export default {
|
|
42
|
-
name: 'TreeItem',
|
|
43
|
-
props: {
|
|
44
|
-
item: {
|
|
45
|
-
type: Object,
|
|
46
|
-
required: true
|
|
47
|
-
},
|
|
48
|
-
index: {
|
|
49
|
-
type: Number,
|
|
50
|
-
required: true
|
|
51
|
-
},
|
|
52
|
-
clickItem: {
|
|
53
|
-
type: Function
|
|
54
|
-
},
|
|
55
|
-
activeId: {
|
|
56
|
-
type: String,
|
|
57
|
-
required: true
|
|
58
|
-
},
|
|
59
|
-
treeItemClass: {
|
|
60
|
-
type: Array,
|
|
61
|
-
default: function () {
|
|
62
|
-
return [];
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
setup(props, { emit }) {
|
|
67
|
-
const itemClass = computed(() => {
|
|
68
|
-
var classList = [...props.treeItemClass];
|
|
69
|
-
if (props.activeId === props.item.id) {
|
|
70
|
-
classList.push('active');
|
|
71
|
-
}
|
|
72
|
-
return classList;
|
|
73
|
-
});
|
|
74
|
-
return {
|
|
75
|
-
itemClass: itemClass
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
}
|
|
1
|
+
<template>
|
|
2
|
+
<li class="tree-item" :class="[itemClass]">
|
|
3
|
+
<div class="card flex-row d-flex input-group flex-nowrap">
|
|
4
|
+
<button type="button" class="btn text-primary border-end px-1"
|
|
5
|
+
:disabled="!item.children || item.children.length == 0" data-bs-toggle="collapse"
|
|
6
|
+
:data-bs-target="'#collapse-' + item.id">
|
|
7
|
+
<span class="material-icons">arrow_drop_down</span>
|
|
8
|
+
<slot name="icon-start"></slot>
|
|
9
|
+
</button>
|
|
10
|
+
<div class="btn-title d-flex text-start rounded-0 flex-grow-1" :for="item.id" @click="clickItem(item)">
|
|
11
|
+
<div class="btn btn-text border-start">{{ item.title }}</div>
|
|
12
|
+
<slot name="icon" :item="item">
|
|
13
|
+
<div class="btn d-flex align-items-center border-start rounded-0 text-primary h-100 ms-auto">
|
|
14
|
+
<span class="material-icons icon-18"></span>
|
|
15
|
+
</div>
|
|
16
|
+
</slot>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
<template v-if="item.children">
|
|
20
|
+
<ul :id="'collapse-' + item.id" class="content-children show">
|
|
21
|
+
<TreeItem class="children-box" v-for="(subItem, subIndex) in item.children" :key="subItem.id" :item="subItem"
|
|
22
|
+
:index="subIndex" :click-item="clickItem" :active-id="activeId" :tree-item-class="treeItemClass">
|
|
23
|
+
<template v-slot:icon-start>
|
|
24
|
+
<slot name="icon-start"></slot>
|
|
25
|
+
</template>
|
|
26
|
+
<template v-slot:icon="slotProps">
|
|
27
|
+
<slot name="icon" :item="slotProps.item">
|
|
28
|
+
<div class="btn d-flex align-items-center border-start rounded-0 text-primary h-100 ms-auto">
|
|
29
|
+
<span class="material-icons icon-18"></span>
|
|
30
|
+
</div>
|
|
31
|
+
</slot>
|
|
32
|
+
</template>
|
|
33
|
+
</TreeItem>
|
|
34
|
+
</ul>
|
|
35
|
+
</template>
|
|
36
|
+
</li>
|
|
37
|
+
</template>
|
|
38
|
+
|
|
39
|
+
<script>
|
|
40
|
+
import { ref, computed } from 'vue';
|
|
41
|
+
export default {
|
|
42
|
+
name: 'TreeItem',
|
|
43
|
+
props: {
|
|
44
|
+
item: {
|
|
45
|
+
type: Object,
|
|
46
|
+
required: true
|
|
47
|
+
},
|
|
48
|
+
index: {
|
|
49
|
+
type: Number,
|
|
50
|
+
required: true
|
|
51
|
+
},
|
|
52
|
+
clickItem: {
|
|
53
|
+
type: Function
|
|
54
|
+
},
|
|
55
|
+
activeId: {
|
|
56
|
+
type: String,
|
|
57
|
+
required: true
|
|
58
|
+
},
|
|
59
|
+
treeItemClass: {
|
|
60
|
+
type: Array,
|
|
61
|
+
default: function () {
|
|
62
|
+
return [];
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
setup(props, { emit }) {
|
|
67
|
+
const itemClass = computed(() => {
|
|
68
|
+
var classList = [...props.treeItemClass];
|
|
69
|
+
if (props.activeId === props.item.id) {
|
|
70
|
+
classList.push('active');
|
|
71
|
+
}
|
|
72
|
+
return classList;
|
|
73
|
+
});
|
|
74
|
+
return {
|
|
75
|
+
itemClass: itemClass
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
79
|
</script>
|
package/treeV2.vue
CHANGED
|
@@ -1,71 +1,71 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<form ref="form">
|
|
3
|
-
<tree-item v-for="(item, index) in items" :key="item.id" :item="item" :index="index" :click-item="clickItem"
|
|
4
|
-
:active-id="activeId" :tree-item-class="treeItemClass">
|
|
5
|
-
<template v-slot:icon-start>
|
|
6
|
-
<slot name="icon-start"></slot>
|
|
7
|
-
</template>
|
|
8
|
-
<template v-slot:icon="slotProps">
|
|
9
|
-
<slot name="icon" :item="slotProps.item"></slot>
|
|
10
|
-
</template>
|
|
11
|
-
</tree-item>
|
|
12
|
-
</form>
|
|
13
|
-
</template>
|
|
14
|
-
|
|
15
|
-
<script>
|
|
16
|
-
import { ref, computed } from 'vue';
|
|
17
|
-
import TreeItem from './treeItemV2.vue';
|
|
18
|
-
export default {
|
|
19
|
-
props: {
|
|
20
|
-
items: {
|
|
21
|
-
type: Array,
|
|
22
|
-
default: function () {
|
|
23
|
-
return [];
|
|
24
|
-
}
|
|
25
|
-
},
|
|
26
|
-
clickItem: {
|
|
27
|
-
type: Function
|
|
28
|
-
},
|
|
29
|
-
size: {
|
|
30
|
-
type: String,
|
|
31
|
-
default: ""
|
|
32
|
-
},
|
|
33
|
-
bgColor: {
|
|
34
|
-
type: String,
|
|
35
|
-
default: ""
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
components: {
|
|
39
|
-
TreeItem
|
|
40
|
-
},
|
|
41
|
-
setup(props, { emit }) {
|
|
42
|
-
const form = ref(null);
|
|
43
|
-
const activeId = ref("");
|
|
44
|
-
const clickItem = (item) => {
|
|
45
|
-
activeId.value = item.id;
|
|
46
|
-
props.clickItem(item);
|
|
47
|
-
};
|
|
48
|
-
const treeItemClass = computed(() => {
|
|
49
|
-
var classList = [];
|
|
50
|
-
if (props.size == 'sm') {
|
|
51
|
-
classList.push('tree-item-sm');
|
|
52
|
-
}
|
|
53
|
-
if (props.bgColor == 'white') {
|
|
54
|
-
classList.push('tree-item-in-white');
|
|
55
|
-
}
|
|
56
|
-
return classList;
|
|
57
|
-
});
|
|
58
|
-
const reset = () => {
|
|
59
|
-
activeId.value = "";
|
|
60
|
-
};
|
|
61
|
-
return {
|
|
62
|
-
form: form,
|
|
63
|
-
treeItemClass: treeItemClass,
|
|
64
|
-
activeId: activeId,
|
|
65
|
-
clickItem: clickItem,
|
|
66
|
-
reset: reset
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
</script>
|
|
71
|
-
<style></style>
|
|
1
|
+
<template>
|
|
2
|
+
<form ref="form">
|
|
3
|
+
<tree-item v-for="(item, index) in items" :key="item.id" :item="item" :index="index" :click-item="clickItem"
|
|
4
|
+
:active-id="activeId" :tree-item-class="treeItemClass">
|
|
5
|
+
<template v-slot:icon-start>
|
|
6
|
+
<slot name="icon-start"></slot>
|
|
7
|
+
</template>
|
|
8
|
+
<template v-slot:icon="slotProps">
|
|
9
|
+
<slot name="icon" :item="slotProps.item"></slot>
|
|
10
|
+
</template>
|
|
11
|
+
</tree-item>
|
|
12
|
+
</form>
|
|
13
|
+
</template>
|
|
14
|
+
|
|
15
|
+
<script>
|
|
16
|
+
import { ref, computed } from 'vue';
|
|
17
|
+
import TreeItem from './treeItemV2.vue';
|
|
18
|
+
export default {
|
|
19
|
+
props: {
|
|
20
|
+
items: {
|
|
21
|
+
type: Array,
|
|
22
|
+
default: function () {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
clickItem: {
|
|
27
|
+
type: Function
|
|
28
|
+
},
|
|
29
|
+
size: {
|
|
30
|
+
type: String,
|
|
31
|
+
default: ""
|
|
32
|
+
},
|
|
33
|
+
bgColor: {
|
|
34
|
+
type: String,
|
|
35
|
+
default: ""
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
components: {
|
|
39
|
+
TreeItem
|
|
40
|
+
},
|
|
41
|
+
setup(props, { emit }) {
|
|
42
|
+
const form = ref(null);
|
|
43
|
+
const activeId = ref("");
|
|
44
|
+
const clickItem = (item) => {
|
|
45
|
+
activeId.value = item.id;
|
|
46
|
+
props.clickItem(item);
|
|
47
|
+
};
|
|
48
|
+
const treeItemClass = computed(() => {
|
|
49
|
+
var classList = [];
|
|
50
|
+
if (props.size == 'sm') {
|
|
51
|
+
classList.push('tree-item-sm');
|
|
52
|
+
}
|
|
53
|
+
if (props.bgColor == 'white') {
|
|
54
|
+
classList.push('tree-item-in-white');
|
|
55
|
+
}
|
|
56
|
+
return classList;
|
|
57
|
+
});
|
|
58
|
+
const reset = () => {
|
|
59
|
+
activeId.value = "";
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
form: form,
|
|
63
|
+
treeItemClass: treeItemClass,
|
|
64
|
+
activeId: activeId,
|
|
65
|
+
clickItem: clickItem,
|
|
66
|
+
reset: reset
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
</script>
|
|
71
|
+
<style></style>
|
package/vueLoadingOverlay.vue
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<loading :is-full-page="fullPage" :loader='loader' :active="isActive" :color='colors' :background-color='backgroundColor' :opacity='opacity' :enforce-focus="false"/>
|
|
3
|
-
</template>
|
|
4
|
-
|
|
5
|
-
<script>
|
|
6
|
-
|
|
7
|
-
// enum Data & Functions
|
|
8
|
-
|
|
9
|
-
// vue & bootstrap
|
|
10
|
-
import { ref } from 'vue'
|
|
11
|
-
|
|
12
|
-
// plugins
|
|
13
|
-
import Loading from 'vue-loading-overlay';
|
|
14
|
-
|
|
15
|
-
/** vue loading 預設樣式 */
|
|
16
|
-
const loadingOverlayOptions = {
|
|
17
|
-
loader: 'bars',
|
|
18
|
-
colors: '#647AF1',
|
|
19
|
-
backgroundColor: '#000',
|
|
20
|
-
opacity: 0.5,
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// 用法說明
|
|
24
|
-
// 1. npm install vue-loading-overlay@^6.0
|
|
25
|
-
// 2. 在js或.vue中import >> import Loading from "本檔案位置"
|
|
26
|
-
// 3. 畫面中放上Component >> <Loading :is-active="isLoading"></Loading> ("isLoading" => 自定義變數)
|
|
27
|
-
// 4. loading 初始化 >> const isLoading = ref(false); ("isLoading" => 自定義變數)
|
|
28
|
-
// 5. 開啟loading >> isLoading.value = true; ("isLoading" => 自定義變數)
|
|
29
|
-
// 6. 關閉loading >> isLoading.value = false; ("isLoading" => 自定義變數)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
// vue components
|
|
34
|
-
export default {
|
|
35
|
-
props: {
|
|
36
|
-
isActive: {
|
|
37
|
-
type: Boolean,
|
|
38
|
-
default: false
|
|
39
|
-
},
|
|
40
|
-
loader: {
|
|
41
|
-
type: String,
|
|
42
|
-
default: loadingOverlayOptions.loader
|
|
43
|
-
},
|
|
44
|
-
colors: {
|
|
45
|
-
type: String,
|
|
46
|
-
default: loadingOverlayOptions.colors
|
|
47
|
-
},
|
|
48
|
-
backgroundColor: {
|
|
49
|
-
type: String,
|
|
50
|
-
default: loadingOverlayOptions.backgroundColor
|
|
51
|
-
},
|
|
52
|
-
opacity: {
|
|
53
|
-
type: Number,
|
|
54
|
-
default: loadingOverlayOptions.opacity
|
|
55
|
-
},
|
|
56
|
-
fullPage: {
|
|
57
|
-
type: Boolean,
|
|
58
|
-
default: true
|
|
59
|
-
}
|
|
60
|
-
},
|
|
61
|
-
components: {
|
|
62
|
-
Loading
|
|
63
|
-
},
|
|
64
|
-
setup(props, { emit }) {
|
|
65
|
-
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
</script>
|
|
70
|
-
<style lang="scss">
|
|
71
|
-
@import './style/css/vue-loading-overlay/index.css';
|
|
72
|
-
.vl-overlay{
|
|
73
|
-
backdrop-filter: var(--backdrop-blur);
|
|
74
|
-
}
|
|
1
|
+
<template>
|
|
2
|
+
<loading :is-full-page="fullPage" :loader='loader' :active="isActive" :color='colors' :background-color='backgroundColor' :opacity='opacity' :enforce-focus="false"/>
|
|
3
|
+
</template>
|
|
4
|
+
|
|
5
|
+
<script>
|
|
6
|
+
|
|
7
|
+
// enum Data & Functions
|
|
8
|
+
|
|
9
|
+
// vue & bootstrap
|
|
10
|
+
import { ref } from 'vue'
|
|
11
|
+
|
|
12
|
+
// plugins
|
|
13
|
+
import Loading from 'vue-loading-overlay';
|
|
14
|
+
|
|
15
|
+
/** vue loading 預設樣式 */
|
|
16
|
+
const loadingOverlayOptions = {
|
|
17
|
+
loader: 'bars',
|
|
18
|
+
colors: '#647AF1',
|
|
19
|
+
backgroundColor: '#000',
|
|
20
|
+
opacity: 0.5,
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
// 用法說明
|
|
24
|
+
// 1. npm install vue-loading-overlay@^6.0
|
|
25
|
+
// 2. 在js或.vue中import >> import Loading from "本檔案位置"
|
|
26
|
+
// 3. 畫面中放上Component >> <Loading :is-active="isLoading"></Loading> ("isLoading" => 自定義變數)
|
|
27
|
+
// 4. loading 初始化 >> const isLoading = ref(false); ("isLoading" => 自定義變數)
|
|
28
|
+
// 5. 開啟loading >> isLoading.value = true; ("isLoading" => 自定義變數)
|
|
29
|
+
// 6. 關閉loading >> isLoading.value = false; ("isLoading" => 自定義變數)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
// vue components
|
|
34
|
+
export default {
|
|
35
|
+
props: {
|
|
36
|
+
isActive: {
|
|
37
|
+
type: Boolean,
|
|
38
|
+
default: false
|
|
39
|
+
},
|
|
40
|
+
loader: {
|
|
41
|
+
type: String,
|
|
42
|
+
default: loadingOverlayOptions.loader
|
|
43
|
+
},
|
|
44
|
+
colors: {
|
|
45
|
+
type: String,
|
|
46
|
+
default: loadingOverlayOptions.colors
|
|
47
|
+
},
|
|
48
|
+
backgroundColor: {
|
|
49
|
+
type: String,
|
|
50
|
+
default: loadingOverlayOptions.backgroundColor
|
|
51
|
+
},
|
|
52
|
+
opacity: {
|
|
53
|
+
type: Number,
|
|
54
|
+
default: loadingOverlayOptions.opacity
|
|
55
|
+
},
|
|
56
|
+
fullPage: {
|
|
57
|
+
type: Boolean,
|
|
58
|
+
default: true
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
components: {
|
|
62
|
+
Loading
|
|
63
|
+
},
|
|
64
|
+
setup(props, { emit }) {
|
|
65
|
+
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
</script>
|
|
70
|
+
<style lang="scss">
|
|
71
|
+
@import './style/css/vue-loading-overlay/index.css';
|
|
72
|
+
.vl-overlay{
|
|
73
|
+
backdrop-filter: var(--backdrop-blur);
|
|
74
|
+
}
|
|
75
75
|
</style>
|