@neatui/vue 2.7.1 → 2.7.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.
@@ -1,186 +1,184 @@
1
1
  <template>
2
- <slot>
3
- <div :ui-row="rows" class="n-sl-sub">
4
- <template v-for="(col, idx) in state.form" :key="idx">
5
- <div v-if="!col.clear" :id="col._fid" :ui-col="col.media" :ui-flex="`${vertical ? 'col xm' : 'row lt'}`">
6
- <template v-if="col.label">
7
- <h6 v-if="vertical" :style="`${col.rules?.some((validator: any) => validator.required) ? 'text-indent: -1em' : ''}`" class="o-ls">
8
- <template v-if="col.label == '*'"></template>
9
- <template v-else>
10
- <b v-if="col.rules?.some((validator: any) => validator.required)" class="co-risk pr" style="left: 0.1em">﹡</b>
11
- <span>{{ col.label ? col.label + ':' : '' }}</span>
12
- </template>
13
- </h6>
14
- <p v-else :class="`${clh({ ...(col.model[1] || {}) })}`" :style="`width:${state._lw + 'em'}; max-width:50%;`" class="ar nr-sm flex-fixed o-ls">
15
- <template v-if="col.label == '*'"></template>
16
- <template v-else>
17
- <b v-if="col.rules?.some((validator: any) => validator.required)" class="co-risk">﹡</b>
18
- <span>{{ col.label ? col.label + ':' : '' }}</span>
19
- </template>
20
- </p>
21
- </template>
22
- <Input v-if="col.model[0] === 'Input'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" class="full-w" v-bind="{ ...(col.model[1] || {}) }" />
23
- <Select
24
- v-else-if="col.model[0] === 'Select'"
25
- v-model="col._data[col.field]"
26
- :interacted="interacted"
27
- :options="col.enums"
28
- :rules="col?.rules"
29
- class="full-w"
30
- v-bind="{ ...(col.model[1] || {}) }"
31
- ></Select>
32
- <SelectList
33
- v-else-if="col.model[0] === 'SelectList'"
34
- v-model="col._data[col.field]"
35
- :interacted="interacted"
36
- :options="col.enums"
37
- :rules="col?.rules"
38
- class="full-w"
39
- v-bind="{ ...(col.model[1] || {}) }"
40
- />
41
- <SelectTags
42
- v-else-if="col.model[0] === 'SelectTags'"
43
- v-model="col._data[col.field]"
44
- :interacted="interacted"
45
- :options="col.enums"
46
- :rules="col?.rules"
47
- class="full-w"
48
- v-bind="{ ...(col.model[1] || {}) }"
49
- />
50
- <SelectPicker
51
- v-else-if="col.model[0] === 'SelectPicker'"
52
- v-model="col._data[col.field]"
53
- :interacted="interacted"
54
- :options="col.enums"
55
- :rules="col?.rules"
56
- class="full-w"
57
- v-bind="{ ...(col.model[1] || {}) }"
58
- />
59
- <SearchSelect
60
- v-else-if="col.model[0] === 'SearchSelect'"
61
- v-model="col._data[col.field]"
62
- :interacted="interacted"
63
- :options="col.enums"
64
- :rules="col.rules"
65
- class="full-w"
66
- v-bind="{ ...(col.model[1] || {}) }"
67
- />
68
- <MoreSelect
69
- v-else-if="col.model[0] === 'MoreSelect'"
70
- v-model="col._data[col.field]"
71
- :interacted="interacted"
72
- :options="col.enums"
73
- :rules="col.rules"
74
- class="full-w"
75
- v-bind="{ ...(col.model[1] || {}) }"
76
- />
77
- <MoreSelectList
78
- v-else-if="col.model[0] === 'MoreSelectList'"
79
- v-model="col._data[col.field]"
80
- :interacted="interacted"
81
- :options="col.enums"
82
- :rules="col.rules"
83
- class="full-w"
84
- v-bind="{ ...(col.model[1] || {}) }"
85
- />
86
- <MoreSelectTags
87
- v-else-if="col.model[0] === 'MoreSelectTags'"
88
- v-model="col._data[col.field]"
89
- :interacted="interacted"
90
- :options="col.enums"
91
- :rules="col.rules"
92
- class="full-w"
93
- v-bind="{ ...(col.model[1] || {}) }"
94
- />
95
- <MoreSelectPicker
96
- v-else-if="col.model[0] === 'MoreSelectPicker'"
97
- v-model="col._data[col.field]"
98
- :interacted="interacted"
99
- :options="col.enums"
100
- :rules="col.rules"
101
- class="full-w"
102
- v-bind="{ ...(col.model[1] || {}) }"
103
- />
104
- <SearchMoreSelect
105
- v-else-if="col.model[0] === 'SearchMoreSelect'"
106
- v-model="col._data[col.field]"
107
- :interacted="interacted"
108
- :options="col.enums"
109
- :rules="col.rules"
110
- class="full-w"
111
- v-bind="{ ...(col.model[1] || {}) }"
112
- />
113
- <PageSelect
114
- v-else-if="col.model[0] === 'PageSelect'"
115
- v-model="col._data[col.field]"
116
- :interacted="interacted"
117
- :options="col.enums"
118
- :rules="col.rules"
119
- class="full-w"
120
- v-bind="{ ...(col.model[1] || {}) }"
121
- />
122
- <SelectTree
123
- v-else-if="col.model[0] === 'SelectTree'"
124
- v-model="col._data[col.field]"
125
- :interacted="interacted"
126
- :options="col.enums"
127
- :rules="col.rules"
128
- class="full-w"
129
- v-bind="{ ...(col.model[1] || {}) }"
130
- />
131
- <DatePicker
132
- v-else-if="col.model[0] === 'DatePicker'"
133
- v-model="col._data[col.field]"
134
- :interacted="interacted"
135
- :rules="col.rules"
136
- class="full-w"
137
- v-bind="{ ...(col.model[1] || {}) }"
138
- />
139
- <DateRangePicker
140
- v-else-if="col.model[0] === 'DateRangePicker'"
141
- v-model="col._data[col.field]"
142
- :interacted="interacted"
143
- :rules="col.rules"
144
- class="full-w"
145
- v-bind="{ ...(col.model[1] || {}) }"
146
- />
147
- <ImgUpload v-else-if="col.model[0] === 'ImgUpload'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" v-bind="{ ...(col.model[1] || {}) }" />
148
- <Upload v-else-if="col.model[0] === 'Upload'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" v-bind="{ ...(col.model[1] || {}) }" />
149
- <TextArea
150
- v-else-if="col.model[0] === 'TextArea'"
151
- v-model="col._data[col.field]"
152
- :interacted="interacted"
153
- :rules="col.rules"
154
- v-bind="{ ...(col.model[1] || {}) }"
155
- ></TextArea>
156
- <Switch v-else-if="col.model[0] === 'Switch'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" v-bind="{ ...(col.model[1] || {}) }" />
157
- <Tree v-else-if="col.model[0] === 'Tree'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" class="mt-sm" v-bind="{ ...(col.model[1] || {}) }" />
158
- <Cascader
159
- v-else-if="col.model[0] === 'Cascader'"
160
- v-model="col._data[col.field]"
161
- :interacted="interacted"
162
- :options="col.enums"
163
- :rules="col.rules"
164
- class="full-w"
165
- v-bind="{ ...(col.model[1] || {}) }"
166
- />
167
- <template v-else>
168
- <slot v-if="col.slot" :name="col.slot" :col="col"></slot>
169
- <slot v-else-if="col.model[0]" :name="col.model[0]" :col="col"></slot>
170
- <slot v-else :name="col.field" :col="col"></slot>
171
- </template>
172
- </div>
173
- </template>
174
- <div :ui-flex="`${vertical ? 'col xm' : 'row xt'}`">
175
- <div v-if="vertical">
176
- <slot name="submit"></slot>
177
- </div>
178
- <div v-else :style="`padding-left:${state._lw + 'em'};`">
179
- <slot name="submit"></slot>
180
- </div>
2
+ <div :ui-row="rows" class="n-sl-sub">
3
+ <template v-for="(col, idx) in state.form" :key="idx">
4
+ <div v-if="!col.clear" :id="col._fid" :ui-col="col.media" :ui-flex="`${vertical ? 'col xm' : 'row lt'}`">
5
+ <template v-if="col.label">
6
+ <h6 v-if="vertical" :style="`${col.rules?.some((validator: any) => validator.required) ? 'text-indent: -1em' : ''}`" class="o-ls">
7
+ <template v-if="col.label == '*'"></template>
8
+ <template v-else>
9
+ <b v-if="col.rules?.some((validator: any) => validator.required)" class="co-risk pr" style="left: 0.1em">﹡</b>
10
+ <span>{{ col.label ? col.label + ':' : '' }}</span>
11
+ </template>
12
+ </h6>
13
+ <p v-else :class="`${clh({ ...(col.model[1] || {}) })}`" :style="`width:${state._lw + 'em'}; max-width:50%;`" class="ar nr-sm flex-fixed o-ls">
14
+ <template v-if="col.label == '*'"></template>
15
+ <template v-else>
16
+ <b v-if="col.rules?.some((validator: any) => validator.required)" class="co-risk">﹡</b>
17
+ <span>{{ col.label ? col.label + ':' : '' }}</span>
18
+ </template>
19
+ </p>
20
+ </template>
21
+ <Input v-if="col.model[0] === 'Input'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" class="full-w" v-bind="{ ...(col.model[1] || {}) }" />
22
+ <Select
23
+ v-else-if="col.model[0] === 'Select'"
24
+ v-model="col._data[col.field]"
25
+ :interacted="interacted"
26
+ :options="col.enums"
27
+ :rules="col?.rules"
28
+ class="full-w"
29
+ v-bind="{ ...(col.model[1] || {}) }"
30
+ ></Select>
31
+ <SelectList
32
+ v-else-if="col.model[0] === 'SelectList'"
33
+ v-model="col._data[col.field]"
34
+ :interacted="interacted"
35
+ :options="col.enums"
36
+ :rules="col?.rules"
37
+ class="full-w"
38
+ v-bind="{ ...(col.model[1] || {}) }"
39
+ />
40
+ <SelectTags
41
+ v-else-if="col.model[0] === 'SelectTags'"
42
+ v-model="col._data[col.field]"
43
+ :interacted="interacted"
44
+ :options="col.enums"
45
+ :rules="col?.rules"
46
+ class="full-w"
47
+ v-bind="{ ...(col.model[1] || {}) }"
48
+ />
49
+ <SelectPicker
50
+ v-else-if="col.model[0] === 'SelectPicker'"
51
+ v-model="col._data[col.field]"
52
+ :interacted="interacted"
53
+ :options="col.enums"
54
+ :rules="col?.rules"
55
+ class="full-w"
56
+ v-bind="{ ...(col.model[1] || {}) }"
57
+ />
58
+ <SearchSelect
59
+ v-else-if="col.model[0] === 'SearchSelect'"
60
+ v-model="col._data[col.field]"
61
+ :interacted="interacted"
62
+ :options="col.enums"
63
+ :rules="col.rules"
64
+ class="full-w"
65
+ v-bind="{ ...(col.model[1] || {}) }"
66
+ />
67
+ <MoreSelect
68
+ v-else-if="col.model[0] === 'MoreSelect'"
69
+ v-model="col._data[col.field]"
70
+ :interacted="interacted"
71
+ :options="col.enums"
72
+ :rules="col.rules"
73
+ class="full-w"
74
+ v-bind="{ ...(col.model[1] || {}) }"
75
+ />
76
+ <MoreSelectList
77
+ v-else-if="col.model[0] === 'MoreSelectList'"
78
+ v-model="col._data[col.field]"
79
+ :interacted="interacted"
80
+ :options="col.enums"
81
+ :rules="col.rules"
82
+ class="full-w"
83
+ v-bind="{ ...(col.model[1] || {}) }"
84
+ />
85
+ <MoreSelectTags
86
+ v-else-if="col.model[0] === 'MoreSelectTags'"
87
+ v-model="col._data[col.field]"
88
+ :interacted="interacted"
89
+ :options="col.enums"
90
+ :rules="col.rules"
91
+ class="full-w"
92
+ v-bind="{ ...(col.model[1] || {}) }"
93
+ />
94
+ <MoreSelectPicker
95
+ v-else-if="col.model[0] === 'MoreSelectPicker'"
96
+ v-model="col._data[col.field]"
97
+ :interacted="interacted"
98
+ :options="col.enums"
99
+ :rules="col.rules"
100
+ class="full-w"
101
+ v-bind="{ ...(col.model[1] || {}) }"
102
+ />
103
+ <SearchMoreSelect
104
+ v-else-if="col.model[0] === 'SearchMoreSelect'"
105
+ v-model="col._data[col.field]"
106
+ :interacted="interacted"
107
+ :options="col.enums"
108
+ :rules="col.rules"
109
+ class="full-w"
110
+ v-bind="{ ...(col.model[1] || {}) }"
111
+ />
112
+ <PageSelect
113
+ v-else-if="col.model[0] === 'PageSelect'"
114
+ v-model="col._data[col.field]"
115
+ :interacted="interacted"
116
+ :options="col.enums"
117
+ :rules="col.rules"
118
+ class="full-w"
119
+ v-bind="{ ...(col.model[1] || {}) }"
120
+ />
121
+ <SelectTree
122
+ v-else-if="col.model[0] === 'SelectTree'"
123
+ v-model="col._data[col.field]"
124
+ :interacted="interacted"
125
+ :options="col.enums"
126
+ :rules="col.rules"
127
+ class="full-w"
128
+ v-bind="{ ...(col.model[1] || {}) }"
129
+ />
130
+ <DatePicker
131
+ v-else-if="col.model[0] === 'DatePicker'"
132
+ v-model="col._data[col.field]"
133
+ :interacted="interacted"
134
+ :rules="col.rules"
135
+ class="full-w"
136
+ v-bind="{ ...(col.model[1] || {}) }"
137
+ />
138
+ <DateRangePicker
139
+ v-else-if="col.model[0] === 'DateRangePicker'"
140
+ v-model="col._data[col.field]"
141
+ :interacted="interacted"
142
+ :rules="col.rules"
143
+ class="full-w"
144
+ v-bind="{ ...(col.model[1] || {}) }"
145
+ />
146
+ <ImgUpload v-else-if="col.model[0] === 'ImgUpload'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" v-bind="{ ...(col.model[1] || {}) }" />
147
+ <Upload v-else-if="col.model[0] === 'Upload'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" v-bind="{ ...(col.model[1] || {}) }" />
148
+ <TextArea
149
+ v-else-if="col.model[0] === 'TextArea'"
150
+ v-model="col._data[col.field]"
151
+ :interacted="interacted"
152
+ :rules="col.rules"
153
+ v-bind="{ ...(col.model[1] || {}) }"
154
+ ></TextArea>
155
+ <Switch v-else-if="col.model[0] === 'Switch'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" v-bind="{ ...(col.model[1] || {}) }" />
156
+ <Tree v-else-if="col.model[0] === 'Tree'" v-model="col._data[col.field]" :interacted="interacted" :rules="col.rules" class="mt-sm" v-bind="{ ...(col.model[1] || {}) }" />
157
+ <Cascader
158
+ v-else-if="col.model[0] === 'Cascader'"
159
+ v-model="col._data[col.field]"
160
+ :interacted="interacted"
161
+ :options="col.enums"
162
+ :rules="col.rules"
163
+ class="full-w"
164
+ v-bind="{ ...(col.model[1] || {}) }"
165
+ />
166
+ <template v-else>
167
+ <slot v-if="col.slot" :name="col.slot" :col="col"></slot>
168
+ <slot v-else-if="col.model[0]" :name="col.model[0]" :col="col"></slot>
169
+ <slot v-else :name="col.field" :col="col"></slot>
170
+ </template>
171
+ </div>
172
+ </template>
173
+ <div :ui-flex="`${vertical ? 'col xm' : 'row xt'}`">
174
+ <div v-if="vertical">
175
+ <slot name="submit"></slot>
176
+ </div>
177
+ <div v-else :style="`padding-left:${state._lw + 'em'};`">
178
+ <slot name="submit"></slot>
181
179
  </div>
