-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
{{ record.name }}
-
{{ record.code }}
-
-
-
+
-
-
-
- {{ serviceTypeMap[st]?.text }}
-
-
-
-
-
-
- {{ businessStatusMap[record.businessStatus]?.text }}
-
-
-
-
-
-
- {{ auditStatusMap[record.auditStatus]?.text }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ :is-submitting="isSubmitting"
+ :name="formState.name"
+ :code="formState.code"
+ :contact-phone="formState.contactPhone"
+ :manager-name="formState.managerName"
+ :address="formState.address"
+ :business-status="formState.businessStatus"
+ :service-types="formState.serviceTypes"
+ :business-status-options="businessStatusOptions"
+ :service-type-options="serviceTypeOptions"
+ :on-set-name="setFormName"
+ :on-set-code="setFormCode"
+ :on-set-contact-phone="setFormContactPhone"
+ :on-set-manager-name="setFormManagerName"
+ :on-set-address="setFormAddress"
+ :on-set-business-status="setFormBusinessStatus"
+ :on-set-service-types="setFormServiceTypes"
+ @update:open="setDrawerVisible"
+ @submit="handleSubmitStore"
+ />
+
+
diff --git a/apps/web-antd/src/views/store/list/styles/base.less b/apps/web-antd/src/views/store/list/styles/base.less
new file mode 100644
index 0000000..f7729b0
--- /dev/null
+++ b/apps/web-antd/src/views/store/list/styles/base.less
@@ -0,0 +1,35 @@
+/* 门店列表页基础布局(头部、筛选、统计)样式。 */
+.page-store-list {
+ .store-list-page-extra {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ }
+
+ .store-filter-card .ant-card-body {
+ padding: 12px 16px;
+ }
+
+ .store-filter-row {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 12px;
+ align-items: center;
+ }
+
+ .filter-search {
+ width: 260px;
+ }
+
+ .filter-select {
+ width: 130px;
+ }
+
+ .store-stats-row .ant-card {
+ transition: transform 0.2s ease;
+ }
+
+ .store-stats-row .ant-card:hover {
+ transform: translateY(-1px);
+ }
+}
diff --git a/apps/web-antd/src/views/store/list/styles/drawer.less b/apps/web-antd/src/views/store/list/styles/drawer.less
new file mode 100644
index 0000000..0569778
--- /dev/null
+++ b/apps/web-antd/src/views/store/list/styles/drawer.less
@@ -0,0 +1,50 @@
+/* 门店编辑抽屉样式。 */
+.store-editor-drawer-wrap {
+ .ant-drawer-content-wrapper {
+ box-shadow:
+ 0 8px 24px rgb(0 0 0 / 8%),
+ 0 2px 6px rgb(0 0 0 / 4%);
+ }
+
+ .ant-drawer-header {
+ min-height: 56px;
+ padding: 0 24px;
+ border-bottom: 1px solid #f0f0f0;
+ }
+
+ .ant-drawer-title {
+ font-size: 16px;
+ font-weight: 600;
+ color: #1f1f1f;
+ }
+
+ .ant-drawer-body {
+ padding: 20px 24px;
+ }
+
+ .ant-drawer-footer {
+ padding: 14px 24px;
+ border-top: 1px solid #f0f0f0;
+ }
+}
+
+.page-store-list {
+ .store-drawer-form .store-drawer-section-title {
+ margin: 0 0 16px;
+ padding-left: 10px;
+ font-size: 15px;
+ font-weight: 600;
+ color: #1f1f1f;
+ border-left: 3px solid #1677ff;
+ }
+
+ .store-drawer-form .store-drawer-section-title + .ant-form-item {
+ margin-top: 2px;
+ }
+
+ .store-drawer-footer {
+ display: flex;
+ gap: 8px;
+ justify-content: flex-end;
+ }
+}
diff --git a/apps/web-antd/src/views/store/list/styles/index.less b/apps/web-antd/src/views/store/list/styles/index.less
new file mode 100644
index 0000000..4deea49
--- /dev/null
+++ b/apps/web-antd/src/views/store/list/styles/index.less
@@ -0,0 +1,5 @@
+/* 门店列表页面样式聚合入口(仅负责分片导入)。 */
+@import './base.less';
+@import './table.less';
+@import './drawer.less';
+@import './responsive.less';
diff --git a/apps/web-antd/src/views/store/list/styles/responsive.less b/apps/web-antd/src/views/store/list/styles/responsive.less
new file mode 100644
index 0000000..6be9d88
--- /dev/null
+++ b/apps/web-antd/src/views/store/list/styles/responsive.less
@@ -0,0 +1,18 @@
+/* 门店列表页响应式样式。 */
+@media (max-width: 768px) {
+ .page-store-list {
+ .store-list-page-extra {
+ gap: 6px;
+ }
+
+ .filter-search {
+ width: 100%;
+ min-width: 0;
+ }
+
+ .filter-select {
+ width: calc(50% - 6px);
+ min-width: 0;
+ }
+ }
+}
diff --git a/apps/web-antd/src/views/store/list/styles/table.less b/apps/web-antd/src/views/store/list/styles/table.less
new file mode 100644
index 0000000..3307e71
--- /dev/null
+++ b/apps/web-antd/src/views/store/list/styles/table.less
@@ -0,0 +1,50 @@
+/* 门店列表表格区样式。 */
+.page-store-list {
+ .store-list-table .store-info-cell {
+ display: flex;
+ gap: 12px;
+ align-items: center;
+ }
+
+ .store-list-table .store-avatar {
+ display: flex;
+ flex-shrink: 0;
+ align-items: center;
+ justify-content: center;
+ width: 36px;
+ height: 36px;
+ color: #fff;
+ border-radius: 10px;
+ }
+
+ .store-list-table .store-info-text {
+ min-width: 0;
+ }
+
+ .store-list-table .store-name {
+ overflow: hidden;
+ font-size: 14px;
+ font-weight: 500;
+ color: #1f1f1f;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
+ .store-list-table .store-code {
+ margin-top: 2px;
+ font-size: 12px;
+ color: #9ca3af;
+ }
+
+ .store-list-table .service-tag {
+ margin-inline-end: 6px;
+ margin-bottom: 4px;
+ }
+
+ .store-list-table .store-action-row {
+ display: flex;
+ gap: 8px;
+ align-items: center;
+ white-space: nowrap;
+ }
+}
diff --git a/apps/web-antd/src/views/store/list/types.ts b/apps/web-antd/src/views/store/list/types.ts
new file mode 100644
index 0000000..69ef862
--- /dev/null
+++ b/apps/web-antd/src/views/store/list/types.ts
@@ -0,0 +1,75 @@
+/**
+ * 门店列表页专属类型定义:
+ * - 页面状态(筛选、分页、抽屉表单)
+ * - 组件交互参数
+ */
+import type {
+ ServiceType,
+ StoreAuditStatus,
+ StoreBusinessStatus,
+} from '#/api/store';
+
+/** 表格分页变更参数。 */
+export interface TablePagination {
+ current?: number;
+ pageSize?: number;
+}
+
+/** 下拉选项通用结构。 */
+export interface SelectOptionItem
{
+ label: string;
+ value: T;
+}
+
+/** 页面分页状态。 */
+export interface PagePaginationState {
+ current: number;
+ pageSize: number;
+ total: number;
+}
+
+/** 页面筛选条件。 */
+export interface StoreFilterState {
+ auditStatus?: StoreAuditStatus;
+ businessStatus?: StoreBusinessStatus;
+ keyword: string;
+ serviceType?: ServiceType;
+}
+
+/** 抽屉表单状态。 */
+export interface StoreFormState {
+ address: string;
+ businessStatus: StoreBusinessStatus;
+ code: string;
+ contactPhone: string;
+ coverImage: string;
+ id: string;
+ managerName: string;
+ name: string;
+ serviceTypes: ServiceType[];
+}
+
+/** 状态标签元信息。 */
+export interface StatusTagMeta {
+ color: string;
+ text: string;
+}
+
+/** 统计卡片项。 */
+export interface StatCardItem {
+ color: string;
+ title: string;
+ value: number;
+}
+
+/** 抽屉模式。 */
+export type DrawerMode = 'create' | 'edit';
+
+/** 表格分页展示对象。 */
+export interface StoreTablePagination {
+ current: number;
+ pageSize: number;
+ showSizeChanger: boolean;
+ showTotal: (total: number) => string;
+ total: number;
+}