feat(store): benefit coupon usage rules and show env photos on store detail
CI / verify (pull_request) Has been cancelled
CI / verify (pull_request) Has been cancelled
Add benefitUsageRule on store create/edit (HQ + partner) and C-end detail between intro and env gallery. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -14,6 +14,7 @@ export type StoreCreateForm = {
|
|||||||
latitude?: number | null;
|
latitude?: number | null;
|
||||||
longitude?: number | null;
|
longitude?: number | null;
|
||||||
intro?: string;
|
intro?: string;
|
||||||
|
benefitUsageRule?: string;
|
||||||
openTime?: string;
|
openTime?: string;
|
||||||
closeTime?: string;
|
closeTime?: string;
|
||||||
openTime2?: string;
|
openTime2?: string;
|
||||||
@@ -48,6 +49,7 @@ export function validateStoreCreateStep1(
|
|||||||
| 'phone'
|
| 'phone'
|
||||||
| 'address'
|
| 'address'
|
||||||
| 'intro'
|
| 'intro'
|
||||||
|
| 'benefitUsageRule'
|
||||||
| 'openTime'
|
| 'openTime'
|
||||||
| 'closeTime'
|
| 'closeTime'
|
||||||
| 'openTime2'
|
| 'openTime2'
|
||||||
@@ -88,6 +90,9 @@ export function validateStoreCreateStep1(
|
|||||||
const len = form.intro.trim().length;
|
const len = form.intro.trim().length;
|
||||||
if (len < 2 || len > 500) return '门店简介须为 2~500 字';
|
if (len < 2 || len > 500) return '门店简介须为 2~500 字';
|
||||||
}
|
}
|
||||||
|
if (form.benefitUsageRule?.trim() && form.benefitUsageRule.trim().length > 1000) {
|
||||||
|
return '好客权益券使用规则最多 1000 字';
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -504,6 +504,7 @@ export default function StoresPage() {
|
|||||||
}
|
}
|
||||||
: {}),
|
: {}),
|
||||||
intro: values.intro?.trim() || undefined,
|
intro: values.intro?.trim() || undefined,
|
||||||
|
benefitUsageRule: values.benefitUsageRule?.trim() || undefined,
|
||||||
openTime: values.openTime?.trim() || '10:00',
|
openTime: values.openTime?.trim() || '10:00',
|
||||||
closeTime: values.closeTime?.trim() || '22:00',
|
closeTime: values.closeTime?.trim() || '22:00',
|
||||||
...(values.openTime2?.trim() && values.closeTime2?.trim()
|
...(values.openTime2?.trim() && values.closeTime2?.trim()
|
||||||
@@ -585,6 +586,7 @@ export default function StoresPage() {
|
|||||||
name: d.name,
|
name: d.name,
|
||||||
phone: d.phone,
|
phone: d.phone,
|
||||||
intro: d.intro,
|
intro: d.intro,
|
||||||
|
benefitUsageRule: d.benefitUsageRule,
|
||||||
coverUrl: d.coverUrl,
|
coverUrl: d.coverUrl,
|
||||||
address: d.address,
|
address: d.address,
|
||||||
district: d.district,
|
district: d.district,
|
||||||
@@ -688,6 +690,7 @@ export default function StoresPage() {
|
|||||||
phone: v.phone,
|
phone: v.phone,
|
||||||
coverUrl: v.coverUrl,
|
coverUrl: v.coverUrl,
|
||||||
intro: v.intro,
|
intro: v.intro,
|
||||||
|
benefitUsageRule: v.benefitUsageRule ?? null,
|
||||||
district: v.district,
|
district: v.district,
|
||||||
address: v.address,
|
address: v.address,
|
||||||
avgPrice: v.avgPrice,
|
avgPrice: v.avgPrice,
|
||||||
@@ -797,7 +800,14 @@ export default function StoresPage() {
|
|||||||
<Form.Item name="coverUrl" label="封面图">
|
<Form.Item name="coverUrl" label="封面图">
|
||||||
<OssUpload bizType="STORE_TITLE" mediaType="IMAGE" />
|
<OssUpload bizType="STORE_TITLE" mediaType="IMAGE" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
<Form.Item name="intro" label="介绍"><Input.TextArea rows={4} /></Form.Item>
|
<Form.Item name="intro" label="介绍"><Input.TextArea rows={4} showCount maxLength={500} /></Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
name="benefitUsageRule"
|
||||||
|
label="好客权益券使用规则"
|
||||||
|
extra="展示在用户端门店详情「门店详情」下方"
|
||||||
|
>
|
||||||
|
<Input.TextArea rows={4} placeholder="选填,最多1000字" showCount maxLength={1000} />
|
||||||
|
</Form.Item>
|
||||||
<Form.Item name="district" label="区县"><Input /></Form.Item>
|
<Form.Item name="district" label="区县"><Input /></Form.Item>
|
||||||
<Form.Item name="address" label="详细地址"><Input /></Form.Item>
|
<Form.Item name="address" label="详细地址"><Input /></Form.Item>
|
||||||
<Space wrap style={{ width: '100%' }}>
|
<Space wrap style={{ width: '100%' }}>
|
||||||
@@ -1031,6 +1041,13 @@ export default function StoresPage() {
|
|||||||
<Form.Item name="intro" label="门店简介">
|
<Form.Item name="intro" label="门店简介">
|
||||||
<Input.TextArea rows={3} placeholder="选填,2~500字" showCount maxLength={500} />
|
<Input.TextArea rows={3} placeholder="选填,2~500字" showCount maxLength={500} />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
name="benefitUsageRule"
|
||||||
|
label="好客权益券使用规则"
|
||||||
|
extra="展示在用户端门店详情"
|
||||||
|
>
|
||||||
|
<Input.TextArea rows={3} placeholder="选填,最多1000字" showCount maxLength={1000} />
|
||||||
|
</Form.Item>
|
||||||
</div>
|
</div>
|
||||||
<div style={{ display: createStep === 1 ? 'block' : 'none' }}>
|
<div style={{ display: createStep === 1 ? 'block' : 'none' }}>
|
||||||
<Typography.Paragraph type="secondary">
|
<Typography.Paragraph type="secondary">
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ export type StoreDraftForm = {
|
|||||||
categoryParentId: string;
|
categoryParentId: string;
|
||||||
categoryId: string;
|
categoryId: string;
|
||||||
intro: string;
|
intro: string;
|
||||||
|
/** 好客权益券使用规则 */
|
||||||
|
benefitUsageRule: string;
|
||||||
coverUrl: string;
|
coverUrl: string;
|
||||||
envPhotoUrls: string[];
|
envPhotoUrls: string[];
|
||||||
contractUrl: string;
|
contractUrl: string;
|
||||||
@@ -61,6 +63,7 @@ export const defaultStoreForm = (): StoreDraftForm => ({
|
|||||||
categoryParentId: '',
|
categoryParentId: '',
|
||||||
categoryId: '',
|
categoryId: '',
|
||||||
intro: '',
|
intro: '',
|
||||||
|
benefitUsageRule: '',
|
||||||
coverUrl: '',
|
coverUrl: '',
|
||||||
envPhotoUrls: ['', '', ''],
|
envPhotoUrls: ['', '', ''],
|
||||||
contractUrl: '',
|
contractUrl: '',
|
||||||
@@ -155,6 +158,7 @@ export function validateStoreStep1(
|
|||||||
| 'avgPrice'
|
| 'avgPrice'
|
||||||
| 'categoryId'
|
| 'categoryId'
|
||||||
| 'intro'
|
| 'intro'
|
||||||
|
| 'benefitUsageRule'
|
||||||
>,
|
>,
|
||||||
): string | null {
|
): string | null {
|
||||||
if (!form.regionCodes || form.regionCodes.length < 3) return '请选择省 / 市 / 区县';
|
if (!form.regionCodes || form.regionCodes.length < 3) return '请选择省 / 市 / 区县';
|
||||||
@@ -189,6 +193,9 @@ export function validateStoreStep1(
|
|||||||
const len = form.intro.trim().length;
|
const len = form.intro.trim().length;
|
||||||
if (len < 2 || len > 500) return '门店简介须为 2~500 字';
|
if (len < 2 || len > 500) return '门店简介须为 2~500 字';
|
||||||
}
|
}
|
||||||
|
if (form.benefitUsageRule.trim().length > 1000) {
|
||||||
|
return '好客权益券使用规则最多 1000 字';
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -536,6 +536,7 @@ export default function StoreCreatePage() {
|
|||||||
categoryId: form.categoryId.trim(),
|
categoryId: form.categoryId.trim(),
|
||||||
|
|
||||||
intro: form.intro.trim() || undefined,
|
intro: form.intro.trim() || undefined,
|
||||||
|
benefitUsageRule: form.benefitUsageRule.trim() || undefined,
|
||||||
|
|
||||||
coverUrl: form.coverUrl.trim() || undefined,
|
coverUrl: form.coverUrl.trim() || undefined,
|
||||||
|
|
||||||
@@ -936,6 +937,26 @@ export default function StoreCreatePage() {
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div className="partner-field">
|
||||||
|
|
||||||
|
<label>好客权益券使用规则</label>
|
||||||
|
|
||||||
|
<textarea
|
||||||
|
rows={4}
|
||||||
|
placeholder="选填,展示在用户端门店详情,最多1000字"
|
||||||
|
maxLength={1000}
|
||||||
|
value={form.benefitUsageRule}
|
||||||
|
onChange={(e) => patchForm({ benefitUsageRule: e.target.value })}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<div style={{ textAlign: 'right', marginTop: 4 }}>
|
||||||
|
|
||||||
|
<span className="label-md text-muted">{form.benefitUsageRule.length} / 1000</span>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<div className="partner-info-banner">
|
<div className="partner-info-banner">
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ export default function StoreDetailPage() {
|
|||||||
phone: '',
|
phone: '',
|
||||||
address: '',
|
address: '',
|
||||||
intro: '',
|
intro: '',
|
||||||
|
benefitUsageRule: '',
|
||||||
latitude: '',
|
latitude: '',
|
||||||
longitude: '',
|
longitude: '',
|
||||||
});
|
});
|
||||||
@@ -66,6 +67,7 @@ export default function StoreDetailPage() {
|
|||||||
phone: String(data.phone || ''),
|
phone: String(data.phone || ''),
|
||||||
address: String(data.address || ''),
|
address: String(data.address || ''),
|
||||||
intro: String(data.intro || ''),
|
intro: String(data.intro || ''),
|
||||||
|
benefitUsageRule: String(data.benefitUsageRule || ''),
|
||||||
latitude: data.latitude != null && data.latitude !== '' ? String(data.latitude) : '',
|
latitude: data.latitude != null && data.latitude !== '' ? String(data.latitude) : '',
|
||||||
longitude: data.longitude != null && data.longitude !== '' ? String(data.longitude) : '',
|
longitude: data.longitude != null && data.longitude !== '' ? String(data.longitude) : '',
|
||||||
});
|
});
|
||||||
@@ -162,6 +164,7 @@ export default function StoreDetailPage() {
|
|||||||
phone: form.phone.trim(),
|
phone: form.phone.trim(),
|
||||||
address: form.address.trim(),
|
address: form.address.trim(),
|
||||||
intro: form.intro.trim(),
|
intro: form.intro.trim(),
|
||||||
|
benefitUsageRule: form.benefitUsageRule.trim() || null,
|
||||||
...(form.latitude.trim() && form.longitude.trim()
|
...(form.latitude.trim() && form.longitude.trim()
|
||||||
? {
|
? {
|
||||||
latitude: Number(form.latitude),
|
latitude: Number(form.latitude),
|
||||||
@@ -396,6 +399,20 @@ export default function StoreDetailPage() {
|
|||||||
<span className="label-md text-muted">{form.intro.length} / 500</span>
|
<span className="label-md text-muted">{form.intro.length} / 500</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="partner-field">
|
||||||
|
<label>好客权益券使用规则</label>
|
||||||
|
<textarea
|
||||||
|
disabled={readOnly}
|
||||||
|
rows={4}
|
||||||
|
placeholder="选填,展示在用户端门店详情,最多1000字"
|
||||||
|
maxLength={1000}
|
||||||
|
value={form.benefitUsageRule}
|
||||||
|
onChange={(e) => setForm({ ...form, benefitUsageRule: e.target.value })}
|
||||||
|
/>
|
||||||
|
<div style={{ textAlign: 'right', marginTop: 4 }}>
|
||||||
|
<span className="label-md text-muted">{form.benefitUsageRule.length} / 1000</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<section className="partner-form-card" style={{ margin: '0 0 16px' }}>
|
<section className="partner-form-card" style={{ margin: '0 0 16px' }}>
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ type Store = {
|
|||||||
district?: string;
|
district?: string;
|
||||||
phone?: string;
|
phone?: string;
|
||||||
intro?: string | null;
|
intro?: string | null;
|
||||||
|
benefitUsageRule?: string | null;
|
||||||
coverUrl?: string | null;
|
coverUrl?: string | null;
|
||||||
carouselUrls?: string[] | null;
|
carouselUrls?: string[] | null;
|
||||||
media?: StoreMedia[] | null;
|
media?: StoreMedia[] | null;
|
||||||
@@ -173,6 +174,7 @@ export default function StoreDetailPage() {
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
const intro = store.intro?.trim() || '';
|
const intro = store.intro?.trim() || '';
|
||||||
|
const benefitRule = store.benefitUsageRule?.trim() || '';
|
||||||
|
|
||||||
function previewEnv(index: number) {
|
function previewEnv(index: number) {
|
||||||
if (!envPhotos.length) return;
|
if (!envPhotos.length) return;
|
||||||
@@ -248,6 +250,13 @@ export default function StoreDetailPage() {
|
|||||||
</View>
|
</View>
|
||||||
) : null}
|
) : null}
|
||||||
|
|
||||||
|
{benefitRule ? (
|
||||||
|
<View className="store-detail-section">
|
||||||
|
<Text className="store-detail-section-title">好客权益券使用规则</Text>
|
||||||
|
<Text className="store-detail-intro">{benefitRule}</Text>
|
||||||
|
</View>
|
||||||
|
) : null}
|
||||||
|
|
||||||
{envPhotos.length > 0 ? (
|
{envPhotos.length > 0 ? (
|
||||||
<View className="store-detail-section">
|
<View className="store-detail-section">
|
||||||
<Text className="store-detail-section-title">店内环境</Text>
|
<Text className="store-detail-section-title">店内环境</Text>
|
||||||
|
|||||||
@@ -1025,6 +1025,8 @@ model Store {
|
|||||||
latitude Decimal? @db.Decimal(10, 7)
|
latitude Decimal? @db.Decimal(10, 7)
|
||||||
longitude Decimal? @db.Decimal(10, 7)
|
longitude Decimal? @db.Decimal(10, 7)
|
||||||
intro String? @db.Text
|
intro String? @db.Text
|
||||||
|
/** 好客权益券使用规则(C 端门店详情展示) */
|
||||||
|
benefitUsageRule String? @map("benefit_usage_rule") @db.Text
|
||||||
coverResourceId BigInt? @map("cover_resource_id") @db.UnsignedBigInt
|
coverResourceId BigInt? @map("cover_resource_id") @db.UnsignedBigInt
|
||||||
avgPrice Decimal? @map("avg_price") @db.Decimal(10, 2)
|
avgPrice Decimal? @map("avg_price") @db.Decimal(10, 2)
|
||||||
rating Decimal? @db.Decimal(3, 2)
|
rating Decimal? @db.Decimal(3, 2)
|
||||||
|
|||||||
@@ -214,6 +214,9 @@ export class AdminStoresService {
|
|||||||
...(dto.name !== undefined ? { name: dto.name } : {}),
|
...(dto.name !== undefined ? { name: dto.name } : {}),
|
||||||
...(dto.phone !== undefined ? { phone: dto.phone } : {}),
|
...(dto.phone !== undefined ? { phone: dto.phone } : {}),
|
||||||
...(dto.intro !== undefined ? { intro: dto.intro } : {}),
|
...(dto.intro !== undefined ? { intro: dto.intro } : {}),
|
||||||
|
...(dto.benefitUsageRule !== undefined
|
||||||
|
? { benefitUsageRule: String(dto.benefitUsageRule).trim() || null }
|
||||||
|
: {}),
|
||||||
...(dto.address !== undefined ? { address: dto.address } : {}),
|
...(dto.address !== undefined ? { address: dto.address } : {}),
|
||||||
...(dto.district !== undefined ? { district: dto.district } : {}),
|
...(dto.district !== undefined ? { district: dto.district } : {}),
|
||||||
...(dto.settlementRate !== undefined ? { settlementRate: dto.settlementRate } : {}),
|
...(dto.settlementRate !== undefined ? { settlementRate: dto.settlementRate } : {}),
|
||||||
@@ -305,6 +308,15 @@ export class AdminStoresService {
|
|||||||
]);
|
]);
|
||||||
if (!hoursCheck.ok) throw new BadRequestException(hoursCheck.message);
|
if (!hoursCheck.ok) throw new BadRequestException(hoursCheck.message);
|
||||||
|
|
||||||
|
const intro = dto.intro?.trim() || null;
|
||||||
|
if (intro && (intro.length < 2 || intro.length > 500)) {
|
||||||
|
throw new BadRequestException('门店简介须为 2~500 字');
|
||||||
|
}
|
||||||
|
const benefitUsageRule = dto.benefitUsageRule?.trim() || null;
|
||||||
|
if (benefitUsageRule && benefitUsageRule.length > 1000) {
|
||||||
|
throw new BadRequestException('好客权益券使用规则最多 1000 字');
|
||||||
|
}
|
||||||
|
|
||||||
const store = await this.prisma.store.create({
|
const store = await this.prisma.store.create({
|
||||||
data: {
|
data: {
|
||||||
cityId: city.id,
|
cityId: city.id,
|
||||||
@@ -317,7 +329,8 @@ export class AdminStoresService {
|
|||||||
cityName: dto.city ?? city.name,
|
cityName: dto.city ?? city.name,
|
||||||
district: dto.district ?? '',
|
district: dto.district ?? '',
|
||||||
address: dto.address,
|
address: dto.address,
|
||||||
intro: dto.intro ?? null,
|
intro,
|
||||||
|
benefitUsageRule,
|
||||||
avgPrice: dto.avgPrice ?? null,
|
avgPrice: dto.avgPrice ?? null,
|
||||||
openTime,
|
openTime,
|
||||||
closeTime,
|
closeTime,
|
||||||
|
|||||||
@@ -69,6 +69,10 @@ export class CreateStoreDto {
|
|||||||
@IsString()
|
@IsString()
|
||||||
intro?: string;
|
intro?: string;
|
||||||
|
|
||||||
|
@IsOptional()
|
||||||
|
@IsString()
|
||||||
|
benefitUsageRule?: string;
|
||||||
|
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
@IsString()
|
@IsString()
|
||||||
coverUrl?: string;
|
coverUrl?: string;
|
||||||
@@ -138,6 +142,10 @@ export class UpdateStoreDto {
|
|||||||
@IsString()
|
@IsString()
|
||||||
intro?: string;
|
intro?: string;
|
||||||
|
|
||||||
|
@IsOptional()
|
||||||
|
@IsString()
|
||||||
|
benefitUsageRule?: string;
|
||||||
|
|
||||||
@IsOptional()
|
@IsOptional()
|
||||||
@IsString()
|
@IsString()
|
||||||
coverUrl?: string;
|
coverUrl?: string;
|
||||||
|
|||||||
@@ -304,6 +304,11 @@ export class StoreService {
|
|||||||
if (introRaw && (introRaw.length < 2 || introRaw.length > 500)) {
|
if (introRaw && (introRaw.length < 2 || introRaw.length > 500)) {
|
||||||
throw new BadRequestException('门店简介须为 2~500 字');
|
throw new BadRequestException('门店简介须为 2~500 字');
|
||||||
}
|
}
|
||||||
|
const benefitUsageRuleRaw =
|
||||||
|
body.benefitUsageRule != null ? String(body.benefitUsageRule).trim() : '';
|
||||||
|
if (benefitUsageRuleRaw.length > 1000) {
|
||||||
|
throw new BadRequestException('好客权益券使用规则最多 1000 字');
|
||||||
|
}
|
||||||
|
|
||||||
const latitude = parseOptionalCoord(body.latitude, 'lat');
|
const latitude = parseOptionalCoord(body.latitude, 'lat');
|
||||||
const longitude = parseOptionalCoord(body.longitude, 'lng');
|
const longitude = parseOptionalCoord(body.longitude, 'lng');
|
||||||
@@ -323,6 +328,7 @@ export class StoreService {
|
|||||||
district: String(body.district ?? ''),
|
district: String(body.district ?? ''),
|
||||||
address: String(body.address),
|
address: String(body.address),
|
||||||
intro: introRaw || null,
|
intro: introRaw || null,
|
||||||
|
benefitUsageRule: benefitUsageRuleRaw || null,
|
||||||
avgPrice: avgPriceRaw,
|
avgPrice: avgPriceRaw,
|
||||||
openTime,
|
openTime,
|
||||||
closeTime,
|
closeTime,
|
||||||
@@ -518,6 +524,8 @@ export class StoreService {
|
|||||||
const phone = body.phone !== undefined ? String(body.phone).trim() : undefined;
|
const phone = body.phone !== undefined ? String(body.phone).trim() : undefined;
|
||||||
const address = body.address !== undefined ? String(body.address).trim() : undefined;
|
const address = body.address !== undefined ? String(body.address).trim() : undefined;
|
||||||
const introRaw = body.intro !== undefined ? String(body.intro).trim() : undefined;
|
const introRaw = body.intro !== undefined ? String(body.intro).trim() : undefined;
|
||||||
|
const benefitUsageRuleRaw =
|
||||||
|
body.benefitUsageRule !== undefined ? String(body.benefitUsageRule).trim() : undefined;
|
||||||
const latitude =
|
const latitude =
|
||||||
body.latitude !== undefined ? parseOptionalCoord(body.latitude, 'lat') : undefined;
|
body.latitude !== undefined ? parseOptionalCoord(body.latitude, 'lat') : undefined;
|
||||||
const longitude =
|
const longitude =
|
||||||
@@ -531,6 +539,9 @@ export class StoreService {
|
|||||||
if (introRaw && (introRaw.length < 2 || introRaw.length > 500)) {
|
if (introRaw && (introRaw.length < 2 || introRaw.length > 500)) {
|
||||||
throw new BadRequestException('门店简介须为 2~500 字');
|
throw new BadRequestException('门店简介须为 2~500 字');
|
||||||
}
|
}
|
||||||
|
if (benefitUsageRuleRaw !== undefined && benefitUsageRuleRaw.length > 1000) {
|
||||||
|
throw new BadRequestException('好客权益券使用规则最多 1000 字');
|
||||||
|
}
|
||||||
if (
|
if (
|
||||||
(latitude !== undefined || longitude !== undefined) &&
|
(latitude !== undefined || longitude !== undefined) &&
|
||||||
(latitude == null || longitude == null)
|
(latitude == null || longitude == null)
|
||||||
@@ -552,6 +563,9 @@ export class StoreService {
|
|||||||
: {}),
|
: {}),
|
||||||
...(hasCoordsUpdate ? { latitude, longitude } : {}),
|
...(hasCoordsUpdate ? { latitude, longitude } : {}),
|
||||||
...(introRaw !== undefined ? { intro: introRaw || null } : {}),
|
...(introRaw !== undefined ? { intro: introRaw || null } : {}),
|
||||||
|
...(benefitUsageRuleRaw !== undefined
|
||||||
|
? { benefitUsageRule: benefitUsageRuleRaw || null }
|
||||||
|
: {}),
|
||||||
...(resubmitAudit
|
...(resubmitAudit
|
||||||
? {
|
? {
|
||||||
auditStatus: 'PENDING' as const,
|
auditStatus: 'PENDING' as const,
|
||||||
|
|||||||
Reference in New Issue
Block a user