182
180
  </div>
183
- </slot>
181
+ </div>
184
182
  </template>
185
183
  <script lang="ts" setup>
186
184
  import { watch, reactive, onBeforeUnmount, nextTick } from 'vue';
@@ -206,7 +204,7 @@
206
204
  SearchMoreSelect,
207
205
  ImgUpload,
208
206
  Upload,
209
- Cascader
207
+ Cascader,
210
208
  } from '../../form';
211
209
  import { Tree } from '../../display';
212
210
 
@@ -240,39 +238,39 @@
240
238
  // 用户是否交互
241
239
  interacted: {
242
240
  type: Boolean,
243
- default: false
241
+ default: false,
244
242
  },
245
243
  // JSON规则
246
244
  form: {
247
245
  type: Object,
248
- default: () => ({})
246
+ default: () => ({}),
249
247
  },
250
248
  // 表单数据
251
249
  data: {
252
250
  type: Object as any,
253
- default: () => ({})
251
+ default: () => ({}),
254
252
  },
255
253
  // 栅格系统
256
254
  rows: {
257
255
  type: String,
258
- default: 'mob-24 pad-12 dpc-8'
256
+ default: 'mob-24 pad-12 dpc-8',
259
257
  },
260
258
  // 如果表单是数组的话这里传入下标
