free-fe-core-modules 0.0.54 → 0.1.1
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/components/Basic/EIcon.vue +4 -14
- package/components/Dialog/index.js +1 -1
- package/free-field/Fields/AgreementCheck.js +3 -3
- package/free-field/Fields/DateRange.js +4 -3
- package/free-field/Fields/DynamicList.js +4 -5
- package/free-field/Fields/File.vue +52 -160
- package/free-field/Fields/FileList.vue +47 -156
- package/free-field/Fields/FixedList.vue +17 -49
- package/free-field/Fields/FreeFieldList.vue +17 -64
- package/free-field/Fields/Image.vue +54 -133
- package/free-field/Fields/ImageList.vue +42 -106
- package/free-field/Fields/MixedTable.vue +1 -1
- package/free-field/Fields/Number.js +0 -1
- package/free-field/Fields/Permission.vue +8 -20
- package/free-field/Fields/QueryFilters.vue +4 -8
- package/free-field/Fields/Search.vue +51 -109
- package/free-field/Fields/Select.vue +49 -130
- package/free-field/Fields/SingleList.vue +19 -28
- package/free-field/Fields/YearRange.vue +22 -36
- package/free-field/Fields/pdfviewer.js +5 -6
- package/free-field/composible/fieldWrapper.js +1 -2
- package/free-field/composible/useUploader.js +5 -5
- package/index.js +9 -10
- package/package.json +1 -1
- package/view/dict/index.vue +27 -66
|
@@ -1,153 +1,89 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="row free-field-image" v-if="Field">
|
|
3
|
-
<span
|
|
4
|
-
:
|
|
5
|
-
? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
|
|
6
|
-
v-if="Field.Label && !Field.dense">
|
|
3
|
+
<span :class="`field-label ${(Field.Label && Field.Label.trim().length)
|
|
4
|
+
? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`" v-if="Field.Label && !Field.dense">
|
|
7
5
|
<q-tooltip v-if="Field.Description" anchor="top right">
|
|
8
6
|
{{
|
|
9
|
-
|
|
7
|
+
Field.Description
|
|
10
8
|
}}
|
|
11
9
|
</q-tooltip>
|
|
12
10
|
{{ Field.Label || '' }}
|
|
13
11
|
<span v-if="Field.Required" class="required-mark">*</span>
|
|
14
12
|
</span>
|
|
15
|
-
<q-uploader
|
|
16
|
-
|
|
17
|
-
@removed="removeFile"
|
|
18
|
-
@rejected="filesRejected"
|
|
19
|
-
ref="uploader"
|
|
20
|
-
:factory="factoryFn"
|
|
21
|
-
auto-upload
|
|
22
|
-
:max-file-size="maxFileSize"
|
|
23
|
-
:class="(Field.dense ?
|
|
13
|
+
<q-uploader @uploaded="uploaded" @removed="removeFile" @rejected="filesRejected" ref="uploader" :factory="factoryFn"
|
|
14
|
+
auto-upload :max-file-size="maxFileSize" :class="(Field.dense ?
|
|
24
15
|
`no-shadow dense` : `${Field.onlyIcon ? 'only-icon' : ''}`)
|
|
25
|
-
|
|
26
|
-
>
|
|
16
|
+
+ (hasError ? ' free-field--error' : '')">
|
|
27
17
|
<template v-slot:list="scope">
|
|
28
18
|
<div class="uploader-btns row no-wrap items-center" v-if="!Field.dense && !(Field.onlyIcon || onlyIcon)">
|
|
29
19
|
<q-spinner v-if="scope.isUploading" class="q-uploader__spinner" />
|
|
30
|
-
<q-btn
|
|
31
|
-
|
|
32
|
-
type="a"
|
|
33
|
-
icon="cloud_upload"
|
|
34
|
-
dense
|
|
35
|
-
flat
|
|
36
|
-
class="upload-btn"
|
|
37
|
-
label="点击上传"
|
|
38
|
-
:disabled="Field.ReadOnly"
|
|
39
|
-
>
|
|
20
|
+
<q-btn v-if="!scope.isUploading" type="a" icon="cloud_upload" dense flat class="upload-btn" label="点击上传"
|
|
21
|
+
:disabled="Field.ReadOnly">
|
|
40
22
|
<q-uploader-add-trigger v-if="!Field.ReadOnly" />
|
|
41
23
|
</q-btn>
|
|
42
|
-
<q-btn
|
|
43
|
-
|
|
44
|
-
icon="clear"
|
|
45
|
-
@click="scope.abort"
|
|
46
|
-
round
|
|
47
|
-
class="clear-btn"
|
|
48
|
-
dense
|
|
49
|
-
flat
|
|
50
|
-
:disabled="Field.ReadOnly"
|
|
51
|
-
></q-btn>
|
|
24
|
+
<q-btn v-if="scope.isUploading" icon="clear" @click="scope.abort" round class="clear-btn" dense flat
|
|
25
|
+
:disabled="Field.ReadOnly"></q-btn>
|
|
52
26
|
<slot name="warning"></slot>
|
|
53
27
|
</div>
|
|
54
28
|
|
|
55
|
-
<q-btn
|
|
56
|
-
|
|
57
|
-
type="a"
|
|
58
|
-
:icon="fieldData?.value?.length ? 'check' : 'cloud_upload'"
|
|
59
|
-
dense
|
|
60
|
-
flat
|
|
61
|
-
:disabled="Field.ReadOnly"
|
|
62
|
-
>
|
|
29
|
+
<q-btn v-if="(Field.onlyIcon || onlyIcon) && (!fieldData.value || !fieldData.value || !fieldData.value.id)"
|
|
30
|
+
type="a" :icon="fieldData?.value?.id ? 'check' : 'cloud_upload'" dense flat :disabled="Field.ReadOnly">
|
|
63
31
|
<q-uploader-add-trigger />
|
|
64
32
|
</q-btn>
|
|
65
33
|
|
|
66
34
|
<div v-else-if="(Field.onlyIcon || onlyIcon) && fieldData.value && fieldData.value?.id">
|
|
67
|
-
<q-img
|
|
68
|
-
|
|
69
|
-
style="width:32px; max-height:32px;min-height:32px;"
|
|
70
|
-
>
|
|
35
|
+
<q-img :src="$filter(Field?.Options?.NoThumb ? 'serverImage' : 'serverThumb', `${fieldData.value.id}`)"
|
|
36
|
+
style="width:32px; max-height:32px;min-height:32px;">
|
|
71
37
|
</q-img>
|
|
72
|
-
<q-uploader-add-trigger/>
|
|
38
|
+
<q-uploader-add-trigger />
|
|
73
39
|
</div>
|
|
74
40
|
|
|
75
41
|
<q-item v-else-if="Field.dense" class="items-center q-pa-none">
|
|
76
|
-
<q-item-section v-if="fieldData
|
|
77
|
-
<q-img
|
|
78
|
-
:src="`${ctx.config.thumbUrlBase}${fieldData.value.id}`"
|
|
79
|
-
style="width: 48px; max-height: 48px;"
|
|
80
|
-
>
|
|
42
|
+
<q-item-section v-if="fieldData.value.id" thumbnail>
|
|
43
|
+
<q-img :src="`${ctx.config.thumbUrlBase}${fieldData.value.id}`" style="width: 48px; max-height: 48px;">
|
|
81
44
|
</q-img>
|
|
82
45
|
<q-uploader-add-trigger v-if="!Field.ReadOnly" />
|
|
83
46
|
</q-item-section>
|
|
84
47
|
|
|
85
|
-
<q-item-section v-if="fieldData.value
|
|
48
|
+
<q-item-section v-if="fieldData.value.__img" thumbnail class="gt-xs">
|
|
86
49
|
<q-img :src="fieldData.value.__img.src">
|
|
87
50
|
</q-img>
|
|
88
51
|
<q-uploader-add-trigger v-if="!Field.ReadOnly" />
|
|
89
52
|
</q-item-section>
|
|
90
53
|
|
|
91
|
-
<q-item-section v-if="!fieldData.value?.
|
|
92
|
-
<q-btn
|
|
93
|
-
|
|
94
|
-
type="a"
|
|
95
|
-
icon="cloud_upload"
|
|
96
|
-
class="upload-btn"
|
|
97
|
-
dense
|
|
98
|
-
flat
|
|
99
|
-
:disabled="Field.ReadOnly"
|
|
100
|
-
>
|
|
54
|
+
<q-item-section v-if="!fieldData.value?.id">
|
|
55
|
+
<q-btn v-if="!scope.isUploading" type="a" icon="cloud_upload" class="upload-btn" dense flat
|
|
56
|
+
:disabled="Field.ReadOnly">
|
|
101
57
|
<q-uploader-add-trigger v-if="!Field.ReadOnly" />
|
|
102
58
|
</q-btn>
|
|
103
59
|
</q-item-section>
|
|
104
60
|
</q-item>
|
|
105
61
|
|
|
106
|
-
<div v-else-if="
|
|
107
|
-
<q-card
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
>查看</q-btn>
|
|
122
|
-
</div>
|
|
123
|
-
</e-icon>
|
|
124
|
-
<span class="file-name full-width ellipsis">
|
|
125
|
-
<a
|
|
126
|
-
v-if="file && file.id"
|
|
127
|
-
target="_blank"
|
|
128
|
-
:href="$filter('serverPath', file.id)"
|
|
129
|
-
:download="file.name">
|
|
130
|
-
{{ file.name }}
|
|
131
|
-
</a>
|
|
132
|
-
<span v-else-if="file && file.name">
|
|
133
|
-
{{file.name}}
|
|
134
|
-
</span>
|
|
135
|
-
<q-tooltip>{{ file.name }}</q-tooltip>
|
|
62
|
+
<div v-else-if="fieldData.value?.id" class="file-list row items-start justify-start">
|
|
63
|
+
<q-card flat class="file-list-item">
|
|
64
|
+
<e-icon class="file-image" :name="fileThumb(fieldData.value)" :thumb="!Field?.Options?.NoThumb"
|
|
65
|
+
:relative="filePreviewType(fieldData.value) !== 'image'" @click="preview(fieldData.value)">
|
|
66
|
+
<div class="view-btn-wrapper absolute-full justify-center text-center">
|
|
67
|
+
<q-btn flat class="view-btn full-height full-width" @click="preview(fieldData.value)">查看</q-btn>
|
|
68
|
+
</div>
|
|
69
|
+
</e-icon>
|
|
70
|
+
<span class="file-name full-width ellipsis">
|
|
71
|
+
<a v-if="fieldData.value && fieldData.value.id" target="_blank"
|
|
72
|
+
:href="$filter('serverPath', fieldData.value.id)" :download="fieldData.value.name">
|
|
73
|
+
{{ fieldData.value.name }}
|
|
74
|
+
</a>
|
|
75
|
+
<span v-else-if="fieldData.value && fieldData.value.name">
|
|
76
|
+
{{ fieldData.value.name }}
|
|
136
77
|
</span>
|
|
78
|
+
<q-tooltip>{{ fieldData.value.name }}</q-tooltip>
|
|
79
|
+
</span>
|
|
137
80
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
81
|
+
<span class="file-size full-width ellipsis">
|
|
82
|
+
Size: {{ fieldData.value.sizeLabel || fieldData.value.__sizeLabel }}
|
|
83
|
+
</span>
|
|
141
84
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
dense
|
|
145
|
-
round
|
|
146
|
-
class="delete-btn"
|
|
147
|
-
icon="close"
|
|
148
|
-
@click="scope.removeFile(file)"
|
|
149
|
-
:disabled="Field.ReadOnly"
|
|
150
|
-
/>
|
|
85
|
+
<q-btn flat dense round class="delete-btn" icon="close" @click="scope.removeFile(fieldData.value)"
|
|
86
|
+
:disabled="Field.ReadOnly" />
|
|
151
87
|
</q-card>
|
|
152
88
|
</div>
|
|
153
89
|
|
|
@@ -156,32 +92,18 @@
|
|
|
156
92
|
</div>
|
|
157
93
|
</template>
|
|
158
94
|
</q-uploader>
|
|
159
|
-
<q-dialog class="image-preview-dialog"
|
|
160
|
-
flat
|
|
161
|
-
full-width full-height v-model="showPreview"
|
|
95
|
+
<q-dialog class="image-preview-dialog" flat full-width full-height v-model="showPreview"
|
|
162
96
|
style="background: rgba(0,0,0,0)">
|
|
163
97
|
<div class="image-preview">
|
|
164
|
-
<q-icon name="close"
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
@click="showPreview=false"></q-icon>
|
|
169
|
-
<q-img
|
|
170
|
-
fit="contain"
|
|
171
|
-
v-if="previewType === 'image'"
|
|
172
|
-
contain :src="previewFile"
|
|
173
|
-
@click="showPreview=false"
|
|
98
|
+
<q-icon name="close" class="absolute cursor-pointer bg-white text-primary"
|
|
99
|
+
style="border-radius: 6px;border: 1px solid primary;right: 0;" round size="20px"
|
|
100
|
+
@click="showPreview = false"></q-icon>
|
|
101
|
+
<q-img fit="contain" v-if="previewType === 'image'" :src="previewFile" @click="showPreview = false"
|
|
174
102
|
style="max-height: 100%; max-width: 100%;">
|
|
175
103
|
</q-img>
|
|
176
104
|
|
|
177
|
-
<q-pdfviewer
|
|
178
|
-
|
|
179
|
-
v-model="showPreview"
|
|
180
|
-
@click="showPreview=false"
|
|
181
|
-
:src="previewFile"
|
|
182
|
-
type="pdfjs"
|
|
183
|
-
style="height: 100%; max-width: 100%;"
|
|
184
|
-
/>
|
|
105
|
+
<q-pdfviewer v-if="previewType === 'pdf'" v-model="showPreview" @click="showPreview = false" :src="previewFile"
|
|
106
|
+
type="pdfjs" style="height: 100%; max-width: 100%;" />
|
|
185
107
|
</div>
|
|
186
108
|
</q-dialog>
|
|
187
109
|
</div>
|
|
@@ -189,9 +111,9 @@
|
|
|
189
111
|
|
|
190
112
|
<script>
|
|
191
113
|
import { defineComponent, getCurrentInstance, ref } from 'vue';
|
|
192
|
-
import { useFreeField, freeFieldProps } from '
|
|
193
|
-
import { useFormValidator} from '
|
|
194
|
-
import { useUploader } from '
|
|
114
|
+
import { useFreeField, freeFieldProps } from '../composible/useFreeField.js';
|
|
115
|
+
import { useFormValidator} from '../../composible/useFormValidator.js';
|
|
116
|
+
import { useUploader } from '../composible/useUploader.js';
|
|
195
117
|
|
|
196
118
|
export default defineComponent({
|
|
197
119
|
name: 'InputFieldImage',
|
|
@@ -249,7 +171,7 @@ export default defineComponent({
|
|
|
249
171
|
|
|
250
172
|
const selfValidate = () => {
|
|
251
173
|
if (props.Field?.Required) {
|
|
252
|
-
hasError.value =
|
|
174
|
+
hasError.value = !fieldData.value?.id;
|
|
253
175
|
return !!fieldData.value?.id;
|
|
254
176
|
}
|
|
255
177
|
|
|
@@ -298,7 +220,6 @@ export default defineComponent({
|
|
|
298
220
|
if (res && res.msg === 'OK') {
|
|
299
221
|
setFieldData({
|
|
300
222
|
id: res.data.id,
|
|
301
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
302
223
|
sizeLabel: file.__sizeLabel,
|
|
303
224
|
name: file.name,
|
|
304
225
|
size: file.size,
|
|
@@ -1,99 +1,49 @@
|
|
|
1
1
|
<template>
|
|
2
2
|
<div class="row free-field-image-list" v-if="Field">
|
|
3
|
-
<span
|
|
4
|
-
:
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
<q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
|
|
8
|
-
{{Field.Label || ''}}
|
|
3
|
+
<span :class="`field-label ${(Field.Label && Field.Label.trim().length)
|
|
4
|
+
? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`" v-if="Field.Label !== void 0">
|
|
5
|
+
<q-tooltip v-if="Field.Description" anchor="top right">{{ Field.Description }}</q-tooltip>
|
|
6
|
+
{{ Field.Label || '' }}
|
|
9
7
|
<span v-if="Field.Required" class="required-mark">*</span>
|
|
10
8
|
</span>
|
|
11
|
-
<q-uploader
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@removed="removeFile"
|
|
15
|
-
@rejected="filesRejected"
|
|
16
|
-
:factory="factoryFn"
|
|
17
|
-
multiple
|
|
18
|
-
:max-files="Field.Options && Field.Options.MaxCount"
|
|
19
|
-
:max-file-size="maxFileSize"
|
|
20
|
-
:max-total-size="maxTotalSize"
|
|
21
|
-
:class="`q-ma-xs ${hasError ? 'free-field--error' : ''}`"
|
|
22
|
-
ref="uploader"
|
|
23
|
-
>
|
|
9
|
+
<q-uploader @added="localFiles.push(...$event)" @uploaded="uploaded" @removed="removeFile" @rejected="filesRejected"
|
|
10
|
+
:factory="factoryFn" multiple :max-files="Field.Options && Field.Options.MaxCount" :max-file-size="maxFileSize"
|
|
11
|
+
:max-total-size="maxTotalSize" :class="`q-ma-xs ${hasError ? 'free-field--error' : ''}`" ref="uploader">
|
|
24
12
|
<template v-slot:list="scope">
|
|
25
13
|
<div class="uploader-btns row no-wrap items-center">
|
|
26
14
|
<q-spinner v-if="scope.isUploading" class="q-uploader__spinner" />
|
|
27
|
-
<q-btn
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
icon="add_box"
|
|
31
|
-
label="点击添加"
|
|
32
|
-
class="add-btn"
|
|
33
|
-
dense
|
|
34
|
-
flat
|
|
35
|
-
:disabled="Field.ReadOnly"
|
|
36
|
-
>
|
|
37
|
-
<q-uploader-add-trigger v-if="!Field.ReadOnly"/>
|
|
15
|
+
<q-btn v-if="scope.canAddFiles" type="a" icon="add_box" label="点击添加" class="add-btn" dense flat
|
|
16
|
+
:disabled="Field.ReadOnly">
|
|
17
|
+
<q-uploader-add-trigger v-if="!Field.ReadOnly" />
|
|
38
18
|
</q-btn>
|
|
39
|
-
<q-btn
|
|
40
|
-
|
|
41
|
-
icon="cloud_upload"
|
|
42
|
-
@click="scope.upload"
|
|
43
|
-
class="upload-btn"
|
|
44
|
-
label="点击上传"
|
|
45
|
-
dense
|
|
46
|
-
flat
|
|
47
|
-
:disabled="Field.ReadOnly"
|
|
48
|
-
></q-btn>
|
|
19
|
+
<q-btn v-if="scope.canUpload" icon="cloud_upload" @click="scope.upload" class="upload-btn" label="点击上传" dense
|
|
20
|
+
flat :disabled="Field.ReadOnly"></q-btn>
|
|
49
21
|
|
|
50
|
-
<q-btn
|
|
51
|
-
|
|
52
|
-
icon="clear"
|
|
53
|
-
@click="scope.abort"
|
|
54
|
-
class="abort-btn"
|
|
55
|
-
round
|
|
56
|
-
dense
|
|
57
|
-
flat
|
|
58
|
-
:disabled="Field.ReadOnly"
|
|
59
|
-
></q-btn>
|
|
22
|
+
<q-btn v-if="scope.isUploading" icon="clear" @click="scope.abort" class="abort-btn" round dense flat
|
|
23
|
+
:disabled="Field.ReadOnly"></q-btn>
|
|
60
24
|
<slot name="warning"></slot>
|
|
61
25
|
</div>
|
|
62
26
|
|
|
63
|
-
<div v-if="Array.isArray(allFiles) && allFiles.length"
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
class="file-
|
|
67
|
-
|
|
68
|
-
<
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
>查看</q-btn>
|
|
77
|
-
</div>
|
|
78
|
-
</e-icon>
|
|
79
|
-
<span class="file-name full-width ellipsis">
|
|
80
|
-
{{ file.name }}
|
|
81
|
-
<q-tooltip>{{ file.name }}</q-tooltip>
|
|
82
|
-
</span>
|
|
27
|
+
<div v-if="Array.isArray(allFiles) && allFiles.length"
|
|
28
|
+
class="file-list row items-start justify-start q-gutter-xl">
|
|
29
|
+
<q-card flat class="file-list-item" v-for="(file, index) in allFiles" :key="index">
|
|
30
|
+
<e-icon class="file-image" :name="fileThumb(file)" thumb :relative="filePreviewType(file) !== 'image'"
|
|
31
|
+
@click="preview(file)">
|
|
32
|
+
<div class="view-btn-wrapper absolute-full justify-center text-center">
|
|
33
|
+
<q-btn flat class="view-btn full-height full-width" @click="preview(file)">查看</q-btn>
|
|
34
|
+
</div>
|
|
35
|
+
</e-icon>
|
|
36
|
+
<span class="file-name full-width ellipsis">
|
|
37
|
+
{{ file.name }}
|
|
38
|
+
<q-tooltip>{{ file.name }}</q-tooltip>
|
|
39
|
+
</span>
|
|
83
40
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
41
|
+
<span class="file-size full-width ellipsis">
|
|
42
|
+
Size: {{ file.sizeLabel || file.__sizeLabel }}
|
|
43
|
+
</span>
|
|
87
44
|
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
dense
|
|
91
|
-
round
|
|
92
|
-
class="delete-btn"
|
|
93
|
-
icon="close"
|
|
94
|
-
@click="scope.removeFile(file)"
|
|
95
|
-
:disabled="Field.ReadOnly"
|
|
96
|
-
/>
|
|
45
|
+
<q-btn flat dense round class="delete-btn" icon="close" @click="scope.removeFile(file)"
|
|
46
|
+
:disabled="Field.ReadOnly" />
|
|
97
47
|
</q-card>
|
|
98
48
|
</div>
|
|
99
49
|
<!-- <q-list separator v-if="scope.files.length">
|
|
@@ -134,31 +84,18 @@
|
|
|
134
84
|
</div>
|
|
135
85
|
</template>
|
|
136
86
|
</q-uploader>
|
|
137
|
-
<q-dialog class="image-preview-dialog"
|
|
138
|
-
flat
|
|
139
|
-
full-width full-height v-model="showPreview"
|
|
87
|
+
<q-dialog class="image-preview-dialog" flat full-width full-height v-model="showPreview"
|
|
140
88
|
style="background: rgba(0,0,0,0)">
|
|
141
89
|
<div class="image-preview">
|
|
142
|
-
<q-icon name="close"
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
@click="showPreview=false"></q-icon>
|
|
147
|
-
<q-img
|
|
148
|
-
v-if="previewType=== 'image'"
|
|
149
|
-
contain :src="previewFile"
|
|
150
|
-
@click="showPreview=false"
|
|
90
|
+
<q-icon name="close" class="absolute cursor-pointer bg-white text-primary"
|
|
91
|
+
style="border-radius: 6px;border: 1px solid primary;right: 0;" round size="20px"
|
|
92
|
+
@click="showPreview = false"></q-icon>
|
|
93
|
+
<q-img fit="contain" v-if="previewType === 'image'" :src="previewFile" @click="showPreview = false"
|
|
151
94
|
style="height: 100%; max-width: 100%;">
|
|
152
95
|
</q-img>
|
|
153
96
|
|
|
154
|
-
<q-pdfviewer
|
|
155
|
-
|
|
156
|
-
v-model="showPreview"
|
|
157
|
-
@click="showPreview=false"
|
|
158
|
-
:src="previewFile"
|
|
159
|
-
type="pdfjs"
|
|
160
|
-
style="height: 100%; max-width: 100%;"
|
|
161
|
-
/>
|
|
97
|
+
<q-pdfviewer v-if="previewType === 'pdf'" v-model="showPreview" @click="showPreview = false" :src="previewFile"
|
|
98
|
+
type="pdfjs" style="height: 100%; max-width: 100%;" />
|
|
162
99
|
</div>
|
|
163
100
|
</q-dialog>
|
|
164
101
|
</div>
|
|
@@ -166,9 +103,9 @@
|
|
|
166
103
|
|
|
167
104
|
<script>
|
|
168
105
|
import { computed, defineComponent, getCurrentInstance, ref } from 'vue';
|
|
169
|
-
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
170
|
-
import { useFormValidator} from '../../composible/useFormValidator';
|
|
171
|
-
import { useUploader } from '../composible/useUploader';
|
|
106
|
+
import { useFreeField, freeFieldProps } from '../composible/useFreeField.js';
|
|
107
|
+
import { useFormValidator} from '../../composible/useFormValidator.js';
|
|
108
|
+
import { useUploader } from '../composible/useUploader.js';
|
|
172
109
|
|
|
173
110
|
export default defineComponent({
|
|
174
111
|
name: 'InputFieldImageList',
|
|
@@ -273,7 +210,6 @@ export default defineComponent({
|
|
|
273
210
|
if (res && res.msg === 'OK') {
|
|
274
211
|
uploadedFiles.push({
|
|
275
212
|
id: res.data.id,
|
|
276
|
-
// eslint-disable-next-line no-underscore-dangle
|
|
277
213
|
sizeLabel: file.__sizeLabel,
|
|
278
214
|
name: file.name,
|
|
279
215
|
size: file.size,
|
|
@@ -3,38 +3,26 @@
|
|
|
3
3
|
<slot name="warning"></slot>
|
|
4
4
|
<div class="buttons relative-position" v-if="Field && Field.ShowButtons">
|
|
5
5
|
<span class="q-ml-lg select-all-btn">
|
|
6
|
-
<q-btn round icon="check" @click="setFieldData(Object.assign({},serviceList))"></q-btn>
|
|
6
|
+
<q-btn round icon="check" @click="setFieldData(Object.assign({}, serviceList))"></q-btn>
|
|
7
7
|
</span>
|
|
8
8
|
<span class="q-ml-md clear-btn">
|
|
9
9
|
<q-btn round icon="clear" @click="setFieldData({})"></q-btn>
|
|
10
10
|
</span>
|
|
11
11
|
</div>
|
|
12
12
|
<div class="roles relative-position row items-center">
|
|
13
|
-
<q-radio
|
|
14
|
-
|
|
15
|
-
v-model="currentRole"
|
|
16
|
-
v-for="(r, idx) in (Field && Field.Roles) || []"
|
|
17
|
-
:key="idx"
|
|
18
|
-
:val="r.Name"
|
|
19
|
-
:label="r.Name || idx"
|
|
20
|
-
@update:modelValue="setFieldData(r.Permission || {})"/>
|
|
13
|
+
<q-radio class="role" v-model="currentRole" v-for="(r, idx) in (Field && Field.Roles) || []" :key="idx"
|
|
14
|
+
:val="r.Name" :label="r.Name || idx" @update:modelValue="setFieldData(r.Permission || {})" />
|
|
21
15
|
</div>
|
|
22
|
-
<permission-editor
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
:Permission="fieldData.value"
|
|
26
|
-
:Service="serviceList"
|
|
27
|
-
:readonly="Field.ReadOnly"
|
|
28
|
-
@changed="permissionChanged"
|
|
29
|
-
:noDataScope="Field.NoDataScope"
|
|
30
|
-
></permission-editor>
|
|
16
|
+
<permission-editor v-if="Field && !Field.HideEditor" class="permission-editor" :Permission="fieldData.value"
|
|
17
|
+
:Service="serviceList" :readonly="Field.ReadOnly" @changed="permissionChanged"
|
|
18
|
+
:noDataScope="Field.NoDataScope"></permission-editor>
|
|
31
19
|
</span>
|
|
32
20
|
</template>
|
|
33
21
|
|
|
34
22
|
<script>
|
|
35
23
|
import { defineComponent } from 'vue';
|
|
36
|
-
import { useFreeField, freeFieldProps } from '../composible/useFreeField';
|
|
37
|
-
import PermissionEditor from './PermissionEditor';
|
|
24
|
+
import { useFreeField, freeFieldProps } from '../composible/useFreeField.js';
|
|
25
|
+
import PermissionEditor from './PermissionEditor.vue';
|
|
38
26
|
|
|
39
27
|
export default defineComponent({
|
|
40
28
|
name: 'InputFieldPermission',
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
<q-space></q-space>
|
|
48
48
|
<div class="q-ma-xs query-btns">
|
|
49
49
|
<q-btn
|
|
50
|
-
v-if="canExport"
|
|
50
|
+
v-if="Field.canExport"
|
|
51
51
|
class="export-btn"
|
|
52
52
|
icon="fa fa-list"
|
|
53
53
|
label="导出"
|
|
54
54
|
@click="$emit('export')"
|
|
55
55
|
/>
|
|
56
|
-
<q-btn class="clear-btn" :icon="clearIcon" label="清空" @click="clear"></q-btn>
|
|
57
|
-
<q-btn class="query-btn q-ma-xs" :icon="searchIcon" label="查询" @click="search"></q-btn>
|
|
56
|
+
<q-btn class="clear-btn" :icon="Field.clearIcon || 'refresh'" label="清空" @click="clear"></q-btn>
|
|
57
|
+
<q-btn class="query-btn q-ma-xs" :icon="Field.searchIcon || 'search'" label="查询" @click="search"></q-btn>
|
|
58
58
|
</div>
|
|
59
59
|
</div>
|
|
60
60
|
</div>
|
|
@@ -76,10 +76,6 @@ export default defineComponent({
|
|
|
76
76
|
props: {
|
|
77
77
|
...freeFieldProps,
|
|
78
78
|
dense: { type: Boolean, default: false },
|
|
79
|
-
canExport: { type: Boolean, default: false },
|
|
80
|
-
queryData: { type: Object, default: () => ({}) },
|
|
81
|
-
searchIcon: { type: String, default: 'search' },
|
|
82
|
-
clearIcon: { type: String, default: 'refresh' },
|
|
83
79
|
},
|
|
84
80
|
setup(props, { emit }) {
|
|
85
81
|
if (!props.Field) return {};
|
|
@@ -92,7 +88,7 @@ export default defineComponent({
|
|
|
92
88
|
const kwFields = ref([]);
|
|
93
89
|
|
|
94
90
|
watchEffect(() => {
|
|
95
|
-
query.value = props.queryData;
|
|
91
|
+
query.value = props.Field.queryData;
|
|
96
92
|
})
|
|
97
93
|
|
|
98
94
|
watchEffect(() => {
|