jobdone-shared-files 0.0.1-beta.79 → 0.0.1-beta.80
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/.vs/VSWorkspaceState.json +6 -0
- package/.vs/jobdone_sharejs/FileContentIndex/a973f22d-a16a-4ca9-ab6a-75ab92ec6af7.vsidx +0 -0
- package/.vs/jobdone_sharejs/FileContentIndex/bacf95a3-2185-41c2-b12a-e93bb40f2204.vsidx +0 -0
- package/.vs/jobdone_sharejs/config/applicationhost.config +1021 -0
- package/.vs/jobdone_sharejs/v17/.wsuo +0 -0
- package/.vs/slnx.sqlite +0 -0
- package/ProjectManagement/projectNavbar.vue +131 -84
- package/README.md +7 -7
- package/common/directives/collapse.js +12 -12
- package/common/directives/popovers.js +10 -10
- package/common/directives/tooltip.js +10 -10
- package/common/format.js +26 -26
- package/index.js +14 -14
- package/lightboxWithOverview.vue +131 -131
- package/package.json +19 -19
- package/paginate.vue +138 -138
- package/style/css/vue-loading-overlay/index.css +40 -40
- package/style/scss/Common/Animation.scss +5 -5
- package/style/scss/Common/SelectableTable.scss +30 -30
- package/style/scss/Common/filepond.scss +27 -27
- package/style/scss/Common/thumbnail-group.scss +14 -14
- package/style/scss/Layout/LayoutBase.scss +1014 -1014
- package/style/scss/Layout/LayoutMobile.scss +202 -202
- package/style/scss/Layout/LayoutProject.scss +122 -122
- package/style/scss/Layout/LayoutSinglePage.scss +13 -13
- package/style/scss/Layout/LayoutTwoColumn.scss +56 -56
- package/style/scss/Settings/_Mixins.scss +229 -229
- package/style/scss/Settings/_MobileVariables.scss +11 -11
- package/style/scss/Settings/_basic-import.scss +5 -5
- 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 +13 -13
- package/tagEditor.vue +263 -263
- package/tree.vue +69 -69
- package/treeItem.vue +366 -366
- package/vueLoadingOverlay.vue +70 -70
|
Binary file
|
package/.vs/slnx.sqlite
ADDED
|
Binary file
|
|
@@ -12,45 +12,39 @@
|
|
|
12
12
|
<div class="border-end">
|
|
13
13
|
<a :href="arrowBackLink" class="btn btn-normal btn-square" title="離開專案"><span class="material-icons">arrow_back</span></a>
|
|
14
14
|
</div>
|
|
15
|
-
<span class="fs-6 mb-0 mx-4 text-nowrap text-project-title"><b>{{projectInfo
|
|
15
|
+
<span class="fs-6 mb-0 mx-4 text-nowrap text-project-title"><b>{{projectInfo?.name}}</b></span>
|
|
16
16
|
<!--TODO: 解決 overflow scroll 與 dropdown 衝突-->
|
|
17
17
|
<div class="flex-grow-1 text-nowrap">
|
|
18
18
|
<div class="d-flex flex-grow-1 border-start">
|
|
19
19
|
<nav class="navbar-nav navbar-main navbar-line navbar-line-lg">
|
|
20
20
|
<div class="nav-item navbar-line-item btn nav-link border-0 dropdown"
|
|
21
|
-
:class="{'active':
|
|
21
|
+
:class="{'active': isActive(null)}">
|
|
22
22
|
<a class="dropdown-link" :href="finalRootDomain + '/ProjectManagement/ProjectInfo?id=' + projectId">
|
|
23
23
|
專案資訊
|
|
24
24
|
</a>
|
|
25
25
|
</div>
|
|
26
26
|
<div class="nav-item navbar-line-item btn nav-link border-0 dropdown"
|
|
27
|
-
:class="{'active':
|
|
28
|
-
<a :href="navLinkObj.url + projectId" class="dropdown-link" v-if="navLinkObj
|
|
29
|
-
<span class="material-icons icon-18 me-2">{{ navLinkObj
|
|
30
|
-
{{ navLinkObj
|
|
27
|
+
:class="{'active': isActive(navLinkObj.moduleLink)}">
|
|
28
|
+
<a :href="navLinkObj.url + projectId" class="dropdown-link" v-if="navLinkObj?.moduleLink?.selfIsApp">
|
|
29
|
+
<span class="material-icons icon-18 me-2">{{ navLinkObj?.moduleLink?.icon }}</span>
|
|
30
|
+
{{ navLinkObj?.moduleLink?.name }}
|
|
31
31
|
</a>
|
|
32
32
|
<span class="dropdown-link dropdown-toggle" data-bs-toggle="dropdown" aria-expanded="false" v-else>
|
|
33
|
-
<span class="material-icons icon-18 me-2">{{ navLinkObj
|
|
34
|
-
{{ navLinkObj
|
|
33
|
+
<span class="material-icons icon-18 me-2">{{ navLinkObj?.moduleLink?.icon }}</span>
|
|
34
|
+
{{ navLinkObj?.moduleLink?.name }}
|
|
35
35
|
</span>
|
|
36
|
-
<ul class="dropdown-menu" :class="{'p-0': navLinkObj
|
|
37
|
-
<li v-if="navLinkObj
|
|
38
|
-
<a class="dropdown-item" :href="app.url + '?projectId=' + projectId" v-for="(app, index) in navLinkObj.apps" :key="index">{{app.name}}</a>
|
|
36
|
+
<ul class="dropdown-menu" :class="{'p-0': navLinkObj?.moduleLink?.apps?.length??0 == 0}">
|
|
37
|
+
<li v-if="navLinkObj?.moduleLink?.apps?.length??0 > 0">
|
|
38
|
+
<a class="dropdown-item" :href="app.url + '?projectId=' + projectId" v-for="(app, index) in navLinkObj.moduleLink.apps" :key="index">{{app.name}}</a>
|
|
39
39
|
</li>
|
|
40
40
|
</ul>
|
|
41
41
|
</div>
|
|
42
42
|
<div class="nav-item navbar-line-item btn nav-link border-0 dropdown"
|
|
43
|
-
:class="{'active':
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
</div>
|
|
49
|
-
<div class="nav-item navbar-line-item btn nav-link border-0 dropdown disabled"
|
|
50
|
-
:class="{'active':activeLinkType==3}">
|
|
51
|
-
<a href="#" class="dropdown-link">
|
|
52
|
-
<span class="material-icons icon-18 me-2">rebase_edit</span>
|
|
53
|
-
家當表單
|
|
43
|
+
:class="{'active': isActive(item.clientId)}"
|
|
44
|
+
v-for="item in navLinkObj.generalLink">
|
|
45
|
+
<a :href="item.url + '?projectId=' + projectId" class="dropdown-link">
|
|
46
|
+
<span class="material-icons icon-18 me-2">{{item.icon}}</span>
|
|
47
|
+
{{item.name}}
|
|
54
48
|
</a>
|
|
55
49
|
</div>
|
|
56
50
|
</nav>
|
|
@@ -78,21 +72,21 @@
|
|
|
78
72
|
<span class="placeholder placeholder-xs w-6rem"></span>
|
|
79
73
|
</div>
|
|
80
74
|
<div class="navbar-content opacity-0 d-flex align-items-center">
|
|
81
|
-
<small class="d-flex me-4" v-if="projectInfo
|
|
75
|
+
<small class="d-flex me-4" v-if="projectInfo?.caseNo">
|
|
82
76
|
<b class="me-2">案號</b>
|
|
83
|
-
<span>{{projectInfo
|
|
77
|
+
<span>{{projectInfo?.caseNo}}</span>
|
|
84
78
|
</small>
|
|
85
79
|
<small class="d-flex me-4">
|
|
86
80
|
<b class="me-2">開工/完工日期</b>
|
|
87
|
-
<span>{{formatDate(projectInfo
|
|
81
|
+
<span>{{formatDate(projectInfo?.beginDT)}} - {{formatDate(projectInfo?.endDT)}}</span>
|
|
88
82
|
</small>
|
|
89
83
|
<small class="d-flex me-4">
|
|
90
84
|
<b class="me-2">核定工期</b>
|
|
91
|
-
<span>{{projectInfo
|
|
85
|
+
<span>{{projectInfo?.approvedWorkingPeriod}}天</span>
|
|
92
86
|
</small>
|
|
93
|
-
<small class="d-flex" v-if="projectInfo
|
|
87
|
+
<small class="d-flex" v-if="projectInfo?.extendToDT">
|
|
94
88
|
<b class="me-2">展延至</b>
|
|
95
|
-
<span>{{ formatDate(projectInfo
|
|
89
|
+
<span>{{ formatDate(projectInfo?.extendToDT) }} ({{projectInfo?.extendDays}}天)</span>
|
|
96
90
|
</small>
|
|
97
91
|
<small class="d-flex ms-auto">
|
|
98
92
|
<slot></slot>
|
|
@@ -104,32 +98,32 @@
|
|
|
104
98
|
|
|
105
99
|
<script>
|
|
106
100
|
import { formatDate } from '../../../node_modules/jobdone-shared-files/common/format';
|
|
107
|
-
import { onMounted, ref } from 'vue';
|
|
101
|
+
import { onMounted, ref, computed, nextTick } from 'vue';
|
|
108
102
|
import axios from 'axios';
|
|
109
103
|
|
|
110
104
|
export default {
|
|
111
105
|
props: {
|
|
112
|
-
|
|
106
|
+
arrowBackLink: {
|
|
113
107
|
type: String,
|
|
114
108
|
required: true
|
|
115
109
|
},
|
|
116
|
-
|
|
110
|
+
projectId: {
|
|
117
111
|
type: String,
|
|
118
112
|
required: true
|
|
119
113
|
},
|
|
120
|
-
|
|
121
|
-
type:
|
|
114
|
+
projectInfo: {
|
|
115
|
+
type: [String, Object],
|
|
122
116
|
required: true
|
|
123
117
|
},
|
|
124
|
-
|
|
125
|
-
type: String,
|
|
118
|
+
projectApps: {
|
|
119
|
+
type: [String, Object],
|
|
126
120
|
required: true
|
|
127
121
|
},
|
|
128
|
-
|
|
122
|
+
activeClientId: {
|
|
129
123
|
type: String,
|
|
130
|
-
required:
|
|
124
|
+
required: false,
|
|
131
125
|
},
|
|
132
|
-
|
|
126
|
+
rootDomain: {
|
|
133
127
|
type: String,
|
|
134
128
|
required: true
|
|
135
129
|
},
|
|
@@ -147,64 +141,116 @@
|
|
|
147
141
|
}
|
|
148
142
|
},
|
|
149
143
|
setup(props) {
|
|
150
|
-
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
name: '',
|
|
158
|
-
beginDT: '',
|
|
159
|
-
endDT: '',
|
|
160
|
-
approvedWorkingPeriod: '',
|
|
161
|
-
latitude: '',
|
|
162
|
-
longitude: '',
|
|
163
|
-
latitudeAndLongitude: '',
|
|
164
|
-
landSerialNo: '',
|
|
165
|
-
remark: '',
|
|
166
|
-
roleType: 1,
|
|
167
|
-
extendToDT: '',
|
|
168
|
-
extendDays: ''
|
|
169
|
-
});
|
|
170
|
-
|
|
171
|
-
const navLinkObj = ref({
|
|
172
|
-
apps: [],
|
|
173
|
-
icon: '',
|
|
174
|
-
name: '',
|
|
175
|
-
url: '',
|
|
176
|
-
selfIsApp: false
|
|
144
|
+
const projectInfo = ref({});
|
|
145
|
+
const navLinkObj = ref({});
|
|
146
|
+
const finalRootDomain = computed(() => {
|
|
147
|
+
if (props.rootDomain.substr(-1) === "/") {
|
|
148
|
+
return props.rootDomain.slice(0, -1);
|
|
149
|
+
}
|
|
150
|
+
return props.rootDomain;
|
|
177
151
|
});
|
|
178
152
|
|
|
179
|
-
const
|
|
180
|
-
|
|
153
|
+
const isActive = (target) => {
|
|
154
|
+
if (target === null) {
|
|
155
|
+
return target === null && !props.activeClientId;
|
|
156
|
+
}
|
|
157
|
+
if (typeof target === 'object') {
|
|
158
|
+
return !!props.activeClientId && (target.clientId === props.activeClientId || target.apps.some(x => x.id == props.activeClientId))
|
|
159
|
+
}
|
|
160
|
+
if (!!props.activeClientId && target == props.activeClientId) {
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
return false;
|
|
164
|
+
}
|
|
181
165
|
|
|
182
166
|
onMounted(async () => {
|
|
183
|
-
try {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
167
|
+
try {
|
|
168
|
+
switch (typeof props.projectInfo) {
|
|
169
|
+
case 'string':
|
|
170
|
+
axios.get(props.projectInfo).then((res) => {
|
|
171
|
+
projectInfo.value = res.data;
|
|
172
|
+
});
|
|
173
|
+
break;
|
|
174
|
+
case 'object':
|
|
175
|
+
projectInfo.value = props.projectInfo;
|
|
176
|
+
break;
|
|
177
|
+
default:
|
|
178
|
+
projectInfo.value = {
|
|
179
|
+
caseNo: '',
|
|
180
|
+
name: '',
|
|
181
|
+
beginDT: '',
|
|
182
|
+
endDT: '',
|
|
183
|
+
approvedWorkingPeriod: '',
|
|
184
|
+
extendToDT: '',
|
|
185
|
+
extendDays: ''
|
|
186
|
+
};
|
|
187
|
+
break;
|
|
188
|
+
}
|
|
189
|
+
} catch (e) {
|
|
190
|
+
projectInfo.value = {
|
|
191
|
+
caseNo: '',
|
|
192
|
+
name: '',
|
|
193
|
+
beginDT: '',
|
|
194
|
+
endDT: '',
|
|
195
|
+
approvedWorkingPeriod: '',
|
|
196
|
+
extendToDT: '',
|
|
197
|
+
extendDays: ''
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
try {
|
|
201
|
+
switch (typeof props.projectApps) {
|
|
202
|
+
case 'string':
|
|
203
|
+
axios.get(props.projectApps).then((res) => {
|
|
204
|
+
navLinkObj.value = res.data;
|
|
205
|
+
});
|
|
206
|
+
break;
|
|
207
|
+
case 'object':
|
|
208
|
+
navLinkObj.value = props.projectApps;
|
|
209
|
+
break;
|
|
210
|
+
default:
|
|
211
|
+
navLinkObj.value = {
|
|
212
|
+
"moduleLink": {
|
|
213
|
+
"apps": [],
|
|
214
|
+
"icon": "edit_document",
|
|
215
|
+
"name": "Module",
|
|
216
|
+
"url": "",
|
|
217
|
+
"mobileUrl": "",
|
|
218
|
+
"mobileAppRoute": "",
|
|
219
|
+
"clientId": null,
|
|
220
|
+
"selfIsApp": false
|
|
221
|
+
},
|
|
222
|
+
"generalLink": []
|
|
223
|
+
}
|
|
224
|
+
break;
|
|
225
|
+
}
|
|
226
|
+
} catch (e) {
|
|
227
|
+
navLinkObj.value = {
|
|
228
|
+
"moduleLink": {
|
|
229
|
+
"apps": [],
|
|
230
|
+
"icon": "edit_document",
|
|
231
|
+
"name": "Module",
|
|
232
|
+
"url": "",
|
|
233
|
+
"mobileUrl": "",
|
|
234
|
+
"mobileAppRoute": "",
|
|
235
|
+
"clientId": null,
|
|
236
|
+
"selfIsApp": false
|
|
237
|
+
},
|
|
238
|
+
"generalLink": []
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
187
242
|
|
|
188
|
-
|
|
189
|
-
axios.get(props.apiProjectInfo),
|
|
190
|
-
axios.get(props.apiProjectApps)
|
|
191
|
-
]);
|
|
192
|
-
Object.assign(projectInfo.value, data[0].data);
|
|
193
|
-
Object.assign(navLinkObj.value, data[1].data);
|
|
194
|
-
|
|
243
|
+
nextTick(() => {
|
|
195
244
|
let navbarElements = document.getElementsByClassName('navbar-content');
|
|
196
|
-
Array.from(navbarElements).forEach(function(item){
|
|
245
|
+
Array.from(navbarElements).forEach(function (item) {
|
|
197
246
|
item.classList.remove("opacity-0");
|
|
198
247
|
});
|
|
199
248
|
|
|
200
249
|
let placeholderElements = document.getElementsByClassName('navbar-placeholder-content');
|
|
201
|
-
Array.from(placeholderElements).forEach(function(item){
|
|
250
|
+
Array.from(placeholderElements).forEach(function (item) {
|
|
202
251
|
item.classList.add("opacity-0");
|
|
203
252
|
});
|
|
204
|
-
|
|
205
|
-
} catch (error) {
|
|
206
|
-
console.log(error);
|
|
207
|
-
}
|
|
253
|
+
});
|
|
208
254
|
});
|
|
209
255
|
|
|
210
256
|
|
|
@@ -213,6 +259,7 @@
|
|
|
213
259
|
projectInfo,
|
|
214
260
|
navLinkObj,
|
|
215
261
|
finalRootDomain,
|
|
262
|
+
isActive
|
|
216
263
|
}
|
|
217
264
|
}
|
|
218
265
|
}
|
package/README.md
CHANGED
|
@@ -49,14 +49,14 @@
|
|
|
49
49
|
專案資訊 Navbar
|
|
50
50
|
|
|
51
51
|
需要傳入的值:
|
|
52
|
-
| 數值名稱
|
|
53
|
-
|
|
54
|
-
| root-domain | 底層的 domain,傳入的值有無斜線皆可
|
|
55
|
-
| arrow-back-link | 離開專案的連結,一般來說是底層的 ProjectList
|
|
56
|
-
|
|
|
52
|
+
| 數值名稱 | 說明 | 必要 |
|
|
53
|
+
|------------------|--------------------------------------------------------------------------------|------|
|
|
54
|
+
| root-domain | 底層的 domain,傳入的值有無斜線皆可 | 是 |
|
|
55
|
+
| arrow-back-link | 離開專案的連結,一般來說是底層的 ProjectList | 是 |
|
|
56
|
+
| project-info | 可接受api url或物件,api僅支援Get請求,結構應為`{name: "", caseNo: "", caseNo: "",beginDT:"",endDT:"",approvedWorkingPeriod:0, extendToDT:"",extendDays:""}`| 是 |
|
|
57
|
+
| project-apps | 可接受api url或物件,api僅支援Get請求,結構去Copy底層API取得專案所屬Module的App連結(V2 TOP)| 是 |
|
|
58
|
+
| active-client-id | Navbar active的對象,請填入client id,不填預設active專案資訊| N |
|
|
57
59
|
| project-id | project id | 是 |
|
|
58
|
-
| api-project-apps | 取得 project module & menu | 是 |
|
|
59
|
-
| api-project-info | 取得 project 資訊 | 是 |
|
|
60
60
|
| user-id | 傳入 user 的帳號 id | 是 |
|
|
61
61
|
| user-picture | 傳入 user 的大頭貼 | 是 |
|
|
62
62
|
| log-out-link | 登出連結 | 是 |
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Collapse } from 'bootstrap'
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
mounted(el) {
|
|
5
|
-
Collapse.getOrCreateInstance(el, {
|
|
6
|
-
toggle: false
|
|
7
|
-
});
|
|
8
|
-
},
|
|
9
|
-
unmounted(el) {
|
|
10
|
-
var instance = Collapse.getOrCreateInstance(el);
|
|
11
|
-
instance.dispose();
|
|
12
|
-
}
|
|
1
|
+
import { Collapse } from 'bootstrap'
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
mounted(el) {
|
|
5
|
+
Collapse.getOrCreateInstance(el, {
|
|
6
|
+
toggle: false
|
|
7
|
+
});
|
|
8
|
+
},
|
|
9
|
+
unmounted(el) {
|
|
10
|
+
var instance = Collapse.getOrCreateInstance(el);
|
|
11
|
+
instance.dispose();
|
|
12
|
+
}
|
|
13
13
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Popover } from 'bootstrap'
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
mounted(el) {
|
|
5
|
-
Popover.getOrCreateInstance(el);
|
|
6
|
-
},
|
|
7
|
-
unmounted(el) {
|
|
8
|
-
var instance = Popover.getOrCreateInstance(el);
|
|
9
|
-
instance.dispose();
|
|
10
|
-
}
|
|
1
|
+
import { Popover } from 'bootstrap'
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
mounted(el) {
|
|
5
|
+
Popover.getOrCreateInstance(el);
|
|
6
|
+
},
|
|
7
|
+
unmounted(el) {
|
|
8
|
+
var instance = Popover.getOrCreateInstance(el);
|
|
9
|
+
instance.dispose();
|
|
10
|
+
}
|
|
11
11
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Tooltip } from 'bootstrap'
|
|
2
|
-
|
|
3
|
-
export default {
|
|
4
|
-
mounted(el) {
|
|
5
|
-
Tooltip.getOrCreateInstance(el);
|
|
6
|
-
},
|
|
7
|
-
unmounted(el) {
|
|
8
|
-
var instance = Tooltip.getOrCreateInstance(el);
|
|
9
|
-
instance.dispose();
|
|
10
|
-
}
|
|
1
|
+
import { Tooltip } from 'bootstrap'
|
|
2
|
+
|
|
3
|
+
export default {
|
|
4
|
+
mounted(el) {
|
|
5
|
+
Tooltip.getOrCreateInstance(el);
|
|
6
|
+
},
|
|
7
|
+
unmounted(el) {
|
|
8
|
+
var instance = Tooltip.getOrCreateInstance(el);
|
|
9
|
+
instance.dispose();
|
|
10
|
+
}
|
|
11
11
|
}
|
package/common/format.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import dayjs from 'dayjs';
|
|
2
|
-
import { computed } from 'vue';
|
|
3
|
-
|
|
4
|
-
// 時間格式
|
|
5
|
-
export const formatDate = (value) => {
|
|
6
|
-
if (value === null || !value) {
|
|
7
|
-
return value;
|
|
8
|
-
} else {
|
|
9
|
-
return dayjs(value).format('YYYY-MM-DD');
|
|
10
|
-
}
|
|
11
|
-
};
|
|
12
|
-
|
|
13
|
-
export const formatDT = (value) => {
|
|
14
|
-
if (value === null || !value) {
|
|
15
|
-
return value;
|
|
16
|
-
} else {
|
|
17
|
-
return dayjs(value).format('YYYY-MM-DD HH:mm:ss');
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// 千分位格式
|
|
23
|
-
export const formatThousands = computed(() => {
|
|
24
|
-
return function(number){
|
|
25
|
-
return new Intl.NumberFormat().format(number);
|
|
26
|
-
}
|
|
1
|
+
import dayjs from 'dayjs';
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
|
|
4
|
+
// 時間格式
|
|
5
|
+
export const formatDate = (value) => {
|
|
6
|
+
if (value === null || !value) {
|
|
7
|
+
return value;
|
|
8
|
+
} else {
|
|
9
|
+
return dayjs(value).format('YYYY-MM-DD');
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export const formatDT = (value) => {
|
|
14
|
+
if (value === null || !value) {
|
|
15
|
+
return value;
|
|
16
|
+
} else {
|
|
17
|
+
return dayjs(value).format('YYYY-MM-DD HH:mm:ss');
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
// 千分位格式
|
|
23
|
+
export const formatThousands = computed(() => {
|
|
24
|
+
return function(number){
|
|
25
|
+
return new Intl.NumberFormat().format(number);
|
|
26
|
+
}
|
|
27
27
|
});
|
package/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import paginate from "./paginate.vue";
|
|
2
|
-
import tagEditor from "./tagEditor.vue";
|
|
3
|
-
import tree from "./tree.vue";
|
|
4
|
-
import vueLoadingOverlay from "./vueLoadingOverlay.vue";
|
|
5
|
-
import projectNavbar from "./ProjectManagement/projectNavbar.vue";
|
|
6
|
-
|
|
7
|
-
export default {
|
|
8
|
-
paginate,
|
|
9
|
-
tagEditor,
|
|
10
|
-
tree,
|
|
11
|
-
vueLoadingOverlay,
|
|
12
|
-
|
|
13
|
-
// ProjectManagement
|
|
14
|
-
projectNavbar
|
|
1
|
+
import paginate from "./paginate.vue";
|
|
2
|
+
import tagEditor from "./tagEditor.vue";
|
|
3
|
+
import tree from "./tree.vue";
|
|
4
|
+
import vueLoadingOverlay from "./vueLoadingOverlay.vue";
|
|
5
|
+
import projectNavbar from "./ProjectManagement/projectNavbar.vue";
|
|
6
|
+
|
|
7
|
+
export default {
|
|
8
|
+
paginate,
|
|
9
|
+
tagEditor,
|
|
10
|
+
tree,
|
|
11
|
+
vueLoadingOverlay,
|
|
12
|
+
|
|
13
|
+
// ProjectManagement
|
|
14
|
+
projectNavbar
|
|
15
15
|
}
|