style: format member stored card module files
Some checks failed
Build and Deploy TenantUI / build-and-deploy (push) Failing after 2s

This commit is contained in:
2026-03-04 09:17:26 +08:00
parent 5e1910781b
commit 645a3beb47
13 changed files with 77 additions and 67 deletions

View File

@@ -22,11 +22,18 @@ function handleToggle() {
</script> </script>
<template> <template>
<div class="msc-plan-card" :class="{ 'is-disabled': item.status === 'disabled' }"> <div
class="msc-plan-card"
:class="{ 'is-disabled': item.status === 'disabled' }"
>
<div class="msc-plan-card-head"> <div class="msc-plan-card-head">
<div class="msc-plan-amount"> {{ formatCurrency(item.rechargeAmount) }}</div> <div class="msc-plan-amount">
{{ formatCurrency(item.rechargeAmount) }}
</div>
<div class="msc-plan-gift"> {{ formatCurrency(item.giftAmount) }}</div> <div class="msc-plan-gift"> {{ formatCurrency(item.giftAmount) }}</div>
<div class="msc-plan-arrived">到账 {{ formatCurrency(item.arrivedAmount) }}</div> <div class="msc-plan-arrived">
到账 {{ formatCurrency(item.arrivedAmount) }}
</div>
</div> </div>
<div class="msc-plan-card-body"> <div class="msc-plan-card-body">

View File

@@ -1,9 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
import type { TableColumnType } from 'ant-design-vue'; import type { TableColumnType } from 'ant-design-vue';
import type { MemberStoredCardRechargeRecordDto } from '#/api/member/stored-card';
import type { StoredCardRecordPager } from '../types'; import type { StoredCardRecordPager } from '../types';
import type { MemberStoredCardRechargeRecordDto } from '#/api/member/stored-card';
import { Pagination, Table, Tag } from 'ant-design-vue'; import { Pagination, Table, Tag } from 'ant-design-vue';
import { import {

View File

@@ -13,11 +13,11 @@ const emit = defineEmits<{
(event: 'export'): void; (event: 'export'): void;
(event: 'reset'): void; (event: 'reset'): void;
(event: 'search'): void; (event: 'search'): void;
(event: 'setDateRange', value: null | [any, any]): void; (event: 'setDateRange', value: [any, any] | null): void;
(event: 'setKeyword', value: string): void; (event: 'setKeyword', value: string): void;
}>(); }>();
function setDateRange(value: null | [any, any]) { function setDateRange(value: [any, any] | null) {
emit('setDateRange', value); emit('setDateRange', value);
} }
</script> </script>
@@ -42,11 +42,7 @@ function setDateRange(value: null | [any, any]) {
<Button @click="emit('search')">搜索</Button> <Button @click="emit('search')">搜索</Button>
<Button @click="emit('reset')">重置</Button> <Button @click="emit('reset')">重置</Button>
<span class="msc-spacer"></span> <span class="msc-spacer"></span>
<Button <Button :disabled="!canManage" :loading="exporting" @click="emit('export')">
:disabled="!canManage"
:loading="exporting"
@click="emit('export')"
>
导出 导出
</Button> </Button>
</div> </div>

View File

@@ -33,7 +33,9 @@ defineProps<{
</div> </div>
<div class="msc-stat-card"> <div class="msc-stat-card">
<div class="msc-stat-label">储值用户</div> <div class="msc-stat-label">储值用户</div>
<div class="msc-stat-value">{{ formatInteger(stats.rechargeMemberCount) }}</div> <div class="msc-stat-value">
{{ formatInteger(stats.rechargeMemberCount) }}
</div>
</div> </div>
</div> </div>
</template> </template>

View File

@@ -99,7 +99,10 @@ export function createDrawerActions(options: CreateDrawerActionsOptions) {
options.isDrawerSubmitting.value = true; options.isDrawerSubmitting.value = true;
try { try {
await saveMemberStoredCardPlanApi( await saveMemberStoredCardPlanApi(
mapPlanEditorFormToSavePayload(options.form, options.selectedStoreId.value), mapPlanEditorFormToSavePayload(
options.form,
options.selectedStoreId.value,
),
); );
message.success('保存成功'); message.success('保存成功');
options.isDrawerOpen.value = false; options.isDrawerOpen.value = false;

View File

@@ -2,10 +2,9 @@ import type {
MemberStoredCardPlanDto, MemberStoredCardPlanDto,
SaveMemberStoredCardPlanPayload, SaveMemberStoredCardPlanPayload,
} from '#/api/member/stored-card'; } from '#/api/member/stored-card';
import type { StoredCardPlanEditorForm } from '#/views/member/stored-card/types'; import type {
import {
createDefaultStoredCardPlanEditorForm, createDefaultStoredCardPlanEditorForm,
StoredCardPlanEditorForm,
type StoredCardRecordFilterForm, type StoredCardRecordFilterForm,
} from '#/views/member/stored-card/types'; } from '#/views/member/stored-card/types';
@@ -107,7 +106,10 @@ export function mapRecordFilterToQuery(
} }
/** base64 下载。 */ /** base64 下载。 */
export function downloadBase64File(fileName: string, fileContentBase64: string) { export function downloadBase64File(
fileName: string,
fileContentBase64: string,
) {
const binary = atob(fileContentBase64); const binary = atob(fileContentBase64);
const length = binary.length; const length = binary.length;
const bytes = new Uint8Array(length); const bytes = new Uint8Array(length);

View File

@@ -2,7 +2,7 @@ import type { Ref } from 'vue';
import type { StoredCardPlanCardViewModel } from '#/views/member/stored-card/types'; import type { StoredCardPlanCardViewModel } from '#/views/member/stored-card/types';
import { Modal, message } from 'ant-design-vue'; import { message, Modal } from 'ant-design-vue';
import { import {
changeMemberStoredCardPlanStatusApi, changeMemberStoredCardPlanStatusApi,

View File

@@ -8,6 +8,8 @@ import { computed, onMounted, reactive, ref, watch } from 'vue';
import { useAccessStore } from '@vben/stores'; import { useAccessStore } from '@vben/stores';
import { message } from 'ant-design-vue';
import { exportMemberStoredCardRechargeRecordApi } from '#/api/member/stored-card'; import { exportMemberStoredCardRechargeRecordApi } from '#/api/member/stored-card';
import { import {
@@ -17,23 +19,18 @@ import {
createDefaultStoredCardRecordPager, createDefaultStoredCardRecordPager,
} from '../types'; } from '../types';
import { import {
createDataActions, createDefaultRecordDateRange,
} from './stored-card-page/data-actions';
import {
createDrawerActions,
} from './stored-card-page/drawer-actions';
import {
MEMBER_STORED_CARD_MANAGE_PERMISSION, MEMBER_STORED_CARD_MANAGE_PERMISSION,
MEMBER_STORED_CARD_VIEW_PERMISSION, MEMBER_STORED_CARD_VIEW_PERMISSION,
STORED_CARD_TAB_OPTIONS, STORED_CARD_TAB_OPTIONS,
createDefaultRecordDateRange,
} from './stored-card-page/constants'; } from './stored-card-page/constants';
import { createDataActions } from './stored-card-page/data-actions';
import { createDrawerActions } from './stored-card-page/drawer-actions';
import { import {
downloadBase64File, downloadBase64File,
mapRecordFilterToQuery, mapRecordFilterToQuery,
} from './stored-card-page/helpers'; } from './stored-card-page/helpers';
import { createPlanActions } from './stored-card-page/plan-actions'; import { createPlanActions } from './stored-card-page/plan-actions';
import { message } from 'ant-design-vue';
export function useMemberStoredCardPage() { export function useMemberStoredCardPage() {
const accessStore = useAccessStore(); const accessStore = useAccessStore();
@@ -139,7 +136,7 @@ export function useMemberStoredCardPage() {
recordFilterForm.keyword = value; recordFilterForm.keyword = value;
} }
function setRecordDateRange(value: null | [any, any]) { function setRecordDateRange(value: [any, any] | null) {
if (!value) { if (!value) {
recordFilterForm.dateRange = null; recordFilterForm.dateRange = null;
return; return;

View File

@@ -12,16 +12,16 @@
} }
.msc-empty { .msc-empty {
border-radius: 12px;
padding: 40px 20px; padding: 40px 20px;
background: #fff; background: #fff;
border-radius: 12px;
box-shadow: 0 3px 10px rgb(16 24 40 / 6%); box-shadow: 0 3px 10px rgb(16 24 40 / 6%);
} }
.msc-readonly-tip { .msc-readonly-tip {
margin-left: auto; margin-left: auto;
color: #6b7280;
font-size: 12px; font-size: 12px;
color: #6b7280;
} }
.msc-spacer { .msc-spacer {

View File

@@ -18,35 +18,35 @@
.msc-ratio-hint { .msc-ratio-hint {
display: inline-flex; display: inline-flex;
align-items: center; align-items: center;
border-radius: 6px;
margin-top: 8px;
padding: 4px 10px; padding: 4px 10px;
color: #1677ff; margin-top: 8px;
font-size: 12px; font-size: 12px;
font-weight: 500; font-weight: 500;
color: #1677ff;
background: rgb(22 119 255 / 10%); background: rgb(22 119 255 / 10%);
border-radius: 6px;
} }
.msc-form-hint { .msc-form-hint {
margin-top: 6px; margin-top: 6px;
color: #9ca3af;
font-size: 12px; font-size: 12px;
color: #9ca3af;
} }
.msc-status-row { .msc-status-row {
display: flex; display: flex;
align-items: center;
gap: 10px; gap: 10px;
align-items: center;
} }
.msc-status-text { .msc-status-text {
color: #4b5563;
font-size: 13px; font-size: 13px;
color: #4b5563;
} }
.msc-drawer-footer { .msc-drawer-footer {
display: flex; display: flex;
justify-content: flex-end;
gap: 10px; gap: 10px;
justify-content: flex-end;
} }
} }

View File

@@ -1,11 +1,11 @@
.page-member-stored-card { .page-member-stored-card {
.msc-toolbar { .msc-toolbar {
display: flex; display: flex;
align-items: center;
gap: 12px; gap: 12px;
border-radius: 12px; align-items: center;
padding: 12px 14px; padding: 12px 14px;
background: #fff; background: #fff;
border-radius: 12px;
box-shadow: 0 2px 8px rgb(15 23 42 / 7%); box-shadow: 0 2px 8px rgb(15 23 42 / 7%);
} }

View File

@@ -6,23 +6,23 @@
} }
.msc-stat-card { .msc-stat-card {
border-radius: 12px;
padding: 16px 18px; padding: 16px 18px;
background: #fff; background: #fff;
border-radius: 12px;
box-shadow: 0 3px 10px rgb(16 24 40 / 6%); box-shadow: 0 3px 10px rgb(16 24 40 / 6%);
} }
.msc-stat-label { .msc-stat-label {
margin-bottom: 6px; margin-bottom: 6px;
color: #9ca3af;
font-size: 13px; font-size: 13px;
color: #9ca3af;
} }
.msc-stat-value { .msc-stat-value {
color: #0f172a;
font-size: 24px; font-size: 24px;
font-weight: 700; font-weight: 700;
line-height: 1; line-height: 1;
color: #0f172a;
} }
.msc-stat-value.is-orange { .msc-stat-value.is-orange {
@@ -34,11 +34,11 @@
} }
.msc-section-title { .msc-section-title {
border-left: 3px solid #1677ff;
padding-left: 10px; padding-left: 10px;
color: #111827;
font-size: 15px; font-size: 15px;
font-weight: 600; font-weight: 600;
color: #111827;
border-left: 3px solid #1677ff;
} }
.msc-plan-grid { .msc-plan-grid {
@@ -50,16 +50,18 @@
.msc-plan-card { .msc-plan-card {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
border-radius: 12px;
overflow: hidden; overflow: hidden;
background: #fff; background: #fff;
border-radius: 12px;
box-shadow: 0 4px 14px rgb(15 23 42 / 8%); box-shadow: 0 4px 14px rgb(15 23 42 / 8%);
transition: transform 0.2s ease, box-shadow 0.2s ease; transition:
transform 0.2s ease,
box-shadow 0.2s ease;
} }
.msc-plan-card:hover { .msc-plan-card:hover {
transform: translateY(-2px);
box-shadow: 0 10px 20px rgb(15 23 42 / 12%); box-shadow: 0 10px 20px rgb(15 23 42 / 12%);
transform: translateY(-2px);
} }
.msc-plan-card.is-disabled { .msc-plan-card.is-disabled {
@@ -89,12 +91,12 @@
.msc-plan-gift { .msc-plan-gift {
display: inline-flex; display: inline-flex;
align-self: flex-start; align-self: flex-start;
border-radius: 999px;
padding: 3px 10px; padding: 3px 10px;
color: #fff;
font-size: 13px; font-size: 13px;
font-weight: 600; font-weight: 600;
color: #fff;
background: rgb(255 255 255 / 22%); background: rgb(255 255 255 / 22%);
border-radius: 999px;
} }
.msc-plan-arrived { .msc-plan-arrived {
@@ -104,28 +106,28 @@
.msc-plan-card-body { .msc-plan-card-body {
display: flex; display: flex;
justify-content: space-between;
gap: 12px; gap: 12px;
justify-content: space-between;
padding: 14px 20px; padding: 14px 20px;
} }
.msc-plan-meta-item { .msc-plan-meta-item {
color: #9ca3af;
font-size: 12px; font-size: 12px;
color: #9ca3af;
} }
.msc-plan-meta-item span { .msc-plan-meta-item span {
margin-left: 2px; margin-left: 2px;
color: #4b5563;
font-weight: 600; font-weight: 600;
color: #4b5563;
} }
.msc-plan-card-foot { .msc-plan-card-foot {
display: flex; display: flex;
justify-content: space-between;
align-items: center; align-items: center;
border-top: 1px solid #f3f4f6; justify-content: space-between;
padding: 12px 20px 14px; padding: 12px 20px 14px;
border-top: 1px solid #f3f4f6;
} }
.msc-plan-actions { .msc-plan-actions {

View File

@@ -2,11 +2,11 @@
.msc-record-toolbar { .msc-record-toolbar {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
align-items: center;
gap: 12px; gap: 12px;
border-radius: 12px; align-items: center;
padding: 12px 14px; padding: 12px 14px;
background: #fff; background: #fff;
border-radius: 12px;
box-shadow: 0 2px 8px rgb(15 23 42 / 7%); box-shadow: 0 2px 8px rgb(15 23 42 / 7%);
} }
@@ -19,59 +19,59 @@
} }
.msc-record-table-wrap { .msc-record-table-wrap {
border-radius: 12px;
padding: 0; padding: 0;
background: #fff;
box-shadow: 0 4px 14px rgb(15 23 42 / 8%);
overflow: hidden; overflow: hidden;
background: #fff;
border-radius: 12px;
box-shadow: 0 4px 14px rgb(15 23 42 / 8%);
} }
.msc-record-table { .msc-record-table {
.ant-table-thead > tr > th { .ant-table-thead > tr > th {
background: #f8fafc;
color: #475569;
font-size: 13px; font-size: 13px;
font-weight: 600; font-weight: 600;
color: #475569;
background: #f8fafc;
} }
.ant-table-tbody > tr > td { .ant-table-tbody > tr > td {
color: #111827;
font-size: 13px; font-size: 13px;
vertical-align: middle; vertical-align: middle;
color: #111827;
} }
} }
.msc-record-no { .msc-record-no {
color: #334155;
font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
font-size: 12px; font-size: 12px;
color: #334155;
} }
.msc-record-member { .msc-record-member {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
line-height: 1.2;
gap: 2px; gap: 2px;
line-height: 1.2;
} }
.msc-record-member-name { .msc-record-member-name {
color: #111827;
font-weight: 600; font-weight: 600;
color: #111827;
} }
.msc-record-member-phone { .msc-record-member-phone {
color: #94a3b8;
font-size: 12px; font-size: 12px;
color: #94a3b8;
} }
.msc-record-amount { .msc-record-amount {
color: #111827;
font-weight: 600; font-weight: 600;
color: #111827;
} }
.msc-record-amount.is-gift { .msc-record-amount.is-gift {
color: #f59e0b;
font-weight: 500; font-weight: 500;
color: #f59e0b;
} }
.msc-pagination { .msc-pagination {