Blame view

store-pc/src/components/MemberProfileDialog.vue 44 KB
58083915   “wangming”   对门店PC进行设计
1
  <template>
20099e65   “wangming”   1111
2
3
    <el-dialog :visible.sync="visibleProxy" :show-close="false" :close-on-click-modal="true" :close-on-press-escape="true"
      custom-class="member-dialog" append-to-body>
58083915   “wangming”   对门店PC进行设计
4
      <div class="member-dialog-inner">
ad197adf   “wangming”   完成了基本的门店PC的设计
5
6
7
8
9
10
11
12
13
14
15
16
        <!-- 左侧边栏 -->
        <div class="sidebar">
          <!-- 会员身份区 -->
          <div class="sidebar-identity">
            <div class="member-avatar"><span>{{ initials }}</span></div>
            <div class="member-name">{{ displayName }}</div>
            <div class="member-sub-info">
              <span v-if="member.sjh" class="member-phone"><i class="el-icon-phone"></i>{{ member.sjh }}</span>
              <span v-if="member.dah" class="member-dah">档案号:{{ member.dah }}</span>
            </div>
            <span v-if="consumeLevelText" :class="['level-tag', consumeLevelClass]">{{ consumeLevelText }}</span>
            <div class="member-type-tags" v-if="memberTypeList.length">
20099e65   “wangming”   1111
17
18
              <span v-for="t in memberTypeList" :key="t.type" :class="['type-tag', 'type-tag--' + t.type]">{{ t.label
              }}会员</span>
58083915   “wangming”   对门店PC进行设计
19
            </div>
ad197adf   “wangming”   完成了基本的门店PC的设计
20
            <div class="member-meta">
58083915   “wangming”   对门店PC进行设计
21
              <span v-if="member.xb">{{ member.xb }}</span>
ad197adf   “wangming”   完成了基本的门店PC的设计
22
23
24
              <span v-if="member.gsmdName || member.storeName">{{ member.gsmdName || member.storeName }}</span>
            </div>
            <div class="member-visit-row">
20099e65   “wangming”   1111
25
26
27
28
              <el-tooltip v-if="member.lastVisitTime || member.lastVisit"
                :content="member.lastVisitTime || member.lastVisit" placement="right" effect="dark">
                <span class="member-visit"><i class="el-icon-time"></i>最后到店:{{ relativeTime(member.lastVisitTime ||
                  member.lastVisit) }}</span>
ad197adf   “wangming”   完成了基本的门店PC的设计
29
30
              </el-tooltip>
              <span v-else class="member-visit"><i class="el-icon-time"></i>最后到店:—</span>
20099e65   “wangming”   1111
31
32
              <span class="member-sleep" v-if="member.sleepDays > 0"><i class="el-icon-warning"></i>沉睡 {{ member.sleepDays
              }} 天</span>
58083915   “wangming”   对门店PC进行设计
33
            </div>
58083915   “wangming”   对门店PC进行设计
34
35
36
37
            <div v-if="Array.isArray(member.tags) && member.tags.length" class="tag-row">
              <span v-for="tag in member.tags" :key="tag" class="member-tag">{{ tag }}</span>
            </div>
          </div>
ad197adf   “wangming”   完成了基本的门店PC的设计
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  
          <!-- 消费统计 -->
          <div class="sidebar-section">
            <div class="sidebar-section-title"><i class="el-icon-wallet"></i>消费统计</div>
            <div class="sidebar-row">
              <span class="sidebar-label">耗卡总金额</span>
              <span class="sidebar-value sidebar-value--amount">¥{{ formatMoney(member.totalConsumeAmount) }}</span>
            </div>
            <div class="sidebar-row">
              <span class="sidebar-label">开卡总金额</span>
              <span class="sidebar-value sidebar-value--amount">¥{{ formatMoney(member.totalBillingAmount) }}</span>
            </div>
            <div class="sidebar-row sidebar-row--highlight">
              <span class="sidebar-label">剩余权益</span>
              <span class="sidebar-value sidebar-value--gradient">¥{{ formatMoney(member.remainingRightsAmount) }}</span>
            </div>
          </div>
  
          <!-- 基本信息 -->
          <div class="sidebar-section">
            <div class="sidebar-section-title"><i class="el-icon-user"></i>基本信息</div>
            <div class="sidebar-row">
              <span class="sidebar-label"><i class="el-icon-date"></i>生日</span>
              <span class="sidebar-value">{{ formattedBirthday }}</span>
            </div>
            <div class="sidebar-row">
ad197adf   “wangming”   完成了基本的门店PC的设计
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
              <span class="sidebar-label">注册时间</span>
              <span class="sidebar-value">{{ member.zcsj || '—' }}</span>
            </div>
            <div class="sidebar-row">
              <span class="sidebar-label">首次到店</span>
              <span class="sidebar-value">{{ member.firstVisitTime || '—' }}</span>
            </div>
            <div class="sidebar-row">
              <span class="sidebar-label">进店渠道</span>
              <span class="sidebar-value">{{ member.jdqd || '—' }}</span>
            </div>
            <div class="sidebar-row">
              <span class="sidebar-label">推荐人</span>
              <span class="sidebar-value">{{ member.tjrName || '—' }}</span>
            </div>
            <div class="sidebar-row">
              <span class="sidebar-label">健康师</span>
              <span class="sidebar-value">{{ member.mainHealthUserName || '—' }}</span>
            </div>
            <div class="sidebar-row">
              <span class="sidebar-label">负责顾问</span>
              <span class="sidebar-value">{{ member.subHealthUserName || '—' }}</span>
            </div>
            <div class="sidebar-row">
              <span class="sidebar-label">拓客人员</span>
              <span class="sidebar-value">{{ member.expandUserName || '—' }}</span>
            </div>
            <div class="sidebar-row">
              <span class="sidebar-label">联系地址</span>
              <span class="sidebar-value">{{ member.lxdz || member.address || '—' }}</span>
            </div>
            <div class="sidebar-row sidebar-row--remark">
              <span class="sidebar-label">备注</span>
              <span class="sidebar-value">{{ member.bz || member.remark || '—' }}</span>
            </div>
          </div>
58083915   “wangming”   对门店PC进行设计
100
101
        </div>
  
ad197adf   “wangming”   完成了基本的门店PC的设计
102
103
104
105
106
107
        <!-- 右侧内容区 -->
        <div class="main-content">
          <!-- Tab区 + 搜索 -->
          <div class="content-header">
            <div class="records-tab-list">
              <div class="records-tab-indicator" :style="recordsTabIndicatorStyle" />
20099e65   “wangming”   1111
108
109
              <button v-for="tab in recordTabs" :key="tab.key" class="records-tab"
                :class="{ 'records-tab--active': recordsTab === tab.key }" @click="recordsTab = tab.key">
ad197adf   “wangming”   完成了基本的门店PC的设计
110
111
                <span class="records-tab-label">{{ tab.label }}</span>
              </button>
58083915   “wangming”   对门店PC进行设计
112
            </div>
ad197adf   “wangming”   完成了基本的门店PC的设计
113
            <div class="records-tabs-search">
20099e65   “wangming”   1111
114
115
              <el-input v-model="currentSearch" size="mini" clearable :placeholder="currentSearchPlaceholder"
                class="records-search">
ad197adf   “wangming”   完成了基本的门店PC的设计
116
117
                <i slot="prefix" class="el-icon-search"></i>
              </el-input>
58083915   “wangming”   对门店PC进行设计
118
119
120
            </div>
          </div>
  
ad197adf   “wangming”   完成了基本的门店PC的设计
121
122
123
124
125
126
127
128
          <!-- 表格区 -->
          <div class="content-body">
            <!-- 权益明细 -->
            <div v-if="recordsTab === 'rights'" class="records-panel">
              <div class="records-table-wrap">
                <el-table :data="filteredRemainingItems" size="mini" class="rights-table" empty-text="暂无权益">
                  <el-table-column prop="ItemName" label="项目名称" min-width="110" align="center" />
                  <el-table-column prop="ItemPrice" label="单价" width="80" align="center">
20099e65   “wangming”   1111
129
130
                    <template slot-scope="scope"><span class="amount-text">¥{{ formatMoney(scope.row.ItemPrice)
                    }}</span></template>
ad197adf   “wangming”   完成了基本的门店PC的设计
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
                  </el-table-column>
                  <el-table-column prop="SourceType" label="来源" width="65" align="center" />
                  <el-table-column prop="TotalPurchased" label="总购买" width="65" align="center" />
                  <el-table-column prop="ConsumedCount" label="已消费" width="65" align="center" />
                  <el-table-column prop="RefundedCount" label="已退款" width="65" align="center" />
                  <el-table-column prop="DeductCount" label="已扣除" width="65" align="center" />
                  <el-table-column prop="RemainingCount" label="剩余" width="65" align="center">
                    <template slot-scope="scope">
                      <span class="num-remaining">{{ scope.row.RemainingCount ?? scope.row.remainingCount ?? 0 }}</span>
                    </template>
                  </el-table-column>
                  <el-table-column label="剩余价值" width="90" align="center">
                    <template slot-scope="scope">
                      <span class="num-total">¥{{ formatMoney(remainingItemTotal(scope.row)) }}</span>
                    </template>
                  </el-table-column>
                </el-table>
