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
@@ -27,7 +27,7 @@
27
27
  Name: `Scope.${scope.Field}`,
28
28
  Options: scope.Options || [],
29
29
  }"
30
- :values="data"
30
+ :values="fieldData"
31
31
  @input="scopeChanged"
32
32
  />
33
33
  </div>
@@ -65,15 +65,15 @@
65
65
  </template>
66
66
 
67
67
  <script>
68
- import { defineComponent } from 'vue';
69
- // import mixins from 'free-fe-mixins';
68
+ import { defineComponent, ref, watchEffect, watch, computed } from 'vue';
69
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
70
70
 
71
71
  export default defineComponent({
72
72
  name: 'PermissionEditor',
73
- // mixins: [mixins.InputFieldMixin],
74
73
  emits:['changed'],
75
74
  components: {},
76
75
  props: {
76
+ ...freeFieldProps,
77
77
  Code: { type: String, default: '' },
78
78
  Service: { type: Object },
79
79
  Permission: { type: Object },
@@ -81,125 +81,82 @@ export default defineComponent({
81
81
  readonly: { type: Boolean, default: false },
82
82
  noDataScope: { type: Boolean, default: false },
83
83
  },
84
- data() {
85
- return {
86
- data: undefined,
87
- hasThis: false,
88
- permScope: {},
84
+ setup(props, { emit }) {
85
+ const { fieldData, setFieldData } = useFreeField(props);
86
+
87
+ const hasThis = ref(false);
88
+
89
+ watchEffect(() => {
90
+ hasThis.value = !!fieldData.value;
91
+ })
92
+
93
+ const scopeChanged = () => {
94
+ emit('changed', fieldData.value);
89
95
  };
90
- },
91
- watch: {
92
- data() {
93
- this.hasThis = !!this.data;
94
- },
95
- hasThis() {
96
- if (this.hasThis) {
97
- // checked from unchecked
98
- this.data = this.data || {};
99
96
 
100
- this.$emit('changed', this.data);
101
- } else {
102
- // unchecked from checked
103
- this.data = undefined;
104
- this.$emit('changed', this.data);
97
+ const childUpdated = (v, f) => {
98
+ if (!v && fieldData.value && fieldData.value[f]) {
99
+ fieldData.value[f] = undefined;
100
+ } else if (v) {
101
+ fieldData.value = fieldData.value || {};
102
+ fieldData.value[f] = v;
105
103
  }
106
- },
107
- Permission() {
108
- this.data = this.Permission;
109
- },
110
- },
111
- computed: {
112
- permissionData() {
113
- return (service) => (this.data ? this.data[service] : undefined);
114
- },
115
- childrenService() {
116
- if (!this.Service) return [];
104
+
105
+ scopeChanged();
106
+ };
107
+
108
+ const permissionData = (service) => (fieldData.value ? fieldData.value[service] : undefined);
109
+
110
+ const childrenService = () => {
111
+ if (!props.Service) return [];
117
112
  const children = [];
118
113
 
119
- for (let i = 0; i < Object.keys(this.Service).length; i += 1) {
120
- const sk = Object.keys(this.Service)[i];
121
- const service = this.Service[sk];
114
+ for (let i = 0; i < Object.keys(props.Service).length; i += 1) {
115
+ const sk = Object.keys(props.Service)[i];
116
+ const service = props.Service[sk];
122
117
 
123
118
  if (
124
119
  typeof service === 'object'
125
120
  && !Array.isArray(service)
126
121
  && ['scope'].indexOf(service) < 0
127
122
  ) {
128
- children.push({ Name: sk, Index: this.Service[sk].Index || 0 });
123
+ children.push({ Name: sk, Index: props.Service[sk].Index || 0 });
129
124
  }
130
125
  }
131
126
  return children.sort(
132
127
  (a, b) => (a ? a.Index : 0) - (b ? b.Index : 0),
133
128
  ).map((cdn) => cdn.Name);
134
- },
135
- childrenStepService() {
136
- return this.childrenService.filter((s) => Number(s));
137
- },
138
- childrenNormalService() {
139
- return this.childrenService.filter((s) => !Number(s));
140
- },
141
- },
142
- created() {
143
- this.data = this.Permission;
144
- },
145
- methods: {
146
- childUpdated(v, f) {
147
- if (!v && this.data && this.data[f]) {
148
- // this.$set(this.data, f, undefined);
149
- this.data[f] = undefined;
150
- } else if (v) {
151
- this.data = this.data || {};
152
- // this.$set(this.data, f, v);
153
- this.data[f] = v;
129
+ };
130
+
131
+ const childrenStepService = computed(() => childrenService().filter((s) => Number(s)));
132
+
133
+ const childrenNormalService = computed(() => childrenService().filter((s) => !Number(s)));
134
+
135
+ watchEffect(() => {
136
+ fieldData.value = props.Permission;
137
+ })
138
+
139
+ watch(hasThis, (v) => {
140
+ if (v) {
141
+ // checked from unchecked
142
+ fieldData.value = fieldData.value || {};
143
+ } else {
144
+ // unchecked from checked
145
+ fieldData.value = undefined;
146
+ setFieldData(undefined);
154
147
  }
148
+ scopeChanged();
149
+ })
155
150
 
156
- this.$emit('changed', this.data);
157
- },
158
- scopeChanged() {
159
- this.$emit('changed', this.data);
160
- },
151
+ return {
152
+ fieldData: fieldData.value,
153
+ hasThis,
154
+ childUpdated,
155
+ scopeChanged,
156
+ permissionData,
157
+ childrenStepService,
158
+ childrenNormalService,
159
+ };
161
160
  },
162
161
  });
163
162
  </script>
164
- <style lang="sass" scoped>
165
- .input-field-permission-editor
166
- font-size: 12px
167
- padding: 4px
168
- .input-field-permission-title
169
- &.without-scope
170
- height: 35px
171
- .data-scope
172
- margin-left: 32px
173
- .step-number-icon-wrapper
174
- border-radius: 50%
175
- border: 1px solid $grey-7
176
- height: 20px
177
- width: 20px
178
- display: inline-block
179
- vertical-align: top
180
- padding: 0
181
- margin: 0
182
- margin-right: 4px
183
- .step-number-icon
184
- display: block
185
- height: 20px
186
- line-height: 20px
187
- text-align: center
188
- .permission-field
189
- &-steps
190
- margin-left: 32px
191
- &>.input-field-permission-editor
192
- min-height: 180px
193
- min-width: 128px
194
- &-label
195
- margin-left: 32px
196
- &-children
197
- padding: 0
198
- margin-left: 16px
199
- </style>
200
-
201
- <style lang="sass">
202
- .input-field-permission-editor
203
- .permission-field-steps.q-card__section
204
- flex-wrap: wrap !important
205
- </style>
@@ -61,12 +61,11 @@
61
61
  </template>
62
62
 
63
63
  <script>
64
- import { defineComponent } from 'vue';
65
- import mixins from 'free-fe-mixins';
64
+ import { ref, computed, defineComponent, watchEffect } from 'vue';
65
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
66
66
 
67
67
  export default defineComponent({
68
68
  name: 'InputFieldQueryFilters',
69
- mixins: [mixins.InputFieldMixin],
70
69
  emits:['search', 'export'],
71
70
  fieldInfo: {
72
71
  Category: 'Advanced',
@@ -75,49 +74,70 @@ export default defineComponent({
75
74
  Description: '',
76
75
  },
77
76
  props: {
77
+ ...freeFieldProps,
78
78
  dense: { type: Boolean, default: false },
79
79
  canExport: { type: Boolean, default: false },
80
80
  queryData: { type: Object, default: () => ({}) },
81
81
  searchIcon: { type: String, default: 'search' },
82
82
  clearIcon: { type: String, default: 'refresh' },
83
83
  },
84
- data() {
85
- return {
86
- query: {},
87
- queryChanged: false,
88
- hasKw: false,
89
- kwFields: [],
90
- };
91
- },
92
- computed: {
93
- localFields() {
84
+ setup(props, { emit }) {
85
+ if (!props.Field) return {};
86
+
87
+ const { fieldData } = useFreeField(props);
88
+
89
+ const query = ref({});
90
+ const queryChanged = ref(false);
91
+ const hasKw = ref(false);
92
+ const kwFields = ref([]);
93
+
94
+ watchEffect(() => {
95
+ query.value = props.queryData;
96
+ })
97
+
98
+ watchEffect(() => {
99
+ (fieldData.value || []).forEach((fd) => {
100
+ if (
101
+ ['String', 'Text', 'Rich', 'Customize', 'Labels', 'Static'].indexOf(
102
+ fd.Type,
103
+ ) >= 0
104
+ ) {
105
+ if (!fd.Info || !fd.Info.Separate) {
106
+ hasKw.value = true;
107
+ if (fd.Label) {
108
+ kwFields.value.push(fd.Label);
109
+ }
110
+ }
111
+ }
112
+ });
113
+ })
114
+
115
+ const localFields = computed(() => {
94
116
  const fList = [];
95
- let hasKw = false;
96
117
  const kwFields = [];
97
- if (this.fieldData) {
98
- this.fieldData.forEach((fd) => {
118
+ if (fieldData.value) {
119
+ (fieldData.value || []).forEach((fd) => {
120
+ // TODO: should not hardcode these types
99
121
  if (
100
122
  ['String', 'Text', 'Rich', 'Customize', 'Labels', 'Static'].indexOf(
101
123
  fd.Type,
102
124
  ) >= 0
103
125
  ) {
104
126
  if (!fd.Info || !fd.Info.Separate) {
105
- hasKw = true;
106
127
  if (fd.Label) {
107
- // eslint-disable-next-line vue/no-side-effects-in-computed-properties
108
128
  kwFields.push(fd.Label);
109
129
  }
110
130
  } else {
111
131
  // separate string field as selection
112
132
  // TODO: could be other types??
113
133
  fd.Type = 'Select';
114
- if (this.dense) {
134
+ if (props.dense) {
115
135
  delete fd.Label;
116
136
  }
117
137
  fList.push(fd);
118
138
  }
119
139
  } else {
120
- if (this.dense) {
140
+ if (props.dense) {
121
141
  delete fd.Label;
122
142
  }
123
143
  fList.push(fd);
@@ -125,38 +145,35 @@ export default defineComponent({
125
145
  });
126
146
  }
127
147
 
128
- // eslint-disable-next-line vue/no-side-effects-in-computed-properties
129
- this.hasKw = hasKw;
130
- // eslint-disable-next-line vue/no-side-effects-in-computed-properties
131
- this.kwFields = kwFields;
148
+ kwFields.value = kwFields;
132
149
 
133
150
  return fList;
134
- },
135
- },
136
- watch: {
137
- queryData() {
138
- this.query = this.queryData;
139
- },
140
- },
141
- created() {
142
- if (this.queryData && Object.keys(this.queryData).length > 0) {
143
- this.query = this.queryData;
144
- }
145
- },
146
- methods: {
147
- search() {
148
- if (this.queryChanged) {
149
- this.$emit('search', this.query);
150
- this.queryChanged = false;
151
+ });
152
+
153
+
154
+ const search = () => {
155
+ if (queryChanged.value) {
156
+ emit('search', query.value);
157
+ queryChanged.value = false;
151
158
  }
152
- },
153
- clear() {
154
- if (Object.keys(this.query).length) {
155
- this.query = {};
156
- this.$emit('search', {});
157
- this.queryChanged = false;
159
+ };
160
+ const clear = () => {
161
+ if (Object.keys(query.value).length) {
162
+ query.value = {};
163
+ emit('search', {});
164
+ queryChanged.value = false;
158
165
  }
159
- },
166
+ };
167
+
168
+ return {
169
+ query,
170
+ queryChanged,
171
+ hasKw,
172
+ kwFields,
173
+ localFields,
174
+ search,
175
+ clear,
176
+ };
160
177
  },
161
178
  });
162
179
  </script>
@@ -36,8 +36,8 @@
36
36
  >
37
37
  <q-radio
38
38
  class="radio"
39
- v-model="data[Field.Name]"
40
- @input="validate(); $emit('input')"
39
+ v-model="fieldData.value"
40
+ @update:model-value="radioChanged"
41
41
  :val="oValue.Value"
42
42
  :disable="Field.ReadOnly"
43
43
  />
@@ -54,28 +54,52 @@
54
54
  </template>
55
55
 
56
56
  <script>
57
- import { defineComponent } from 'vue';
58
- import mixins from 'free-fe-mixins';
57
+ import { defineComponent, ref } from 'vue';
58
+ import { useFreeField, freeFieldProps } from '../composible/useFreeField';
59
59
 
60
60
  export default defineComponent({
61
61
  name: 'InputFieldRadioList',
62
- mixins: [mixins.InputFieldMixin],
63
62
  fieldInfo: {
64
63
  Category: 'Simple',
65
64
  Label: '展开单选',
66
65
  Value: 'RadioList',
67
66
  Description: '',
68
67
  },
69
- methods: {
70
- validate() {
71
- if (!this.data || !this.Field || !this.Field.Name) {
72
- this.hasError = false;
68
+ props: {
69
+ ...freeFieldProps,
70
+ },
71
+ setup(props, { expose, emit }) {
72
+ if (!props.Field) return {};
73
+
74
+ const { fieldData, setFieldData } = useFreeField(props);
75
+ const hasError = ref(false);
76
+
77
+ const validate = () => {
78
+ if (!props.Field.Name) {
79
+ hasError.value = false;
73
80
  return true;
74
81
  }
75
82
 
76
- this.hasError = typeof this.data[this.Field.Name] === 'undefined';
77
- return !this.hasError;
78
- },
83
+ hasError.value = typeof fieldData.value === 'undefined';
84
+ return !hasError.value;
85
+ }
86
+
87
+ const radioChanged = (v) => {
88
+ validate();
89
+ setFieldData(v, emit);
90
+ };
91
+
92
+ expose({
93
+ validate,
94
+ })
95
+
96
+ return {
97
+ hasError,
98
+ fieldData,
99
+ setFieldData,
100
+ validate,
101
+ radioChanged,
102
+ };
79
103
  },
80
104
  });
81
105
  </script>