lw-cdp-ui 1.0.13 → 1.0.15

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 (36) hide show
  1. package/README.md +5 -5
  2. package/dist/components/lwForm/index.vue +290 -0
  3. package/dist/components/lwLayout/components/NavMenu.vue +36 -36
  4. package/dist/components/lwLayout/components/aside.vue +295 -295
  5. package/dist/components/lwLayout/components/bu.vue +61 -61
  6. package/dist/components/lwLayout/components/iframeView.vue +57 -57
  7. package/dist/components/lwLayout/components/lang.vue +76 -76
  8. package/dist/components/lwLayout/components/setting.vue +80 -80
  9. package/dist/components/lwLayout/components/sideM.vue +136 -136
  10. package/dist/components/lwLayout/components/tags.vue +329 -329
  11. package/dist/components/lwLayout/components/topbar.vue +70 -70
  12. package/dist/components/lwLayout/components/userbar.vue +199 -199
  13. package/dist/components/lwLayout/index.vue +383 -383
  14. package/dist/components/lwLogin/index.vue +388 -388
  15. package/dist/components/lwSearch/date/date.vue +110 -110
  16. package/dist/components/lwSearch/dateRange/dateRange.vue +110 -110
  17. package/dist/components/lwSearch/dates/dates.vue +366 -366
  18. package/dist/components/lwSearch/index.vue +636 -650
  19. package/dist/components/lwSearch/input/input.vue +54 -54
  20. package/dist/components/lwSearch/select/select.vue +56 -69
  21. package/dist/components/lwSvgIcon/index.vue +28 -28
  22. package/dist/components/lwTable/index.js +13 -9
  23. package/dist/components/lwTable/index.vue +67 -75
  24. package/dist/components/lwTable/useFullscreen.js +73 -73
  25. package/dist/{en-us-YCjgxjEt.js → en-US-YCjgxjEt.js} +1 -1
  26. package/dist/{en-us-YCjgxjEt.js.map → en-US-YCjgxjEt.js.map} +1 -1
  27. package/dist/lw-cdp-ui.esm.js +3206 -2863
  28. package/dist/lw-cdp-ui.esm.js.map +1 -1
  29. package/dist/lw-cdp-ui.umd.js +14 -14
  30. package/dist/lw-cdp-ui.umd.js.map +1 -1
  31. package/dist/style.css +1 -1
  32. package/dist/{zh-cn-BdDNsX4e.js → zh-CN-BdDNsX4e.js} +1 -1
  33. package/dist/{zh-cn-BdDNsX4e.js.map → zh-CN-BdDNsX4e.js.map} +1 -1
  34. package/package.json +45 -45
  35. /package/dist/components/lwTable/locale/{en-us.js → en-US.js} +0 -0
  36. /package/dist/components/lwTable/locale/{zh-cn.js → zh-CN.js} +0 -0
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
- # Vue 3 + Vite
2
-
3
- This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
4
-
5
- Learn more about IDE Support for Vue in the [Vue Docs Scaling up Guide](https://vuejs.org/guide/scaling-up/tooling.html#ide-support).
1
+ # Vue 3 + Vite
2
+
3
+ This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
4
+
5
+ Learn more about IDE Support for Vue in the [Vue Docs Scaling up Guide](https://vuejs.org/guide/scaling-up/tooling.html#ide-support).
@@ -0,0 +1,290 @@
1
+ <template>
2
+ <el-skeleton v-if="renderLoading || Object.keys(form).length==0"
3
+ animated />
4
+
5
+ <el-form v-else
6
+ ref="form"
7
+ :model="form"
8
+ :label-width="config.labelWidth"
9
+ :label-position="config.labelPosition"
10
+ v-loading="loading"
11
+ element-loading-text="Loading...">
12
+ <el-row :gutter="15">
13
+ <template v-for="(item, index) in config.formItems"
14
+ :key="index">
15
+ <el-col :span="item.span || 24"
16
+ v-if="!hideHandle(item)">
17
+ <el-form-item :rules="rulesHandle(item)">
18
+ <template #label>
19
+ {{item.label}}
20
+ <el-tooltip v-if="item.tips"
21
+ :content="item.tips">
22
+ <el-icon><el-icon-question-filled /></el-icon>
23
+ </el-tooltip>
24
+ </template>
25
+ <!-- input -->
26
+ <template v-if="item.component=='input'">
27
+ <el-input v-model="form[item.name]"
28
+ :placeholder="item.options.placeholder"
29
+ clearable
30
+ :maxlength="item.options.maxlength"
31
+ show-word-limit></el-input>
32
+ </template>
33
+ <!-- checkbox -->
34
+ <template v-else-if="item.component=='checkbox'">
35
+ <template v-if="item.name">
36
+ <el-checkbox v-model="form[item.name][_item.name]"
37
+ :label="_item.label"
38
+ v-for="(_item, _index) in item.options.items"
39
+ :key="_index"></el-checkbox>
40
+ </template>
41
+ <template v-else>
42
+ <el-checkbox v-model="form[_item.name]"
43
+ :label="_item.label"
44
+ v-for="(_item, _index) in item.options.items"
45
+ :key="_index"></el-checkbox>
46
+ </template>
47
+ </template>
48
+ <!-- checkboxGroup -->
49
+ <template v-else-if="item.component=='checkboxGroup'">
50
+ <el-checkbox-group v-model="form[item.name]">
51
+ <el-checkbox v-for="_item in item.options.items"
52
+ :key="_item.value"
53
+ :label="_item.value">{{_item.label}}</el-checkbox>
54
+ </el-checkbox-group>
55
+ </template>
56
+ <!-- upload -->
57
+ <template v-else-if="item.component=='upload'">
58
+ <el-col v-for="(_item, _index) in item.options.items"
59
+ :key="_index">
60
+ <el-form-item :prop="_item.name">
61
+ <sc-upload v-model="form[_item.name]"
62
+ :title="_item.label"></sc-upload>
63
+ </el-form-item>
64
+ </el-col>
65
+ </template>
66
+ <!-- switch -->
67
+ <template v-else-if="item.component=='switch'">
68
+ <el-switch v-model="form[item.name]" />
69
+ </template>
70
+ <!-- select -->
71
+ <template v-else-if="item.component=='select'">
72
+ <el-select v-model="form[item.name]"
73
+ :multiple="item.options.multiple"
74
+ :placeholder="item.options.placeholder"
75
+ clearable
76
+ filterable
77
+ style="width: 100%;">
78
+ <el-option v-for="option in item.options.items"
79
+ :key="option.value"
80
+ :label="option.label"
81
+ :value="option.value"></el-option>
82
+ </el-select>
83
+ </template>
84
+ <!-- cascader -->
85
+ <template v-else-if="item.component=='cascader'">
86
+ <el-cascader v-model="form[item.name]"
87
+ :options="item.options.items"
88
+ clearable></el-cascader>
89
+ </template>
90
+ <!-- date -->
91
+ <template v-else-if="item.component=='date'">
92
+ <el-date-picker v-model="form[item.name]"
93
+ :type="item.options.type"
94
+ :shortcuts="item.options.shortcuts"
95
+ :default-time="item.options.defaultTime"
96
+ :value-format="item.options.valueFormat"
97
+ :placeholder="item.options.placeholder || '请选择'"></el-date-picker>
98
+ </template>
99
+ <!-- number -->
100
+ <template v-else-if="item.component=='number'">
101
+ <el-input-number v-model="form[item.name]"
102
+ controls-position="right"></el-input-number>
103
+ </template>
104
+ <!-- radio -->
105
+ <template v-else-if="item.component=='radio'">
106
+ <el-radio-group v-model="form[item.name]">
107
+ <el-radio v-for="_item in item.options.items"
108
+ :key="_item.value"
109
+ :label="_item.value">{{_item.label}}</el-radio>
110
+ </el-radio-group>
111
+ </template>
112
+ <!-- color -->
113
+ <template v-else-if="item.component=='color'">
114
+ <el-color-picker v-model="form[item.name]" />
115
+ </template>
116
+ <!-- rate -->
117
+ <template v-else-if="item.component=='rate'">
118
+ <el-rate style="margin-top: 6px;"
119
+ v-model="form[item.name]"></el-rate>
120
+ </template>
121
+ <!-- slider -->
122
+ <template v-else-if="item.component=='slider'">
123
+ <el-slider v-model="form[item.name]"
124
+ :marks="item.options.marks"></el-slider>
125
+ </template>
126
+ <!-- noComponent -->
127
+ <template v-else>
128
+ <el-tag type="danger">[{{item.component}}] Component not
129
+ found</el-tag>
130
+ </template>
131
+ <div v-if="item.message"
132
+ class="el-form-item-msg">{{item.message}}</div>
133
+ </el-form-item>
134
+ </el-col>
135
+ </template>
136
+ <el-col :span="24">
137
+ <el-form-item>
138
+ <slot>
139
+ <el-button type="primary"
140
+ @click="submit">提交</el-button>
141
+ </slot>
142
+ </el-form-item>
143
+ </el-col>
144
+ </el-row>
145
+ </el-form>
146
+ </template>
147
+
148
+ <script>
149
+
150
+ export default {
151
+ props: {
152
+ modelValue: { type: Object, default: () => { } },
153
+ config: { type: Object, default: () => { } },
154
+ loading: { type: Boolean, default: false },
155
+ },
156
+ data() {
157
+ return {
158
+ form: {},
159
+ renderLoading: false
160
+ }
161
+ },
162
+ watch: {
163
+ modelValue() {
164
+ if (this.hasConfig) {
165
+ this.deepMerge(this.form, this.modelValue)
166
+ }
167
+ },
168
+ config() {
169
+ this.render()
170
+ },
171
+ form: {
172
+ handler(val) {
173
+ this.$emit("update:modelValue", val)
174
+ },
175
+ deep: true
176
+ }
177
+ },
178
+ computed: {
179
+ hasConfig() {
180
+ return Object.keys(this.config).length > 0
181
+ },
182
+ hasValue() {
183
+ return Object.keys(this.modelValue).length > 0
184
+ }
185
+ },
186
+ created() {
187
+
188
+ },
189
+ mounted() {
190
+ if (this.hasConfig) {
191
+ this.render()
192
+ }
193
+ },
194
+ methods: {
195
+ //构建form对象
196
+ render() {
197
+ this.config.formItems.forEach((item) => {
198
+ if (item.component == 'checkbox') {
199
+ if (item.name) {
200
+ const value = {}
201
+ item.options.items.forEach((option) => {
202
+ value[option.name] = option.value
203
+ })
204
+ this.form[item.name] = value
205
+ } else {
206
+ item.options.items.forEach((option) => {
207
+ this.form[option.name] = option.value
208
+ })
209
+ }
210
+ } else if (item.component == 'upload') {
211
+ if (item.name) {
212
+ const value = {}
213
+ item.options.items.forEach((option) => {
214
+ value[option.name] = option.value
215
+ })
216
+ this.form[item.name] = value
217
+ } else {
218
+ item.options.items.forEach((option) => {
219
+ this.form[option.name] = option.value
220
+ })
221
+ }
222
+ } else {
223
+ this.form[item.name] = item.value
224
+ }
225
+ })
226
+ if (this.hasValue) {
227
+ this.form = this.deepMerge(this.form, this.modelValue)
228
+ }
229
+ this.getData()
230
+ },
231
+ //处理远程选项数据
232
+ getData() {
233
+ this.renderLoading = true
234
+ var remoteData = []
235
+ this.config.formItems.forEach((item) => {
236
+ if (item.options && item.options.remote) {
237
+ var req = this.$http.get(item.options.remote.api, item.options.remote.data).then(res => {
238
+ item.options.items = res.data
239
+ })
240
+ remoteData.push(req)
241
+ }
242
+ })
243
+ Promise.all(remoteData).then(() => {
244
+ this.renderLoading = false
245
+ })
246
+ },
247
+ //合并深结构对象
248
+ deepMerge(obj1, obj2) {
249
+ let key;
250
+ for (key in obj2) {
251
+ obj1[key] = obj1[key] && obj1[key].toString() === "[object Object]" && (obj2[key] && obj2[key].toString() === "[object Object]") ? this.deepMerge(obj1[key], obj2[key]) : (obj1[key] = obj2[key])
252
+ }
253
+ return obj1
254
+ //return JSON.parse(JSON.stringify(obj1))
255
+ },
256
+ //处理动态隐藏
257
+ hideHandle(item) {
258
+ if (item.hideHandle) {
259
+ const exp = eval(item.hideHandle.replace(/\$/g, "this.form"))
260
+ return exp
261
+ }
262
+ return false
263
+ },
264
+ //处理动态必填
265
+ rulesHandle(item) {
266
+ if (item.requiredHandle) {
267
+ const exp = eval(item.requiredHandle.replace(/\$/g, "this.form"))
268
+ var requiredRule = item.rules.find(t => 'required' in t)
269
+ requiredRule.required = exp
270
+ }
271
+ return item.rules
272
+ },
273
+ //数据验证
274
+ validate(valid, obj) {
275
+ return this.$refs.form.validate(valid, obj)
276
+ },
277
+ scrollToField(prop) {
278
+ return this.$refs.form.scrollToField(prop)
279
+ },
280
+ resetFields() {
281
+ return this.$refs.form.resetFields()
282
+ },
283
+ //提交
284
+ submit() {
285
+ this.$emit("submit", this.form)
286
+ }
287
+ }
288
+ }
289
+ </script>
290
+
@@ -1,36 +1,36 @@
1
- <template>
2
- <div v-if="navMenus.length<=0" style="padding:20px;">
3
- <el-alert title="无子集菜单" center type="info" :closable="false"></el-alert>
4
- </div>
5
- <template v-for="navMenu in navMenus" v-bind:key="navMenu">
6
- <el-menu-item v-if="!hasChildren(navMenu)" :index="navMenu.path">
7
- <a v-if="navMenu.meta&&navMenu.meta.type=='link'" :href="navMenu.path" target="_blank" @click.stop='()=>{}'></a>
8
- <el-icon v-if="navMenu.meta&&navMenu.meta.icon"><component :is="navMenu.meta.icon || 'el-icon-menu'"/></el-icon>
9
- <template #title>
10
- <span>{{navMenu.meta.title}}</span>
11
- </template>
12
- </el-menu-item>
13
- <el-sub-menu v-else :index="navMenu.path">
14
- <template #title>
15
- <el-icon v-if="navMenu.meta&&navMenu.meta.icon"><component :is="navMenu.meta.icon || 'el-icon-menu'"/></el-icon>
16
- <span>{{navMenu.meta.title}}</span>
17
- </template>
18
- <NavMenu :navMenus="navMenu.children"></NavMenu>
19
- </el-sub-menu>
20
- </template>
21
- </template>
22
-
23
- <script>
24
- export default {
25
- name: 'NavMenu',
26
- props: ['navMenus'],
27
- data() {
28
- return {}
29
- },
30
- methods: {
31
- hasChildren(item) {
32
- return item.children && !item.children.every(item => item.meta.hidden)
33
- }
34
- }
35
- }
36
- </script>
1
+ <template>
2
+ <div v-if="navMenus.length<=0" style="padding:20px;">
3
+ <el-alert title="无子集菜单" center type="info" :closable="false"></el-alert>
4
+ </div>
5
+ <template v-for="navMenu in navMenus" v-bind:key="navMenu">
6
+ <el-menu-item v-if="!hasChildren(navMenu)" :index="navMenu.path">
7
+ <a v-if="navMenu.meta&&navMenu.meta.type=='link'" :href="navMenu.path" target="_blank" @click.stop='()=>{}'></a>
8
+ <el-icon v-if="navMenu.meta&&navMenu.meta.icon"><component :is="navMenu.meta.icon || 'el-icon-menu'"/></el-icon>
9
+ <template #title>
10
+ <span>{{navMenu.meta.title}}</span>
11
+ </template>
12
+ </el-menu-item>
13
+ <el-sub-menu v-else :index="navMenu.path">
14
+ <template #title>
15
+ <el-icon v-if="navMenu.meta&&navMenu.meta.icon"><component :is="navMenu.meta.icon || 'el-icon-menu'"/></el-icon>
16
+ <span>{{navMenu.meta.title}}</span>
17
+ </template>
18
+ <NavMenu :navMenus="navMenu.children"></NavMenu>
19
+ </el-sub-menu>
20
+ </template>
21
+ </template>
22
+
23
+ <script>
24
+ export default {
25
+ name: 'NavMenu',
26
+ props: ['navMenus'],
27
+ data() {
28
+ return {}
29
+ },
30
+ methods: {
31
+ hasChildren(item) {
32
+ return item.children && !item.children.every(item => item.meta.hidden)
33
+ }
34
+ }
35
+ }
36
+ </script>