@neatui/vue 2.9.0 → 2.10.0

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neatui/vue",
3
- "version": "2.9.0",
3
+ "version": "2.10.0",
4
4
  "description": "basic component ui",
5
5
  "main": "./src/index.ts",
6
6
  "license": "MIT",
@@ -36,12 +36,12 @@
36
36
  listClass: 'full',
37
37
  listStyle: '',
38
38
  itemClass: 'full',
39
- itemStyle: ''
39
+ itemStyle: '',
40
40
  });
41
41
  const state: any = reactive({
42
42
  first: 1,
43
43
  list: null,
44
- item: null
44
+ item: null,
45
45
  });
46
46
 
47
47
  const evs = (v: any = 'list', p: any = 'item') => {
@@ -60,7 +60,7 @@
60
60
  }
61
61
  }
62
62
  },
63
- { deep: true, immediate: true }
63
+ { deep: true, immediate: true },
64
64
  );
65
65
  };
66
66
  };
@@ -29,35 +29,35 @@
29
29
  const props: any = defineProps({
30
30
  zIndex: {
31
31
  type: [String, Number],
32
- default: ''
32
+ default: '',
33
33
  },
34
34
  area: {
35
35
  type: String,
36
- default: '#fekit'
36
+ default: '#fekit',
37
37
  },
38
38
  id: {
39
- type: String
39
+ type: String,
40
40
  },
41
41
  am: {
42
42
  type: String as PropType<'aa' | 'ab' | 'ac' | 'ad' | 'ae' | 'af' | 'ag' | 'ah' | 'ai' | 'aj' | 'ak' | 'al' | 'am' | 'an' | 'ao' | 'ap' | 'aq' | 'ar' | 'as' | 'at'>,
43
- default: 'as'
43
+ default: 'as',
44
44
  },
45
45
  flex: {
46
46
  type: String as PropType<'lt' | 'ct' | 'rt' | 'lm' | 'cm' | 'rm' | 'lb' | 'cb' | 'rb'>,
47
- default: 'cm'
47
+ default: 'cm',
48
48
  },
49
49
  dark: {
50
50
  type: [String, Number],
51
- default: ''
51
+ default: '',
52
52
  },
53
53
  darkClickClose: {
54
54
  type: Boolean,
55
- default: true
55
+ default: true,
56
56
  },
57
57
  wrapStyle: {
58
58
  type: String,
59
- default: ''
60
- }
59
+ default: '',
60
+ },
61
61
  });
62
62
 
63
63
  const _area: any = document.querySelector(props.area);
@@ -72,7 +72,7 @@
72
72
  const state = reactive({
73
73
  view: 0,
74
74
  params: {},
75
- top: 0
75
+ top: 0,
76
76
  });
77
77
 
78
78
  function disableScroll() {
@@ -101,7 +101,7 @@
101
101
  enableScroll();
102
102
  }
103
103
  },
104
- { deep: true, immediate: true }
104
+ { deep: true, immediate: true },
105
105
  );
106
106
 
107
107
  // 回调合集
@@ -109,7 +109,7 @@
109
109
  show: [],
110
110
  hide: [],
111
111
  open: [],
112
- none: []
112
+ none: [],
113
113
  };
114
114
 
115
115
  // 注入参数
@@ -26,26 +26,26 @@
26
26
  imgStyle: { type: String, default: '' },
27
27
  src: {
28
28
  type: Object,
29
- default: () => ({})
29
+ default: () => ({}),
30
30
  },
31
31
  files: {
32
32
  type: Array as () => any[],
33
- default: () => []
33
+ default: () => [],
34
34
  },
35
35
  // 图片如何适应容器框,同原生object-fit
36
36
  fit: {
37
37
  type: String,
38
- default: 'contain'
38
+ default: 'contain',
39
39
  },
40
40
  // 是否开启图片预览放大
41
41
  preview: {
42
42
  type: Boolean,
43
- default: true
43
+ default: true,
44
44
  },
45
45
  initialSlide: {
46
46
  type: Number,
47
- default: 0
48
- }
47
+ default: 0,
48
+ },
49
49
  });
