menu.vue 16.9 KB
Newer Older
1
<template>
2
  <div>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
3
    <div class="gva-table-box">
4
      <div class="gva-btn-list flex items-center gap-3">
5
        <el-button type="primary" icon="plus" @click="addMenu('0')">新增根菜单</el-button>
6
        <el-icon  class="cursor-pointer" @click="toDoc('https://www.bilibili.com/video/BV1kv4y1g7nT/?p=4&vd_source=f2640257c21e3b547a790461ed94875e')"><VideoCameraFilled /></el-icon>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
7
      </div>
8

Mr.奇淼('s avatar
Mr.奇淼( 已提交
9 10
      <!-- 由于此处菜单跟左侧列表一一对应所以不需要分页 pageSize默认999 -->
      <el-table :data="tableData" row-key="ID">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
11 12
        <el-table-column align="left" label="ID" min-width="100" prop="ID" />
        <el-table-column align="left" label="展示名称" min-width="120" prop="authorityName">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
13 14 15 16
          <template #default="scope">
            <span>{{ scope.row.meta.title }}</span>
          </template>
        </el-table-column>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
17
        <el-table-column align="left" label="图标" min-width="140" prop="authorityName">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
18
          <template #default="scope">
19
            <div v-if="scope.row.meta.icon" class="icon-column">
P
piexlmax 已提交
20 21 22 23 24
              <el-icon>
                <component :is="scope.row.meta.icon" />
              </el-icon>
              <span>{{ scope.row.meta.icon }}</span>
            </div>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
25 26
          </template>
        </el-table-column>
27 28 29 30 31 32 33 34 35 36
        <el-table-column align="left" label="路由Name" show-overflow-tooltip min-width="160" prop="name" />
        <el-table-column align="left" label="路由Path" show-overflow-tooltip min-width="160" prop="path" />
        <el-table-column align="left" label="是否隐藏" min-width="100" prop="hidden">
          <template #default="scope">
            <span>{{ scope.row.hidden?"隐藏":"显示" }}</span>
          </template>
        </el-table-column>
        <el-table-column align="left" label="父节点" min-width="90" prop="parentId" />
        <el-table-column align="left" label="排序" min-width="70" prop="sort" />
        <el-table-column align="left" label="文件路径" min-width="360" prop="component" />
Mr.奇淼('s avatar
Mr.奇淼( 已提交
37
        <el-table-column align="left" fixed="right" label="操作" width="300">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
38 39
          <template #default="scope">
            <el-button
Mr.奇淼('s avatar
Mr.奇淼( 已提交
40 41
              type="primary"
              link
P
piexlmax 已提交
42
              icon="plus"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
43 44 45
              @click="addMenu(scope.row.ID)"
            >添加子菜单</el-button>
            <el-button
Mr.奇淼('s avatar
Mr.奇淼( 已提交
46 47
              type="primary"
              link
P
piexlmax 已提交
48
              icon="edit"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
49 50 51
              @click="editMenu(scope.row.ID)"
            >编辑</el-button>
            <el-button
52

Mr.奇淼('s avatar
Mr.奇淼( 已提交
53 54
              type="primary"
              link
P
piexlmax 已提交
55
              icon="delete"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
56 57 58 59 60 61
              @click="deleteMenu(scope.row.ID)"
            >删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </div>
62
    <el-dialog v-model="dialogFormVisible" :before-close="handleClose" :title="dialogTitle">
P
piexlmax 已提交
63
      <warning-bar title="新增菜单,需要在角色管理内配置权限才可使用" />
Mr.奇淼('s avatar
Mr.奇淼( 已提交
64
      <el-form
65
        v-if="dialogFormVisible"
何秀钢 已提交
66
        ref="menuForm"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
67 68 69
        :inline="true"
        :model="form"
        :rules="rules"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
70
        label-position="top"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
71 72
        label-width="85px"
      >
Mr.奇淼('s avatar
Mr.奇淼( 已提交
73
        <el-form-item label="路由Name" prop="path" style="width:30%">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
74
          <el-input
何秀钢 已提交
75
            v-model="form.name"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
76 77
            autocomplete="off"
            placeholder="唯一英文字符串"
何秀钢 已提交
78 79
            @change="changeName"
          />
80
        </el-form-item>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
81
        <el-form-item prop="path" style="width:30%">
82
          <template #label>
83 84 85 86
            <span style="display: inline-flex;align-items: center;">
              <span>路由Path</span>
              <el-checkbox v-model="checkFlag" style="margin-left:12px;height: auto">添加参数</el-checkbox>
            </span>
87 88
          </template>

Mr.奇淼('s avatar
Mr.奇淼( 已提交
89
          <el-input
何秀钢 已提交
90
            v-model="form.path"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
91 92 93
            :disabled="!checkFlag"
            autocomplete="off"
            placeholder="建议只在后方拼接参数"
何秀钢 已提交
94
          />
95
        </el-form-item>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
96
        <el-form-item label="是否隐藏" style="width:30%">
何秀钢 已提交
97 98 99
          <el-select v-model="form.hidden" placeholder="是否在列表隐藏">
            <el-option :value="false" label="否" />
            <el-option :value="true" label="是" />
100 101
          </el-select>
        </el-form-item>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
102
        <el-form-item label="父节点ID" style="width:30%">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
103
          <el-cascader
何秀钢 已提交
104
            v-model="form.parentId"
105
            style="width:100%"
何秀钢 已提交
106
            :disabled="!isEdit"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
107 108
            :options="menuOption"
            :props="{ checkStrictly: true,label:'title',value:'ID',disabled:'disabled',emitPath:false}"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
109
            :show-all-levels="false"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
110
            filterable
何秀钢 已提交
111
          />
112
        </el-form-item>
113
        <el-form-item label="文件路径" prop="component" style="width:60%">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
114
          <el-input v-model="form.component" autocomplete="off" placeholder="页面:view/xxx/xx.vue 插件:plugin/xx/xx.vue" @blur="fmtComponent" />
115
          <span style="font-size:12px;margin-right:12px;">如果菜单包含子菜单,请创建router-view二级路由页面或者</span><el-button style="margin-top:4px" @click="form.component = 'view/routerHolder.vue'">点我设置</el-button>
116
        </el-form-item>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
117
        <el-form-item label="展示名称" prop="meta.title" style="width:30%">
何秀钢 已提交
118
          <el-input v-model="form.meta.title" autocomplete="off" />
119
        </el-form-item>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
120
        <el-form-item label="图标" prop="meta.icon" style="width:30%">
121
          <icon :meta="form.meta" style="width:100%" />
122
        </el-form-item>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
123
        <el-form-item label="排序标记" prop="sort" style="width:30%">
何秀钢 已提交
124
          <el-input v-model.number="form.sort" autocomplete="off" />
125
        </el-form-item>
126 127 128 129
        <el-form-item prop="meta.activeName" style="width:30%">
          <template #label>
            <div>
              <span> 高亮菜单 </span>
130
              <el-tooltip content="注:当到达此路由时候,指定左侧菜单指定name会处于活跃状态(亮起),可为空,为空则为本路由Name。" placement="top" effect="light">
131 132 133 134 135 136
                <el-icon><QuestionFilled /></el-icon>
              </el-tooltip>
            </div>
          </template>
          <el-input v-model="form.meta.activeName" :placeholder="form.name" autocomplete="off" />
        </el-form-item>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
137
        <el-form-item label="KeepAlive" prop="meta.keepAlive" style="width:30%">
138
          <el-select v-model="form.meta.keepAlive" style="width:100%" placeholder="是否keepAlive缓存页面">
何秀钢 已提交
139 140
            <el-option :value="false" label="否" />
            <el-option :value="true" label="是" />
141 142
          </el-select>
        </el-form-item>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
143
        <el-form-item label="CloseTab" prop="meta.closeTab" style="width:30%">
144
          <el-select v-model="form.meta.closeTab" style="width:100%" placeholder="是否自动关闭tab">
何秀钢 已提交
145
            <el-option :value="false" label="否" />
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160
            <el-option :value="true" label="是" />
          </el-select>
        </el-form-item>
        <el-form-item style="width:30%">
          <template #label>
            <div>
              <span> 是否为基础页面 </span>
              <el-tooltip content="此项选择为是,则不会展示左侧菜单以及顶部信息。" placement="top" effect="light">
                <el-icon><QuestionFilled /></el-icon>
              </el-tooltip>
            </div>
          </template>

          <el-select v-model="form.meta.defaultMenu" style="width:100%" placeholder="是否为基础页面">
            <el-option :value="false" label="否" />
何秀钢 已提交
161
            <el-option :value="true" label="是" />
162 163
          </el-select>
        </el-form-item>
164
      </el-form>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
165
      <div>
166 167 168 169 170 171 172 173
        <div class="flex items-center gap-2">
          <el-button
            type="primary"
            icon="edit"
            @click="addParameter(form)"
          >新增菜单参数</el-button>
          <el-icon  class="cursor-pointer" @click="toDoc('https://www.bilibili.com/video/BV1kv4y1g7nT?p=9&vd_source=f2640257c21e3b547a790461ed94875e')"><VideoCameraFilled /></el-icon>
        </div>
174
        <el-table :data="form.parameters" style="width: 100%;margin-top: 12px;">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
175
          <el-table-column align="left" prop="type" label="参数类型" width="180">
176
            <template #default="scope">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
177
              <el-select v-model="scope.row.type" placeholder="请选择">
何秀钢 已提交
178 179
                <el-option key="query" value="query" label="query" />
                <el-option key="params" value="params" label="params" />
Mr.奇淼('s avatar
Mr.奇淼( 已提交
180 181 182
              </el-select>
            </template>
          </el-table-column>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
183
          <el-table-column align="left" prop="key" label="参数key" width="180">
184
            <template #default="scope">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
185
              <div>
何秀钢 已提交
186
                <el-input v-model="scope.row.key" />
Mr.奇淼('s avatar
Mr.奇淼( 已提交
187 188 189
              </div>
            </template>
          </el-table-column>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
190
          <el-table-column align="left" prop="value" label="参数值">
191
            <template #default="scope">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
192
              <div>
何秀钢 已提交
193
                <el-input v-model="scope.row.value" />
Mr.奇淼('s avatar
Mr.奇淼( 已提交
194 195 196
              </div>
            </template>
          </el-table-column>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
197
          <el-table-column align="left">
198
            <template #default="scope">
Mr.奇淼('s avatar
Mr.奇淼( 已提交
199 200 201
              <div>
                <el-button
                  type="danger"
202

P
piexlmax 已提交
203
                  icon="delete"
Mr.奇淼('s avatar
Mr.奇淼( 已提交
204 205 206 207 208 209
                  @click="deleteParameter(form.parameters,scope.$index)"
                >删除</el-button>
              </div>
            </template>
          </el-table-column>
        </el-table>
210

211 212 213 214 215 216 217 218 219 220 221 222
        <div class="flex items-center gap-2 mt-3">
          <el-button
              type="primary"
              icon="edit"
              @click="addBtn(form)"
          >新增可控按钮
          </el-button>
          <el-icon class="cursor-pointer" @click="toDoc('https://www.gin-vue-admin.com/guide/web/button-auth.html')"><QuestionFilled /></el-icon>
          <el-icon  class="cursor-pointer" @click="toDoc('https://www.bilibili.com/video/BV1kv4y1g7nT?p=11&vd_source=f2640257c21e3b547a790461ed94875e')"><VideoCameraFilled /></el-icon>
        </div>


223
        <el-table :data="form.menuBtn" style="width: 100%;margin-top: 12px;">
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242
          <el-table-column align="left" prop="name" label="按钮名称" width="180">
            <template #default="scope">
              <div>
                <el-input v-model="scope.row.name" />
              </div>
            </template>
          </el-table-column>
          <el-table-column align="left" prop="name" label="备注" width="180">
            <template #default="scope">
              <div>
                <el-input v-model="scope.row.desc" />
              </div>
            </template>
          </el-table-column>
          <el-table-column align="left">
            <template #default="scope">
              <div>
                <el-button
                  type="danger"
243

244 245 246 247 248 249 250
                  icon="delete"
                  @click="deleteBtn(form.menuBtn,scope.$index)"
                >删除</el-button>
              </div>
            </template>
          </el-table-column>
        </el-table>
Mr.奇淼('s avatar
Mr.奇淼( 已提交
251
      </div>
252 253
      <template #footer>
        <div class="dialog-footer">
254 255
          <el-button @click="closeDialog">取 消</el-button>
          <el-button type="primary" @click="enterDialog">确 定</el-button>
256 257
        </div>
      </template>
258 259
    </el-dialog>
  </div>
260 261
</template>

Mr.奇淼('s avatar
Mr.奇淼( 已提交
262
<script setup>
263
import {
R
rainyan 已提交
264
  updateBaseMenu,
265 266 267 268
  getMenuList,
  addBaseMenu,
  deleteBaseMenu,
  getBaseMenuById
何秀钢 已提交
269
} from '@/api/menu'
Mr.奇淼('s avatar
Mr.奇淼( 已提交
270
import icon from '@/view/superAdmin/menu/icon.vue'
S
Stefan阿钢 已提交
271
import WarningBar from '@/components/warningBar/warningBar.vue'
272
import { canRemoveAuthorityBtnApi } from '@/api/authorityBtn'
Mr.奇淼('s avatar
Mr.奇淼( 已提交
273 274
import { reactive, ref } from 'vue'
import { ElMessage, ElMessageBox } from 'element-plus'
275 276 277
import {QuestionFilled, VideoCameraFilled} from "@element-plus/icons-vue";

import { toDoc } from '@/utils/doc'
Mr.奇淼('s avatar
Mr.奇淼( 已提交
278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309

const rules = reactive({
  path: [{ required: true, message: '请输入菜单name', trigger: 'blur' }],
  component: [
    { required: true, message: '请输入文件路径', trigger: 'blur' }
  ],
  'meta.title': [
    { required: true, message: '请输入菜单展示名称', trigger: 'blur' }
  ]
})

const page = ref(1)
const total = ref(0)
const pageSize = ref(999)
const tableData = ref([])
const searchInfo = ref({})
// 查询
const getTableData = async() => {
  const table = await getMenuList({ page: page.value, pageSize: pageSize.value, ...searchInfo.value })
  if (table.code === 0) {
    tableData.value = table.data.list
    total.value = table.data.total
    page.value = table.data.page
    pageSize.value = table.data.pageSize
  }
}

getTableData()

// 新增参数
const addParameter = (form) => {
  if (!form.parameters) {
310
    form.parameters = []
Mr.奇淼('s avatar
Mr.奇淼( 已提交
311 312 313 314 315 316 317
  }
  form.parameters.push({
    type: 'query',
    key: '',
    value: ''
  })
}
Mr.奇淼('s avatar
Mr.奇淼( 已提交
318 319

const fmtComponent = () => {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
320
  form.value.component = form.value.component.replace(/\\/g, '/')
Mr.奇淼('s avatar
Mr.奇淼( 已提交
321 322
}

Mr.奇淼('s avatar
Mr.奇淼( 已提交
323 324 325 326 327
// 删除参数
const deleteParameter = (parameters, index) => {
  parameters.splice(index, 1)
}

328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350
// 新增可控按钮
const addBtn = (form) => {
  if (!form.menuBtn) {
    form.menuBtn = []
  }
  form.menuBtn.push({
    name: '',
    desc: '',
  })
}
// 删除可控按钮
const deleteBtn = async(btns, index) => {
  const btn = btns[index]
  if (btn.ID === 0) {
    btns.splice(index, 1)
    return
  }
  const res = await canRemoveAuthorityBtnApi({ id: btn.ID })
  if (res.code === 0) {
    btns.splice(index, 1)
  }
}

Mr.奇淼('s avatar
Mr.奇淼( 已提交
351 352 353 354
const form = ref({
  ID: 0,
  path: '',
  name: '',
Mr.奇淼('s avatar
Mr.奇淼( 已提交
355
  hidden: false,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
356 357 358
  parentId: '',
  component: '',
  meta: {
359
    activeName: '',
Mr.奇淼('s avatar
Mr.奇淼( 已提交
360 361 362 363 364
    title: '',
    icon: '',
    defaultMenu: false,
    closeTab: false,
    keepAlive: false
何秀钢 已提交
365
  },
366 367
  parameters: [],
  menuBtn: []
Mr.奇淼('s avatar
Mr.奇淼( 已提交
368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392
})
const changeName = () => {
  form.value.path = form.value.name
}

const handleClose = (done) => {
  initForm()
  done()
}
// 删除菜单
const deleteMenu = (ID) => {
  ElMessageBox.confirm('此操作将永久删除所有角色下该菜单, 是否继续?', '提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    type: 'warning'
  })
    .then(async() => {
      const res = await deleteBaseMenu({ ID })
      if (res.code === 0) {
        ElMessage({
          type: 'success',
          message: '删除成功!'
        })
        if (tableData.value.length === 1 && page.value > 1) {
          page.value--
393
        }
Mr.奇淼('s avatar
Mr.奇淼( 已提交
394
        getTableData()
Mr.奇淼('s avatar
Mr.奇淼( 已提交
395
      }
Mr.奇淼('s avatar
Mr.奇淼( 已提交
396 397 398 399 400
    })
    .catch(() => {
      ElMessage({
        type: 'info',
        message: '已取消删除'
何秀钢 已提交
401
      })
Mr.奇淼('s avatar
Mr.奇淼( 已提交
402 403 404 405 406 407 408 409 410 411 412 413
    })
}
// 初始化弹窗内表格方法
const menuForm = ref(null)
const checkFlag = ref(false)
const initForm = () => {
  checkFlag.value = false
  menuForm.value.resetFields()
  form.value = {
    ID: 0,
    path: '',
    name: '',
Mr.奇淼('s avatar
Mr.奇淼( 已提交
414
    hidden: false,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
415 416 417 418 419 420
    parentId: '',
    component: '',
    meta: {
      title: '',
      icon: '',
      defaultMenu: false,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
421 422
      closeTab: false,
      keepAlive: false
Mr.奇淼('s avatar
Mr.奇淼( 已提交
423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472
    }
  }
}
// 关闭弹窗

const dialogFormVisible = ref(false)
const closeDialog = () => {
  initForm()
  dialogFormVisible.value = false
}
// 添加menu
const enterDialog = async() => {
  menuForm.value.validate(async valid => {
    if (valid) {
      let res
      if (isEdit.value) {
        res = await updateBaseMenu(form.value)
      } else {
        res = await addBaseMenu(form.value)
      }
      if (res.code === 0) {
        ElMessage({
          type: 'success',
          message: isEdit.value ? '编辑成功' : '添加成功!'
        })
        getTableData()
      }
      initForm()
      dialogFormVisible.value = false
    }
  })
}

const menuOption = ref([
  {
    ID: '0',
    title: '根菜单'
  }
])
const setOptions = () => {
  menuOption.value = [
    {
      ID: '0',
      title: '根目录'
    }
  ]
  setMenuOptions(tableData.value, menuOption.value, false)
}
const setMenuOptions = (menuData, optionsData, disabled) => {
  menuData &&
Mr.奇淼('s avatar
Mr.奇淼( 已提交
473
        menuData.forEach(item => {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
474
          if (item.children && item.children.length) {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
475 476 477
            const option = {
              title: item.meta.title,
              ID: String(item.ID),
Mr.奇淼('s avatar
Mr.奇淼( 已提交
478
              disabled: disabled || item.ID === form.value.ID,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
479
              children: []
何秀钢 已提交
480
            }
Mr.奇淼('s avatar
Mr.奇淼( 已提交
481
            setMenuOptions(
Mr.奇淼('s avatar
Mr.奇淼( 已提交
482 483
              item.children,
              option.children,
Mr.奇淼('s avatar
Mr.奇淼( 已提交
484
              disabled || item.ID === form.value.ID
何秀钢 已提交
485 486
            )
            optionsData.push(option)
Mr.奇淼('s avatar
Mr.奇淼( 已提交
487 488 489 490
          } else {
            const option = {
              title: item.meta.title,
              ID: String(item.ID),
Mr.奇淼('s avatar
Mr.奇淼( 已提交
491
              disabled: disabled || item.ID === form.value.ID
何秀钢 已提交
492 493
            }
            optionsData.push(option)
494
          }
何秀钢 已提交
495
        })
Mr.奇淼('s avatar
Mr.奇淼( 已提交
496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522
}

// 添加菜单方法,id为 0则为添加根菜单
const isEdit = ref(false)
const dialogTitle = ref('新增菜单')
const addMenu = (id) => {
  dialogTitle.value = '新增菜单'
  form.value.parentId = String(id)
  isEdit.value = false
  setOptions()
  dialogFormVisible.value = true
}
// 修改菜单方法
const editMenu = async(id) => {
  dialogTitle.value = '编辑菜单'
  const res = await getBaseMenuById({ id })
  form.value = res.data.menu
  isEdit.value = true
  setOptions()
  dialogFormVisible.value = true
}

</script>

<script>
export default {
  name: 'Menus',
何秀钢 已提交
523
}
524
</script>
何秀钢 已提交
525

526
<style scoped lang="scss">
K
yx  
klausY 已提交
527
.warning {
Mr.奇淼('s avatar
Mr.奇淼( 已提交
528
  color: #dc143c;
K
yx  
klausY 已提交
529
}
P
piexlmax 已提交
530 531 532 533 534 535 536
.icon-column{
  display: flex;
  align-items: center;
  .el-icon{
    margin-right: 8px;
  }
}
K
gengxin  
klausY 已提交
537
</style>