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() {