50
50
 
51
51
  const emit = defineEmits(['delImg']);
@@ -5,10 +5,10 @@
5
5
  :initialSlide="initialSlide"
6
6
  :spaceBetween="30"
7
7
  :keyboard="{
8
- enabled: true
8
+ enabled: true,
9
9
  }"
10
10
  :pagination="{
11
- clickable: true
11
+ clickable: true,
12
12
  }"
13
13
  :navigation="true"
14
14
  :modules="[Keyboard, Pagination, Navigation]"
@@ -32,19 +32,19 @@
32
32
  const props: any = defineProps({
33
33
  srcName: {
34
34
  type: String,
35
- default: 'url'
35
+ default: 'url',
36
36
  },
37
37
  id: {
38
38
  type: String,
39
- default: 'PhotoViewer'
39
+ default: 'PhotoViewer',
40
40
  },
41
41
  initialSlide: {
42
42
  type: Number,
43
- default: 0
43
+ default: 0,
44
44
  },
45
45
  files: {
46
46
  type: Array as () => any[],
47
- default: () => []
48
- }
47
+ default: () => [],
48
+ },
49
49
  });
50
50
  </script>
@@ -92,11 +92,11 @@
92
92
  suffix: () => [],
93
93
  active: () => ({ class: 'co-main' }),
94
94
  optional: 'all',
95
- multiple: false
95
+ multiple: false,
96
96
  });
97
97
 
98
98
  const state: any = reactive({
99
- value: ''
99
+ value: '',
100
100
  });
101
101
  watch(
102
102
  () => props.modelValue,
@@ -105,7 +105,7 @@
105
105
  state.value = value;
106
106
  }
107
107
  },
108
- { deep: true, immediate: true }
108
+ { deep: true, immediate: true },
109
109
  );
110
110
  watch(
111
111
  () => state.value,
@@ -114,7 +114,7 @@
114
114
  emits('update:modelValue', value);
115
115
  }
116
116
  },
117
- { deep: true, immediate: true }
117
+ { deep: true, immediate: true },
118
118
  );
119
119
 
120
120
  // 事件处理
@@ -26,7 +26,7 @@
26
26
  const props = withDefaults(defineProps<Props>(), {
27
27
  theme: '@a',
28
28
  modelValue: () => [],
29
- options: () => []
29
+ options: () => [],
30
30
  });
31
31
 
32
32
  // 定义事件
@@ -34,7 +34,7 @@
34
34
 
35
35
  // 内部数据
36
36
  const state: any = reactive({
37
- lists: []
37
+ lists: [],
38
38
  });
39
39
 
40
40
  // 监听数据
@@ -48,8 +48,8 @@
48
48
  }
49
49
  },
50
50
  {
51
- immediate: true
52
- }
51
+ immediate: true,
52
+ },
53
53
  );
54
54
  watch(
55
55
  () => state.lists,
@@ -58,7 +58,7 @@
58
58
  emits('update:modelValue', value);
59
59
  },
60
60
  {
61
- deep: true
62
- }
61
+ deep: true,
62
+ },
63
63
  );
64
64
  </script>
@@ -186,20 +186,20 @@
186
186
  text: '昨天',
187
187
  func() {
188
188
  change(0, { date: idate(new Date().setDate(new Date().getDate() - 1)).format('YYYY-MM-DD') });
189
- }
189
+ },
190
190
  },
191
191
  today: {
192
192
  text: '今天',
193
193
  func() {
194
194
  change(0, { date: idate(new Date()).format('YYYY-MM-DD') });
195
- }
195
+ },
196
196
  },
197
197
  tomorrow: {
198
198
  text: '明天',
199
199
  func() {
200
200
  change(0, { date: idate(new Date().setDate(new Date().getDate() + 1)).format('YYYY-MM-DD') });
201
- }
202
- }
201
+ },
202
+ },
203
203
  };
204
204
 
205
205
  const emits: any = defineEmits(['update:modelValue', 'change']);
