| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- // 规则组数据 store(demo 用,刷新后重置为初始种子数据)
- import Vue from 'vue'
- const now = () => {
- const d = new Date()
- const pad = (n) => String(n).padStart(2, '0')
- return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}`
- }
- const state = Vue.observable({
- list: [
- {
- id: 'RG20260401001',
- name: '层层礼-借记卡新客圈选',
- type: 'debitCard',
- logic: 'AND',
- description: '2025/9/30 前开户 + MSC 属于卓越/运筹 + TRB < 50万',
- status: 'online',
- creator: '张运营',
- createdAt: '2026-04-01 09:15:30',
- updater: '王审核',
- updatedAt: '2026-04-05 11:20:18',
- rules: [
- {
- id: 'r1',
- metaCode: '001',
- ruleName: '层层礼开户时间',
- config: { accountType: 'I', operator: '<', date: '2025-09-30' }
- },
- {
- id: 'r2',
- metaCode: '010',
- ruleName: '层层礼,MSC',
- config: { operator: 'in', values: ['premier', 'advance'] }
- },
- {
- id: 'r3',
- metaCode: '050',
- ruleName: 'TRB值不含家庭账户余额(连续3个月达标)',
- config: { month: '2025-12', nm: { n: 3, m: 6 }, operator: '<', amount: 500000 }
- },
- {
- id: 'r4',
- metaCode: '051',
- ruleName: '2025年12月月末余额(连续3个月达标)',
- config: { month: '2025-12', nm: { n: 3, m: 6 }, operator: '<', amount: 500000 }
- }
- ]
- },
- {
- id: 'RG20260410002',
- name: '信用卡-高净值持卡客户',
- type: 'creditCard',
- logic: 'AND',
- description: 'MSC 属于卓越/尊尚 且 月末余额 ≥ 100 万',
- status: 'online',
- creator: '李产品',
- createdAt: '2026-04-10 16:55:02',
- updater: '李产品',
- updatedAt: '2026-04-10 16:55:02',
- rules: [
- {
- id: 'r1',
- metaCode: '010',
- ruleName: '信用卡MSC',
- config: { operator: 'in', values: ['premier', 'excellence'] }
- },
- {
- id: 'r2',
- metaCode: '051',
- ruleName: '月末余额 ≥ 100万',
- config: { month: '2026-03', nm: { n: 3, m: 6 }, operator: '>=', amount: 1000000 }
- }
- ]
- },
- {
- id: 'RG20260420003',
- name: '借记卡-跨境候选客群',
- type: 'debitCard',
- logic: 'OR',
- description: 'TRB ≥ 50 万 或 月末余额 ≥ 50 万',
- status: 'draft',
- creator: '赵市场',
- createdAt: '2026-04-20 11:48:33',
- updater: '赵市场',
- updatedAt: '2026-04-25 09:30:01',
- rules: [
- {
- id: 'r1',
- metaCode: '050',
- ruleName: 'TRB ≥ 50万',
- config: { month: '2026-04', nm: { n: 1, m: 1 }, operator: '>=', amount: 500000 }
- }
- ]
- }
- ]
- })
- let seq = state.list.length + 1
- function genId() {
- const d = new Date()
- const pad = (n) => String(n).padStart(2, '0')
- const stamp = `${d.getFullYear()}${pad(d.getMonth() + 1)}${pad(d.getDate())}`
- return `RG${stamp}${String(seq++).padStart(3, '0')}`
- }
- export default {
- get list() {
- return state.list
- },
- query({ id = '', name = '', type = '' } = {}) {
- return state.list.filter((t) => {
- if (id && !t.id.includes(id)) return false
- if (name && !t.name.includes(name)) return false
- if (type && t.type !== type) return false
- return true
- })
- },
- getById(id) {
- return state.list.find((t) => t.id === id)
- },
- create(payload) {
- const record = {
- id: genId(),
- name: payload.name,
- type: payload.type,
- logic: payload.logic || 'AND',
- description: payload.description || '',
- status: 'draft',
- creator: '当前用户',
- createdAt: now(),
- updater: '当前用户',
- updatedAt: now(),
- rules: payload.rules || []
- }
- state.list.unshift(record)
- return record
- },
- update(id, payload) {
- const target = state.list.find((t) => t.id === id)
- if (!target) return null
- target.name = payload.name
- target.type = payload.type
- target.logic = payload.logic || 'AND'
- target.description = payload.description || ''
- target.rules = payload.rules || []
- target.updater = '当前用户'
- target.updatedAt = now()
- return target
- },
- remove(id) {
- const idx = state.list.findIndex((t) => t.id === id)
- if (idx >= 0) state.list.splice(idx, 1)
- },
- publish(id) {
- const target = state.list.find((t) => t.id === id)
- if (!target) return
- target.status = 'online'
- target.updater = '当前用户'
- target.updatedAt = now()
- }
- }
|