ts-glitter 21.3.8 → 21.4.0
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/lowcode/Entry.js +1 -1
- package/lowcode/Entry.ts +1 -1
- package/lowcode/backend-manager/bg-line.js +12 -1
- package/lowcode/backend-manager/bg-line.ts +16 -1
- package/lowcode/backend-manager/bg-notify.js +13 -2
- package/lowcode/backend-manager/bg-notify.ts +17 -2
- package/lowcode/backend-manager/bg-product.js +81 -30
- package/lowcode/backend-manager/bg-product.ts +95 -34
- package/lowcode/backend-manager/bg-recommend.js +109 -141
- package/lowcode/backend-manager/bg-recommend.ts +122 -144
- package/lowcode/backend-manager/bg-sns.js +14 -4
- package/lowcode/backend-manager/bg-sns.ts +18 -4
- package/lowcode/backend-manager/bg-widget.js +176 -12
- package/lowcode/backend-manager/bg-widget.ts +198 -13
- package/lowcode/cms-plugin/auto-fcm-advertise.js +13 -2
- package/lowcode/cms-plugin/auto-fcm-advertise.ts +16 -2
- package/lowcode/cms-plugin/auto-fcm-history.js +13 -2
- package/lowcode/cms-plugin/auto-fcm-history.ts +16 -2
- package/lowcode/cms-plugin/model/order.d.ts +1 -0
- package/lowcode/cms-plugin/module/order-excel.js +18 -2
- package/lowcode/cms-plugin/module/order-excel.ts +20 -9
- package/lowcode/cms-plugin/module/product-setting.js +2 -1
- package/lowcode/cms-plugin/module/product-setting.ts +2 -1
- package/lowcode/cms-plugin/module/user-excel.js +1 -1
- package/lowcode/cms-plugin/module/user-excel.ts +2 -2
- package/lowcode/cms-plugin/pos-pages/payment-page.js +3 -2
- package/lowcode/cms-plugin/pos-pages/payment-page.ts +11 -5
- package/lowcode/cms-plugin/pos-pages/products-page.ts +0 -1
- package/lowcode/cms-plugin/shopping-allowance-manager.js +3 -2
- package/lowcode/cms-plugin/shopping-allowance-manager.ts +3 -2
- package/lowcode/cms-plugin/shopping-discount-setting.js +2 -0
- package/lowcode/cms-plugin/shopping-discount-setting.ts +2 -0
- package/lowcode/cms-plugin/shopping-invoice-manager.js +7 -4
- package/lowcode/cms-plugin/shopping-invoice-manager.ts +12 -11
- package/lowcode/cms-plugin/shopping-order-manager.js +21 -4
- package/lowcode/cms-plugin/shopping-order-manager.ts +30 -11
- package/lowcode/cms-plugin/shopping-product-setting.js +45 -41
- package/lowcode/cms-plugin/shopping-product-setting.ts +55 -48
- package/lowcode/cms-plugin/shopping-rebate.js +52 -46
- package/lowcode/cms-plugin/shopping-rebate.ts +402 -396
- package/lowcode/cms-plugin/shopping-setting-advance.js +6 -6
- package/lowcode/cms-plugin/shopping-setting-advance.ts +7 -7
- package/lowcode/cms-plugin/shopping-setting-basic.js +44 -0
- package/lowcode/cms-plugin/shopping-setting-basic.ts +63 -1
- package/lowcode/cms-plugin/shopping-setting-stock-log.js +57 -0
- package/lowcode/cms-plugin/shopping-setting-stock-log.ts +101 -0
- package/lowcode/cms-plugin/user-list.js +10 -9
- package/lowcode/cms-plugin/user-list.ts +11 -8
- package/lowcode/css/editor.css +1 -1
- package/lowcode/form-view/editor/image-selector.js +83 -82
- package/lowcode/form-view/editor/image-selector.ts +115 -107
- package/lowcode/glitter-base/route/user.js +27 -34
- package/lowcode/glitter-base/route/user.ts +31 -40
- package/lowcode/glitterBundle/dialog/ShareDialog.js +1 -0
- package/lowcode/glitterBundle/dialog/ShareDialog.ts +2 -0
- package/lowcode/glitterBundle/dialog/dialog.js +2 -2
- package/lowcode/glitterBundle/dialog/dialog.ts +2 -2
- package/lowcode/glitterBundle/plugins/editor-elem.js +5 -11
- package/lowcode/glitterBundle/plugins/editor-elem.ts +11 -11
- package/lowcode/modules/image-library.js +836 -486
- package/lowcode/modules/image-library.ts +1760 -1418
- package/lowcode/modules/tool.js +10 -9
- package/lowcode/modules/tool.ts +11 -10
- package/lowcode/public-components/checkout/index.js +4 -2
- package/lowcode/public-components/checkout/index.ts +5 -3
- package/lowcode/public-models/product.ts +13 -0
- package/nxv0ptv53w.json +1 -0
- package/package.json +1 -1
- package/src/api-public/controllers/shop.js +2 -2
- package/src/api-public/controllers/shop.js.map +1 -1
- package/src/api-public/controllers/shop.ts +5 -2
- package/src/api-public/controllers/stock.js +1 -1
- package/src/api-public/controllers/stock.js.map +1 -1
- package/src/api-public/controllers/stock.ts +93 -81
- package/src/api-public/models/glitter-finance.js +2 -1
- package/src/api-public/models/glitter-finance.js.map +1 -1
- package/src/api-public/services/checkout-event.js +1 -0
- package/src/api-public/services/checkout-event.js.map +1 -1
- package/src/api-public/services/checkout-event.ts +2 -2
- package/src/api-public/services/data-analyze.d.ts +1 -1
- package/src/api-public/services/diff-record.d.ts +25 -0
- package/src/api-public/services/diff-record.js +158 -0
- package/src/api-public/services/diff-record.js.map +1 -0
- package/src/api-public/services/diff-record.ts +217 -0
- package/src/api-public/services/ezpay/tool.d.ts +1 -0
- package/src/api-public/services/financial-serviceV2.js +7 -17
- package/src/api-public/services/financial-serviceV2.js.map +1 -1
- package/src/api-public/services/public-table-check.js +25 -7
- package/src/api-public/services/public-table-check.js.map +1 -1
- package/src/api-public/services/public-table-check.ts +53 -31
- package/src/api-public/services/shopping.d.ts +2 -12
- package/src/api-public/services/shopping.js +16 -7
- package/src/api-public/services/shopping.js.map +1 -1
- package/src/api-public/services/shopping.ts +33 -7
- package/src/api-public/services/stock.d.ts +1 -1
- package/src/api-public/services/stock.js +19 -17
- package/src/api-public/services/stock.js.map +1 -1
- package/src/api-public/services/stock.ts +711 -696
- package/src/api-public/services/user.d.ts +1 -1
- package/src/api-public/services/user.js +25 -25
- package/src/api-public/services/user.js.map +1 -1
- package/src/api-public/services/user.ts +34 -27
- package/src/app-project/serverless/src/index.js +7 -17
- package/src/app-project/serverless/src/index.js.map +1 -1
- package/src/app-project/serverless/src/modules/CryptoJS.js +7 -17
- package/src/app-project/serverless/src/modules/CryptoJS.js.map +1 -1
- package/src/app-project/serverless/src/modules/database.d.ts +1 -1
- package/src/app-project/serverless/src/modules/redis.d.ts +1 -1
- package/src/app-project/serverless/src/modules/ssh.js +7 -17
- package/src/app-project/serverless/src/modules/ssh.js.map +1 -1
- package/src/firebase/message.js +2 -1
- package/src/firebase/message.js.map +1 -1
- package/src/helper/app_creater.js +2 -1
- package/src/helper/app_creater.js.map +1 -1
- package/src/helper/glitter-util.d.ts +1 -0
- package/src/lambda/interface.js +2 -2
- package/src/lambda/interface.js.map +1 -1
- package/src/modules/CryptoJS.js +7 -17
- package/src/modules/CryptoJS.js.map +1 -1
- package/src/modules/database.d.ts +1 -1
- package/src/modules/ssh.js +7 -17
- package/src/modules/ssh.js.map +1 -1
- package/src/modules/tool.d.ts +5 -0
- package/src/modules/tool.js +19 -0
- package/src/modules/tool.js.map +1 -1
- package/src/modules/tool.ts +27 -0
- package/src/run.js +2 -1
- package/src/run.js.map +1 -1
- package/src/services/app.js +7 -17
- package/src/services/app.js.map +1 -1
- package/src/services/saas-table-check.js +2 -2
- package/src/services/saas-table-check.js.map +1 -1
- package/src/services/ses.js +2 -1
- package/src/services/ses.js.map +1 -1
|
@@ -1,1483 +1,1825 @@
|
|
|
1
|
-
import {GVC} from '../glitterBundle/GVController.js';
|
|
2
|
-
import {ApiUser} from '../glitter-base/route/user.js';
|
|
3
|
-
import {ShareDialog} from '../glitterBundle/dialog/ShareDialog.js';
|
|
4
|
-
import {BgWidget} from '../backend-manager/bg-widget.js';
|
|
5
|
-
import {EditorElem} from '../glitterBundle/plugins/editor-elem.js';
|
|
6
|
-
import {FilterOptions} from '../cms-plugin/filter-options.js';
|
|
7
|
-
import {Tool} from './tool.js';
|
|
1
|
+
import { GVC } from '../glitterBundle/GVController.js';
|
|
2
|
+
import { ApiUser } from '../glitter-base/route/user.js';
|
|
3
|
+
import { ShareDialog } from '../glitterBundle/dialog/ShareDialog.js';
|
|
4
|
+
import { BgWidget } from '../backend-manager/bg-widget.js';
|
|
5
|
+
import { EditorElem } from '../glitterBundle/plugins/editor-elem.js';
|
|
6
|
+
import { FilterOptions } from '../cms-plugin/filter-options.js';
|
|
7
|
+
import { Tool } from './tool.js';
|
|
8
8
|
|
|
9
9
|
export type FileItem = {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
selected?: boolean;
|
|
11
|
+
title: string;
|
|
12
|
+
data: any;
|
|
13
|
+
items?: FileItem[];
|
|
14
|
+
type: 'file' | 'folder';
|
|
15
|
+
tag: string[];
|
|
16
|
+
id: string;
|
|
16
17
|
};
|
|
17
18
|
|
|
18
19
|
const html = String.raw;
|
|
20
|
+
const css = String.raw;
|
|
19
21
|
|
|
20
22
|
export class imageLibrary {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
23
|
+
public static fileSystem(cf: {
|
|
24
|
+
getSelect: (id: FileItem[]) => void;
|
|
25
|
+
gvc: GVC;
|
|
26
|
+
key: string;
|
|
27
|
+
title: string;
|
|
28
|
+
mul?: boolean;
|
|
29
|
+
tag: string;
|
|
30
|
+
plus: (gvc: GVC, callback: (file: FileItem[]) => void, fileType?: string) => void;
|
|
31
|
+
edit: (
|
|
32
|
+
file: FileItem,
|
|
33
|
+
callback: (file?: FileItem) => void,
|
|
34
|
+
obj?: {
|
|
35
|
+
deleteStyle?: number | 0;
|
|
36
|
+
tag: string | '';
|
|
37
|
+
}
|
|
38
|
+
) => void;
|
|
39
|
+
cancelEvent?: () => void;
|
|
40
|
+
edit_only?: boolean;
|
|
41
|
+
}) {
|
|
42
|
+
const gvc = cf.gvc;
|
|
43
|
+
const vm: {
|
|
44
|
+
id: string;
|
|
45
|
+
footer_id: string
|
|
46
|
+
link: FileItem[];
|
|
47
|
+
loading: boolean;
|
|
48
|
+
selected: boolean;
|
|
49
|
+
query: string;
|
|
50
|
+
orderString: string;
|
|
51
|
+
type: string;
|
|
52
|
+
tag?: string;
|
|
53
|
+
newFolder: FileItem;
|
|
54
|
+
} = {
|
|
55
|
+
id: cf.gvc.glitter.getUUID(),
|
|
56
|
+
footer_id: gvc.glitter.getUUID(),
|
|
57
|
+
link: [],
|
|
58
|
+
selected: false,
|
|
59
|
+
loading: true,
|
|
60
|
+
query: '',
|
|
61
|
+
orderString: 'created_time_desc',
|
|
62
|
+
type: 'file',
|
|
63
|
+
newFolder: {
|
|
64
|
+
selected: false,
|
|
65
|
+
title: '',
|
|
66
|
+
data: [],
|
|
67
|
+
items: [],
|
|
68
|
+
type: 'folder',
|
|
69
|
+
tag: [],
|
|
70
|
+
id: gvc.glitter.getUUID(),
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
const ids = {
|
|
74
|
+
classPrefix: 'image-library-dialog',
|
|
75
|
+
};
|
|
56
76
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
}
|
|
62
|
-
return dd.items.filter((d: any) => {
|
|
63
|
-
return d.selected;
|
|
64
|
-
}).length;
|
|
65
|
-
}
|
|
77
|
+
gvc.addStyle(css`
|
|
78
|
+
.${ids.classPrefix} {
|
|
79
|
+
}
|
|
80
|
+
`);
|
|
66
81
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
82
|
+
if (cf.key == 'folderEdit') {
|
|
83
|
+
vm.tag = cf.tag;
|
|
84
|
+
vm.type = 'folderEdit';
|
|
85
|
+
}
|
|
86
|
+
//修改最上面的視窗名稱和最下方的取消按鍵
|
|
71
87
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
loop(dd.items ?? []);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}
|
|
88
|
+
//修改彈出式窗的名字
|
|
89
|
+
function changeWindowsName(name: string) {
|
|
90
|
+
let titleContent = window?.parent?.document?.querySelector('.dialog-title div');
|
|
79
91
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
vm.loading = false;
|
|
85
|
-
callback();
|
|
86
|
-
}
|
|
87
|
-
});
|
|
88
|
-
}
|
|
92
|
+
if (titleContent) {
|
|
93
|
+
titleContent.textContent = name;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
89
96
|
|
|
90
|
-
|
|
97
|
+
function changeCancelBTNName(name: string) {
|
|
98
|
+
let backBTN = window?.parent?.document?.querySelector('.btn-snow span');
|
|
91
99
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
100
|
+
if (backBTN) {
|
|
101
|
+
backBTN.textContent = name;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function gClass(className: string) {
|
|
106
|
+
return ids.classPrefix + '-' + className;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
function getSelectCount(dd: any) {
|
|
110
|
+
let count = 0;
|
|
111
|
+
if (dd.selected) {
|
|
112
|
+
count++;
|
|
113
|
+
}
|
|
114
|
+
return dd.items.filter((d: any) => {
|
|
115
|
+
return d.selected;
|
|
116
|
+
}).length;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
function getPublicConfig(callback: () => void) {
|
|
120
|
+
ApiUser.getPublicConfig('image-manager', 'manager').then((data: any) => {
|
|
121
|
+
if (data.response.value) {
|
|
122
|
+
vm.link = data.response.value;
|
|
123
|
+
|
|
124
|
+
function loop(array: FileItem[]) {
|
|
125
|
+
array.map(dd => {
|
|
126
|
+
if (dd.type === 'folder') {
|
|
127
|
+
loop(dd.items ?? []);
|
|
128
|
+
}
|
|
98
129
|
});
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
loop(vm.link);
|
|
133
|
+
vm.loading = false;
|
|
134
|
+
callback();
|
|
135
|
+
} else {
|
|
136
|
+
vm.loading = false;
|
|
137
|
+
callback();
|
|
99
138
|
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
100
141
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
user_id: 'manager',
|
|
108
|
-
}).then((data) => {
|
|
109
|
-
dialog.dataLoading({visible: false});
|
|
110
|
-
dialog.successMessage({text: '儲存成功'});
|
|
111
|
-
finish();
|
|
112
|
-
});
|
|
142
|
+
const dialog = new ShareDialog(cf.gvc.glitter);
|
|
143
|
+
|
|
144
|
+
function clearNoNeedData(items: FileItem[]) {
|
|
145
|
+
items.map(dd => {
|
|
146
|
+
if ((dd as any).selected) {
|
|
147
|
+
(dd as any).selected = undefined;
|
|
113
148
|
}
|
|
149
|
+
clearNoNeedData(dd.items || []);
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function save(finish: () => void) {
|
|
154
|
+
clearNoNeedData(vm.link);
|
|
155
|
+
dialog.dataLoading({ visible: true });
|
|
156
|
+
ApiUser.setPublicConfig({
|
|
157
|
+
key: 'image-manager',
|
|
158
|
+
value: vm.link,
|
|
159
|
+
user_id: 'manager',
|
|
160
|
+
}).then(data => {
|
|
161
|
+
dialog.dataLoading({ visible: false });
|
|
162
|
+
dialog.successMessage({ text: '儲存成功' });
|
|
163
|
+
finish();
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function closeFolderView(returnPage: 'folder' | 'file' = 'folder') {
|
|
168
|
+
changeWindowsName('圖片庫');
|
|
169
|
+
changeCancelBTNName('取消');
|
|
170
|
+
}
|
|
114
171
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
172
|
+
const isSafari = (() => {
|
|
173
|
+
const userAgent = navigator.userAgent.toLowerCase();
|
|
174
|
+
return userAgent.includes('safari') && !userAgent.includes('chrome') && !userAgent.includes('edg');
|
|
175
|
+
})();
|
|
119
176
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
177
|
+
return BgWidget.imageLibraryDialog({
|
|
178
|
+
gvc: gvc,
|
|
179
|
+
title: cf.title,
|
|
180
|
+
innerHTML: (gvc: GVC) => {
|
|
181
|
+
const that = this;
|
|
182
|
+
|
|
183
|
+
function renderItems(
|
|
184
|
+
array: FileItem[],
|
|
185
|
+
opt?: {
|
|
186
|
+
onlyRead?: boolean;
|
|
187
|
+
}
|
|
188
|
+
): string {
|
|
189
|
+
const id = gvc.glitter.getUUID();
|
|
190
|
+
return gvc.bindView(() => {
|
|
191
|
+
return {
|
|
192
|
+
bind: id,
|
|
193
|
+
view: () => {
|
|
194
|
+
try {
|
|
195
|
+
let editArray: boolean[] = [];
|
|
196
|
+
let sortArray = array.map(dd => {
|
|
197
|
+
return dd;
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
switch (vm.orderString) {
|
|
201
|
+
case 'created_time_desc': {
|
|
202
|
+
sortArray.reverse();
|
|
203
|
+
break;
|
|
130
204
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
});
|
|
160
|
-
break;
|
|
161
|
-
}
|
|
162
|
-
default:
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
return sortArray
|
|
166
|
-
.map((dd, index) => {
|
|
167
|
-
const passType = ['file', 'folderView', 'folderEdit', 'folderADD'];
|
|
168
|
-
const noImageURL = 'https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1722936949034-default_image.jpg';
|
|
169
|
-
const originImageURL = passType.includes(vm.type) ? dd.data : vm.link.find((data) => data?.tag?.includes(dd.title))?.data;
|
|
170
|
-
const originImageSplit = (originImageURL || '').split('/');
|
|
171
|
-
const imageBoxClass = Tool.randomString(5);
|
|
172
|
-
|
|
173
|
-
dd.title = dd.title || originImageSplit.pop() || '圖片尚未命名';
|
|
174
|
-
if (editArray.length < index + 1) {
|
|
175
|
-
editArray.push(false);
|
|
176
|
-
}
|
|
205
|
+
case 'created_time_asc': {
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
case 'name_AtoZ': {
|
|
209
|
+
sortArray.sort((a, b) => {
|
|
210
|
+
return a.title.localeCompare(b.title);
|
|
211
|
+
});
|
|
212
|
+
break;
|
|
213
|
+
}
|
|
214
|
+
case 'name_ZtoA': {
|
|
215
|
+
sortArray.sort((b, a) => {
|
|
216
|
+
return a.title.localeCompare(b.title);
|
|
217
|
+
});
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
default:
|
|
221
|
+
break;
|
|
222
|
+
}
|
|
223
|
+
return sortArray
|
|
224
|
+
.map((fileItem, index) => {
|
|
225
|
+
const passType = ['file', 'folderView', 'folderEdit', 'folderADD'];
|
|
226
|
+
const noImageURL =
|
|
227
|
+
'https://d3jnmi1tfjgtti.cloudfront.net/file/234285319/1722936949034-default_image.jpg';
|
|
228
|
+
const originImageURL = passType.includes(vm.type)
|
|
229
|
+
? fileItem.data
|
|
230
|
+
: vm.link.find(data => data?.tag?.includes(fileItem.title))?.data;
|
|
231
|
+
const originImageSplit = (originImageURL || '').split('/');
|
|
232
|
+
const imageBoxClass = Tool.randomString(5);
|
|
177
233
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
234
|
+
fileItem.title = fileItem.title || originImageSplit.pop() || '圖片尚未命名';
|
|
235
|
+
if (editArray.length < index + 1) {
|
|
236
|
+
editArray.push(false);
|
|
237
|
+
}
|
|
181
238
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
save(() => {
|
|
220
|
-
gvc.notifyDataChange(vm.id);
|
|
221
|
-
});
|
|
222
|
-
}
|
|
223
|
-
});
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
return html`
|
|
228
|
-
<div
|
|
229
|
-
class=""
|
|
230
|
-
style="padding: 10px 12px;position: relative;${(dd as any).selected
|
|
231
|
-
? `border-radius: 10px;border: 2px solid #393939;background: #F7F7F7;box-shadow: 3px 3px 10px 0px rgba(0, 0, 0, 0.10);`
|
|
232
|
-
: editArray[index]
|
|
233
|
-
? `border-radius: 10px;border: 1px solid #DDD;background: #F7F7F7;`
|
|
234
|
-
: ``}"
|
|
235
|
-
onclick="${gvc.event((e, event) => {
|
|
236
|
-
let defaultSelect = (dd as any).selected;
|
|
237
|
-
if (vm.type == 'folder') {
|
|
238
|
-
array = [];
|
|
239
|
-
vm.type = 'folderView';
|
|
240
|
-
vm.tag = dd.title;
|
|
241
|
-
gvc.notifyDataChange(vm.id);
|
|
242
|
-
return;
|
|
243
|
-
}
|
|
244
|
-
if (opt?.onlyRead) {
|
|
245
|
-
return;
|
|
246
|
-
}
|
|
247
|
-
if (!cf.mul) {
|
|
248
|
-
array.forEach((data) => {
|
|
249
|
-
(data as any).selected = false;
|
|
250
|
-
});
|
|
251
|
-
}
|
|
252
|
-
(dd as any).selected = !defaultSelect;
|
|
253
|
-
gvc.notifyDataChange(vm.id);
|
|
254
|
-
event.stopPropagation();
|
|
255
|
-
})}"
|
|
256
|
-
${!gvc.glitter.isTouchDevice()
|
|
257
|
-
? `
|
|
258
|
-
onmouseenter="${gvc.event(() => {
|
|
259
|
-
if (opt?.onlyRead || cf.key == 'album') {
|
|
260
|
-
return;
|
|
261
|
-
}
|
|
262
|
-
if (!editArray[index]) {
|
|
263
|
-
editArray[index] = true;
|
|
264
|
-
gvc.notifyDataChange(viewID);
|
|
265
|
-
}
|
|
266
|
-
})}"
|
|
267
|
-
onmouseleave="${gvc.event((e, event) => {
|
|
268
|
-
if (opt?.onlyRead) return;
|
|
269
|
-
if (isSafari) {
|
|
270
|
-
const target = event.relatedTarget as HTMLElement;
|
|
271
|
-
const imageBoxClassList = [imageBoxClass];
|
|
272
|
-
const targetClassList = Array.from(target.classList);
|
|
273
|
-
const isOutBorder =
|
|
274
|
-
imageBoxClassList.every((cls) => targetClassList.includes(cls)) &&
|
|
275
|
-
targetClassList.every((cls) => imageBoxClassList.includes(cls));
|
|
276
|
-
const isTitle = targetClassList.includes(`${imageBoxClass}-title`);
|
|
277
|
-
const isInside = targetClassList.length === 0;
|
|
278
|
-
const isOutOfViewContainer = target.dataset.viewContainer === 'true';
|
|
279
|
-
const isUL = target.tagName === 'UL';
|
|
280
|
-
|
|
281
|
-
if ((isOutBorder || isTitle || isInside) && !(isOutOfViewContainer || isUL)) {
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
editArray[index] = false;
|
|
286
|
-
gvc.notifyDataChange(viewID);
|
|
287
|
-
})}"
|
|
288
|
-
`
|
|
289
|
-
: ``}
|
|
290
|
-
>
|
|
291
|
-
<div
|
|
292
|
-
class="${editArray[index] && !(dd as any).selected ? `d-flex` : `d-none`} align-items-center justify-content-center"
|
|
293
|
-
style="height:24px;width:24px;border-radius: 3px;background: rgba(0, 0, 0, 0.80);position: absolute;right: 8.15px;top: 8px;"
|
|
294
|
-
onclick="${gvc.event((e, event) => {
|
|
295
|
-
event.stopPropagation();
|
|
296
|
-
itemClick();
|
|
297
|
-
})}"
|
|
298
|
-
>
|
|
299
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="12"
|
|
300
|
-
height="12" viewBox="0 0 12 12" fill="none">
|
|
301
|
-
<g clip-path="url(#clip0_13619_1920)">
|
|
302
|
-
<path
|
|
303
|
-
d="M0.852963 8.45864L0.3139 10.2891L0.0232751 11.2782C-0.0353187 11.4774 0.0185876 11.6907 0.1639 11.836C0.309213 11.9813 0.522494 12.0352 0.719369 11.979L1.71078 11.686L3.54124 11.1469C3.78499 11.0766 4.01234 10.9594 4.21156 10.8071L4.21859 10.8118L4.23031 10.793C4.26312 10.7672 4.29359 10.7415 4.32406 10.7157C4.35687 10.6875 4.38734 10.6571 4.41781 10.6266L11.5475 3.49927C12.0608 2.98599 12.1241 2.19614 11.7397 1.61255C11.6858 1.53052 11.6202 1.45083 11.5475 1.37817L10.6241 0.452393C10.0381 -0.133545 9.0889 -0.133545 8.50296 0.452393L1.37328 7.58208C1.31468 7.64067 1.25843 7.70395 1.20687 7.76958L1.18812 7.7813L1.19281 7.78833C1.04046 7.98755 0.925619 8.21489 0.852963 8.45864ZM8.9764 4.47661L4.6264 8.82661L3.4639 8.53599L3.17327 7.37349L7.52328 3.02349L8.9764 4.47661ZM2.27328 8.41177L2.45374 9.13833C2.50296 9.33989 2.66234 9.49692 2.8639 9.54849L3.59046 9.72895L3.41703 9.99145C3.35609 10.0243 3.29281 10.0524 3.22718 10.0711L2.67874 10.2329L1.39203 10.6079L1.76937 9.32349L1.93109 8.77505C1.94984 8.70942 1.97796 8.6438 2.01078 8.5852L2.27328 8.41177ZM7.38968 5.12583C7.53499 4.98052 7.53499 4.74145 7.38968 4.59614C7.24437 4.45083 7.00531 4.45083 6.85999 4.59614L4.60999 6.84614C4.46468 6.99146 4.46468 7.23052 4.60999 7.37583C4.75531 7.52114 4.99437 7.52114 5.13968 7.37583L7.38968 5.12583Z"
|
|
304
|
-
fill="white"
|
|
305
|
-
/>
|
|
306
|
-
</g>
|
|
307
|
-
<defs>
|
|
308
|
-
<clipPath id="clip0_13619_1920">
|
|
309
|
-
<rect width="12" height="12"
|
|
310
|
-
fill="white"/>
|
|
311
|
-
</clipPath>
|
|
312
|
-
</defs>
|
|
313
|
-
</svg>
|
|
314
|
-
</div>
|
|
315
|
-
<div
|
|
316
|
-
class="position-absolute ${(dd as any).selected ? `d-blok` : `d-none`} "
|
|
317
|
-
style="transform: translate(-50%,-50%);left: 50%;top:50%;"
|
|
318
|
-
>
|
|
319
|
-
${BgWidget.darkButton(
|
|
320
|
-
'編輯圖片',
|
|
321
|
-
gvc.event(() => {
|
|
322
|
-
itemClick();
|
|
323
|
-
})
|
|
324
|
-
)}
|
|
325
|
-
</div>
|
|
326
|
-
<div
|
|
327
|
-
class="${(dd as any).selected ? `d-flex` : `d-none`} "
|
|
328
|
-
style="height:24px;width:24px;border-radius: 3px;position: absolute;right: 8.15px;top: 8px;"
|
|
329
|
-
>
|
|
330
|
-
<i class="fa-solid fa-square-check "
|
|
331
|
-
style="color: #393939;font-size: 24px;"></i>
|
|
332
|
-
</div>
|
|
333
|
-
|
|
334
|
-
<div
|
|
335
|
-
style="width:100%;padding-top: 100%;background:50%/contain url('${imageUrl}') no-repeat;border-radius: 5px;border: 0.938px solid #DDD;background: ;"
|
|
336
|
-
></div>
|
|
337
|
-
<div
|
|
338
|
-
class="w-100 text-center font-size: 16px;font-style: normal;font-weight: 400;text-overflow: ellipsis;"
|
|
339
|
-
style="overflow:hidden;white-space: nowrap;text-overflow: ellipsis;"
|
|
340
|
-
contenteditable="true"
|
|
341
|
-
onchange="${gvc.event((e: any) => {
|
|
342
|
-
})}"
|
|
343
|
-
>
|
|
344
|
-
${dd.title}
|
|
345
|
-
</div>
|
|
346
|
-
</div>
|
|
347
|
-
`;
|
|
348
|
-
} catch (e) {
|
|
349
|
-
console.error(e);
|
|
350
|
-
return ``;
|
|
351
|
-
}
|
|
352
|
-
},
|
|
353
|
-
divCreate: {
|
|
354
|
-
style: `${gvc.glitter.ut.frSize(
|
|
355
|
-
{
|
|
356
|
-
sm: `width:15%;`,
|
|
357
|
-
},
|
|
358
|
-
`width:49%;`
|
|
359
|
-
)}cursor:pointer;`,
|
|
360
|
-
},
|
|
361
|
-
});
|
|
362
|
-
})
|
|
363
|
-
.join('');
|
|
364
|
-
} catch (e) {
|
|
365
|
-
console.error(`error=>`, e);
|
|
366
|
-
return ``;
|
|
239
|
+
if (!fileItem.title.toLowerCase().includes(vm.query.toLowerCase())) {
|
|
240
|
+
return;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
let viewID = gvc.glitter.getUUID();
|
|
244
|
+
return gvc.bindView({
|
|
245
|
+
bind: viewID,
|
|
246
|
+
view: () => {
|
|
247
|
+
try {
|
|
248
|
+
const imageUrl = originImageURL ?? noImageURL;
|
|
249
|
+
|
|
250
|
+
function itemClick() {
|
|
251
|
+
if (vm.type == 'folder') {
|
|
252
|
+
console.log("vm.link --" , vm.link);
|
|
253
|
+
//編輯資料夾內容
|
|
254
|
+
vm.type = 'folderEdit';
|
|
255
|
+
that.selectImageLibrary(
|
|
256
|
+
gvc,
|
|
257
|
+
selectData => {
|
|
258
|
+
vm.link = selectData;
|
|
259
|
+
gvc.notifyDataChange(vm.id);
|
|
260
|
+
},
|
|
261
|
+
`<div class="d-flex flex-column" style="border-radius: 10px 10px 0px 0px;background: #F2F2F2;">${vm.tag}</div>`,
|
|
262
|
+
{
|
|
263
|
+
key: 'folderEdit',
|
|
264
|
+
mul: true,
|
|
265
|
+
tag: fileItem.title,
|
|
266
|
+
}
|
|
267
|
+
);
|
|
268
|
+
} else if (vm.type == 'folderView') {
|
|
269
|
+
function updateLinkList(replaceId: string, newItem?: FileItem) {
|
|
270
|
+
const replaceItemIndex = vm.link.findIndex(i => i.id === replaceId);
|
|
271
|
+
console.log(replaceItemIndex);
|
|
272
|
+
if (replaceItemIndex < 0) return;
|
|
273
|
+
if (newItem) vm.link[replaceItemIndex] = newItem;
|
|
274
|
+
else vm.link.splice(replaceItemIndex, 1);
|
|
275
|
+
save(() => gvc.notifyDataChange(vm.id));
|
|
367
276
|
}
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
onCreate: () => {
|
|
380
|
-
gvc.glitter.addMtScript(
|
|
381
|
-
[
|
|
382
|
-
{
|
|
383
|
-
src: `https://raw.githack.com/SortableJS/Sortable/master/Sortable.js`,
|
|
384
|
-
},
|
|
385
|
-
],
|
|
386
|
-
() => {
|
|
387
|
-
},
|
|
388
|
-
() => {
|
|
389
|
-
}
|
|
277
|
+
|
|
278
|
+
cf.edit(
|
|
279
|
+
fileItem,
|
|
280
|
+
(replace?: FileItem) => {
|
|
281
|
+
updateLinkList(replace?.id ?? fileItem.id, replace);
|
|
282
|
+
// save(() => gvc.notifyDataChange(vm.id));
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
deleteStyle: 1,
|
|
286
|
+
tag: vm.tag ?? '',
|
|
287
|
+
}
|
|
390
288
|
);
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
289
|
+
} else {
|
|
290
|
+
cf.edit(fileItem, replace => {
|
|
291
|
+
if (!replace) {
|
|
292
|
+
let selectData = vm.link.findIndex(data => {
|
|
293
|
+
return data.id == fileItem.id;
|
|
294
|
+
});
|
|
295
|
+
vm.link.splice(selectData, 1);
|
|
296
|
+
save(() => {
|
|
297
|
+
gvc.notifyDataChange(vm.id);
|
|
298
|
+
});
|
|
299
|
+
} else {
|
|
300
|
+
let replaceIndex = vm.link.findIndex(data => data.id == replace.id);
|
|
301
|
+
vm.link[replaceIndex] = replace;
|
|
302
|
+
save(() => {
|
|
303
|
+
gvc.notifyDataChange(vm.id);
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
return html`
|
|
311
|
+
<div
|
|
312
|
+
style="padding: 10px 12px;position: relative;${(fileItem as any).selected
|
|
313
|
+
? `border-radius: 10px;border: 2px solid #393939;background: #F7F7F7;box-shadow: 3px 3px 10px 0px rgba(0, 0, 0, 0.10);`
|
|
314
|
+
: editArray[index]
|
|
315
|
+
? `border-radius: 10px;border: 1px solid #DDD;background: #F7F7F7;`
|
|
316
|
+
: ``}"
|
|
317
|
+
onclick="${gvc.event((e, event) => {
|
|
318
|
+
let defaultSelect = (fileItem as any).selected;
|
|
319
|
+
if (vm.type == 'folder') {
|
|
320
|
+
array = [];
|
|
321
|
+
vm.type = 'folderView';
|
|
322
|
+
vm.tag = fileItem.title;
|
|
323
|
+
|
|
324
|
+
gvc.notifyDataChange(vm.id);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
if (opt?.onlyRead) {
|
|
328
|
+
return;
|
|
329
|
+
}
|
|
330
|
+
if (!cf.mul) {
|
|
331
|
+
array.forEach(data => {
|
|
332
|
+
(data as any).selected = false;
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
(fileItem as any).selected = !defaultSelect;
|
|
336
|
+
gvc.notifyDataChange(vm.id);
|
|
337
|
+
event.stopPropagation();
|
|
338
|
+
})}"
|
|
339
|
+
${!gvc.glitter.isTouchDevice()
|
|
340
|
+
? `onmouseenter="${gvc.event(() => {
|
|
341
|
+
if (opt?.onlyRead || cf.key == 'album') {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
if (!editArray[index]) {
|
|
345
|
+
editArray[index] = true;
|
|
346
|
+
gvc.notifyDataChange(viewID);
|
|
347
|
+
}
|
|
348
|
+
})}"onmouseleave="${gvc.event((e, event) => {
|
|
349
|
+
if (opt?.onlyRead) return;
|
|
350
|
+
if (isSafari) {
|
|
351
|
+
const target = event.relatedTarget as HTMLElement;
|
|
352
|
+
const imageBoxClassList = [imageBoxClass];
|
|
353
|
+
const targetClassList = Array.from(target.classList);
|
|
354
|
+
const isOutBorder =
|
|
355
|
+
imageBoxClassList.every(cls => targetClassList.includes(cls)) &&
|
|
356
|
+
targetClassList.every(cls => imageBoxClassList.includes(cls));
|
|
357
|
+
const isTitle = targetClassList.includes(`${imageBoxClass}-title`);
|
|
358
|
+
const isInside = targetClassList.length === 0;
|
|
359
|
+
const isOutOfViewContainer = target.dataset.viewContainer === 'true';
|
|
360
|
+
const isUL = target.tagName === 'UL';
|
|
407
361
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
Sortable.create(gvc.getBindViewElem(id).get(0), {
|
|
411
|
-
group: id,
|
|
412
|
-
animation: 100,
|
|
413
|
-
handle: '.dragItem',
|
|
414
|
-
onChange: function (evt: any) {
|
|
415
|
-
},
|
|
416
|
-
onEnd: (evt: any) => {
|
|
417
|
-
swapArr(array, startIndex, evt.newIndex);
|
|
418
|
-
gvc.notifyDataChange(id);
|
|
419
|
-
},
|
|
420
|
-
onStart: function (evt: any) {
|
|
421
|
-
startIndex = evt.oldIndex;
|
|
422
|
-
},
|
|
423
|
-
});
|
|
424
|
-
} catch (e) {
|
|
362
|
+
if ((isOutBorder || isTitle || isInside) && !(isOutOfViewContainer || isUL)) {
|
|
363
|
+
return;
|
|
425
364
|
}
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
365
|
+
}
|
|
366
|
+
editArray[index] = false;
|
|
367
|
+
gvc.notifyDataChange(viewID);
|
|
368
|
+
})}"
|
|
369
|
+
`
|
|
370
|
+
: ``}
|
|
371
|
+
>
|
|
372
|
+
<div
|
|
373
|
+
class="${editArray[index] && !(fileItem as any).selected
|
|
374
|
+
? `d-flex`
|
|
375
|
+
: `d-none`} align-items-center justify-content-center"
|
|
376
|
+
style="height:24px;width:24px;border-radius: 3px;background: rgba(0, 0, 0, 0.80);position: absolute;right: 8.15px;top: 8px;"
|
|
377
|
+
onclick="${gvc.event((e, event) => {
|
|
378
|
+
event.stopPropagation();
|
|
379
|
+
itemClick();
|
|
380
|
+
})}"
|
|
381
|
+
>
|
|
382
|
+
<svg
|
|
383
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
384
|
+
width="12"
|
|
385
|
+
height="12"
|
|
386
|
+
viewBox="0 0 12 12"
|
|
387
|
+
fill="none"
|
|
388
|
+
>
|
|
389
|
+
<g clip-path="url(#clip0_13619_1920)">
|
|
390
|
+
<path
|
|
391
|
+
d="M0.852963 8.45864L0.3139 10.2891L0.0232751 11.2782C-0.0353187 11.4774 0.0185876 11.6907 0.1639 11.836C0.309213 11.9813 0.522494 12.0352 0.719369 11.979L1.71078 11.686L3.54124 11.1469C3.78499 11.0766 4.01234 10.9594 4.21156 10.8071L4.21859 10.8118L4.23031 10.793C4.26312 10.7672 4.29359 10.7415 4.32406 10.7157C4.35687 10.6875 4.38734 10.6571 4.41781 10.6266L11.5475 3.49927C12.0608 2.98599 12.1241 2.19614 11.7397 1.61255C11.6858 1.53052 11.6202 1.45083 11.5475 1.37817L10.6241 0.452393C10.0381 -0.133545 9.0889 -0.133545 8.50296 0.452393L1.37328 7.58208C1.31468 7.64067 1.25843 7.70395 1.20687 7.76958L1.18812 7.7813L1.19281 7.78833C1.04046 7.98755 0.925619 8.21489 0.852963 8.45864ZM8.9764 4.47661L4.6264 8.82661L3.4639 8.53599L3.17327 7.37349L7.52328 3.02349L8.9764 4.47661ZM2.27328 8.41177L2.45374 9.13833C2.50296 9.33989 2.66234 9.49692 2.8639 9.54849L3.59046 9.72895L3.41703 9.99145C3.35609 10.0243 3.29281 10.0524 3.22718 10.0711L2.67874 10.2329L1.39203 10.6079L1.76937 9.32349L1.93109 8.77505C1.94984 8.70942 1.97796 8.6438 2.01078 8.5852L2.27328 8.41177ZM7.38968 5.12583C7.53499 4.98052 7.53499 4.74145 7.38968 4.59614C7.24437 4.45083 7.00531 4.45083 6.85999 4.59614L4.60999 6.84614C4.46468 6.99146 4.46468 7.23052 4.60999 7.37583C4.75531 7.52114 4.99437 7.52114 5.13968 7.37583L7.38968 5.12583Z"
|
|
392
|
+
fill="white"
|
|
393
|
+
/>
|
|
394
|
+
</g>
|
|
395
|
+
<defs>
|
|
396
|
+
<clipPath id="clip0_13619_1920">
|
|
397
|
+
<rect width="12" height="12" fill="white" />
|
|
398
|
+
</clipPath>
|
|
399
|
+
</defs>
|
|
400
|
+
</svg>
|
|
401
|
+
</div>
|
|
402
|
+
<div
|
|
403
|
+
class="position-absolute ${(fileItem as any).selected ? `d-blok` : `d-none`} "
|
|
404
|
+
style="transform: translate(-50%,-50%);left: 50%;top:50%;"
|
|
405
|
+
>
|
|
406
|
+
${BgWidget.darkButton(
|
|
407
|
+
'編輯圖片',
|
|
408
|
+
gvc.event(() => {
|
|
409
|
+
itemClick();
|
|
410
|
+
})
|
|
411
|
+
)}
|
|
412
|
+
</div>
|
|
413
|
+
<div
|
|
414
|
+
class="${(fileItem as any).selected ? `d-flex` : `d-none`} "
|
|
415
|
+
style="height:24px;width:24px;border-radius: 3px;position: absolute;right: 8.15px;top: 8px;"
|
|
416
|
+
>
|
|
417
|
+
<i class="fa-solid fa-square-check " style="color: #393939;font-size: 24px;"></i>
|
|
418
|
+
</div>
|
|
419
|
+
<div
|
|
420
|
+
style="width:100%;padding-top: 100%;background:50%/contain url('${imageUrl}') no-repeat;border-radius: 5px;border: 0.938px solid #DDD;background: ;"
|
|
421
|
+
></div>
|
|
422
|
+
<div
|
|
423
|
+
class="w-100 text-center font-size: 16px;font-style: normal;font-weight: 400;text-overflow: ellipsis;"
|
|
424
|
+
style="overflow:hidden;white-space: nowrap;text-overflow: ellipsis;"
|
|
425
|
+
onchange="${gvc.event((e: any) => {})}"
|
|
426
|
+
>
|
|
427
|
+
${fileItem.title}
|
|
428
|
+
</div>
|
|
429
|
+
</div>
|
|
430
|
+
`;
|
|
431
|
+
} catch (e) {
|
|
432
|
+
console.error(e);
|
|
433
|
+
return ``;
|
|
434
|
+
}
|
|
435
|
+
},
|
|
436
|
+
divCreate: {
|
|
437
|
+
style: `${gvc.glitter.ut.frSize(
|
|
438
|
+
{
|
|
439
|
+
sm: `width:15%;`,
|
|
429
440
|
},
|
|
430
|
-
|
|
431
|
-
|
|
441
|
+
`width:49%;`
|
|
442
|
+
)}cursor:pointer;`,
|
|
443
|
+
},
|
|
444
|
+
});
|
|
445
|
+
})
|
|
446
|
+
.join('');
|
|
447
|
+
} catch (e) {
|
|
448
|
+
console.error(`error=>`, e);
|
|
449
|
+
return ``;
|
|
432
450
|
}
|
|
451
|
+
},
|
|
452
|
+
divCreate: {
|
|
453
|
+
elem: 'ul',
|
|
454
|
+
class: `w-100 my-2 flex-wrap `,
|
|
455
|
+
style: `display:flex;gap:${gvc.glitter.ut.frSize(
|
|
456
|
+
{
|
|
457
|
+
sm: `17`,
|
|
458
|
+
},
|
|
459
|
+
`0`
|
|
460
|
+
)}px;${document.body.clientWidth < 800 ? `justify-content: space-between;` : ``}`,
|
|
461
|
+
},
|
|
462
|
+
onCreate: () => {
|
|
463
|
+
gvc.glitter.addMtScript(
|
|
464
|
+
[
|
|
465
|
+
{
|
|
466
|
+
src: `https://raw.githack.com/SortableJS/Sortable/master/Sortable.js`,
|
|
467
|
+
},
|
|
468
|
+
],
|
|
469
|
+
() => {},
|
|
470
|
+
() => {}
|
|
471
|
+
);
|
|
472
|
+
const interval = setInterval(() => {
|
|
473
|
+
if ((window as any).Sortable) {
|
|
474
|
+
try {
|
|
475
|
+
gvc.addStyle(css`
|
|
476
|
+
ul {
|
|
477
|
+
list-style: none;
|
|
478
|
+
padding: 0;
|
|
479
|
+
}
|
|
480
|
+
`);
|
|
433
481
|
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
bind: vm.id,
|
|
440
|
-
view: async () => {
|
|
441
|
-
const dialog = new ShareDialog(cf.gvc.glitter);
|
|
442
|
-
|
|
443
|
-
function pageBTN() {
|
|
444
|
-
let key = [
|
|
445
|
-
{
|
|
446
|
-
key: 'file',
|
|
447
|
-
value: '全部圖片',
|
|
448
|
-
},
|
|
449
|
-
{
|
|
450
|
-
key: 'folder',
|
|
451
|
-
value: '相簿',
|
|
452
|
-
},
|
|
453
|
-
];
|
|
454
|
-
return key
|
|
455
|
-
.map((data) => {
|
|
456
|
-
return html`
|
|
457
|
-
<div
|
|
458
|
-
style="color:${vm.type == data.key
|
|
459
|
-
? '#393939'
|
|
460
|
-
: '#8D8D8D'};display: flex;padding:6px 18px;justify-content: center;align-items: center;border-radius: 10px;border: 2px solid ${vm.type == data.key
|
|
461
|
-
? '#393939'
|
|
462
|
-
: '#8D8D8D'};background: #FFF;font-weight: ${vm.type == data.key ? '700' : '500'};cursor: pointer;"
|
|
463
|
-
onclick="${gvc.event((e) => {
|
|
464
|
-
vm.type = data.key;
|
|
465
|
-
vm.query = '';
|
|
466
|
-
gvc.notifyDataChange(vm.id);
|
|
467
|
-
})}"
|
|
468
|
-
>
|
|
469
|
-
${data.value}
|
|
470
|
-
</div>
|
|
471
|
-
`;
|
|
472
|
-
})
|
|
473
|
-
.join('');
|
|
474
|
-
}
|
|
475
|
-
|
|
476
|
-
// 空白夾新增的頁面
|
|
477
|
-
|
|
478
|
-
if (vm.type == 'folderADD') {
|
|
479
|
-
return html`
|
|
480
|
-
<div class="d-flex flex-column"
|
|
481
|
-
style="font-size: 16px;font-style: normal;font-weight: 400;gap:8px;">
|
|
482
|
-
相簿名稱
|
|
483
|
-
<input
|
|
484
|
-
class="w-100"
|
|
485
|
-
value="${vm.tag ?? ''}"
|
|
486
|
-
placeholder="請輸入相簿名稱"
|
|
487
|
-
style="height: 40px;padding: 9px 18px;border-radius: 10px;border: 1px solid #DDD;"
|
|
488
|
-
onchange="${gvc.event((e) => {
|
|
489
|
-
vm.tag = e.value;
|
|
490
|
-
})}"
|
|
491
|
-
/>
|
|
492
|
-
</div>
|
|
493
|
-
<div
|
|
494
|
-
class="w-100 "
|
|
495
|
-
style="margin-top:18px;padding: 39px 0;display: flex;justify-content: center;align-items: center;border-radius: 10px;border: 1px solid #DDD;background: #FFF;gap:14px;"
|
|
496
|
-
>
|
|
497
|
-
<div
|
|
498
|
-
style="padding: 10px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);cursor: pointer;"
|
|
499
|
-
onclick="${gvc.event(() => {
|
|
500
|
-
if (!vm.tag) {
|
|
501
|
-
const dialog = new ShareDialog(cf.gvc.glitter);
|
|
502
|
-
dialog.errorMessage({text: '請先輸入相簿名稱'});
|
|
503
|
-
return;
|
|
504
|
-
}
|
|
505
|
-
this.selectImageLibrary(
|
|
506
|
-
gvc,
|
|
507
|
-
(selectData) => {
|
|
508
|
-
const folder: FileItem = {
|
|
509
|
-
title: vm.tag ?? 'folder',
|
|
510
|
-
data: [],
|
|
511
|
-
items: selectData,
|
|
512
|
-
type: 'folder',
|
|
513
|
-
tag: [],
|
|
514
|
-
id: gvc.glitter.getUUID(),
|
|
515
|
-
};
|
|
516
|
-
selectData.map((data) => {
|
|
517
|
-
let matchingElement = vm.link.find((item2) => item2.id === data.id);
|
|
518
|
-
if (matchingElement) {
|
|
519
|
-
if (!matchingElement.tag) {
|
|
520
|
-
matchingElement.tag = [];
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
if (!matchingElement.tag.includes(vm.tag as string)) {
|
|
524
|
-
matchingElement!.tag.push(vm.tag as string);
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
(data as any).selected = false;
|
|
528
|
-
});
|
|
529
|
-
vm.link.push(folder);
|
|
530
|
-
vm.type = 'folder';
|
|
531
|
-
gvc.notifyDataChange(vm.id);
|
|
532
|
-
save(() => {
|
|
533
|
-
gvc.notifyDataChange(vm.id);
|
|
534
|
-
});
|
|
535
|
-
// postMD.content_array = id
|
|
536
|
-
// obj.gvc.notifyDataChange(bi)
|
|
537
|
-
// getPublicConfig(()=>{
|
|
538
|
-
// gvc.notifyDataChange(vm.id);
|
|
539
|
-
// });
|
|
540
|
-
},
|
|
541
|
-
`<div class="d-flex flex-column" style="border-radius: 10px 10px 0px 0px;background: #F2F2F2;">${vm.tag}</div>`,
|
|
542
|
-
{
|
|
543
|
-
key: 'album',
|
|
544
|
-
mul: true,
|
|
545
|
-
}
|
|
546
|
-
);
|
|
547
|
-
})}"
|
|
548
|
-
>
|
|
549
|
-
從圖庫中選擇
|
|
550
|
-
</div>
|
|
551
|
-
<div
|
|
552
|
-
style="padding: 10px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);cursor: pointer;"
|
|
553
|
-
onclick="${gvc.event(() => {
|
|
554
|
-
if (!vm.tag) {
|
|
555
|
-
const dialog = new ShareDialog(cf.gvc.glitter);
|
|
556
|
-
dialog.errorMessage({text: '請先輸入相簿名稱'});
|
|
557
|
-
return;
|
|
558
|
-
}
|
|
559
|
-
cf.plus(
|
|
560
|
-
gvc,
|
|
561
|
-
(fileArray) => {
|
|
562
|
-
const folder: FileItem = {
|
|
563
|
-
title: vm.tag ?? 'folder',
|
|
564
|
-
data: [],
|
|
565
|
-
items: [],
|
|
566
|
-
type: 'folder',
|
|
567
|
-
tag: [],
|
|
568
|
-
id: gvc.glitter.getUUID(),
|
|
569
|
-
};
|
|
570
|
-
|
|
571
|
-
fileArray.forEach((item) => {
|
|
572
|
-
item.tag = [];
|
|
573
|
-
item.tag.push(vm.tag as string);
|
|
574
|
-
vm.link.push(item);
|
|
575
|
-
});
|
|
576
|
-
|
|
577
|
-
vm.link.push(folder);
|
|
578
|
-
gvc.notifyDataChange(vm.id);
|
|
579
|
-
},
|
|
580
|
-
'file'
|
|
581
|
-
);
|
|
582
|
-
})}"
|
|
583
|
-
>
|
|
584
|
-
上傳新圖片
|
|
585
|
-
</div>
|
|
586
|
-
</div>
|
|
587
|
-
<div class="">
|
|
588
|
-
${gvc.bindView({
|
|
589
|
-
bind: `folderItemGroup`,
|
|
590
|
-
view: () => {
|
|
591
|
-
if (vm.tag) {
|
|
592
|
-
let group = vm.link.filter((item2) => {
|
|
593
|
-
return item2.tag && item2.tag.includes(vm.tag ?? '');
|
|
594
|
-
});
|
|
595
|
-
return renderItems(group, {onlyRead: true});
|
|
596
|
-
}
|
|
597
|
-
return ``;
|
|
598
|
-
},
|
|
599
|
-
divCreate: {},
|
|
600
|
-
})}
|
|
601
|
-
</div>
|
|
602
|
-
`;
|
|
603
|
-
}
|
|
604
|
-
//資料夾的內容檢視
|
|
605
|
-
if (vm.type == 'folderView') {
|
|
606
|
-
return html`
|
|
607
|
-
<div class="d-flex flex-column"
|
|
608
|
-
style="font-size: 16px;font-style: normal;font-weight: 400;gap:8px;">
|
|
609
|
-
<input
|
|
610
|
-
class="w-100"
|
|
611
|
-
value="${vm.tag ?? ''}"
|
|
612
|
-
placeholder="請輸入相簿名稱"
|
|
613
|
-
style="height: 40px;padding: 9px 18px;border-radius: 10px;border: 1px solid #DDD;"
|
|
614
|
-
onchange="${gvc.event((e) => {
|
|
615
|
-
vm.tag = e.value;
|
|
616
|
-
})}"
|
|
617
|
-
/>
|
|
618
|
-
</div>
|
|
619
|
-
<div class="d-flex w-100" style="gap:14px;margin-top: 12px;">
|
|
620
|
-
${BgWidget.searchFilter(
|
|
621
|
-
gvc.event((e) => {
|
|
622
|
-
vm.query = e.value;
|
|
623
|
-
gvc.notifyDataChange(vm.id);
|
|
624
|
-
}),
|
|
625
|
-
vm.query || '',
|
|
626
|
-
'搜尋圖片'
|
|
627
|
-
)}
|
|
628
|
-
${BgWidget.updownFilter({
|
|
629
|
-
gvc,
|
|
630
|
-
callback: (value: any) => {
|
|
631
|
-
vm.orderString = value;
|
|
632
|
-
gvc.notifyDataChange(vm.id);
|
|
633
|
-
},
|
|
634
|
-
default: vm.orderString || 'default',
|
|
635
|
-
options: FilterOptions.imageLibraryOrderBy,
|
|
636
|
-
})}
|
|
637
|
-
</div>
|
|
638
|
-
<div class="">
|
|
639
|
-
${gvc.bindView({
|
|
640
|
-
bind: `folderItemGroup`,
|
|
641
|
-
view: () => {
|
|
642
|
-
if (vm.tag) {
|
|
643
|
-
let group = vm.link.filter((item2) => {
|
|
644
|
-
return item2.tag && item2.tag.includes(vm.tag ?? '');
|
|
645
|
-
});
|
|
646
|
-
return renderItems(group);
|
|
647
|
-
}
|
|
648
|
-
return ``;
|
|
649
|
-
},
|
|
650
|
-
divCreate: {},
|
|
651
|
-
})}
|
|
652
|
-
</div>
|
|
653
|
-
`;
|
|
654
|
-
}
|
|
655
|
-
//資料夾的內容編輯
|
|
656
|
-
if (vm.type == 'folderEdit') {
|
|
657
|
-
return html`
|
|
658
|
-
<div class="d-flex flex-column"
|
|
659
|
-
style="font-size: 16px;font-style: normal;font-weight: 400;gap:8px;">
|
|
660
|
-
相簿名稱
|
|
661
|
-
<input
|
|
662
|
-
class="w-100"
|
|
663
|
-
value="${vm.tag ?? ''}"
|
|
664
|
-
placeholder="請輸入相簿名稱"
|
|
665
|
-
style="height: 40px;padding: 9px 18px;border-radius: 10px;border: 1px solid #DDD;"
|
|
666
|
-
onchange="${gvc.event((e) => {
|
|
667
|
-
vm.tag = e.value;
|
|
668
|
-
})}"
|
|
669
|
-
/>
|
|
670
|
-
</div>
|
|
671
|
-
<div class="d-flex w-100" style="gap:14px;margin-top: 12px;">
|
|
672
|
-
${BgWidget.searchFilter(
|
|
673
|
-
gvc.event((e) => {
|
|
674
|
-
vm.query = e.value;
|
|
675
|
-
gvc.notifyDataChange(vm.id);
|
|
676
|
-
}),
|
|
677
|
-
vm.query || '',
|
|
678
|
-
'搜尋圖片'
|
|
679
|
-
)}
|
|
680
|
-
${BgWidget.updownFilter({
|
|
681
|
-
gvc,
|
|
682
|
-
callback: (value: any) => {
|
|
683
|
-
vm.orderString = value;
|
|
684
|
-
gvc.notifyDataChange(vm.id);
|
|
685
|
-
},
|
|
686
|
-
default: vm.orderString || 'default',
|
|
687
|
-
options: FilterOptions.imageLibraryOrderBy,
|
|
688
|
-
})}
|
|
689
|
-
</div>
|
|
690
|
-
<div class="d-flex w-100 justify-content-end" style="gap:12px;margin-top: 18px;">
|
|
691
|
-
<div style="margin-right: auto; color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word">
|
|
692
|
-
已選取${getSelectCount({
|
|
693
|
-
items: vm.link,
|
|
694
|
-
})}項
|
|
695
|
-
</div>
|
|
696
|
-
${BgWidget.grayButton(
|
|
697
|
-
'刪除',
|
|
698
|
-
gvc.event(() => {
|
|
699
|
-
let selectedData = vm.link.filter((item) => (item as any).selected);
|
|
700
|
-
selectedData.forEach((item) => {
|
|
701
|
-
(item as any).selected = false;
|
|
702
|
-
item.tag = item.tag.filter((tag) => {
|
|
703
|
-
return tag !== vm.tag;
|
|
704
|
-
});
|
|
705
|
-
});
|
|
706
|
-
|
|
707
|
-
let folder = vm.link.find((dd) => {
|
|
708
|
-
return dd.title == vm.tag && dd.type == 'folder';
|
|
709
|
-
});
|
|
710
|
-
gvc.notifyDataChange(vm.id);
|
|
711
|
-
})
|
|
712
|
-
)}
|
|
713
|
-
${BgWidget.grayButton(
|
|
714
|
-
'新增圖片',
|
|
715
|
-
gvc.event(() => {
|
|
716
|
-
const thatGVC = gvc;
|
|
717
|
-
gvc.glitter.innerDialog((gvc: GVC) => {
|
|
718
|
-
return html`
|
|
719
|
-
<div style="width: 445px;height: 255px;border-radius: 10px;background: #FFF;">
|
|
720
|
-
<div class="d-flex"
|
|
721
|
-
style="color:#393939;display: flex;padding: 12px 20px;align-items: center;gap: 10px;">
|
|
722
|
-
新增圖片
|
|
723
|
-
<span
|
|
724
|
-
class="d-flex align-items-center justify-content-center"
|
|
725
|
-
style="margin-left: auto;cursor: pointer;"
|
|
726
|
-
onclick="${gvc.event(() => {
|
|
727
|
-
gvc.glitter.closeDiaLog('add');
|
|
728
|
-
})}"
|
|
729
|
-
>
|
|
730
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="14"
|
|
731
|
-
height="14" viewBox="0 0 14 14" fill="none">
|
|
732
|
-
<path d="M1 1L13 13" stroke="#393939"
|
|
733
|
-
stroke-linecap="round"/>
|
|
734
|
-
<path d="M13 1L1 13" stroke="#393939"
|
|
735
|
-
stroke-linecap="round"/>
|
|
736
|
-
</svg>
|
|
737
|
-
</span>
|
|
738
|
-
</div>
|
|
739
|
-
<div class="d-flex justify-content-center"
|
|
740
|
-
style="padding-top:61px;gap:14px;">
|
|
741
|
-
<div
|
|
742
|
-
style="padding: 10px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);cursor: pointer;"
|
|
743
|
-
onclick="${gvc.event(() => {
|
|
744
|
-
this.selectImageLibrary(
|
|
745
|
-
gvc,
|
|
746
|
-
(selectData) => {
|
|
747
|
-
selectData.map((data) => {
|
|
748
|
-
let matchingElement = vm.link.find((item2) => item2.id === data.id);
|
|
749
|
-
if (matchingElement) {
|
|
750
|
-
if (!matchingElement.tag) {
|
|
751
|
-
matchingElement.tag = [];
|
|
752
|
-
}
|
|
753
|
-
|
|
754
|
-
if (!matchingElement.tag.includes(vm.tag as string)) {
|
|
755
|
-
matchingElement!.tag.push(vm.tag as string);
|
|
756
|
-
}
|
|
757
|
-
}
|
|
758
|
-
(data as any).selected = false;
|
|
759
|
-
});
|
|
760
|
-
|
|
761
|
-
gvc.glitter.closeDiaLog('add');
|
|
762
|
-
thatGVC.notifyDataChange(vm.id);
|
|
763
|
-
},
|
|
764
|
-
`<div class="d-flex flex-column" style="border-radius: 10px 10px 0px 0px;background: #F2F2F2;">${vm.tag}</div>`,
|
|
765
|
-
{
|
|
766
|
-
key: 'album',
|
|
767
|
-
mul: true,
|
|
768
|
-
}
|
|
769
|
-
);
|
|
770
|
-
})}"
|
|
771
|
-
>
|
|
772
|
-
從圖庫中選擇
|
|
773
|
-
</div>
|
|
774
|
-
<div
|
|
775
|
-
style="padding: 10px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);cursor: pointer;"
|
|
776
|
-
onclick="${gvc.event(() => {
|
|
777
|
-
cf.plus(
|
|
778
|
-
gvc,
|
|
779
|
-
(fileArray) => {
|
|
780
|
-
fileArray.forEach((item) => {
|
|
781
|
-
item.tag = [];
|
|
782
|
-
item.tag.push(vm.tag as string);
|
|
783
|
-
vm.link.push(item);
|
|
784
|
-
});
|
|
785
|
-
gvc.glitter.closeDiaLog('add');
|
|
786
|
-
thatGVC.notifyDataChange(vm.id);
|
|
787
|
-
},
|
|
788
|
-
'file'
|
|
789
|
-
);
|
|
790
|
-
})}"
|
|
791
|
-
>
|
|
792
|
-
上傳新圖片
|
|
793
|
-
</div>
|
|
794
|
-
</div>
|
|
795
|
-
</div>
|
|
796
|
-
`;
|
|
797
|
-
}, 'add');
|
|
798
|
-
})
|
|
799
|
-
)}
|
|
800
|
-
</div>
|
|
801
|
-
<div class="">
|
|
802
|
-
${gvc.bindView({
|
|
803
|
-
bind: `folderItemGroup`,
|
|
804
|
-
view: () => {
|
|
805
|
-
if (vm.tag) {
|
|
806
|
-
return renderItems(
|
|
807
|
-
vm.link.filter((item2) => {
|
|
808
|
-
return item2.tag && item2.tag.includes(vm.tag ?? '');
|
|
809
|
-
})
|
|
810
|
-
);
|
|
811
|
-
}
|
|
812
|
-
return ``;
|
|
813
|
-
},
|
|
814
|
-
divCreate: {},
|
|
815
|
-
})}
|
|
816
|
-
</div>
|
|
817
|
-
`;
|
|
818
|
-
}
|
|
819
|
-
|
|
820
|
-
function drawSelectImg() {
|
|
821
|
-
return html`
|
|
822
|
-
<div style="">
|
|
823
|
-
<div style="width: 100%; position: relative">
|
|
824
|
-
<div
|
|
825
|
-
style="width: 100%; left: 0; top: 0; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 20px; display: inline-flex"
|
|
826
|
-
>
|
|
827
|
-
<div class=" ${cf.key == 'album' ? `d-none` : `d-flex`}"
|
|
828
|
-
style="gap:14px;">${pageBTN()}
|
|
829
|
-
</div>
|
|
830
|
-
<div class="d-flex w-100" style="gap:14px;">
|
|
831
|
-
${BgWidget.searchFilter(
|
|
832
|
-
gvc.event((e) => {
|
|
833
|
-
vm.query = e.value;
|
|
834
|
-
gvc.notifyDataChange(vm.id);
|
|
835
|
-
}),
|
|
836
|
-
vm.query || '',
|
|
837
|
-
cf.key == 'album-manager' || vm.type == 'file' ? `搜尋圖片` : `搜尋相簿`
|
|
838
|
-
)}
|
|
839
|
-
${BgWidget.updownFilter({
|
|
840
|
-
gvc,
|
|
841
|
-
callback: (value: any) => {
|
|
842
|
-
vm.orderString = value;
|
|
843
|
-
gvc.notifyDataChange(vm.id);
|
|
844
|
-
},
|
|
845
|
-
default: vm.orderString || 'default',
|
|
846
|
-
options: FilterOptions.imageLibraryOrderBy,
|
|
847
|
-
})}
|
|
848
|
-
</div>
|
|
849
|
-
<div
|
|
850
|
-
class="w-100 ${getSelectCount({
|
|
851
|
-
items: vm.link,
|
|
852
|
-
}) > 0 && vm.type == 'file'
|
|
853
|
-
? ``
|
|
854
|
-
: `d-none`}"
|
|
855
|
-
style="height: 40px; padding: 12px 18px;background: #F7F7F7; border-radius: 10px; justify-content: flex-end; align-items: center; gap: 8px; display: inline-flex"
|
|
856
|
-
>
|
|
857
|
-
<div style="flex: 1 1 0; color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word">
|
|
858
|
-
已選取${getSelectCount({
|
|
859
|
-
items: vm.link,
|
|
860
|
-
})}項
|
|
861
|
-
</div>
|
|
862
|
-
</div>
|
|
863
|
-
<div style="align-self: stretch; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 18px; display: flex">
|
|
864
|
-
${(() => {
|
|
865
|
-
let viewData = vm.link.filter((data) => {
|
|
866
|
-
return data.type == vm.type;
|
|
867
|
-
});
|
|
868
|
-
|
|
869
|
-
if (viewData.length == 0) {
|
|
870
|
-
return html`
|
|
871
|
-
<div class="w-100 h-100 d-flex flex-column align-items-center justify-content-center"
|
|
872
|
-
style="padding-top: 106px;">
|
|
873
|
-
${vm.type == 'file'
|
|
874
|
-
? html`
|
|
875
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
876
|
-
width="80" height="80"
|
|
877
|
-
viewBox="0 0 80 80" fill="none">
|
|
878
|
-
<path
|
|
879
|
-
d="M10 10C7.23438 10 5 12.2344 5 15V51.4688L15.5781 40.8906C18.0156 38.4531 21.9688 38.4531 24.4219 40.8906L35 51.4688L55.5781 30.8906C58.0156 28.4531 61.9688 28.4531 64.4219 30.8906L75 41.4688V15C75 12.2344 72.7656 10 70 10H10ZM5 58.5312V65C5 67.7656 7.23438 70 10 70H16.4688L31.4688 55L20.8906 44.4219C20.4062 43.9375 19.6094 43.9375 19.125 44.4219L5 58.5312ZM60.8906 34.4219C60.4063 33.9375 59.6094 33.9375 59.125 34.4219L23.5312 70H70C72.7656 70 75 67.7656 75 65V48.5312L60.8906 34.4219ZM0 15C0 9.48438 4.48438 5 10 5H70C75.5156 5 80 9.48438 80 15V65C80 70.5156 75.5156 75 70 75H10C4.48438 75 0 70.5156 0 65V15ZM25 22.5C25 21.837 24.7366 21.2011 24.2678 20.7322C23.7989 20.2634 23.163 20 22.5 20C21.837 20 21.2011 20.2634 20.7322 20.7322C20.2634 21.2011 20 21.837 20 22.5C20 23.163 20.2634 23.7989 20.7322 24.2678C21.2011 24.7366 21.837 25 22.5 25C23.163 25 23.7989 24.7366 24.2678 24.2678C24.7366 23.7989 25 23.163 25 22.5ZM15 22.5C15 20.5109 15.7902 18.6032 17.1967 17.1967C18.6032 15.7902 20.5109 15 22.5 15C24.4891 15 26.3968 15.7902 27.8033 17.1967C29.2098 18.6032 30 20.5109 30 22.5C30 24.4891 29.2098 26.3968 27.8033 27.8033C26.3968 29.2098 24.4891 30 22.5 30C20.5109 30 18.6032 29.2098 17.1967 27.8033C15.7902 26.3968 15 24.4891 15 22.5Z"
|
|
880
|
-
fill="#393939"
|
|
881
|
-
/>
|
|
882
|
-
</svg>`
|
|
883
|
-
: html`
|
|
884
|
-
<svg xmlns="http://www.w3.org/2000/svg"
|
|
885
|
-
width="80" height="80"
|
|
886
|
-
viewBox="0 0 80 80" fill="none">
|
|
887
|
-
<path
|
|
888
|
-
d="M10 10C7.23438 10 5 12.2344 5 15V65C5 67.7656 7.23438 70 10 70H70C72.7656 70 75 67.7656 75 65V25C75 22.2344 72.7656 20 70 20H45.6094C42.9531 20 40.4062 18.9531 38.5312 17.0781L32.9219 11.4688C31.9844 10.5312 30.7188 10 29.3906 10H10ZM0 15C0 9.48438 4.48438 5 10 5H29.3906C32.0469 5 34.5938 6.04688 36.4688 7.92188L42.0781 13.5312C43.0156 14.4688 44.2812 15 45.6094 15H70C75.5156 15 80 19.4844 80 25V65C80 70.5156 75.5156 75 70 75H10C4.48438 75 0 70.5156 0 65V15Z"
|
|
889
|
-
fill="#393939"
|
|
890
|
-
/>
|
|
891
|
-
</svg>`}
|
|
892
|
-
<div style="color: #8D8D8D;font-size: 18px;font-weight: 400;margin-top: 12px;margin-bottom: 24px;">
|
|
893
|
-
${vm.type == 'file' ? `尚未上傳任何圖片` : `尚未建立任何相簿`}
|
|
894
|
-
</div>
|
|
895
|
-
<div
|
|
896
|
-
style="color: #FFF;font-weight: 700;font-size: 16px;padding: 6px 18px;border-radius: 10px;background: #393939;cursor: pointer;"
|
|
897
|
-
onclick="${gvc.event(() => {
|
|
898
|
-
if (vm.type == 'file') {
|
|
899
|
-
cf.plus(
|
|
900
|
-
gvc,
|
|
901
|
-
(file) => {
|
|
902
|
-
vm.link.push(...file);
|
|
903
|
-
save(() => {
|
|
904
|
-
gvc.notifyDataChange(vm.id);
|
|
905
|
-
});
|
|
906
|
-
},
|
|
907
|
-
'file'
|
|
908
|
-
);
|
|
909
|
-
} else {
|
|
910
|
-
vm.tag = '';
|
|
911
|
-
vm.type = 'folderADD';
|
|
912
|
-
gvc.notifyDataChange(vm.id);
|
|
913
|
-
}
|
|
914
|
-
})}"
|
|
915
|
-
>
|
|
916
|
-
${vm.type == 'file' ? `上傳圖片` : `建立相簿`}
|
|
917
|
-
</div>
|
|
918
|
-
</div>
|
|
919
|
-
`;
|
|
920
|
-
}
|
|
921
|
-
return html`
|
|
922
|
-
<div
|
|
923
|
-
class="w-100 ${cf.key == 'album' ? `d-none` : `d-flex`} align-items-center justify-content-center"
|
|
924
|
-
style="padding: 39px 0;border-radius: 10px;border: 1px solid #DDD;background: #FFF;"
|
|
925
|
-
>
|
|
926
|
-
<div
|
|
927
|
-
style="padding:6px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);font-size: 16px;font-weight: 400;cursor:pointer;"
|
|
928
|
-
onclick="${gvc.event(() => {
|
|
929
|
-
if (vm.type == 'file') {
|
|
930
|
-
cf.plus(
|
|
931
|
-
gvc,
|
|
932
|
-
(file) => {
|
|
933
|
-
vm.link.push(...file);
|
|
934
|
-
save(() => {
|
|
935
|
-
gvc.notifyDataChange(vm.id);
|
|
936
|
-
});
|
|
937
|
-
},
|
|
938
|
-
'file'
|
|
939
|
-
);
|
|
940
|
-
} else {
|
|
941
|
-
vm.tag = '';
|
|
942
|
-
vm.type = 'folderADD';
|
|
943
|
-
gvc.notifyDataChange(vm.id);
|
|
944
|
-
}
|
|
945
|
-
})}"
|
|
946
|
-
>
|
|
947
|
-
${vm.type == 'file' ? '上傳新照片' : '上傳相簿'}
|
|
948
|
-
</div>
|
|
949
|
-
</div>
|
|
950
|
-
${renderItems(viewData)}
|
|
951
|
-
`;
|
|
952
|
-
})()}
|
|
953
|
-
</div>
|
|
954
|
-
</div>
|
|
955
|
-
</div>
|
|
956
|
-
</div>
|
|
957
|
-
`;
|
|
958
|
-
}
|
|
482
|
+
function swapArr(arr: any, index1: number, index2: number) {
|
|
483
|
+
const data = arr[index1];
|
|
484
|
+
arr.splice(index1, 1);
|
|
485
|
+
arr.splice(index2, 0, data);
|
|
486
|
+
}
|
|
959
487
|
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
return drawSelectImg();
|
|
488
|
+
let startIndex = 0;
|
|
489
|
+
(window as any).create(gvc.getBindViewElem(id).get(0), {
|
|
490
|
+
group: id,
|
|
491
|
+
animation: 100,
|
|
492
|
+
handle: '.dragItem',
|
|
493
|
+
onChange: function (evt: any) {},
|
|
494
|
+
onEnd: (evt: any) => {
|
|
495
|
+
swapArr(array, startIndex, evt.newIndex);
|
|
496
|
+
gvc.notifyDataChange(id);
|
|
970
497
|
},
|
|
971
|
-
|
|
972
|
-
|
|
498
|
+
onStart: function (evt: any) {
|
|
499
|
+
startIndex = evt.oldIndex;
|
|
973
500
|
},
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
501
|
+
});
|
|
502
|
+
} catch (e) {}
|
|
503
|
+
clearInterval(interval);
|
|
504
|
+
}
|
|
505
|
+
}, 100);
|
|
506
|
+
},
|
|
507
|
+
};
|
|
508
|
+
});
|
|
509
|
+
}
|
|
979
510
|
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
(dd as any).selected = undefined;
|
|
984
|
-
}
|
|
985
|
-
clearNoNeedData(dd.items || []);
|
|
986
|
-
});
|
|
987
|
-
}
|
|
511
|
+
getPublicConfig(() => {
|
|
512
|
+
gvc.notifyDataChange(vm.id);
|
|
513
|
+
});
|
|
988
514
|
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
515
|
+
return gvc.bindView(() => {
|
|
516
|
+
return {
|
|
517
|
+
bind: vm.id,
|
|
518
|
+
view: async () => {
|
|
519
|
+
const dialog = new ShareDialog(cf.gvc.glitter);
|
|
520
|
+
gvc.notifyDataChange(vm.footer_id)
|
|
521
|
+
function drawBreadcrumb() {
|
|
522
|
+
return html`
|
|
523
|
+
<div class="d-flex" style="margin: 20px 0">
|
|
524
|
+
<div class="breadcrumb-item">
|
|
525
|
+
<div
|
|
526
|
+
class="cursor_pointer"
|
|
527
|
+
onclick="${gvc.event(() => {
|
|
528
|
+
closeFolderView();
|
|
529
|
+
vm.type = 'file';
|
|
530
|
+
gvc.notifyDataChange(vm.id);
|
|
531
|
+
})}"
|
|
532
|
+
>
|
|
533
|
+
我的圖庫
|
|
534
|
+
</div>
|
|
535
|
+
</div>
|
|
536
|
+
<div class="breadcrumb-item">
|
|
537
|
+
<div
|
|
538
|
+
class="cursor_pointer"
|
|
539
|
+
onclick="${gvc.event(() => {
|
|
540
|
+
closeFolderView();
|
|
541
|
+
vm.type = 'folder';
|
|
542
|
+
gvc.notifyDataChange(vm.id);
|
|
543
|
+
})}"
|
|
544
|
+
>
|
|
545
|
+
相簿
|
|
546
|
+
</div>
|
|
547
|
+
</div>
|
|
548
|
+
<div class="breadcrumb-item">
|
|
549
|
+
<div>${vm.tag}</div>
|
|
550
|
+
</div>
|
|
551
|
+
</div>
|
|
552
|
+
`;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
function pageBTN() {
|
|
556
|
+
let key = [
|
|
557
|
+
{
|
|
558
|
+
key: 'file',
|
|
559
|
+
value: '全部圖片',
|
|
560
|
+
},
|
|
561
|
+
{
|
|
562
|
+
key: 'folder',
|
|
563
|
+
value: '相簿',
|
|
564
|
+
},
|
|
565
|
+
];
|
|
566
|
+
return key
|
|
567
|
+
.map(data => {
|
|
568
|
+
return html`
|
|
569
|
+
<div
|
|
570
|
+
style="color:${vm.type == data.key
|
|
571
|
+
? '#393939'
|
|
572
|
+
: '#8D8D8D'};display: flex;padding:6px 18px;justify-content: center;align-items: center;border-radius: 10px;border: 2px solid ${vm.type ==
|
|
573
|
+
data.key
|
|
574
|
+
? '#393939'
|
|
575
|
+
: '#8D8D8D'};background: #FFF;font-weight: ${vm.type == data.key
|
|
576
|
+
? '700'
|
|
577
|
+
: '500'};cursor: pointer;"
|
|
578
|
+
onclick="${gvc.event(e => {
|
|
579
|
+
vm.type = data.key;
|
|
580
|
+
vm.query = '';
|
|
581
|
+
gvc.notifyDataChange(vm.id);
|
|
582
|
+
})}"
|
|
583
|
+
>
|
|
584
|
+
${data.value}
|
|
585
|
+
</div>
|
|
586
|
+
`;
|
|
587
|
+
})
|
|
588
|
+
.join('');
|
|
589
|
+
}
|
|
590
|
+
if (vm.type == 'folderViewToEdit'){
|
|
591
|
+
vm.type = 'folderView';
|
|
592
|
+
console.log("vm.link --" , vm.link);
|
|
593
|
+
await that.selectImageLibrary(
|
|
594
|
+
gvc,
|
|
595
|
+
selectData => {
|
|
596
|
+
vm.link = selectData;
|
|
597
|
+
gvc.notifyDataChange(vm.id);
|
|
598
|
+
},
|
|
599
|
+
`<div class="d-flex flex-column" style="border-radius: 10px 10px 0px 0px;background: #F2F2F2;">${vm.tag}</div>`,
|
|
600
|
+
{
|
|
601
|
+
key: 'folderEdit',
|
|
602
|
+
mul: true,
|
|
603
|
+
tag: vm.tag,
|
|
604
|
+
}
|
|
605
|
+
);
|
|
606
|
+
}
|
|
607
|
+
// 空白資料夾新增的頁面
|
|
608
|
+
if (vm.type == 'folderADD') {
|
|
609
|
+
function pushFolder(folder: FileItem, imageArray: FileItem[]) {
|
|
610
|
+
console.log('folder -- ', folder);
|
|
611
|
+
console.log('imageArray -- ', imageArray);
|
|
612
|
+
imageArray.forEach(image => {
|
|
613
|
+
image.selected = false;
|
|
614
|
+
});
|
|
615
|
+
return folder.data.push(...imageArray);
|
|
1001
616
|
}
|
|
1002
617
|
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
618
|
+
vm.newFolder = {
|
|
619
|
+
selected: false,
|
|
620
|
+
title: '',
|
|
621
|
+
data: [],
|
|
622
|
+
items: [],
|
|
623
|
+
type: 'folder',
|
|
624
|
+
tag: [],
|
|
625
|
+
id: gvc.glitter.getUUID(),
|
|
626
|
+
};
|
|
627
|
+
return html`
|
|
628
|
+
<div class="d-flex flex-column ${gClass('new-album-title-bar')}">
|
|
629
|
+
相簿名稱
|
|
630
|
+
<input
|
|
631
|
+
class="w-100"
|
|
632
|
+
value="${vm.tag ?? ''}"
|
|
633
|
+
placeholder="請輸入相簿名稱"
|
|
634
|
+
onchange="${gvc.event(e => {
|
|
635
|
+
vm.tag = e.value;
|
|
636
|
+
})}"
|
|
637
|
+
/>
|
|
638
|
+
</div>
|
|
639
|
+
<div class="w-100 ${gClass('new-album-add-block')}">
|
|
640
|
+
<div
|
|
641
|
+
class="btn1"
|
|
642
|
+
onclick="${gvc.event(() => {
|
|
643
|
+
this.selectImageLibrary(
|
|
644
|
+
gvc,
|
|
645
|
+
selectData => {
|
|
646
|
+
pushFolder(vm.newFolder, selectData);
|
|
647
|
+
gvc.notifyDataChange('folderItemGroup');
|
|
648
|
+
},
|
|
649
|
+
`<div class="d-flex flex-column" style="border-radius: 10px 10px 0px 0px;background: #F2F2F2;">${vm.tag}</div>`,
|
|
650
|
+
{
|
|
651
|
+
key: 'album',
|
|
652
|
+
mul: true,
|
|
653
|
+
}
|
|
654
|
+
);
|
|
655
|
+
})}"
|
|
656
|
+
>
|
|
657
|
+
從圖庫中選擇
|
|
658
|
+
</div>
|
|
659
|
+
<div
|
|
660
|
+
class="btn1"
|
|
661
|
+
onclick="${gvc.event(() => {
|
|
662
|
+
cf.plus(
|
|
663
|
+
gvc,
|
|
664
|
+
fileArray => {
|
|
665
|
+
pushFolder(vm.newFolder, fileArray);
|
|
666
|
+
save(() => {
|
|
667
|
+
gvc.notifyDataChange('folderItemGroup');
|
|
668
|
+
});
|
|
669
|
+
},
|
|
670
|
+
'file'
|
|
671
|
+
);
|
|
672
|
+
})}"
|
|
673
|
+
>
|
|
674
|
+
上傳新圖片
|
|
675
|
+
</div>
|
|
676
|
+
</div>
|
|
677
|
+
${gvc.bindView({
|
|
678
|
+
bind: `folderItemGroup`,
|
|
679
|
+
view: () => {
|
|
680
|
+
return renderItems(vm.newFolder.data, { onlyRead: true });
|
|
681
|
+
},
|
|
682
|
+
divCreate: {},
|
|
683
|
+
})}
|
|
684
|
+
`;
|
|
685
|
+
}
|
|
686
|
+
//資料夾的內容檢視
|
|
687
|
+
if (vm.type == 'folderView') {
|
|
688
|
+
changeWindowsName(vm.tag ?? 'folder');
|
|
689
|
+
changeCancelBTNName('返回');
|
|
690
|
+
return html`
|
|
691
|
+
${drawBreadcrumb()}
|
|
692
|
+
<div class="d-flex w-100" style="gap:14px;margin-top: 12px;">
|
|
693
|
+
${BgWidget.searchFilter(
|
|
694
|
+
gvc.event(e => {
|
|
695
|
+
vm.query = e.value;
|
|
696
|
+
gvc.notifyDataChange(vm.id);
|
|
697
|
+
}),
|
|
698
|
+
vm.query || '',
|
|
699
|
+
'搜尋圖片'
|
|
700
|
+
)}
|
|
701
|
+
${BgWidget.updownFilter({
|
|
702
|
+
gvc,
|
|
703
|
+
callback: (value: any) => {
|
|
704
|
+
vm.orderString = value;
|
|
705
|
+
gvc.notifyDataChange(vm.id);
|
|
706
|
+
},
|
|
707
|
+
default: vm.orderString || 'default',
|
|
708
|
+
options: FilterOptions.imageLibraryOrderBy,
|
|
709
|
+
})}
|
|
710
|
+
</div>
|
|
711
|
+
${gvc.bindView({
|
|
712
|
+
bind: `folderItemGroup`,
|
|
713
|
+
view: () => {
|
|
714
|
+
if (vm.tag) {
|
|
715
|
+
let group = vm.link.filter(item2 => {
|
|
716
|
+
return item2.tag && item2.tag.includes(vm.tag ?? '');
|
|
717
|
+
});
|
|
718
|
+
return renderItems(group);
|
|
719
|
+
}
|
|
720
|
+
return ``;
|
|
721
|
+
},
|
|
722
|
+
divCreate: {},
|
|
723
|
+
})}
|
|
724
|
+
`;
|
|
725
|
+
}
|
|
726
|
+
//資料夾的內容編輯
|
|
727
|
+
if (vm.type == 'folderEdit') {
|
|
728
|
+
return html`
|
|
729
|
+
<div class="d-flex flex-column ${gClass('album-title')}" style="">
|
|
730
|
+
相簿名稱
|
|
731
|
+
<input
|
|
732
|
+
class="w-100"
|
|
733
|
+
value="${vm.tag ?? ''}"
|
|
734
|
+
placeholder="請輸入相簿名稱"
|
|
735
|
+
style="height: 40px;padding: 9px 18px;border-radius: 10px;border: 1px solid #DDD;"
|
|
736
|
+
onchange="${gvc.event(e => {
|
|
737
|
+
vm.tag = e.value;
|
|
738
|
+
})}"
|
|
739
|
+
/>
|
|
740
|
+
</div>
|
|
741
|
+
<div class="d-flex w-100" style="gap:14px;margin-top: 12px;">
|
|
742
|
+
${BgWidget.searchFilter(
|
|
743
|
+
gvc.event(e => {
|
|
744
|
+
vm.query = e.value;
|
|
745
|
+
gvc.notifyDataChange(vm.id);
|
|
746
|
+
}),
|
|
747
|
+
vm.query || '',
|
|
748
|
+
'搜尋圖片'
|
|
749
|
+
)}
|
|
750
|
+
${BgWidget.updownFilter({
|
|
751
|
+
gvc,
|
|
752
|
+
callback: (value: any) => {
|
|
753
|
+
vm.orderString = value;
|
|
754
|
+
gvc.notifyDataChange(vm.id);
|
|
755
|
+
},
|
|
756
|
+
default: vm.orderString || 'default',
|
|
757
|
+
options: FilterOptions.imageLibraryOrderBy,
|
|
758
|
+
})}
|
|
759
|
+
</div>
|
|
760
|
+
<div class="d-flex w-100 justify-content-end" style="gap:12px;margin-top: 18px;">
|
|
761
|
+
<div
|
|
762
|
+
style="margin-right: auto; color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word"
|
|
763
|
+
>
|
|
764
|
+
已選取${getSelectCount({
|
|
765
|
+
items: vm.link,
|
|
766
|
+
})}項
|
|
767
|
+
</div>
|
|
768
|
+
${BgWidget.grayButton(
|
|
769
|
+
'刪除',
|
|
770
|
+
gvc.event(() => {
|
|
771
|
+
let selectedData = vm.link.filter(item => (item as any).selected);
|
|
772
|
+
selectedData.forEach(item => {
|
|
773
|
+
(item as any).selected = false;
|
|
774
|
+
item.tag = item.tag.filter(tag => {
|
|
775
|
+
return tag !== vm.tag;
|
|
776
|
+
});
|
|
777
|
+
});
|
|
778
|
+
|
|
779
|
+
let folder = vm.link.find(dd => {
|
|
780
|
+
return dd.title == vm.tag && dd.type == 'folder';
|
|
781
|
+
});
|
|
782
|
+
gvc.notifyDataChange(vm.id);
|
|
783
|
+
})
|
|
784
|
+
)}
|
|
785
|
+
${BgWidget.grayButton(
|
|
786
|
+
'新增圖片',
|
|
787
|
+
gvc.event(() => {
|
|
788
|
+
const thatGVC = gvc;
|
|
789
|
+
gvc.glitter.innerDialog((gvc: GVC) => {
|
|
790
|
+
return html`
|
|
791
|
+
<div style="width: 445px;height: 255px;border-radius: 10px;background: #FFF;">
|
|
792
|
+
<div
|
|
793
|
+
class="d-flex"
|
|
794
|
+
style="color:#393939;display: flex;padding: 12px 20px;align-items: center;gap: 10px;"
|
|
795
|
+
>
|
|
796
|
+
新增圖片
|
|
797
|
+
<span
|
|
798
|
+
class="d-flex align-items-center justify-content-center"
|
|
799
|
+
style="margin-left: auto;cursor: pointer;"
|
|
800
|
+
onclick="${gvc.event(() => {
|
|
801
|
+
gvc.glitter.closeDiaLog('add');
|
|
802
|
+
})}"
|
|
803
|
+
>
|
|
804
|
+
<svg
|
|
805
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
806
|
+
width="14"
|
|
807
|
+
height="14"
|
|
808
|
+
viewBox="0 0 14 14"
|
|
809
|
+
fill="none"
|
|
810
|
+
>
|
|
811
|
+
<path d="M1 1L13 13" stroke="#393939" stroke-linecap="round" />
|
|
812
|
+
<path d="M13 1L1 13" stroke="#393939" stroke-linecap="round" />
|
|
813
|
+
</svg>
|
|
814
|
+
</span>
|
|
815
|
+
</div>
|
|
816
|
+
<div class="d-flex justify-content-center" style="padding-top:61px;gap:14px;">
|
|
817
|
+
<div
|
|
818
|
+
style="padding: 10px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);cursor: pointer;"
|
|
819
|
+
onclick="${gvc.event(() => {
|
|
820
|
+
this.selectImageLibrary(
|
|
821
|
+
gvc,
|
|
822
|
+
selectData => {
|
|
823
|
+
selectData.map(data => {
|
|
824
|
+
let matchingElement = vm.link.find(item2 => item2.id === data.id);
|
|
825
|
+
if (matchingElement) {
|
|
826
|
+
if (!matchingElement.tag) {
|
|
827
|
+
matchingElement.tag = [];
|
|
1042
828
|
}
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
'刪除相簿'
|
|
1047
|
-
),
|
|
1048
|
-
BgWidget.save(
|
|
1049
|
-
gvc.event(() => {
|
|
1050
|
-
cf.getSelect(vm.link);
|
|
1051
|
-
save(() => {
|
|
1052
|
-
gvc.closeDialog();
|
|
1053
|
-
});
|
|
1054
|
-
}),
|
|
1055
|
-
'確定變更'
|
|
1056
|
-
),
|
|
1057
|
-
].join('');
|
|
1058
|
-
}
|
|
1059
|
-
default: {
|
|
1060
|
-
let finishBTN = cf.key == 'album' ? '建立' : '完成';
|
|
1061
|
-
return [
|
|
1062
|
-
BgWidget.cancel(
|
|
1063
|
-
gvc.event(() => {
|
|
1064
|
-
if (cf.cancelEvent) {
|
|
1065
|
-
cf.cancelEvent();
|
|
1066
|
-
}
|
|
1067
|
-
if (vm.type == 'folderView' || vm.type == 'folderADD') {
|
|
1068
|
-
vm.type = 'folder';
|
|
1069
|
-
gvc.notifyDataChange(vm.id);
|
|
1070
|
-
} else {
|
|
1071
|
-
gvc.closeDialog();
|
|
1072
|
-
}
|
|
1073
|
-
})
|
|
1074
|
-
),
|
|
1075
|
-
BgWidget.save(
|
|
1076
|
-
gvc.event(() => {
|
|
1077
|
-
let select: FileItem[] = [];
|
|
1078
|
-
|
|
1079
|
-
function loop(array: FileItem[]) {
|
|
1080
|
-
array.map((dd) => {
|
|
1081
|
-
if (dd.type === 'folder') {
|
|
1082
|
-
loop(dd.items || []);
|
|
1083
|
-
} else {
|
|
1084
|
-
if ((dd as any).selected) {
|
|
1085
|
-
select.push(dd);
|
|
1086
|
-
}
|
|
829
|
+
|
|
830
|
+
if (!matchingElement.tag.includes(vm.tag as string)) {
|
|
831
|
+
matchingElement!.tag.push(vm.tag as string);
|
|
1087
832
|
}
|
|
833
|
+
}
|
|
834
|
+
(data as any).selected = false;
|
|
1088
835
|
});
|
|
1089
|
-
}
|
|
1090
836
|
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
837
|
+
gvc.glitter.closeDiaLog('add');
|
|
838
|
+
thatGVC.notifyDataChange(vm.id);
|
|
839
|
+
},
|
|
840
|
+
`<div class="d-flex flex-column" style="border-radius: 10px 10px 0px 0px;background: #F2F2F2;">${vm.tag}</div>`,
|
|
841
|
+
{
|
|
842
|
+
key: 'album',
|
|
843
|
+
mul: true,
|
|
844
|
+
}
|
|
845
|
+
);
|
|
846
|
+
})}"
|
|
847
|
+
>
|
|
848
|
+
從圖庫中選擇
|
|
849
|
+
</div>
|
|
850
|
+
<div
|
|
851
|
+
style="padding: 10px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);cursor: pointer;"
|
|
852
|
+
onclick="${gvc.event(() => {
|
|
853
|
+
cf.plus(
|
|
854
|
+
gvc,
|
|
855
|
+
fileArray => {
|
|
856
|
+
fileArray.forEach(item => {
|
|
857
|
+
item.tag = [];
|
|
858
|
+
item.tag.push(vm.tag as string);
|
|
859
|
+
vm.link.push(item);
|
|
1095
860
|
});
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
861
|
+
gvc.glitter.closeDiaLog('add');
|
|
862
|
+
thatGVC.notifyDataChange(vm.id);
|
|
863
|
+
},
|
|
864
|
+
'file'
|
|
865
|
+
);
|
|
866
|
+
})}"
|
|
867
|
+
>
|
|
868
|
+
上傳新圖片
|
|
869
|
+
</div>
|
|
870
|
+
</div>
|
|
871
|
+
</div>
|
|
872
|
+
`;
|
|
873
|
+
}, 'add');
|
|
874
|
+
})
|
|
875
|
+
)}
|
|
876
|
+
</div>
|
|
877
|
+
<div class="">
|
|
878
|
+
${gvc.bindView({
|
|
879
|
+
bind: `folderItemGroup`,
|
|
880
|
+
view: () => {
|
|
881
|
+
if (vm.tag) {
|
|
882
|
+
return renderItems(
|
|
883
|
+
vm.link.filter(item2 => {
|
|
884
|
+
return item2.tag && item2.tag.includes(vm.tag ?? '');
|
|
885
|
+
})
|
|
886
|
+
);
|
|
887
|
+
}
|
|
888
|
+
return ``;
|
|
889
|
+
},
|
|
890
|
+
divCreate: {},
|
|
891
|
+
})}
|
|
892
|
+
</div>
|
|
893
|
+
`;
|
|
894
|
+
}
|
|
895
|
+
|
|
896
|
+
function drawSelectImg() {
|
|
897
|
+
const css = String.raw;
|
|
898
|
+
gvc.addStyle(css`
|
|
899
|
+
.fixed-top-section {
|
|
900
|
+
display: flex;
|
|
901
|
+
flex-direction: column;
|
|
902
|
+
height: auto; /* 設定一個固定的高度 (或用 auto 讓內容決定) */
|
|
903
|
+
flex-shrink: 0;
|
|
904
|
+
padding: 15px;
|
|
905
|
+
box-sizing: border-box; /* padding 不影響宣告的高度 */
|
|
906
|
+
width: 100%;
|
|
907
|
+
gap: 20px;
|
|
908
|
+
position: sticky;
|
|
909
|
+
background: #fff;
|
|
910
|
+
left: 0;
|
|
911
|
+
top: 0;
|
|
912
|
+
z-index: 2;
|
|
913
|
+
}
|
|
914
|
+
|
|
915
|
+
.scrollable-bottom-section {
|
|
916
|
+
flex-grow: 1; /* 重要:讓此區塊佔滿所有剩餘的垂直空間 */
|
|
917
|
+
overflow-y: auto; /* 關鍵:當內容垂直溢出時,只在此區塊顯示垂直滾動條 */
|
|
918
|
+
width: 100%;
|
|
919
|
+
padding: 15px;
|
|
920
|
+
box-sizing: border-box;
|
|
921
|
+
gap: 20px;
|
|
922
|
+
}
|
|
923
|
+
|
|
924
|
+
.${ids.classPrefix}-content {
|
|
925
|
+
left: 0;
|
|
926
|
+
top: 0;
|
|
927
|
+
position: relative;
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
.${ids.classPrefix}-select-bar {
|
|
931
|
+
height: 40px;
|
|
932
|
+
padding: 12px 18px;
|
|
933
|
+
background: #f7f7f7;
|
|
934
|
+
border-radius: 10px;
|
|
935
|
+
justify-content: flex-end;
|
|
936
|
+
align-items: center;
|
|
937
|
+
gap: 8px;
|
|
938
|
+
display: ${cf.mul ? `inline-flex` : `none`};
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
.${ids.classPrefix}-new-album-title-bar {
|
|
942
|
+
font-size: 16px;
|
|
943
|
+
font-style: normal;
|
|
944
|
+
font-weight: 400;
|
|
945
|
+
gap: 8px;
|
|
946
|
+
padding-top: 12px;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
.${ids.classPrefix}-new-album-title-bar input {
|
|
950
|
+
height: 40px;
|
|
951
|
+
padding: 9px 18px;
|
|
952
|
+
border-radius: 10px;
|
|
953
|
+
border: 1px solid #ddd;
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
.${ids.classPrefix}-new-album-add-block {
|
|
957
|
+
margin-top: 18px;
|
|
958
|
+
padding: 39px 0;
|
|
959
|
+
display: flex;
|
|
960
|
+
justify-content: center;
|
|
961
|
+
align-items: center;
|
|
962
|
+
border-radius: 10px;
|
|
963
|
+
border: 1px solid #ddd;
|
|
964
|
+
background: #fff;
|
|
965
|
+
gap: 14px;
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
.${ids.classPrefix}-new-album-add-block .btn1 {
|
|
969
|
+
padding: 10px 18px;
|
|
970
|
+
border-radius: 10px;
|
|
971
|
+
border: 1px solid #ddd;
|
|
972
|
+
background: #fff;
|
|
973
|
+
box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.1);
|
|
974
|
+
cursor: pointer;
|
|
975
|
+
}
|
|
976
|
+
|
|
977
|
+
.${ids.classPrefix}-album-title {
|
|
978
|
+
font-size: 16px;
|
|
979
|
+
font-style: normal;
|
|
980
|
+
font-weight: 400;
|
|
981
|
+
gap: 8px;
|
|
982
|
+
padding-top: 12px;
|
|
983
|
+
}
|
|
984
|
+
|
|
985
|
+
.${ids.classPrefix}-album-title input {
|
|
986
|
+
height: 40px;
|
|
987
|
+
padding: 9px 18px;
|
|
988
|
+
border-radius: 10px;
|
|
989
|
+
border: 1px solid #ddd;
|
|
990
|
+
}
|
|
991
|
+
`);
|
|
992
|
+
return html`
|
|
993
|
+
<div
|
|
994
|
+
class="w-100 d-inline-flex flex-column justify-content-start align-items-start ${gClass('content')}"
|
|
995
|
+
>
|
|
996
|
+
<div class="fixed-top-section">
|
|
997
|
+
<div class=" ${cf.key == 'album' ? `d-none` : `d-flex`}" style="gap:14px;">${pageBTN()}</div>
|
|
998
|
+
<div class="d-flex w-100" style="gap:14px;">
|
|
999
|
+
${BgWidget.searchFilter(
|
|
1000
|
+
gvc.event(e => {
|
|
1001
|
+
vm.query = e.value;
|
|
1002
|
+
gvc.notifyDataChange(vm.id);
|
|
1003
|
+
}),
|
|
1004
|
+
vm.query || '',
|
|
1005
|
+
cf.key == 'album-manager' || vm.type == 'file' ? `搜尋圖片` : `搜尋相簿`
|
|
1006
|
+
)}
|
|
1007
|
+
${BgWidget.updownFilter({
|
|
1008
|
+
gvc,
|
|
1009
|
+
callback: (value: any) => {
|
|
1010
|
+
vm.orderString = value;
|
|
1011
|
+
gvc.notifyDataChange(vm.id);
|
|
1012
|
+
},
|
|
1013
|
+
default: vm.orderString || 'default',
|
|
1014
|
+
options: FilterOptions.imageLibraryOrderBy,
|
|
1015
|
+
})}
|
|
1016
|
+
</div>
|
|
1017
|
+
</div>
|
|
1018
|
+
<div class="scrollable-bottom-section d-flex flex-column">
|
|
1019
|
+
<div
|
|
1020
|
+
class="w-100 ${gClass('select-bar')} ${getSelectCount({
|
|
1021
|
+
items: vm.link,
|
|
1022
|
+
}) > 0 && vm.type == 'file'
|
|
1023
|
+
? ``
|
|
1024
|
+
: `d-none`}"
|
|
1025
|
+
>
|
|
1026
|
+
<div
|
|
1027
|
+
style="flex: 1 1 0; color: #393939; font-size: 14px; font-family: Noto Sans; font-weight: 700; word-wrap: break-word"
|
|
1028
|
+
>
|
|
1029
|
+
已選取${getSelectCount({
|
|
1030
|
+
items: vm.link,
|
|
1031
|
+
})}項
|
|
1032
|
+
</div>
|
|
1033
|
+
</div>
|
|
1034
|
+
<div
|
|
1035
|
+
style="align-self: stretch; flex-direction: column; justify-content: flex-start; align-items: flex-start; gap: 18px; display: flex"
|
|
1036
|
+
>
|
|
1037
|
+
${(() => {
|
|
1038
|
+
let viewData = vm.link.filter(data => {
|
|
1039
|
+
return data.type == vm.type;
|
|
1040
|
+
});
|
|
1041
|
+
if (viewData.length == 0) {
|
|
1042
|
+
return html`
|
|
1043
|
+
<div
|
|
1044
|
+
class="w-100 h-100 d-flex flex-column align-items-center justify-content-center"
|
|
1045
|
+
style="padding-top: 106px;"
|
|
1046
|
+
>
|
|
1047
|
+
${vm.type == 'file'
|
|
1048
|
+
? html` <svg
|
|
1049
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
1050
|
+
width="80"
|
|
1051
|
+
height="80"
|
|
1052
|
+
viewBox="0 0 80 80"
|
|
1053
|
+
fill="none"
|
|
1054
|
+
>
|
|
1055
|
+
<path
|
|
1056
|
+
d="M10 10C7.23438 10 5 12.2344 5 15V51.4688L15.5781 40.8906C18.0156 38.4531 21.9688 38.4531 24.4219 40.8906L35 51.4688L55.5781 30.8906C58.0156 28.4531 61.9688 28.4531 64.4219 30.8906L75 41.4688V15C75 12.2344 72.7656 10 70 10H10ZM5 58.5312V65C5 67.7656 7.23438 70 10 70H16.4688L31.4688 55L20.8906 44.4219C20.4062 43.9375 19.6094 43.9375 19.125 44.4219L5 58.5312ZM60.8906 34.4219C60.4063 33.9375 59.6094 33.9375 59.125 34.4219L23.5312 70H70C72.7656 70 75 67.7656 75 65V48.5312L60.8906 34.4219ZM0 15C0 9.48438 4.48438 5 10 5H70C75.5156 5 80 9.48438 80 15V65C80 70.5156 75.5156 75 70 75H10C4.48438 75 0 70.5156 0 65V15ZM25 22.5C25 21.837 24.7366 21.2011 24.2678 20.7322C23.7989 20.2634 23.163 20 22.5 20C21.837 20 21.2011 20.2634 20.7322 20.7322C20.2634 21.2011 20 21.837 20 22.5C20 23.163 20.2634 23.7989 20.7322 24.2678C21.2011 24.7366 21.837 25 22.5 25C23.163 25 23.7989 24.7366 24.2678 24.2678C24.7366 23.7989 25 23.163 25 22.5ZM15 22.5C15 20.5109 15.7902 18.6032 17.1967 17.1967C18.6032 15.7902 20.5109 15 22.5 15C24.4891 15 26.3968 15.7902 27.8033 17.1967C29.2098 18.6032 30 20.5109 30 22.5C30 24.4891 29.2098 26.3968 27.8033 27.8033C26.3968 29.2098 24.4891 30 22.5 30C20.5109 30 18.6032 29.2098 17.1967 27.8033C15.7902 26.3968 15 24.4891 15 22.5Z"
|
|
1057
|
+
fill="#393939"
|
|
1058
|
+
/>
|
|
1059
|
+
</svg>`
|
|
1060
|
+
: html` <svg
|
|
1061
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
1062
|
+
width="80"
|
|
1063
|
+
height="80"
|
|
1064
|
+
viewBox="0 0 80 80"
|
|
1065
|
+
fill="none"
|
|
1066
|
+
>
|
|
1067
|
+
<path
|
|
1068
|
+
d="M10 10C7.23438 10 5 12.2344 5 15V65C5 67.7656 7.23438 70 10 70H70C72.7656 70 75 67.7656 75 65V25C75 22.2344 72.7656 20 70 20H45.6094C42.9531 20 40.4062 18.9531 38.5312 17.0781L32.9219 11.4688C31.9844 10.5312 30.7188 10 29.3906 10H10ZM0 15C0 9.48438 4.48438 5 10 5H29.3906C32.0469 5 34.5938 6.04688 36.4688 7.92188L42.0781 13.5312C43.0156 14.4688 44.2812 15 45.6094 15H70C75.5156 15 80 19.4844 80 25V65C80 70.5156 75.5156 75 70 75H10C4.48438 75 0 70.5156 0 65V15Z"
|
|
1069
|
+
fill="#393939"
|
|
1070
|
+
/>
|
|
1071
|
+
</svg>`}
|
|
1072
|
+
<div
|
|
1073
|
+
style="color: #8D8D8D;font-size: 18px;font-weight: 400;margin-top: 12px;margin-bottom: 24px;"
|
|
1074
|
+
>
|
|
1075
|
+
${vm.type == 'file' ? `尚未上傳任何圖片` : `尚未建立任何相簿`}
|
|
1076
|
+
</div>
|
|
1077
|
+
<div
|
|
1078
|
+
style="color: #FFF;font-weight: 700;font-size: 16px;padding: 6px 18px;border-radius: 10px;background: #393939;cursor: pointer;"
|
|
1079
|
+
onclick="${gvc.event(() => {
|
|
1080
|
+
if (vm.type == 'file') {
|
|
1081
|
+
cf.plus(
|
|
1082
|
+
gvc,
|
|
1083
|
+
file => {
|
|
1084
|
+
vm.link.push(...file);
|
|
1085
|
+
save(() => {
|
|
1086
|
+
gvc.notifyDataChange(vm.id);
|
|
1087
|
+
});
|
|
1088
|
+
},
|
|
1089
|
+
'file'
|
|
1090
|
+
);
|
|
1113
1091
|
} else {
|
|
1114
|
-
|
|
1115
|
-
|
|
1092
|
+
vm.tag = '';
|
|
1093
|
+
vm.type = 'folderADD';
|
|
1094
|
+
gvc.notifyDataChange(vm.id);
|
|
1116
1095
|
}
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1096
|
+
})}"
|
|
1097
|
+
>
|
|
1098
|
+
${vm.type == 'file' ? `上傳圖片` : `建立相簿`}
|
|
1099
|
+
</div>
|
|
1100
|
+
</div>
|
|
1101
|
+
`;
|
|
1102
|
+
}
|
|
1103
|
+
return html`
|
|
1104
|
+
<div
|
|
1105
|
+
class="w-100 ${cf.key == 'album'
|
|
1106
|
+
? `d-none`
|
|
1107
|
+
: `d-flex`} align-items-center justify-content-center"
|
|
1108
|
+
style="padding: 39px 0;border-radius: 10px;border: 1px solid #DDD;background: #FFF;"
|
|
1109
|
+
>
|
|
1110
|
+
<div
|
|
1111
|
+
style="padding:6px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);font-size: 16px;font-weight: 400;cursor:pointer;"
|
|
1112
|
+
onclick="${gvc.event(() => {
|
|
1113
|
+
if (vm.type == 'file') {
|
|
1114
|
+
cf.plus(
|
|
1115
|
+
gvc,
|
|
1116
|
+
file => {
|
|
1117
|
+
vm.link.push(...file);
|
|
1118
|
+
save(() => {
|
|
1119
|
+
gvc.notifyDataChange(vm.id);
|
|
1120
|
+
});
|
|
1121
|
+
},
|
|
1122
|
+
'file'
|
|
1123
|
+
);
|
|
1124
|
+
} else {
|
|
1125
|
+
vm.tag = '';
|
|
1126
|
+
vm.type = 'folderADD';
|
|
1127
|
+
gvc.notifyDataChange(vm.id);
|
|
1128
|
+
}
|
|
1129
|
+
})}"
|
|
1130
|
+
>
|
|
1131
|
+
${vm.type == 'file' ? '上傳新照片' : '新增相簿'}
|
|
1132
|
+
</div>
|
|
1133
|
+
</div>
|
|
1134
|
+
${renderItems(viewData)}
|
|
1135
|
+
`;
|
|
1136
|
+
})()}
|
|
1137
|
+
</div>
|
|
1138
|
+
</div>
|
|
1139
|
+
</div>
|
|
1140
|
+
`;
|
|
1141
|
+
}
|
|
1142
|
+
|
|
1143
|
+
if (vm.loading) {
|
|
1144
|
+
dialog.dataLoading({
|
|
1145
|
+
visible: true,
|
|
1146
|
+
});
|
|
1147
|
+
return ``;
|
|
1148
|
+
}
|
|
1149
|
+
dialog.dataLoading({
|
|
1150
|
+
visible: false,
|
|
1151
|
+
});
|
|
1152
|
+
return drawSelectImg();
|
|
1123
1153
|
},
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
}
|
|
1154
|
+
divCreate: {
|
|
1155
|
+
class: `w-100 h-100`,
|
|
1156
|
+
style: ``,
|
|
1128
1157
|
},
|
|
1158
|
+
};
|
|
1129
1159
|
});
|
|
1130
|
-
|
|
1160
|
+
},
|
|
1161
|
+
footer_html: (gvc: GVC) => {
|
|
1162
|
+
type BtnDef = {
|
|
1163
|
+
type: 'cancel' | 'save' | 'danger' | 'edit';
|
|
1164
|
+
label: string;
|
|
1165
|
+
onClick: () => void;
|
|
1166
|
+
};
|
|
1167
|
+
const dialog = new ShareDialog(cf.gvc.glitter);
|
|
1131
1168
|
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
cancelEvent?: () => void;
|
|
1137
|
-
}) {
|
|
1138
|
-
const gvc = cf.gvc;
|
|
1139
|
-
gvc.addStyle(`
|
|
1140
|
-
.imageHover {
|
|
1141
|
-
border: 2px solid #393939;box-shadow: 3px 3px 10px 0px rgba(0, 0, 0, 0.10);
|
|
1169
|
+
function clearNoNeedData(items: FileItem[]) {
|
|
1170
|
+
items.map(dd => {
|
|
1171
|
+
if ((dd as any).selected) {
|
|
1172
|
+
(dd as any).selected = undefined;
|
|
1142
1173
|
}
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
gvc: gvc,
|
|
1147
|
-
title: cf.title,
|
|
1148
|
-
innerHTML: (gvc: GVC) => {
|
|
1149
|
-
let editArray:boolean[] = []
|
|
1150
|
-
imageArray.forEach((item) => {
|
|
1151
|
-
editArray.push(false)
|
|
1152
|
-
})
|
|
1153
|
-
return html`
|
|
1154
|
-
<div class="w-100 d-flex flex-column">
|
|
1155
|
-
<div style="font-size: 13px;">您只能選擇圖片當作子類媒體</div>
|
|
1156
|
-
<div class="d-flex flex-wrap w-100" style="gap: 0.5rem;margin-top:1rem;">
|
|
1157
|
-
${gvc.bindView({
|
|
1158
|
-
bind: "imageArray",
|
|
1159
|
-
view: () => {
|
|
1160
|
-
const isSafari = (() => {
|
|
1161
|
-
const userAgent = navigator.userAgent.toLowerCase();
|
|
1162
|
-
return userAgent.includes('safari') && !userAgent.includes('chrome') && !userAgent.includes('edg');
|
|
1163
|
-
})();
|
|
1164
|
-
return [html`<div class="col-2 d-flex align-items-center justify-content-center " style="border-radius:10px;cursor: pointer;border:1px solid #DDD;" onclick="${gvc.event(()=>{
|
|
1165
|
-
EditorElem.uploadFileFunction({
|
|
1166
|
-
gvc: gvc,
|
|
1167
|
-
callback: (text: any) => {
|
|
1168
|
-
let allData: any ={}
|
|
1169
|
-
const updateData = {
|
|
1170
|
-
title: text[0].split('_')[3],
|
|
1171
|
-
data: text[0],
|
|
1172
|
-
items: [],
|
|
1173
|
-
type: 'file',
|
|
1174
|
-
tag: [],
|
|
1175
|
-
id: gvc.glitter.getUUID(),
|
|
1176
|
-
}
|
|
1177
|
-
const dialog = new ShareDialog(gvc.glitter)
|
|
1178
|
-
dialog.dataLoading({
|
|
1179
|
-
visible:true
|
|
1180
|
-
})
|
|
1181
|
-
function getPublicConfig(callback: () => void) {
|
|
1182
|
-
ApiUser.getPublicConfig('image-manager', 'manager').then((data: any) => {
|
|
1183
|
-
if (data.response.value) {
|
|
1184
|
-
allData = data.response.value;
|
|
1185
|
-
function loop(array: FileItem[]) {
|
|
1186
|
-
if (array.length > 0) {
|
|
1187
|
-
array.map((dd) => {
|
|
1188
|
-
if (dd.type === 'folder') {
|
|
1189
|
-
loop(dd.items ?? []);
|
|
1190
|
-
}
|
|
1191
|
-
});
|
|
1192
|
-
}
|
|
1193
|
-
}
|
|
1194
|
-
|
|
1195
|
-
loop(data);
|
|
1196
|
-
callback();
|
|
1197
|
-
} else {
|
|
1198
|
-
callback();
|
|
1199
|
-
}
|
|
1200
|
-
});
|
|
1201
|
-
}
|
|
1202
|
-
getPublicConfig(()=>{
|
|
1203
|
-
allData.push(updateData);
|
|
1204
|
-
ApiUser.setPublicConfig({
|
|
1205
|
-
key: 'image-manager',
|
|
1206
|
-
value: allData,
|
|
1207
|
-
user_id: 'manager',
|
|
1208
|
-
}).then((data) => {
|
|
1209
|
-
imageArray.push(text[0]);
|
|
1210
|
-
dialog.dataLoading({
|
|
1211
|
-
visible:false
|
|
1212
|
-
})
|
|
1213
|
-
gvc.notifyDataChange('imageArray');
|
|
1214
|
-
});
|
|
1215
|
-
})
|
|
1216
|
-
},
|
|
1217
|
-
return_array: true,
|
|
1218
|
-
multiple: true,
|
|
1219
|
-
});
|
|
1220
|
-
})}">
|
|
1221
|
-
<div style="padding:6px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);font-size: 16px;font-weight: 400;cursor:pointer;">新增圖片</div>
|
|
1222
|
-
</div>`,
|
|
1223
|
-
imageArray.map((image: string, index) => {
|
|
1224
|
-
return html`
|
|
1225
|
-
<div class="col-2 position-relative imageHover" style="padding: 10px 12px;position: relative;${selected==index
|
|
1226
|
-
? `border-radius: 10px;border: 2px solid #393939;background: #F7F7F7;box-shadow: 3px 3px 10px 0px rgba(0, 0, 0, 0.10);`
|
|
1227
|
-
: editArray[index]
|
|
1228
|
-
? `border-radius: 10px;border: 1px solid #DDD;background: #F7F7F7;`
|
|
1229
|
-
: ``}" onclick="${gvc.event(() => {
|
|
1230
|
-
selected = index;
|
|
1231
|
-
gvc.notifyDataChange("imageArray");
|
|
1232
|
-
})}"
|
|
1233
|
-
onmouseenter="${gvc.event(() => {
|
|
1234
|
-
if (!editArray[index]) {
|
|
1235
|
-
editArray[index] = true;
|
|
1236
|
-
gvc.notifyDataChange('imageArray');
|
|
1237
|
-
}
|
|
1238
|
-
})}"
|
|
1239
|
-
onmouseleave="${gvc.event((e, event) => {
|
|
1240
|
-
if (isSafari) {
|
|
1241
|
-
const imageBoxClass = Tool.randomString(5);
|
|
1242
|
-
const target = event.relatedTarget as HTMLElement;
|
|
1243
|
-
const imageBoxClassList = [imageBoxClass];
|
|
1244
|
-
const targetClassList = Array.from(target.classList);
|
|
1245
|
-
const isOutBorder =
|
|
1246
|
-
imageBoxClassList.every((cls) => targetClassList.includes(cls)) &&
|
|
1247
|
-
targetClassList.every((cls) => imageBoxClassList.includes(cls));
|
|
1248
|
-
const isTitle = targetClassList.includes(`${imageBoxClass}-title`);
|
|
1249
|
-
const isInside = targetClassList.length === 0;
|
|
1250
|
-
const isOutOfViewContainer = target.dataset.viewContainer === 'true';
|
|
1251
|
-
const isUL = target.tagName === 'UL';
|
|
1252
|
-
|
|
1253
|
-
if ((isOutBorder || isTitle || isInside) && !(isOutOfViewContainer || isUL)) {
|
|
1254
|
-
return;
|
|
1255
|
-
}
|
|
1256
|
-
}
|
|
1257
|
-
editArray[index] = false;
|
|
1258
|
-
gvc.notifyDataChange('imageArray');
|
|
1259
|
-
})}"
|
|
1260
|
-
>
|
|
1261
|
-
<div class="w-100"
|
|
1262
|
-
style="background: url('${image}') 50%/cover;padding-bottom:100%;border-radius: 10px;"></div>
|
|
1263
|
-
</div>
|
|
1264
|
-
`
|
|
1265
|
-
}).join(``)
|
|
1266
|
-
].join(``)
|
|
1267
|
-
|
|
1268
|
-
}, divCreate: {class: `d-flex flex-wrap w-100`, style: `gap: 0.5rem;margin-top:1rem;`}
|
|
1269
|
-
})}
|
|
1270
|
-
</div>
|
|
1271
|
-
</div>
|
|
1272
|
-
`
|
|
1273
|
-
},
|
|
1274
|
-
footer_html: (gvc: GVC) => {
|
|
1275
|
-
const dialog = new ShareDialog(cf.gvc.glitter);
|
|
1174
|
+
clearNoNeedData(dd.items || []);
|
|
1175
|
+
});
|
|
1176
|
+
}
|
|
1276
1177
|
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1178
|
+
function save(finish: () => void, text?: string) {
|
|
1179
|
+
clearNoNeedData(vm.link);
|
|
1180
|
+
dialog.dataLoading({ visible: true });
|
|
1181
|
+
ApiUser.setPublicConfig({
|
|
1182
|
+
key: 'image-manager',
|
|
1183
|
+
value: vm.link,
|
|
1184
|
+
user_id: 'manager',
|
|
1185
|
+
}).then(data => {
|
|
1186
|
+
dialog.dataLoading({ visible: false });
|
|
1187
|
+
dialog.successMessage({ text: text ?? '儲存成功' });
|
|
1188
|
+
changeWindowsName('圖片庫');
|
|
1189
|
+
finish();
|
|
1190
|
+
});
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
function getFolderEditButtons(gvc: GVC, save: Function): BtnDef[] {
|
|
1194
|
+
return [
|
|
1195
|
+
{
|
|
1196
|
+
type: 'cancel',
|
|
1197
|
+
label: '返回',
|
|
1198
|
+
onClick: () => {
|
|
1199
|
+
if (cf.cancelEvent) {
|
|
1200
|
+
changeWindowsName('圖片庫');
|
|
1201
|
+
cf.cancelEvent();
|
|
1202
|
+
}
|
|
1203
|
+
gvc.closeDialog();
|
|
1204
|
+
},
|
|
1205
|
+
},
|
|
1206
|
+
{
|
|
1207
|
+
type: 'danger',
|
|
1208
|
+
label: '刪除相簿',
|
|
1209
|
+
onClick: () => {
|
|
1210
|
+
new ShareDialog(gvc.glitter).checkYesOrNot({
|
|
1211
|
+
text: `您確定要永久刪除此資料夾嗎?刪除後將取消這些照片間的關聯。`,
|
|
1212
|
+
callback: yes => {
|
|
1213
|
+
if (!yes) return;
|
|
1214
|
+
// 取消選取、移除 tag
|
|
1215
|
+
vm.link.forEach(item => {
|
|
1216
|
+
if (item.tag?.includes(vm.tag!)) {
|
|
1217
|
+
item.selected = false;
|
|
1218
|
+
item.tag = item.tag!.filter(t => t !== vm.tag);
|
|
1219
|
+
}
|
|
1220
|
+
});
|
|
1221
|
+
// 刪掉資料夾
|
|
1222
|
+
const idx = vm.link.findIndex(d => d.title === vm.tag && d.type === 'folder');
|
|
1223
|
+
vm.link.splice(idx, 1);
|
|
1224
|
+
cf.getSelect(vm.link);
|
|
1225
|
+
save(() => {
|
|
1226
|
+
changeWindowsName('圖片庫');
|
|
1227
|
+
gvc.closeDialog();
|
|
1228
|
+
}, '刪除成功');
|
|
1229
|
+
},
|
|
1230
|
+
});
|
|
1231
|
+
},
|
|
1232
|
+
},
|
|
1233
|
+
{
|
|
1234
|
+
type: 'save',
|
|
1235
|
+
label: '確定變更',
|
|
1236
|
+
onClick: () => {
|
|
1237
|
+
cf.getSelect(vm.link);
|
|
1238
|
+
save(() => gvc.closeDialog());
|
|
1239
|
+
},
|
|
1240
|
+
},
|
|
1241
|
+
];
|
|
1242
|
+
}
|
|
1280
1243
|
|
|
1281
|
-
|
|
1244
|
+
function getDefaultButtons(gvc: GVC, save: Function, dialog: ShareDialog): BtnDef[] {
|
|
1245
|
+
const finishLabel = cf.key === 'album' ? '建立' : '完成';
|
|
1246
|
+
const cancelLabel = cf.key === 'album' ? '返回' : '取消';
|
|
1282
1247
|
|
|
1248
|
+
return [
|
|
1249
|
+
{
|
|
1250
|
+
type: 'cancel',
|
|
1251
|
+
label: cancelLabel,
|
|
1252
|
+
onClick: () => {
|
|
1253
|
+
if (cf.cancelEvent) cf.cancelEvent();
|
|
1254
|
+
if (vm.type === 'folderView' || vm.type === 'folderADD') {
|
|
1255
|
+
closeFolderView();
|
|
1256
|
+
vm.type = 'folder';
|
|
1257
|
+
gvc.notifyDataChange(vm.id);
|
|
1258
|
+
} else {
|
|
1259
|
+
gvc.closeDialog();
|
|
1260
|
+
}
|
|
1261
|
+
},
|
|
1283
1262
|
},
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1263
|
+
{
|
|
1264
|
+
type: 'edit',
|
|
1265
|
+
label: '編輯',
|
|
1266
|
+
onClick: () => {
|
|
1267
|
+
vm.type = 'folderViewToEdit';
|
|
1268
|
+
gvc.notifyDataChange(vm.id);
|
|
1269
|
+
},
|
|
1270
|
+
},
|
|
1271
|
+
{
|
|
1272
|
+
type: 'save',
|
|
1273
|
+
label: finishLabel,
|
|
1274
|
+
onClick: () => {
|
|
1275
|
+
// 遞迴撈出所有選好的圖片
|
|
1276
|
+
const selected: FileItem[] = [];
|
|
1277
|
+
(function walk(arr: FileItem[]) {
|
|
1278
|
+
arr.forEach(d => {
|
|
1279
|
+
if (d.type === 'folder') walk(d.items || []);
|
|
1280
|
+
else if ((d as any).selected) selected.push(d);
|
|
1281
|
+
});
|
|
1282
|
+
})(vm.link);
|
|
1283
|
+
if (vm.type === 'folderADD') {
|
|
1284
|
+
if (!vm.tag) {
|
|
1285
|
+
dialog.infoMessage({ text: '相簿尚未命名' });
|
|
1286
|
+
return;
|
|
1287
|
+
}
|
|
1288
|
+
vm.newFolder.title = vm.tag;
|
|
1289
|
+
vm.newFolder.data.forEach((data: FileItem) => {
|
|
1290
|
+
const findImage = vm.link.find(image => image.id === data.id);
|
|
1291
|
+
if (findImage) {
|
|
1292
|
+
findImage.tag.push(vm.tag ?? '');
|
|
1293
|
+
}
|
|
1294
|
+
});
|
|
1295
|
+
vm.newFolder.data = [];
|
|
1296
|
+
vm.link.push(vm.newFolder);
|
|
1297
|
+
save(() => {
|
|
1298
|
+
vm.type = 'folder';
|
|
1299
|
+
gvc.notifyDataChange(vm.id);
|
|
1300
|
+
});
|
|
1301
|
+
return;
|
|
1302
|
+
}
|
|
1303
|
+
if (cf.key === 'album') {
|
|
1304
|
+
dialog.successMessage({ text: '相簿建立成功' });
|
|
1305
|
+
cf.getSelect(selected);
|
|
1306
|
+
gvc.closeDialog();
|
|
1307
|
+
return;
|
|
1287
1308
|
}
|
|
1309
|
+
|
|
1310
|
+
if (['image-manager', 'folderEdit'].includes(cf.key)) {
|
|
1311
|
+
if (selected.length || cf.edit_only) {
|
|
1312
|
+
save(() => {
|
|
1313
|
+
cf.getSelect(selected);
|
|
1314
|
+
gvc.closeDialog();
|
|
1315
|
+
});
|
|
1316
|
+
} else {
|
|
1317
|
+
dialog.errorMessage({ text: '請選擇至少一張圖片' });
|
|
1318
|
+
}
|
|
1319
|
+
} else {
|
|
1320
|
+
cf.getSelect(selected);
|
|
1321
|
+
gvc.closeDialog();
|
|
1322
|
+
}
|
|
1323
|
+
},
|
|
1288
1324
|
},
|
|
1289
|
-
|
|
1325
|
+
];
|
|
1326
|
+
}
|
|
1327
|
+
|
|
1328
|
+
const defs = vm.type === 'folderEdit' ? getFolderEditButtons(gvc, save) : getDefaultButtons(gvc, save, dialog);
|
|
1329
|
+
return gvc.bindView({
|
|
1330
|
+
bind:vm.footer_id,
|
|
1331
|
+
view:()=>{
|
|
1332
|
+
return defs
|
|
1333
|
+
.map(d => {
|
|
1334
|
+
const widget =
|
|
1335
|
+
( d.type === 'cancel' || d.type === 'edit') ? BgWidget.cancel : d.type === 'danger' ? BgWidget.danger : BgWidget.save;
|
|
1336
|
+
if (d.type == 'edit') {
|
|
1337
|
+
if (vm.type == 'folderView') {
|
|
1338
|
+
return widget(gvc.event(d.onClick), d.label);
|
|
1339
|
+
}
|
|
1340
|
+
return '';
|
|
1341
|
+
} else {
|
|
1342
|
+
return widget(gvc.event(d.onClick), d.label);
|
|
1343
|
+
}
|
|
1344
|
+
})
|
|
1345
|
+
.join('');
|
|
1346
|
+
},divCreate:{
|
|
1347
|
+
class:'w-100 d-flex align-items-center justify-content-end',
|
|
1348
|
+
style:'gap:14px'
|
|
1349
|
+
}
|
|
1350
|
+
})
|
|
1351
|
+
|
|
1352
|
+
},
|
|
1353
|
+
closeCallback: () => {
|
|
1354
|
+
if (cf.cancelEvent) {
|
|
1355
|
+
cf.cancelEvent();
|
|
1356
|
+
}
|
|
1357
|
+
},
|
|
1358
|
+
});
|
|
1359
|
+
}
|
|
1360
|
+
|
|
1361
|
+
public static selectImageFromArray(
|
|
1362
|
+
imageArray: string[],
|
|
1363
|
+
cf: {
|
|
1364
|
+
gvc: GVC;
|
|
1365
|
+
title: string;
|
|
1366
|
+
getSelect: (id: string) => void;
|
|
1367
|
+
cancelEvent?: () => void;
|
|
1290
1368
|
}
|
|
1369
|
+
) {
|
|
1370
|
+
const gvc = cf.gvc;
|
|
1371
|
+
gvc.addStyle(`
|
|
1372
|
+
.imageHover {
|
|
1373
|
+
border: 2px solid #393939;box-shadow: 3px 3px 10px 0px rgba(0, 0, 0, 0.10);
|
|
1374
|
+
}
|
|
1375
|
+
`);
|
|
1376
|
+
let selected: any = undefined;
|
|
1377
|
+
BgWidget.imageLibraryDialog({
|
|
1378
|
+
gvc: gvc,
|
|
1379
|
+
title: cf.title,
|
|
1380
|
+
innerHTML: (gvc: GVC) => {
|
|
1381
|
+
let editArray: boolean[] = [];
|
|
1382
|
+
imageArray.forEach(item => {
|
|
1383
|
+
editArray.push(false);
|
|
1384
|
+
});
|
|
1385
|
+
return html`
|
|
1386
|
+
<div class="w-100 d-flex flex-column">
|
|
1387
|
+
<div style="font-size: 13px;">您只能選擇圖片當作子類媒體</div>
|
|
1388
|
+
<div class="d-flex flex-wrap w-100" style="gap: 0.5rem;margin-top:1rem;">
|
|
1389
|
+
${gvc.bindView({
|
|
1390
|
+
bind: 'imageArray',
|
|
1391
|
+
view: () => {
|
|
1392
|
+
const isSafari = (() => {
|
|
1393
|
+
const userAgent = navigator.userAgent.toLowerCase();
|
|
1394
|
+
return userAgent.includes('safari') && !userAgent.includes('chrome') && !userAgent.includes('edg');
|
|
1395
|
+
})();
|
|
1396
|
+
return [
|
|
1397
|
+
html` <div
|
|
1398
|
+
class="col-2 d-flex align-items-center justify-content-center "
|
|
1399
|
+
style="border-radius:10px;cursor: pointer;border:1px solid #DDD;"
|
|
1400
|
+
onclick="${gvc.event(() => {
|
|
1401
|
+
EditorElem.uploadFileFunction({
|
|
1402
|
+
gvc: gvc,
|
|
1403
|
+
callback: (text: any) => {
|
|
1404
|
+
let allData: any = {};
|
|
1405
|
+
const updateData = {
|
|
1406
|
+
title: text[0].split('_')[3],
|
|
1407
|
+
data: text[0],
|
|
1408
|
+
items: [],
|
|
1409
|
+
type: 'file',
|
|
1410
|
+
tag: [],
|
|
1411
|
+
id: gvc.glitter.getUUID(),
|
|
1412
|
+
};
|
|
1413
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
1414
|
+
dialog.dataLoading({
|
|
1415
|
+
visible: true,
|
|
1416
|
+
});
|
|
1291
1417
|
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
opt?: {
|
|
1297
|
-
key?: string;
|
|
1298
|
-
mul?: boolean;
|
|
1299
|
-
tag?: string;
|
|
1300
|
-
cancelEvent?: () => void;
|
|
1301
|
-
},
|
|
1302
|
-
edit_only?:boolean
|
|
1303
|
-
) {
|
|
1304
|
-
let alt: any = '';
|
|
1305
|
-
let saveAlt = function () {
|
|
1306
|
-
};
|
|
1418
|
+
function getPublicConfig(callback: () => void) {
|
|
1419
|
+
ApiUser.getPublicConfig('image-manager', 'manager').then((data: any) => {
|
|
1420
|
+
if (data.response.value) {
|
|
1421
|
+
allData = data.response.value;
|
|
1307
1422
|
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
item.data = text;
|
|
1337
|
-
},
|
|
1338
|
-
}),
|
|
1339
|
-
gvc.bindView(() => {
|
|
1340
|
-
const id = gvc.glitter.getUUID();
|
|
1341
|
-
return {
|
|
1342
|
-
bind: id,
|
|
1343
|
-
view: async () => {
|
|
1344
|
-
const tag = gvc.glitter.generateCheckSum(item.data, 9);
|
|
1345
|
-
alt = (await ApiUser.getPublicConfig(`alt_` + tag, 'manager')).response.value || {alt: ''};
|
|
1346
|
-
saveAlt = async () => {
|
|
1347
|
-
ApiUser.setPublicConfig({
|
|
1348
|
-
key: `alt_` + tag,
|
|
1349
|
-
value: alt,
|
|
1350
|
-
user_id: 'manager',
|
|
1351
|
-
});
|
|
1352
|
-
};
|
|
1353
|
-
return BgWidget.textArea({
|
|
1354
|
-
gvc: gvc,
|
|
1355
|
-
title: `ALT描述`,
|
|
1356
|
-
default: alt.alt,
|
|
1357
|
-
placeHolder: `請輸入ALT描述`,
|
|
1358
|
-
callback: (text) => {
|
|
1359
|
-
alt.alt = text;
|
|
1360
|
-
},
|
|
1423
|
+
function loop(array: FileItem[]) {
|
|
1424
|
+
if (array.length > 0) {
|
|
1425
|
+
array.map(dd => {
|
|
1426
|
+
if (dd.type === 'folder') {
|
|
1427
|
+
loop(dd.items ?? []);
|
|
1428
|
+
}
|
|
1429
|
+
});
|
|
1430
|
+
}
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1433
|
+
loop(data);
|
|
1434
|
+
callback();
|
|
1435
|
+
} else {
|
|
1436
|
+
callback();
|
|
1437
|
+
}
|
|
1438
|
+
});
|
|
1439
|
+
}
|
|
1440
|
+
|
|
1441
|
+
getPublicConfig(() => {
|
|
1442
|
+
allData.push(updateData);
|
|
1443
|
+
ApiUser.setPublicConfig({
|
|
1444
|
+
key: 'image-manager',
|
|
1445
|
+
value: allData,
|
|
1446
|
+
user_id: 'manager',
|
|
1447
|
+
}).then(data => {
|
|
1448
|
+
imageArray.push(text[0]);
|
|
1449
|
+
dialog.dataLoading({
|
|
1450
|
+
visible: false,
|
|
1361
1451
|
});
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1452
|
+
gvc.notifyDataChange('imageArray');
|
|
1453
|
+
});
|
|
1454
|
+
});
|
|
1455
|
+
},
|
|
1456
|
+
return_array: true,
|
|
1457
|
+
multiple: true,
|
|
1458
|
+
});
|
|
1459
|
+
})}"
|
|
1460
|
+
>
|
|
1461
|
+
<div
|
|
1462
|
+
style="padding:6px 18px;border-radius: 10px;border: 1px solid #DDD;background: #FFF;box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.10);font-size: 16px;font-weight: 400;cursor:pointer;"
|
|
1463
|
+
>
|
|
1464
|
+
新增圖片
|
|
1465
|
+
</div>
|
|
1466
|
+
</div>`,
|
|
1467
|
+
imageArray
|
|
1468
|
+
.map((image: string, index) => {
|
|
1469
|
+
return html`
|
|
1470
|
+
<div
|
|
1471
|
+
class="col-2 position-relative imageHover"
|
|
1472
|
+
style="padding: 10px 12px;position: relative;${selected == index
|
|
1473
|
+
? `border-radius: 10px;border: 2px solid #393939;background: #F7F7F7;box-shadow: 3px 3px 10px 0px rgba(0, 0, 0, 0.10);`
|
|
1474
|
+
: editArray[index]
|
|
1475
|
+
? `border-radius: 10px;border: 1px solid #DDD;background: #F7F7F7;`
|
|
1476
|
+
: ``}"
|
|
1477
|
+
onclick="${gvc.event(() => {
|
|
1478
|
+
selected = index;
|
|
1479
|
+
gvc.notifyDataChange('imageArray');
|
|
1480
|
+
})}"
|
|
1481
|
+
onmouseenter="${gvc.event(() => {
|
|
1482
|
+
if (!editArray[index]) {
|
|
1483
|
+
editArray[index] = true;
|
|
1484
|
+
gvc.notifyDataChange('imageArray');
|
|
1485
|
+
}
|
|
1486
|
+
})}"
|
|
1487
|
+
onmouseleave="${gvc.event((e, event) => {
|
|
1488
|
+
if (isSafari) {
|
|
1489
|
+
const imageBoxClass = Tool.randomString(5);
|
|
1490
|
+
const target = event.relatedTarget as HTMLElement;
|
|
1491
|
+
const imageBoxClassList = [imageBoxClass];
|
|
1492
|
+
const targetClassList = Array.from(target.classList);
|
|
1493
|
+
const isOutBorder =
|
|
1494
|
+
imageBoxClassList.every(cls => targetClassList.includes(cls)) &&
|
|
1495
|
+
targetClassList.every(cls => imageBoxClassList.includes(cls));
|
|
1496
|
+
const isTitle = targetClassList.includes(`${imageBoxClass}-title`);
|
|
1497
|
+
const isInside = targetClassList.length === 0;
|
|
1498
|
+
const isOutOfViewContainer = target.dataset.viewContainer === 'true';
|
|
1499
|
+
const isUL = target.tagName === 'UL';
|
|
1500
|
+
|
|
1501
|
+
if ((isOutBorder || isTitle || isInside) && !(isOutOfViewContainer || isUL)) {
|
|
1502
|
+
return;
|
|
1503
|
+
}
|
|
1504
|
+
}
|
|
1505
|
+
editArray[index] = false;
|
|
1506
|
+
gvc.notifyDataChange('imageArray');
|
|
1507
|
+
})}"
|
|
1508
|
+
>
|
|
1509
|
+
<div
|
|
1510
|
+
class="w-100"
|
|
1511
|
+
style="background: url('${image}') 50%/cover;padding-bottom:100%;border-radius: 10px;"
|
|
1512
|
+
></div>
|
|
1513
|
+
</div>
|
|
1514
|
+
`;
|
|
1515
|
+
})
|
|
1516
|
+
.join(``),
|
|
1517
|
+
].join(``);
|
|
1518
|
+
},
|
|
1519
|
+
divCreate: { class: `d-flex flex-wrap w-100`, style: `gap: 0.5rem;margin-top:1rem;` },
|
|
1520
|
+
})}
|
|
1521
|
+
</div>
|
|
1522
|
+
</div>
|
|
1523
|
+
`;
|
|
1524
|
+
},
|
|
1525
|
+
footer_html: (gvc: GVC) => {
|
|
1526
|
+
const dialog = new ShareDialog(cf.gvc.glitter);
|
|
1527
|
+
|
|
1528
|
+
return BgWidget.save(
|
|
1529
|
+
gvc.event(() => {
|
|
1530
|
+
gvc.closeDialog();
|
|
1531
|
+
cf.getSelect(imageArray[selected]);
|
|
1532
|
+
})
|
|
1533
|
+
);
|
|
1534
|
+
},
|
|
1535
|
+
closeCallback: () => {
|
|
1536
|
+
if (cf.cancelEvent) {
|
|
1537
|
+
cf.cancelEvent();
|
|
1367
1538
|
}
|
|
1539
|
+
},
|
|
1540
|
+
});
|
|
1541
|
+
}
|
|
1368
1542
|
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1543
|
+
public static async selectImageLibrary(
|
|
1544
|
+
gvc: GVC,
|
|
1545
|
+
callback: (id: FileItem[]) => void,
|
|
1546
|
+
title: string,
|
|
1547
|
+
opt?: {
|
|
1548
|
+
key?: string;
|
|
1549
|
+
mul?: boolean;
|
|
1550
|
+
tag?: string;
|
|
1551
|
+
cancelEvent?: () => void;
|
|
1552
|
+
deleteEvent?: () => void;
|
|
1553
|
+
},
|
|
1554
|
+
edit_only?: boolean
|
|
1555
|
+
) {
|
|
1556
|
+
let alt: any = '';
|
|
1557
|
+
let saveAlt = function () {};
|
|
1558
|
+
|
|
1559
|
+
function editorView(gvc: GVC, item: FileItem) {
|
|
1560
|
+
if (item.type === 'folder') {
|
|
1561
|
+
return BgWidget.editeInput({
|
|
1562
|
+
gvc: gvc,
|
|
1563
|
+
title: `資料夾標題`,
|
|
1564
|
+
default: item.title,
|
|
1565
|
+
placeHolder: `請輸入資料夾標題`,
|
|
1566
|
+
callback: text => {
|
|
1567
|
+
item.title = text;
|
|
1568
|
+
},
|
|
1569
|
+
});
|
|
1570
|
+
} else {
|
|
1571
|
+
item.data = item.data ?? {};
|
|
1572
|
+
return `<div>${[
|
|
1573
|
+
BgWidget.editeInput({
|
|
1372
1574
|
gvc: gvc,
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
const item: FileItem = {
|
|
1379
|
-
title: '',
|
|
1380
|
-
data: {},
|
|
1381
|
-
items: [],
|
|
1382
|
-
type: 'file',
|
|
1383
|
-
tag: [],
|
|
1384
|
-
id: gvc.glitter.getUUID(),
|
|
1385
|
-
};
|
|
1386
|
-
let count = 1;
|
|
1387
|
-
// function upload(file: any) {
|
|
1388
|
-
// const dialog = new ShareDialog(gvc.glitter);
|
|
1389
|
-
// dialog.dataLoading({ visible: true });
|
|
1390
|
-
// const saasConfig=(window.parent as any).saasConfig;
|
|
1391
|
-
// saasConfig.api.uploadFileAll(file).then((res: { result: boolean; links: string[] }) => {
|
|
1392
|
-
// dialog.dataLoading({ visible: false });
|
|
1393
|
-
// if (res.result) {
|
|
1394
|
-
// res.links.map((dd) => {
|
|
1395
|
-
// obj.callback(dd);
|
|
1396
|
-
// });
|
|
1397
|
-
// } else {
|
|
1398
|
-
// dialog.errorMessage({ text: '上傳失敗' });
|
|
1399
|
-
// }
|
|
1400
|
-
// });
|
|
1401
|
-
// }
|
|
1402
|
-
// gvc.glitter.ut.chooseMediaCallback({
|
|
1403
|
-
// single: true,
|
|
1404
|
-
// accept: obj.type ?? '*',
|
|
1405
|
-
// callback(data: any) {
|
|
1406
|
-
// upload(
|
|
1407
|
-
// data.map((dd: any) => {
|
|
1408
|
-
// return dd.file;
|
|
1409
|
-
// })
|
|
1410
|
-
// );
|
|
1411
|
-
// },
|
|
1412
|
-
// });
|
|
1413
|
-
EditorElem.uploadFileFunction({
|
|
1414
|
-
gvc: gvc,
|
|
1415
|
-
callback: (text: any) => {
|
|
1416
|
-
callback(
|
|
1417
|
-
text.map((item: string) => {
|
|
1418
|
-
return {
|
|
1419
|
-
title: item.split('_')[3],
|
|
1420
|
-
data: item,
|
|
1421
|
-
items: [],
|
|
1422
|
-
type: 'file',
|
|
1423
|
-
tag: [],
|
|
1424
|
-
id: gvc.glitter.getUUID(),
|
|
1425
|
-
};
|
|
1426
|
-
})
|
|
1427
|
-
);
|
|
1428
|
-
},
|
|
1429
|
-
return_array: true,
|
|
1430
|
-
multiple: true,
|
|
1431
|
-
});
|
|
1432
|
-
},
|
|
1433
|
-
edit: (item, callback: (file?: FileItem) => void) => {
|
|
1434
|
-
item = JSON.parse(JSON.stringify(item));
|
|
1435
|
-
BgWidget.settingDialog({
|
|
1436
|
-
gvc: gvc,
|
|
1437
|
-
title: '更新圖片',
|
|
1438
|
-
innerHTML: (gvc: GVC) => {
|
|
1439
|
-
return editorView(gvc, item);
|
|
1440
|
-
},
|
|
1441
|
-
footer_html: (gvc: GVC) => {
|
|
1442
|
-
return [
|
|
1443
|
-
BgWidget.danger(
|
|
1444
|
-
gvc.event(() => {
|
|
1445
|
-
const dialog = new ShareDialog(gvc.glitter);
|
|
1446
|
-
dialog.checkYesOrNot({
|
|
1447
|
-
text: `刪除後使用此資源的內容將被取消關聯,是否確認刪除?`,
|
|
1448
|
-
callback: (response) => {
|
|
1449
|
-
if (response) {
|
|
1450
|
-
callback(undefined);
|
|
1451
|
-
gvc.closeDialog();
|
|
1452
|
-
}
|
|
1453
|
-
},
|
|
1454
|
-
});
|
|
1455
|
-
})
|
|
1456
|
-
),
|
|
1457
|
-
BgWidget.cancel(
|
|
1458
|
-
gvc.event(() => {
|
|
1459
|
-
gvc.closeDialog();
|
|
1460
|
-
})
|
|
1461
|
-
),
|
|
1462
|
-
BgWidget.save(
|
|
1463
|
-
gvc.event(() => {
|
|
1464
|
-
callback(item);
|
|
1465
|
-
saveAlt();
|
|
1466
|
-
gvc.closeDialog();
|
|
1467
|
-
}),
|
|
1468
|
-
'確定'
|
|
1469
|
-
),
|
|
1470
|
-
].join('');
|
|
1471
|
-
},
|
|
1472
|
-
closeCallback: () => {
|
|
1473
|
-
},
|
|
1474
|
-
});
|
|
1575
|
+
title: `圖片標題`,
|
|
1576
|
+
default: item.title,
|
|
1577
|
+
placeHolder: `請輸入圖片標題`,
|
|
1578
|
+
callback: text => {
|
|
1579
|
+
item.title = text;
|
|
1475
1580
|
},
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1581
|
+
}),
|
|
1582
|
+
EditorElem.uploadImageContainer({
|
|
1583
|
+
gvc: gvc,
|
|
1584
|
+
title: `圖片資源`,
|
|
1585
|
+
def: item.data ?? '',
|
|
1586
|
+
callback: text => {
|
|
1587
|
+
item.data = text;
|
|
1480
1588
|
},
|
|
1481
|
-
|
|
1589
|
+
}),
|
|
1590
|
+
gvc.bindView(() => {
|
|
1591
|
+
const id = gvc.glitter.getUUID();
|
|
1592
|
+
return {
|
|
1593
|
+
bind: id,
|
|
1594
|
+
view: async () => {
|
|
1595
|
+
const tag = gvc.glitter.generateCheckSum(item.data, 9);
|
|
1596
|
+
alt = (await ApiUser.getPublicConfig(`alt_` + tag, 'manager')).response.value || { alt: '' };
|
|
1597
|
+
saveAlt = async () => {
|
|
1598
|
+
ApiUser.setPublicConfig({
|
|
1599
|
+
key: `alt_` + tag,
|
|
1600
|
+
value: alt,
|
|
1601
|
+
user_id: 'manager',
|
|
1602
|
+
});
|
|
1603
|
+
};
|
|
1604
|
+
return BgWidget.textArea({
|
|
1605
|
+
gvc: gvc,
|
|
1606
|
+
title: `ALT描述`,
|
|
1607
|
+
default: alt.alt,
|
|
1608
|
+
placeHolder: `請輸入ALT描述`,
|
|
1609
|
+
callback: text => {
|
|
1610
|
+
alt.alt = text;
|
|
1611
|
+
},
|
|
1612
|
+
});
|
|
1613
|
+
},
|
|
1614
|
+
};
|
|
1615
|
+
}),
|
|
1616
|
+
].join('<div class="my-2"></div>')}</div>`;
|
|
1617
|
+
}
|
|
1482
1618
|
}
|
|
1619
|
+
|
|
1620
|
+
imageLibrary.fileSystem({
|
|
1621
|
+
getSelect: callback,
|
|
1622
|
+
edit_only: edit_only,
|
|
1623
|
+
gvc: gvc,
|
|
1624
|
+
key: opt ? (opt.key ?? 'image-manager') : 'image-manager',
|
|
1625
|
+
title: title,
|
|
1626
|
+
tag: opt?.tag ?? '',
|
|
1627
|
+
mul: opt ? (opt.mul ?? false) : false,
|
|
1628
|
+
plus: (gvc: GVC, callback: (file: FileItem[]) => void) => {
|
|
1629
|
+
const item: FileItem = {
|
|
1630
|
+
selected: false,
|
|
1631
|
+
title: '',
|
|
1632
|
+
data: {},
|
|
1633
|
+
items: [],
|
|
1634
|
+
type: 'file',
|
|
1635
|
+
tag: [],
|
|
1636
|
+
id: gvc.glitter.getUUID(),
|
|
1637
|
+
};
|
|
1638
|
+
let count = 1;
|
|
1639
|
+
EditorElem.uploadFileFunction({
|
|
1640
|
+
gvc: gvc,
|
|
1641
|
+
callback: (text: any) => {
|
|
1642
|
+
callback(
|
|
1643
|
+
text.map((item: string) => {
|
|
1644
|
+
return {
|
|
1645
|
+
title: item.split('_')[item.split('_').length - 1],
|
|
1646
|
+
data: item,
|
|
1647
|
+
items: [],
|
|
1648
|
+
type: 'file',
|
|
1649
|
+
tag: [],
|
|
1650
|
+
id: gvc.glitter.getUUID(),
|
|
1651
|
+
};
|
|
1652
|
+
})
|
|
1653
|
+
);
|
|
1654
|
+
},
|
|
1655
|
+
return_array: true,
|
|
1656
|
+
multiple: true,
|
|
1657
|
+
});
|
|
1658
|
+
},
|
|
1659
|
+
edit: (
|
|
1660
|
+
item,
|
|
1661
|
+
callback: (file?: FileItem) => void,
|
|
1662
|
+
obj?: {
|
|
1663
|
+
deleteStyle?: number | 0;
|
|
1664
|
+
tag?: string;
|
|
1665
|
+
}
|
|
1666
|
+
) => {
|
|
1667
|
+
item = JSON.parse(JSON.stringify(item));
|
|
1668
|
+
BgWidget.settingDialog({
|
|
1669
|
+
gvc: gvc,
|
|
1670
|
+
title: '更新圖片',
|
|
1671
|
+
innerHTML: (gvc: GVC) => {
|
|
1672
|
+
return editorView(gvc, item);
|
|
1673
|
+
},
|
|
1674
|
+
footer_html: (gvc: GVC) => {
|
|
1675
|
+
return [
|
|
1676
|
+
BgWidget.danger(
|
|
1677
|
+
gvc.event(() => {
|
|
1678
|
+
const dialog = new ShareDialog(gvc.glitter);
|
|
1679
|
+
|
|
1680
|
+
function deleteImage() {
|
|
1681
|
+
dialog.checkYesOrNotWithCustomWidth({
|
|
1682
|
+
width: '432',
|
|
1683
|
+
text: '刪除此圖片後,所有使用它的頁面與商品將無法顯示。<br>是否確定?',
|
|
1684
|
+
icon: '<i class="fa-solid fa-info"></i>',
|
|
1685
|
+
callback: response => {
|
|
1686
|
+
if (response) {
|
|
1687
|
+
callback(undefined);
|
|
1688
|
+
gvc.closeDialog();
|
|
1689
|
+
}
|
|
1690
|
+
},
|
|
1691
|
+
});
|
|
1692
|
+
}
|
|
1693
|
+
|
|
1694
|
+
function deleteAlbumTag() {
|
|
1695
|
+
item.tag = item.tag.filter(t => t !== obj?.tag);
|
|
1696
|
+
callback(item);
|
|
1697
|
+
gvc.closeDialog();
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1700
|
+
switch (obj?.deleteStyle) {
|
|
1701
|
+
case 1: {
|
|
1702
|
+
gvc.glitter.innerDialog(() => {
|
|
1703
|
+
const prefixClass = 'deleteWindows';
|
|
1704
|
+
|
|
1705
|
+
function closeThisDialog() {
|
|
1706
|
+
gvc.glitter.closeDiaLog('deleteWindows');
|
|
1707
|
+
}
|
|
1708
|
+
|
|
1709
|
+
function gClass(className: string) {
|
|
1710
|
+
return prefixClass + '-' + className;
|
|
1711
|
+
}
|
|
1712
|
+
|
|
1713
|
+
gvc.addStyle(css`
|
|
1714
|
+
.${prefixClass}-window {
|
|
1715
|
+
width: 452px;
|
|
1716
|
+
height: 281px;
|
|
1717
|
+
border-radius: 10px;
|
|
1718
|
+
background: #fff;
|
|
1719
|
+
position: relative;
|
|
1720
|
+
display: inline-flex;
|
|
1721
|
+
flex-direction: column;
|
|
1722
|
+
align-items: center;
|
|
1723
|
+
gap: 24px;
|
|
1724
|
+
padding: 36px 46px;
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
.${prefixClass}-window .fa-xmark-large {
|
|
1728
|
+
position: absolute;
|
|
1729
|
+
top: 17px;
|
|
1730
|
+
right: 20px;
|
|
1731
|
+
cursor: pointer;
|
|
1732
|
+
}
|
|
1733
|
+
|
|
1734
|
+
.${prefixClass}-text-block {
|
|
1735
|
+
display: flex;
|
|
1736
|
+
flex-direction: column;
|
|
1737
|
+
align-items: center;
|
|
1738
|
+
gap: 8px;
|
|
1739
|
+
text-align: center;
|
|
1740
|
+
font-size: 16px;
|
|
1741
|
+
font-weight: 400;
|
|
1742
|
+
line-height: 160%; /* 25.6px */
|
|
1743
|
+
}
|
|
1744
|
+
|
|
1745
|
+
.${prefixClass}-text-block .button {
|
|
1746
|
+
display: flex;
|
|
1747
|
+
padding: 6px 18px;
|
|
1748
|
+
justify-content: center;
|
|
1749
|
+
align-items: center;
|
|
1750
|
+
gap: 8px;
|
|
1751
|
+
border-radius: 10px;
|
|
1752
|
+
border: 1px solid #ddd;
|
|
1753
|
+
background: #fff;
|
|
1754
|
+
color: #393939;
|
|
1755
|
+
cursor: pointer;
|
|
1756
|
+
}
|
|
1757
|
+
`);
|
|
1758
|
+
return html`
|
|
1759
|
+
<div class="${gClass('window')}">
|
|
1760
|
+
<i
|
|
1761
|
+
class="fa-regular fa-xmark-large"
|
|
1762
|
+
onclick="${gvc.event(() => {
|
|
1763
|
+
closeThisDialog();
|
|
1764
|
+
})}"
|
|
1765
|
+
></i>
|
|
1766
|
+
<i class="fa-regular fa-circle-exclamation mb-1" style="font-size: 4rem;"></i>
|
|
1767
|
+
<div class="${gClass('text-block')}">
|
|
1768
|
+
<div>請選擇刪除方式:</div>
|
|
1769
|
+
<div
|
|
1770
|
+
class="button"
|
|
1771
|
+
onclick="${gvc.event(() => {
|
|
1772
|
+
deleteAlbumTag();
|
|
1773
|
+
closeThisDialog();
|
|
1774
|
+
})}"
|
|
1775
|
+
>
|
|
1776
|
+
僅從此相簿移除
|
|
1777
|
+
</div>
|
|
1778
|
+
<div
|
|
1779
|
+
class="button"
|
|
1780
|
+
onclick="${gvc.event(() => {
|
|
1781
|
+
deleteImage();
|
|
1782
|
+
closeThisDialog();
|
|
1783
|
+
})}"
|
|
1784
|
+
>
|
|
1785
|
+
從圖庫中永久刪除
|
|
1786
|
+
</div>
|
|
1787
|
+
</div>
|
|
1788
|
+
</div>
|
|
1789
|
+
`;
|
|
1790
|
+
}, `deleteWindows`);
|
|
1791
|
+
break;
|
|
1792
|
+
}
|
|
1793
|
+
default: {
|
|
1794
|
+
deleteImage();
|
|
1795
|
+
break;
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1798
|
+
})
|
|
1799
|
+
),
|
|
1800
|
+
BgWidget.cancel(
|
|
1801
|
+
gvc.event(() => {
|
|
1802
|
+
gvc.closeDialog();
|
|
1803
|
+
})
|
|
1804
|
+
),
|
|
1805
|
+
BgWidget.save(
|
|
1806
|
+
gvc.event(() => {
|
|
1807
|
+
callback(item);
|
|
1808
|
+
saveAlt();
|
|
1809
|
+
gvc.closeDialog();
|
|
1810
|
+
}),
|
|
1811
|
+
'確定'
|
|
1812
|
+
),
|
|
1813
|
+
].join('');
|
|
1814
|
+
},
|
|
1815
|
+
closeCallback: () => {},
|
|
1816
|
+
});
|
|
1817
|
+
},
|
|
1818
|
+
cancelEvent: () => {
|
|
1819
|
+
if (opt?.cancelEvent) {
|
|
1820
|
+
opt.cancelEvent();
|
|
1821
|
+
}
|
|
1822
|
+
},
|
|
1823
|
+
});
|
|
1824
|
+
}
|
|
1483
1825
|
}
|