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.
@@ -1,21 +1,11 @@
1
1
  <template>
2
2
  <span class="e-icon justify-center items-center">
3
- <q-icon
4
- v-if="isIcon"
5
- class="full-width full-height"
6
- :name="name"
7
- ></q-icon>
8
- <q-img
9
- v-else
10
- class="full-width full-height"
11
- style="display: block;"
12
- :src="imgPath"
13
- round
14
- >
3
+ <q-icon v-if="isIcon" class="full-width full-height" :name="name"></q-icon>
4
+ <q-img v-else class="full-width full-height" style="display: block;" :src="imgPath" round>
15
5
  <slot></slot>
16
6
  <template v-slot:error v-if="!hideError">
17
7
  <div class="error-slot column absolute-full justify-center text-center">
18
- <span class="no-picture-text full-width">{{noImageText}}</span>
8
+ <span class="no-picture-text full-width">{{ noImageText }}</span>
19
9
  </div>
20
10
  </template>
21
11
  </q-img>
@@ -23,7 +13,7 @@
23
13
  </template>
24
14
 
25
15
  <script>
26
- import { ref, computed, defineComponent, getCurrentInstance, watchEffect, nextTick } from 'vue';
16
+ import { ref, computed, defineComponent, getCurrentInstance, watchEffect } from 'vue';
27
17
 
