erio
c3a5cc685e
fix(payment): merge supported types badges into provider card top row
2026-04-06 22:09:17 +08:00
erio
c5864f5c19
chore: bump version to 0.1.108.28
2026-04-06 21:50:54 +08:00
erio
6676d1f7ca
feat(payment): auto-fill callback URLs + complete provider config fields
...
- notifyUrl/returnUrl auto-fill with current domain + webhook path on create
- Default paths: /api/v1/payment/webhook/{provider} and /payment/result
- Add missing EasyPay config: cid, cidAlipay, cidWxpay (optional channel IDs)
- Stripe: show webhook URL hint with copyable endpoint below config
- Fields with defaults show placeholder text for reference
- Also apply defaults when switching provider type in dialog
2026-04-06 21:50:54 +08:00
erio
30943a9701
chore: bump version to 0.1.108.27
2026-04-06 21:37:46 +08:00
erio
12369ae821
fix(payment): provider card toggle badges for supported types + strict validation
...
- Replace text "alipay,wxpay" with clickable toggle badges on provider cards
- Badges use same style as dialog; click to enable/disable types via API
- Prevent disabling all types (at least one required)
- Strict create validation: all non-optional config fields must be filled
2026-04-06 21:37:46 +08:00
erio
4a10a31b34
chore: bump version to 0.1.108.26
2026-04-06 21:18:12 +08:00
erio
29c3670c62
fix(payment): remove paymentMode config, rename easypay to 跳转, add validation
...
Backend:
- Remove paymentMode config; determine mode by req.PaymentType directly
(easypay=redirect/submit.php, alipay/wxpay=API/mapi.php)
- EasyPay.SupportedTypes() always returns [easypay, alipay, wxpay]
- Add validateProviderRequest() for create: name, providerKey, supportedTypes required
Frontend:
- Remove paymentMode dropdown from EasyPay config fields
- Show "跳转" label for easypay type in provider supported types toggle
- Add red * to required fields: provider name, provider key, supported types
- Add strict validation in handleSaveProvider before API call
- Add validation i18n keys for zh/en
2026-04-06 21:17:53 +08:00
erio
2f43e5a8fb
fix(payment): redesign provider cards — full-width, inline toggles, greyed-out when type disabled
...
- Provider cards: one per row (full width), remove 2-column grid
- Add inline toggle switches for enabled/disabled and refund on each card
- Toggle switches call API directly without opening edit dialog
- When provider type is disabled above, entire card is greyed out with
pointer-events-none and shows hint text
- Rename "启用的支付方式" → "服务商"
2026-04-06 21:07:36 +08:00
erio
4e54d95645
chore: bump version to 0.1.108.25
2026-04-06 20:58:02 +08:00
erio
bfcc487a6b
feat(payment): add EasyPay dual-mode support (redirect + API)
...
- Backend: EasyPay provider supports paymentMode config (redirect/api)
- redirect: builds submit.php signed URL, browser redirects to hosted page
- api: calls mapi.php, returns payurl/qrcode (existing behavior)
- Add TypeEasyPay payment type constant
- Fix notify/return URL fallback to instance config
- Handle empty TradeNo for redirect mode (SetNillable)
- Frontend: add paymentMode dropdown in EasyPay provider config
- Auto-update supported_types when paymentMode changes
- Add easypay icon/color in PaymentMethodSelector
- Add i18n for easypay, paymentMode labels
- Rename "启用的支付方式" to "服务商"
- Migration 098: clean easypay from ENABLED_PAYMENT_TYPES
2026-04-06 20:57:45 +08:00
erio
76193ee3c9
chore: bump version to 0.1.108.24
2026-04-06 20:12:45 +08:00
erio
8637ea9563
fix: migration 097 — use FOR loop instead of WITH ORDINALITY for PG compat
2026-04-06 20:12:45 +08:00
erio
9f98284382
chore: bump version to 0.1.108.23
2026-04-06 20:06:39 +08:00
erio
6e083c7ac2
fix: migration 097 — fix purchase menu label and icon from migration 096
...
Migration 096 created a custom_menu_items entry with hardcoded English
label "Purchase" and empty icon_svg. This migration updates existing
records where id='migrated_purchase_subscription':
- label: "Purchase" → "充值/订阅"
- icon_svg: "" → CreditCard SVG (Heroicons outline)
2026-04-06 20:06:39 +08:00
erio
2cb9d73fa5
chore: bump version to 0.1.108.22
2026-04-06 19:57:42 +08:00
erio
d8f2fd3c94
fix(frontend): unify purchase icon with subscriptions (CreditCardIcon)
...
Use the same CreditCardIcon for both "我的订阅" and "充值/订阅" sidebar
items. Remove unused RechargeSubscriptionIcon.
2026-04-06 19:57:42 +08:00
erio
fc6514c18b
chore: bump version to 0.1.108.21
2026-04-06 19:43:50 +08:00
erio
32907268f9
fix(frontend): mark provider config fields required/optional correctly
...
- apiBase, notifyUrl, returnUrl: remove optional flag (required — backend
relies on these in provider config, no fallback)
- Only wxpay publicKeyId + certSerial remain optional
- Show red * for required fields, (可选) for optional fields
2026-04-06 19:43:50 +08:00
erio
3ba667d5c0
chore: bump version to 0.1.108.20
2026-04-06 19:31:26 +08:00
erio
91413cf410
feat(payment): order safety protection for provider/plan CRUD
...
Backend (matching sub2apipay behavior):
- UpdateProviderInstance: block credential changes (key/secret/password
fields) when instance has PENDING/PAID/RECHARGING orders (409 Conflict)
- DeleteProviderInstance: block deletion when pending orders exist (409)
- DeletePlan: block deletion when pending orders exist (409)
- Non-credential changes (name/enabled/sort) still allowed with pending orders
Frontend:
- Filter empty config values before sending (avoid overwriting existing
credentials when editing a provider without re-entering all secrets)
2026-04-06 19:31:26 +08:00
erio
b0025ed25d
chore: bump version to 0.1.108.19
2026-04-06 19:04:01 +08:00
erio
f69293c998
fix(frontend): provider creation — fix JSON field names, i18n, remove extra fields
...
Root cause: frontend sent snake_case (provider_key, supported_types) but
backend expects camelCase (providerKey, supportedTypes) → internal error.
Changes:
- Fix handleSaveProvider to send camelCase payload matching Go struct
- Remove CID/CID Alipay/CID Wxpay fields (not in sub2apipay reference)
- Data-driven config fields: PROVIDER_CONFIG_FIELDS per provider type
(matches sub2apipay exactly: easypay=5 fields, alipay=5, wxpay=8, stripe=3)
- Full i18n for all config field labels (zh: 异步通知地址/私钥/商户号/etc)
- Dynamic providerConfig as Record<string,string> instead of hardcoded reactive
2026-04-06 19:04:01 +08:00
erio
b7367c5b31
chore: bump version to 0.1.108.18
2026-04-06 18:28:17 +08:00
erio
515f4aa0ce
fix(frontend): remove balance-disabled checkbox, disable provider add when no types enabled
...
- Remove redundant "禁用余额充值" checkbox
- Disable "添加服务商" button when no payment types are enabled
- Show hint "请先在上方启用至少一种支付方式" when empty + no types
2026-04-06 18:28:17 +08:00
erio
f8a07d59c4
chore: bump version to 0.1.108.17
2026-04-06 18:15:15 +08:00
erio
6503583162
fix(frontend): order timeout field — required marker + unit hint
2026-04-06 18:15:15 +08:00
erio
f90d0f86fd
chore: bump version to 0.1.108.16
2026-04-06 18:06:36 +08:00
erio
4b15704d8e
fix(frontend): provider list respects enabled payment types
...
- Create provider dialog: only show provider types whose payment types
are enabled (e.g. no Stripe option if stripe not enabled above)
- Provider cards: grey out + disable edit when their type is disabled
- Show "(类型已禁用)" warning on greyed-out provider cards
- Delete still allowed on disabled providers (cleanup)
2026-04-06 18:06:36 +08:00
erio
d68479d4af
chore: bump version to 0.1.108.15
2026-04-06 17:51:07 +08:00
erio
b6757a831f
fix(frontend): payment settings UI — layout, i18n, image upload
...
- Fix layout: 5-col grid -> 4-col + flex, no more truncated labels
- Add easypay to payment type toggles (易支付)
- Internationalize provider key options (易支付/支付宝官方/微信官方/Stripe)
- Help image: URL input -> ImageUpload component (supports upload)
- Help text: input -> textarea (multi-line)
- Add i18n keys: providerEasypay/Alipay/Wxpay/Stripe, helpImage, placeholders
2026-04-06 17:51:06 +08:00
erio
c577595f50
chore: bump version to 0.1.108.14
2026-04-06 17:40:05 +08:00
erio
335aaa733b
fix(frontend): fix purchase page icon and title i18n
...
- Replace fill-based 1024x1024 icon with stroke-based Heroicons banknotes
icon (24x24) matching sidebar style
- Change titleKey from purchase.title to nav.buySubscription for consistency
2026-04-06 17:40:05 +08:00
erio
5f64f744de
chore: bump version to 0.1.108.13
2026-04-06 17:16:59 +08:00
erio
f8990f39f8
style(frontend): compact payment settings layout
...
- Merge amount fields, toggles and limits into fewer rows
- Put payment types + load balance strategy on same line
- Compact provider cards (single-line info, inline edit/delete buttons)
- Reduce padding and gaps throughout
2026-04-06 17:16:59 +08:00
erio
86204170d9
chore: bump version to 0.1.108.12
2026-04-06 16:44:21 +08:00
erio
2f41c71957
feat(payment): prefix order ID with sub2_ for third-party providers
...
Add formatOrderID/parseOrderID helpers to prepend "sub2_" prefix to
order IDs sent to EasyPay, Alipay, Wxpay, and Stripe. This makes our
orders identifiable in third-party dashboards and prevents ID collision.
Callback handlers strip the prefix before looking up the DB record.
Internal audit logs keep using raw DB IDs.
2026-04-06 16:43:59 +08:00
erio
d25669ab52
chore: bump version to 0.1.108.11
2026-04-06 16:19:19 +08:00
erio
611dcb8ccd
cleanup: remove duplicate AdminPaymentConfigView, fix group display
...
- Delete AdminPaymentConfigView.vue (duplicated in SettingsView Payment tab)
- Remove /admin/orders/config route
- Plans table: show red "缺失/Missing" badge for deleted groups
- Plans table: group_id column shows group name or missing indicator
2026-04-06 16:19:19 +08:00
erio
9b8317fc66
chore: bump version to 0.1.108.10
2026-04-06 16:04:20 +08:00
erio
97a9949085
fix(frontend): 7 payment UI issues
...
1. Remove duplicate page titles (AppLayout bar already shows them)
2. Fix daily_limit empty value causing Go unmarshal error (NaN -> 0)
3. Enabled payment types: text input -> toggle badges
4. Provider dialog: supported types -> toggle badges per provider key
5. Auto-derive supported types when changing provider key
6. Fix ¥ symbol showing as literal \u00A5 in Vue templates
7. Show payment method selector when >= 1 method (was > 1)
2026-04-06 16:03:58 +08:00
erio
1984a19285
chore: bump version to 0.1.108.9
2026-04-06 15:37:39 +08:00
erio
0215b2a1ca
refactor(frontend): unify user orders page with DataTable + Pagination
...
Replace custom table and pill-style filters with project-standard
DataTable, Select, and Pagination components for consistent UI.
2026-04-06 15:37:39 +08:00
erio
f72f79f48f
chore: bump version to 0.1.108.8
2026-04-06 15:21:25 +08:00
erio
6798de6333
fix(frontend): centralize API error handling with extractApiErrorMessage
...
- Create utils/apiError.ts with extractApiErrorMessage() utility
- Replace all raw err.message/String(err) patterns in payment views
- Fix error display for API client interceptor's plain object errors
- Update CLAUDE.md with API error handling convention (section 13)
- Copy CLAUDE.md to AGENTS.md
2026-04-06 15:21:05 +08:00
erio
329d3445fa
chore: bump version to 0.1.108.7
2026-04-06 15:03:19 +08:00
erio
4cfcbfabe6
fix(frontend): i18n table headers + remove redundant user subscriptions tab
...
- Plans page: remove user subscriptions sub-tab (already in subscription mgmt)
- Plans page: internationalize all table column headers
- Orders page: internationalize table column headers
- Add missing i18n key: colUser
2026-04-06 15:02:49 +08:00
erio
fdc9c6d8b8
chore: bump version to 0.1.108.6
2026-04-06 14:52:16 +08:00
erio
a6cd294ab6
feat(frontend): enrich payment settings with provider management inline
...
- Move payment config out of orders submenu (now 3 items: dashboard, orders, plans)
- Embed provider management directly in SettingsView Payment tab
- Add missing fields: product name prefix/suffix with preview, load balance strategy
- Add full provider CRUD dialog (EasyPay/Alipay/Wxpay/Stripe config fields)
2026-04-06 14:51:14 +08:00
erio
22a3931984
chore: bump version to 0.1.108.5
2026-04-06 14:40:53 +08:00
erio
f2b3cf628e
feat(frontend): collapsible payment submenu in sidebar
...
Group the 4 payment admin pages under a single "订单管理" parent menu
item that expands/collapses to show sub-items with indented tree line.
2026-04-06 14:40:37 +08:00