menu-table.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <template>
  2. <div id="menu-table">
  3. <el-table :data="data" row-key="_id" border>
  4. <el-table-column align="center" label="顺序" sortable prop="order_num" width="80"></el-table-column>
  5. <el-table-column align="center" label="图标" width="80">
  6. <template #default="{ row }"><span :class="['iconfont', row.icon]"></span></template>
  7. </el-table-column>
  8. <el-table-column align="center" label="菜单名称" prop="name"></el-table-column>
  9. <el-table-column align="center" label="路由名称" prop="route_name"></el-table-column>
  10. <el-table-column align="center" label="父级菜单" prop="parent_name"></el-table-column>
  11. <el-table-column align="center" label="路由地址" prop="path"></el-table-column>
  12. <el-table-column align="center" label="组件地址" prop="component"></el-table-column>
  13. <el-table-column align="center" label="菜单类型" prop="type" width="100">
  14. <template #default="{ row }">{{ getType(row) }} </template>
  15. </el-table-column>
  16. <el-table-column align="center" label="状态" prop="is_use" width="80">
  17. <template #default="{ row }">
  18. <el-tag v-if="row.is_use === '0'" type="success"> {{ getStatus(row) }} </el-tag>
  19. <el-tag v-else type="info"> {{ getStatus(row) }} </el-tag>
  20. </template>
  21. </el-table-column>
  22. <el-table-column align="center" label="备注" prop="remark" width="100"> </el-table-column>
  23. <el-table-column align="center" :label="$t('common.opera')">
  24. <template #default="{ row }">
  25. <el-link :underline="false" type="primary" size="mini" @click="toUpdate(row)" style="margin-right: 10px">{{
  26. $t('common.update') }}</el-link>
  27. <el-link :underline="false" type="primary" size="mini" @click="toAddNext(row)" style="margin-right: 10px">
  28. 添加下一级
  29. </el-link>
  30. <el-link v-if="row.is_default !== '0'" :underline="false" type="danger" size="mini" @click="toDelete(row)">
  31. {{ $t('common.delete') }}
  32. </el-link>
  33. </template>
  34. </el-table-column>
  35. </el-table>
  36. </div>
  37. </template>
  38. <script setup>
  39. const data = inject('menuTree', [])
  40. const typeList = inject('typeList', [])
  41. const toUpdate = inject('toUpdate')
  42. const toAddNext = inject('toAddNext')
  43. const toDelete = inject('toDelete')
  44. const { t } = useI18n()
  45. const getType = (row) => {
  46. let word = ''
  47. const r = typeList.find((f) => f.value === row.type)
  48. if (r) word = r.label
  49. return word
  50. }
  51. const getStatus = (row) => {
  52. let word = ''
  53. switch (row.is_use) {
  54. case '0':
  55. word = t('common.is_use_abled')
  56. break
  57. case '1':
  58. word = t('common.is_use_disabled')
  59. break
  60. default:
  61. break
  62. }
  63. return word
  64. }
  65. </script>
  66. <style scoped></style>