28
18
  export default defineComponent({
29
19
  name: 'EIcon',
@@ -14,7 +14,7 @@ MsgDialog.install = (app) => {
14
14
 
15
15
  dialogApp.config.globalProperties = app.config.globalProperties;
16
16
 
17
- const { reload, ...appContext } = app._context;
17
+ const { ...appContext } = app._context;
18
18
  Object.assign(dialogApp._context, appContext);
19
19
 
20
20
  MsgDialogInstance = dialogApp.mount('#free-dialog');
@@ -1,5 +1,5 @@
1
- import { defineComponent, h, ref, getCurrentInstance } from 'vue';
2
- import { QCheckbox } from 'quasar';
1
+ import { defineComponent, h, ref, getCurrentInstance, defineExpose } from 'vue';
2
+ import { QCheckbox, QIcon } from 'quasar';
3
3
  import { useFreeField, freeFieldProps } from '../composible/useFreeField';
4
4
 
5
5
  export default defineComponent({
@@ -21,7 +21,7 @@ export default defineComponent({
21
21
  ...freeFieldProps,
22
22
  },
23
23
  emits: ['input'],
24
- setup(props, { emit, expose }){
24
+ setup(props, { emit }){
25
25
  if (!props.Field) return {};
26
26
 
27
27
  const { proxy:vm } = getCurrentInstance();
@@ -1,8 +1,9 @@
1
1
  import { ref, defineComponent, getCurrentInstance, h, computed, watch, watchEffect } from 'vue';
2
2
  import { QInput, QIcon, QPopupProxy, QDate } from 'quasar';
3
- import { useFreeField, freeFieldProps } from '../composible/useFreeField';
4
- import freeFieldLabel from '../composible/freeFieldLabel';
5
- import { useFormValidator} from '../../composible/useFormValidator';
3
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField.js';
4
+ import freeFieldLabel from '../composible/freeFieldLabel.js';
5
+ import { useFormValidator} from '../../composible/useFormValidator.js';
6
+ import ReadonlyContent from '../composible/readonlyContent.js';
6
7
 
7
8
  export default defineComponent({
8
9
  name: 'InputFieldDateRange',
@@ -1,4 +1,4 @@
1
- import { ref, defineComponent, getCurrentInstance, h, computed, watchEffect } from 'vue';
1
+ import { ref, defineComponent, h, computed, watchEffect } from 'vue';
2
2
  import { QTable, QTh, QTd, QTr, QIcon } from 'quasar';
3
3
  import { useFreeField, freeFieldProps } from '../composible/useFreeField';
4
4
  import freeFieldLabel from '../composible/freeFieldLabel';
@@ -17,7 +17,7 @@ export default defineComponent({
17
17
  Options: {
18
18
  Columns: [{
19
19
  Label: '第一列',
20
- List: [{
20
+ Fields: [{
21
21
  Name: 'CA',
22
22
  Placeholder: '请填写',
23
23
  Type: 'Number',
@@ -25,7 +25,7 @@ export default defineComponent({
25
25
  }],
26
26
  }, {
27
27
  Label: '第二列',
28
- List: [{
28
+ Fields: [{
29
29
  Name: 'CB',
30
30
  Type: 'String',
31
31
  }],
@@ -247,7 +247,6 @@ export default defineComponent({
247
247
  const showCell = (p) => {
248
248
  const colNum = Number(p.col.name);
249
249
 
250
- // eslint-disable-next-line no-restricted-globals
251
250
  if (isNaN(colNum)) return true;
252
251
 
253
252
  if (p.row.rowSize !== void 0) {
@@ -302,7 +301,7 @@ export default defineComponent({
302
301
  align : 'center',
303
302
  sortable : true,
304
303
  classes : 'index',
305
- List: [{
304
+ Fields: [{
306
305
  Name: 'index',
307
306
  Type: 'Number',
308
307
  required : true,
@@ -1,92 +1,40 @@
1
1
  <template>
2
2
  <div class="row free-field-file" v-if="Field">
3
- <span
4
- :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
- ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
6
- v-if="Field.Label !== void 0"
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>
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 || '' }}
7
+ <span v-if="Field.Required" class="required-mark">*</span>
17
8
  </span>
18
9
 
19
- <q-uploader
20
- @uploaded="uploaded"
21
- @removed="removeFile"
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 ? 'free-field--error' : ''}`"
29
- >
10
+ <q-uploader @uploaded="uploaded" @removed="removeFile" @rejected="filesRejected" ref="uploader" :factory="factoryFn"
11
+ auto-upload :max-file-size="maxFileSize" :accept="acceptedFileTypes"
12
+ :class="`q-ma-xs ${hasError ? 'free-field--error' : ''}`">
30
13
  <template v-slot:list="scope">
31
- <div
32
- v-if="Field.Options && Field.Options.AsLink && Array.isArray(fieldData.value) && fieldData.value?.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 fieldData.value"
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
- >
14
+ <div v-if="Field.Options && Field.Options.AsLink && !!fieldData.value?.id"
15
+ class="file-link row full-width ellipsis items-center">
16
+ <div class="row ellipsis full-width" v-for="(file, index) in fieldData.value" :key="index">
17
+ <q-btn icon="cloud_download" dense flat></q-btn>
18
+ <a class="ellipsis" target="_blank" :href="$filter('serverPath', file.id)" :download="file.name">
51
19
  {{ file.name }}
52
20
  <q-tooltip>{{ file.name }}</q-tooltip>
53
21
  </a>
54
22
  </div>
55
23
  </div>
56
24
  <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
- >
25
+ <div class="uploader-btns row no-wrap items-center" v-if="!dense">
26
+ <q-spinner v-if="scope.isUploading" class="q-uploader__spinner" />
27
+ <q-btn v-if="!scope.isUploading && !Field.ReadOnly" type="a" icon="cloud_upload" dense flat
28
+ class="upload-btn" label="点击上传">
74
29
  <q-uploader-add-trigger v-if="!Field.ReadOnly" />
75
30
  </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>
31
+ <q-btn v-if="scope.isUploading && !Field.ReadOnly" icon="clear" @click="scope.abort" class="clear-btn" round
32
+ dense flat></q-btn>
85
33
  <slot name="warning"></slot>
86
34
  </div>
87
35
 
88
- <q-item v-if="dense && fieldData.value?.length">
89
- <q-item-section v-if="fieldData.value?.length && fieldData.value.name">
36
+ <q-item v-if="dense && fieldData.value?.id">
37
+ <q-item-section v-if="fieldData.value?.id && fieldData.value.name">
90
38
  <q-item-label class="full-width ellipsis">
91
39
  {{ fieldData.value.name }}
92
40
  <q-tooltip>{{ fieldData.value.name }}</q-tooltip>
@@ -94,113 +42,58 @@
94
42
  </q-item-section>
95
43
 
96
44
  <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
- >
45
+ <q-btn v-if="!scope.isUploading && !Field.ReadOnly" type="a" icon="cloud_upload" class="upload-btn" dense
46
+ flat>
105
47
  <q-uploader-add-trigger v-if="!Field.ReadOnly" />
106
48
  </q-btn>
107
49
  </q-item-section>
108
50
  </q-item>
109
51
 
110
- <div
111
- v-else-if="Array.isArray(fieldData.value) && fieldData.value?.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 fieldData.value"
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
- >
52
+ <div v-else-if="!!fieldData.value?.id" class="file-list row items-start justify-start">
53
+ <q-card flat class="file-list-item">
54
+ <e-icon class="file-image" :name="fileThumb(fieldData.value)" thumb
55
+ :relative="filePreviewType(fieldData.value) !== 'image'" @click="preview(fieldData.value)">
127
56
  <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>
57
+ <q-btn flat class="view-btn full-height full-width">查看</q-btn>
132
58
  </div>
133
59
  </e-icon>
134
60
  <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 }}
61
+ <a v-if="fieldData.value && fieldData.value.id" target="_blank"
62
+ :href="$filter('serverPath', fieldData.value.id)" :download="fieldData.value.name">
63
+ {{ fieldData.value.name }}
141
64
  </a>
142
- <span v-else-if="file && file.name">
143
- {{file.name}}
65
+ <span v-else-if="fieldData.value && fieldData.value.name">
66
+ {{ fieldData.value.name }}
144
67
  </span>
145
- <q-tooltip>{{ file.name }}</q-tooltip>
68
+ <q-tooltip>{{ fieldData.value.name }}</q-tooltip>
146
69
  </span>
147
70
 
148
71
  <span class="file-size full-width ellipsis">
149
- Size: {{ file.sizeLabel || file.__sizeLabel }}
72
+ Size: {{ fieldData.value.sizeLabel || fieldData.value.__sizeLabel }}
150
73
  </span>
151
74
 
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
- />
75
+ <q-btn flat dense round class="delete-btn" icon="close" @click="scope.removeFile(fieldData.value)"
76
+ v-if="!Field.ReadOnly" />
161
77
  </q-card>
162
78
  </div>
163
- <div
164
- class="free-field--error-tag"
165
- v-if="hasError"
166
- >
79
+ <div class="free-field--error-tag" v-if="hasError">
167
80
  <e-icon name="error"></e-icon>
168
81
  </div>
169
82
  </div>
170
83
  </template>
171
84
  </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
- >
85
+ <q-dialog class="image-preview-dialog" flat full-width full-height v-model="showPreview"
86
+ style="background: rgba(0,0,0,0)">
180
87
  <div class="image-preview">
181
- <q-icon name="close"
182
- class="absolute cursor-pointer bg-white text-primary"
183
- style="border-radius: 6px;border: 1px solid primary;right: 0;"
184
- round size="20px"
185
- @click="showPreview=false"></q-icon>
186
- <q-img
187
- v-if="previewType=== 'image'"
188
- contain
189
- :src="previewFile"
190
- @click="showPreview=false"
191
- style="height: 100%; max-width: 100%;"
192
- >
88
+ <q-icon name="close" class="absolute cursor-pointer bg-white text-primary"
89
+ style="border-radius: 6px;border: 1px solid primary;right: 0;" round size="20px"
90
+ @click="showPreview = false"></q-icon>
91
+ <q-img v-if="previewType === 'image'" fit="contain" :src="previewFile" @click="showPreview = false"
92
+ style="height: 100%; max-width: 100%;">
193
93
  </q-img>
194
94
 
195
- <pdf-viewer
196
- v-if="previewType === 'pdf'"
197
- v-model="showPreview"
198
- @click="showPreview=false"
199
- :src="previewFile"
200
- :version="Field?.Options?.PdfViewerVersion"
201
- type="pdfjs"
202
- style="height: 100%; max-width: 100%;"
203
- />
95
+ <pdf-viewer v-if="previewType === 'pdf'" v-model="showPreview" @click="showPreview = false" :src="previewFile"
96
+ :version="Field?.Options?.PdfViewerVersion" type="pdfjs" style="height: 100%; max-width: 100%;" />
204
97
  </div>
205
98
  </q-dialog>
206
99
  </div>
@@ -208,10 +101,10 @@
208
101
 
209
102
  <script>
210
103
  import { computed, defineComponent, getCurrentInstance, ref } from 'vue';
211
- import { useFreeField, freeFieldProps } from '../composible/useFreeField';
212
- import { useFormValidator} from '../../composible/useFormValidator';
213
- import { useUploader } from '../composible/useUploader';
214
- import PdfViewer from './pdfviewer';
104
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField.js';
105
+ import { useFormValidator} from '../../composible/useFormValidator.js';
106
+ import { useUploader } from '../composible/useUploader.js';
107
+ import PdfViewer from './pdfviewer.js';
215
108
 
216
109
  export default defineComponent({
217
110
  name: 'InputFieldFile',
@@ -282,7 +175,7 @@ export default defineComponent({
282
175
 
283
176
  const selfValidate = () => {
284
177
  if (props.Field?.Required) {
285
- hasError.value = !!fieldData.value?.id;
178
+ hasError.value = !fieldData.value?.id;
286
179
  return !!fieldData.value?.id;
287
180
  }
288
181
 
@@ -331,7 +224,6 @@ export default defineComponent({
331
224
  if (res && res.msg === 'OK') {
332
225
  setFieldData({
333
226
  id: res.data.id,
334
- // eslint-disable-next-line no-underscore-dangle
335
227
  sizeLabel: file.__sizeLabel,
336
228
  name: file.name,
337
229
  size: file.size,