前端配置迁至 config/local.js,完善支付、模板库与部署脚本

- 页面直接引用 local.js 设置 SOON_DEPLOY_CONFIG,移除 deploy-config
- Docker sync-config 生成 local.js;更新 README 与 agent-core 说明
- 模板库自动扫描 .soon;新增后端部署/种子/排查脚本
- 完善支付配置、订阅弹窗与后台支付管理页

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
24kycj
2026-06-08 20:48:51 +08:00
parent 88c6ce8ccc
commit 152228d41f
47 changed files with 1448 additions and 486 deletions
@@ -5,39 +5,22 @@
var Ui = function () { return window.AdminUi; };
var I = function () { return window.AdminI18n; };
var Form = function () { return window.AdminForm; };
var Tabs = function () { return window.AdminTabs; };
var Filter = function () { return window.AdminFilter; };
var State = function () { return window.AdminState; };
var Router = function () { return window.AdminRouter; };
var SETTING_LABELS = {
'site.base_url': 'API 站点外网地址',
'site.front_base_url': '前端站点地址',
'site.base_url': 'API 站点外网地址(见支付配置)',
'payment.display_channels': '前端展示渠道(见支付配置)',
'alipay.app_id': '支付宝 APPID(见支付配置)',
'wechat.app_id': '微信 AppID(见支付配置)',
'wechat.mch_id': '微信商户号(见支付配置)',
'wechat.mch_serial_no': '商户证书序列号(见支付配置)',
};
var valuesByKey = {};
var allItems = [];
function siteFields() {
var cfg = window.SOON_DEPLOY_CONFIG || {};
var apiBase = String(cfg.api_v1_base || '').replace(/\/api\/v1\/?$/, '');
var frontBase = cfg.front_base_url || cfg.web_base || '';
return [
{
key: 'site.base_url',
label: 'API 站点外网地址',
hint: '须 HTTPS 外网可达;支付宝/微信 notify 回调依赖此地址',
placeholder: apiBase,
},
{
key: 'site.front_base_url',
label: '前端站点地址',
hint: '支付完成 return_url 跳转至会员页',
placeholder: frontBase,
},
];
}
function settingLabel(key) {
if (SETTING_LABELS[key]) {
return I().esc(key) + '<br><span class="soon-admin-setting-hint">' + I().esc(SETTING_LABELS[key]) + '</span>';
@@ -50,17 +33,6 @@
return I().esc(val);
}
function siteFormHtml() {
var fields = siteFields().map(function (f) {
var val = valuesByKey[f.key] != null ? valuesByKey[f.key] : '';
return Form().field(f.label,
Form().input('cfg_' + f.key.replace(/\./g, '_'), { value: val, placeholder: f.placeholder }),
f.hint);
}).join('');
return '<div class="soon-admin-form">' + Form().panel('站点与回调地址', fields) +
Form().actions('保存站点配置', 'settingsSiteSave') + '</div>';
}
function allSettingsHtml(filterQ) {
var q = (filterQ || '').toLowerCase();
var items = allItems.filter(function (s) {
@@ -82,21 +54,6 @@
return filter + Ui().dataTable(['配置项', '当前值', '更新时间', '操作'], rows);
}
function bindSiteForm() {
Ui().bindFormSubmit('settingsSiteSave', function () {
var items = siteFields().map(function (f) {
var el = Ui().el('cfg_' + f.key.replace(/\./g, '_'));
return { key: f.key, value: el ? el.value.trim() : '' };
});
return Api().postJson('settings/batch', { items: items }).then(function (r) {
if (r) {
soonToast('站点配置已保存', 'success');
render();
}
});
});
}
function bindAllSettings() {
var st = State().settings;
var searchBtn = Ui().el('settingsSearchBtn');
@@ -154,7 +111,7 @@
var panel = Ui().el('panel-settings');
if (!panel) return;
var st = State().settings;
var header = Ui().pageHeader('系统设置', '站点地址与运行时参数;修改后即时生效');
var header = Ui().pageHeader('系统设置', '运行时参数;支付相关请在「支付配置」维护');
panel.innerHTML = '<div class="soon-admin-page">' + header + Ui().skeletonTable() + '</div>';
Api().get('settings').then(function (j) {
@@ -168,20 +125,7 @@
allItems = j.data.items || [];
allItems.forEach(function (s) { valuesByKey[s.key] = s.value; });
var tabsHtml = Tabs().html('settingsTabs', [
{ id: 'site', label: '站点配置' },
{ id: 'all', label: '全部配置' },
], {
site: siteFormHtml(),
all: allSettingsHtml(st.q),
}, st.tab);
panel.innerHTML = '<div class="soon-admin-page">' + header + tabsHtml + '</div>';
Tabs().bind(Ui().el('settingsTabs'), function (tabId) {
st.tab = tabId;
Router().syncQuery();
});
bindSiteForm();
panel.innerHTML = '<div class="soon-admin-page">' + header + allSettingsHtml(st.q) + '</div>';
bindAllSettings();
});
}