ソースを参照

@zengqiao@菜单图标

HexOr 3 年 前
コミット
d25abaeee0

+ 2 - 0
dmp-edge-ai/src/plugins/element.js

@ -7,6 +7,7 @@ import {
7 7
  Row,
8 8
  Col,
9 9
  Button,
10
  ButtonGroup,
10 11
  Input,
11 12
  InputNumber,
12 13
  Select,
@ -40,6 +41,7 @@ Vue.use(Main)
40 41
Vue.use(Row)
41 42
Vue.use(Col)
42 43
Vue.use(Button)
44
Vue.use(ButtonGroup)
43 45
Vue.use(Input)
44 46
Vue.use(InputNumber)
45 47
Vue.use(Select)

+ 12 - 0
dmp-edge-ai/src/utils/bus.js

@ -0,0 +1,12 @@
1
/**
2
 * @file 本文件为事件总线实现
3
 * @author PRD UX R&D Dept.
4
 */
5
6
import Vue from 'vue'
7
8
export default new Vue({
9
  data: {
10
    SET_ICON: 'setIcon' // 选择菜单icon时触发
11
  }
12
})

+ 287 - 0
dmp-edge-ai/src/utils/menu-icon.config.js

@ -0,0 +1,287 @@
1
/**
2
 * 菜单图标
3
 * @type {string[]}
4
 */
5
const data = [
6
  'el-icon-platform-eleme',
7
  'el-icon-eleme',
8
  'el-icon-delete-solid',
9
  'el-icon-delete ',
10
  'el-icon-s-tools',
11
  'el-icon-setting',
12
  'el-icon-user-solid',
13
  'el-icon-user',
14
  'el-icon-phone',
15
  'el-icon-phone-outline',
16
  'el-icon-more',
17
  'el-icon-more-outline',
18
  'el-icon-star-on',
19
  'el-icon-star-off',
20
  'el-icon-s-goods',
21
  'el-icon-goods',
22
  'el-icon-warning',
23
  'el-icon-warning-outline',
24
  'el-icon-question',
25
  'el-icon-info',
26
  'el-icon-remove',
27
  'el-icon-circle-plus',
28
  'el-icon-success',
29
  'el-icon-error',
30
  'el-icon-zoom-in',
31
  'el-icon-zoom-out',
32
  'el-icon-remove-outline',
33
  'el-icon-circle-plus-outline',
34
  'el-icon-circle-check',
35
  'el-icon-circle-close',
36
  'el-icon-s-help',
37
  'el-icon-help',
38
  'el-icon-minus',
39
  'el-icon-plus',
40
  'el-icon-check',
41
  'el-icon-close',
42
  'el-icon-picture',
43
  'el-icon-picture-outline',
44
  'el-icon-picture-outline-round',
45
  'el-icon-upload',
46
  'el-icon-upload2',
47
  'el-icon-download',
48
  'el-icon-camera-solid',
49
  'el-icon-camera',
50
  'el-icon-video-camera-solid',
51
  'el-icon-video-camera',
52
  'el-icon-message-solid',
53
  'el-icon-bell',
54
  'el-icon-s-cooperation',
55
  'el-icon-s-order',
56
  'el-icon-s-platform',
57
  'el-icon-s-fold',
58
  'el-icon-s-unfold',
59
  'el-icon-s-operation',
60
  'el-icon-s-promotion',
61
  'el-icon-s-home',
62
  'el-icon-s-release',
63
  'el-icon-s-ticket',
64
  'el-icon-s-management',
65
  'el-icon-s-open',
66
  'el-icon-s-shop',
67
  'el-icon-s-marketing',
68
  'el-icon-s-flag',
69
  'el-icon-s-comment',
70
  'el-icon-s-finance',
71
  'el-icon-s-claim',
72
  'el-icon-s-custom',
73
  'el-icon-s-opportunity',
74
  'el-icon-s-data',
75
  'el-icon-s-check',
76
  'el-icon-s-grid',
77
  'el-icon-menu',
78
  'el-icon-share',
79
  'el-icon-d-caret',
80
  'el-icon-caret-left',
81
  'el-icon-caret-right',
82
  'el-icon-caret-bottom',
83
  'el-icon-caret-top',
84
  'el-icon-bottom-left',
85
  'el-icon-bottom-right',
86
  'el-icon-back',
87
  'el-icon-right',
88
  'el-icon-bottom',
89
  'el-icon-top',
90
  'el-icon-top-left',
91
  'el-icon-top-right',
92
  'el-icon-arrow-left',
93
  'el-icon-arrow-right',
94
  'el-icon-arrow-down',
95
  'el-icon-arrow-up',
96
  'el-icon-d-arrow-left',
97
  'el-icon-d-arrow-right',
98
  'el-icon-video-pause',
99
  'el-icon-video-play',
100
  'el-icon-refresh',
101
  'el-icon-refresh-right',
102
  'el-icon-refresh-left',
103
  'el-icon-finished',
104
  'el-icon-sort',
105
  'el-icon-sort-up',
106
  'el-icon-sort-down',
107
  'el-icon-rank',
108
  'el-icon-loading',
109
  'el-icon-view',
110
  'el-icon-c-scale-to-original',
111
  'el-icon-date',
112
  'el-icon-edit',
113
  'el-icon-edit-outline',
114
  'el-icon-folder',
115
  'el-icon-folder-opened',
116
  'el-icon-folder-add',
117
  'el-icon-folder-remove',
118
  'el-icon-folder-delete',
119
  'el-icon-folder-checked',
120
  'el-icon-tickets',
121
  'el-icon-document-remove',
122
  'el-icon-document-delete',
123
  'el-icon-document-copy',
124
  'el-icon-document-checked',
125
  'el-icon-document',
126
  'el-icon-document-add',
127
  'el-icon-printer',
128
  'el-icon-paperclip',
129
  'el-icon-takeaway-box',
130
  'el-icon-search',
131
  'el-icon-monitor',
132
  'el-icon-attract',
133
  'el-icon-mobile',
134
  'el-icon-scissors',
135
  'el-icon-umbrella',
136
  'el-icon-headset',
137
  'el-icon-brush',
138
  'el-icon-mouse',
139
  'el-icon-coordinate',
140
  'el-icon-magic-stick',
141
  'el-icon-reading',
142
  'el-icon-data-line',
143
  'el-icon-data-board',
144
  'el-icon-pie-chart',
145
  'el-icon-data-analysis',
146
  'el-icon-collection-tag',
147
  'el-icon-film',
148
  'el-icon-suitcase',
149
  'el-icon-suitcase-1',
150
  'el-icon-receiving',
151
  'el-icon-collection',
152
  'el-icon-files',
153
  'el-icon-notebook-1',
154
  'el-icon-notebook-2',
155
  'el-icon-toilet-paper',
156
  'el-icon-office-building',
157
  'el-icon-school',
158
  'el-icon-table-lamp',
159
  'el-icon-house',
160
  'el-icon-no-smoking',
161
  'el-icon-smoking',
162
  'el-icon-shopping-cart-full',
163
  'el-icon-shopping-cart-1',
164
  'el-icon-shopping-cart-2',
165
  'el-icon-shopping-bag-1',
166
  'el-icon-shopping-bag-2',
167
  'el-icon-sold-out',
168
  'el-icon-sell',
169
  'el-icon-present',
170
  'el-icon-box',
171
  'el-icon-bank-card',
172
  'el-icon-money',
173
  'el-icon-coin',
174
  'el-icon-wallet',
175
  'el-icon-discount',
176
  'el-icon-price-tag',
177
  'el-icon-news',
178
  'el-icon-guide',
179
  'el-icon-male',
180
  'el-icon-female',
181
  'el-icon-thumb',
182
  'el-icon-cpu',
183
  'el-icon-link',
184
  'el-icon-connection',
185
  'el-icon-open',
186
  'el-icon-turn-off',
187
  'el-icon-set-up',
188
  'el-icon-chat-round',
189
  'el-icon-chat-line-round',
190
  'el-icon-chat-square',
191
  'el-icon-chat-dot-round',
192
  'el-icon-chat-dot-square',
193
  'el-icon-chat-line-square',
194
  'el-icon-message',
195
  'el-icon-postcard',
196
  'el-icon-position',
197
  'el-icon-turn-off-microphone',
198
  'el-icon-microphone',
199
  'el-icon-close-notification',
200
  'el-icon-bangzhu',
201
  'el-icon-time',
202
  'el-icon-odometer',
203
  'el-icon-crop',
204
  'el-icon-aim',
205
  'el-icon-switch-button',
206
  'el-icon-full-screen',
207
  'el-icon-copy-document',
208
  'el-icon-mic',
209
  'el-icon-stopwatch',
210
  'el-icon-medal-1',
211
  'el-icon-medal',
212
  'el-icon-trophy',
213
  'el-icon-trophy-1',
214
  'el-icon-first-aid-kit',
215
  'el-icon-discover',
216
  'el-icon-place',
217
  'el-icon-location',
218
  'el-icon-location-outline',
219
  'el-icon-location-information',
220
  'el-icon-add-location',
221
  'el-icon-delete-location',
222
  'el-icon-map-location',
223
  'el-icon-alarm-clock',
224
  'el-icon-timer',
225
  'el-icon-watch-1',
226
  'el-icon-watch',
227
  'el-icon-lock',
228
  'el-icon-unlock',
229
  'el-icon-key',
230
  'el-icon-service',
231
  'el-icon-mobile-phone',
232
  'el-icon-bicycle',
233
  'el-icon-truck',
234
  'el-icon-ship',
235
  'el-icon-basketball',
236
  'el-icon-football',
237
  'el-icon-soccer',
238
  'el-icon-baseball',
239
  'el-icon-wind-power',
240
  'el-icon-light-rain',
241
  'el-icon-lightning',
242
  'el-icon-heavy-rain',
243
  'el-icon-sunrise',
244
  'el-icon-sunrise-1',
245
  'el-icon-sunset',
246
  'el-icon-sunny',
247
  'el-icon-cloudy',
248
  'el-icon-partly-cloudy',
249
  'el-icon-cloudy-and-sunny',
250
  'el-icon-moon',
251
  'el-icon-moon-night',
252
  'el-icon-dish',
253
  'el-icon-dish-1',
254
  'el-icon-food',
255
  'el-icon-chicken',
256
  'el-icon-fork-spoon',
257
  'el-icon-knife-fork',
258
  'el-icon-burger',
259
  'el-icon-tableware',
260
  'el-icon-sugar',
261
  'el-icon-dessert',
262
  'el-icon-ice-cream',
263
  'el-icon-hot-water',
264
  'el-icon-water-cup',
265
  'el-icon-coffee-cup',
266
  'el-icon-cold-drink',
267
  'el-icon-goblet',
268
  'el-icon-goblet-full',
269
  'el-icon-goblet-square',
270
  'el-icon-goblet-square-full',
271
  'el-icon-refrigerator',
272
  'el-icon-grape',
273
  'el-icon-watermelon',
274
  'el-icon-cherry',
275
  'el-icon-apple',
276
  'el-icon-pear',
277
  'el-icon-orange',
278
  'el-icon-coffee',
279
  'el-icon-ice-tea',
280
  'el-icon-ice-drink',
281
  'el-icon-milk-tea',
282
  'el-icon-potato-strips',
283
  'el-icon-lollipop',
284
  'el-icon-ice-cream-square',
285
  'el-icon-ice-cream-round'
286
]
287
export default data

+ 17 - 1
dmp-edge-ai/src/views/system/menu/components/BaseDialog.vue

@ -47,7 +47,7 @@
47 47
              </el-form-item>
48 48
              <el-form-item label="图标" prop="menuIcon" v-if="form.menuType === MenuType.CONTENT">
49 49
                <el-input v-model.trim="form.menuIcon" placeholder="请选择或输入图标">
50
                  <el-button slot="append" icon="el-icon-setting"></el-button>
50
                  <el-button slot="append" icon="el-icon-setting" @click="menuIconSelect"></el-button>
51 51
                </el-input>
52 52
              </el-form-item>
53 53
              <el-form-item label="是否可见" prop="hiddenFlag">
@ -73,6 +73,7 @@
73 73
<script>
74 74
import * as MenuService from '@/service/MenuService'
75 75
import { ModalType, VisibleStatus, MenuType, IframeFlag } from '@/utils/constant'
76
import bus from '@/utils/bus'
76 77
export default {
77 78
  name: 'BaseDialog',
78 79
  props: {
@ -135,11 +136,21 @@ export default {
135 136
    title() {
136 137
      return this.modalType === ModalType.ADD ? '新增菜单' : '编辑菜单'
137 138
    },
139
    // 获取所有目录
138 140
    content() {
139 141
      return this.menuList.filter((item) => item.menuType === MenuType.CONTENT)
140 142
    }
141 143
  },
144
  created() {
145
    bus.$on(bus.SET_ICON, this.setIcon)
146
  },
147
  beforeDestroy() {
148
    bus.$off(bus.SET_ICON, this.setIcon)
149
  },
142 150
  methods: {
151
    setIcon(icon) {
152
      this.form.menuIcon = icon
153
    },
143 154
    /**
144 155
     * 初始化模态框
145 156
     */
@ -168,6 +179,11 @@ export default {
168 179
        this.modalType = ModalType.ADD
169 180
      }
170 181
    },
182
    // 菜单Icon选择
183
    menuIconSelect() {
184
      this.$emit('call')
185
    },
186
    // 提交
171 187
    submit(type) {
172 188
      this.$refs['form'].validate(async (valid) => {
173 189
        if (!valid) {

+ 80 - 0
dmp-edge-ai/src/views/system/menu/components/MenuIconDialog.vue

@ -0,0 +1,80 @@
1
<template>
2
  <el-dialog
3
    title="选择图标"
4
    class="common-modal menu-icon-modal"
5
    :visible.sync="dialogVisible"
6
    width="50%"
7
    @open="initData"
8
    @closed="menuIconList = []"
9
  >
10
    <!-- 数据太多,需要结束后销毁然后再初始化-->
11
    <el-button-group>
12
      <el-button v-for="(item, index) in menuIconList" :icon="item" :key="index" @click="select(item)"></el-button>
13
    </el-button-group>
14
    <span slot="footer" class="dialog-footer">
15
      <el-button type="primary" @click="submit">确定</el-button>
16
      <el-button @click="dialogVisible = false">取消</el-button>
17
    </span>
18
  </el-dialog>
19
</template>
20
21
<script>
22
import menuIconList from '@/utils/menu-icon.config'
23
import bus from '@/utils/bus'
24
export default {
25
  name: 'MenuIconDialog',
26
  props: {
27
    show: {
28
      type: Boolean,
29
      required: true,
30
      default: false
31
    }
32
  },
33
  data() {
34
    return {
35
      menuIconList: [],
36
      icon: ''
37
    }
38
  },
39
  computed: {
40
    dialogVisible: {
41
      set(val) {
42
        this.$emit('update:show', val)
43
      },
44
      get() {
45
        return this.show
46
      }
47
    }
48
  },
49
  methods: {
50
    initData() {
51
      this.menuIconList = menuIconList
52
      this.icon = ''
53
    },
54
    submit() {
55
      this.dialogVisible = false
56
      bus.$emit(bus.SET_ICON, this.icon)
57
    },
58
    select(item) {
59
      this.icon = item
60
    }
61
  }
62
}
63
</script>
64
65
<style lang="scss">
66
.menu-icon-modal .el-dialog {
67
  display: flex;
68
  flex-direction: column;
69
  overflow: auto;
70
  max-height: 70vh;
71
  .el-dialog__header,
72
  .el-dialog__footer {
73
    flex: none;
74
  }
75
  .el-dialog__body {
76
    flex: auto;
77
    overflow: auto;
78
  }
79
}
80
</style>

+ 13 - 3
dmp-edge-ai/src/views/system/menu/index.vue

@ -58,7 +58,15 @@
58 58
      </el-table>
59 59
    </div>
60 60
    <!--新建/编辑菜单模态框-->
61
    <base-dialog :show.sync="baseVisible" :menuId="menuId" :menuList="tableData" @refresh="search"> </base-dialog>
61
    <base-dialog
62
      :show.sync="baseVisible"
63
      :menuId="menuId"
64
      :menuList="tableData"
65
      @refresh="search"
66
      @call="iconVisible = true"
67
    >
68
    </base-dialog>
69
    <menu-icon-dialog :show.sync="iconVisible"> </menu-icon-dialog>
62 70
  </div>
63 71
</template>
64 72
@ -70,7 +78,8 @@ export default {
70 78
  name: 'Menu',
71 79
  components: {
72 80
    PageHeader,
73
    BaseDialog: () => import('./components/BaseDialog')
81
    BaseDialog: () => import('./components/BaseDialog'),
82
    MenuIconDialog: () => import('./components/MenuIconDialog')
74 83
  },
75 84
  data() {
76 85
    this.VisibleStatus = VisibleStatus
@ -89,7 +98,8 @@ export default {
89 98
      },
90 99
      tableData: [],
91 100
      menuId: '',
92
      baseVisible: false
101
      baseVisible: false,
102
      iconVisible: false
93 103
    }
94 104
  },
95 105
  methods: {