261
259
  idx: {
262
260
  type: [String, Number],
263
- default: ''
261
+ default: '',
264
262
  },
265
263
  // 是否垂直排列
266
264
  vertical: {
267
265
  type: Boolean,
268
- default: false
269
- }
266
+ default: false,
267
+ },
270
268
  });
271
269
 
272
270
  // 数据
273
271
  const state: any = reactive({
274
272
  form: [],
275
- _lw: 6
273
+ _lw: 6,
276
274
  });
277
275
 
278
276
  // 监听结构
@@ -384,13 +382,13 @@
384
382
  },
385
383
  {
386
384
  deep: true,
387
- immediate: true
388
- }
389
- )
385
+ immediate: true,
386
+ },
387
+ ),
390
388
  );
391
389
  }
392
390
  },
393
- { deep: true, immediate: true }
391
+ { deep: true, immediate: true },
394
392
  );
395
393
 
396
394
  // 处理
@@ -411,7 +409,7 @@
411
409
  }
412
410
  });
413
411
  },
414
- { deep: true }
412
+ { deep: true },
415
413
  );
416
414
 
417
415
  onBeforeUnmount(() => {
@@ -16,21 +16,7 @@
16
16
  <div v-if="json.model === 'Image'" :class="json?.attrs?.class?.includes('wrap') ? 'wrap' : 'nowrap'" ui-img="@a read :round" v-bind="json.attrs" v-on="event(json, data)">
17
17
  <img :src="json.value || data[json.field] || DefaultImage" alt="" />
18
18
  </div>
19
- <div
20
- v-else
21
- :class="json?.attrs?.class?.includes('wrap') ? 'wrap' : 'nowrap'"
22
- v-bind="json.attrs"
23
- v-on="event(json, data)"
24
- v-html="
25
- json.value !== null && json.value !== undefined
26
- ? isFunction(json.value)
27
- ? json.value(json)
28
- : json.value
29
- : findEnumName(json.enums, data[json.field]) !== null && findEnumName(json.enums, data[json.field]) !== undefined
30
- ? findEnumName(json.enums, data[json.field])
31
- : '‐‐'
32
- "
33
- ></div>
19
+ <div v-else :class="json?.attrs?.class?.includes('wrap') ? 'wrap' : 'nowrap'" v-bind="json.attrs" v-on="event(json, data)" v-html="value(json, data)"></div>
34
20
  </template>
35
21
  </template>
36
22
  <script lang="ts" setup>
@@ -71,12 +57,12 @@
71
57
  const props: any = defineProps({
72
58
  col: {
73
59
  type: Object,
74
- default: () => ({})
60
+ default: () => ({}),
75
61
  },
76
62
  data: {
77
63
  type: [Object],
78
- default: () => ({})
79
- }
64
+ default: () => ({}),
65
+ },
80
66
  });
81
67
 
82
68
  // 运行函数计算
@@ -97,6 +83,16 @@
97
83
 
98
84
  const json = computed(() => runfun(deepcopy(props.col)));
99
85
 
86
+ const value = (json: any, data: any) => {
87
+ return json.value !== null && json.value !== undefined
88
+ ? isFunction(json.value)
89
+ ? json.value(json)
90
+ : json.value
91
+ : findEnumName(json.enums, data[json.field]) !== null && findEnumName(json.enums, data[json.field]) !== undefined
92
+ ? findEnumName(json.enums, data[json.field])
93
+ : '‐‐';
94
+ };
95
+
100
96
  // 事件处理
101
97
  const event: any = (col: any, data: any): object => {
102
98
  const _event: any = {};