@@ -243,7 +243,7 @@
243
243
  // 数据格式化
244
244
  format: 'YYYY-MM-DD',
245
245
  // 节假日
246
- holiday: () => ({})
246
+ holiday: () => ({}),
247
247
  });
248
248
 
249
249
  // 公共数据
@@ -253,7 +253,7 @@
253
253
  return props.shortcuts.map((item: any) => {
254
254
  return isString(item) ? shortcutsList[item] : item;
255
255
  });
256
- })
256
+ }),
257
257
  });
258
258
 
259
259
  // 开始数据
@@ -268,7 +268,7 @@
268
268
  const days = date.calendar({ group: true, value: [sta.value, end.value] });
269
269
  const { y = 0, M: m = 0, d = 0 } = date.attr || {};
270
270
  return { days, y, m, d };
271
- })
271
+ }),
272
272
  });
273
273
 
274
274
  // 结束数据
@@ -281,7 +281,7 @@
281
281
  const days = date.calendar({ group: true, value: [sta.value, end.value] });
282
282
  const { y = 0, M: m = 0, d = 0 } = date.attr || {};
283
283
  return { days, y, m, d };
284
- })
284
+ }),
285
285
  });
286
286
 
287
287
  const init = ([a = '', b = '']: any = []) => {
@@ -325,7 +325,7 @@
325
325
  emits('update:modelValue', [sta, end]);
326
326
  }
327
327
  },
328
- { deep: true, immediate: true }
328
+ { deep: true, immediate: true },
329
329
  );
330
330
 
331
331
  // 日期前翻
@@ -169,20 +169,20 @@
169
169
  text: '昨天',
170
170
  func() {
171
171
  change({ date: idate(new Date().setDate(new Date().getDate() - 1)).format('YYYY-MM-DD') });
172
- }
172
+ },
173
173
  },
174
174
  today: {
175
175
  text: '今天',
176
176
  func() {
177
177
  change({ date: idate(new Date()).format('YYYY-MM-DD') });
178
- }
178
+ },
179
179
  },
180
180
  tomorrow: {
181
181
  text: '明天',
182
182
  func() {
183
183
  change({ date: idate(new Date().setDate(new Date().getDate() + 1)).format('YYYY-MM-DD') });
184
- }
185
- }
184
+ },
185
+ },
186
186
  };
187
187
 
188
188
  const emits: any = defineEmits(['update:modelValue', 'change', 'update']);
@@ -227,7 +227,7 @@
227
227
  holiday: () => ({}),
228
228
  time: false,
229
229
  // 语言
230
- lang: 'zh-CN'
230
+ lang: 'zh-CN',
231
231
  });
232
232
 
233
233
  // 小时
@@ -276,7 +276,7 @@
276
276
  } else {
277
277
  return !props.time;
278
278
  }
279
- })
279
+ }),
280
280
  });
281
281
 
282
282
  // 面板
@@ -294,7 +294,7 @@
294
294
  }),
295
295
  end: computed(() => {
296
296
  return panel.years[9];
297
- })
297
+ }),
298
298
  });
299
299
 
300
300
  // 设置日期
@@ -341,7 +341,7 @@
341
341
  // 值
342
342
  state.value = value || '';
343
343
  },
344
- { deep: true, immediate: true }
344
+ { deep: true, immediate: true },
345
345
  );
346
346
 
347
347
  onMounted(() => {
@@ -351,7 +351,7 @@
351
351
  () => state.panel,
352
352
  () => {
353
353
  setTimeValue();
354
- }
354
+ },
355
355
  );
356
356
 
357
357
  // 更新时间
@@ -63,7 +63,7 @@
63
63
  accept: 'image/*',
64
64
  multiple: false,
65
65
  crop: false,
66
- action: '/common/updateFile'
66
+ action: '/common/updateFile',
67
67
  });
68
68
 
69
69
  const emit = defineEmits(['update:modelValue', 'change']);
@@ -104,7 +104,7 @@
104
104
  success: resolve,
105
105
  maxWidth: 1000,
