free-fe-core-modules 0.0.2 → 0.0.4

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.
Files changed (104) hide show
  1. package/components/Basic/EIcon.vue +2 -4
  2. package/components/Basic/LeveledMenus.vue +0 -5
  3. package/components/Basic/SummaryHead.vue +23 -3
  4. package/components/Dialog/BasicDialog.vue +2 -3
  5. package/components/SlidingCarousel/index.vue +13 -3
  6. package/components/SlidingNews/index.vue +13 -3
  7. package/components/ThemeSwitch/index.vue +7 -5
  8. package/composible/useObjectData.js +69 -0
  9. package/free-field/Fields/AgreementCheck.js +170 -0
  10. package/free-field/Fields/ApiCall.js +123 -0
  11. package/{field-components/Fields/Boolean.vue → free-field/Fields/Boolean.js} +40 -46
  12. package/free-field/Fields/Category.js +28 -0
  13. package/free-field/Fields/Check.js +106 -0
  14. package/free-field/Fields/Customize.js +87 -0
  15. package/free-field/Fields/Date.js +133 -0
  16. package/free-field/Fields/DateRange.js +226 -0
  17. package/free-field/Fields/DynamicList.js +565 -0
  18. package/{field-components → free-field}/Fields/FixedList.vue +78 -83
  19. package/free-field/Fields/InputFieldList.vue +324 -0
  20. package/{field-components → free-field}/Fields/Labels.vue +24 -15
  21. package/{field-components → free-field}/Fields/MixedTable.vue +53 -61
  22. package/free-field/Fields/Number.js +167 -0
  23. package/free-field/Fields/Password.js +81 -0
  24. package/{field-components → free-field}/Fields/Permission.vue +17 -13
  25. package/{field-components → free-field}/Fields/PermissionEditor.vue +62 -105
  26. package/{field-components → free-field}/Fields/QueryFilters.vue +65 -48
  27. package/{field-components → free-field}/Fields/RadioList.vue +36 -12
  28. package/{field-components → free-field}/Fields/Rich.vue +104 -114
  29. package/{field-components → free-field}/Fields/Search.vue +35 -26
  30. package/{field-components → free-field}/Fields/Select.vue +116 -87
  31. package/{field-components → free-field}/Fields/SelectionChain.vue +89 -67
  32. package/{field-components/Fields/Separator.vue → free-field/Fields/Separator.js} +11 -16
  33. package/{field-components → free-field}/Fields/SingleList.vue +27 -21
  34. package/free-field/Fields/Static.js +27 -0
  35. package/free-field/Fields/String.js +105 -0
  36. package/free-field/Fields/Text.js +80 -0
  37. package/{field-components → free-field}/Fields/Time.vue +59 -43
  38. package/{field-components → free-field}/Fields/TimeRange.vue +107 -92
  39. package/free-field/Fields/Year.js +137 -0
  40. package/{field-components → free-field}/Fields/YearRange.vue +63 -73
  41. package/{field-components → free-field}/Fields/index.js +28 -30
  42. package/free-field/composible/fieldWrapper.js +221 -0
  43. package/free-field/composible/freeFieldLabel.js +22 -0
  44. package/free-field/composible/readonlyContent.js +36 -0
  45. package/free-field/composible/useFileSizeUtils.js +52 -0
  46. package/free-field/composible/useFreeField.js +143 -0
  47. package/{field-components → free-field}/index.js +3 -3
  48. package/i18n/en-us/index.js +1 -1
  49. package/i18n/zh-cn/index.js +1 -1
  50. package/index.js +1 -4
  51. package/package.json +2 -2
  52. package/router/error/data.js +4 -1
  53. package/view/dict/index.vue +13 -2
  54. package/view/error/list.vue +22 -14
  55. package/view/menu/index.vue +19 -4
  56. package/view/system/index.vue +15 -2
  57. package/field-components/Fields/AgreementCheck.vue +0 -161
  58. package/field-components/Fields/ApiCall.vue +0 -139
  59. package/field-components/Fields/Category.vue +0 -33
  60. package/field-components/Fields/Check.vue +0 -131
  61. package/field-components/Fields/Customize.vue +0 -103
  62. package/field-components/Fields/Date.vue +0 -142
  63. package/field-components/Fields/DateRange.vue +0 -199
  64. package/field-components/Fields/DynamicList.vue +0 -575
  65. package/field-components/Fields/FieldEditor.vue +0 -379
  66. package/field-components/Fields/File.vue +0 -382
  67. package/field-components/Fields/FileList.vue +0 -405
  68. package/field-components/Fields/FileListCombined.vue +0 -142
  69. package/field-components/Fields/Image.vue +0 -328
  70. package/field-components/Fields/ImageList.vue +0 -285
  71. package/field-components/Fields/ImageListCombined.vue +0 -76
  72. package/field-components/Fields/InputFieldList.vue +0 -299
  73. package/field-components/Fields/Number.vue +0 -247
  74. package/field-components/Fields/Password.vue +0 -79
  75. package/field-components/Fields/Static.vue +0 -22
  76. package/field-components/Fields/String.vue +0 -185
  77. package/field-components/Fields/Text.vue +0 -89
  78. package/field-components/Fields/UltimateFile.vue +0 -100
  79. package/field-components/Fields/Year.vue +0 -124
  80. package/field-components/Fields/components/FieldTypeOptions.vue +0 -248
  81. package/field-components/components/FieldComponents.vue +0 -246
  82. package/free-fields/AutoHide.js +0 -66
  83. package/free-fields/CenterContent.js +0 -15
  84. package/free-fields/Draggable.js +0 -30
  85. package/free-fields/Droppable.js +0 -114
  86. package/free-fields/EditableString.js +0 -63
  87. package/free-fields/FieldCategory.js +0 -83
  88. package/free-fields/FieldTypeSelect.js +0 -94
  89. package/free-fields/fieldEditors/arrayEditor.js +0 -3
  90. package/free-fields/fieldEditors/boolEditor.js +0 -22
  91. package/free-fields/fieldEditors/dateEditor.js +0 -23
  92. package/free-fields/fieldEditors/datetimeEditor.js +0 -23
  93. package/free-fields/fieldEditors/index.js +0 -21
  94. package/free-fields/fieldEditors/jsonEditor.js +0 -371
  95. package/free-fields/fieldEditors/labeledField.js +0 -74
  96. package/free-fields/fieldEditors/numberEditor.js +0 -51
  97. package/free-fields/fieldEditors/objectEditor.js +0 -3
  98. package/free-fields/fieldEditors/selectEditor.js +0 -0
  99. package/free-fields/fieldEditors/stringEditor.js +0 -49
  100. package/free-fields/fieldEditors/textEditor.js +0 -50
  101. package/free-fields/fieldEditors/timeEditor.js +0 -23
  102. package/free-fields/index.js +0 -402
  103. /package/{field-components/Display → free-field/Layout}/index.js +0 -0
  104. /package/{field-components → free-field}/style.sass +0 -0