58083915   “wangming”   对门店PC进行设计
148
              </div>
ad197adf   “wangming”   完成了基本的门店PC的设计
149
              <div class="records-pagination">
20099e65   “wangming”   1111
150
151
152
                <el-pagination background layout="total, sizes, prev, pager, next, jumper" :total="rightsTotalCount"
                  :page-size.sync="pageSize" :current-page.sync="rightsPage" :page-sizes="[10, 20, 50, 100]"
                  @size-change="initData" @current-change="initData" />
58083915   “wangming”   对门店PC进行设计
153
154
155
              </div>
            </div>
  
ad197adf   “wangming”   完成了基本的门店PC的设计
156
            <!-- 预约记录 -->
58083915   “wangming”   对门店PC进行设计
157
158
            <div v-else-if="recordsTab === 'booking'" class="records-panel">
              <div class="records-table-wrap">
ad197adf   “wangming”   完成了基本的门店PC的设计
159
160
161
162
163
                <el-table :data="filteredBookingRecords" size="mini" class="record-table" empty-text="暂无预约记录">
                  <el-table-column prop="AppointmentDate" label="预约时间" width="140" align="center" />
                  <el-table-column prop="StoreName" label="门店" width="80" align="center" />
                  <el-table-column prop="InviterName" label="邀约人" width="75" align="center" />
                  <el-table-column prop="HealthCoachName" label="预约健康师" width="85" align="center" />
20099e65   “wangming”   1111
164
165
166
                  <el-table-column prop="ExperienceItem" label="体验项目" min-width="100" align="center"
                    show-overflow-tooltip />
                  <el-table-column prop="Status" label="状态" width="80" align="center">
ad197adf   “wangming”   完成了基本的门店PC的设计
167
168
169
170
                    <template slot-scope="scope">
                      <span :class="['status-capsule', statusClass(scope.row.Status)]">{{ scope.row.Status }}</span>
                    </template>
                  </el-table-column>
20099e65   “wangming”   1111
171
172
                  <el-table-column prop="NoDealRemark" label="未成交说明" min-width="100" align="center"
                    show-overflow-tooltip />
58083915   “wangming”   对门店PC进行设计
173
                </el-table>
ad197adf   “wangming”   完成了基本的门店PC的设计
174
175
              </div>
              <div class="records-pagination">
20099e65   “wangming”   1111
176
177
178
                <el-pagination background layout="total, sizes, prev, pager, next, jumper" :total="bookingTotalCount"
                  :page-size.sync="pageSize" :current-page.sync="bookingPage" :page-sizes="[10, 20, 50, 100]"
                  @size-change="initData" @current-change="initData" />
58083915   “wangming”   对门店PC进行设计
179
180
181
              </div>
            </div>
  
ad197adf   “wangming”   完成了基本的门店PC的设计
182
            <!-- 开单记录 -->
58083915   “wangming”   对门店PC进行设计
183
184
            <div v-else-if="recordsTab === 'billing'" class="records-panel">
              <div class="records-table-wrap">
ad197adf   “wangming”   完成了基本的门店PC的设计
185
186
187
188
189
190
191
192
                <el-table :data="filteredBillingRecords" size="mini" class="record-table" empty-text="暂无开单记录">
                  <el-table-column prop="BillingDate" label="开单日期" width="140" align="center" />
                  <el-table-column prop="StoreName" label="门店" width="80" align="center" />
                  <el-table-column prop="CreatorName" label="开单人员" width="75" align="center" />
                  <el-table-column prop="HealthCoachNames" label="健康师" width="85" align="center" show-overflow-tooltip />
                  <el-table-column prop="TechTeacherNames" label="科技老师" width="85" align="center" show-overflow-tooltip />
                  <el-table-column prop="Items" label="开单品项" min-width="140" align="center" show-overflow-tooltip />
                  <el-table-column label="实付金额" width="85" align="center">
20099e65   “wangming”   1111
193
194
                    <template slot-scope="scope"><span class="amount-text">¥{{ formatMoney(scope.row.Amount)
                    }}</span></template>
58083915   “wangming”   对门店PC进行设计
195
                  </el-table-column>
ad197adf   “wangming”   完成了基本的门店PC的设计
196
                  <el-table-column label="欠款金额" width="85" align="center">
20099e65   “wangming”   1111
197
198
                    <template slot-scope="scope"><span class="amount-text">¥{{ formatMoney(scope.row.DebtAmount)
                    }}</span></template>
ad197adf   “wangming”   完成了基本的门店PC的设计
199
200
                  </el-table-column>
                  <el-table-column prop="ActivityName" label="活动名称" width="85" align="center" show-overflow-tooltip />
58083915   “wangming”   对门店PC进行设计
201
                </el-table>
ad197adf   “wangming”   完成了基本的门店PC的设计
202
203
              </div>
              <div class="records-pagination">
20099e65   “wangming”   1111
204
205
206
                <el-pagination background layout="total, sizes, prev, pager, next, jumper" :total="billingTotalCount"
                  :page-size.sync="pageSize" :current-page.sync="billingPage" :page-sizes="[10, 20, 50, 100]"
                  @size-change="initData" @current-change="initData" />
58083915   “wangming”   对门店PC进行设计
207
208
209
              </div>
            </div>
  
ad197adf   “wangming”   完成了基本的门店PC的设计
210
            <!-- 消耗记录 -->
58083915   “wangming”   对门店PC进行设计
211
212
            <div v-else-if="recordsTab === 'consume'" class="records-panel">
              <div class="records-table-wrap">
ad197adf   “wangming”   完成了基本的门店PC的设计
213
214
                <el-table :data="filteredConsumeRecords" size="mini" class="record-table" empty-text="暂无消耗记录">
                  <el-table-column prop="ConsumeDate" label="消耗日期" width="140" align="center" />
20099e65   “wangming”   1111
215
                  <el-table-column prop="StoreName" label="门店" width="100" align="center" />
ad197adf   “wangming”   完成了基本的门店PC的设计
216
217
218
219
                  <el-table-column prop="OperatorName" label="操作人员" width="75" align="center" />
                  <el-table-column prop="HealthCoachNames" label="健康师" width="85" align="center" show-overflow-tooltip />
                  <el-table-column prop="TechTeacherNames" label="科技老师" width="85" align="center" show-overflow-tooltip />
                  <el-table-column prop="Items" label="消耗品项" min-width="140" align="center" show-overflow-tooltip />
20099e65   “wangming”   1111
220
221
222
                  <el-table-column label="消耗金额" width="100" align="center">
                    <template slot-scope="scope"><span class="amount-text">¥{{ formatMoney(scope.row.Amount)
                    }}</span></template>
ad197adf   “wangming”   完成了基本的门店PC的设计
223
                  </el-table-column>
20099e65   “wangming”   1111
224
225
226
                  <el-table-column label="手工费" width="100" align="center">
                    <template slot-scope="scope"><span class="amount-text">¥{{ formatMoney(scope.row.LaborCost)
                    }}</span></template>
ad197adf   “wangming”   完成了基本的门店PC的设计
227
                  </el-table-column>
58083915   “wangming”   对门店PC进行设计
228
                </el-table>
ad197adf   “wangming”   完成了基本的门店PC的设计
229
230
              </div>
              <div class="records-pagination">
20099e65   “wangming”   1111
231
232
233
                <el-pagination background layout="total, sizes, prev, pager, next, jumper" :total="consumeTotalCount"
                  :page-size.sync="pageSize" :current-page.sync="consumePage" :page-sizes="[10, 20, 50, 100]"
                  @size-change="initData" @current-change="initData" />
58083915   “wangming”   对门店PC进行设计
234
235
236
              </div>
            </div>
  
ad197adf   “wangming”   完成了基本的门店PC的设计
237
238
            <!-- 服务日志 -->
            <div v-else-if="recordsTab === 'serviceLog'" class="records-panel">
58083915   “wangming”   对门店PC进行设计
239
              <div class="records-table-wrap">
ad197adf   “wangming”   完成了基本的门店PC的设计
240
241
242
243
244
                <el-table :data="filteredServiceLogRecords" size="mini" class="record-table" empty-text="暂无服务日志">
                  <el-table-column prop="CreateTime" label="记录时间" width="140" align="center" />
                  <el-table-column prop="CreatorName" label="添加人" width="75" align="center" />
                  <el-table-column prop="Remark" label="备注" min-width="200" align="center" show-overflow-tooltip />
                  <el-table-column prop="KjbRemark" label="科技部备注" min-width="100" align="center" show-overflow-tooltip />
