@hostlink/nuxt-light 1.64.3 → 1.66.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/dist/module.json +1 -1
- package/dist/module.mjs +5 -0
- package/dist/runtime/components/L/CustomField/Add.vue +6 -1
- package/dist/runtime/components/L/Database/create-table-dialog.vue +34 -26
- package/dist/runtime/components/L/DocumentViewer.d.vue.ts +50 -0
- package/dist/runtime/components/L/DocumentViewer.vue +154 -0
- package/dist/runtime/components/L/DocumentViewer.vue.d.ts +50 -0
- package/dist/runtime/components/L/DocumentViewerDialog.d.vue.ts +65 -0
- package/dist/runtime/components/L/DocumentViewerDialog.vue +67 -0
- package/dist/runtime/components/L/DocumentViewerDialog.vue.d.ts +65 -0
- package/dist/runtime/components/l-customizer.d.vue.ts +19 -3
- package/dist/runtime/components/l-customizer.vue.d.ts +19 -3
- package/dist/runtime/components/l-file-manager-labels.d.vue.ts +5 -1
- package/dist/runtime/components/l-file-manager-labels.vue.d.ts +5 -1
- package/dist/runtime/components/l-file-manager-preview.vue +23 -22
- package/dist/runtime/components/l-file-manager.vue +14 -26
- package/dist/runtime/components/l-form.vue +16 -10
- package/dist/runtime/components/l-repeater.d.vue.ts +1 -1
- package/dist/runtime/components/l-repeater.vue.d.ts +1 -1
- package/dist/runtime/composables/showDocumentDialog.d.ts +9 -0
- package/dist/runtime/composables/showDocumentDialog.js +15 -0
- package/dist/runtime/pages/CustomField/index.vue +5 -5
- package/dist/runtime/pages/System/database/table.vue +49 -62
- package/dist/runtime/pages/System/setting.vue +2 -2
- package/dist/runtime/pages/Translate/index.vue +178 -62
- package/dist/runtime/pages/User/createAccessToken.d.vue.ts +3 -0
- package/dist/runtime/pages/User/createAccessToken.vue +63 -0
- package/dist/runtime/pages/User/createAccessToken.vue.d.ts +3 -0
- package/dist/runtime/pages/User/profile.vue +1 -0
- package/package.json +4 -4
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -216,6 +216,11 @@ const routes = [
|
|
|
216
216
|
path: "/User/profile",
|
|
217
217
|
file: "runtime/pages/User/profile.vue"
|
|
218
218
|
},
|
|
219
|
+
{
|
|
220
|
+
name: "User-createAccessToken",
|
|
221
|
+
path: "/User/createAccessToken",
|
|
222
|
+
file: "runtime/pages/User/createAccessToken.vue"
|
|
223
|
+
},
|
|
219
224
|
{
|
|
220
225
|
path: "/User/setting",
|
|
221
226
|
file: "runtime/pages/User/setting.vue",
|
|
@@ -33,12 +33,17 @@ const onOKClick = async (value) => {
|
|
|
33
33
|
});
|
|
34
34
|
onDialogOK();
|
|
35
35
|
} catch (e) {
|
|
36
|
+
$q.notify({
|
|
37
|
+
icon: "sym_o_warning",
|
|
38
|
+
message: e.message,
|
|
39
|
+
color: "negative"
|
|
40
|
+
});
|
|
36
41
|
}
|
|
37
42
|
};
|
|
38
43
|
</script>
|
|
39
44
|
|
|
40
45
|
<template>
|
|
41
|
-
<q-dialog ref="dialogRef"
|
|
46
|
+
<q-dialog ref="dialogRef">
|
|
42
47
|
<q-card class="q-dialog-plugin">
|
|
43
48
|
<q-toolbar>
|
|
44
49
|
<q-toolbar-title>Add Custom Field</q-toolbar-title>
|
|
@@ -20,36 +20,44 @@ const types = ["varchar", "int", "date", "time", "datetime", "timestamp", "text"
|
|
|
20
20
|
|
|
21
21
|
<template>
|
|
22
22
|
<q-dialog ref="dialogRef" full-width>
|
|
23
|
-
<
|
|
24
|
-
<
|
|
25
|
-
<q-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
23
|
+
<Suspense>
|
|
24
|
+
<template #default>
|
|
25
|
+
<q-card class="q-dialog-plugin">
|
|
26
|
+
<q-toolbar>
|
|
27
|
+
<q-toolbar-title>Create Table</q-toolbar-title>
|
|
28
|
+
<q-space />
|
|
29
|
+
<q-btn dense flat icon="sym_o_close" v-close-popup />
|
|
30
|
+
</q-toolbar>
|
|
31
|
+
<form-kit type="l-form" :bordered="false" @submit="onOKClick" :value="{
|
|
32
|
+
name: '',
|
|
33
|
+
fields: [],
|
|
34
|
+
}" :action="false" #default="{ value }">
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
<form-kit type="l-input" name="name" label="Name" validation="required" />
|
|
35
37
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
<form-kit type="l-repeater" name="fields">
|
|
39
|
+
<div class="row q-gutter-sm">
|
|
40
|
+
<form-kit type="l-input" name="name" label="Name" validation="required" class="col"
|
|
41
|
+
dense />
|
|
39
42
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
43
|
+
<form-kit type="l-select" name="type" label="Type" :options="types"
|
|
44
|
+
validation="required" class="col" dense />
|
|
45
|
+
<form-kit type="l-input" name="length" label="Length" class="col" number dense />
|
|
46
|
+
<form-kit type="l-input" name="default" label="Default" class="col" dense />
|
|
47
|
+
<form-kit type="l-checkbox" name="nullable" label="Nullable" />
|
|
48
|
+
</div>
|
|
49
|
+
</form-kit>
|
|
45
50
|
|
|
46
|
-
|
|
47
|
-
<form-kit type="l-checkbox" name="nullable" label="Nullable" />
|
|
48
|
-
</div>
|
|
49
|
-
</form-kit>
|
|
51
|
+
</form-kit>
|
|
50
52
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
53
|
+
</q-card>
|
|
54
|
+
</template>
|
|
55
|
+
<template #fallback>
|
|
56
|
+
<div class="q-pa-lg flex flex-center">
|
|
57
|
+
<q-spinner-dots color="primary" size="40px" />
|
|
58
|
+
<div class="q-ml-sm">Loading...</div>
|
|
59
|
+
</div>
|
|
60
|
+
</template>
|
|
61
|
+
</Suspense>
|
|
54
62
|
</q-dialog>
|
|
55
63
|
</template>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
url: {
|
|
3
|
+
type: StringConstructor;
|
|
4
|
+
required: true;
|
|
5
|
+
};
|
|
6
|
+
mimeType: {
|
|
7
|
+
type: StringConstructor;
|
|
8
|
+
default: string;
|
|
9
|
+
};
|
|
10
|
+
width: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
default: string;
|
|
13
|
+
};
|
|
14
|
+
height: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
default: string;
|
|
17
|
+
};
|
|
18
|
+
fit: {
|
|
19
|
+
type: () => "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
20
|
+
default: string;
|
|
21
|
+
};
|
|
22
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
23
|
+
url: {
|
|
24
|
+
type: StringConstructor;
|
|
25
|
+
required: true;
|
|
26
|
+
};
|
|
27
|
+
mimeType: {
|
|
28
|
+
type: StringConstructor;
|
|
29
|
+
default: string;
|
|
30
|
+
};
|
|
31
|
+
width: {
|
|
32
|
+
type: StringConstructor;
|
|
33
|
+
default: string;
|
|
34
|
+
};
|
|
35
|
+
height: {
|
|
36
|
+
type: StringConstructor;
|
|
37
|
+
default: string;
|
|
38
|
+
};
|
|
39
|
+
fit: {
|
|
40
|
+
type: () => "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
41
|
+
default: string;
|
|
42
|
+
};
|
|
43
|
+
}>> & Readonly<{}>, {
|
|
44
|
+
width: string;
|
|
45
|
+
height: string;
|
|
46
|
+
mimeType: string;
|
|
47
|
+
fit: "fill" | "none" | "contain" | "cover" | "scale-down";
|
|
48
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
49
|
+
declare const _default: typeof __VLS_export;
|
|
50
|
+
export default _default;
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { ref, computed, watch } from "vue";
|
|
3
|
+
const props = defineProps({
|
|
4
|
+
url: {
|
|
5
|
+
type: String,
|
|
6
|
+
required: true
|
|
7
|
+
},
|
|
8
|
+
mimeType: {
|
|
9
|
+
type: String,
|
|
10
|
+
default: ""
|
|
11
|
+
},
|
|
12
|
+
// 圖片/視頻的寬高
|
|
13
|
+
width: {
|
|
14
|
+
type: String,
|
|
15
|
+
default: "100%"
|
|
16
|
+
},
|
|
17
|
+
height: {
|
|
18
|
+
type: String,
|
|
19
|
+
default: "500px"
|
|
20
|
+
},
|
|
21
|
+
// 圖片的 fit 模式
|
|
22
|
+
fit: {
|
|
23
|
+
type: String,
|
|
24
|
+
default: "contain"
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
const textContent = ref("");
|
|
28
|
+
const isLoading = ref(false);
|
|
29
|
+
const error = ref(null);
|
|
30
|
+
const fileType = computed(() => {
|
|
31
|
+
const mime = props.mimeType.toLowerCase();
|
|
32
|
+
if (mime.startsWith("image/")) return "image";
|
|
33
|
+
if (mime.startsWith("video/")) return "video";
|
|
34
|
+
if (mime.startsWith("audio/")) return "audio";
|
|
35
|
+
if (mime === "application/pdf") return "pdf";
|
|
36
|
+
if (mime.startsWith("text/") || mime === "application/json") return "text";
|
|
37
|
+
if (mime.includes("word") || mime.includes("spreadsheet") || mime.includes("presentation") || mime.includes("excel") || mime.includes("powerpoint") || mime.includes("msword") || mime.includes("officedocument")) {
|
|
38
|
+
return "office";
|
|
39
|
+
}
|
|
40
|
+
return "unknown";
|
|
41
|
+
});
|
|
42
|
+
const officeViewerUrl = computed(() => {
|
|
43
|
+
if (fileType.value === "office") {
|
|
44
|
+
return `https://view.officeapps.live.com/op/embed.aspx?src=${encodeURIComponent(props.url)}`;
|
|
45
|
+
}
|
|
46
|
+
return "";
|
|
47
|
+
});
|
|
48
|
+
const loadTextContent = async () => {
|
|
49
|
+
if (fileType.value !== "text") return;
|
|
50
|
+
isLoading.value = true;
|
|
51
|
+
error.value = null;
|
|
52
|
+
try {
|
|
53
|
+
const response = await fetch(props.url);
|
|
54
|
+
if (!response.ok) throw new Error("\u7121\u6CD5\u8F09\u5165\u6587\u4EF6");
|
|
55
|
+
textContent.value = await response.text();
|
|
56
|
+
} catch (e) {
|
|
57
|
+
error.value = e instanceof Error ? e.message : "\u8F09\u5165\u5931\u6557";
|
|
58
|
+
} finally {
|
|
59
|
+
isLoading.value = false;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
watch(() => [props.url, fileType.value], () => {
|
|
63
|
+
if (fileType.value === "text") {
|
|
64
|
+
loadTextContent();
|
|
65
|
+
}
|
|
66
|
+
}, { immediate: true });
|
|
67
|
+
</script>
|
|
68
|
+
|
|
69
|
+
<template>
|
|
70
|
+
<div class="l-document-viewer">
|
|
71
|
+
<!-- 圖片預覽 -->
|
|
72
|
+
<q-img
|
|
73
|
+
v-if="fileType === 'image'"
|
|
74
|
+
:src="url"
|
|
75
|
+
:fit="fit"
|
|
76
|
+
:style="{ width, height }"
|
|
77
|
+
spinner-color="primary"
|
|
78
|
+
>
|
|
79
|
+
<template #error>
|
|
80
|
+
<div class="absolute-full flex flex-center bg-negative text-white">
|
|
81
|
+
無法載入圖片
|
|
82
|
+
</div>
|
|
83
|
+
</template>
|
|
84
|
+
</q-img>
|
|
85
|
+
|
|
86
|
+
<!-- 視頻預覽 -->
|
|
87
|
+
<q-video
|
|
88
|
+
v-else-if="fileType === 'video'"
|
|
89
|
+
:src="url"
|
|
90
|
+
:style="{ width, height }"
|
|
91
|
+
/>
|
|
92
|
+
|
|
93
|
+
<!-- 音頻預覽 -->
|
|
94
|
+
<audio
|
|
95
|
+
v-else-if="fileType === 'audio'"
|
|
96
|
+
:src="url"
|
|
97
|
+
controls
|
|
98
|
+
style="width: 100%"
|
|
99
|
+
>
|
|
100
|
+
您的瀏覽器不支援音頻播放
|
|
101
|
+
</audio>
|
|
102
|
+
|
|
103
|
+
<!-- PDF 預覽 -->
|
|
104
|
+
<iframe
|
|
105
|
+
v-else-if="fileType === 'pdf'"
|
|
106
|
+
:src="url"
|
|
107
|
+
:style="{ width, height, border: 'none' }"
|
|
108
|
+
title="PDF Viewer"
|
|
109
|
+
/>
|
|
110
|
+
|
|
111
|
+
<!-- 文字預覽 (txt, json 等) -->
|
|
112
|
+
<div v-else-if="fileType === 'text'" class="text-viewer" :style="{ height }">
|
|
113
|
+
<q-spinner v-if="isLoading" color="primary" size="3em" />
|
|
114
|
+
<q-banner v-else-if="error" class="bg-negative text-white">
|
|
115
|
+
{{ error }}
|
|
116
|
+
</q-banner>
|
|
117
|
+
<pre v-else class="text-content">{{ textContent }}</pre>
|
|
118
|
+
</div>
|
|
119
|
+
|
|
120
|
+
<!-- Office 文件預覽 -->
|
|
121
|
+
<iframe
|
|
122
|
+
v-else-if="fileType === 'office'"
|
|
123
|
+
:src="officeViewerUrl"
|
|
124
|
+
:style="{ width, height, border: 'none' }"
|
|
125
|
+
title="Office Viewer"
|
|
126
|
+
/>
|
|
127
|
+
|
|
128
|
+
<!-- 不支援的類型 -->
|
|
129
|
+
<div v-else class="unsupported flex flex-center" :style="{ height }">
|
|
130
|
+
<div class="text-center">
|
|
131
|
+
<q-icon name="sym_r_description" size="64px" color="grey-5" />
|
|
132
|
+
<div class="text-grey-7 q-mt-md">
|
|
133
|
+
不支援預覽此文件類型
|
|
134
|
+
</div>
|
|
135
|
+
<div class="text-caption text-grey-5">
|
|
136
|
+
{{ mimeType || "\u672A\u77E5\u985E\u578B" }}
|
|
137
|
+
</div>
|
|
138
|
+
<q-btn
|
|
139
|
+
class="q-mt-md"
|
|
140
|
+
color="primary"
|
|
141
|
+
icon="sym_r_download"
|
|
142
|
+
label="下載文件"
|
|
143
|
+
:href="url"
|
|
144
|
+
target="_blank"
|
|
145
|
+
outline
|
|
146
|
+
/>
|
|
147
|
+
</div>
|
|
148
|
+
</div>
|
|
149
|
+
</div>
|
|
150
|
+
</template>
|
|
151
|
+
|
|
152
|
+
<style scoped>
|
|
153
|
+
.l-document-viewer{width:100%}.text-viewer{background:#f5f5f5;border-radius:4px;overflow:auto;padding:16px}.text-content{margin:0;white-space:pre-wrap;word-wrap:break-word;font-family:Consolas,Monaco,monospace;font-size:14px;line-height:1.5}.unsupported{background:#fafafa;border:1px dashed #e0e0e0;border-radius:8px}
|
|
154
|
+
</style>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
url: {
|
|
3
|
+
type: StringConstructor;
|
|
4
|
+
required: true;
|
|
5
|
+
};
|
|
6
|
+
mimeType: {
|
|
7
|
+
type: StringConstructor;
|
|
8
|
+
default: string;
|
|
9
|
+
};
|
|
10
|
+
width: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
default: string;
|
|
13
|
+
};
|
|
14
|
+
height: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
default: string;
|
|
17
|
+
};
|
|
18
|
+
fit: {
|
|
19
|
+
type: () => "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
20
|
+
default: string;
|
|
21
|
+
};
|
|
22
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
23
|
+
url: {
|
|
24
|
+
type: StringConstructor;
|
|
25
|
+
required: true;
|
|
26
|
+
};
|
|
27
|
+
mimeType: {
|
|
28
|
+
type: StringConstructor;
|
|
29
|
+
default: string;
|
|
30
|
+
};
|
|
31
|
+
width: {
|
|
32
|
+
type: StringConstructor;
|
|
33
|
+
default: string;
|
|
34
|
+
};
|
|
35
|
+
height: {
|
|
36
|
+
type: StringConstructor;
|
|
37
|
+
default: string;
|
|
38
|
+
};
|
|
39
|
+
fit: {
|
|
40
|
+
type: () => "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
41
|
+
default: string;
|
|
42
|
+
};
|
|
43
|
+
}>> & Readonly<{}>, {
|
|
44
|
+
width: string;
|
|
45
|
+
height: string;
|
|
46
|
+
mimeType: string;
|
|
47
|
+
fit: "fill" | "none" | "contain" | "cover" | "scale-down";
|
|
48
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
49
|
+
declare const _default: typeof __VLS_export;
|
|
50
|
+
export default _default;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
url: {
|
|
3
|
+
type: StringConstructor;
|
|
4
|
+
required: true;
|
|
5
|
+
};
|
|
6
|
+
mimeType: {
|
|
7
|
+
type: StringConstructor;
|
|
8
|
+
default: string;
|
|
9
|
+
};
|
|
10
|
+
title: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
default: string;
|
|
13
|
+
};
|
|
14
|
+
width: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
default: string;
|
|
17
|
+
};
|
|
18
|
+
height: {
|
|
19
|
+
type: StringConstructor;
|
|
20
|
+
default: string;
|
|
21
|
+
};
|
|
22
|
+
fit: {
|
|
23
|
+
type: () => "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
24
|
+
default: string;
|
|
25
|
+
};
|
|
26
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
27
|
+
hide: (...args: any[]) => void;
|
|
28
|
+
ok: (...args: any[]) => void;
|
|
29
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
30
|
+
url: {
|
|
31
|
+
type: StringConstructor;
|
|
32
|
+
required: true;
|
|
33
|
+
};
|
|
34
|
+
mimeType: {
|
|
35
|
+
type: StringConstructor;
|
|
36
|
+
default: string;
|
|
37
|
+
};
|
|
38
|
+
title: {
|
|
39
|
+
type: StringConstructor;
|
|
40
|
+
default: string;
|
|
41
|
+
};
|
|
42
|
+
width: {
|
|
43
|
+
type: StringConstructor;
|
|
44
|
+
default: string;
|
|
45
|
+
};
|
|
46
|
+
height: {
|
|
47
|
+
type: StringConstructor;
|
|
48
|
+
default: string;
|
|
49
|
+
};
|
|
50
|
+
fit: {
|
|
51
|
+
type: () => "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
52
|
+
default: string;
|
|
53
|
+
};
|
|
54
|
+
}>> & Readonly<{
|
|
55
|
+
onHide?: ((...args: any[]) => any) | undefined;
|
|
56
|
+
onOk?: ((...args: any[]) => any) | undefined;
|
|
57
|
+
}>, {
|
|
58
|
+
title: string;
|
|
59
|
+
width: string;
|
|
60
|
+
height: string;
|
|
61
|
+
mimeType: string;
|
|
62
|
+
fit: "fill" | "none" | "contain" | "cover" | "scale-down";
|
|
63
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
64
|
+
declare const _default: typeof __VLS_export;
|
|
65
|
+
export default _default;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
<script setup>
|
|
2
|
+
import { useDialogPluginComponent } from "quasar";
|
|
3
|
+
const props = defineProps({
|
|
4
|
+
url: {
|
|
5
|
+
type: String,
|
|
6
|
+
required: true
|
|
7
|
+
},
|
|
8
|
+
mimeType: {
|
|
9
|
+
type: String,
|
|
10
|
+
default: ""
|
|
11
|
+
},
|
|
12
|
+
title: {
|
|
13
|
+
type: String,
|
|
14
|
+
default: ""
|
|
15
|
+
},
|
|
16
|
+
// 圖片/視頻的寬高
|
|
17
|
+
width: {
|
|
18
|
+
type: String,
|
|
19
|
+
default: "100%"
|
|
20
|
+
},
|
|
21
|
+
height: {
|
|
22
|
+
type: String,
|
|
23
|
+
default: "70vh"
|
|
24
|
+
},
|
|
25
|
+
// 圖片的 fit 模式
|
|
26
|
+
fit: {
|
|
27
|
+
type: String,
|
|
28
|
+
default: "contain"
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
defineEmits([
|
|
32
|
+
// REQUIRED; need to specify some events that your
|
|
33
|
+
// component will emit through useDialogPluginComponent()
|
|
34
|
+
...useDialogPluginComponent.emits
|
|
35
|
+
]);
|
|
36
|
+
const { dialogRef, onDialogHide, onDialogCancel } = useDialogPluginComponent();
|
|
37
|
+
</script>
|
|
38
|
+
|
|
39
|
+
<template>
|
|
40
|
+
<q-dialog ref="dialogRef" @hide="onDialogHide" full-width >
|
|
41
|
+
<q-card class="q-dialog-plugin" :bordered="false" square>
|
|
42
|
+
<q-toolbar class="bg-primary text-white">
|
|
43
|
+
<q-toolbar-title>{{ title || "\u6587\u4EF6\u9810\u89BD" }}</q-toolbar-title>
|
|
44
|
+
<q-space />
|
|
45
|
+
<q-btn
|
|
46
|
+
:href="url"
|
|
47
|
+
target="_blank"
|
|
48
|
+
dense
|
|
49
|
+
flat
|
|
50
|
+
icon="sym_o_download"
|
|
51
|
+
title="下載"
|
|
52
|
+
/>
|
|
53
|
+
<q-btn dense flat icon="sym_o_close" v-close-popup />
|
|
54
|
+
</q-toolbar>
|
|
55
|
+
|
|
56
|
+
<q-card-section class="q-pa-md">
|
|
57
|
+
<LDocumentViewer
|
|
58
|
+
:url="url"
|
|
59
|
+
:mime-type="mimeType"
|
|
60
|
+
:width="width"
|
|
61
|
+
:height="height"
|
|
62
|
+
:fit="fit"
|
|
63
|
+
/>
|
|
64
|
+
</q-card-section>
|
|
65
|
+
</q-card>
|
|
66
|
+
</q-dialog>
|
|
67
|
+
</template>
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
2
|
+
url: {
|
|
3
|
+
type: StringConstructor;
|
|
4
|
+
required: true;
|
|
5
|
+
};
|
|
6
|
+
mimeType: {
|
|
7
|
+
type: StringConstructor;
|
|
8
|
+
default: string;
|
|
9
|
+
};
|
|
10
|
+
title: {
|
|
11
|
+
type: StringConstructor;
|
|
12
|
+
default: string;
|
|
13
|
+
};
|
|
14
|
+
width: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
default: string;
|
|
17
|
+
};
|
|
18
|
+
height: {
|
|
19
|
+
type: StringConstructor;
|
|
20
|
+
default: string;
|
|
21
|
+
};
|
|
22
|
+
fit: {
|
|
23
|
+
type: () => "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
24
|
+
default: string;
|
|
25
|
+
};
|
|
26
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
27
|
+
hide: (...args: any[]) => void;
|
|
28
|
+
ok: (...args: any[]) => void;
|
|
29
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
30
|
+
url: {
|
|
31
|
+
type: StringConstructor;
|
|
32
|
+
required: true;
|
|
33
|
+
};
|
|
34
|
+
mimeType: {
|
|
35
|
+
type: StringConstructor;
|
|
36
|
+
default: string;
|
|
37
|
+
};
|
|
38
|
+
title: {
|
|
39
|
+
type: StringConstructor;
|
|
40
|
+
default: string;
|
|
41
|
+
};
|
|
42
|
+
width: {
|
|
43
|
+
type: StringConstructor;
|
|
44
|
+
default: string;
|
|
45
|
+
};
|
|
46
|
+
height: {
|
|
47
|
+
type: StringConstructor;
|
|
48
|
+
default: string;
|
|
49
|
+
};
|
|
50
|
+
fit: {
|
|
51
|
+
type: () => "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
52
|
+
default: string;
|
|
53
|
+
};
|
|
54
|
+
}>> & Readonly<{
|
|
55
|
+
onHide?: ((...args: any[]) => any) | undefined;
|
|
56
|
+
onOk?: ((...args: any[]) => any) | undefined;
|
|
57
|
+
}>, {
|
|
58
|
+
title: string;
|
|
59
|
+
width: string;
|
|
60
|
+
height: string;
|
|
61
|
+
mimeType: string;
|
|
62
|
+
fit: "fill" | "none" | "contain" | "cover" | "scale-down";
|
|
63
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
64
|
+
declare const _default: typeof __VLS_export;
|
|
65
|
+
export default _default;
|
|
@@ -32,7 +32,15 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
32
32
|
menuWidth: {
|
|
33
33
|
type: import("vue").PropType<number>;
|
|
34
34
|
};
|
|
35
|
-
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
35
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
36
|
+
"update:theme": (...args: any[]) => void;
|
|
37
|
+
"update:menuOverlayHeader": (...args: any[]) => void;
|
|
38
|
+
"update:dense": (...args: any[]) => void;
|
|
39
|
+
"update:color": (...args: any[]) => void;
|
|
40
|
+
"update:miniState": (...args: any[]) => void;
|
|
41
|
+
"update:footer": (...args: any[]) => void;
|
|
42
|
+
"update:menuWidth": (value: number) => void;
|
|
43
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
36
44
|
time: {
|
|
37
45
|
type: StringConstructor;
|
|
38
46
|
default: string;
|
|
@@ -64,12 +72,20 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
64
72
|
menuWidth: {
|
|
65
73
|
type: import("vue").PropType<number>;
|
|
66
74
|
};
|
|
67
|
-
}>> & Readonly<{
|
|
75
|
+
}>> & Readonly<{
|
|
76
|
+
"onUpdate:theme"?: ((...args: any[]) => any) | undefined;
|
|
77
|
+
"onUpdate:menuOverlayHeader"?: ((...args: any[]) => any) | undefined;
|
|
78
|
+
"onUpdate:dense"?: ((...args: any[]) => any) | undefined;
|
|
79
|
+
"onUpdate:color"?: ((...args: any[]) => any) | undefined;
|
|
80
|
+
"onUpdate:miniState"?: ((...args: any[]) => any) | undefined;
|
|
81
|
+
"onUpdate:footer"?: ((...args: any[]) => any) | undefined;
|
|
82
|
+
"onUpdate:menuWidth"?: ((value: number) => any) | undefined;
|
|
83
|
+
}>, {
|
|
68
84
|
color: string;
|
|
69
85
|
theme: string;
|
|
70
86
|
footer: boolean;
|
|
71
87
|
time: string;
|
|
72
88
|
dense: boolean;
|
|
73
|
-
miniState: boolean;
|
|
74
89
|
menuOverlayHeader: boolean;
|
|
90
|
+
miniState: boolean;
|
|
75
91
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -32,7 +32,15 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
32
32
|
menuWidth: {
|
|
33
33
|
type: import("vue").PropType<number>;
|
|
34
34
|
};
|
|
35
|
-
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
35
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
36
|
+
"update:theme": (...args: any[]) => void;
|
|
37
|
+
"update:menuOverlayHeader": (...args: any[]) => void;
|
|
38
|
+
"update:dense": (...args: any[]) => void;
|
|
39
|
+
"update:color": (...args: any[]) => void;
|
|
40
|
+
"update:miniState": (...args: any[]) => void;
|
|
41
|
+
"update:footer": (...args: any[]) => void;
|
|
42
|
+
"update:menuWidth": (value: number) => void;
|
|
43
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
36
44
|
time: {
|
|
37
45
|
type: StringConstructor;
|
|
38
46
|
default: string;
|
|
@@ -64,12 +72,20 @@ declare const __VLS_export: import("vue").DefineComponent<import("vue").ExtractP
|
|
|
64
72
|
menuWidth: {
|
|
65
73
|
type: import("vue").PropType<number>;
|
|
66
74
|
};
|
|
67
|
-
}>> & Readonly<{
|
|
75
|
+
}>> & Readonly<{
|
|
76
|
+
"onUpdate:theme"?: ((...args: any[]) => any) | undefined;
|
|
77
|
+
"onUpdate:menuOverlayHeader"?: ((...args: any[]) => any) | undefined;
|
|
78
|
+
"onUpdate:dense"?: ((...args: any[]) => any) | undefined;
|
|
79
|
+
"onUpdate:color"?: ((...args: any[]) => any) | undefined;
|
|
80
|
+
"onUpdate:miniState"?: ((...args: any[]) => any) | undefined;
|
|
81
|
+
"onUpdate:footer"?: ((...args: any[]) => any) | undefined;
|
|
82
|
+
"onUpdate:menuWidth"?: ((value: number) => any) | undefined;
|
|
83
|
+
}>, {
|
|
68
84
|
color: string;
|
|
69
85
|
theme: string;
|
|
70
86
|
footer: boolean;
|
|
71
87
|
time: string;
|
|
72
88
|
dense: boolean;
|
|
73
|
-
miniState: boolean;
|
|
74
89
|
menuOverlayHeader: boolean;
|
|
90
|
+
miniState: boolean;
|
|
75
91
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
declare const _default: typeof __VLS_export;
|
|
2
2
|
export default _default;
|
|
3
|
-
declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
3
|
+
declare const __VLS_export: import("vue").DefineComponent<__VLS_ModelProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
4
|
+
"update:modelValue": (...args: any[]) => void;
|
|
5
|
+
}, string, import("vue").PublicProps, Readonly<__VLS_ModelProps> & Readonly<{
|
|
6
|
+
"onUpdate:modelValue"?: ((...args: any[]) => any) | undefined;
|
|
7
|
+
}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
4
8
|
type __VLS_ModelProps = {
|
|
5
9
|
modelValue?: string | undefined;
|
|
6
10
|
};
|