fix: 补齐 MaDao 直连动态选项

恢复 MaDao 直连模式的服务商、国家、线路下拉,并通过 daemon providers/countries/operators 接口级联加载。保存 madaoOperator 并在 direct acquire 中通过 metadata.operator 下发,routing 模式保留已保存的直连配置。
This commit is contained in:
Isulew
2026-05-29 17:53:28 +08:00
parent 0938f5dfba
commit ed1d62687c
10 changed files with 596 additions and 41 deletions
+345 -33
View File
@@ -460,6 +460,7 @@ const rowMaDaoMode = document.getElementById('row-madao-mode');
const rowMaDaoRoutingPlanId = document.getElementById('row-madao-routing-plan-id');
const rowMaDaoProviderId = document.getElementById('row-madao-provider-id');
const rowMaDaoCountry = document.getElementById('row-madao-country');
const rowMaDaoOperator = document.getElementById('row-madao-operator');
const rowMaDaoAutoPickCountry = document.getElementById('row-madao-auto-pick-country');
const rowMaDaoReusePhone = document.getElementById('row-madao-reuse-phone');
const rowMaDaoPriceRange = document.getElementById('row-madao-price-range');
@@ -496,8 +497,12 @@ const btnToggleMaDaoHttpSecret = document.getElementById('btn-toggle-madao-http-
const selectMaDaoMode = document.getElementById('select-madao-mode');
const selectMaDaoRoutingPlanId = document.getElementById('select-madao-routing-plan-id');
const btnMaDaoRefreshRoutingPlans = document.getElementById('btn-madao-refresh-routing-plans');
const inputMaDaoProviderId = document.getElementById('input-madao-provider-id');
const inputMaDaoCountry = document.getElementById('input-madao-country');
const selectMaDaoProviderId = document.getElementById('select-madao-provider-id');
const btnMaDaoRefreshProviders = document.getElementById('btn-madao-refresh-providers');
const selectMaDaoCountry = document.getElementById('select-madao-country');
const btnMaDaoRefreshCountries = document.getElementById('btn-madao-refresh-countries');
const selectMaDaoOperator = document.getElementById('select-madao-operator');
const btnMaDaoRefreshOperators = document.getElementById('btn-madao-refresh-operators');
const inputMaDaoAutoPickCountry = document.getElementById('input-madao-auto-pick-country');
const inputMaDaoReusePhone = document.getElementById('input-madao-reuse-phone');
const inputMaDaoMinPrice = document.getElementById('input-madao-min-price');
@@ -691,6 +696,9 @@ const MADAO_MODE_ROUTING_PLAN = 'routing_plan';
const MADAO_MODE_DIRECT = 'direct';
const DEFAULT_MADAO_MODE = MADAO_MODE_ROUTING_PLAN;
let maDaoRoutingPlanOptions = [];
let maDaoProviderOptions = [];
let maDaoCountryOptions = [];
let maDaoOperatorOptions = [];
const PHONE_SMS_PROVIDER_UI_DESCRIPTORS = Object.freeze({
[PHONE_SMS_PROVIDER_HERO]: Object.freeze({
rowKeys: Object.freeze([
@@ -734,6 +742,9 @@ const PHONE_SMS_PROVIDER_UI_DESCRIPTORS = Object.freeze({
'rowMaDaoRoutingPlanId',
]),
directRowKeys: Object.freeze([
'rowMaDaoProviderId',
'rowMaDaoCountry',
'rowMaDaoOperator',
'rowMaDaoPriceRange',
]),
}),
@@ -763,6 +774,7 @@ function getPhoneSmsProviderUiRowMap() {
rowMaDaoRoutingPlanId,
rowMaDaoProviderId,
rowMaDaoCountry,
rowMaDaoOperator,
rowMaDaoAutoPickCountry,
rowMaDaoReusePhone,
rowMaDaoPriceRange,
@@ -4453,6 +4465,9 @@ function collectSettingsPayload() {
const normalizeMaDaoProviderIdSafe = typeof normalizeMaDaoProviderIdValue === 'function'
? normalizeMaDaoProviderIdValue
: ((value = '') => String(value || '').trim().toLowerCase().replace(/[^a-z0-9_-]+/g, ''));
const normalizeMaDaoOperatorSafe = typeof normalizeMaDaoOperatorValue === 'function'
? normalizeMaDaoOperatorValue
: ((value = '') => String(value || '').trim().toLowerCase().replace(/[^a-z0-9_-]+/g, ''));
const normalizeMaDaoCountrySafe = typeof normalizeMaDaoCountry === 'function'
? normalizeMaDaoCountry
: ((value = '') => {
@@ -4639,12 +4654,16 @@ function collectSettingsPayload() {
const maDaoRoutingPlanIdValue = typeof selectMaDaoRoutingPlanId !== 'undefined' && selectMaDaoRoutingPlanId
? normalizeMaDaoIdentifierSafe(selectMaDaoRoutingPlanId.value || '')
: normalizeMaDaoIdentifierSafe(latestState?.madaoRoutingPlanId || '');
const maDaoProviderIdValue = typeof inputMaDaoProviderId !== 'undefined' && inputMaDaoProviderId
? normalizeMaDaoProviderIdSafe(inputMaDaoProviderId.value || '')
const shouldReadMaDaoDirectControls = maDaoModeValue === MADAO_MODE_DIRECT;
const maDaoProviderIdValue = shouldReadMaDaoDirectControls && typeof selectMaDaoProviderId !== 'undefined' && selectMaDaoProviderId
? normalizeMaDaoProviderIdSafe(selectMaDaoProviderId.value || '')
: normalizeMaDaoProviderIdSafe(latestState?.madaoProviderId || '');
const maDaoCountryValue = typeof inputMaDaoCountry !== 'undefined' && inputMaDaoCountry
? normalizeMaDaoCountrySafe(inputMaDaoCountry.value || '')
const maDaoCountryValue = shouldReadMaDaoDirectControls && typeof selectMaDaoCountry !== 'undefined' && selectMaDaoCountry
? normalizeMaDaoCountrySafe(selectMaDaoCountry.value || '')
: normalizeMaDaoCountrySafe(latestState?.madaoCountry || '');
const maDaoOperatorValue = shouldReadMaDaoDirectControls && typeof selectMaDaoOperator !== 'undefined' && selectMaDaoOperator
? normalizeMaDaoOperatorSafe(selectMaDaoOperator.value || '')
: normalizeMaDaoOperatorSafe(latestState?.madaoOperator || '');
const maDaoAutoPickCountryValue = typeof inputMaDaoAutoPickCountry !== 'undefined' && inputMaDaoAutoPickCountry
? Boolean(inputMaDaoAutoPickCountry.checked)
: (latestState?.madaoAutoPickCountry !== undefined ? Boolean(latestState.madaoAutoPickCountry) : true);
@@ -5271,6 +5290,7 @@ function collectSettingsPayload() {
madaoRoutingPlanId: maDaoRoutingPlanIdValue,
madaoProviderId: maDaoProviderIdValue,
madaoCountry: maDaoCountryValue,
madaoOperator: maDaoOperatorValue,
madaoAutoPickCountry: maDaoAutoPickCountryValue,
madaoReusePhone: maDaoReusePhoneValue,
madaoMinPrice: maDaoMinPriceValue,
@@ -5681,6 +5701,10 @@ function normalizeMaDaoProviderIdValue(value = '') {
return String(value || '').trim().toLowerCase().replace(/[^a-z0-9_-]+/g, '');
}
function normalizeMaDaoOperatorValue(value = '') {
return String(value || '').trim().toLowerCase().replace(/[^a-z0-9_-]+/g, '');
}
function normalizeMaDaoCountry(value = '') {
const trimmed = String(value || '').trim();
if (!trimmed) {
@@ -5811,6 +5835,85 @@ function setMaDaoRoutingPlanSelectOptions(selectedValue = latestState?.madaoRout
});
}
function normalizeMaDaoOptionListItems(items = [], selectedValue = '', normalizeValue = normalizeMaDaoIdentifierValue, selectedHint = '已保存的选项') {
const normalizedSelected = normalizeValue(selectedValue);
const seen = new Set();
const normalizedItems = [];
(Array.isArray(items) ? items : []).forEach((item) => {
const value = normalizeValue(
item?.value
|| item?.id
|| item?.provider
|| item?.provider_value
|| item?.providerValue
|| item?.country
|| item?.operator
|| ''
);
if (!value || seen.has(value)) {
return;
}
seen.add(value);
normalizedItems.push({
value,
label: String(item?.label || item?.name || item?.display_name || item?.displayName || value).trim() || value,
hint: String(item?.hint || item?.description || item?.provider_value || item?.providerValue || '').trim(),
enabled: item?.enabled !== false,
});
});
if (normalizedSelected && !seen.has(normalizedSelected)) {
normalizedItems.unshift({
value: normalizedSelected,
label: normalizedSelected,
hint: selectedHint,
enabled: true,
});
}
return normalizedItems.filter((item) => item.enabled !== false);
}
function setMaDaoProviderSelectOptions(selectedValue = latestState?.madaoProviderId || '') {
const normalizedSelected = normalizeMaDaoProviderIdValue(selectedValue);
const options = normalizeMaDaoOptionListItems(
maDaoProviderOptions,
normalizedSelected,
normalizeMaDaoProviderIdValue,
'已保存的服务商'
);
setSelectOptions(selectMaDaoProviderId, options, {
placeholder: '请先刷新服务商',
value: normalizedSelected,
});
}
function setMaDaoCountrySelectOptions(selectedValue = latestState?.madaoCountry || '') {
const normalizedSelected = normalizeMaDaoCountry(selectedValue);
const options = normalizeMaDaoOptionListItems(
maDaoCountryOptions,
normalizedSelected,
normalizeMaDaoCountry,
'已保存的国家'
);
setSelectOptions(selectMaDaoCountry, options, {
placeholder: '请先选择服务商',
value: normalizedSelected,
});
}
function setMaDaoOperatorSelectOptions(selectedValue = latestState?.madaoOperator || '') {
const normalizedSelected = normalizeMaDaoOperatorValue(selectedValue);
const options = normalizeMaDaoOptionListItems(
maDaoOperatorOptions,
normalizedSelected,
normalizeMaDaoOperatorValue,
'已保存的线路'
);
setSelectOptions(selectMaDaoOperator, options, {
placeholder: '任意线路',
value: normalizedSelected,
});
}
function buildMaDaoRequestUrl(path = '', baseUrl = '') {
const normalizedBaseUrl = normalizeMaDaoBaseUrlValue(baseUrl || latestState?.madaoBaseUrl || DEFAULT_MADAO_BASE_URL);
return new URL(String(path || '').replace(/^\/+/, ''), `${normalizedBaseUrl.replace(/\/+$/, '')}/`).toString();
@@ -5876,6 +5979,57 @@ function getMaDaoRoutingPlansFromPayload(payload = {}) {
return [];
}
function getMaDaoProvidersFromPayload(payload = {}) {
if (Array.isArray(payload)) {
return payload;
}
if (Array.isArray(payload?.providers)) {
return payload.providers;
}
if (Array.isArray(payload?.data?.providers)) {
return payload.data.providers;
}
if (Array.isArray(payload?.data)) {
return payload.data;
}
if (Array.isArray(payload?.items)) {
return payload.items;
}
return [];
}
function getMaDaoOptionItemsFromPayload(payload = {}) {
if (Array.isArray(payload)) {
return payload;
}
if (Array.isArray(payload?.items)) {
return payload.items;
}
if (Array.isArray(payload?.data?.items)) {
return payload.data.items;
}
if (Array.isArray(payload?.data)) {
return payload.data;
}
return [];
}
function getSelectedMaDaoProviderId() {
return normalizeMaDaoProviderIdValue(
typeof selectMaDaoProviderId !== 'undefined' && selectMaDaoProviderId
? selectMaDaoProviderId.value
: latestState?.madaoProviderId
);
}
function getSelectedMaDaoCountry() {
return normalizeMaDaoCountry(
typeof selectMaDaoCountry !== 'undefined' && selectMaDaoCountry
? selectMaDaoCountry.value
: latestState?.madaoCountry
);
}
async function loadMaDaoRoutingPlans(options = {}) {
const selectedValue = normalizeMaDaoRoutingPlanIdValue(
typeof selectMaDaoRoutingPlanId !== 'undefined' && selectMaDaoRoutingPlanId
@@ -5905,6 +6059,93 @@ async function loadMaDaoRoutingPlans(options = {}) {
return maDaoRoutingPlanOptions;
}
async function loadMaDaoProviders(options = {}) {
const selectedValue = normalizeMaDaoProviderIdValue(
(typeof selectMaDaoProviderId !== 'undefined' && selectMaDaoProviderId
? selectMaDaoProviderId.value
: '')
|| latestState?.madaoProviderId
);
const payload = await fetchMaDaoJson('/api/providers');
maDaoProviderOptions = getMaDaoProvidersFromPayload(payload)
.filter((provider) => provider?.enabled !== false)
.map((provider) => ({
value: normalizeMaDaoProviderIdValue(provider?.id || provider?.value || provider?.provider || ''),
label: String(provider?.name || provider?.label || provider?.id || provider?.value || '').trim(),
hint: String(provider?.description || provider?.hint || provider?.protocol_label || provider?.protocolLabel || provider?.kind || '').trim(),
enabled: provider?.enabled !== false,
}))
.filter((provider) => provider.value);
setMaDaoProviderSelectOptions(selectedValue);
if (!options.skipChildren && getSelectedMaDaoProviderId()) {
await loadMaDaoCountries({ silent: true }).catch(() => {
setMaDaoCountrySelectOptions(latestState?.madaoCountry || '');
setMaDaoOperatorSelectOptions(latestState?.madaoOperator || '');
});
}
updateHeroSmsPlatformDisplay();
if (!options.silent && typeof showToast === 'function') {
showToast('已刷新 MaDao 服务商。', 'info', 1600);
}
return maDaoProviderOptions;
}
async function loadMaDaoCountries(options = {}) {
const providerId = getSelectedMaDaoProviderId();
const selectedValue = normalizeMaDaoCountry(
(typeof selectMaDaoCountry !== 'undefined' && selectMaDaoCountry
? selectMaDaoCountry.value
: '')
|| latestState?.madaoCountry
);
if (!providerId) {
maDaoCountryOptions = [];
maDaoOperatorOptions = [];
setMaDaoCountrySelectOptions(selectedValue);
setMaDaoOperatorSelectOptions(latestState?.madaoOperator || '');
return maDaoCountryOptions;
}
const payload = await fetchMaDaoJson(`/api/providers/${encodeURIComponent(providerId)}/countries`);
maDaoCountryOptions = getMaDaoOptionItemsFromPayload(payload);
setMaDaoCountrySelectOptions(selectedValue);
if (!options.skipChildren) {
await loadMaDaoOperators({ silent: true }).catch(() => {
setMaDaoOperatorSelectOptions(latestState?.madaoOperator || '');
});
}
updateHeroSmsPlatformDisplay();
if (!options.silent && typeof showToast === 'function') {
showToast('已刷新 MaDao 国家。', 'info', 1600);
}
return maDaoCountryOptions;
}
async function loadMaDaoOperators(options = {}) {
const providerId = getSelectedMaDaoProviderId();
const country = getSelectedMaDaoCountry();
const selectedValue = normalizeMaDaoOperatorValue(
typeof selectMaDaoOperator !== 'undefined' && selectMaDaoOperator
? selectMaDaoOperator.value
: latestState?.madaoOperator
);
if (!providerId) {
maDaoOperatorOptions = [];
setMaDaoOperatorSelectOptions(selectedValue);
return maDaoOperatorOptions;
}
const payload = await fetchMaDaoJson(`/api/providers/${encodeURIComponent(providerId)}/operators`, {
method: 'POST',
body: country ? { country } : {},
});
maDaoOperatorOptions = getMaDaoOptionItemsFromPayload(payload);
setMaDaoOperatorSelectOptions(selectedValue);
updateHeroSmsPlatformDisplay();
if (!options.silent && typeof showToast === 'function') {
showToast('已刷新 MaDao 线路。', 'info', 1600);
}
return maDaoOperatorOptions;
}
function getSelectedMaDaoRoutingPlanLabel(value = '') {
const selectedValue = normalizeMaDaoRoutingPlanIdValue(
value
@@ -12035,6 +12276,11 @@ function applySettingsState(state) {
loadMaDaoRoutingPlans({ silent: true }).catch(() => {
setMaDaoRoutingPlanSelectOptions(state?.madaoRoutingPlanId || '');
});
loadMaDaoProviders({ silent: true }).catch(() => {
setMaDaoProviderSelectOptions(state?.madaoProviderId || '');
setMaDaoCountrySelectOptions(state?.madaoCountry || '');
setMaDaoOperatorSelectOptions(state?.madaoOperator || '');
});
} else {
loadHeroSmsCountries({ silent: true }).catch(() => { });
}
@@ -12077,11 +12323,14 @@ function applySettingsState(state) {
if (typeof selectMaDaoRoutingPlanId !== 'undefined' && selectMaDaoRoutingPlanId) {
setMaDaoRoutingPlanSelectOptions(state?.madaoRoutingPlanId || '');
}
if (typeof inputMaDaoProviderId !== 'undefined' && inputMaDaoProviderId) {
inputMaDaoProviderId.value = normalizeMaDaoProviderIdValue(state?.madaoProviderId || '');
if (typeof selectMaDaoProviderId !== 'undefined' && selectMaDaoProviderId) {
setMaDaoProviderSelectOptions(state?.madaoProviderId || '');
}
if (typeof inputMaDaoCountry !== 'undefined' && inputMaDaoCountry) {
inputMaDaoCountry.value = normalizeMaDaoCountry(state?.madaoCountry || '');
if (typeof selectMaDaoCountry !== 'undefined' && selectMaDaoCountry) {
setMaDaoCountrySelectOptions(state?.madaoCountry || '');
}
if (typeof selectMaDaoOperator !== 'undefined' && selectMaDaoOperator) {
setMaDaoOperatorSelectOptions(state?.madaoOperator || '');
}
if (typeof inputMaDaoAutoPickCountry !== 'undefined' && inputMaDaoAutoPickCountry) {
inputMaDaoAutoPickCountry.checked = state?.madaoAutoPickCountry !== undefined
@@ -17378,17 +17627,26 @@ function buildPhoneSmsProviderStatePatch(provider = getSelectedPhoneSmsProvider(
};
}
if (normalizedProvider === PHONE_SMS_PROVIDER_MADAO) {
const maDaoMode = normalizeMaDaoModeValue(selectMaDaoMode?.value || latestState?.madaoMode);
const shouldReadMaDaoDirectControls = maDaoMode === MADAO_MODE_DIRECT;
return {
madaoBaseUrl: normalizeMaDaoBaseUrlValue(inputMaDaoBaseUrl?.value || latestState?.madaoBaseUrl),
madaoHttpSecret: String(inputMaDaoHttpSecret?.value || ''),
madaoMode: normalizeMaDaoModeValue(selectMaDaoMode?.value || latestState?.madaoMode),
madaoMode: maDaoMode,
madaoRoutingPlanId: normalizeMaDaoRoutingPlanIdValue(
typeof selectMaDaoRoutingPlanId !== 'undefined' && selectMaDaoRoutingPlanId
? selectMaDaoRoutingPlanId.value
: latestState?.madaoRoutingPlanId
),
madaoProviderId: normalizeMaDaoProviderIdValue(inputMaDaoProviderId?.value || ''),
madaoCountry: normalizeMaDaoCountry(inputMaDaoCountry?.value || ''),
madaoProviderId: shouldReadMaDaoDirectControls
? normalizeMaDaoProviderIdValue(selectMaDaoProviderId?.value || '')
: normalizeMaDaoProviderIdValue(latestState?.madaoProviderId || ''),
madaoCountry: shouldReadMaDaoDirectControls
? normalizeMaDaoCountry(selectMaDaoCountry?.value || '')
: normalizeMaDaoCountry(latestState?.madaoCountry || ''),
madaoOperator: shouldReadMaDaoDirectControls
? normalizeMaDaoOperatorValue(selectMaDaoOperator?.value || '')
: normalizeMaDaoOperatorValue(latestState?.madaoOperator || ''),
madaoAutoPickCountry: Boolean(inputMaDaoAutoPickCountry?.checked),
madaoReusePhone: Boolean(inputMaDaoReusePhone?.checked),
madaoMinPrice: normalizeMaDaoPriceValue(inputMaDaoMinPrice?.value || ''),
@@ -17436,11 +17694,14 @@ function applyPhoneSmsProviderFieldsToInputs(provider = getSelectedPhoneSmsProvi
if (typeof selectMaDaoRoutingPlanId !== 'undefined' && selectMaDaoRoutingPlanId) {
setMaDaoRoutingPlanSelectOptions(state?.madaoRoutingPlanId || '');
}
if (typeof inputMaDaoProviderId !== 'undefined' && inputMaDaoProviderId) {
inputMaDaoProviderId.value = normalizeMaDaoProviderIdValue(state?.madaoProviderId || '');
if (typeof selectMaDaoProviderId !== 'undefined' && selectMaDaoProviderId) {
setMaDaoProviderSelectOptions(state?.madaoProviderId || '');
}
if (typeof inputMaDaoCountry !== 'undefined' && inputMaDaoCountry) {
inputMaDaoCountry.value = normalizeMaDaoCountry(state?.madaoCountry || '');
if (typeof selectMaDaoCountry !== 'undefined' && selectMaDaoCountry) {
setMaDaoCountrySelectOptions(state?.madaoCountry || '');
}
if (typeof selectMaDaoOperator !== 'undefined' && selectMaDaoOperator) {
setMaDaoOperatorSelectOptions(state?.madaoOperator || '');
}
if (typeof inputMaDaoAutoPickCountry !== 'undefined' && inputMaDaoAutoPickCountry) {
inputMaDaoAutoPickCountry.checked = state?.madaoAutoPickCountry !== undefined
@@ -17523,6 +17784,11 @@ async function switchPhoneSmsProvider(nextProvider) {
await loadMaDaoRoutingPlans({ silent: true }).catch(() => {
setMaDaoRoutingPlanSelectOptions(latestState?.madaoRoutingPlanId || '');
});
await loadMaDaoProviders({ silent: true }).catch(() => {
setMaDaoProviderSelectOptions(latestState?.madaoProviderId || '');
setMaDaoCountrySelectOptions(latestState?.madaoCountry || '');
setMaDaoOperatorSelectOptions(latestState?.madaoOperator || '');
});
} else if (normalizedNextProvider === PHONE_SMS_PROVIDER_HERO_SMS) {
await loadHeroSmsCountries({ silent: true });
const restoredPrimary = {
@@ -17733,6 +17999,12 @@ selectMaDaoMode?.addEventListener('change', () => {
loadMaDaoRoutingPlans({ silent: true }).catch(() => {
setMaDaoRoutingPlanSelectOptions(latestState?.madaoRoutingPlanId || '');
});
} else {
loadMaDaoProviders({ silent: true }).catch(() => {
setMaDaoProviderSelectOptions(latestState?.madaoProviderId || '');
setMaDaoCountrySelectOptions(latestState?.madaoCountry || '');
setMaDaoOperatorSelectOptions(latestState?.madaoOperator || '');
});
}
markSettingsDirty(true);
saveSettings({ silent: true }).catch(() => { });
@@ -17750,23 +18022,60 @@ btnMaDaoRefreshRoutingPlans?.addEventListener('click', () => {
});
});
inputMaDaoProviderId?.addEventListener('input', () => {
selectMaDaoProviderId?.addEventListener('change', () => {
maDaoCountryOptions = [];
maDaoOperatorOptions = [];
setMaDaoCountrySelectOptions('');
setMaDaoOperatorSelectOptions('');
syncLatestState({
madaoProviderId: normalizeMaDaoProviderIdValue(selectMaDaoProviderId.value),
madaoCountry: '',
madaoOperator: '',
});
markSettingsDirty(true);
scheduleSettingsAutoSave();
saveSettings({ silent: true }).catch(() => { });
loadMaDaoCountries({ silent: true }).catch((error) => {
showToast(`刷新 MaDao 国家失败:${error?.message || error}`, 'warn', 2200);
});
});
inputMaDaoProviderId?.addEventListener('blur', () => {
inputMaDaoProviderId.value = normalizeMaDaoProviderIdValue(inputMaDaoProviderId.value);
btnMaDaoRefreshProviders?.addEventListener('click', () => {
loadMaDaoProviders().catch((error) => {
showToast(`刷新 MaDao 服务商失败:${error?.message || error}`, 'warn', 2200);
});
});
selectMaDaoCountry?.addEventListener('change', () => {
maDaoOperatorOptions = [];
setMaDaoOperatorSelectOptions('');
updateHeroSmsPlatformDisplay();
syncLatestState({
madaoCountry: normalizeMaDaoCountry(selectMaDaoCountry.value),
madaoOperator: '',
});
markSettingsDirty(true);
saveSettings({ silent: true }).catch(() => { });
loadMaDaoOperators({ silent: true }).catch((error) => {
showToast(`刷新 MaDao 线路失败:${error?.message || error}`, 'warn', 2200);
});
});
btnMaDaoRefreshCountries?.addEventListener('click', () => {
loadMaDaoCountries().catch((error) => {
showToast(`刷新 MaDao 国家失败:${error?.message || error}`, 'warn', 2200);
});
});
selectMaDaoOperator?.addEventListener('change', () => {
updateHeroSmsPlatformDisplay();
markSettingsDirty(true);
saveSettings({ silent: true }).catch(() => { });
});
inputMaDaoCountry?.addEventListener('input', () => {
markSettingsDirty(true);
scheduleSettingsAutoSave();
});
inputMaDaoCountry?.addEventListener('blur', () => {
inputMaDaoCountry.value = normalizeMaDaoCountry(inputMaDaoCountry.value);
updateHeroSmsPlatformDisplay();
saveSettings({ silent: true }).catch(() => { });
btnMaDaoRefreshOperators?.addEventListener('click', () => {
loadMaDaoOperators().catch((error) => {
showToast(`刷新 MaDao 线路失败:${error?.message || error}`, 'warn', 2200);
});
});
inputMaDaoAutoPickCountry?.addEventListener('change', () => {
@@ -18835,11 +19144,14 @@ chrome.runtime.onMessage.addListener((message, _sender, sendResponse) => {
if (message.payload.madaoRoutingPlanId !== undefined && selectMaDaoRoutingPlanId) {
setMaDaoRoutingPlanSelectOptions(message.payload.madaoRoutingPlanId);
}
if (message.payload.madaoProviderId !== undefined && inputMaDaoProviderId) {
inputMaDaoProviderId.value = normalizeMaDaoProviderIdValue(message.payload.madaoProviderId);
if (message.payload.madaoProviderId !== undefined && selectMaDaoProviderId) {
setMaDaoProviderSelectOptions(message.payload.madaoProviderId);
}
if (message.payload.madaoCountry !== undefined && inputMaDaoCountry) {
inputMaDaoCountry.value = normalizeMaDaoCountry(message.payload.madaoCountry);
if (message.payload.madaoCountry !== undefined && selectMaDaoCountry) {
setMaDaoCountrySelectOptions(message.payload.madaoCountry);
}
if (message.payload.madaoOperator !== undefined && selectMaDaoOperator) {
setMaDaoOperatorSelectOptions(message.payload.madaoOperator);
}
if (message.payload.madaoAutoPickCountry !== undefined && inputMaDaoAutoPickCountry) {
inputMaDaoAutoPickCountry.checked = Boolean(message.payload.madaoAutoPickCountry);