eoss-ui 0.5.81-beta19 → 0.5.81-beta20

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.
@@ -0,0 +1,430 @@
1
+ <template>
2
+ <el-form-item
3
+ :name="name"
4
+ :prop="field || prop"
5
+ :rules="rules"
6
+ :index="index"
7
+ >
8
+ <es-select
9
+ v-if="type == 'select'"
10
+ v-bind="formOption"
11
+ :data="option"
12
+ v-model="model"
13
+ @blur="
14
+ (event) => {
15
+ handleBlur({
16
+ item: config,
17
+ event: event,
18
+ data: scope.row,
19
+ scope: scope
20
+ });
21
+ }
22
+ "
23
+ @focus="
24
+ (event) => {
25
+ handleFocus({
26
+ item: config,
27
+ event: event,
28
+ data: scope.row,
29
+ scope: scope
30
+ });
31
+ }
32
+ "
33
+ @change="
34
+ (value) => {
35
+ handleChange({
36
+ item: config,
37
+ name: field || prop,
38
+ value: value,
39
+ data: scope.row,
40
+ scope: scope
41
+ });
42
+ }
43
+ "
44
+ ></es-select>
45
+ <es-cascader
46
+ v-else-if="getType('cascader', scope)"
47
+ v-bind="formOption"
48
+ :data="option"
49
+ v-model="scope.row[field || prop]"
50
+ @blur="
51
+ (event) => {
52
+ handleBlur({
53
+ item: config,
54
+ event: event,
55
+ data: scope.row,
56
+ scope: scope
57
+ });
58
+ }
59
+ "
60
+ @focus="
61
+ (event) => {
62
+ handleFocus({
63
+ item: config,
64
+ event: event,
65
+ data: scope.row,
66
+ scope: scope
67
+ });
68
+ }
69
+ "
70
+ @change="
71
+ (value) => {
72
+ handleChange({
73
+ item: config,
74
+ name: field || prop,
75
+ value: value,
76
+ data: scope.row,
77
+ scope: scope
78
+ });
79
+ }
80
+ "
81
+ >
82
+ </es-cascader>
83
+ <es-select-ganged
84
+ v-else-if="getType('ganged', scope)"
85
+ v-bind="formOption"
86
+ :data="init(option, config)"
87
+ v-model="scope.row[field || prop]"
88
+ @change="
89
+ (value) => {
90
+ handleChange({
91
+ name: field || prop,
92
+ value: value,
93
+ data: scope.row,
94
+ item: item
95
+ });
96
+ }
97
+ "
98
+ ></es-select-ganged>
99
+ <es-radio-group
100
+ v-else-if="getType('radio', scope)"
101
+ v-bind="formOption"
102
+ :data="option"
103
+ v-model="scope.row[field || prop]"
104
+ @change="
105
+ (value) => {
106
+ handleChange({
107
+ item: config,
108
+ name: field || prop,
109
+ value: value,
110
+ data: scope.row
111
+ });
112
+ }
113
+ "
114
+ ></es-radio-group>
115
+ <es-checkbox-group
116
+ v-else-if="getType('checkbox', scope)"
117
+ v-bind="formOption"
118
+ :data="option"
119
+ v-model="scope.row[field || prop]"
120
+ @change="
121
+ (value) => {
122
+ handleChange({
123
+ item: config,
124
+ name: field || prop,
125
+ value: value,
126
+ data: scope.row
127
+ });
128
+ }
129
+ "
130
+ ></es-checkbox-group>
131
+ <es-switch
132
+ v-else-if="getType('switch', scope)"
133
+ v-bind="formOption"
134
+ :data="option"
135
+ v-model="scope.row[field || prop]"
136
+ @change="
137
+ (value) => {
138
+ handleChange({
139
+ item: config,
140
+ name: field || prop,
141
+ value: value,
142
+ data: scope.row
143
+ });
144
+ }
145
+ "
146
+ ></es-switch>
147
+ <es-date-picker
148
+ v-else-if="
149
+ config.date ||
150
+ getType(
151
+ type,
152
+ [
153
+ 'date',
154
+ 'year',
155
+ 'month',
156
+ 'date',
157
+ 'dates',
158
+ 'week',
159
+ 'datetime',
160
+ 'datetimerange',
161
+ 'daterange',
162
+ 'monthrange',
163
+ 'quarter',
164
+ 'halfyear'
165
+ ],
166
+ scope
167
+ )
168
+ "
169
+ v-bind="formOption"
170
+ v-model="scope.row[field || prop]"
171
+ :type="type"
172
+ @blur="
173
+ (event) => {
174
+ handleBlur({
175
+ item: config,
176
+ event: event,
177
+ data: scope.row,
178
+ scope: scope
179
+ });
180
+ }
181
+ "
182
+ @focus="
183
+ (event) => {
184
+ handleFocus({
185
+ item: config,
186
+ event: event,
187
+ data: scope.row,
188
+ scope: scope
189
+ });
190
+ }
191
+ "
192
+ @change="
193
+ (value) => {
194
+ handleChange({
195
+ item: config,
196
+ name: field || prop,
197
+ value: value,
198
+ data: scope.row,
199
+ scope: scope
200
+ });
201
+ }
202
+ "
203
+ ></es-date-picker>
204
+ <es-input-number
205
+ v-else-if="getType('number', scope)"
206
+ v-bind="formOption"
207
+ v-model="scope.row[field || prop]"
208
+ @blur="
209
+ (event) => {
210
+ handleBlur({
211
+ item: config,
212
+ event: event,
213
+ data: scope.row,
214
+ scope: scope
215
+ });
216
+ }
217
+ "
218
+ @focus="
219
+ (event) => {
220
+ handleFocus({
221
+ item: config,
222
+ event: event,
223
+ data: scope.row,
224
+ scope: scope
225
+ });
226
+ }
227
+ "
228
+ @change="
229
+ (value) => {
230
+ handleChange({
231
+ item: config,
232
+ name: field || prop,
233
+ value: value,
234
+ data: scope.row,
235
+ scope: scope
236
+ });
237
+ }
238
+ "
239
+ ></es-input-number>
240
+ <es-selector
241
+ v-else-if="getType('selector', scope)"
242
+ v-bind="formOption"
243
+ v-model="scope.row[field || prop]"
244
+ v-on="
245
+ exclAttribute({
246
+ data: events,
247
+ attrs: 'change'
248
+ })
249
+ "
250
+ @change="
251
+ (value) => {
252
+ handleChange({
253
+ item: config,
254
+ name: field || prop,
255
+ value: value,
256
+ data: scope.row
257
+ });
258
+ }
259
+ "
260
+ ></es-selector>
261
+ <template v-else-if="getType(['text', 'input', 'textarea'])">
262
+ <template v-if="config.lazy">
263
+ <input
264
+ v-if="getType(['text', 'input'], scope)"
265
+ class="el-input__inner"
266
+ v-bind="formOption"
267
+ v-model.lazy="scope.row[field]"
268
+ @blur="
269
+ (event) => {
270
+ handleBlur({
271
+ item: config,
272
+ event: event,
273
+ data: scope.row,
274
+ scope: scope
275
+ });
276
+ }
277
+ "
278
+ @focus="
279
+ (event) => {
280
+ handleFocus({
281
+ item: config,
282
+ event: event,
283
+ data: scope.row,
284
+ scope: scope
285
+ });
286
+ }
287
+ "
288
+ @change="
289
+ (value) => {
290
+ handleChange({
291
+ item: config,
292
+ name: field || prop,
293
+ value: value,
294
+ data: scope.row,
295
+ scope: scope
296
+ });
297
+ }
298
+ "
299
+ />
300
+ <textarea
301
+ v-else
302
+ class="el-textarea__inner"
303
+ v-bind="formOption"
304
+ v-model.lazy="scope.row[field]"
305
+ @blur="
306
+ (event) => {
307
+ handleBlur({
308
+ item: config,
309
+ event: event,
310
+ data: scope.row,
311
+ scope: scope
312
+ });
313
+ }
314
+ "
315
+ @focus="
316
+ (event) => {
317
+ handleFocus({
318
+ item: config,
319
+ event: event,
320
+ data: scope.row,
321
+ scope: scope
322
+ });
323
+ }
324
+ "
325
+ @change="
326
+ (value) => {
327
+ handleChange({
328
+ item: config,
329
+ name: field || prop,
330
+ value: value,
331
+ data: scope.row,
332
+ scope: scope
333
+ });
334
+ }
335
+ "
336
+ ></textarea>
337
+ </template>
338
+ <es-input
339
+ v-else
340
+ v-bind="formOption"
341
+ :type="type"
342
+ :scope="scope"
343
+ v-model="scope.row[field || prop]"
344
+ @blur="
345
+ (event) => {
346
+ handleBlur({
347
+ item: config,
348
+ event: event,
349
+ data: scope.row,
350
+ scope: scope
351
+ });
352
+ }
353
+ "
354
+ @focus="
355
+ (event) => {
356
+ handleFocus({
357
+ item: config,
358
+ event: event,
359
+ data: scope.row,
360
+ scope: scope
361
+ });
362
+ }
363
+ "
364
+ @change="
365
+ (value) => {
366
+ handleChange({
367
+ item: config,
368
+ name: field || prop,
369
+ value: value,
370
+ data: scope.row,
371
+ scope: scope
372
+ });
373
+ }
374
+ "
375
+ ></es-input>
376
+ </template>
377
+ </el-form-item>
378
+ </template>
379
+
380
+ <script>
381
+ export default {
382
+ name: 'FormItem',
383
+ components: {},
384
+ props: {
385
+ scope: {},
386
+ type: String,
387
+ name: String,
388
+ value: {},
389
+ index: [String, Number],
390
+ labelKey: String,
391
+ valueKey: String,
392
+ field: String,
393
+ prop: String,
394
+ rules: [Array, Object]
395
+ },
396
+ data() {
397
+ return {};
398
+ },
399
+ computed: {
400
+ model: {
401
+ get() {
402
+ return this.value;
403
+ },
404
+ set(val) {
405
+ this.$emit('input', val);
406
+ }
407
+ }
408
+ },
409
+ watch: {},
410
+ created() {},
411
+ mounted() {},
412
+ methods: {
413
+ getType(target, data) {
414
+ let type = this.type;
415
+ if (this.setType) {
416
+ let obj = this.setType(data);
417
+ if (util.isObject(obj)) {
418
+ type = obj.type;
419
+ this.options = obj.data;
420
+ } else {
421
+ type = obj;
422
+ }
423
+ }
424
+ return Array.isArray(target) ? target.includes(type) : type == target;
425
+ }
426
+ }
427
+ };
428
+ </script>
429
+
430
+ <style lang="scss" scoped></style>
@@ -230,7 +230,9 @@ export default {
230
230
  inheritAttrs: false,
231
231
  provide() {
232
232
  return {
233
- esMain: this
233
+ esMain: this,
234
+ refresh: this.handleRefresh,
235
+ jumpMenu: this.jumpMenu
234
236
  };
235
237
  },
236
238
  components: {
@@ -13,18 +13,44 @@
13
13
  ref="main"
14
14
  v-on="$listeners"
15
15
  ></main-default>
16
+
17
+ <!-- 公用弹窗 -->
18
+ <es-dialog
19
+ v-for="(item, index) in dialogs"
20
+ :visible.sync="visibles[index]"
21
+ :key="item.id || item.name || index"
22
+ size="md"
23
+ v-bind="
24
+ exclAttribute({
25
+ data: item,
26
+ attrs: ['visible', 'url']
27
+ })
28
+ "
29
+ @closed="handleClosed(item, index)"
30
+ >
31
+ <iframe
32
+ v-if="visibles[index]"
33
+ width="100%"
34
+ height="100%"
35
+ frameborder="0"
36
+ :src="item.url"
37
+ ></iframe>
38
+ </es-dialog>
39
+ <!-- 公用弹窗 end -->
16
40
  </div>
17
41
  </template>
18
42
  <script>
19
43
  import Simplicity from './simplicity/index.vue';
20
44
  import MainDefault from './default/index.vue';
21
45
  import util from 'eoss-ui/src/utils/util';
46
+ import WujieVue from 'wujie-vue2';
47
+ const { bus } = WujieVue;
22
48
  export default {
23
49
  name: 'EsMain',
24
50
  inheritAttrs: false,
25
51
  provide() {
26
52
  return {
27
- esMain: this
53
+ reLogin: this.handleReLogin
28
54
  };
29
55
  },
30
56
  components: {
@@ -39,13 +65,16 @@ export default {
39
65
  data() {
40
66
  return {
41
67
  appCode: '',
42
- params: {}
68
+ params: {},
69
+ dialogs: [],
70
+ visibles: []
43
71
  };
44
72
  },
45
73
  created() {
46
74
  this.params = util.getParams() || {};
47
75
  this.appCode = this.params.appCode;
48
76
  this.getConfig(this.params);
77
+ // 主应用监听事件
49
78
  },
50
79
  mounted() {
51
80
  if (util.win.$wujie) {
@@ -53,10 +82,52 @@ export default {
53
82
  util.updateTheme(res);
54
83
  });
55
84
  }
85
+
56
86
  util.win.reLogin = this.handleReLogin;
57
87
  util.win.windowOpen = this.openPage;
58
88
  util.win.refresh = this.$refs.main.handleRefresh;
59
89
  util.win.jumpMenu = this.$refs.main.jumpMenu;
90
+ bus.$on('reLogin', this.handleReLogin);
91
+ bus.$on('refresh', this.$refs.main.handleRefresh);
92
+ bus.$on('jumpMenu', this.$refs.main.jumpMenu);
93
+ bus.$on('emit', function (method, args) {
94
+ // 主应用发送事件
95
+ bus.$emit(method, args);
96
+ });
97
+
98
+ window.addEventListener('message', (method, args) => {
99
+ switch (method) {
100
+ case 'reLogin':
101
+ this.handleReLogin(args);
102
+ break;
103
+ case 'refresh':
104
+ this.$refs.main.handleRefresh(args);
105
+ break;
106
+ case 'jumpMenu':
107
+ this.$refs.main.jumpMenu(args);
108
+ break;
109
+ case 'emit':
110
+ let origin = args.origin || '*';
111
+ window.postMessage(args, origin);
112
+ break;
113
+ case 'openDialog':
114
+ this.dialogs.push(args);
115
+ let index = this.visibles.length;
116
+ this.visibles.push(false);
117
+ this.$nextTick(() => {
118
+ this.$set(this.visibles, index, true);
119
+ });
120
+ break;
121
+ case 'closeDialog':
122
+ for (let i = 0; i < this.dialogs.length; i++) {
123
+ let item = this.dialogs[i];
124
+ if (item.url == args.url) {
125
+ this.$set(this.visibles, i, false);
126
+ }
127
+ }
128
+ break;
129
+ }
130
+ });
60
131
  },
61
132
  methods: {
62
133
  /**
@@ -208,6 +279,23 @@ export default {
208
279
  } else {
209
280
  return util.win.open(src);
210
281
  }
282
+ },
283
+ /**
284
+ * @desc:排除属性
285
+ * @author huangbo
286
+ * @date 2024年9月7日
287
+ **/
288
+ exclAttribute({ data, attrs }) {
289
+ return util.exclAttribute({ data, attrs });
290
+ },
291
+ /**
292
+ * @desc:关闭dialog
293
+ * @author huangbo
294
+ * @date 2024年9月7日
295
+ **/
296
+ handleClosed(res, index) {
297
+ this.dialogs.splice(index, 1);
298
+ this.visibles.splice(index, 1);
211
299
  }
212
300
  },
213
301
  beforeDestroy() {}
@@ -98,22 +98,6 @@
98
98
  </div>
99
99
  </div>
100
100
  <div class="es-simplicity-main">
101
- <!-- 菜单 -->
102
- <sub-menu
103
- :mode="mode"
104
- :visible.sync="showMenu"
105
- :closed.sync="fold"
106
- :size="menuWidth"
107
- :title="title"
108
- :color="menuColor"
109
- :backgroundColor="menuBackgroundColor"
110
- :menu-icon="menuIcon"
111
- :active="subActive"
112
- v-bind="subMenus"
113
- @command="handlerClickMenu"
114
- ></sub-menu>
115
- <!-- 菜单 end -->
116
-
117
101
  <!-- 应用 -->
118
102
  <apps
119
103
  :visible.sync="showApps"
@@ -212,6 +196,7 @@
212
196
  @tab-remove="handleRemove"
213
197
  @tab-contextmenu="handleContextmenu"
214
198
  >
199
+ <!-- 操作栏 -->
215
200
  <handler
216
201
  slot="append"
217
202
  v-bind="handleConfig"
@@ -224,6 +209,23 @@
224
209
  :notice-num="notice"
225
210
  @click="handleClick"
226
211
  ></handler>
212
+ <!-- 操作栏 end-->
213
+
214
+ <!-- 菜单 -->
215
+ <sub-menu
216
+ :mode="mode"
217
+ :visible.sync="showMenu"
218
+ :closed.sync="fold"
219
+ :size="menuWidth"
220
+ :title="title"
221
+ :color="menuColor"
222
+ :backgroundColor="menuBackgroundColor"
223
+ :menu-icon="menuIcon"
224
+ :active="subActive"
225
+ v-bind="subMenus"
226
+ @command="handlerClickMenu"
227
+ ></sub-menu>
228
+ <!-- 菜单 end -->
227
229
  <el-tab-pane
228
230
  v-for="item in tabs"
229
231
  :key="item.id"
@@ -382,6 +384,13 @@ let events = [
382
384
  ];
383
385
  export default {
384
386
  name: 'Simplicity',
387
+ provide() {
388
+ return {
389
+ esMain: this,
390
+ refresh: this.handleRefresh,
391
+ jumpMenu: this.jumpMenu
392
+ };
393
+ },
385
394
  components: {
386
395
  avatar,
387
396
  handler,
@@ -1288,19 +1297,26 @@ export default {
1288
1297
  }
1289
1298
  if (set && res.code) {
1290
1299
  let subMenus = this.getMenu(this.menus, res.code, 'appCode');
1291
- this.title = res.text || res.name;
1292
- this.subMenus = subMenus ? subMenus : null;
1293
- this.showMenu = subMenus !== false;
1294
- this.showApps = false;
1295
- if (subMenus && subMenus.url) {
1296
- let i = util.indexOfObj(this.tabs, subMenus, 'id');
1297
- this.activeName = subMenus.id;
1298
- if (i == -1) {
1299
- let tab = this.setIframeType(subMenus);
1300
- this.tabs.push(tab);
1301
- } else {
1302
- if (subMenus.method == 'iframe') {
1303
- subMenus.url = util.handlerUrl(subMenus.url);
1300
+ if (!subMenus && !res.url) {
1301
+ this.$alert('没有关联菜单,请联系管理员!', '提示', {
1302
+ confirmButtonText: '确定',
1303
+ type: 'warning'
1304
+ }).catch(() => {});
1305
+ } else {
1306
+ this.title = res.text || res.name;
1307
+ this.subMenus = subMenus ? subMenus : null;
1308
+ this.showMenu = subMenus !== false;
1309
+ this.showApps = false;
1310
+ if (subMenus && subMenus.url) {
1311
+ let i = util.indexOfObj(this.tabs, subMenus, 'id');
1312
+ this.activeName = subMenus.id;
1313
+ if (i == -1) {
1314
+ let tab = this.setIframeType(subMenus);
1315
+ this.tabs.push(tab);
1316
+ } else {
1317
+ if (subMenus.method == 'iframe') {
1318
+ subMenus.url = util.handlerUrl(subMenus.url);
1319
+ }
1304
1320
  }
1305
1321
  }
1306
1322
  }