export type FieldValueType = 'string' | 'number' | 'boolean' | 'datetime' /** 表分类:key 为库表名,label 为中文 */ export const ORDER_TABLE_CATEGORIES: { key: string; label: string }[] = [ { key: 't_order', label: '订单' }, { key: 't_order_recipient', label: '收件人' }, { key: 't_order_sender', label: '发件人' }, { key: 't_order_declaration', label: '申报' }, { key: 't_order_weight', label: '件重尺' }, { key: 't_order_fee', label: '费用' }, { key: 't_customer', label: '客户' }, { key: '_virtual', label: '常用' }, ] export type OrderTableFieldDef = { table: string field: string /** 公式与按钮上使用的中文名称(唯一) */ label: string valueType: FieldValueType } export type FormulaFieldRef = { table: string field: string /** 非库表字段(如单件最大长度) */ virtual?: boolean } /** 中文名称 → 库表字段映射(后端解析公式时使用) */ export const FORMULA_LABEL_TO_REF: Record = {} function registerRef(label: string, ref: FormulaFieldRef) { FORMULA_LABEL_TO_REF[label] = ref } function fieldRef(table: string, field: string): FormulaFieldRef { return { table, field } } function virtualRef(field: string): FormulaFieldRef { return { table: '_virtual', field, virtual: true } } /** * 订单及关联表字段中文映射(label 唯一)。 * 不含 IsDeleted / CreateUserId / CreateTime / UpdateUserId / UpdateTime。 */ export const ORDER_TABLE_FIELDS: OrderTableFieldDef[] = [ // —— t_order —— { table: 't_order', field: 'RequestId', label: '请求标识', valueType: 'string' }, { table: 't_order', field: 'ServiceNo', label: '运单号', valueType: 'string' }, { table: 't_order', field: 'ClientNo', label: '客户单号', valueType: 'string' }, { table: 't_order', field: 'TrackNo', label: '跟踪号', valueType: 'string' }, { table: 't_order', field: 'ProductCode', label: '销售产品', valueType: 'string' }, { table: 't_order', field: 'ChannelCode', label: '收货渠道', valueType: 'string' }, { table: 't_order', field: 'DownstreamSupplierCode', label: '下游服务商', valueType: 'string' }, { table: 't_order', field: 'DownstreamAppKey', label: '下游AppKey', valueType: 'string' }, { table: 't_order', field: 'DownstreamAppId', label: '下游AppId', valueType: 'number' }, { table: 't_order', field: 'ChannelForecastCode', label: '渠道预报编码', valueType: 'string' }, { table: 't_order', field: 'ConsigneeCountry', label: '国家', valueType: 'string' }, { table: 't_order', field: 'ConsigneeCountryName', label: '收件国家名称', valueType: 'string' }, { table: 't_order', field: 'CargoAttribute', label: '货物属性', valueType: 'string' }, { table: 't_order', field: 'ExportCustomsMode', label: '出口报关方式', valueType: 'string' }, { table: 't_order', field: 'PredeclareFailReason', label: '预报失败原因', valueType: 'string' }, { table: 't_order', field: 'SalesProductRulesVersion', label: '规则版本号', valueType: 'string' }, { table: 't_order', field: 'SalesProductPriceVersion', label: '价格版本号', valueType: 'string' }, { table: 't_order', field: 'OrderStatus', label: '订单状态', valueType: 'string' }, { table: 't_order', field: 'HandleStatus', label: '处理子状态', valueType: 'string' }, { table: 't_order', field: 'IssueType', label: '问题类型', valueType: 'string' }, { table: 't_order', field: 'IssueTitle', label: '问题标题', valueType: 'string' }, { table: 't_order', field: 'IssueContent', label: '问题内容', valueType: 'string' }, { table: 't_order', field: 'IssueTemplateId', label: '问题模板', valueType: 'number' }, { table: 't_order', field: 'IssueRemark', label: '问题备注', valueType: 'string' }, { table: 't_order', field: 'IssueTime', label: '问题件时间', valueType: 'datetime' }, { table: 't_order', field: 'ClaimType', label: '理赔类型', valueType: 'string' }, { table: 't_order', field: 'ClaimAmount', label: '索赔金额', valueType: 'number' }, { table: 't_order', field: 'ClaimCurrency', label: '索赔币种', valueType: 'string' }, { table: 't_order', field: 'ClaimReason', label: '理赔原因', valueType: 'string' }, { table: 't_order', field: 'ClaimTime', label: '理赔时间', valueType: 'datetime' }, { table: 't_order', field: 'PreviousOrderStatus', label: '异常前状态', valueType: 'string' }, { table: 't_order', field: 'WarehouseId', label: '仓库', valueType: 'number' }, { table: 't_order', field: 'CustomerId', label: '订单客户', valueType: 'number' }, { table: 't_order', field: 'OrganizationId', label: '组织', valueType: 'string' }, { table: 't_order', field: 'SecretLevel', label: '密级', valueType: 'number' }, { table: 't_order', field: 'SenderId', label: '发件人关联', valueType: 'number' }, { table: 't_order', field: 'RecipientId', label: '收件人关联', valueType: 'number' }, { table: 't_order', field: 'DeclarationId', label: '申报关联', valueType: 'number' }, { table: 't_order', field: 'ReceiveTime', label: '收货时间', valueType: 'datetime' }, { table: 't_order', field: 'ShipTime', label: '发货时间', valueType: 'datetime' }, { table: 't_order', field: 'PayTime', label: '支付时间', valueType: 'datetime' }, { table: 't_order', field: 'IsPaid', label: '是否已支付', valueType: 'boolean' }, { table: 't_order', field: 'SignTime', label: '签收时间', valueType: 'datetime' }, { table: 't_order', field: 'IsCod', label: '是否COD', valueType: 'boolean' }, { table: 't_order', field: 'CodCurrency', label: 'COD币种', valueType: 'string' }, { table: 't_order', field: 'CodSum', label: 'COD金额', valueType: 'number' }, { table: 't_order', field: 'DeclaredCurrency', label: '申报币种', valueType: 'string' }, { table: 't_order', field: 'DeclaredSum', label: '申报总金额', valueType: 'number' }, { table: 't_order', field: 'Quantity', label: '订单件数', valueType: 'number' }, { table: 't_order', field: 'IsIntercept', label: '是否拦截', valueType: 'boolean' }, { table: 't_order', field: 'IsRemote', label: '是否偏远', valueType: 'boolean' }, // —— t_order_recipient —— { table: 't_order_recipient', field: 'RecipientsName', label: '收件人姓名', valueType: 'string' }, { table: 't_order_recipient', field: 'CompanyName', label: '收件人公司', valueType: 'string' }, { table: 't_order_recipient', field: 'Country', label: '收件人国家', valueType: 'number' }, { table: 't_order_recipient', field: 'Phone', label: '收件人手机', valueType: 'string' }, { table: 't_order_recipient', field: 'TelePhone', label: '收件人电话', valueType: 'string' }, { table: 't_order_recipient', field: 'ZipCode', label: '收件人邮编', valueType: 'string' }, { table: 't_order_recipient', field: 'Province', label: '收件人省州', valueType: 'string' }, { table: 't_order_recipient', field: 'City', label: '收件人城市', valueType: 'string' }, { table: 't_order_recipient', field: 'StreetNumber', label: '收件人门牌号', valueType: 'string' }, { table: 't_order_recipient', field: 'StreetAddress1', label: '收件人地址1', valueType: 'string' }, { table: 't_order_recipient', field: 'StreetAddress2', label: '收件人地址2', valueType: 'string' }, { table: 't_order_recipient', field: 'StreetAddress3', label: '收件人地址3', valueType: 'string' }, { table: 't_order_recipient', field: 'Email', label: '收件人邮箱', valueType: 'string' }, { table: 't_order_recipient', field: 'TaxType', label: '收件人税号类型', valueType: 'number' }, { table: 't_order_recipient', field: 'TaxNo', label: '收件人税号', valueType: 'string' }, { table: 't_order_recipient', field: 'CertificateType', label: '收件人证件类型', valueType: 'number' }, { table: 't_order_recipient', field: 'CertificateNo', label: '收件人证件号', valueType: 'string' }, { table: 't_order_recipient', field: 'Eori', label: '收件人EORI', valueType: 'string' }, { table: 't_order_recipient', field: 'Vat', label: '收件人VAT', valueType: 'string' }, // —— t_order_sender —— { table: 't_order_sender', field: 'SenderName', label: '发件人姓名', valueType: 'string' }, { table: 't_order_sender', field: 'Company', label: '发件人公司', valueType: 'string' }, { table: 't_order_sender', field: 'Country', label: '发件人国家', valueType: 'number' }, { table: 't_order_sender', field: 'Province', label: '发件人省州', valueType: 'string' }, { table: 't_order_sender', field: 'City', label: '发件人城市', valueType: 'string' }, { table: 't_order_sender', field: 'ZipCode', label: '发件人邮编', valueType: 'string' }, { table: 't_order_sender', field: 'StreetAddress1', label: '发件人地址1', valueType: 'string' }, { table: 't_order_sender', field: 'StreetAddress2', label: '发件人地址2', valueType: 'string' }, { table: 't_order_sender', field: 'StreetAddress3', label: '发件人地址3', valueType: 'string' }, { table: 't_order_sender', field: 'HouseNumber', label: '发件人门牌号', valueType: 'string' }, { table: 't_order_sender', field: 'Phone', label: '发件人手机', valueType: 'string' }, { table: 't_order_sender', field: 'TelePhone', label: '发件人电话', valueType: 'string' }, { table: 't_order_sender', field: 'Email', label: '发件人邮箱', valueType: 'string' }, { table: 't_order_sender', field: 'IsDefault', label: '发件人是否默认', valueType: 'boolean' }, // —— t_order_declaration —— { table: 't_order_declaration', field: 'CnName', label: '中文品名', valueType: 'string' }, { table: 't_order_declaration', field: 'EnName', label: '英文品名', valueType: 'string' }, { table: 't_order_declaration', field: 'Sku', label: 'SKU', valueType: 'string' }, { table: 't_order_declaration', field: 'Unit', label: '申报单位', valueType: 'string' }, { table: 't_order_declaration', field: 'UnitPrice', label: '申报单价', valueType: 'number' }, { table: 't_order_declaration', field: 'UnitWeight', label: '申报单重', valueType: 'number' }, { table: 't_order_declaration', field: 'Quantity', label: '申报数量', valueType: 'number' }, { table: 't_order_declaration', field: 'Amount', label: '申报金额', valueType: 'number' }, { table: 't_order_declaration', field: 'Weight', label: '申报总重', valueType: 'number' }, { table: 't_order_declaration', field: 'HsCode', label: 'HS编码', valueType: 'string' }, { table: 't_order_declaration', field: 'ImHsCode', label: '进口HS编码', valueType: 'string' }, { table: 't_order_declaration', field: 'ExHsCode', label: '出口HS编码', valueType: 'string' }, { table: 't_order_declaration', field: 'Category', label: '申报类别', valueType: 'string' }, { table: 't_order_declaration', field: 'Brand', label: '品牌', valueType: 'string' }, { table: 't_order_declaration', field: 'BrandType', label: '品牌类型', valueType: 'string' }, { table: 't_order_declaration', field: 'IsMagnetic', label: '是否带磁带电', valueType: 'boolean' }, { table: 't_order_declaration', field: 'Distribution', label: '配货信息', valueType: 'string' }, { table: 't_order_declaration', field: 'Material', label: '材质', valueType: 'string' }, { table: 't_order_declaration', field: 'EnMaterial', label: '英文材质', valueType: 'string' }, { table: 't_order_declaration', field: 'Purpose', label: '用途', valueType: 'string' }, { table: 't_order_declaration', field: 'Attributes', label: '申报属性', valueType: 'string' }, { table: 't_order_declaration', field: 'OriginCountry', label: '原产国', valueType: 'string' }, { table: 't_order_declaration', field: 'SalesLink', label: '销售链接', valueType: 'string' }, { table: 't_order_declaration', field: 'Model', label: '型号', valueType: 'string' }, { table: 't_order_declaration', field: 'Specifications', label: '规格', valueType: 'string' }, { table: 't_order_declaration', field: 'Comment', label: '申报备注', valueType: 'string' }, // —— t_order_weight —— { table: 't_order_weight', field: 'Type', label: '件重尺类型', valueType: 'string' }, { table: 't_order_weight', field: 'Length', label: '长度', valueType: 'number' }, { table: 't_order_weight', field: 'Width', label: '宽度', valueType: 'number' }, { table: 't_order_weight', field: 'Height', label: '高度', valueType: 'number' }, { table: 't_order_weight', field: 'ActualWeight', label: '实重', valueType: 'number' }, { table: 't_order_weight', field: 'VolumetricWeight', label: '体积重', valueType: 'number' }, { table: 't_order_weight', field: 'ChargeableWeight', label: '计费重', valueType: 'number' }, { table: 't_order_weight', field: 'Cubic', label: '体积', valueType: 'number' }, // —— t_order_fee —— { table: 't_order_fee', field: 'Type', label: '费用类型', valueType: 'string' }, { table: 't_order_fee', field: 'CostItem', label: '费用项', valueType: 'string' }, { table: 't_order_fee', field: 'Amount', label: '费用金额', valueType: 'number' }, { table: 't_order_fee', field: 'Currency', label: '费用币种', valueType: 'string' }, { table: 't_order_fee', field: 'DownstreamProvider', label: '费用下游服务商', valueType: 'string' }, { table: 't_order_fee', field: 'PriceNo', label: '价格编号', valueType: 'string' }, { table: 't_order_fee', field: 'PriceEffectiveTime', label: '价格生效时间', valueType: 'datetime' }, { table: 't_order_fee', field: 'ChargingStage', label: '计费阶段', valueType: 'string' }, // —— t_customer —— { table: 't_customer', field: 'CustomerCode', label: '客户编码', valueType: 'string' }, { table: 't_customer', field: 'CustomerName', label: '客户', valueType: 'string' }, { table: 't_customer', field: 'Email', label: '客户邮箱', valueType: 'string' }, { table: 't_customer', field: 'Phone', label: '客户手机', valueType: 'string' }, { table: 't_customer', field: 'Balance', label: '客户余额', valueType: 'number' }, { table: 't_customer', field: 'TotalQuota', label: '客户总额度', valueType: 'number' }, { table: 't_customer', field: 'UsedQuota', label: '客户已用额度', valueType: 'number' }, { table: 't_customer', field: 'Status', label: '客户状态', valueType: 'string' }, { table: 't_customer', field: 'Remark', label: '客户备注', valueType: 'string' }, { table: 't_customer', field: 'Salesman', label: '销售', valueType: 'string' }, { table: 't_customer', field: 'CustomerService', label: '客服', valueType: 'string' }, { table: 't_customer', field: 'CustomerGroup', label: '客户组', valueType: 'string' }, ] /** 虚拟/聚合字段(无直接库表列,后端按中文名解析) */ export const VIRTUAL_FORMULA_FIELDS: OrderTableFieldDef[] = [ { table: '_virtual', field: 'PieceMaxLength', label: '单件最大长度', valueType: 'number' }, { table: '_virtual', field: 'PieceMaxWidth', label: '单件最大宽度', valueType: 'number' }, { table: '_virtual', field: 'PieceMaxHeight', label: '单件最大高度', valueType: 'number' }, { table: '_virtual', field: 'PieceSumLwh', label: '单件长宽高之和', valueType: 'number' }, ] export type FormulaChip = { table: string /** 按钮展示中文名 */ label: string /** 插入公式片段(中文) */ insert: string /** 悬停提示:映射库表字段 */ refHint: string } function buildInsert(def: OrderTableFieldDef): string { if (def.valueType === 'string' || def.valueType === 'datetime') { return `${def.label}包含('')` } if (def.valueType === 'boolean') { return `${def.label}()==1` } return `${def.label}()` } function buildRefHint(def: OrderTableFieldDef): string { if (def.table === '_virtual') { return `虚拟字段 · ${def.field}` } return `${def.table}.${def.field}` } function buildChipsFromFields(fields: OrderTableFieldDef[]): FormulaChip[] { return fields.map((def) => { registerRef( def.label, def.table === '_virtual' ? virtualRef(def.field) : fieldRef(def.table, def.field) ) return { table: def.table, label: def.label, insert: buildInsert(def), refHint: buildRefHint(def), } }) } export const FORMULA_CHIPS: FormulaChip[] = buildChipsFromFields([ ...ORDER_TABLE_FIELDS, ...VIRTUAL_FORMULA_FIELDS, ]) export type FormulaOperator = { label: string insert: string } export const FORMULA_OPERATORS: FormulaOperator[] = [ { label: '+', insert: '+' }, { label: '-', insert: '-' }, { label: '×', insert: '*' }, { label: '÷', insert: '/' }, { label: '=', insert: '==' }, { label: '≠', insert: '!=' }, { label: '≥', insert: '>=' }, { label: '>', insert: '>' }, { label: '≤', insert: '<=' }, { label: '<', insert: '<' }, { label: '(', insert: '(' }, { label: ')', insert: ')' }, { label: '非', insert: '!' }, { label: '与', insert: '&&' }, { label: '或', insert: '||' }, ] /** 超尺寸示例(中文字段名,与运营习惯一致) */ export const OVERSIZE_EXAMPLE_FORMULA = "(单件最大长度()>60||单件最大宽度()>46||((单件最大长度()+单件最大宽度()+单件最大高度())>150))&&国家包含('GB')&&客户包含('阿里国际站/深圳一达通')&&!销售产品包含('EX_ASP_HKDHL_YD')" export const FORMULA_MAX_LENGTH = 10000 export const TIMING_SAVE_LABEL: Record = { forecast: '预报', order_create: '下单', inbound: '入库', outbound: '出库', } export const OPERATION_SAVE_LABEL: Record = { intercept: '拦截', warn: '警告', problem: '问题件', } export function chipsByTable(table: string): FormulaChip[] { return FORMULA_CHIPS.filter((c) => c.table === table) } export function resolveFormulaLabel(label: string): FormulaFieldRef | undefined { return FORMULA_LABEL_TO_REF[label] } export function getDbFieldPath(label: string): string { const ref = resolveFormulaLabel(label) if (!ref) return label if (ref.virtual) return ref.field return `${ref.table}.${ref.field}` }