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,185 +0,0 @@
1
- <template>
2
- <span
3
- class="simple-field input-field-string row items-center no-wrap"
4
- v-if="Field"
5
- >
6
- <span
7
- v-if="Field.ReadOnly"
8
- class="full-width"
9
- >
10
- <span
11
- :class="`field-label field-label-readonly ${(Field.Label && Field.Label.trim().length)
12
- ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
13
- v-if="Field.Label !== void 0">
14
- <q-tooltip
15
- v-if="Field.Description"
16
- anchor="top right"
17
- >{{Field.Description}}</q-tooltip>{{Field.Label || ''}}
18
- <span
19
- v-if="Field.Required"
20
- class="required-mark"
21
- >*</span>
22
- </span>
23
- <span class="readonly-content">
24
- <span
25
- class="prefix"
26
- v-if="Field.Options && Field.Options.Prefix"
27
- >{{Field.Options.Prefix}}
28
- </span>
29
- <span :style="(Field.Info && Field.Info.Style) ? Field.Info.Style : ''">{{modelValue}}
30
- </span>
31
- <span
32
- class="postfix"
33
- v-if="Field.Options && Field.Options.Postfix"
34
- >{{Field.Options.Postfix}}</span>
35
- </span>
36
- </span>
37
- <q-input
38
- v-else
39
- v-model="localData"
40
- @update:model-value="inputEvent"
41
- autocomplete="off"
42
- v-bind="$attrs"
43
- hide-bottom-space
44
- :readonly="Field.ReadOnly"
45
- :ref="`input_field_validator_${Field.Name || Field.Label}`"
46
- :maxlength="maxlength"
47
- :style="(Field.Info && Field.Info.Style) ? Field.Info.Style : ''"
48
- >
49
- <template v-slot:before>
50
- <span
51
- :class="`field-label ${(Field.Label && Field.Label.trim().length)
52
- ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
53
- v-if="Field.Label !== void 0"
54
- >
55
- <q-tooltip
56
- v-if="Field.Description"
57
- anchor="top right"
58
- >{{Field.Description}}</q-tooltip>
59
- {{Field.Label || ''}}
60
- <span
61
- v-if="Field.Required"
62
- class="required-mark"
63
- >*</span>
64
- </span>
65
- </template>
66
-
67
- <template
68
- v-slot:prepend
69
- v-if="Field && ((Field.Slots && Field.Slots.indexOf('prepend') >= 0)
70
- || (Field.Options && Field.Options.Prefix))"
71
- >
72
- <slot name="prepend"
73
- v-if="Field && Field.Slots && Field.Slots.indexOf('prepend') >= 0"></slot>
74
- <span
75
- class="prefix"
76
- v-if="Field && Field.Options && Field.Options.Prefix"
77
- >{{Field.Options.Prefix}}</span>
78
- </template>
79
-
80
- <template
81
- v-slot:append
82
- v-if="Field && ((Field.Slots && Field.Slots.indexOf('append') >= 0)
83
- || (Field.Options && Field.Options.Postfix))"
84
- >
85
- <slot v-if="Field && Field.Slots && Field.Slots.indexOf('append') >= 0"
86
- name="append"></slot>
87
- <span
88
- class="postfix"
89
- v-if="Field && Field.Options && Field.Options.Postfix"
90
- >{{Field.Options.Postfix}}</span>
91
- </template>
92
- </q-input>
93
- <slot name="warning"></slot>
94
- </span>
95
- </template>
96
-
97
- <script>
98
- import { defineComponent, ref, computed, watch } from 'vue';
99
- import mixins from 'free-fe-mixins';
100
-
101
- export default defineComponent({
102
- name: 'InputFieldString',
103
- emits: ['update:modelValue'],
104
- mixins: [mixins.InputFieldMixin],
105
- fieldInfo: {
106
- Category: 'Simple',
107
- Label: '字符串',
108
- Value: 'String',
109
- Extra: [
110
- {
111
- Type: 'String',
112
- Label: '前缀',
113
- Name: 'Options.Prefix',
114
- },
115
- {
116
- Type: 'String',
117
- Label: '后缀',
118
- Name: 'Options.Postfix',
119
- },
120
- {
121
- Type: 'String',
122
- Label: '最小值',
123
- Name: 'MinValue',
124
- },
125
- {
126
- Type: 'String',
127
- Label: '最大值',
128
- Name: 'MaxValue',
129
- },
130
- {
131
- Type: 'Number',
132
- Label: '最大长度',
133
- Name: 'Options.MaxLength',
134
- },
135
- {
136
- Type: 'Labels',
137
- Label: '类型检查',
138
- Name: 'rules',
139
- },
140
- ],
141
- Description: '',
142
- },
143
- props: {
144
- // modelValue: {},
145
- // Field: Object
146
- },
147
- setup(props, { emit }){
148
- let localData = ref(props.fieldData || '');
149
-
150
- watch(() => props.fieldData, (v) => {
151
- localData.value = v.value;
152
- })
153
-
154
- const maxlength = computed(() => {
155
- if (props.Field && props.Field.Options
156
- && props.Field.Options.MaxLength) {
157
- return props.Field.Options.MaxLength;
158
- }
159
- return '';
160
- });
161
-
162
- watch(localData, () => {
163
- let v = localData.value;
164
- if (typeof props.Field.MinValue !== 'undefined' && props.Field.MinValue > v) {
165
- v = props.Field.MinValue;
166
- }
167
- if (typeof props.Field.MaxValue !== 'undefined' && props.Field.MaxValue < v) {
168
- v = props.Field.MaxValue;
169
- }
170
-
171
- localData.value = v;
172
- })
173
-
174
- const inputEvent = (e) => {
175
- emit('update:modelValue', e);
176
- }
177
-
178
- return {
179
- localData,
180
- maxlength,
181
- inputEvent
182
- }
183
- },
184
- });
185
- </script>
@@ -1,89 +0,0 @@
1
- <template>
2
- <span class="input-field-text">
3
- <div :class="Field.Label ? 'warning-with-label' : 'warning-without-label'" >
4
- <slot name="warning"></slot>
5
- </div>
6
- <span v-if="Field.ReadOnly" class="row no-wrap">
7
- <span
8
- :class="`field-label field-label-readonly ${(Field.Label && Field.Label.trim().length)
9
- ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
10
- v-if="typeof Field.Label !== 'undefined'"
11
- >
12
- <q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
13
- {{Field.Label || ''}}
14
- <span v-if="Field.Required" class="required-mark">*</span>
15
- </span>
16
- <span class="readonly-content" style="white-space: pre-wrap">{{fieldData}}</span>
17
- </span>
18
- <q-input
19
- v-else
20
- type="textarea"
21
- v-model="fieldData"
22
- @input="$emit('input')"
23
- v-bind="$attrs"
24
- hide-bottom-space
25
- :readonly="Field.ReadOnly"
26
- :rows="rows"
27
- :ref="`input_field_validator_${Field.Name || Field.Label}`"
28
- :maxlength="maxlength"
29
- >
30
- <template v-slot:before>
31
- <span
32
- :class="`field-label ${(Field.Label && Field.Label.trim().length)
33
- ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
34
- v-if="typeof Field.Label !== 'undefined'">
35
- <q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
36
- {{Field.Label || ''}}
37
- <span v-if="Field.Required" class="required-mark">*</span>
38
- </span>
39
- </template>
40
- </q-input>
41
- </span>
42
- </template>
43
-
44
- <script>
45
- import { defineComponent } from 'vue';
46
- import mixins from 'free-fe-mixins';
47
-
48
- export default defineComponent({
49
- name: 'InputFieldText',
50
- mixins: [mixins.InputFieldMixin],
51
- fieldInfo: {
52
- Category: 'Simple',
53
- Label: '文本',
54
- Value: 'Text',
55
- Extra: [
56
- {
57
- Type: 'Number',
58
- Label: '最大长度',
59
- Name: 'Options.MaxLength',
60
- },
61
- ],
62
- Description: '',
63
- },
64
- computed: {
65
- rows() {
66
- const contentLines = (this.fieldData && typeof this.fieldData === 'string') ? Math.max((this.fieldData.match(/\n/g) || '').length + 1, this.fieldData.length / 20) : 8;
67
- return (this.Field && this.Field.ReadOnly) ? Math.min(contentLines, 20) : 8;
68
- },
69
- maxlength() {
70
- if (this.Field && this.Field.Options
71
- && this.Field.Options.MaxLength) {
72
- return this.Field.Options.MaxLength;
73
- }
74
-
75
- return '';
76
- },
77
- },
78
- });
79
- </script>
80
-
81
- <style lang="sass" scoped>
82
- @import '../style.sass'
83
-
84
- .q-field__native
85
- min-height: 160px
86
-
87
- .warning-with-label
88
- margin-left: $fieldLabelWidth
89
- </style>
@@ -1,100 +0,0 @@
1
- <template>
2
- <div class="row input-field-file-list combined input-field--readonly">
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
- <q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
8
- {{Field.Label || ''}}
9
- </span>
10
- <q-uploader
11
- multiple
12
- :class="`q-ma-xs`"
13
- ref="uploader"
14
- >
15
- <template v-slot:list="scope">
16
- <div v-if="scope.files.length && Field.AsList"
17
- class="file-list file-list-list">
18
- <q-list>
19
- <q-item
20
- class="file-list-item"
21
- v-for="(file, index) in scope.files" :key="index">
22
- <span class="file-name full-width ellipsis">
23
- {{ file.name }}
24
- <q-tooltip>{{ file.name }}</q-tooltip>
25
- </span>
26
-
27
- <span class="file-size full-width ellipsis">
28
- Size: {{ file.sizeLabel || file.__sizeLabel }}
29
- </span>
30
- </q-item>
31
- </q-list>
32
- </div>
33
-
34
- <div v-if="scope.files.length && !Field.AsList"
35
- class="file-list file-list-card row items-start justify-start q-gutter-xl">
36
- <q-card
37
- flat
38
- class="file-list-item"
39
- v-for="(file, index) in scope.files" :key="index">
40
- <q-img class="file-image" :src="fileThumb(file)">
41
- <div class="view-btn-wrapper absolute-full justify-center text-center">
42
- <q-btn
43
- flat
44
- class="view-btn full-height full-width"
45
- @click="preview(file)"
46
- >查看</q-btn>
47
- </div>
48
- </q-img>
49
- <span class="file-name full-width ellipsis">
50
- {{ file.name }}
51
- <q-tooltip>{{ file.name }}</q-tooltip>
52
- </span>
53
-
54
- <span class="file-size full-width ellipsis">
55
- Size: {{ file.sizeLabel || file.__sizeLabel }}
56
- </span>
57
- </q-card>
58
- </div>
59
- </template>
60
- </q-uploader>
61
- <q-dialog class="image-preview-dialog"
62
- flat
63
- full-width full-height v-model="showPreview"
64
- style="background: rgba(0,0,0,0)">
65
- <div class="image-preview">
66
- <q-img contain :src="previewFile"
67
- @click="showPreview=false"
68
- style="height: 100%; max-width: 100%;"></q-img>
69
- </div>
70
- </q-dialog>
71
- </div>
72
- </template>
73
-
74
- <script>
75
- import { defineComponent } from 'vue';
76
- import mixnins from 'free-fe-mixins';
77
-
78
- export default defineComponent({
79
- name: 'InputFieldUltimateFile',
80
- mixins: [mixnins.UploaderMixin, mixnins.InputFieldMixin],
81
- fieldInfo: {
82
- Category: 'Upload',
83
- Label: '上传文件',
84
- Value: 'UltimateFile',
85
- Description: '',
86
- },
87
- watch: {
88
- fieldData() {
89
- if (this.fieldData) {
90
- this.$refs.uploader.files = this.fieldData;
91
- }
92
- },
93
- },
94
- });
95
- </script>
96
-
97
- <style lang="sass">
98
- .q-uploader__header
99
- display: none
100
- </style>
@@ -1,124 +0,0 @@
1
- <template>
2
- <span class="input-field-year simple-field row items-center no-wrap">
3
- <q-select
4
- v-model="fieldData"
5
- hide-bottom-space
6
- :options="yearOptions"
7
- :readonly="Field.ReadOnly"
8
- @input="$emit('input')"
9
- :ref="`input_field_validator_${Field.Name || Field.Label}`"
10
- map-options
11
- :label="Field.Placeholder"
12
- emit-value
13
- v-bind="$attrs"
14
- >
15
- <template v-slot:before v-if="typeof Field.Label !== 'undefined'">
16
- <span
17
- :class="`field-label ${(Field.Label && Field.Label.trim().length)
18
- ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`">
19
- <q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
20
- {{Field.Label || ''}}
21
- <span v-if="Field.Required" class="required-mark">*</span>
22
- </span>
23
- </template>
24
- </q-select>
25
- <slot name="warning"></slot>
26
- </span>
27
- </template>
28
-
29
- <script>
30
- import { defineComponent } from 'vue';
31
- import mixins from 'free-fe-mixins';
32
-
33
- export default defineComponent({
34
- name: 'InputFieldYear',
35
- mixins: [mixins.InputFieldMixin],
36
- fieldInfo: {
37
- Category: 'DateTime',
38
- Label: '年份',
39
- Value: 'Year',
40
- Extra: [
41
- {
42
- Type: 'String',
43
- Label: '最小值',
44
- Name: 'MinValue',
45
- },
46
- {
47
- Type: 'String',
48
- Label: '最大值',
49
- Name: 'MaxValue',
50
- },
51
- {
52
- Type: 'Boolean',
53
- Label: '最大至“现在”',
54
- Name: 'Info.TillNow',
55
- },
56
- {
57
- Type: 'Boolean',
58
- Label: '最小从“现在”',
59
- Name: 'Info.FromNow',
60
- },
61
- {
62
- Type: 'DynamicList',
63
- Label: '选项',
64
- Name: 'Options',
65
- Options: {
66
- Columns: [
67
- {
68
- Label: 'Year',
69
- Name: 'Value',
70
- },
71
- {
72
- Label: 'Extra',
73
- Name: 'Extra',
74
- Type: 'FieldList',
75
- Options: {
76
- Columns: [
77
- {
78
- Label: '#',
79
- Name: 'Index',
80
- },
81
- {
82
- Label: '名称',
83
- Name: 'Name',
84
- },
85
- {
86
- Label: '标题',
87
- Name: 'Label',
88
- },
89
- ],
90
- },
91
- },
92
- ],
93
- },
94
- },
95
- ],
96
- Description: '',
97
- },
98
- computed: {
99
- yearOptions() {
100
- if (this.Field.Type !== 'Year') return [];
101
-
102
- if (this.Field.Options && Array.isArray(this.Field.Options)) {
103
- return this.Field.Options;
104
- }
105
-
106
- let minYear = 1900;
107
- let maxYear = Date.now().year;
108
-
109
- if (this.Field.MinValue && Number(this.Field.MinValue)) {
110
- minYear = Number(this.Field.MinValue);
111
- }
112
- if (this.Field.MaxValue && Number(this.Field.MaxValue)) {
113
- maxYear = Number(this.Field.MaxValue);
114
- }
115
-
116
- const options = [];
117
- for (let i = minYear; i <= maxYear; i += 1) {
118
- options.push(i);
119
- }
120
- return options;
121
- },
122
- },
123
- });
124
- </script>