iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0

今天一樣來研究 pure-admin-thin 專案

拆解外框

先試著找到首頁路由檔案將 Layout 註解看會發生什麼事情

//\pure-admin-thin\src\router\modules\home.ts
import { $t } from "/@/plugins/i18n";
import type { RouteConfigsTable } from "/#/index";
// const Layout = () => import("/@/layout/index.vue");

const homeRouter: RouteConfigsTable = {
  path: "/",
  name: "Home",
  // component: Layout,
  redirect: "/welcome",
  meta: {
    icon: "home-filled",
    title: $t("menus.hshome"),
    rank: 0
  },
  children: [
    {
      path: "/welcome",
      name: "Welcome",
      component: () => import("/@/views/welcome/index.vue"),
      meta: {
        title: $t("menus.hshome")
      }
    }
  ]
};

export default homeRouter;

結果圖:
welcom
外框直接消失 只剩下內容了
朝著這個方向鑽研就會找到 src 資料夾下面有 layout
layout

分析組件架構

主檔案 \pure-admin-thin\src\layout\index.vue
圖解
架構

進一步細分

  • sidebar 側邊欄位
  • navbar 導航欄位
  • tag 標籤(分頁)欄位
  • appMain 主內容

navbar 又可分成

navbar


總結

拆分
再看一次資料夾結構就了解了
layout


剛開始看比較複雜後來看到下面這段就懂作者在做什麼了

//`\pure-admin-thin\src\layout\index.vue`
//第111行 設定三種狀態的導航欄模式
//vertical mix horizontal

const layoutHeader = defineComponent({
  render() {
    return h(
      "div",
      {
        class: { "fixed-header": set.fixedHeader },
        style: [
          set.hideTabs && layout.value.includes("horizontal")
            ? isDark.value
              ? "box-shadow: 0 1px 4px #0d0d0d"
              : "box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08)"
            : ""
        ]
      },
      {
        default: () => [
          !pureSetting.hiddenSideBar &&
          (layout.value.includes("vertical") || layout.value.includes("mix"))
            ? h(navbar)
            : h("div"),
          !pureSetting.hiddenSideBar && layout.value.includes("horizontal")
            ? h(Horizontal)
            : h("div"),
          h(
            tag,
            {},
            {
              default: () => [
                h(
                  "span",
                  {
                    onClick: onFullScreen
                  },
                  {
                    default: () => [
                      !pureSetting.hiddenSideBar
                        ? h(fullScreen, { class: "dark:text-white" })
                        : h(exitScreen, { class: "dark:text-white" })
                    ]
                  }
                )
              ]
            }
          )
        ]
      }
    );
  }
});

補充

\pure-admin-thin\src\layout\index.vue有引入appMain組件
底下語法卻是用 app-main 兩者通用但是閱讀上不太友善!


上一篇
第九天 閱讀 pure-admin-table
下一篇
第十一天 實作前後端串接具有權限的路由
系列文
教練我想做一個後台管理系統,阿我忘記我只有一個人沒有教練,那用試著以vue-pure-admin為基底做做看31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言