58083915   “wangming”   对门店PC进行设计
245
                </el-table>
ad197adf   “wangming”   完成了基本的门店PC的设计
246
247
              </div>
              <div class="records-pagination">
20099e65   “wangming”   1111
248
249
250
                <el-pagination background layout="total, sizes, prev, pager, next, jumper" :total="serviceLogTotalCount"
                  :page-size.sync="pageSize" :current-page.sync="serviceLogPage" :page-sizes="[10, 20, 50, 100]"
                  @size-change="initData" @current-change="initData" />
58083915   “wangming”   对门店PC进行设计
251
252
253
              </div>
            </div>
  
ad197adf   “wangming”   完成了基本的门店PC的设计
254
255
256
257
258
259
260
261
262
263
264
            <!-- 旧日志 -->
            <div v-else-if="recordsTab === 'oldLog'" class="records-panel">
              <div class="records-table-wrap">
                <el-table :data="filteredOldLogRecords" size="mini" class="record-table" empty-text="暂无旧日志">
                  <el-table-column prop="CreateTime" label="记录时间" width="140" align="center" />
                  <el-table-column prop="OrderNo" label="开单号" width="130" align="center" />
                  <el-table-column prop="MemberName" label="会员名称" width="85" align="center" />
                  <el-table-column prop="Remarks" label="备注" min-width="200" align="center" show-overflow-tooltip />
                </el-table>
              </div>
              <div class="records-pagination">
20099e65   “wangming”   1111
265
266
267
                <el-pagination background layout="total, sizes, prev, pager, next, jumper" :total="oldLogTotalCount"
                  :page-size.sync="pageSize" :current-page.sync="oldLogPage" :page-sizes="[10, 20, 50, 100]"
                  @size-change="initData" @current-change="initData" />
ad197adf   “wangming”   完成了基本的门店PC的设计
268
269
270
271
272
273
274
275
              </div>
            </div>
  
            <!-- 退卡列表 -->
            <div v-else-if="recordsTab === 'refund'" class="records-panel">
              <div class="records-table-wrap">
                <el-table :data="filteredRefundRecords" size="mini" class="record-table" empty-text="暂无退卡记录">
                  <el-table-column prop="RefundDate" label="退卡日期" width="140" align="center" />
20099e65   “wangming”   1111
276
277
278
279
                  <el-table-column prop="StoreName" label="门店" width="100" align="center" />
                  <el-table-column label="退卡金额" width="100" align="center">
                    <template slot-scope="scope"><span class="amount-text">¥{{ formatMoney(scope.row.RefundAmount)
                    }}</span></template>
58083915   “wangming”   对门店PC进行设计
280
                  </el-table-column>
20099e65   “wangming”   1111
281
282
283
                  <el-table-column label="实际退款" width="100" align="center">
                    <template slot-scope="scope"><span class="amount-text">¥{{ formatMoney(scope.row.ActualRefundAmount)
                    }}</span></template>
58083915   “wangming”   对门店PC进行设计
284
                  </el-table-column>
20099e65   “wangming”   1111
285
286
                  <el-table-column prop="RefundReason" label="退卡原因" min-width="120" align="center"
                    show-overflow-tooltip />
58083915   “wangming”   对门店PC进行设计
287
                </el-table>
ad197adf   “wangming”   完成了基本的门店PC的设计
288
289
              </div>
              <div class="records-pagination">
20099e65   “wangming”   1111
290
291
292
                <el-pagination background layout="total, sizes, prev, pager, next, jumper" :total="refundTotalCount"
                  :page-size.sync="pageSize" :current-page.sync="refundPage" :page-sizes="[10, 20, 50, 100]"
                  @size-change="initData" @current-change="initData" />
58083915   “wangming”   对门店PC进行设计
293
294
295
              </div>
            </div>
          </div>
58083915   “wangming”   对门店PC进行设计
296
  
ad197adf   “wangming”   完成了基本的门店PC的设计
297
298
          <!-- 底部按钮 -->
          <div class="content-footer">
20099e65   “wangming”   1111
299
300
301
302
303
304
305
306
307
308
309
310
            <span class="records-op-btn records-op-btn--ghost records-op-btn--invite" @click="emitAction('invite')"><i
                class="el-icon-phone-outline"></i>去邀约</span>
            <span class="records-op-btn records-op-btn--ghost records-op-btn--booking" @click="emitAction('booking')"><i
                class="el-icon-date"></i>去预约</span>
            <span class="records-op-btn records-op-btn--ghost records-op-btn--billing" @click="emitAction('billing')"><i
                class="el-icon-document"></i>去开单</span>
            <span class="records-op-btn records-op-btn--ghost records-op-btn--consume" @click="emitAction('consume')"><i
                class="el-icon-s-claim"></i>去耗卡</span>
            <span class="records-op-btn records-op-btn--ghost records-op-btn--refund" @click="emitAction('refund')"><i
                class="el-icon-refresh-left"></i>去退卡</span>
            <span class="records-op-btn records-op-btn--ghost records-op-btn--close" @click="close"><i
                class="el-icon-close"></i>关闭</span>
ad197adf   “wangming”   完成了基本的门店PC的设计
311
          </div>
