@neatui/vue 1.1.0 → 1.2.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/README.md CHANGED
@@ -1,139 +1,3 @@
1
- # 基础 UI 组件
1
+ # @neatui/vue
2
2
 
3
- ```javascript
4
- // 规则描述 Rule Description 简称 RD
5
- const rd = {
6
- // 筛选配置
7
- limit: [
8
- {
9
- label: '',
10
- field: '',
11
- paths: '',
12
- enums: [],
13
- modle: '',
14
- value: '',
15
- rules: [],
16
- logic: true | false,
17
- _view: 1,
18
- }
19
- ],
20
-
21
- // 表格配置
22
- table: [
23
- {
24
- label: '', // 标签名
25
- field: '', // 字段名
26
- paths: '', // 源数据里的JSON结构层级 如{a:{aa:{aaaa:1},b:{bb:{bbb:2}}} 如果field是bbb则需要在paths里填写'b.bb'告诉驱动器这个字段在源数据中所处的位置
27
- enums: [], // 枚举
28
- modle: '', // 模型 链接Link|复制Copy|图片Image|标签Tag|... 有一个特殊的自定义代码'@',当驱动器不会自动处理这个字段需要手工在业务代码里处理
29
- value: '', // 显示内容,一般不填写,只有需要计算显示值时才使用,比如给显示值设置特殊格式{ value: ()=> idate(val).format('YYYY-MM-DD') }
30
- event: {}, // 事件
31
- attrs: {}, // 属性
32
- popup: {}, // 提示(无限套娃遍历)
33
- logic: true, // 逻辑控制(开启关闭)
34
- fixed: true|false|1|0|'l'|'r' // 是否固定
35
- rules: [], // 校验规则
36
- view: true|false|'always', // 是否显示(自动生成静态值交互可控)
37
- chlid:[], // 子元素(无限套娃遍历)
38
- clear: true|false // 是否清除字段,代替logic,logic另有他用
39
- }
40
- ],
41
-
42
- // 表单配置
43
- form: [
44
- {
45
- label: '', // 标签名
46
- field: '', // 字段名
47
- paths: '', // 源数据里的JSON结构层级 如{a:{aa:{aaaa:1},b:{bb:{bbb:2}}} 如果field是bbb则需要在paths里填写'b.bb'告诉驱动器这个字段在源数据中所处的位置
48
- enums: [], // 枚举
49
- modle: '', // 模型 简写'Select',详细写法 ['Select',{ attrName:'1' }]
50
- value: '',
51
- event: {}, // 事件
52
- attrs: {}, // 属性
53
- logic: true, // 逻辑控制(开启关闭)
54
- rules: [
55
- {
56
- type: 'risk',
57
- msg: '这是必填项',
58
- required: true
59
- },
60
- {
61
- type: 'risk',
62
- msg: '请正确填写中文名',
63
- validator: () => validateChineseName
64
- }
65
- ],
66
- logic: true | false, // 是否显示
67
- media: 'mob-24 pad-12 dpc-8', // 媒体查询
68
-
69
- // 数组类型
70
- array: true,
71
- // 子块标题
72
- title: (data: any, item: any) => {
73
- return item.customerName + '的评价';
74
- },
75
- // 子块字段
76
- child: []
77
- }
78
- ]
79
- };
80
- ```
81
-
82
- ## 封装组件
83
-
84
- ```
85
- TableLoader ✓
86
- LimitLoader ✓
87
- FormView ✓
88
- FormRowView ✓
89
- FormColView ✓
90
-
91
-
92
- Grid 0%
93
- Button 0%
94
- Input ✓
95
- NumberInput 0%
96
- Radio 0%
97
- Checkbox 0%
98
- Rate 0%
99
- Slider 0%
100
- Select ✓
101
- MoreSelect ✓
102
- SearchSelect ✓
103
- SearchMoreSelect ✓
104
- PageSelect ✓
105
- TreeSelect ✓
106
- CascaderSelect ✓
107
- DatePicker 50% 急
108
- TimePicker 50% 急
109
- DateTimePicker 50% 急
110
- Switch 50%
111
- Textarea 50%
112
- FileUpload 0%
113
- ImageUpload ✓
114
- Avatar 0%
115
- Badge 0%
116
- Calendar 0%
117
- Card 0%
118
- Carousel 0%
119
- Collapse 0%
120
- Empty 0%
121
- Image ✓
122
- InfiniteScroll 0%
123
- Pagination ✓
124
- Progress 0%
125
- Result 0%
126
- Tag 0%
127
- Timeline 0%
128
- Tree 0%
129
- Tabs 0%
130
- Divider 0%
131
- Message 0%
132
- ```
133
-
134
- ## Version
135
-
136
- ```
137
- v1.0.0
138
- 开源第一版本
139
- ```
3
+ [http://neatui.fekit.cn](http://neatui.fekit.cn)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neatui/vue",
3
- "version": "1.1.0",
3
+ "version": "1.2.0",
4
4
  "description": "basic component ui",
5
5
  "main": "./src/index.ts",
6
6
  "license": "MIT",
@@ -1,19 +1,30 @@
1
1
  <template>
2
- <div ref="dom"></div>
2
+ <div class="neatui-charts-view">
3
+ <div :style="`padding-top: ${size * 100}%;`">
4
+ <div ref="dom"></div>
5
+ </div>
6
+ </div>
3
7
  </template>
4
8
  <script setup lang="ts">
5
- import { ref, watch, onMounted, onBeforeUnmount } from 'vue';
9
+ import { ref, watch, reactive, onMounted, onBeforeUnmount } from 'vue';
6
10
  import ResizeObserver from 'resize-observer-polyfill';
7
11
  import * as echarts from 'echarts';
12
+ import { isArray, isObject, isString, deepcopy } from '@fekit/utils';
13
+ import { useMyuiStore } from '@neatui/vue';
14
+
15
+ // 框架数据
16
+ const myui: any = useMyuiStore();
8
17
 
9
18
  // 类型
10
19
  interface Props {
11
- option?: object;
20
+ data?: object;
21
+ size?: number;
12
22
  }
13
23
 
14
24
  // 入参
15
25
  const props: any = withDefaults(defineProps<Props>(), {
16
- option: () => ({})
26
+ data: () => ({}),
27
+ size: 1
17
28
  });
18
29
 
19
30
  const dom: any = ref(null);
@@ -21,6 +32,36 @@
21
32
  let ex: any = null;
22
33
  let timer: any = null;
23
34
 
35
+ const status: any = reactive({});
36
+
37
+ // 设置颜色
38
+ const color = (obj: any) => {
39
+ if (isArray(obj)) {
40
+ const _obj = obj.map((i: any) => {
41
+ return color(i);
42
+ });
43
+ return _obj;
44
+ } else if (isObject(obj)) {
45
+ const _obj: any = {};
46
+ for (const key in obj) {
47
+ _obj[key] = color(obj[key]);
48
+ }
49
+ return _obj;
50
+ } else {
51
+ if (isString(obj)) {
52
+ if (isArray(myui.themes)) {
53
+ const _theme: any = myui.themes[myui.theme] || myui.themes[Object.keys(myui.themes)[0]] || {};
54
+ if (_theme) {
55
+ obj = obj?.replace(/^co\((\w*)\)$/, (res: any, co: any) => {
56
+ return _theme[co] || '';
57
+ });
58
+ }
59
+ }
60
+ }
61
+ return obj;
62
+ }
63
+ };
64
+
24
65
  // 重绘
25
66
  const redraw = () => {
26
67
  if (ex) {
@@ -31,12 +72,18 @@
31
72
  }
32
73
  };
33
74
 
75
+ // 设置
76
+ const config = () => {
77
+ if (ex) {
78
+ const data = color(deepcopy(props.data));
79
+ ex?.setOption(data);
80
+ }
81
+ };
82
+
34
83
  watch(
35
- () => props.option,
84
+ [() => props.data, () => myui.theme],
36
85
  () => {
37
- if (ex) {
38
- ex?.setOption(props.option);
39
- }
86
+ config();
40
87
  },
41
88
  { deep: true }
42
89
  );
@@ -44,7 +91,7 @@
44
91
  onMounted(() => {
45
92
  if (dom.value) {
46
93
  ex = echarts.init(dom.value);
47
- ex?.setOption(props.option);
94
+ config();
48
95
 
49
96
  // 监听参考元素变化
50
97
  obs = new ResizeObserver(redraw);
@@ -57,3 +104,20 @@
57
104
  obs?.disconnect();
58
105
  });
59
106
  </script>
107
+ <style lang="scss">
108
+ .neatui-charts-view {
109
+ position: relative;
110
+ & > * {
111
+ width: 100%;
112
+ box-sizing: content-box;
113
+ height: 0;
114
+ & > * {
115
+ position: absolute;
116
+ width: 100%;
117
+ height: 100%;
118
+ left: 0;
119
+ top: 0;
120
+ }
121
+ }
122
+ }
123
+ </style>
package/src/index.ts CHANGED
@@ -1,3 +1,7 @@
1
+ // 数据
2
+ export * from './store/myui';
3
+
4
+ // 组件
1
5
  export * from './components/basic';
2
6
  export * from './components/display';
3
7
  export * from './components/form';
@@ -0,0 +1,36 @@
1
+ import { defineStore } from 'pinia';
2
+
3
+ // 基础数据
4
+ export const useMyuiStore = defineStore('myui', {
5
+ state: () => {
6
+ return {
7
+ full: 0,
8
+ // 字号
9
+ fontSize: localStorage.getItem('fontSize') || 'm',
10
+ // 主题
11
+ theme: localStorage.getItem('theme') || 'auto',
12
+ // 所有主题
13
+ themes: [],
14
+ // 侧边
15
+ side: 1
16
+ };
17
+ },
18
+ getters: {},
19
+ actions: {
20
+ // 设置全屏显示
21
+ async setFull(then = (res: any) => {}) {
22
+ const full = this.full ? 0 : 1;
23
+ localStorage.setItem('neatui_full', `${full}`);
24
+ this.full = full;
25
+ then(full);
26
+ },
27
+ // 设置系统主题
28
+ async setTheme() {
29
+ return document.documentElement.setAttribute('theme', this.theme);
30
+ },
31
+ // 设置系统字号
32
+ async setFontSize() {
33
+ document.documentElement.setAttribute('size', this.fontSize);
34
+ }
35
+ }
36
+ });