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,125 @@
1
+ <template>
2
+ <div class="input-field-single-list row" 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="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
+
19
+ <table flat>
20
+ <thead v-if="Field && Field.Options && Field.Options.Header">
21
+ <tr>
22
+ <td>{{Field.Options.Header}}</td>
23
+ </tr>
24
+ </thead>
25
+ <tbody>
26
+ <tr v-for="(row, index) in localData" :key="index">
27
+ <td>
28
+ {{row}}
29
+ </td>
30
+ </tr>
31
+ </tbody>
32
+ </table>
33
+ </div>
34
+ </template>
35
+
36
+ <script>
37
+ import { defineComponent } from 'vue';
38
+ import mixins from 'free-fe-mixins';
39
+
40
+ export default defineComponent({
41
+ name: 'InputFieldSingleList',
42
+ mixins: [mixins.InputFieldMixin],
43
+ fieldInfo: {
44
+ Category: 'Table',
45
+ Label: '单列表',
46
+ Value: 'SingleList',
47
+ Extra: [
48
+ {
49
+ Type: 'String',
50
+ Label: '列头',
51
+ Name: 'Options.Header',
52
+ },
53
+ {
54
+ Type: 'Check',
55
+ Label: '没有空格',
56
+ Name: 'Options.NoSpace',
57
+ Default: false,
58
+ },
59
+ {
60
+ Type: 'Check',
61
+ Label: '去空',
62
+ Name: 'Options.NoEmpty',
63
+ Default: false,
64
+ },
65
+ {
66
+ Type: 'Check',
67
+ Label: '去重',
68
+ Name: 'Options.NoDup',
69
+ Default: false,
70
+ },
71
+ ],
72
+ Description: '',
73
+ },
74
+ data() {
75
+ return {
76
+ tableData: [],
77
+ };
78
+ },
79
+ computed: {
80
+ localData() {
81
+ let list = [];
82
+ if (typeof this.fieldData !== 'undefined' && this.fieldData !== '') {
83
+ if (Array.isArray(this.fieldData)) {
84
+ list = this.fieldData;
85
+ } else if (typeof this.fieldData === 'string') {
86
+ const newStr = this.fieldData.replace(/,/g, ',');
87
+ list = newStr.split(',');
88
+ } else {
89
+ list = [this.fieldData];
90
+ }
91
+ }
92
+
93
+ if (this.Field.Options) {
94
+ if (this.Field.Options.NoSpace) {
95
+ for (let i = 0; i < list.length; i += 1) {
96
+ const l = list[i];
97
+
98
+ if (typeof l === 'string') {
99
+ list[i] = l.trim();
100
+ }
101
+ }
102
+ }
103
+
104
+ if (this.Field.Options.NoEmpty) {
105
+ list = list.filter((l) => !!l);
106
+ }
107
+
108
+ if (this.Field.Options.NoDup) {
109
+ const newList = [];
110
+ for (let i = 0; i < list.length; i += 1) {
111
+ const l = list[i];
112
+
113
+ if (newList.indexOf(l) < 0) {
114
+ newList.push(l);
115
+ }
116
+ }
117
+ list = newList;
118
+ }
119
+ }
120
+
121
+ return list;
122
+ },
123
+ },
124
+ });
125
+ </script>
@@ -0,0 +1,22 @@
1
+ <template>
2
+ <div class="input-field-static">
3
+ <slot name="warning"></slot>
4
+ {{fieldData}}
5
+ </div>
6
+ </template>
7
+
8
+ <script>
9
+ import { defineComponent } from 'vue';
10
+ import mixins from 'free-fe-mixins';
11
+
12
+ export default defineComponent({
13
+ name: 'InputFieldStatic',
14
+ mixins: [mixins.InputFieldMixin],
15
+ fieldInfo: {
16
+ Category: 'Static',
17
+ Label: '固定内容',
18
+ Value: 'Static',
19
+ Description: '',
20
+ },
21
+ });
22
+ </script>
@@ -0,0 +1,185 @@
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>
@@ -0,0 +1,89 @@
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>
@@ -0,0 +1,160 @@
1
+ <template>
2
+ <span class="simple-field input-field-time 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">{{fieldData}}</span>
13
+ </span>
14
+ <q-input v-else v-model="fieldData" hide-bottom-space
15
+ :readonly="Field.ReadOnly"
16
+ v-bind="$attrs" @input="$emit('input')"
17
+ :ref="`input_field_validator_${Field.Name || Field.Label}`">
18
+ <template v-slot:before v-if="typeof Field.Label !== 'undefined'">
19
+ <span
20
+ :class="`field-label ${(Field.Label && Field.Label.trim().length)
21
+ ? '' : 'field-label-empty'} ${Field.Required ? 'required' : ''}`">
22
+ <q-tooltip v-if="Field.Description" anchor="top right">{{Field.Description}}</q-tooltip>
23
+ {{Field.Label || ''}}
24
+ <span v-if="Field.Required" class="required-mark">*</span>
25
+ </span>
26
+ </template>
27
+ <q-popup-proxy v-if="!Field.ReadOnly" transition-show="scale" transition-hide="scale">
28
+ <span class="row">
29
+ <q-date
30
+ v-model="fieldData"
31
+ mask="YYYY-MM-DD HH:mm:ss"
32
+ :hour-options="hourOptions"
33
+ :minute-options="minuteOptions"
34
+ :second-options="secondOptions"
35
+ :options="timeOptions"
36
+ @input="$emit('input')"
37
+ :locale="locale"
38
+ />
39
+ <q-time
40
+ v-model="fieldData"
41
+ mask="YYYY-MM-DD HH:mm:ss"
42
+ format24h
43
+ @input="$emit('input')"
44
+ />
45
+ </span>
46
+ </q-popup-proxy>
47
+ <template v-slot:append>
48
+ <q-icon name="event" class="cursor-pointer">
49
+ </q-icon>
50
+ </template>
51
+ </q-input>
52
+ <slot name="warning"></slot>
53
+ </span>
54
+ </template>
55
+
56
+ <script>
57
+ import { defineComponent } from 'vue';
58
+ import mixins from 'free-fe-mixins';
59
+
60
+ export default defineComponent({
61
+ name: 'InputFieldTime',
62
+ mixins: [mixins.InputFieldMixin],
63
+ fieldInfo: {
64
+ Category: 'DateTime',
65
+ Label: '时间',
66
+ Value: 'Time',
67
+ Extra: [
68
+ {
69
+ Type: 'String',
70
+ Label: '最小值',
71
+ Name: 'MinValue',
72
+ },
73
+ {
74
+ Type: 'String',
75
+ Label: '最大值',
76
+ Name: 'MaxValue',
77
+ },
78
+ {
79
+ Type: 'Boolean',
80
+ Label: '最大至“现在”',
81
+ Name: 'Info.TillNow',
82
+ },
83
+ {
84
+ Type: 'Boolean',
85
+ Label: '最小从“现在”',
86
+ Name: 'Info.FromNow',
87
+ },
88
+ ],
89
+ Description: '',
90
+ },
91
+ data() {
92
+ return {};
93
+ },
94
+ computed: {
95
+ locale() {
96
+ return this.ctx.config.locales.find(
97
+ (l) => l.locale === (this.ctx.config.locale || this.ctx.config.defaultLocale),
98
+ ).calendar;
99
+ },
100
+ hourOptions() {
101
+ return this.objOptions ? this.objOptions[0] : undefined;
102
+ },
103
+ minuteOptions() {
104
+ return this.objOptions ? this.objOptions[1] : undefined;
105
+ },
106
+ secondOptions() {
107
+ return this.objOptions ? this.objOptions[2] : undefined;
108
+ },
109
+ objOptions() {
110
+ if (this.Field.Options) {
111
+ return this.Field.Options;
112
+ }
113
+ return undefined;
114
+ },
115
+ timeOptions() {
116
+ if (this.objOptions) return undefined;
117
+
118
+ if (!this.Field.MinValue && !this.Field.MaxValue) {
119
+ return undefined;
120
+ }
121
+
122
+ let minH;
123
+ let minM;
124
+ let minS;
125
+
126
+ if (this.Field.MinValue) {
127
+ [minH, minM, minS] = this.Field.MinValue;
128
+ }
129
+
130
+ let maxH;
131
+ let maxM;
132
+ let maxS;
133
+ if (this.Field.MaxValue) {
134
+ [maxH, maxM, maxS] = this.Field.MaxValue;
135
+ }
136
+
137
+ minH = minH || 0;
138
+ minM = minM || 0;
139
+ minS = minS || 0;
140
+
141
+ maxH = maxH || 24;
142
+ maxM = maxM || 60;
143
+ maxS = maxS || 60;
144
+
145
+ return (hr, min, sec) => {
146
+ if (hr < minH || hr > maxH) {
147
+ return false;
148
+ }
149
+ if (min < minM || min > maxM) {
150
+ return false;
151
+ }
152
+ if (sec < minS || sec > maxS) {
153
+ return false;
154
+ }
155
+ return true;
156
+ };
157
+ },
158
+ },
159
+ });
160
+ </script>