58083915   “wangming”   对门店PC进行设计
312
313
314
315
316
317
318
319
320
321
322
323
324
325
        </div>
      </div>
    </el-dialog>
  </template>
  
  <script>
  export default {
    name: 'MemberProfileDialog',
    props: {
      visible: { type: Boolean, default: false },
      member: { type: Object, default: () => ({}) }
    },
    data() {
      return {
ad197adf   “wangming”   完成了基本的门店PC的设计
326
        recordsTab: 'rights',
58083915   “wangming”   对门店PC进行设计
327
328
329
330
331
332
        searchRights: '',
        searchBilling: '',
        searchConsume: '',
        searchInvite: '',
        searchBooking: '',
        searchRefund: '',
ad197adf   “wangming”   完成了基本的门店PC的设计
333
334
        searchServiceLog: '',
        searchOldLog: '',
58083915   “wangming”   对门店PC进行设计
335
336
337
338
339
340
        pageSize: 5,
        rightsPage: 1,
        billingPage: 1,
        consumePage: 1,
        invitePage: 1,
        bookingPage: 1,
ad197adf   “wangming”   完成了基本的门店PC的设计
341
342
343
        refundPage: 1,
        serviceLogPage: 1,
        oldLogPage: 1
58083915   “wangming”   对门店PC进行设计
344
345
346
347
348
349
350
351
352
353
354
355
356
357
      }
    },
    computed: {
      visibleProxy: {
        get() { return this.visible },
        set(val) { this.$emit('update:visible', val) }
      },
      displayName() {
        return this.member.khmc || this.member.name || '会员'
      },
      initials() {
        const n = this.displayName
        return n ? n[0] : '会'
      },
ad197adf   “wangming”   完成了基本的门店PC的设计
358
359
360
361
362
363
364
365
366
367
      consumeLevelText() {
        const level = this.member.consumeLevel
        const map = { 0: 'D', 1: 'C', 2: 'B', 3: 'A', 4: 'A+', 5: 'A++' }
        return map[level] !== undefined ? map[level] : (this.member.consumeLevelName || '')
      },
      consumeLevelClass() {
        const level = this.member.consumeLevel
        const map = { 0: 'level--d', 1: 'level--c', 2: 'level--b', 3: 'level--a', 4: 'level--aplus', 5: 'level--aplusplus' }
        return map[level] || 'level--default'
      },
58083915   “wangming”   对门店PC进行设计
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
      remainingItems() {
        const list = this.member.RemainingItems || this.member.remainingItems || []
        return Array.isArray(list) ? list : []
      },
      remainingRightsTotal() {
        const list = this.remainingItems
        return list.reduce((sum, row) => sum + (Number(row.RemainingCount ?? row.remainingCount ?? 0) * Number(row.ItemPrice ?? row.itemPrice ?? 0)), 0)
      },
      memberTypeSummary() {
        const t = []
        if (this.member.isBeautyMember === 1) t.push('生美')
        if (this.member.isMedicalMember === 1) t.push('医美')
        if (this.member.isTechMember === 1) t.push('科技')
        if (this.member.isEducationMember === 1) t.push('教育')
        return t.length ? t.join(' / ') : '—'
      },
ad197adf   “wangming”   完成了基本的门店PC的设计
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
      formattedBirthday() {
        const m = this.member
        const yang = m.yanglsr || ''
        const yin = m.yinlsr || ''
        if (yang && yin) return `${yang}(${yin})`
        if (yang) return yang
        if (yin) return yin
        return '—'
      },
      memberTypeList() {
        const list = []
        if (this.member.isBeautyMember === 1) list.push({ type: 'beauty', label: '生美' })
        if (this.member.isMedicalMember === 1) list.push({ type: 'medical', label: '医美' })
        if (this.member.isTechMember === 1) list.push({ type: 'tech', label: '科美' })
        return list
      },
58083915   “wangming”   对门店PC进行设计
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
      filteredRightsAll() {
        const kw = (this.searchRights || '').trim()
        const list = this.remainingItems
        if (!kw) return list
        return list.filter(row => {
          const name = String(row.ItemName || row.itemName || '')
          return name.includes(kw)
        })
      },
      rightsTotalCount() {
        return this.filteredRightsAll.length
      },
      filteredRemainingItems() {
        const list = this.filteredRightsAll
        const size = this.pageSize
        const maxPage = Math.max(1, Math.ceil((list.length || 1) / size))
        const page = Math.min(this.rightsPage || 1, maxPage)
        const start = (page - 1) * size
        return list.slice(start, start + size)
      },
      billingRecords() {
        const list = this.member.billingRecords || this.member.BillingRecords || []
        return Array.isArray(list) ? list : []
      },
      filteredBillingAll() {
        const kw = (this.searchBilling || '').trim()
        const list = this.billingRecords
        if (!kw) return list
        return list.filter(row => {
ad197adf   “wangming”   完成了基本的门店PC的设计
429
430
431
          const items = String(row.Items || '')
          const creator = String(row.CreatorName || '')
          return items.includes(kw) || creator.includes(kw)
58083915   “wangming”   对门店PC进行设计
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
        })
      },
      billingTotalCount() {
        return this.filteredBillingAll.length
      },
      filteredBillingRecords() {
        const list = this.filteredBillingAll
        const size = this.pageSize
        const maxPage = Math.max(1, Math.ceil((list.length || 1) / size))
        const page = Math.min(this.billingPage || 1, maxPage)
        const start = (page - 1) * size
        return list.slice(start, start + size)
      },
      consumeRecords() {
        const list = this.member.consumeRecords || this.member.ConsumeRecords || []
        return Array.isArray(list) ? list : []
      },
      filteredConsumeAll() {
        const kw = (this.searchConsume || '').trim()
        const list = this.consumeRecords
        if (!kw) return list
        return list.filter(row => {
ad197adf   “wangming”   完成了基本的门店PC的设计
454
455
456
          const items = String(row.Items || '')
          const operator = String(row.OperatorName || '')
          return items.includes(kw) || operator.includes(kw)
58083915   “wangming”   对门店PC进行设计
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
        })
      },
      consumeTotalCount() {
        return this.filteredConsumeAll.length
      },
      filteredConsumeRecords() {
        const list = this.filteredConsumeAll
        const size = this.pageSize
        const maxPage = Math.max(1, Math.ceil((list.length || 1) / size))
        const page = Math.min(this.consumePage || 1, maxPage)
        const start = (page - 1) * size
        return list.slice(start, start + size)
      },
      inviteRecords() {
        const list = this.member.inviteRecords || this.member.InviteRecords || []
        return Array.isArray(list) ? list : []
      },
      filteredInviteAll() {
        const kw = (this.searchInvite || '').trim()
        const list = this.inviteRecords
        if (!kw) return list
        return list.filter(row => {
ad197adf   “wangming”   完成了基本的门店PC的设计
479
480
481
          const record = String(row.ContactRecord || '')
          const inviter = String(row.InviterName || '')
          return record.includes(kw) || inviter.includes(kw)
58083915   “wangming”   对门店PC进行设计
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
        })
      },
      inviteTotalCount() {
        return this.filteredInviteAll.length
      },
      filteredInviteRecords() {
        const list = this.filteredInviteAll
        const size = this.pageSize
        const maxPage = Math.max(1, Math.ceil((list.length || 1) / size))
        const page = Math.min(this.invitePage || 1, maxPage)
        const start = (page - 1) * size
        return list.slice(start, start + size)
      },
      bookingRecords() {
        const list = this.member.bookingRecords || this.member.BookingRecords || []
        return Array.isArray(list) ? list : []
      },
      filteredBookingAll() {
        const kw = (this.searchBooking || '').trim()
        const list = this.bookingRecords
        if (!kw) return list
        return list.filter(row => {
ad197adf   “wangming”   完成了基本的门店PC的设计
504
505
506
          const item = String(row.ExperienceItem || '')
          const coach = String(row.HealthCoachName || '')
          return item.includes(kw) || coach.includes(kw)
58083915   “wangming”   对门店PC进行设计
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
        })
      },
      bookingTotalCount() {
        return this.filteredBookingAll.length
      },
      filteredBookingRecords() {
        const list = this.filteredBookingAll
        const size = this.pageSize
        const maxPage = Math.max(1, Math.ceil((list.length || 1) / size))
        const page = Math.min(this.bookingPage || 1, maxPage)
        const start = (page - 1) * size
        return list.slice(start, start + size)
      },
      refundRecords() {
        const list = this.member.refundRecords || this.member.RefundRecords || []
        return Array.isArray(list) ? list : []
      },
      filteredRefundAll() {
        const kw = (this.searchRefund || '').trim()
        const list = this.refundRecords
        if (!kw) return list
        return list.filter(row => {
ad197adf   “wangming”   完成了基本的门店PC的设计
529
530
          const reason = String(row.RefundReason || '')
          return reason.includes(kw)
58083915   “wangming”   对门店PC进行设计
531
532
533
534
535
536
537
538
539
540
541
542
543
        })
      },
      refundTotalCount() {
        return this.filteredRefundAll.length
      },
      filteredRefundRecords() {
        const list = this.filteredRefundAll
        const size = this.pageSize
        const maxPage = Math.max(1, Math.ceil((list.length || 1) / size))
        const page = Math.min(this.refundPage || 1, maxPage)
        const start = (page - 1) * size
        return list.slice(start, start + size)
      },
ad197adf   “wangming”   完成了基本的门店PC的设计
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
      serviceLogRecords() {
        const list = this.member.serviceLogRecords || []
        return Array.isArray(list) ? list : []
      },
      filteredServiceLogAll() {
        const kw = (this.searchServiceLog || '').trim()
        const list = this.serviceLogRecords
        if (!kw) return list
        return list.filter(row => {
          const remark = String(row.Remark || '')
          const creator = String(row.CreatorName || '')
          return remark.includes(kw) || creator.includes(kw)
        })
      },
      serviceLogTotalCount() { return this.filteredServiceLogAll.length },
      filteredServiceLogRecords() {
        const list = this.filteredServiceLogAll
        const size = this.pageSize
        const maxPage = Math.max(1, Math.ceil((list.length || 1) / size))
        const page = Math.min(this.serviceLogPage || 1, maxPage)
        const start = (page - 1) * size
        return list.slice(start, start + size)
      },
      oldLogRecords() {
        const list = this.member.oldLogRecords || []
        return Array.isArray(list) ? list : []
      },
      filteredOldLogAll() {
        const kw = (this.searchOldLog || '').trim()
        const list = this.oldLogRecords
        if (!kw) return list
        return list.filter(row => {
          const no = String(row.OrderNo || '')
          const remarks = String(row.Remarks || '')
          return no.includes(kw) || remarks.includes(kw)
        })
      },
      oldLogTotalCount() { return this.filteredOldLogAll.length },
      filteredOldLogRecords() {
        const list = this.filteredOldLogAll
        const size = this.pageSize
        const maxPage = Math.max(1, Math.ceil((list.length || 1) / size))
        const page = Math.min(this.oldLogPage || 1, maxPage)
        const start = (page - 1) * size
        return list.slice(start, start + size)
      },
58083915   “wangming”   对门店PC进行设计
590
591
      recordTabs() {
        return [
ad197adf   “wangming”   完成了基本的门店PC的设计
592
          { key: 'rights', label: '权益明细' },
58083915   “wangming”   对门店PC进行设计
593
594
595
596
          { key: 'invite', label: '邀约记录' },
          { key: 'booking', label: '预约记录' },
          { key: 'billing', label: '开单记录' },
          { key: 'consume', label: '消耗记录' },
ad197adf   “wangming”   完成了基本的门店PC的设计
597
598
599
          { key: 'serviceLog', label: '服务日志' },
          { key: 'oldLog', label: '旧日志' },
          { key: 'refund', label: '退卡列表' }
58083915   “wangming”   对门店PC进行设计
600
601
602
603
604
605
606
607
608
609
610
        ]
      },
      currentSearch: {
        get() {
          switch (this.recordsTab) {
            case 'invite': return this.searchInvite
            case 'booking': return this.searchBooking
            case 'billing': return this.searchBilling
            case 'consume': return this.searchConsume
            case 'refund': return this.searchRefund
            case 'rights': return this.searchRights
ad197adf   “wangming”   完成了基本的门店PC的设计
611
612
            case 'serviceLog': return this.searchServiceLog
            case 'oldLog': return this.searchOldLog
58083915   “wangming”   对门店PC进行设计
613
614
615
616
617
618
619
620
621
622
623
            default: return ''
          }
        },
        set(val) {
          switch (this.recordsTab) {
            case 'invite': this.searchInvite = val; break
            case 'booking': this.searchBooking = val; break
            case 'billing': this.searchBilling = val; break
            case 'consume': this.searchConsume = val; break
            case 'refund': this.searchRefund = val; break
            case 'rights': this.searchRights = val; break
ad197adf   “wangming”   完成了基本的门店PC的设计
624
625
            case 'serviceLog': this.searchServiceLog = val; break
            case 'oldLog': this.searchOldLog = val; break
58083915   “wangming”   对门店PC进行设计
626
627
628
629
630
          }
        }
      },
      currentSearchPlaceholder() {
        switch (this.recordsTab) {
ad197adf   “wangming”   完成了基本的门店PC的设计
631
632
633
634
635
          case 'invite': return '按联系记录/邀约人搜索'
          case 'booking': return '按体验项目/健康师搜索'
          case 'billing': return '按品项/开单人员搜索'
          case 'consume': return '按品项/操作人员搜索'
          case 'refund': return '按退卡原因搜索'
58083915   “wangming”   对门店PC进行设计
636
          case 'rights': return '按项目名称搜索'
ad197adf   “wangming”   完成了基本的门店PC的设计
637
638
          case 'serviceLog': return '按备注/添加人搜索'
          case 'oldLog': return '按开单号/备注搜索'
58083915   “wangming”   对门店PC进行设计
639
640
641
642
643
644
645
646
647
648
          default: return '输入关键字搜索'
        }
      },
      recordsTabIndicatorStyle() {
        const tabs = this.recordTabs
        const count = tabs.length || 1
        const index = Math.max(0, tabs.findIndex(t => t.key === this.recordsTab))
        const width = 100 / count
        return {
          width: `${width}%`,
58083915   “wangming”   对门店PC进行设计
649
650
651
652
653
          transform: `translateX(${index * 100}%)`
        }
      }
    },
    methods: {
20099e65   “wangming”   1111
654
655
656
      initData() {
        // 分页切换时由 .sync 自动更新 pageSize/current-page,computed 会自动重算,无需额外逻辑
      },
58083915   “wangming”   对门店PC进行设计
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
      formatMoney(val) {
        if (val == null || val === '') return '0.00'
        const n = Number(val)
        if (isNaN(n)) return '0.00'
        return n.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ',')
      },
      remainingItemTotal(row) {
        const c = Number(row.RemainingCount ?? row.remainingCount ?? 0)
        const p = Number(row.ItemPrice ?? row.itemPrice ?? 0)
        return c * p
      },
      emitAction(type) {
        this.$emit('action', { type, member: this.member })
      },
      close() {
        this.visibleProxy = false
ad197adf   “wangming”   完成了基本的门店PC的设计
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
      },
      relativeTime(dateStr) {
        if (!dateStr) return '—'
        const date = new Date(dateStr)
        if (isNaN(date.getTime())) return dateStr
        const now = new Date()
        const diff = now - date
        const days = Math.floor(diff / (1000 * 60 * 60 * 24))
        if (days < 0) return dateStr
        if (days === 0) return '今天'
        if (days === 1) return '昨天'
        if (days < 7) return `${days}天前`
        if (days < 30) return `${Math.floor(days / 7)}周前`
        if (days < 365) return `${Math.floor(days / 30)}个月前`
        return `${Math.floor(days / 365)}年前`
      },
      statusClass(status) {
        if (!status) return 'status--default'
        const greenList = ['已到店', '已完成', '已签到', '已服务']
        const orangeList = ['待跟进', '待确认', '待服务', '进行中']
        const redList = ['已取消', '已退卡', '已退款', '已过期']
        const blueList = ['已预约', '待到店', '处理中', '已确认']
        if (greenList.includes(status)) return 'status--green'
        if (orangeList.includes(status)) return 'status--orange'
        if (redList.includes(status)) return 'status--red'
        if (blueList.includes(status)) return 'status--blue'
        return 'status--default'
58083915   “wangming”   对门店PC进行设计
700
701
702
703
704
705
      }
    }
  }
  </script>
  
  <style lang="scss" scoped>