@@ -1,382 +0,0 @@
1
- <template>
2
- <div class="row input-field-file">
3
- <span
4
- :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
- ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
6
- v-if="typeof Field.Label !== 'undefined'"
7
- >
8
- <q-tooltip
9
- v-if="Field.Description"
10
- anchor="top right"
11
- >{{Field.Description}}</q-tooltip>
12
- {{Field.Label || ''}}
13
- <span
14
- v-if="Field.Required"
15
- class="required-mark"
16
- >*</span>
17
- </span>
18
-
19
- <q-uploader
20
- @uploaded="uploaded"
21
- @removed="fieldData = ''; $emit('input')"
22
- @rejected="filesRejected"
23
- ref="uploader"
24
- :factory="factoryFn"
25
- auto-upload
26
- :max-file-size="maxFileSize"
27
- :accept="acceptedFileTypes"
28
- :class="`q-ma-xs ${hasError ? 'input-field--error' : ''}`"
29
- >
30
- <template v-slot:list="scope">
31
- <div
32
- v-if="Field.Options && Field.Options.AsLink && scope.files.length"
33
- class="file-link row full-width ellipsis items-center"
34
- >
35
- <div
36
- class="row ellipsis full-width"
37
- v-for="(file, index) in scope.files"
38
- :key="index"
39
- >
40
- <q-btn
41
- icon="cloud_download"
42
- dense
43
- flat
44
- ></q-btn>
45
- <a
46
- class="ellipsis"
47
- target="_blank"
48
- :href="$filter('serverPath',file.id)"
49
- :download="file.name"
50
- >
51
- {{ file.name }}
52
- <q-tooltip>{{ file.name }}</q-tooltip>
53
- </a>
54
- </div>
55
- </div>
56
- <div v-else>
57
- <div
58
- class="uploader-btns row no-wrap items-center"
59
- v-if="!dense"
60
- >
61
- <q-spinner
62
- v-if="scope.isUploading"
63
- class="q-uploader__spinner"
64
- />
65
- <q-btn
66
- v-if="!scope.isUploading && !Field.ReadOnly"
67
- type="a"
68
- icon="cloud_upload"
69
- dense
70
- flat
71
- class="upload-btn"
72
- label="点击上传"
73
- >
74
- <q-uploader-add-trigger v-if="!Field.ReadOnly" />
75
- </q-btn>
76
- <q-btn
77
- v-if="scope.isUploading && !Field.ReadOnly"
78
- icon="clear"
79
- @click="scope.abort"
80
- class="clear-btn"
81
- round
82
- dense
83
- flat
84
- ></q-btn>
85
- <slot name="warning"></slot>
86
- </div>
87
-
88
- <q-item v-if="dense && scope.files.length">
89
- <q-item-section v-if="scope.files.length && scope.files[0].name">
90
- <q-item-label class="full-width ellipsis">
91
- {{ scope.files[0].name }}
92
- <q-tooltip>{{ scope.files[0].name }}</q-tooltip>
93
- </q-item-label>
94
- </q-item-section>
95
-
96
- <q-item-section side>
97
- <q-btn
98
- v-if="!scope.isUploading && !Field.ReadOnly"
99
- type="a"
100
- icon="cloud_upload"
101
- class="upload-btn"
102
- dense
103
- flat
104
- >
105
- <q-uploader-add-trigger v-if="!Field.ReadOnly" />
106
- </q-btn>
107
- </q-item-section>
108
- </q-item>
109
-
110
- <div
111
- v-else-if="scope.files.length"
112
- class="file-list row items-start justify-start"
113
- >
114
- <q-card
115
- flat
116
- class="file-list-item"
117
- v-for="(file, index) in scope.files"
118
- :key="index"
119
- >
120
- <e-icon
121
- class="file-image"
122
- :name="fileThumb(file)"
123
- thumb
124
- :relative="filePreviewType(file) !== 'image'"
125
- @click="preview(file)"
126
- >
127
- <div class="view-btn-wrapper absolute-full justify-center text-center">
128
- <q-btn
129
- flat
130
- class="view-btn full-height full-width"
131
- >查看</q-btn>
132
- </div>
133
- </e-icon>
134
- <span class="file-name full-width ellipsis">
135
- <a
136
- v-if="file && file.id"
137
- target="_blank"
138
- :href="$filter('serverPath',file.id)"
139
- :download="file.name">
140
- {{ file.name }}
141
- </a>
142
- <span v-else-if="file && file.name">
143
- {{file.name}}
144
- </span>
145
- <q-tooltip>{{ file.name }}</q-tooltip>
146
- </span>
147
-
148
- <span class="file-size full-width ellipsis">
149
- Size: {{ file.sizeLabel || file.__sizeLabel }}
150
- </span>
151
-
152
- <q-btn
153
- flat
154
- dense
155
- round
156
- class="delete-btn"
157
- icon="close"
158
- @click="scope.removeFile(file)"
159
- v-if="!Field.ReadOnly"
160
- />
161
- </q-card>
162
- </div>
163
- <div
164
- class="input-field--error-tag"
165
- v-if="hasError"
166
- >
167
- <e-icon name="error"></e-icon>
168
- </div>
169
- </div>
170
- </template>
171
- </q-uploader>
172
- <q-dialog
173
- class="image-preview-dialog"
174
- flat
175
- full-width
176
- full-height
177
- v-model="showPreview"
178
- style="background: rgba(0,0,0,0)"
179
- >
180
- <div class="image-preview">
181
- <q-img
182
- v-if="previewType=== 'image'"
183
- contain
184
- :src="previewFile"
185
- @click="showPreview=false"
186
- style="height: 100%; max-width: 100%;"
187
- >
188
- </q-img>
189
-
190
- <q-pdfviewer
191
- v-if="previewType === 'pdf'"
192
- v-model="showPreview"
193
- @click="showPreview=false"
194
- @error="pdfError"
195
- @load="pdfLoad"
196
- :src="previewFile"
197
- type="pdfjs"
198
- style="height: 100%; max-width: 100%;"
199
- />
200
- </div>
201
- </q-dialog>
202
- </div>
203
- </template>
204
-
205
- <script>
206
- import { defineComponent } from 'vue';
207
- import mixins from 'free-fe-mixins';
208
-
209
- export default defineComponent({
210
- name: 'InputFieldFile',
211
- mixins: [mixins.UploaderMixin, mixins.InputFieldMixin],
212
- emits:['input'],
213
- fieldInfo: {
214
- Category: 'Upload',
215
- Label: '文件',
216
- Value: 'File',
217
- Extra: [
218
- {
219
- Type: 'String',
220
- Label: '支持的文件类型',
221
- Name: 'Options.Ext',
222
- Default: 'pdf,doc,docx',
223
- },
224
- {
225
- Type: 'String',
226
- Label: '最大文件大小',
227
- Name: 'MaxValue',
228
- Default: '10m',
229
- },
230
- {
231
- Type: 'Boolean',
232
- Label: '紧凑样式',
233
- Name: 'Options.Dense',
234
- Default: false,
235
- },
236
- {
237
- Type: 'Boolean',
238
- Label: '显示为链接',
239
- Name: 'Options.AsLink',
240
- Default: false,
241
- },
242
- ],
243
- Description: '',
244
- },
245
- data() {
246
- return {
247
- hasError: false,
248
- };
249
- },
250
- computed: {
251
- dense() {
252
- return (
253
- !!this.Field
254
- && (!!this.Field.dense
255
- || (!!this.Field.Options && !!this.Field.Options.Dense))
256
- );
257
- },
258
- },
259
- watch: {
260
- fieldData() {
261
- if (this.fieldData) {
262
- try {
263
- this.$refs.uploader.files = typeof this.fieldData === 'string'
264
- ? [JSON.parse(this.fieldData)]
265
- : [this.fieldData];
266
- } catch (ex) {
267
- //
268
- }
269
- }
270
- },
271
- },
272
- mounted() {
273
- if (this.fieldData) {
274
- try {
275
- this.$refs.uploader.files = typeof this.fieldData === 'string'
276
- ? [JSON.parse(this.fieldData)]
277
- : [this.fieldData];
278
- } catch (ex) {
279
- //
280
- }
281
- }
282
- },
283
- methods: {
284
- validate() {
285
- if (this.Field.Required) {
286
- this.hasError = this.$refs.uploader.files.length <= 0;
287
- return this.$refs.uploader.files.length > 0;
288
- }
289
-
290
- const rules = Array.isArray(typeof this.Field.Rules)
291
- ? this.Field.Rules
292
- : [this.Field.Rules];
293
-
294
- let isValid = true;
295
- for (let i = 0; i < rules.length; i += 1) {
296
- const r = rules[i];
297
-
298
- if (typeof r === 'function') {
299
- isValid = isValid && r(this.$refs.uploader.files);
300
- }
301
- }
302
-
303
- this.hasError = !isValid;
304
- return isValid;
305
- },
306
- factoryFn() {
307
- return {
308
- url: this.Field.url || `${this.ctx.config.baseUrl}/upload`,
309
- fieldName: 'file',
310
- };
311
- },
312
- // fileAdded(files) {
313
- // this.$refs.uploader.files = files;
314
- // },
315
- pdfLoad() {
316
- //
317
- },
318
- pdfError() {
319
- //
320
- },
321
- uploaded(info) {
322
- if (info && info.files && info.files.length && info.files[0].xhr) {
323
- const { xhr } = info.files[0];
324
- let res;
325
- if (xhr.response) {
326
- if (typeof xhr.response === 'string') {
327
- //
328
- res = JSON.parse(xhr.response);
329
- } else if (typeof xhr.response === 'object') {
330
- //
331
- res = xhr.response;
332
- } else {
333
- //
334
- return;
335
- }
336
-
337
- if (res && res.msg === 'OK') {
338
- // this.fieldData = JSON.stringify({
339
- // id: res.data.id,
340
- // // eslint-disable-next-line no-underscore-dangle
341
- // sizeLabel: info.files[0].__sizeLabel,
342
- // name: info.files[0].name,
343
- // size: info.files[0].size,
344
- // type: info.files[0].type,
345
- // });
346
-
347
- this.fieldData = {
348
- id: res.data.id,
349
- date: res.data.date || new Date(),
350
- // eslint-disable-next-line no-underscore-dangle
351
- sizeLabel: info.files[0].__sizeLabel,
352
- name: info.files[0].name,
353
- size: info.files[0].size,
354
- type: info.files[0].type,
355
- };
356
-
357
- this.$emit('input');
358
- }
359
- }
360
-
361
- this.validate();
362
- }
363
- },
364
- },
365
- });
366
- </script>
367
-
368
- <style lang="sass" scoped>
369
- .file-link
370
- &>div
371
- display: inline-block
372
- white-space: nowrap
373
- overflow: hidden
374
- & a
375
- white-space: nowrap
376
- overflow: hidden
377
- </style>
378
-
379
- <style lang="sass">
380
- .q-uploader__header
381
- display: none
382
- </style>