free-fe-core-modules 0.0.2 → 0.0.3

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 +10 -1
  4. package/components/Dialog/BasicDialog.vue +1 -1
  5. package/components/SlidingCarousel/index.vue +0 -1
  6. package/components/SlidingNews/index.vue +0 -1
  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/File.vue +1 -1
  19. package/{field-components → free-field}/Fields/FileList.vue +1 -1
  20. package/{field-components → free-field}/Fields/FileListCombined.vue +1 -1
  21. package/{field-components → free-field}/Fields/FixedList.vue +78 -83
  22. package/{field-components → free-field}/Fields/ImageList.vue +1 -1
  23. package/{field-components → free-field}/Fields/ImageListCombined.vue +1 -1
  24. package/free-field/Fields/InputFieldList.vue +324 -0
  25. package/{field-components → free-field}/Fields/Labels.vue +24 -15
  26. package/{field-components → free-field}/Fields/MixedTable.vue +53 -61
  27. package/free-field/Fields/Number.js +167 -0
  28. package/free-field/Fields/Password.js +81 -0
  29. package/{field-components → free-field}/Fields/Permission.vue +17 -13
  30. package/{field-components → free-field}/Fields/PermissionEditor.vue +63 -105
  31. package/{field-components → free-field}/Fields/QueryFilters.vue +65 -48
  32. package/{field-components → free-field}/Fields/RadioList.vue +36 -12
  33. package/{field-components → free-field}/Fields/Rich.vue +104 -114
  34. package/{field-components → free-field}/Fields/Search.vue +35 -26
  35. package/{field-components → free-field}/Fields/Select.vue +116 -87
  36. package/{field-components → free-field}/Fields/SelectionChain.vue +89 -67
  37. package/{field-components/Fields/Separator.vue → free-field/Fields/Separator.js} +11 -16
  38. package/{field-components → free-field}/Fields/SingleList.vue +27 -21
  39. package/free-field/Fields/Static.js +27 -0
  40. package/free-field/Fields/String.js +105 -0
  41. package/free-field/Fields/Text.js +80 -0
  42. package/{field-components → free-field}/Fields/Time.vue +59 -43
  43. package/{field-components → free-field}/Fields/TimeRange.vue +107 -92
  44. package/{field-components → free-field}/Fields/UltimateFile.vue +1 -1
  45. package/free-field/Fields/Year.js +137 -0
  46. package/{field-components → free-field}/Fields/YearRange.vue +63 -73
  47. package/{field-components → free-field}/Fields/index.js +16 -18
  48. package/free-field/composible/fieldWrapper.js +221 -0
  49. package/free-field/composible/freeFieldLabel.js +22 -0
  50. package/free-field/composible/readonlyContent.js +36 -0
  51. package/free-field/composible/useFileSizeUtils.js +52 -0
  52. package/free-field/composible/useFreeField.js +143 -0
  53. package/{field-components → free-field}/index.js +3 -3
  54. package/i18n/en-us/index.js +1 -1
  55. package/i18n/zh-cn/index.js +1 -1
  56. package/index.js +1 -4
  57. package/package.json +1 -1
  58. package/router/error/data.js +4 -1
  59. package/view/dict/index.vue +13 -2
  60. package/view/error/list.vue +22 -14
  61. package/view/menu/index.vue +19 -4
  62. package/view/system/index.vue +15 -2
  63. package/field-components/Fields/AgreementCheck.vue +0 -161
  64. package/field-components/Fields/ApiCall.vue +0 -139
  65. package/field-components/Fields/Category.vue +0 -33
  66. package/field-components/Fields/Check.vue +0 -131
  67. package/field-components/Fields/Customize.vue +0 -103
  68. package/field-components/Fields/Date.vue +0 -142
  69. package/field-components/Fields/DateRange.vue +0 -199
  70. package/field-components/Fields/DynamicList.vue +0 -575
  71. package/field-components/Fields/FieldEditor.vue +0 -379
  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/Year.vue +0 -124
  79. package/field-components/Fields/components/FieldTypeOptions.vue +0 -248
  80. package/field-components/components/FieldComponents.vue +0 -246
  81. package/free-fields/AutoHide.js +0 -66
  82. package/free-fields/CenterContent.js +0 -15
  83. package/free-fields/Draggable.js +0 -30
  84. package/free-fields/Droppable.js +0 -114
  85. package/free-fields/EditableString.js +0 -63
  86. package/free-fields/FieldCategory.js +0 -83
  87. package/free-fields/FieldTypeSelect.js +0 -94
  88. package/free-fields/fieldEditors/arrayEditor.js +0 -3
  89. package/free-fields/fieldEditors/boolEditor.js +0 -22
  90. package/free-fields/fieldEditors/dateEditor.js +0 -23
  91. package/free-fields/fieldEditors/datetimeEditor.js +0 -23
  92. package/free-fields/fieldEditors/index.js +0 -21
  93. package/free-fields/fieldEditors/jsonEditor.js +0 -371
  94. package/free-fields/fieldEditors/labeledField.js +0 -74
  95. package/free-fields/fieldEditors/numberEditor.js +0 -51
  96. package/free-fields/fieldEditors/objectEditor.js +0 -3
  97. package/free-fields/fieldEditors/selectEditor.js +0 -0
  98. package/free-fields/fieldEditors/stringEditor.js +0 -49
  99. package/free-fields/fieldEditors/textEditor.js +0 -50
  100. package/free-fields/fieldEditors/timeEditor.js +0 -23
  101. package/free-fields/index.js +0 -402
  102. /package/{field-components → free-field}/Fields/Image.vue +0 -0
  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,83 @@ 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
+ console.log('hasThis changed', v)
141
+ if (v) {
142
+ // checked from unchecked
143
+ fieldData.value = fieldData.value || {};
144
+ } else {
145
+ // unchecked from checked
146
+ fieldData.value = undefined;
147
+ setFieldData(undefined);
154
148
  }
149
+ scopeChanged();
150
+ })
155
151
 
156
- this.$emit('changed', this.data);
157
- },
158
- scopeChanged() {
159
- this.$emit('changed', this.data);
160
- },
152
+ return {
153
+ fieldData: fieldData.value,
154
+ hasThis,
155
+ childUpdated,
156
+ scopeChanged,
157
+ permissionData,
158
+ childrenStepService,
159
+ childrenNormalService,
160
+ };
161
161
  },
162
162
  });
163
163
  </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>