free-fe-core-modules 0.0.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.
Files changed (112) hide show
  1. package/README.md +7 -0
  2. package/components/.gitkeep +0 -0
  3. package/components/Basic/BreadCrumbs.vue +87 -0
  4. package/components/Basic/EIcon.vue +84 -0
  5. package/components/Basic/LeveledMenus.vue +92 -0
  6. package/components/Basic/SummaryHead.vue +312 -0
  7. package/components/Dialog/BasicDialog.vue +442 -0
  8. package/components/Dialog/index.js +38 -0
  9. package/components/Dialog/index1.js +49 -0
  10. package/components/FloatingWindow/index.vue +140 -0
  11. package/components/SelectLocales/index.vue +47 -0
  12. package/components/SlidingCarousel/index.vue +86 -0
  13. package/components/SlidingNews/index.vue +138 -0
  14. package/components/StickyButtons/index.vue +98 -0
  15. package/components/ThemeSwitch/index.vue +77 -0
  16. package/field-components/Display/index.js +3 -0
  17. package/field-components/Fields/AgreementCheck.vue +161 -0
  18. package/field-components/Fields/ApiCall.vue +139 -0
  19. package/field-components/Fields/Boolean.vue +112 -0
  20. package/field-components/Fields/Category.vue +33 -0
  21. package/field-components/Fields/Check.vue +131 -0
  22. package/field-components/Fields/Customize.vue +103 -0
  23. package/field-components/Fields/Date.vue +142 -0
  24. package/field-components/Fields/DateRange.vue +199 -0
  25. package/field-components/Fields/DynamicList.vue +575 -0
  26. package/field-components/Fields/FieldEditor.vue +379 -0
  27. package/field-components/Fields/File.vue +382 -0
  28. package/field-components/Fields/FileList.vue +405 -0
  29. package/field-components/Fields/FileListCombined.vue +142 -0
  30. package/field-components/Fields/FixedList.vue +372 -0
  31. package/field-components/Fields/Image.vue +328 -0
  32. package/field-components/Fields/ImageList.vue +285 -0
  33. package/field-components/Fields/ImageListCombined.vue +76 -0
  34. package/field-components/Fields/InputFieldList.vue +299 -0
  35. package/field-components/Fields/Labels.vue +182 -0
  36. package/field-components/Fields/MixedTable.vue +367 -0
  37. package/field-components/Fields/Number.vue +247 -0
  38. package/field-components/Fields/Password.vue +79 -0
  39. package/field-components/Fields/Permission.vue +83 -0
  40. package/field-components/Fields/PermissionEditor.vue +205 -0
  41. package/field-components/Fields/QueryFilters.vue +162 -0
  42. package/field-components/Fields/RadioList.vue +81 -0
  43. package/field-components/Fields/Rich.vue +369 -0
  44. package/field-components/Fields/Search.vue +499 -0
  45. package/field-components/Fields/Select.vue +376 -0
  46. package/field-components/Fields/SelectionChain.vue +198 -0
  47. package/field-components/Fields/Separator.vue +26 -0
  48. package/field-components/Fields/SingleList.vue +125 -0
  49. package/field-components/Fields/Static.vue +22 -0
  50. package/field-components/Fields/String.vue +185 -0
  51. package/field-components/Fields/Text.vue +89 -0
  52. package/field-components/Fields/Time.vue +160 -0
  53. package/field-components/Fields/TimeRange.vue +348 -0
  54. package/field-components/Fields/UltimateFile.vue +100 -0
  55. package/field-components/Fields/Year.vue +124 -0
  56. package/field-components/Fields/YearRange.vue +188 -0
  57. package/field-components/Fields/components/FieldTypeOptions.vue +248 -0
  58. package/field-components/Fields/index.js +117 -0
  59. package/field-components/components/FieldComponents.vue +246 -0
  60. package/field-components/index.js +13 -0
  61. package/field-components/style.sass +11 -0
  62. package/free-fields/AutoHide.js +66 -0
  63. package/free-fields/CenterContent.js +15 -0
  64. package/free-fields/Draggable.js +30 -0
  65. package/free-fields/Droppable.js +114 -0
  66. package/free-fields/EditableString.js +63 -0
  67. package/free-fields/FieldCategory.js +83 -0
  68. package/free-fields/FieldTypeSelect.js +94 -0
  69. package/free-fields/fieldEditors/arrayEditor.js +3 -0
  70. package/free-fields/fieldEditors/boolEditor.js +22 -0
  71. package/free-fields/fieldEditors/dateEditor.js +23 -0
  72. package/free-fields/fieldEditors/datetimeEditor.js +23 -0
  73. package/free-fields/fieldEditors/index.js +21 -0
  74. package/free-fields/fieldEditors/jsonEditor.js +371 -0
  75. package/free-fields/fieldEditors/labeledField.js +74 -0
  76. package/free-fields/fieldEditors/numberEditor.js +51 -0
  77. package/free-fields/fieldEditors/objectEditor.js +3 -0
  78. package/free-fields/fieldEditors/selectEditor.js +0 -0
  79. package/free-fields/fieldEditors/stringEditor.js +49 -0
  80. package/free-fields/fieldEditors/textEditor.js +50 -0
  81. package/free-fields/fieldEditors/timeEditor.js +23 -0
  82. package/free-fields/index.js +402 -0
  83. package/i18n/en-us/index.js +73 -0
  84. package/i18n/fields/en-us/index.js +9 -0
  85. package/i18n/fields/zh-cn/index.js +9 -0
  86. package/i18n/zh-cn/index.js +73 -0
  87. package/index.js +367 -0
  88. package/package.json +11 -0
  89. package/router/dict/api.js +18 -0
  90. package/router/dict/data.js +48 -0
  91. package/router/dict/index.js +7 -0
  92. package/router/error/api.js +14 -0
  93. package/router/error/data.js +33 -0
  94. package/router/error/index.js +9 -0
  95. package/router/index.js +13 -0
  96. package/router/menu/api.js +24 -0
  97. package/router/menu/data.js +85 -0
  98. package/router/menu/index.js +7 -0
  99. package/router/system/api.js +10 -0
  100. package/router/system/data.js +46 -0
  101. package/router/system/index.js +7 -0
  102. package/stores/index.js +17 -0
  103. package/stores/module-mourning/actions.js +3 -0
  104. package/stores/module-mourning/getters.js +1 -0
  105. package/stores/module-mourning/index.js +11 -0
  106. package/stores/module-mourning/state.js +3 -0
  107. package/stores/mourning.js +3 -0
  108. package/view/dict/index.vue +284 -0
  109. package/view/error/list.vue +197 -0
  110. package/view/menu/index.vue +332 -0
  111. package/view/mourning/mourning.vue +45 -0
  112. package/view/system/index.vue +149 -0