106
106
  maxHeight: 700,
107
- error: reject
107
+ error: reject,
108
108
  });
109
109
  });
110
110
  const { name = '' }: any = _blob || {};
@@ -132,7 +132,7 @@
132
132
  emit('update:modelValue', isArray(props.modelValue) ? files.value : files.value.length > 0 ? files.value[0].imgUrl : '');
133
133
  }
134
134
  },
135
- { deep: true }
135
+ { deep: true },
136
136
  );
137
137
 
138
138
  defineExpose({ change, uploadClick });
@@ -139,7 +139,7 @@
139
139
  verify: false,
140
140
  prefix: () => [],
141
141
  suffix: () => [],
142
- interacted: false
142
+ interacted: false,
143
143
  });
144
144
  // 内部数据
145
145
  const state: any = reactive({
@@ -153,7 +153,7 @@
153
153
  }),
154
154
  has: computed(() => {
155
155
  return props.options?.some((item: any) => props.modelValue?.some((i: any) => `${i}` === `${item.value}`));
156
- })
156
+ }),
157
157
  });
158
158
 
159
159
  // 监听外部数据
@@ -163,7 +163,7 @@
163
163
  const selectd: any = o?.filter((item: any) => v?.some((i: any) => `${i}` === `${item.value}`))?.map((item: any) => item.label) || [];
164
164
  state.value = selectd?.join(' Ι ') || '';
165
165
  },
166
- { deep: true, immediate: true }
166
+ { deep: true, immediate: true },
167
167
  );
168
168
 
169
169
  // 更新
@@ -29,23 +29,23 @@
29
29
  placeholder: { type: String, default: '' },
30
30
  modelValue: {
31
31
  type: Array as () => any[],
32
- default: () => []
32
+ default: () => [],
33
33
  },
34
34
  options: {
35
35
  type: Array as () => any[],
36
- default: () => []
36
+ default: () => [],
37
37
  },
38
38
  rules: {
39
39
  type: Array,
40
- default: () => []
40
+ default: () => [],
41
41
  },
42
42
  field: {
43
43
  type: String,
44
44
  default: () => {
45
45
  const _name = (l: any) => Array.from({ length: l }, () => 'abcdefghijklmnopqrstuvwxyz'[Math.floor(Math.random() * 26)]).join('');
46
46
  return _name(8);
47
- }
48
- }
47
+ },
48
+ },
49
49
  });
50
50
 
51
51
  const mv: any = ref(props.modelValue);
@@ -106,14 +106,14 @@
106
106
  () => {
107
107
  mv.value = props.modelValue;
108
108
  },
109
- { deep: true, immediate: true }
109
+ { deep: true, immediate: true },
110
110
  );
111
111
  watch(
112
112
  () => mv.value,
113
113
  (v: any) => {
114
114
  emits('update:modelValue', v);
115
115
  },
116
- { deep: true, immediate: true }
116
+ { deep: true, immediate: true },
117
117
  );
118
118
 
119
119
  const ready: any = ref(0);
@@ -43,23 +43,23 @@
43
43
  placeholder: { type: String, default: '' },
44
44
  modelValue: {
45
45
  type: Array as () => any[],
46
- default: () => []
46
+ default: () => [],
47
47
  },
48
48
  options: {
49
49
  type: Array as () => any[],
50
- default: () => []
50
+ default: () => [],
51
51
  },
52
52
  rules: {
53
53
  type: Array,
54
- default: () => []
54
+ default: () => [],
55
55
  },
56
56
  field: {
57
57
  type: String,
58
58
  default: () => {
59
59
  const _name = (l: any) => Array.from({ length: l }, () => 'abcdefghijklmnopqrstuvwxyz'[Math.floor(Math.random() * 26)]).join('');
60
60
  return _name(8);
61
- }
62
- }
61
+ },
62
+ },
63
63
  });
64
64
  const mv: any = ref(props.modelValue);
65
65
  const state: any = reactive({
@@ -75,7 +75,7 @@
75
75
  }),
