Commit ed6ada0d5a6a4fbba4dcf93867a2cf908e181745

Authored by “wangming”
1 parent 1c7cb610

Update MemberProfileDialog and Dashboard components with improved styling and la…

…yout adjustments. Increased font sizes and padding for better readability, and streamlined the member search input for a cleaner look.
store-pc/src/components/MemberProfileDialog.vue
@@ -798,7 +798,7 @@ export default { @@ -798,7 +798,7 @@ export default {
798 margin-bottom: 10px; 798 margin-bottom: 10px;
799 } 799 }
800 .member-name { 800 .member-name {
801 - font-size: 16px; 801 + font-size: 17px;
802 font-weight: 600; 802 font-weight: 600;
803 color: #0f172a; 803 color: #0f172a;
804 letter-spacing: 0.3px; 804 letter-spacing: 0.3px;
@@ -807,8 +807,8 @@ export default { @@ -807,8 +807,8 @@ export default {
807 } 807 }
808 .level-tag { 808 .level-tag {
809 display: inline-block; 809 display: inline-block;
810 - font-size: 10px;  
811 - padding: 2px 12px; 810 + font-size: 11px;
  811 + padding: 2px 14px;
812 border-radius: 999px; 812 border-radius: 999px;
813 font-weight: 600; 813 font-weight: 600;
814 margin-bottom: 8px; 814 margin-bottom: 8px;
@@ -824,7 +824,7 @@ export default { @@ -824,7 +824,7 @@ export default {
824 display: flex; 824 display: flex;
825 align-items: center; 825 align-items: center;
826 justify-content: center; 826 justify-content: center;
827 - font-size: 12px; 827 + font-size: 13px;
828 color: #64748b; 828 color: #64748b;
829 flex-wrap: wrap; 829 flex-wrap: wrap;
830 text-align: center; 830 text-align: center;
@@ -841,7 +841,7 @@ export default { @@ -841,7 +841,7 @@ export default {
841 align-items: center; 841 align-items: center;
842 justify-content: center; 842 justify-content: center;
843 gap: 8px; 843 gap: 8px;
844 - font-size: 12px; 844 + font-size: 13px;
845 color: #64748b; 845 color: #64748b;
846 margin-bottom: 6px; 846 margin-bottom: 6px;
847 flex-wrap: wrap; 847 flex-wrap: wrap;
@@ -849,11 +849,11 @@ export default { @@ -849,11 +849,11 @@ export default {
849 .member-phone { 849 .member-phone {
850 color: #16a34a; 850 color: #16a34a;
851 font-weight: 500; 851 font-weight: 500;
852 - i { margin-right: 2px; font-size: 12px; } 852 + i { margin-right: 2px; font-size: 13px; }
853 } 853 }
854 .member-dah { 854 .member-dah {
855 color: #94a3b8; 855 color: #94a3b8;
856 - font-size: 11px; 856 + font-size: 12px;
857 } 857 }
858 .member-type-tags { 858 .member-type-tags {
859 display: flex; 859 display: flex;
@@ -863,9 +863,9 @@ export default { @@ -863,9 +863,9 @@ export default {
863 margin-bottom: 4px; 863 margin-bottom: 4px;
864 } 864 }
865 .type-tag { 865 .type-tag {
866 - padding: 1px 8px; 866 + padding: 2px 10px;
867 border-radius: 999px; 867 border-radius: 999px;
868 - font-size: 10px; 868 + font-size: 11px;
869 font-weight: 500; 869 font-weight: 500;
870 } 870 }
871 .type-tag--beauty { 871 .type-tag--beauty {
@@ -892,19 +892,19 @@ export default { @@ -892,19 +892,19 @@ export default {
892 flex-wrap: wrap; 892 flex-wrap: wrap;
893 } 893 }
894 .member-visit { 894 .member-visit {
895 - font-size: 11px; 895 + font-size: 12px;
896 color: #94a3b8; 896 color: #94a3b8;
897 cursor: default; 897 cursor: default;
898 - i { margin-right: 3px; font-size: 11px; } 898 + i { margin-right: 3px; font-size: 12px; }
899 } 899 }
900 .member-sleep { 900 .member-sleep {
901 - font-size: 10px;  
902 - padding: 1px 8px; 901 + font-size: 11px;
  902 + padding: 2px 8px;
903 border-radius: 999px; 903 border-radius: 999px;
904 background: rgba(249,115,22,0.1); 904 background: rgba(249,115,22,0.1);
905 color: #ea580c; 905 color: #ea580c;
906 font-weight: 500; 906 font-weight: 500;
907 - i { margin-right: 2px; font-size: 10px; } 907 + i { margin-right: 2px; font-size: 11px; }
908 } 908 }
909 .tag-row { 909 .tag-row {
910 margin-top: 8px; 910 margin-top: 8px;
@@ -914,9 +914,9 @@ export default { @@ -914,9 +914,9 @@ export default {
914 gap: 4px; 914 gap: 4px;
915 } 915 }
916 .member-tag { 916 .member-tag {
917 - padding: 1px 8px; 917 + padding: 2px 8px;
918 border-radius: 999px; 918 border-radius: 999px;
919 - font-size: 10px; 919 + font-size: 11px;
920 background: rgba(129,140,248,0.1); 920 background: rgba(129,140,248,0.1);
921 color: #4f46e5; 921 color: #4f46e5;
922 border: 1px solid rgba(129,140,248,0.15); 922 border: 1px solid rgba(129,140,248,0.15);
@@ -928,21 +928,21 @@ export default { @@ -928,21 +928,21 @@ export default {
928 border-top: 1px solid rgba(226,232,240,0.5); 928 border-top: 1px solid rgba(226,232,240,0.5);
929 } 929 }
930 .sidebar-section-title { 930 .sidebar-section-title {
931 - font-size: 12px; 931 + font-size: 13px;
932 font-weight: 600; 932 font-weight: 600;
933 color: #64748b; 933 color: #64748b;
934 margin-bottom: 6px; 934 margin-bottom: 6px;
935 display: flex; 935 display: flex;
936 align-items: center; 936 align-items: center;
937 gap: 4px; 937 gap: 4px;
938 - i { font-size: 12px; color: #6366f1; } 938 + i { font-size: 13px; color: #6366f1; }
939 } 939 }
940 .sidebar-row { 940 .sidebar-row {
941 display: flex; 941 display: flex;
942 justify-content: space-between; 942 justify-content: space-between;
943 align-items: center; 943 align-items: center;
944 - padding: 3px 0;  
945 - min-height: 22px; 944 + padding: 4px 0;
  945 + min-height: 24px;
946 } 946 }
947 .sidebar-row--highlight { 947 .sidebar-row--highlight {
948 background: linear-gradient(135deg, rgba(37,99,235,0.04), rgba(124,58,237,0.04)); 948 background: linear-gradient(135deg, rgba(37,99,235,0.04), rgba(124,58,237,0.04));
@@ -956,15 +956,15 @@ export default { @@ -956,15 +956,15 @@ export default {
956 } 956 }
957 .sidebar-label { 957 .sidebar-label {
958 color: #94a3b8; 958 color: #94a3b8;
959 - font-size: 11px; 959 + font-size: 12px;
960 flex-shrink: 0; 960 flex-shrink: 0;
961 display: flex; 961 display: flex;
962 align-items: center; 962 align-items: center;
963 - i { margin-right: 3px; font-size: 11px; color: #94a3b8; } 963 + i { margin-right: 3px; font-size: 12px; color: #94a3b8; }
964 } 964 }
965 .sidebar-value { 965 .sidebar-value {
966 color: #1e293b; 966 color: #1e293b;
967 - font-size: 12px; 967 + font-size: 13px;
968 font-weight: 500; 968 font-weight: 500;
969 overflow: hidden; 969 overflow: hidden;
970 text-overflow: ellipsis; 970 text-overflow: ellipsis;
@@ -973,12 +973,12 @@ export default { @@ -973,12 +973,12 @@ export default {
973 text-align: right; 973 text-align: right;
974 } 974 }
975 .sidebar-value--amount { 975 .sidebar-value--amount {
976 - font-size: 13px; 976 + font-size: 14px;
977 font-weight: 600; 977 font-weight: 600;
978 color: #0f172a; 978 color: #0f172a;
979 } 979 }
980 .sidebar-value--gradient { 980 .sidebar-value--gradient {
981 - font-size: 14px; 981 + font-size: 15px;
982 font-weight: 700; 982 font-weight: 700;
983 background: linear-gradient(135deg, #2563eb, #7c3aed); 983 background: linear-gradient(135deg, #2563eb, #7c3aed);
984 -webkit-background-clip: text; 984 -webkit-background-clip: text;
@@ -1023,14 +1023,14 @@ export default { @@ -1023,14 +1023,14 @@ export default {
1023 background: transparent; 1023 background: transparent;
1024 padding: 0 8px; 1024 padding: 0 8px;
1025 border-radius: 999px; 1025 border-radius: 999px;
1026 - font-size: 12px; 1026 + font-size: 13px;
1027 color: #4b5563; 1027 color: #4b5563;
1028 cursor: pointer; 1028 cursor: pointer;
1029 transition: color 0.25s ease; 1029 transition: color 0.25s ease;
1030 flex: 1 1 0; 1030 flex: 1 1 0;
1031 text-align: center; 1031 text-align: center;
1032 - height: 26px;  
1033 - line-height: 26px; 1032 + height: 30px;
  1033 + line-height: 30px;
1034 position: relative; 1034 position: relative;
1035 z-index: 1; 1035 z-index: 1;
1036 } 1036 }
@@ -1053,9 +1053,9 @@ export default { @@ -1053,9 +1053,9 @@ export default {
1053 .records-search { width: 160px; } 1053 .records-search { width: 160px; }
1054 .records-search ::v-deep .el-input__inner { 1054 .records-search ::v-deep .el-input__inner {
1055 border-radius: 999px; 1055 border-radius: 999px;
1056 - height: 26px;  
1057 - line-height: 26px;  
1058 - font-size: 12px; 1056 + height: 30px;
  1057 + line-height: 30px;
  1058 + font-size: 13px;
1059 border-color: #e2e8f0; 1059 border-color: #e2e8f0;
1060 transition: border-color 0.2s; 1060 transition: border-color 0.2s;
1061 &:focus { border-color: #6366f1; } 1061 &:focus { border-color: #6366f1; }
@@ -1083,20 +1083,20 @@ export default { @@ -1083,20 +1083,20 @@ export default {
1083 -ms-overflow-style: none; 1083 -ms-overflow-style: none;
1084 &::-webkit-scrollbar { display: none; } 1084 &::-webkit-scrollbar { display: none; }
1085 } 1085 }
1086 -.record-table, .rights-table { font-size: 12px; } 1086 +.record-table, .rights-table { font-size: 13px; }
1087 1087
1088 ::v-deep .el-table { 1088 ::v-deep .el-table {
1089 &::before { display: none; } 1089 &::before { display: none; }
1090 th { 1090 th {
1091 - padding: 6px 0;  
1092 - font-size: 11px; 1091 + padding: 8px 0;
  1092 + font-size: 12px;
1093 background: #f8fafc; 1093 background: #f8fafc;
1094 color: #64748b; 1094 color: #64748b;
1095 font-weight: 500; 1095 font-weight: 500;
1096 border-bottom: 1px solid #e2e8f0; 1096 border-bottom: 1px solid #e2e8f0;
1097 } 1097 }
1098 td { 1098 td {
1099 - padding: 5px 0; 1099 + padding: 7px 0;
1100 border-bottom: 1px solid #f1f5f9; 1100 border-bottom: 1px solid #f1f5f9;
1101 } 1101 }
1102 .el-table__row:hover > td { background: rgba(99,102,241,0.03); } 1102 .el-table__row:hover > td { background: rgba(99,102,241,0.03); }
@@ -1110,7 +1110,7 @@ export default { @@ -1110,7 +1110,7 @@ export default {
1110 } 1110 }
1111 1111
1112 /* ========== 状态胶囊 ========== */ 1112 /* ========== 状态胶囊 ========== */
1113 -.status-capsule { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 10px; font-weight: 500; line-height: 1.6; } 1113 +.status-capsule { display: inline-block; padding: 2px 10px; border-radius: 999px; font-size: 11px; font-weight: 500; line-height: 1.6; }
1114 .status--green { background: rgba(34,197,94,0.1); color: #16a34a; } 1114 .status--green { background: rgba(34,197,94,0.1); color: #16a34a; }
1115 .status--orange { background: rgba(249,115,22,0.1); color: #ea580c; } 1115 .status--orange { background: rgba(249,115,22,0.1); color: #ea580c; }
1116 .status--red { background: rgba(239,68,68,0.1); color: #dc2626; } 1116 .status--red { background: rgba(239,68,68,0.1); color: #dc2626; }
@@ -1134,18 +1134,18 @@ export default { @@ -1134,18 +1134,18 @@ export default {
1134 display: inline-flex; 1134 display: inline-flex;
1135 align-items: center; 1135 align-items: center;
1136 justify-content: center; 1136 justify-content: center;
1137 - gap: 3px;  
1138 - min-width: 80px;  
1139 - height: 28px;  
1140 - padding: 0 12px; 1137 + gap: 4px;
  1138 + min-width: 84px;
  1139 + height: 32px;
  1140 + padding: 0 14px;
1141 border-radius: 999px; 1141 border-radius: 999px;
1142 - font-size: 12px; 1142 + font-size: 13px;
1143 font-weight: 500; 1143 font-weight: 500;
1144 cursor: pointer; 1144 cursor: pointer;
1145 position: relative; 1145 position: relative;
1146 overflow: hidden; 1146 overflow: hidden;
1147 transition: color 0.2s ease, box-shadow 0.2s ease, transform 0.12s ease; 1147 transition: color 0.2s ease, box-shadow 0.2s ease, transform 0.12s ease;
1148 - i { font-size: 12px; } 1148 + i { font-size: 13px; }
1149 } 1149 }
1150 .records-op-btn--ghost { 1150 .records-op-btn--ghost {
1151 background: rgba(239,246,255,0.9); 1151 background: rgba(239,246,255,0.9);
store-pc/src/views/dashboard/index.vue
@@ -7,14 +7,8 @@ @@ -7,14 +7,8 @@
7 <div class="store-subtitle">今日邀约 · 预约 · 开单,一眼总览</div> 7 <div class="store-subtitle">今日邀约 · 预约 · 开单,一眼总览</div>
8 </div> 8 </div>
9 <div class="member-search"> 9 <div class="member-search">
10 - <el-input  
11 - v-model="memberKeyword"  
12 - class="member-search-input"  
13 - clearable  
14 - placeholder="快速查询会员:手机号 / 姓名 / 会员卡号"  
15 - prefix-icon="el-icon-search"  
16 - @keyup.enter.native="handleMemberSearch"  
17 - > 10 + <el-input v-model="memberKeyword" class="member-search-input" clearable placeholder="快速查询会员:手机号 / 姓名 / 会员卡号"
  11 + prefix-icon="el-icon-search" @keyup.enter.native="handleMemberSearch">
18 <el-button slot="append" type="primary" @click="handleMemberSearch">查询</el-button> 12 <el-button slot="append" type="primary" @click="handleMemberSearch">查询</el-button>
19 </el-input> 13 </el-input>
20 </div> 14 </div>
@@ -49,17 +43,9 @@ @@ -49,17 +43,9 @@
49 <!-- 六大业务板块 --> 43 <!-- 六大业务板块 -->
50 <div class="modules-grid"> 44 <div class="modules-grid">
51 <el-row :gutter="16"> 45 <el-row :gutter="16">
52 - <el-col  
53 - v-for="module in modules"  
54 - :key="module.key"  
55 - :span="8"  
56 - >  
57 - <el-card  
58 - shadow="hover"  
59 - class="module-card"  
60 - :body-style="{ padding: '18px 18px 16px' }"  
61 - @click.native="goModule(module)"  
62 - > 46 + <el-col v-for="module in modules" :key="module.key" :span="8">
  47 + <el-card shadow="hover" class="module-card" :body-style="{ padding: '18px 18px 16px' }"
  48 + @click.native="handleModuleSecondary(module)">
63 <div class="module-header"> 49 <div class="module-header">
64 <div class="module-title-wrap"> 50 <div class="module-title-wrap">
65 <div class="module-title">{{ module.title }}</div> 51 <div class="module-title">{{ module.title }}</div>
@@ -74,16 +60,11 @@ @@ -74,16 +60,11 @@
74 <div class="meta-label">{{ module.metricLabel }}</div> 60 <div class="meta-label">{{ module.metricLabel }}</div>
75 </div> 61 </div>
76 <div class="module-actions"> 62 <div class="module-actions">
77 - <span  
78 - class="primary-action"  
79 - @click.stop="handleModulePrimary(module)"  
80 - > 63 + <span class="primary-action" @click.stop="handleModulePrimary(module)">
81 {{ module.primaryAction }} 64 {{ module.primaryAction }}
82 </span> 65 </span>
83 - <span  
84 - class="secondary-text"  
85 - @click.stop="handleModuleSecondary(module)"  
86 - >{{ module.secondaryText }}</span> 66 + <span class="secondary-text" @click.stop="handleModuleSecondary(module)">{{ module.secondaryText
  67 + }}</span>
87 </div> 68 </div>
88 </el-card> 69 </el-card>
89 </el-col> 70 </el-col>
@@ -101,11 +82,7 @@ @@ -101,11 +82,7 @@
101 <el-tabs v-model="todayTab"> 82 <el-tabs v-model="todayTab">
102 <el-tab-pane label="今日邀约" name="invite"> 83 <el-tab-pane label="今日邀约" name="invite">
103 <div v-if="todayInvite.length" class="timeline-list"> 84 <div v-if="todayInvite.length" class="timeline-list">
104 - <div  
105 - v-for="item in todayInvite"  
106 - :key="item.id"  
107 - class="timeline-item"  
108 - > 85 + <div v-for="item in todayInvite" :key="item.id" class="timeline-item">
109 <div class="time">{{ item.time }}</div> 86 <div class="time">{{ item.time }}</div>
110 <div class="content"> 87 <div class="content">
111 <div class="line-main"> 88 <div class="line-main">
@@ -116,11 +93,7 @@ @@ -116,11 +93,7 @@
116 <span class="project"> 93 <span class="project">
117 电话是否有效:{{ item.dhsfyx }} · {{ item.lxjl }} 94 电话是否有效:{{ item.dhsfyx }} · {{ item.lxjl }}
118 </span> 95 </span>
119 - <button  
120 - type="button"  
121 - class="quick-book-btn"  
122 - @click="handleQuickBooking(item)"  
123 - > 96 + <button type="button" class="quick-book-btn" @click="handleQuickBooking(item)">
124 快速预约 97 快速预约
125 </button> 98 </button>
126 </div> 99 </div>
@@ -142,11 +115,7 @@ @@ -142,11 +115,7 @@
142 <span class="project"> 115 <span class="project">
143 预约项目:{{ item.project }} · 预约时间:{{ item.date }} {{ item.timeRange }} 116 预约项目:{{ item.project }} · 预约时间:{{ item.date }} {{ item.timeRange }}
144 </span> 117 </span>
145 - <button  
146 - type="button"  
147 - class="quick-order-btn"  
148 - @click="handleQuickBilling(item)"  
149 - > 118 + <button type="button" class="quick-order-btn" @click="handleQuickBilling(item)">
150 快速开单 119 快速开单
151 </button> 120 </button>
152 </div> 121 </div>
@@ -159,48 +128,19 @@ @@ -159,48 +128,19 @@
159 </el-card> 128 </el-card>
160 </div> 129 </div>
161 </div> 130 </div>
162 - <member-profile-dialog  
163 - :visible.sync="memberDialogVisible"  
164 - :member="activeMember || {}"  
165 - />  
166 - <tuoke-lead-dialog  
167 - :visible.sync="tuokeDialogVisible"  
168 - />  
169 - <invite-add-dialog  
170 - :visible.sync="inviteDialogVisible"  
171 - />  
172 - <booking-dialog  
173 - :visible.sync="bookingDialogVisible"  
174 - :prefill="bookingPrefill"  
175 - />  
176 - <billing-dialog  
177 - :visible.sync="billingDialogVisible"  
178 - :prefill="billingPrefill"  
179 - />  
180 - <consume-dialog  
181 - :visible.sync="consumeDialogVisible"  
182 - />  
183 - <refund-dialog  
184 - :visible.sync="refundDialogVisible"  
185 - />  
186 - <tuoke-list-dialog  
187 - :visible.sync="tuokeListVisible"  
188 - />  
189 - <invite-list-dialog  
190 - :visible.sync="inviteListVisible"  
191 - />  
192 - <booking-calendar-dialog  
193 - :visible.sync="bookingCalendarVisible"  
194 - />  
195 - <billing-list-dialog  
196 - :visible.sync="billingListVisible"  
197 - />  
198 - <consume-list-dialog  
199 - :visible.sync="consumeListVisible"  
200 - />  
201 - <refund-list-dialog  
202 - :visible.sync="refundListVisible"  
203 - /> 131 + <member-profile-dialog :visible.sync="memberDialogVisible" :member="activeMember || {}" />
  132 + <tuoke-lead-dialog :visible.sync="tuokeDialogVisible" />
  133 + <invite-add-dialog :visible.sync="inviteDialogVisible" />
  134 + <booking-dialog :visible.sync="bookingDialogVisible" :prefill="bookingPrefill" />
  135 + <billing-dialog :visible.sync="billingDialogVisible" :prefill="billingPrefill" />
  136 + <consume-dialog :visible.sync="consumeDialogVisible" />
  137 + <refund-dialog :visible.sync="refundDialogVisible" />
  138 + <tuoke-list-dialog :visible.sync="tuokeListVisible" />
  139 + <invite-list-dialog :visible.sync="inviteListVisible" />
  140 + <booking-calendar-dialog :visible.sync="bookingCalendarVisible" />
  141 + <billing-list-dialog :visible.sync="billingListVisible" />
  142 + <consume-list-dialog :visible.sync="consumeListVisible" />
  143 + <refund-list-dialog :visible.sync="refundListVisible" />
204 </div> 144 </div>
205 </template> 145 </template>
206 146
@@ -274,9 +214,8 @@ export default { @@ -274,9 +214,8 @@ export default {
274 iconBg: 'linear-gradient(135deg, #6366f1, #a855f7)', 214 iconBg: 'linear-gradient(135deg, #6366f1, #a855f7)',
275 metricValue: 0, 215 metricValue: 0,
276 metricLabel: '今日新增潜客', 216 metricLabel: '今日新增潜客',
277 - primaryAction: '录入拓客信息',  
278 - secondaryText: '查看拓客数据',  
279 - route: '/tuoke' 217 + primaryAction: '新建拓客',
  218 + secondaryText: '查看拓客数据'
280 }, 219 },
281 { 220 {
282 key: 'invite', 221 key: 'invite',
@@ -286,9 +225,8 @@ export default { @@ -286,9 +225,8 @@ export default {
286 iconBg: 'linear-gradient(135deg, #0ea5e9, #22c55e)', 225 iconBg: 'linear-gradient(135deg, #0ea5e9, #22c55e)',
287 metricValue: 0, 226 metricValue: 0,
288 metricLabel: '待跟进邀约', 227 metricLabel: '待跟进邀约',
289 - primaryAction: '去邀约',  
290 - secondaryText: '查看邀约记录',  
291 - route: '/invite' 228 + primaryAction: '新建邀约',
  229 + secondaryText: '查看邀约记录'
292 }, 230 },
293 { 231 {
294 key: 'booking', 232 key: 'booking',
@@ -299,8 +237,7 @@ export default { @@ -299,8 +237,7 @@ export default {
299 metricValue: 0, 237 metricValue: 0,
300 metricLabel: '今日预约', 238 metricLabel: '今日预约',
301 primaryAction: '新建预约', 239 primaryAction: '新建预约',
302 - secondaryText: '打开预约日历',  
303 - route: '/booking' 240 + secondaryText: '打开预约日历'
304 }, 241 },
305 { 242 {
306 key: 'order', 243 key: 'order',
@@ -311,8 +248,7 @@ export default { @@ -311,8 +248,7 @@ export default {
311 metricValue: 0, 248 metricValue: 0,
312 metricLabel: '今日开单', 249 metricLabel: '今日开单',
313 primaryAction: '新建开单', 250 primaryAction: '新建开单',
314 - secondaryText: '查看开单记录',  
315 - route: '/orders' 251 + secondaryText: '查看开单记录'
316 }, 252 },
317 { 253 {
318 key: 'consume', 254 key: 'consume',
@@ -323,8 +259,7 @@ export default { @@ -323,8 +259,7 @@ export default {
323 metricValue: 0, 259 metricValue: 0,
324 metricLabel: '今日消耗人次', 260 metricLabel: '今日消耗人次',
325 primaryAction: '新建消耗', 261 primaryAction: '新建消耗',
326 - secondaryText: '查看消耗记录',  
327 - route: '/consume' 262 + secondaryText: '查看消耗记录'
328 }, 263 },
329 { 264 {
330 key: 'refund', 265 key: 'refund',
@@ -335,8 +270,7 @@ export default { @@ -335,8 +270,7 @@ export default {
335 metricValue: 0, 270 metricValue: 0,
336 metricLabel: '今日退卡', 271 metricLabel: '今日退卡',
337 primaryAction: '新建退卡', 272 primaryAction: '新建退卡',
338 - secondaryText: '查看退卡记录',  
339 - route: '/refund' 273 + secondaryText: '查看退卡记录'
340 } 274 }
341 ], 275 ],
342 todayInvite: [ 276 todayInvite: [
@@ -605,7 +539,6 @@ export default { @@ -605,7 +539,6 @@ export default {
605 this.refundDialogVisible = true 539 this.refundDialogVisible = true
606 return 540 return
607 } 541 }
608 - this.goModule(module)  
609 }, 542 },
610 handleMemberSearch() { 543 handleMemberSearch() {
611 const keyword = (this.memberKeyword || '').trim() 544 const keyword = (this.memberKeyword || '').trim()
@@ -726,11 +659,6 @@ export default { @@ -726,11 +659,6 @@ export default {
726 } 659 }
727 const key = map[module.key] 660 const key = map[module.key]
728 if (key) this[key] = true 661 if (key) this[key] = true
729 - },  
730 - goModule(module) {  
731 - if (module.route) {  
732 - this.$router.push(module.route)  
733 - }  
734 } 662 }
735 } 663 }
736 } 664 }
@@ -759,6 +687,7 @@ export default { @@ -759,6 +687,7 @@ export default {
759 color: #111827; 687 color: #111827;
760 letter-spacing: 0.5px; 688 letter-spacing: 0.5px;
761 } 689 }
  690 +
762 .store-subtitle { 691 .store-subtitle {
763 margin-top: 4px; 692 margin-top: 4px;
764 font-size: 13px; 693 font-size: 13px;
@@ -774,6 +703,7 @@ export default { @@ -774,6 +703,7 @@ export default {
774 padding: 0 20px; 703 padding: 0 20px;
775 border-radius: 0 999px 999px 0; 704 border-radius: 0 999px 999px 0;
776 } 705 }
  706 +
777 ::v-deep .el-input__inner { 707 ::v-deep .el-input__inner {
778 border-radius: 999px 0 0 999px; 708 border-radius: 999px 0 0 999px;
779 padding-left: 40px; 709 padding-left: 40px;
@@ -849,10 +779,12 @@ export default { @@ -849,10 +779,12 @@ export default {
849 align-items: center; 779 align-items: center;
850 justify-content: space-between; 780 justify-content: space-between;
851 margin-bottom: 4px; 781 margin-bottom: 4px;
  782 +
852 .label { 783 .label {
853 font-size: 13px; 784 font-size: 13px;
854 color: #6b7280; 785 color: #6b7280;
855 } 786 }
  787 +
856 .tag { 788 .tag {
857 font-size: 11px; 789 font-size: 11px;
858 padding: 2px 8px; 790 padding: 2px 8px;
@@ -900,6 +832,7 @@ export default { @@ -900,6 +832,7 @@ export default {
900 font-weight: 600; 832 font-weight: 600;
901 color: #111827; 833 color: #111827;
902 } 834 }
  835 +
903 .module-subtitle { 836 .module-subtitle {
904 margin-top: 2px; 837 margin-top: 2px;
905 font-size: 12px; 838 font-size: 12px;
@@ -915,6 +848,7 @@ export default { @@ -915,6 +848,7 @@ export default {
915 align-items: center; 848 align-items: center;
916 justify-content: center; 849 justify-content: center;
917 color: #fff; 850 color: #fff;
  851 +
918 i { 852 i {
919 font-size: 20px; 853 font-size: 20px;
920 } 854 }
@@ -922,11 +856,13 @@ export default { @@ -922,11 +856,13 @@ export default {
922 856
923 .module-meta { 857 .module-meta {
924 margin-top: 8px; 858 margin-top: 8px;
  859 +
925 .meta-value { 860 .meta-value {
926 font-size: 22px; 861 font-size: 22px;
927 font-weight: 600; 862 font-weight: 600;
928 color: #111827; 863 color: #111827;
929 } 864 }
  865 +
930 .meta-label { 866 .meta-label {
931 margin-top: 2px; 867 margin-top: 2px;
932 font-size: 12px; 868 font-size: 12px;
@@ -939,6 +875,7 @@ export default { @@ -939,6 +875,7 @@ export default {
939 display: flex; 875 display: flex;
940 align-items: center; 876 align-items: center;
941 justify-content: space-between; 877 justify-content: space-between;
  878 +
942 .primary-action { 879 .primary-action {
943 display: inline-flex; 880 display: inline-flex;
944 align-items: center; 881 align-items: center;
@@ -953,11 +890,13 @@ export default { @@ -953,11 +890,13 @@ export default {
953 font-weight: 500; 890 font-weight: 500;
954 box-shadow: 0 4px 10px rgba(37, 99, 235, 0.35); 891 box-shadow: 0 4px 10px rgba(37, 99, 235, 0.35);
955 } 892 }
  893 +
956 .secondary-text { 894 .secondary-text {
957 font-size: 12px; 895 font-size: 12px;
958 color: #9ca3af; 896 color: #9ca3af;
959 cursor: pointer; 897 cursor: pointer;
960 transition: color 0.15s; 898 transition: color 0.15s;
  899 +
961 &:hover { 900 &:hover {
962 color: #2563eb; 901 color: #2563eb;
963 } 902 }
@@ -990,8 +929,7 @@ export default { @@ -990,8 +929,7 @@ export default {
990 color: #2563eb; 929 color: #2563eb;
991 } 930 }
992 931
993 -.timeline-list {  
994 -} 932 +.timeline-list {}
995 933
996 .timeline-item { 934 .timeline-item {
997 display: grid; 935 display: grid;
@@ -1001,7 +939,7 @@ export default { @@ -1001,7 +939,7 @@ export default {
1001 font-size: 12px; 939 font-size: 12px;
1002 } 940 }
1003 941
1004 -.timeline-item + .timeline-item { 942 +.timeline-item+.timeline-item {
1005 border-top: 1px dashed #e5e7eb; 943 border-top: 1px dashed #e5e7eb;
1006 } 944 }
1007 945
@@ -1015,20 +953,24 @@ export default { @@ -1015,20 +953,24 @@ export default {
1015 display: flex; 953 display: flex;
1016 align-items: center; 954 align-items: center;
1017 gap: 6px; 955 gap: 6px;
  956 +
1018 .name { 957 .name {
1019 color: #111827; 958 color: #111827;
1020 font-weight: 500; 959 font-weight: 500;
1021 } 960 }
  961 +
1022 .mobile { 962 .mobile {
1023 color: #6b7280; 963 color: #6b7280;
1024 } 964 }
1025 } 965 }
  966 +
1026 .line-sub { 967 .line-sub {
1027 margin-top: 2px; 968 margin-top: 2px;
1028 display: flex; 969 display: flex;
1029 align-items: center; 970 align-items: center;
1030 justify-content: space-between; 971 justify-content: space-between;
1031 gap: 8px; 972 gap: 8px;
  973 +
1032 .project { 974 .project {
1033 color: #6b7280; 975 color: #6b7280;
1034 flex: 1; 976 flex: 1;
@@ -1110,10 +1052,12 @@ export default { @@ -1110,10 +1052,12 @@ export default {
1110 .dashboard-page { 1052 .dashboard-page {
1111 padding: 16px; 1053 padding: 16px;
1112 } 1054 }
  1055 +
1113 .top-bar { 1056 .top-bar {
1114 grid-template-columns: minmax(0, 1fr); 1057 grid-template-columns: minmax(0, 1fr);
1115 row-gap: 12px; 1058 row-gap: 12px;
1116 } 1059 }
  1060 +
1117 .layout-grid { 1061 .layout-grid {
1118 grid-template-columns: minmax(0, 1fr); 1062 grid-template-columns: minmax(0, 1fr);
1119 } 1063 }