@@ -0,0 +1,112 @@
1
+ <template>
2
+ <span class="simple-field input-field-boolean row items-center no-wrap">
3
+ <span
4
+ :class="`field-label ${(Field.Label && Field.Label.trim().length)
5
+ ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
6
+ v-if="Field.showLabel && !Field.dense && 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
+ <span v-else-if="!Field.showLabel && !Field.dense" class="field-label-empty"></span>
19
+
20
+ <q-toggle
21
+ v-model="fieldData"
22
+ :label="!Field.showLabel ? Field.Label : ''"
23
+ @input="$emit('input')"
24
+ :disable="Field.ReadOnly"
25
+ v-bind="$attrs">
26
+ <q-tooltip v-if="Field.Description">{{Field.Description}}</q-tooltip>
27
+ </q-toggle>
28
+ <slot name="warning"></slot>
29
+ </span>
30
+ </template>
31
+
32
+ <script>
33
+ import { defineComponent } from 'vue';
34
+ import mixins from 'free-fe-mixins';
35
+
36
+ export default defineComponent({
37
+ name: 'InputFieldBoolean',
38
+ mixins: [mixins.InputFieldMixin],
39
+ fieldInfo: {
40
+ Category: 'Simple',
41
+ Label: '开关',
42
+ Value: 'Boolean',
43
+ Extra: [
44
+ {
45
+ Type: 'FixedList',
46
+ Label: '选项',
47
+ Name: 'Options',
48
+ Options: {
49
+ Columns: [
50
+ {
51
+ Label: 'Label',
52
+ Name: 'Label',
53
+ ReadOnly: true,
54
+ },
55
+ {
56
+ Label: 'Value',
57
+ Name: 'Value',
58
+ ReadOnly: true,
59
+ },
60
+ {
61
+ Label: 'Extra',
62
+ Name: 'Extra',
63
+ Type: 'FieldList',
64
+ Options: {
65
+ Columns: [
66
+ {
67
+ Label: '#',
68
+ Name: 'Index',
69
+ },
70
+ {
71
+ Label: '名称',
72
+ Name: 'Name',
73
+ },
74
+ {
75
+ Label: '标题',
76
+ Name: 'Label',
77
+ },
78
+ ],
79
+ },
80
+ },
81
+ ],
82
+ Default: [
83
+ {
84
+ Label: '开',
85
+ Value: true,
86
+ Extra: [],
87
+ },
88
+ {
89
+ Label: '关',
90
+ Value: false,
91
+ Extra: [],
92
+ },
93
+ ],
94
+ },
95
+ },
96
+ ],
97
+ Description: '',
98
+ },
99
+ watch: {
100
+ fieldData() {
101
+ if (!this.fieldData) {
102
+ this.fieldData = false;
103
+ }
104
+ },
105
+ },
106
+ created() {
107
+ if (!this.fieldData) {
108
+ this.fieldData = false;
109
+ }
110
+ },
111
+ });
112
+ </script>
@@ -0,0 +1,33 @@
1
+ <template>
2
+ <div
3
+ v-if="typeof Field.Label !== 'undefined'"
4
+ v-bind="$attrs"
5
+ class="input-field-category simple-field row items-center no-wrap">
6
+ <span class="label">{{Field.Label}}</span>
7
+ <slot name="warning"></slot>
8
+ </div>
9
+ </template>
10
+
11
+ <script>
12
+ import { defineComponent } from 'vue';
13
+ import mixins from 'free-fe-mixins';
14
+
15
+ export default defineComponent({
16
+ name: 'InputFieldCategory',
17
+ mixins: [mixins.InputFieldMixin],
18
+ fieldInfo: {
19
+ Category: 'Static',
20
+ Label: '字段分类',
21
+ Value: 'Category',
22
+ Description: '',
23
+ },
24
+ });
25
+ </script>
26
+
27
+ <style lang="sass" scoped>
28
+ .field-category
29
+ font-size: 14px
30
+ font-weight: bold
31
+ margin-top: 12px
32
+ margin-bottom: 12px
33
+ </style>
@@ -0,0 +1,131 @@
1
+ <template>
2
+ <span class="simple-field input-field-check row items-center no-wrap">
3
+ <span>
4
+ <span
5
+ :class="`field-label ${(Field.Label && Field.Label.trim().length)
6
+ ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
7
+ v-if="Field.showLabel && !Field.dense && typeof Field.Label !== 'undefined'"
8
+ >
9
+ <q-tooltip
10
+ v-if="Field.Description"
11
+ anchor="top right"
12
+ >{{Field.Description}}</q-tooltip>
13
+ {{Field.Label || ''}}
14
+ <span
15
+ v-if="Field.Required"
16
+ class="required-mark"
17
+ >*</span>
18
+ </span>
19
+ <span v-else-if="!Field.showLabel && !Field.dense" class="field-label-empty"></span>
20
+
21
+ <q-checkbox
22
+ @input="$emit('input')"
23
+ :disable="Field.ReadOnly"
24
+ v-bind="$attrs"
25
+ :label="!Field.showLabel ? Field.Label : ''"
26
+ v-model="fieldData"
27
+ />
28
+ </span>
29
+ <slot name="warning"></slot>
30
+ </span>
31
+ </template>
32
+
33
+ <script>
34
+ import { defineComponent } from 'vue';
35
+ import mixins from 'free-fe-mixins';
36
+
37
+ export default defineComponent({
38
+ name: 'InputFieldCheck',
39
+ mixins: [mixins.InputFieldMixin],
40
+ fieldInfo: {
41
+ Category: 'Simple',
42
+ Label: '勾选',
43
+ Value: 'Check',
44
+ Extra: [
45
+ {
46
+ Type: 'FixedList',
47
+ Label: '选项',
48
+ Name: 'Options',
49
+ Options: {
50
+ Columns: [
51
+ {
52
+ Label: 'Label',
53
+ Name: 'Label',
54
+ ReadOnly: true,
55
+ },
56
+ {
57
+ Label: 'Value',
58
+ Name: 'Value',
59
+ ReadOnly: true,
60
+ },
61
+ {
62
+ Label: 'Extra',
63
+ Name: 'Extra',
64
+ Type: 'FieldList',
65
+ Options: {
66
+ Columns: [
67
+ {
68
+ Label: '#',
69
+ Name: 'Index',
70
+ },
71
+ {
72
+ Label: '名称',
73
+ Name: 'Name',
74
+ },
75
+ {
76
+ Label: '标题',
77
+ Name: 'Label',
78
+ },
79
+ ],
80
+ },
81
+ },
82
+ ],
83
+ Default: [
84
+ {
85
+ Label: '选中',
86
+ Value: true,
87
+ Extra: [],
88
+ },
89
+ {
90
+ Label: '未选',
91
+ Value: false,
92
+ Extra: [],
93
+ },
94
+ ],
95
+ },
96
+ },
97
+ ],
98
+ Description: '',
99
+ },
100
+ watch: {
101
+ fieldData() {
102
+ if (!this.fieldData) {
103
+ this.fieldData = false;
104
+ }
105
+ },
106
+ },
107
+ created() {
108
+ if (!this.fieldData) {
109
+ this.fieldData = false;
110
+ }
111
+ },
112
+ methods: {
113
+ validate() {
114
+ if (this.Field.Required) return typeof this.fieldData !== 'undefined';
115
+
116
+ const rules = Array.isArray(typeof this.Field.Rules) ? this.Field.Rules : [this.Field.Rules];
117
+
118
+ let isValid = true;
119
+ for (let i = 0; i < rules.length; i += 1) {
120
+ const r = rules[i];
121
+
122
+ if (typeof r === 'function') {
123
+ isValid = isValid && r(this.fieldData);
124
+ }
125
+ }
126
+
127
+ return isValid;
128
+ },
129
+ },
130
+ });
131
+ </script>
@@ -0,0 +1,103 @@
1
+ <template>
2
+ <div class="input-field-customize">
3
+ <span
4
+ :class="`field-label field-label-readonly ${(Field.Label && Field.Label.trim().length)
5
+ ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
6
+ v-if="Field.Label"
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
+ <span ref="content"></span>
20
+
21
+ <slot name="warning"></slot>
22
+ </div>
23
+ </template>
24
+
25
+ <script>
26
+ import { defineComponent } from 'vue';
27
+ import mixins from 'free-fe-mixins';
28
+
29
+ export default defineComponent({
30
+ name: 'InputFieldCustomize',
31
+ mixins: [mixins.InputFieldMixin],
32
+ fieldInfo: {
33
+ Category: 'Advanced',
34
+ Label: '自定义模板',
35
+ Value: 'Customize',
36
+ Extra: [
37
+ {
38
+ Type: 'Rich',
39
+ Label: '模板',
40
+ enableField: true,
41
+ Name: 'Options.Template',
42
+ },
43
+ ],
44
+ Description: '',
45
+ },
46
+ watch: {
47
+ htmlContent() {
48
+ this.$refs.content.innerHTML = this.htmlContent;
49
+ },
50
+ // fieldData() {
51
+ // if (this.fieldData && this.$refs.content) {
52
+ // this.$refs.content.innerHTML = this.generateContent(this.fieldData);
53
+ // }
54
+ // },
55
+ },
56
+ mounted() {
57
+ if (this.htmlContent) {
58
+ this.$refs.content.innerHTML = this.htmlContent;
59
+ }
60
+ },
61
+ computed: {
62
+ htmlContent() {
63
+ const template = this.Field && this.Field.Options ? this.Field.Options.Template : '';
64
+ if (!template) return '';
65
+
66
+ if (!this.fieldData) return template;
67
+
68
+ const replaced = template.replace(
69
+ /<efield>{([^<]*)}<\/efield>/g,
70
+ (match, name) => {
71
+ if (this.fieldData[name]) {
72
+ // could be options
73
+ if (this.fieldData.StepsDefinition) {
74
+ const cStep = this.fieldData.StepsDefinition.find(
75
+ (s) => s.Index === this.fieldData.CurrentStep,
76
+ );
77
+ if (cStep && cStep.Fields) {
78
+ const fld = cStep.Fields.find((f) => f.Name === name);
79
+
80
+ if (fld && fld.Options && Array.isArray(fld.Options)) {
81
+ const fVal = fld.Options.find(
82
+ (o) => o.Value === this.fieldData[name],
83
+ );
84
+
85
+ if (fVal && fVal.Label) {
86
+ return fVal.Label;
87
+ }
88
+ }
89
+ }
90
+ }
91
+
92
+ // otherwise.
93
+ return this.fieldData[name];
94
+ }
95
+ return '';
96
+ },
97
+ );
98
+
99
+ return replaced;
100
+ },
101
+ },
102
+ });
103
+ </script>
@@ -0,0 +1,142 @@
1
+ <template>
2
+ <span class="simple-field input-field-date row items-center no-wrap">
3
+ <span v-if="Field.ReadOnly">
4
+ <span
5
+ :class="`field-label field-label-readonly ${(Field.Label && Field.Label.trim().length)
6
+ ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`"
7
+ v-if="typeof Field.Label !== 'undefined'">
8
+ <q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
9
+ {{Field.Label || ''}}
10
+ <span v-if="Field.Required" class="required-mark">*</span>
11
+ </span>
12
+ <span class="readonly-content">{{localData}}</span>
13
+ </span>
14
+ <q-input
15
+ v-else
16
+ v-model="localData"
17
+ hide-bottom-space
18
+ :readonly="Field.ReadOnly"
19
+ v-bind="$attrs"
20
+ @input="$emit('input')"
21
+ :ref="`input_field_validator_date`"
22
+ >
23
+ <template v-slot:before v-if="typeof Field.Label !== 'undefined'">
24
+ <span
25
+ :class="`field-label ${(Field.Label && Field.Label.trim().length)
26
+ ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`">
27
+ <q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
28
+ {{Field.Label || ''}}
29
+ <span v-if="Field.Required" class="required-mark">*</span>
30
+ </span>
31
+ </template>
32
+ <q-popup-proxy
33
+ v-if="!Field.ReadOnly"
34
+ ref="qDateProxy"
35
+ transition-show="scale"
36
+ transition-hide="scale"
37
+ >
38
+ <span class="row">
39
+ <q-date
40
+ v-model="localData"
41
+ v-bind="$attrs"
42
+ :options="dateOptions"
43
+ today-btn
44
+ mask="YYYY-MM-DD"
45
+ :locale="locale"
46
+ @input="() => {$refs.qDateProxy.hide();$emit('input')}"
47
+ />
48
+ </span>
49
+ </q-popup-proxy>
50
+ <template v-slot:append>
51
+ <q-icon name="event" class="cursor-pointer">
52
+ </q-icon>
53
+ </template>
54
+ </q-input>
55
+ <slot name="warning"></slot>
56
+ </span>
57
+ </template>
58
+
59
+ <script>
60
+ import { defineComponent } from 'vue';
61
+ import mixins from 'free-fe-mixins';
62
+
63
+ export default defineComponent({
64
+ name: 'InputFieldDate',
65
+ mixins: [mixins.InputFieldMixin],
66
+ fieldInfo: {
67
+ Category: 'DateTime',
68
+ Label: '日期',
69
+ Value: 'Date',
70
+ Extra: [
71
+ {
72
+ Type: 'String',
73
+ Label: '最小值',
74
+ Name: 'MinValue',
75
+ },
76
+ {
77
+ Type: 'String',
78
+ Label: '最大值',
79
+ Name: 'MaxValue',
80
+ },
81
+ {
82
+ Type: 'Boolean',
83
+ Label: '最大至“现在”',
84
+ Name: 'Info.TillNow',
85
+ },
86
+ {
87
+ Type: 'Boolean',
88
+ Label: '最小从“现在”',
89
+ Name: 'Info.FromNow',
90
+ },
91
+ ],
92
+ Description: '',
93
+ },
94
+ data() {
95
+ return {
96
+ localData: '',
97
+ };
98
+ },
99
+ watch: {
100
+ fieldData() {
101
+ if (!this.fieldData) {
102
+ this.localData = '';
103
+ return;
104
+ }
105
+ this.localData = this.$options.filters.normalDate(this.fieldData);
106
+ },
107
+ localData() {
108
+ this.fieldData = this.localData;
109
+ },
110
+ },
111
+ computed: {
112
+ locale() {
113
+ return this.ctx.config.locales.find(
114
+ (l) => l.locale === (this.ctx.config.locale || this.ctx.config.defaultLocale),
115
+ ).calendar;
116
+ },
117
+ dateOptions() {
118
+ if (this.Field.Options && (typeof this.Field.Options === 'function' || Array.isArray(this.Field.Options))) return this.Field.Options;
119
+
120
+ let minDate = '1900/01/01';
121
+ let maxDate = '2100/12/31';
122
+
123
+ if (this.Field.MinValue) {
124
+ minDate = this.Field.MinValue;
125
+ }
126
+
127
+ if (this.Field.MaxValue === 'now') {
128
+ maxDate = new Date().toLocaleDateString();
129
+ } else if (this.Field.MaxValue) {
130
+ maxDate = this.Field.MaxValue;
131
+ }
132
+
133
+ return (date) => date >= minDate && date <= maxDate;
134
+ },
135
+ },
136
+ });
137
+ </script>
138
+
139
+ <style lang="sass" scoped>
140
+ .q-field--with-bottom
141
+ padding-bottom: 0
142
+ </style>