76
76
  has: computed(() => {
77
77
  return props.options?.some((item: any) => props.modelValue?.some((i: any) => `${i}` === `${item.value}`));
78
- })
78
+ }),
79
79
  });
80
80
 
81
81
  // 监听外部数据
@@ -86,7 +86,7 @@
86
86
  const selectd: any = props.options?.filter((item: any) => v?.some((i: any) => `${i}` === `${item.value}`))?.map((item: any) => item.label) || [];
87
87
  state.value = selectd.join(' Ι ') || '';
88
88
  },
89
- { deep: true, immediate: true }
89
+ { deep: true, immediate: true },
90
90
  );
91
91
  // 更新
92
92
  const change = (item: any) => {
@@ -28,23 +28,23 @@
28
28
  placeholder: { type: String, default: '' },
29
29
  modelValue: {
30
30
  type: Array as () => any[],
31
- default: () => []
31
+ default: () => [],
32
32
  },
33
33
  options: {
34
34
  type: Array as () => any[],
35
- default: () => []
35
+ default: () => [],
36
36
  },
37
37
  rules: {
38
38
  type: Array,
39
- default: () => []
39
+ default: () => [],
40
40
  },
41
41
  field: {
42
42
  type: String,
43
43
  default: () => {
44
44
  const _name = (l: any) => Array.from({ length: l }, () => 'abcdefghijklmnopqrstuvwxyz'[Math.floor(Math.random() * 26)]).join('');
45
45
  return _name(8);
46
- }
47
- }
46
+ },
47
+ },
48
48
  });
49
49
 
50
50
  const mv: any = ref(props.modelValue);
@@ -105,14 +105,14 @@
105
105
  () => {
106
106
  mv.value = props.modelValue;
107
107
  },
108
- { deep: true, immediate: true }
108
+ { deep: true, immediate: true },
109
109
  );
110
110
  watch(
111
111
  () => mv.value,
112
112
  (v: any) => {
113
113
  emits('update:modelValue', v);
114
114
  },
115
- { deep: true, immediate: true }
115
+ { deep: true, immediate: true },
116
116
  );
117
117
 
118
118
  const ready: any = ref(0);
@@ -54,7 +54,7 @@
54
54
  // 用户是否交互
55
55
  interacted: {
56
56
  type: Boolean,
57
- default: false
57
+ default: false,
58
58
  },
59
59
  theme: { type: String, default: '@a' },
60
60
  sz: { type: String, default: 'm' },
@@ -63,42 +63,42 @@
63
63
  // 提示文案
64
64
  tips: {
65
65
  type: String,
66
- default: ''
66
+ default: '',
67
67
  },
68
68
  placeholder: {
69
69
  type: String,
70
- default: ''
70
+ default: '',
71
71
  },
72
72
  modelValue: {
73
73
  type: Array as () => any[],
74
- default: () => []
74
+ default: () => [],
75
75
  },
76
76
  options: {
77
77
  type: Array as () => any[],
78
- default: () => []
78
+ default: () => [],
79
79
  },
80
80
  ui: {
81
81
  type: Object,
82
- default: () => ({ sz: 'm' })
82
+ default: () => ({ sz: 'm' }),
83
83
  },
84
84
  // 校验规则
85
85
  rules: {
86
86
  type: Array,
87
- default: () => []
87
+ default: () => [],
88
88
  },
89
89
  // 是否是示校验图标
90
90
  verify: {
91
91
  type: Boolean,
92
- default: false
92
+ default: false,
93
93
  },
94
94
  tools: {
95
95
  type: Boolean,
96
- default: true
96
+ default: true,
97
97
  },
98
98
  spare: {
99
99
  type: String,
100
- default: '当前没有可选项'
101
- }
100
+ default: '当前没有可选项',
101
+ },
102
102
  });
103
103
  const formName = new Date().getTime().toString();
104
104
 
@@ -129,7 +129,7 @@
129
129
  }),
130
130
  has: computed(() => {
131
131
  return props.options?.some((item: any) => props.modelValue?.some((i: any) => `${i}` === `${item.value}`));
132
- })
132
+ }),
133
133
  });
