06-TDesign元件庫

EUNEIR發表於2024-03-13

TDesign 具有統一的價值觀,一致的設計語言和視覺風格,幫助使用者形成連續、統一的體驗認知。在此基礎上,TDesign 提供了開箱即用的 UI 元件庫、設計指南 和相關 設計資產,以優雅高效的方式將設計和研發從重複勞動中解放出來,同時方便大家在 TDesign 的基礎上擴充套件,更好的的貼近業務需求。

  • RDesign是傳智研究院對騰訊的TDesign元件進行了簡易的封裝,可以更快的建立腳手架專案,達到快速開發的目的
  1. 安裝腳手架
npm i -g rdesign-starter-cli
  1. 建立rdesign專案
rdesign create XXX
  1. 選擇template4
  2. cd進入專案,yarn install
  3. npm run dev

RDesign的封裝:

image.png

TDesign常用元件

在專案中使用第三方元件,都需要參考元件中提供的文件,每個元件主要包含三部分內容:

  • 程式碼示例:每個元件的核心功能
  • API文件:描述每一個API的功能和注意事項
  • 設計指南:互動使用建議

image.png

入門案例

需求說明:

  • 在建立好的專案中新增路由選單
  1. 主選單:許可權管理
  2. 子選單:使用者管理和角色管理
  • 在使用者管理選單中新增元件,展示使用者列表。

實現新增路由選單

image.png

觀察router結構:

image.png

自定義路由實際上是放在了modules資料夾下,自定義路由:

mport Layout from '@/layouts/index.vue'  
import GrzxIcon from '@/assets/test-img/icon_menu_grzx.svg'  
import HomeIcon from '@/assets/test-img/icon_menu_diaodu.svg'  
import ModelIcon from '@/assets/test-img/icon_menu_zj.svg'  
  
export default [  
  {  
    path: '/permission',  
    name: 'permission',  
    component: Layout,  
    redirect: '/permission/index',  
    meta: {  
      title: '許可權管理',  
      icon: HomeIcon  
    },  
    children: [  
      {  
        path: 'index',  
        name: 'index',  
        component: () => import('@/pages/permission/user/index.vue'),  
        meta: {  
          title: '使用者管理',  
          icon: ModelIcon  
        }  
      },  
      {  
        path: 'role',  
        name: 'role',  
        component: () => import('@/pages/permission/role/index.vue'),  
        meta: {  
          title: '角色管理',  
          icon: GrzxIcon  
        }  
      }  
    ]  
  }  
]

主選單項就是父路由,子選單項就是子路由,注意子路由的path不加 /

實現使用者管理選單中展示使用者列表

image.png

TDesign提供的表格:

<h1>使用者管理</h1>  
  
<t-space direction="vertical">  
  <!-- 當資料為空需要佔位時,會顯示 cellEmptyContent -->  <t-table  
    row-key="index"  
    :data="data"  
    :columns="columns"  
    :pagination="pagination"  
    cell-empty-content="-"  
    resizable  
    lazy-load  >  
  </t-table>  
</t-space>

表頭由columns指定,表格中資料由data指定。

const data = [  
  {  
    "id": 1,  
    "name": "謝遜",  
    "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/1.jpg",  
    "gender": 1,  
    "job": "班主任",  
    "entrydate": "2023-06-09",  
    "updatetime": "2023-07-01 00:00:00"  
  },  
  {  
    "id": 2,  
    "name": "韋一笑",  
    "image": "https://web-framework.oss-cn-hangzhou.aliyuncs.com/web/2.jpg",  
    "gender": 1,  
    "job": "班主任",  
    "entrydate": "2023-06-09",  
    "updatetime": "2023-07-01 00:00:00"  
  }];  
  
const columns = ref([  
  { colKey: 'rowIndex', title: '序號', width: '100' },  
  { colKey: 'name', title: '名稱' },  
  { colKey: 'image', title: '圖片', ellipsis: true },  
  { colKey: 'gender', title: '性別' },  
  { colKey: 'job', title: '職位' },  
  { colKey: 'entrydate', title: '入職日期' },  
  { colKey: 'updatetime', title: '更新時間' },  
]);

image.png

重點是如何在表格中展示序號如何實現圖片預覽性別處理

使用ImageViewer實現圖片預覽:


<div>
    <div class="tdesign-demo-image-viewer__base">
      <t-image-viewer :images="[img]">
        <template #trigger="{ open }">
          <div class="tdesign-demo-image-viewer__ui-image">
            <img alt="test" :src="img" class="tdesign-demo-image-viewer__ui-image--img" />
            <div class="tdesign-demo-image-viewer__ui-image--hover" @click="open">
              <span><BrowseIcon size="1.4em" /> 預覽</span>
            </div>
          </div>
        </template>
      </t-image-viewer>
    </div>
  </div>

images和img是動態的值,需要將這部分內容放在table標籤內部

<t-table  
  row-key="index"  
  :data="data"  
  :columns="columns"  
  :pagination="pagination"  
  cell-empty-content="-"  
  resizable  
  lazy-load>  
  
  <!--處理圖片-->  
  <template #image="{row}"><!--row代表一行內容-->  
    <div>  
      <div class="tdesign-demo-image-viewer__base">  
  
        <t-image-viewer :images="[row.image]"><!--動態資料-->  
          <template #trigger="{ open }">  
            <div class="tdesign-demo-image-viewer__ui-image">  
              <img alt="test" :src="row.image" class="tdesign-demo-image-viewer__ui-image--img" /> <!--動態資料-->  
              <div class="tdesign-demo-image-viewer__ui-image--hover" @click="open">  
                <span><BrowseIcon size="1.4em" /> 預覽</span>  
              </div>  
            </div>  
          </template>  
        </t-image-viewer>  
      </div>  
    </div>  
  </template>  
</t-table>

#image 就是表格中需要自定義內容的列,row就是這一行資料

實現序號:

<template>  
  <h1>使用者管理</h1>  
  
  <t-space direction="vertical">  
    <!-- 當資料為空需要佔位時,會顯示 cellEmptyContent -->    <t-table  
      row-key="index"  
      :data="data"  
      :columns="columns"  
      :pagination="pagination"  
      cell-empty-content="-"  
      resizable  
      lazy-load    >  
  
      <!--處理序號-->  
      <template #rowIndex="{rowIndex}">{{rowIndex + 1}}</template>  
      <!--處理圖片-->  
      <template #image="{row}"><!--row代表一行內容-->  
        <div>  
          <div class="tdesign-demo-image-viewer__base">  
  
            <t-image-viewer :images="[row.image]"><!--動態資料-->  
              <template #trigger="{ open }">  
                <div class="tdesign-demo-image-viewer__ui-image">  
                  <img alt="test" :src="row.image" class="tdesign-demo-image-viewer__ui-image--img" /> <!--動態資料-->  
                  <div class="tdesign-demo-image-viewer__ui-image--hover" @click="open">  
                    <span><BrowseIcon size="1.4em" /> 預覽</span>  
                  </div>  
                </div>  
              </template>  
            </t-image-viewer>  
          </div>  
        </div>  
      </template>  
    </t-table>  
  </t-space>  
</template>

性別處理:

<template>  
  <h1>使用者管理</h1>  
  
  <t-space direction="vertical">  
    <!-- 當資料為空需要佔位時,會顯示 cellEmptyContent -->    <t-table  
      row-key="index"  
      :data="data"  
      :columns="columns"  
      :pagination="pagination"  
      cell-empty-content="-"  
      resizable  
      lazy-load    >  
  
      <!--處理序號-->  
      <template #rowIndex="{rowIndex}">{{rowIndex + 1}}</template>  
      <!--處理圖片-->  
      <template #image="{row}"><!--row代表一行內容-->  
        <div>  
          <div class="tdesign-demo-image-viewer__base">  
  
            <t-image-viewer :images="[row.image]"><!--動態資料-->  
              <template #trigger="{ open }">  
                <div class="tdesign-demo-image-viewer__ui-image">  
                  <img alt="test" :src="row.image" class="tdesign-demo-image-viewer__ui-image--img" /> <!--動態資料-->  
                  <div class="tdesign-demo-image-viewer__ui-image--hover" @click="open">  
                    <span><BrowseIcon size="1.4em" /> 預覽</span>  
                  </div>  
                </div>  
              </template>  
            </t-image-viewer>  
          </div>  
        </div>  
      </template>  
      <!--處理性別-->  
      <template #gender="{row}">  
        {{row.gender === 1 ? '男' : '女'}}  
      </template>  
    </t-table>  
  </t-space>  
</template>

總結

重點:自定義列模板

<template #colName={row}>

</template>

相關文章