ad197adf   “wangming”   完成了基本的门店PC的设计
706
707
  /* ========== Dialog 外壳 ========== */
  ::v-deep .el-dialog {
20099e65   “wangming”   1111
708
709
710
711
    width: 92vw;
    max-width: 1500px;
    height: 94vh;
    margin-top: 3vh !important;
ad197adf   “wangming”   完成了基本的门店PC的设计
712
713
    border-radius: 20px;
    padding: 0;
20099e65   “wangming”   1111
714
715
716
    background: radial-gradient(circle at top left, rgba(255, 255, 255, 0.96) 0, rgba(248, 250, 252, 0.98) 38%, rgba(241, 245, 249, 0.98) 100%);
    box-shadow: 0 24px 48px rgba(15, 23, 42, 0.2), 0 0 0 0.5px rgba(148, 163, 184, 0.35);
    border: 1px solid rgba(226, 232, 240, 0.9);
ad197adf   “wangming”   完成了基本的门店PC的设计
717
718
    backdrop-filter: blur(26px);
    -webkit-backdrop-filter: blur(26px);
58083915   “wangming”   对门店PC进行设计
719
720
    display: flex;
    flex-direction: column;
ad197adf   “wangming”   完成了基本的门店PC的设计
721
722
    position: relative;
    overflow: hidden;
58083915   “wangming”   对门店PC进行设计
723
  }
58083915   “wangming”   对门店PC进行设计
724
  
20099e65   “wangming”   1111
725
726
727
728
729
730
731
732
  ::v-deep .el-dialog__header {
    display: none;
  }
  
  ::v-deep .el-dialog__body {
    padding: 0;
    flex: 1;
    overflow: hidden;
58083915   “wangming”   对门店PC进行设计
733
734
  }
  
ad197adf   “wangming”   完成了基本的门店PC的设计
735
736
737
738
739
740
741
742
743
744
  /* ========== 主容器:左右分栏 ========== */
  .member-dialog-inner {
    display: flex;
    flex-direction: row;
    height: 100%;
    box-sizing: border-box;
  }
  
  /* ========== 左侧边栏 ========== */
  .sidebar {
20099e65   “wangming”   1111
745
    width: 320px;
ad197adf   “wangming”   完成了基本的门店PC的设计
746
747
748
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
20099e65   “wangming”   1111
749
750
    background: rgba(248, 250, 252, 0.98);
    border-right: 1px solid rgba(226, 232, 240, 0.6);
ad197adf   “wangming”   完成了基本的门店PC的设计
751
    border-radius: 0 0 0 20px;
58083915   “wangming”   对门店PC进行设计
752
    overflow-y: auto;
ad197adf   “wangming”   完成了基本的门店PC的设计
753
754
    scrollbar-width: none;
    -ms-overflow-style: none;
20099e65   “wangming”   1111
755
756
757
758
  
    &::-webkit-scrollbar {
      display: none;
    }
58083915   “wangming”   对门店PC进行设计
759
760
  }
  
ad197adf   “wangming”   完成了基本的门店PC的设计
761
762
763
764
765
  /* -- 身份区 -- */
  .sidebar-identity {
    display: flex;
    flex-direction: column;
    align-items: center;
20099e65   “wangming”   1111
766
    padding: 28px 20px 18px;
ad197adf   “wangming”   完成了基本的门店PC的设计
767
  }
20099e65   “wangming”   1111
768
  