134
134
 
135
135
  const toggle = () => {
@@ -36,75 +36,75 @@
36
36
  // 值
37
37
  modelValue: {
38
38
  type: [String, Number],
39
- default: ''
39
+ default: '',
40
40
  },
41
41
  // 类型
42
42
  type: {
43
43
  type: String,
44
- default: 'text'
44
+ default: 'text',
45
45
  },
46
46
  // 提示文案
47
47
  tips: {
48
48
  type: String,
49
- default: ''
49
+ default: '',
50
50
  },
51
51
  // 内容占位
52
52
  placeholder: {
53
53
  type: String,
54
- default: ''
54
+ default: '',
55
55
  },
56
56
  // 最大长度
57
57
  maxLength: {
58
58
  type: Number,
59
- default: null
59
+ default: null,
60
60
  },
61
61
  // 最小长度
62
62
  minLength: {
63
63
  type: Number,
64
- default: null
64
+ default: null,
65
65
  },
66
66
  // 最小长度
67
67
  autoHeight: {
68
68
  type: Boolean,
69
- default: false
69
+ default: false,
70
70
  },
71
71
  // 是否禁用
72
72
  disabled: {
73
73
  type: Boolean,
74
- default: false
74
+ default: false,
75
75
  },
76
76
  // 是否中读
77
77
  readonly: {
78
78
  type: Boolean,
79
- default: false
79
+ default: false,
80
80
  },
81
81
  // 是否显示清除按钮
82
82
  clearable: {
83
83
  type: Boolean,
84
- default: true
84
+ default: true,
85
85
  },
86
86
  // 校验规则
87
87
  rules: {
88
88
  type: Array,
89
- default: () => []
89
+ default: () => [],
90
90
  },
91
91
  // 是否是示校验图标
92
92
  verify: {
93
93
  type: Boolean,
94
- default: false
94
+ default: false,
95
95
  },
96
96
  prefix: {
97
97
  type: Array as PropType<any[]>,
98
- default: () => []
98
+ default: () => [],
99
99
  },
100
100
  suffix: {
101
101
  type: Array as PropType<any[]>,
102
- default: () => []
102
+ default: () => [],
103
103
  },
104
104
  rows: {
105
105
  type: Number,
106
- default: 3
107
- }
106
+ default: 3,
107
+ },
108
108
  });
109
109
 
110
110
  const ready: any = ref(0);
@@ -164,7 +164,7 @@
164
164
  (v: any) => {
165
165
  mv.value = v;
166
166
  },
167
- { deep: true, immediate: true }
167
+ { deep: true, immediate: true },
168
168
  );
169
169
 
170
170
  watch(
@@ -180,7 +180,7 @@
180
180
  // 自动高度
181
181
  fAutoHeight();
182
182
  },
183
- { deep: true }
183
+ { deep: true },
184
184
  );
185
185
 
186
186
  onMounted(() => {
@@ -54,7 +54,7 @@ export {
54
54
  DateRangePicker,
55
55
  ImgUpload,
56
56
  Upload,
57
- Cascader
57
+ Cascader,
58
58
  };
59
59
 
60
60
  // 单选
@@ -75,13 +75,13 @@
75
75
  <script setup lang="ts">
76
76
  import { nextTick, reactive, ref, watch, onMounted } from 'vue';
77
77
  import LayerLoader from './LayerLoader.vue';
78
- import { useBaseStore, useWorksStore, storeToRefs } from '@/store';
78
+ import { useBasicStore, useWorksStore, storeToRefs } from '@/store';
79
79
  import { deepcopy } from '@fekit/utils';
80
80
  import scrollto from '@fekit/scrollto';
81
81
 
82
82
  // 事件定义
83
83
  const store: any = useWorksStore();
84
- const base: any = useBaseStore();
84
+ const base: any = useBasicStore();
85
85
  const { word } = base;
86
86
 
87
87
  // 类型定义
@@ -89,7 +89,7 @@
89
89
  words: () => ({}),
90
90
  limit: () => [],
91
91
  param: () => ({}),
92
- tools: false
92
+ tools: false,
93
93
  });
