diff --git a/public/admin.html b/public/admin.html index 704a0c9..f93cac7 100644 --- a/public/admin.html +++ b/public/admin.html @@ -183,7 +183,20 @@ diff --git a/public/assets/admin.css b/public/assets/admin.css index 7e12b48..134c458 100644 --- a/public/assets/admin.css +++ b/public/assets/admin.css @@ -731,6 +731,27 @@ body.modal-open { color: var(--muted); } +.channel-list-panel .panel-header { + display: grid; + grid-template-columns: 1fr; + align-items: start; + gap: 10px; +} + +.channel-add { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + gap: 8px; + width: 100%; +} + +.channel-add__select { + min-height: 32px; + min-width: 0; + padding: 6px 8px; + font-size: 13px; +} + .channel-list { display: grid; gap: 10px; diff --git a/public/assets/admin.js b/public/assets/admin.js index c7b667e..d507977 100644 --- a/public/assets/admin.js +++ b/public/assets/admin.js @@ -9,6 +9,7 @@ const elements = { pushSettingsButton: document.querySelector('#pushSettingsButton'), pushModal: document.querySelector('#pushModal'), pushModalClose: document.querySelector('#pushModalClose'), + pushAddTypeSelect: document.querySelector('#pushAddTypeSelect'), pushAddButton: document.querySelector('#pushAddButton'), pushDeleteButton: document.querySelector('#pushDeleteButton'), pushSaveButton: document.querySelector('#pushSaveButton'), @@ -452,7 +453,8 @@ function selectPushChannel(index) { function addPushChannel() { syncCurrentPushChannel(); - state.pushChannels.push(createDefaultPushChannel()); + const type = elements.pushAddTypeSelect?.value || 'dingtalk'; + state.pushChannels.push(createDefaultPushChannel(type)); state.selectedPushChannel = state.pushChannels.length - 1; renderPushSettings(); setPushStatus(''); @@ -565,15 +567,21 @@ async function testPushChannel() { function handlePushTypeChange() { const controls = getPushControls(); + const channel = state.pushChannels[state.selectedPushChannel]; + const previousType = channel?.type || 'dingtalk'; + const previousDefaultName = createDefaultPushChannel(previousType).name; const type = controls.type.value; + const nextDefaultName = createDefaultPushChannel(type).name; + const currentName = controls.name.value.trim(); updatePushFieldVisibility(type); - if (!controls.name.value.trim()) { - controls.name.value = `${getPushTypeLabel(type)}通知`; + if (!currentName || currentName === previousDefaultName) { + controls.name.value = nextDefaultName; } if (type === 'custom' && !controls.customBody.value.trim()) { controls.customBody.value = createDefaultPushChannel('custom').customBody; } + syncCurrentPushChannel(); } async function refreshLogs() {