今天聚焦「客戶管理」的頁面設計與基礎實作,主角是 CustomerManagement.vue。我們會完成搜尋卡(CustomerSearchCard)、結果清單(ResultsList)的雙視圖設計(卡片/表格)、以及統一按鈕與 Provider 圖示等體驗細節。
左側:CustomerSearchCard
BaseButton)右側:ResultsHeader + ResultsList
ResultsHeader:卡片/表格兩種顯示模式切換ResultsList:承接 filteredCustomers,卡片模式顯示重點、表格模式清楚列出欄位id、code、name、phone、email、provider、createdAt
CustomerManagement.vue 以 reactive([...]) 放入 mock,讓頁面載入就有資料可看,便於調整視覺與互動searchCriteria(ref)CustomerSearchCard 以 @search、@clear、@add 對外發送handleSearch(criteria):更新 searchCriteria
handleClear():重置為預設結構(無條件即顯示全部)handleAddCustomer():預留新增客戶切入點filteredCustomers 依 searchCriteria 動態計算:
BaseButton:
<!-- CustomerManagement.vue -->
<CustomerSearchCard @search="handleSearch" @clear="handleClear" @add="handleAddCustomer" />
<ResultsList
:items="filteredCustomers"
:viewMode="viewMode"
:columns="tableColumns"
keyField="id"
:itemClass="customerCardClass"
@rowClick="openCustomer"
/>
<!-- CustomerSearchCard.vue:使用 BaseButton -->
<div class="button-group">
<BaseButton variant="primary" @click="handleSearch">搜尋客戶</BaseButton>
<BaseButton variant="secondary" @click="handleClear">清除條件</BaseButton>
<BaseButton variant="success" @click="handleAdd">新增客戶</BaseButton>
</div>
keyword(字串)。@search:帶出 { keyword }。@clear:通知父層重置條件。@add:點擊「新增客戶」。watch(searchForm, { deep: true }) 即時觸發 handleSearch(),輸入同時更新清單。<template>
<input v-model="searchForm.keyword" placeholder="輸入姓名、電話、ID或Email..." />
<div class="button-group">
<BaseButton @click="handleSearch" variant="primary">搜尋客戶</BaseButton>
<BaseButton @click="handleClear" variant="secondary">清除條件</BaseButton>
<BaseButton @click="handleAdd" variant="success">新增客戶</BaseButton>
</div>
<!-- watch(searchForm) 深度監聽,輸入即觸發搜尋 -->
</template>
items:要顯示的資料陣列(本頁為 filteredCustomers)。viewMode:'card' | 'table',由 ResultsHeader 控制。columns:表格欄位定義(key/label/width)。keyField:每筆資料的唯一鍵(此處為 id)。itemClass:回傳卡片外層 class 的函式。@rowClick:點擊列或卡片觸發。#card:自訂卡片呈現;可自由排版顯示 name/code/phone/email 與 Provider 標示。#cell-<key>:自訂表格欄位內容(如金額格式化)。表格欄位定義:
const tableColumns = [
{ key: 'id', label: '客戶編號' },
{ key: 'name', label: '姓名' },
{ key: 'phone', label: '電話'},
{ key: 'email', label: 'Email'},
{ key: 'provider', label: 'Provider'},
];

到這裡,我們完成了可用的客戶管理頁面:搜尋即時、雙視圖切換、按鈕與圖示。
明日,Systemの呼吸・肆之型|CustomerManagement(下):前端 CRUD 實作與 Store/API。心を燃やせ 🔥!