58083915   “wangming”   对门店PC进行设计
769
  .member-avatar {
20099e65   “wangming”   1111
770
771
    width: 68px;
    height: 68px;
ad197adf   “wangming”   完成了基本的门店PC的设计
772
    border-radius: 50%;
58083915   “wangming”   对门店PC进行设计
773
774
775
776
777
    background: linear-gradient(145deg, #6366f1, #a855f7);
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
ad197adf   “wangming”   完成了基本的门店PC的设计
778
    font-weight: 600;
20099e65   “wangming”   1111
779
    font-size: 26px;
ad197adf   “wangming”   完成了基本的门店PC的设计
780
    flex-shrink: 0;
20099e65   “wangming”   1111
781
782
    box-shadow: 0 6px 16px rgba(99, 102, 241, 0.3), 0 0 0 3px rgba(255, 255, 255, 0.8);
    margin-bottom: 12px;
ad197adf   “wangming”   完成了基本的门店PC的设计
783
  }
20099e65   “wangming”   1111
784
  
ad197adf   “wangming”   完成了基本的门店PC的设计
785
  .member-name {
20099e65   “wangming”   1111
786
    font-size: 19px;
ad197adf   “wangming”   完成了基本的门店PC的设计
787
788
789
790
    font-weight: 600;
    color: #0f172a;
    letter-spacing: 0.3px;
    text-align: center;
20099e65   “wangming”   1111
791
    margin-bottom: 8px;
ad197adf   “wangming”   完成了基本的门店PC的设计
792
  }
20099e65   “wangming”   1111
793
  
ad197adf   “wangming”   完成了基本的门店PC的设计
794
795
  .level-tag {
    display: inline-block;
20099e65   “wangming”   1111
796
797
    font-size: 12px;
    padding: 3px 16px;
ad197adf   “wangming”   完成了基本的门店PC的设计
798
799
    border-radius: 999px;
    font-weight: 600;
20099e65   “wangming”   1111
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
    margin-bottom: 10px;
  }
  
  .level--d {
    background: #e5e7eb;
    color: #6b7280;
  }
  
  .level--c {
    background: rgba(59, 130, 246, 0.1);
    color: #2563eb;
    border: 1px solid rgba(59, 130, 246, 0.2);
  }
  
  .level--b {
    background: rgba(34, 197, 94, 0.1);
    color: #16a34a;
    border: 1px solid rgba(34, 197, 94, 0.2);
  }
  
  .level--a {
    background: rgba(245, 158, 11, 0.1);
    color: #d97706;
    border: 1px solid rgba(245, 158, 11, 0.2);
  }
  
  .level--aplus {
    background: linear-gradient(135deg, #f59e0b, #d97706);
    color: #fff;
    box-shadow: 0 2px 6px rgba(245, 158, 11, 0.3);
  }
  
  .level--aplusplus {
    background: linear-gradient(135deg, #ef4444, #dc2626);
    color: #fff;
    box-shadow: 0 2px 6px rgba(239, 68, 68, 0.3);
  }
  
  .level--default {
    background: linear-gradient(135deg, #f59e0b, #d97706);
    color: #fff;
ad197adf   “wangming”   完成了基本的门店PC的设计
841
  }
20099e65   “wangming”   1111
842
  
ad197adf   “wangming”   完成了基本的门店PC的设计
843
844
845
846
  .member-meta {
    display: flex;
    align-items: center;
    justify-content: center;
20099e65   “wangming”   1111
847
    font-size: 14px;
ad197adf   “wangming”   完成了基本的门店PC的设计
848
849
850
    color: #64748b;
    flex-wrap: wrap;
    text-align: center;
20099e65   “wangming”   1111
851
852
  
    span+span::before {
ad197adf   “wangming”   完成了基本的门店PC的设计
853
854
855
856
      content: '\00b7';
      margin: 0 5px;
      color: #cbd5e1;
      font-weight: 700;
20099e65   “wangming”   1111
857
      font-size: 15px;
ad197adf   “wangming”   完成了基本的门店PC的设计
858
859
    }
  }
20099e65   “wangming”   1111
860
  
ad197adf   “wangming”   完成了基本的门店PC的设计
861
862
863
864
865
  .member-sub-info {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
20099e65   “wangming”   1111
866
    font-size: 14px;
ad197adf   “wangming”   完成了基本的门店PC的设计
867
    color: #64748b;
20099e65   “wangming”   1111
868
    margin-bottom: 8px;
ad197adf   “wangming”   完成了基本的门店PC的设计
869
870
    flex-wrap: wrap;
  }
20099e65   “wangming”   1111
871
  
ad197adf   “wangming”   完成了基本的门店PC的设计
872
873
  .member-phone {
    color: #16a34a;
58083915   “wangming”   对门店PC进行设计
874
    font-weight: 500;
20099e65   “wangming”   1111
875
876
877
878
879
  
    i {
      margin-right: 3px;
      font-size: 14px;
    }
58083915   “wangming”   对门店PC进行设计
880
  }
20099e65   “wangming”   1111
881
  
ad197adf   “wangming”   完成了基本的门店PC的设计
882
883
  .member-dah {
    color: #94a3b8;
20099e65   “wangming”   1111
884
    font-size: 13px;
58083915   “wangming”   对门店PC进行设计
885
  }
20099e65   “wangming”   1111
886
  
ad197adf   “wangming”   完成了基本的门店PC的设计
887
  .member-type-tags {
58083915   “wangming”   对门店PC进行设计
888
889
    display: flex;
    flex-wrap: wrap;
ad197adf   “wangming”   完成了基本的门店PC的设计
890
    justify-content: center;
20099e65   “wangming”   1111
891
892
    gap: 5px;
    margin-bottom: 6px;
58083915   “wangming”   对门店PC进行设计
893
  }
20099e65   “wangming”   1111
894
  
ad197adf   “wangming”   完成了基本的门店PC的设计
895
  .type-tag {
20099e65   “wangming”   1111
896
    padding: 3px 12px;
58083915   “wangming”   对门店PC进行设计
897
    border-radius: 999px;
20099e65   “wangming”   1111
898
    font-size: 12px;
ad197adf   “wangming”   完成了基本的门店PC的设计
899
    font-weight: 500;
58083915   “wangming”   对门店PC进行设计
900
  }
20099e65   “wangming”   1111
901
  
ad197adf   “wangming”   完成了基本的门店PC的设计
902
  .type-tag--beauty {
20099e65   “wangming”   1111
903
    background: rgba(34, 197, 94, 0.1);
ad197adf   “wangming”   完成了基本的门店PC的设计
904
    color: #16a34a;
20099e65   “wangming”   1111
905
    border: 1px solid rgba(34, 197, 94, 0.15);
ad197adf   “wangming”   完成了基本的门店PC的设计
906
  }
20099e65   “wangming”   1111
907
  
ad197adf   “wangming”   完成了基本的门店PC的设计
908
  .type-tag--medical {
20099e65   “wangming”   1111
909
    background: rgba(249, 115, 22, 0.1);
ad197adf   “wangming”   完成了基本的门店PC的设计
910
    color: #ea580c;
20099e65   “wangming”   1111
911
    border: 1px solid rgba(249, 115, 22, 0.15);
ad197adf   “wangming”   完成了基本的门店PC的设计
912
  }
20099e65   “wangming”   1111
913
  
ad197adf   “wangming”   完成了基本的门店PC的设计
914
  .type-tag--tech {
20099e65   “wangming”   1111
915
    background: rgba(59, 130, 246, 0.1);
ad197adf   “wangming”   完成了基本的门店PC的设计
916
    color: #2563eb;
20099e65   “wangming”   1111
917
    border: 1px solid rgba(59, 130, 246, 0.15);
ad197adf   “wangming”   完成了基本的门店PC的设计
918
  }
20099e65   “wangming”   1111
919
  
ad197adf   “wangming”   完成了基本的门店PC的设计
920
  .member-visit-row {
58083915   “wangming”   对门店PC进行设计
921
922
    display: flex;
    align-items: center;
ad197adf   “wangming”   完成了基本的门店PC的设计
923
924
925
926
927
    justify-content: center;
    gap: 8px;
    margin-top: 6px;
    flex-wrap: wrap;
  }
20099e65   “wangming”   1111
928
  
ad197adf   “wangming”   完成了基本的门店PC的设计
929
  .member-visit {
20099e65   “wangming”   1111
930
    font-size: 13px;
ad197adf   “wangming”   完成了基本的门店PC的设计
931
932
    color: #94a3b8;
    cursor: default;
20099e65   “wangming”   1111
933
934
935
936
937
  
    i {
      margin-right: 3px;
      font-size: 13px;
    }
ad197adf   “wangming”   完成了基本的门店PC的设计
938
  }
20099e65   “wangming”   1111
939
  
ad197adf   “wangming”   完成了基本的门店PC的设计
940
  .member-sleep {
20099e65   “wangming”   1111
941
942
    font-size: 12px;
    padding: 3px 10px;
ad197adf   “wangming”   完成了基本的门店PC的设计
943
    border-radius: 999px;
20099e65   “wangming”   1111
944
    background: rgba(249, 115, 22, 0.1);
ad197adf   “wangming”   完成了基本的门店PC的设计
945
    color: #ea580c;
58083915   “wangming”   对门店PC进行设计
946
    font-weight: 500;
20099e65   “wangming”   1111
947
948
949
950
951
  
    i {
      margin-right: 2px;
      font-size: 12px;
    }
58083915   “wangming”   对门店PC进行设计
952
  }
20099e65   “wangming”   1111
953
  
ad197adf   “wangming”   完成了基本的门店PC的设计
954
  .tag-row {
20099e65   “wangming”   1111
955
    margin-top: 10px;
ad197adf   “wangming”   完成了基本的门店PC的设计
956
957
958
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
20099e65   “wangming”   1111
959
    gap: 5px;
58083915   “wangming”   对门店PC进行设计
960
  }
20099e65   “wangming”   1111
961
  
ad197adf   “wangming”   完成了基本的门店PC的设计
962
  .member-tag {
20099e65   “wangming”   1111
963
    padding: 3px 10px;
ad197adf   “wangming”   完成了基本的门店PC的设计
964
    border-radius: 999px;
20099e65   “wangming”   1111
965
966
    font-size: 12px;
    background: rgba(129, 140, 248, 0.1);
ad197adf   “wangming”   完成了基本的门店PC的设计
967
    color: #4f46e5;
20099e65   “wangming”   1111
968
    border: 1px solid rgba(129, 140, 248, 0.15);
58083915   “wangming”   对门店PC进行设计
969
970
  }
  
ad197adf   “wangming”   完成了基本的门店PC的设计
971
972
  /* -- 侧边栏通用 section -- */
  .sidebar-section {
20099e65   “wangming”   1111
973
974
    padding: 14px 20px;
    border-top: 1px solid rgba(226, 232, 240, 0.5);
58083915   “wangming”   对门店PC进行设计
975
  }
20099e65   “wangming”   1111
976
  
ad197adf   “wangming”   完成了基本的门店PC的设计
977
  .sidebar-section-title {
20099e65   “wangming”   1111
978
    font-size: 14px;
ad197adf   “wangming”   完成了基本的门店PC的设计
979
980
    font-weight: 600;
    color: #64748b;
20099e65   “wangming”   1111
981
    margin-bottom: 8px;
58083915   “wangming”   对门店PC进行设计
982
983
    display: flex;
    align-items: center;
20099e65   “wangming”   1111
984
985
986
987
988
989
    gap: 5px;
  
    i {
      font-size: 14px;
      color: #6366f1;
    }
58083915   “wangming”   对门店PC进行设计
990
  }
20099e65   “wangming”   1111
991
  
ad197adf   “wangming”   完成了基本的门店PC的设计
992
993
994
995
  .sidebar-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
20099e65   “wangming”   1111
996
997
    padding: 5px 0;
    min-height: 26px;
58083915   “wangming”   对门店PC进行设计
998
  }
20099e65   “wangming”   1111
999
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1000
  .sidebar-row--highlight {
20099e65   “wangming”   1111
1001
    background: linear-gradient(135deg, rgba(37, 99, 235, 0.04), rgba(124, 58, 237, 0.04));
ad197adf   “wangming”   完成了基本的门店PC的设计
1002
1003
1004
    border-radius: 6px;
    padding: 4px 8px;
    margin: 1px -8px;
58083915   “wangming”   对门店PC进行设计
1005
  }
20099e65   “wangming”   1111
1006
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1007
1008
  .sidebar-row--remark {
    align-items: flex-start;
20099e65   “wangming”   1111
1009
1010
1011
1012
1013
1014
1015
  
    .sidebar-value {
      white-space: normal;
      word-break: break-all;
      text-align: right;
      max-width: 160px;
    }
58083915   “wangming”   对门店PC进行设计
1016
  }
20099e65   “wangming”   1111
1017
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1018
1019
  .sidebar-label {
    color: #94a3b8;
20099e65   “wangming”   1111
1020
    font-size: 13px;
ad197adf   “wangming”   完成了基本的门店PC的设计
1021
1022
1023
    flex-shrink: 0;
    display: flex;
    align-items: center;
20099e65   “wangming”   1111
1024
1025
1026
1027
1028
1029
  
    i {
      margin-right: 3px;
      font-size: 13px;
      color: #94a3b8;
    }
58083915   “wangming”   对门店PC进行设计
1030
  }
20099e65   “wangming”   1111
1031
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1032
1033
  .sidebar-value {
    color: #1e293b;
20099e65   “wangming”   1111
1034
    font-size: 14px;
ad197adf   “wangming”   完成了基本的门店PC的设计
1035
1036
1037
1038
    font-weight: 500;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
20099e65   “wangming”   1111
1039
    max-width: 170px;
ad197adf   “wangming”   完成了基本的门店PC的设计
1040
    text-align: right;
58083915   “wangming”   对门店PC进行设计
1041
  }
20099e65   “wangming”   1111
1042
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1043
  .sidebar-value--amount {
20099e65   “wangming”   1111
1044
    font-size: 15px;
ad197adf   “wangming”   完成了基本的门店PC的设计
1045
1046
    font-weight: 600;
    color: #0f172a;
58083915   “wangming”   对门店PC进行设计
1047
  }
20099e65   “wangming”   1111
1048
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1049
  .sidebar-value--gradient {
20099e65   “wangming”   1111
1050
    font-size: 16px;
ad197adf   “wangming”   完成了基本的门店PC的设计
1051
1052
1053
1054
1055
    font-weight: 700;
    background: linear-gradient(135deg, #2563eb, #7c3aed);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;
    background-clip: text;
58083915   “wangming”   对门店PC进行设计
1056
1057
  }
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1058
1059
1060
1061
1062
1063
  /* ========== 右侧内容区 ========== */
  .main-content {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
20099e65   “wangming”   1111
1064
    padding: 18px 28px;
58083915   “wangming”   对门店PC进行设计
1065
1066
  }
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1067
1068
  /* -- 内容头部:Tab + 搜索 -- */
  .content-header {
58083915   “wangming”   对门店PC进行设计
1069
1070
1071
    display: flex;
    justify-content: space-between;
    align-items: center;
20099e65   “wangming”   1111
1072
    margin-bottom: 14px;
ad197adf   “wangming”   完成了基本的门店PC的设计
1073
    flex-shrink: 0;
58083915   “wangming”   对门店PC进行设计
1074
  }
20099e65   “wangming”   1111
1075
  
58083915   “wangming”   对门店PC进行设计
1076
1077
  .records-tab-list {
    display: inline-flex;
ad197adf   “wangming”   完成了基本的门店PC的设计
1078
    flex: 1;
58083915   “wangming”   对门店PC进行设计
1079
1080
    min-width: 0;
    width: 100%;
ad197adf   “wangming”   完成了基本的门店PC的设计
1081
    max-width: 100%;
20099e65   “wangming”   1111
1082
    background: rgba(229, 231, 235, 0.7);
58083915   “wangming”   对门店PC进行设计
1083
    border-radius: 999px;
20099e65   “wangming”   1111
1084
    padding: 3px;
58083915   “wangming”   对门店PC进行设计
1085
1086
1087
1088
1089
    position: relative;
    overflow: hidden;
    backdrop-filter: blur(14px);
    -webkit-backdrop-filter: blur(14px);
  }
20099e65   “wangming”   1111
1090
  
58083915   “wangming”   对门店PC进行设计
1091
1092
1093
1094
  .records-tab {
    border: none;
    outline: none;
    background: transparent;
20099e65   “wangming”   1111
1095
    padding: 0 10px;
58083915   “wangming”   对门店PC进行设计
1096
    border-radius: 999px;
20099e65   “wangming”   1111
1097
    font-size: 14px;
58083915   “wangming”   对门店PC进行设计
1098
1099
    color: #4b5563;
    cursor: pointer;
ad197adf   “wangming”   完成了基本的门店PC的设计
1100
    transition: color 0.25s ease;
58083915   “wangming”   对门店PC进行设计
1101
1102
    flex: 1 1 0;
    text-align: center;
20099e65   “wangming”   1111
1103
1104
    height: 34px;
    line-height: 34px;
58083915   “wangming”   对门店PC进行设计
1105
1106
1107
    position: relative;
    z-index: 1;
  }
20099e65   “wangming”   1111
1108
1109
1110
1111
1112
1113
  
  .records-tab--active {
    color: #1d4ed8;
    font-weight: 600;
  }
  
58083915   “wangming”   对门店PC进行设计
1114
1115
  .records-tab-indicator {
    position: absolute;
20099e65   “wangming”   1111
1116
1117
    top: 3px;
    bottom: 3px;
58083915   “wangming”   对门店PC进行设计
1118
1119
    left: 0;
    border-radius: 999px;
20099e65   “wangming”   1111
1120
1121
    background: rgba(255, 255, 255, 0.98);
    box-shadow: 0 3px 10px rgba(15, 23, 42, 0.12), 0 0 0 1px rgba(255, 255, 255, 0.8);
58083915   “wangming”   对门店PC进行设计
1122
1123
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
ad197adf   “wangming”   完成了基本的门店PC的设计
1124
    transition: transform 0.32s cubic-bezier(0.4, 0, 0.2, 1);
58083915   “wangming”   对门店PC进行设计
1125
1126
    z-index: 0;
  }
20099e65   “wangming”   1111
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
  
  .records-tab-label {
    white-space: nowrap;
  }
  
  .records-tabs-search {
    flex-shrink: 0;
    margin-left: 12px;
  }
  
  .records-search {
    width: 200px;
  }
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1141
  .records-search ::v-deep .el-input__inner {
58083915   “wangming”   对门店PC进行设计
1142
    border-radius: 999px;
20099e65   “wangming”   1111
1143
1144
1145
    height: 34px;
    line-height: 34px;
    font-size: 14px;
ad197adf   “wangming”   完成了基本的门店PC的设计
1146
1147
    border-color: #e2e8f0;
    transition: border-color 0.2s;
20099e65   “wangming”   1111
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
  
    &:focus {
      border-color: #6366f1;
    }
  }
  
  .records-search ::v-deep .el-input__prefix {
    display: flex;
    align-items: center;
    height: 100%;
58083915   “wangming”   对门店PC进行设计
1158
  }
58083915   “wangming”   对门店PC进行设计
1159
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1160
1161
1162
1163
1164
1165
  /* -- 表格主体区:flex:1 填满 -- */
  .content-body {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
58083915   “wangming”   对门店PC进行设计
1166
  }
20099e65   “wangming”   1111
1167
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1168
1169
1170
  .records-panel {
    flex: 1;
    min-height: 0;
58083915   “wangming”   对门店PC进行设计
1171
    display: flex;
ad197adf   “wangming”   完成了基本的门店PC的设计
1172
    flex-direction: column;
58083915   “wangming”   对门店PC进行设计
1173
  }
20099e65   “wangming”   1111
1174
  
58083915   “wangming”   对门店PC进行设计
1175
  .records-table-wrap {
ad197adf   “wangming”   完成了基本的门店PC的设计
1176
1177
    flex: 1;
    min-height: 0;
58083915   “wangming”   对门店PC进行设计
1178
    overflow-y: auto;
ad197adf   “wangming”   完成了基本的门店PC的设计
1179
1180
    scrollbar-width: none;
    -ms-overflow-style: none;
20099e65   “wangming”   1111
1181
1182
1183
1184
1185
1186
1187
1188
1189
  
    &::-webkit-scrollbar {
      display: none;
    }
  }
  
  .record-table,
  .rights-table {
    font-size: 14px;
58083915   “wangming”   对门店PC进行设计
1190
  }
58083915   “wangming”   对门店PC进行设计
1191
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1192
  ::v-deep .el-table {
20099e65   “wangming”   1111
1193
1194
1195
1196
    &::before {
      display: none;
    }
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1197
    th {
20099e65   “wangming”   1111
1198
1199
      padding: 10px 0;
      font-size: 13px;
ad197adf   “wangming”   完成了基本的门店PC的设计
1200
1201
1202
1203
1204
      background: #f8fafc;
      color: #64748b;
      font-weight: 500;
      border-bottom: 1px solid #e2e8f0;
    }
20099e65   “wangming”   1111
1205
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1206
    td {
20099e65   “wangming”   1111
1207
      padding: 9px 0;
ad197adf   “wangming”   完成了基本的门店PC的设计
1208
1209
      border-bottom: 1px solid #f1f5f9;
    }
20099e65   “wangming”   1111
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
  
    .el-table__row:hover>td {
      background: rgba(99, 102, 241, 0.03);
    }
  
    &.el-table--border td,
    &.el-table--border th {
      border-right: none;
    }
  
    &.el-table--border::after {
      display: none;
    }
ad197adf   “wangming”   完成了基本的门店PC的设计
1223
  }
20099e65   “wangming”   1111
1224
  
58083915   “wangming”   对门店PC进行设计
1225
  .records-pagination {
20099e65   “wangming”   1111
1226
    margin-top: 8px;
58083915   “wangming”   对门店PC进行设计
1227
    text-align: right;
ad197adf   “wangming”   完成了基本的门店PC的设计
1228
    flex-shrink: 0;
58083915   “wangming”   对门店PC进行设计
1229
1230
  }
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1231
  /* ========== 状态胶囊 ========== */
20099e65   “wangming”   1111
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
  .status-capsule {
    display: inline-block;
    padding: 3px 12px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 500;
    line-height: 1.6;
  }
  
  .status--green {
    background: rgba(34, 197, 94, 0.1);
    color: #16a34a;
  }
  
  .status--orange {
    background: rgba(249, 115, 22, 0.1);
    color: #ea580c;
  }
  
  .status--red {
    background: rgba(239, 68, 68, 0.1);
    color: #dc2626;
  }
  
  .status--blue {
    background: rgba(59, 130, 246, 0.1);
    color: #2563eb;
  }
  
  .status--default {
    background: rgba(148, 163, 184, 0.1);
    color: #64748b;
  }
  
  .amount-text {
    font-weight: 600;
    color: #2563eb;
  }
  
  .num-remaining {
    font-weight: 600;
    color: #2563eb;
  }
ad197adf   “wangming”   完成了基本的门店PC的设计
1275
  
20099e65   “wangming”   1111
1276
1277
1278
1279
  .num-total {
    font-weight: 600;
    color: #7c3aed;
  }
ad197adf   “wangming”   完成了基本的门店PC的设计
1280
1281
1282
1283
1284
1285
1286
1287
  
  /* -- 底部操作按钮 -- */
  .content-footer {
    display: flex;
    justify-content: flex-start;
    gap: 10px;
    padding-top: 8px;
    flex-shrink: 0;
20099e65   “wangming”   1111
1288
    border-top: 1px solid rgba(226, 232, 240, 0.5);
ad197adf   “wangming”   完成了基本的门店PC的设计
1289
  }
20099e65   “wangming”   1111
1290
  
58083915   “wangming”   对门店PC进行设计
1291
1292
1293
1294
  .records-op-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
ed6ada0d   “wangming”   Update MemberProf...
1295
1296
1297
1298
    gap: 4px;
    min-width: 84px;
    height: 32px;
    padding: 0 14px;
58083915   “wangming”   对门店PC进行设计
1299
    border-radius: 999px;
ed6ada0d   “wangming”   Update MemberProf...
1300
    font-size: 13px;
58083915   “wangming”   对门店PC进行设计
1301
1302
1303
1304
1305
    font-weight: 500;
    cursor: pointer;
    position: relative;
    overflow: hidden;
    transition: color 0.2s ease, box-shadow 0.2s ease, transform 0.12s ease;
20099e65   “wangming”   1111
1306
1307
1308
1309
  
    i {
      font-size: 13px;
    }
58083915   “wangming”   对门店PC进行设计
1310
  }
20099e65   “wangming”   1111
1311
  
58083915   “wangming”   对门店PC进行设计
1312
  .records-op-btn--ghost {
20099e65   “wangming”   1111
1313
    background: rgba(239, 246, 255, 0.9);
58083915   “wangming”   对门店PC进行设计
1314
    color: #2563eb;
20099e65   “wangming”   1111
1315
1316
1317
1318
1319
1320
    border: 1px solid rgba(37, 99, 235, 0.18);
  }
  
  .records-op-btn:hover {
    transform: translateY(-0.5px);
    box-shadow: 0 4px 10px rgba(15, 23, 42, 0.12);
58083915   “wangming”   对门店PC进行设计
1321
  }
20099e65   “wangming”   1111
1322
1323
1324
1325
1326
  
  .records-op-btn--ghost:hover {
    color: #ffffff;
  }
  
58083915   “wangming”   对门店PC进行设计
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
  .records-op-btn::before {
    content: '';
    position: absolute;
    inset: 0;
    border-radius: inherit;
    background-size: 200% 100%;
    background-position: 0% 0;
    opacity: 0.9;
    transform: translateX(-100%);
    transition: transform 0.25s ease;
    z-index: -1;
  }
20099e65   “wangming”   1111
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
  
  .records-op-btn:hover::before {
    transform: translateX(0);
  }
  
  .records-op-btn--invite::before {
    background-image: linear-gradient(135deg, #0ea5e9, #22c55e);
  }
  
  .records-op-btn--booking::before {
    background-image: linear-gradient(135deg, #f97316, #facc15);
  }
  
  .records-op-btn--billing::before {
    background-image: linear-gradient(135deg, #3b82f6, #2563eb);
  }
  
  .records-op-btn--consume::before {
    background-image: linear-gradient(135deg, #22c55e, #16a34a);
  }
  
  .records-op-btn--refund::before {
    background-image: linear-gradient(135deg, #f97316, #ef4444);
  }
  
ad197adf   “wangming”   完成了基本的门店PC的设计
1364
1365
  .records-op-btn--close {
    margin-left: auto;
20099e65   “wangming”   1111
1366
1367
1368
1369
  
    &::before {
      background-image: linear-gradient(135deg, #94a3b8, #64748b);
    }
58083915   “wangming”   对门店PC进行设计
1370
1371
  }
  </style>