94
94
 
95
95
  // 定义emit事件
@@ -101,7 +101,7 @@
101
101
  const state: any = reactive({
102
102
  name: computed(() => 'confs' + route.path?.replace(/\//g, '_')),
103
103
  limit: [],
104
- param: {}
104
+ param: {},
105
105
  });
106
106
 
107
107
  // 监听外部配置
@@ -143,7 +143,7 @@
143
143
  return item;
144
144
  });
145
145
  },
146
- { deep: true, immediate: true }
146
+ { deep: true, immediate: true },
147
147
  );
148
148
 
149
149
  // 缓存交互配置
@@ -161,7 +161,7 @@
161
161
  });
162
162
  localStorage.setItem(`${state.name}_limit`, JSON.stringify(_limit));
163
163
  },
164
- { deep: true }
164
+ { deep: true },
165
165
  );
166
166
 
167
167
  watch(
@@ -169,7 +169,7 @@
169
169
  () => {
170
170
  state.param = props.param;
171
171
  },
172
- { deep: true, immediate: true }
172
+ { deep: true, immediate: true },
173
173
  );
174
174
 
175
175
  // 重置筛选
@@ -10,7 +10,7 @@
10
10
  <template v-for="(col, idx) in state.table" :key="idx">
11
11
  <th v-if="!col.__close" :min-width="col.fixed" :col-fixed="col.fixed" :col-fixed-side="col.fixed || 'l'" :data-field="col.field">
12
12
  <slot :name="`thead-${col.field}`" :col="col" :idx="idx">
13
- <div v-bind="col.thead">
13
+ <div :class="!slots.operate && idx === state.__last ? 'ar' : ''" v-bind="col.thead">
14
14
  <span class="ux-none" ui-flex="row rm" v-if="col.order === 0 || col.order === 1 || col.order === 2" @click="fSetOrder(col)">
15
15
  <span>{{ col.label }}</span>
16
16
  <span ui-btn="@a none xs :square" :ui-order="`@a ${col.__order}`"></span>
package/src/index.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  // 数据
2
- export * from './store/myui';
2
+ export * from './store/frame';
3
+ export * from './utils/theme';
3
4
 
4
5
  // 组件
5
6
  export * from './components/basic';
@@ -1,7 +1,7 @@
1
1
  import { defineStore } from 'pinia';
2
2
 
3
3
  // 基础数据
4
- export const useMyuiStore = defineStore('myui', {
4
+ export const useFrameStore = defineStore('frame', {
5
5
  state: () => {
6
6
  return {
7
7
  full: localStorage.getItem('neatui_full') || 0,
@@ -10,7 +10,7 @@ export const useMyuiStore = defineStore('myui', {
10
10
  // 主题
11
11
  theme: localStorage.getItem('neatui_theme') || document?.documentElement?.getAttribute('theme') || 'auto',
12
12
  // 侧边
13
- side: 1
13
+ side: 1,
14
14
  };
15
15
  },
16
16
  getters: {},
@@ -45,6 +45,6 @@ export const useMyuiStore = defineStore('myui', {
45
45
  document.documentElement.setAttribute('size', this.size);
46
46
  then(this.size);
47
47
  }
48
- }
49
- }
48
+ },
49
+ },
50
50
  });
@@ -0,0 +1,14 @@
1
+ // 主题
2
+ export const theme = (then = (_theme: any) => {}) => {
3
+ // 自动设置主题
4
+ const auto = (scheme: any) => {
5
+ const _theme = window.localStorage.getItem('theme') || (scheme.matches ? 'dark' : 'light');
6
+ document.documentElement.setAttribute('theme', _theme);
7
+ then(_theme);
8
+ };
9
+ // 监听系统主题
10
+ const scheme: any = window.matchMedia('(prefers-color-scheme: dark)');
11
+ auto(scheme);
12
+ // 监控主题事件
13
+ scheme.addListener(auto);
14
+ };