@@ -32,6 +32,34 @@ export const STORE_INFO_CHANGEABLE_FIELDS = [
|
||||
|
||||
export type StoreInfoChangeableField = (typeof STORE_INFO_CHANGEABLE_FIELDS)[number];
|
||||
|
||||
/** 可变字段中文名(企微推送 / HQ 审核列表共用) */
|
||||
export const STORE_INFO_CHANGEABLE_FIELD_LABELS: Record<StoreInfoChangeableField, string> = {
|
||||
name: '门店名称',
|
||||
contactPhone: '联系电话',
|
||||
address: '详细地址',
|
||||
intro: '门店简介',
|
||||
benefitUsageRule: '权益券使用规则',
|
||||
latitude: '纬度',
|
||||
longitude: '经度',
|
||||
openTime: '营业开始',
|
||||
closeTime: '营业结束',
|
||||
openTime2: '第二段开始',
|
||||
closeTime2: '第二段结束',
|
||||
avgPrice: '人均费用',
|
||||
coverUrl: '门头照',
|
||||
envPhotoUrls: '环境照片',
|
||||
};
|
||||
|
||||
/** 将字段 key 列表格式化为中文,如「门店名称、详细地址」 */
|
||||
export function formatStoreInfoChangeFieldLabels(
|
||||
fields: readonly string[],
|
||||
separator = '、',
|
||||
): string {
|
||||
return fields
|
||||
.map((f) => STORE_INFO_CHANGEABLE_FIELD_LABELS[f as StoreInfoChangeableField] ?? f)
|
||||
.join(separator);
|
||||
}
|
||||
|
||||
/** 单条记录的字段详情(用于审核页 diff 对比) */
|
||||
export interface StoreInfoChangeFieldDiff {
|
||||
field: StoreInfoChangeableField;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/** 企微群机器人 Webhook · 推送条件(v3.4.11 + v3.5.3 门店审核) */
|
||||
/** 企微群机器人 Webhook · 推送条件(v3.4.11 + v3.5.3 业务通知) */
|
||||
export const WECOM_PUSH_CONDITIONS = [
|
||||
'alert.ops',
|
||||
'support_ticket.created',
|
||||
@@ -9,6 +9,11 @@ export const WECOM_PUSH_CONDITIONS = [
|
||||
'dev_plan.task_dispatch',
|
||||
'store.audit_pending',
|
||||
'store.package_audit_pending',
|
||||
'store.info_change_pending',
|
||||
'store.withdraw_pending',
|
||||
'order.paid',
|
||||
'redeem.success',
|
||||
'invoice.pending',
|
||||
] as const;
|
||||
|
||||
export type WecomPushCondition = (typeof WECOM_PUSH_CONDITIONS)[number];
|
||||
@@ -23,6 +28,11 @@ export const WECOM_PUSH_CONDITION_LABELS: Record<WecomPushCondition, string> = {
|
||||
'dev_plan.task_dispatch': '开发任务评审派发',
|
||||
'store.audit_pending': '门店提交/重提待审',
|
||||
'store.package_audit_pending': '套餐变更待审',
|
||||
'store.info_change_pending': '门店信息变更待审',
|
||||
'store.withdraw_pending': '门店手动提现待审',
|
||||
'order.paid': '订单支付成功',
|
||||
'redeem.success': '门店核销成功',
|
||||
'invoice.pending': '发票申请待开票',
|
||||
};
|
||||
|
||||
export const WECOM_PUSH_CONDITION_GROUPS: Array<{
|
||||
@@ -37,9 +47,25 @@ export const WECOM_PUSH_CONDITION_GROUPS: Array<{
|
||||
},
|
||||
{
|
||||
key: 'pay_redeem',
|
||||
label: '支付与核销',
|
||||
label: '支付与核销异常',
|
||||
conditions: ['alert.pay', 'alert.redeem'],
|
||||
},
|
||||
{
|
||||
key: 'deal_broadcast',
|
||||
label: '成交播报',
|
||||
conditions: ['order.paid', 'redeem.success'],
|
||||
},
|
||||
{
|
||||
key: 'biz_todo',
|
||||
label: '业务待办',
|
||||
conditions: [
|
||||
'store.audit_pending',
|
||||
'store.package_audit_pending',
|
||||
'store.info_change_pending',
|
||||
'store.withdraw_pending',
|
||||
'invoice.pending',
|
||||
],
|
||||
},
|
||||
{
|
||||
key: 'system',
|
||||
label: '系统与结算',
|
||||
@@ -50,11 +76,6 @@ export const WECOM_PUSH_CONDITION_GROUPS: Array<{
|
||||
label: '开发计划',
|
||||
conditions: ['dev_plan.task_dispatch'],
|
||||
},
|
||||
{
|
||||
key: 'store_audit',
|
||||
label: '门店审核',
|
||||
conditions: ['store.audit_pending', 'store.package_audit_pending'],
|
||||
},
|
||||
];
|
||||
|
||||
/** 默认「运营告警」推送条件 */
|
||||
@@ -79,12 +100,114 @@ export const WECOM_PUSH_DEFAULT_STORE_AUDIT_CONDITIONS: WecomPushCondition[] = [
|
||||
'store.package_audit_pending',
|
||||
];
|
||||
|
||||
/** 默认「业务待办通知群」 */
|
||||
export const WECOM_PUSH_DEFAULT_BIZ_TODO_CONDITIONS: WecomPushCondition[] = [
|
||||
'store.audit_pending',
|
||||
'store.package_audit_pending',
|
||||
'store.info_change_pending',
|
||||
'store.withdraw_pending',
|
||||
'invoice.pending',
|
||||
];
|
||||
|
||||
/** 默认「成交播报群」 */
|
||||
export const WECOM_PUSH_DEFAULT_DEAL_BROADCAST_CONDITIONS: WecomPushCondition[] = [
|
||||
'order.paid',
|
||||
'redeem.success',
|
||||
];
|
||||
|
||||
export const WECOM_STORE_AUDIT_PUSH_NAME = '门店审核通知群';
|
||||
export const WECOM_BIZ_TODO_PUSH_NAME = '业务待办通知群';
|
||||
export const WECOM_DEAL_BROADCAST_PUSH_NAME = '成交播报群';
|
||||
|
||||
/** 占位 webhook(未配置真实 key 时禁用,避免误推) */
|
||||
export const WECOM_STORE_AUDIT_PLACEHOLDER_WEBHOOK =
|
||||
'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=PENDING';
|
||||
|
||||
/** 有 HQ 可编辑模板的业务事件(含入驻/套餐,不含 alert.*) */
|
||||
export const WECOM_TEMPLATE_EVENT_KEYS = [
|
||||
'order.paid',
|
||||
'redeem.success',
|
||||
'store.audit_pending',
|
||||
'store.package_audit_pending',
|
||||
'store.info_change_pending',
|
||||
'store.withdraw_pending',
|
||||
'invoice.pending',
|
||||
] as const;
|
||||
|
||||
export type WecomTemplateEventKey = (typeof WECOM_TEMPLATE_EVENT_KEYS)[number];
|
||||
|
||||
export const WECOM_TEMPLATE_EVENT_LABELS: Record<WecomTemplateEventKey, string> = {
|
||||
'order.paid': '订单支付成功',
|
||||
'redeem.success': '门店核销成功',
|
||||
'store.audit_pending': '门店提交/重提待审',
|
||||
'store.package_audit_pending': '套餐变更待审',
|
||||
'store.info_change_pending': '门店信息变更待审',
|
||||
'store.withdraw_pending': '门店手动提现待审',
|
||||
'invoice.pending': '发票申请待开票',
|
||||
};
|
||||
|
||||
/** 各事件可用占位符说明(HQ 模板编辑) */
|
||||
export const WECOM_TEMPLATE_PLACEHOLDERS: Record<WecomTemplateEventKey, string[]> = {
|
||||
'order.paid': ['orderNo', 'payAmount', 'cityName', 'skuSummary', 'phoneMasked', 'time', 'handleUrl', 'handleLabel'],
|
||||
'redeem.success': ['redeemNo', 'amount', 'storeName', 'channel', 'time', 'handleUrl', 'handleLabel'],
|
||||
'store.audit_pending': ['storeName', 'cityName', 'partnerLabel', 'action', 'time', 'handleUrl', 'handleLabel', 'storeId'],
|
||||
'store.package_audit_pending': [
|
||||
'storeName',
|
||||
'cityName',
|
||||
'submitter',
|
||||
'packageCount',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
'requestId',
|
||||
],
|
||||
'store.info_change_pending': [
|
||||
'storeName',
|
||||
'cityName',
|
||||
'submitter',
|
||||
'changedFields',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
'requestId',
|
||||
],
|
||||
'store.withdraw_pending': [
|
||||
'storeName',
|
||||
'withdrawNo',
|
||||
'amount',
|
||||
'payoutCount',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
'storeId',
|
||||
],
|
||||
'invoice.pending': [
|
||||
'invoiceNo',
|
||||
'orderNo',
|
||||
'payAmount',
|
||||
'titleName',
|
||||
'phoneMasked',
|
||||
'time',
|
||||
'handleUrl',
|
||||
'handleLabel',
|
||||
],
|
||||
};
|
||||
|
||||
export type WecomPushTemplateDto = {
|
||||
id: string;
|
||||
eventKey: WecomTemplateEventKey;
|
||||
title: string;
|
||||
body: string;
|
||||
handleLabel: string;
|
||||
updatedAt: string;
|
||||
};
|
||||
|
||||
export type UpdateWecomPushTemplateRequest = {
|
||||
title?: string;
|
||||
body?: string;
|
||||
handleLabel?: string;
|
||||
};
|
||||
|
||||
export function parseWecomPushConditions(
|
||||
raw?: string | string[] | null,
|
||||
): WecomPushCondition[] {
|
||||
|
||||
Reference in New Issue
Block a user