feat: 添加贡献模式昵称和QQ字段,更新相关逻辑和测试

This commit is contained in:
QLHazyCoder
2026-04-20 13:15:22 +08:00
parent 4e9acfd2ee
commit 8a16d81e01
8 changed files with 187 additions and 10 deletions
+64
View File
@@ -174,6 +174,24 @@
return normalizeString(currentState.contributionStatusMessage) || DEFAULT_COPY;
}
async function syncContributionProfile(partial = {}) {
const payload = {
nickname: normalizeString(partial.nickname),
qq: normalizeString(partial.qq),
};
const response = await runtime.sendMessage({
type: 'SET_CONTRIBUTION_PROFILE',
source: 'sidepanel',
payload,
});
if (response?.error) {
throw new Error(response.error);
}
if (response?.state) {
helpers.applySettingsState?.(response.state);
}
}
async function requestContributionMode(enabled) {
const response = await runtime.sendMessage({
type: 'SET_CONTRIBUTION_MODE',
@@ -234,6 +252,13 @@
throw new Error('贡献模式尚未接入主自动流程启动能力。');
}
const profile = helpers.getContributionProfile?.() || {};
const qq = normalizeString(profile.qq);
if (qq && !/^\d{1,20}$/.test(qq)) {
throw new Error('QQ 只能填写数字,且长度不能超过 20 位。');
}
await syncContributionProfile(profile);
const started = await helpers.startContributionAutoRun();
if (!started) {
return;
@@ -258,6 +283,7 @@
const currentState = getLatestState();
const enabled = isContributionModeEnabled(currentState);
const blocked = isModeSwitchBlocked();
const activeElement = typeof document !== 'undefined' ? document.activeElement : null;
if (enabled && dom.selectPanelMode) {
dom.selectPanelMode.value = 'cpa';
@@ -272,6 +298,18 @@
if (dom.contributionModeText) {
dom.contributionModeText.textContent = DEFAULT_COPY;
}
if (dom.inputContributionNickname && activeElement !== dom.inputContributionNickname) {
const nextNickname = normalizeString(currentState.contributionNickname);
if (nextNickname || !normalizeString(dom.inputContributionNickname.value)) {
dom.inputContributionNickname.value = nextNickname;
}
}
if (dom.inputContributionQq && activeElement !== dom.inputContributionQq) {
const nextQq = normalizeString(currentState.contributionQq);
if (nextQq || !normalizeString(dom.inputContributionQq.value)) {
dom.inputContributionQq.value = nextQq;
}
}
if (dom.contributionOauthStatus) {
dom.contributionOauthStatus.textContent = getOauthStatusText(currentState);
}
@@ -350,6 +388,32 @@
}
});
dom.inputContributionNickname?.addEventListener('change', async () => {
try {
await syncContributionProfile({
nickname: dom.inputContributionNickname?.value,
qq: dom.inputContributionQq?.value,
});
} catch (error) {
helpers.showToast?.(error.message, 'error');
} finally {
render();
}
});
dom.inputContributionQq?.addEventListener('change', async () => {
try {
await syncContributionProfile({
nickname: dom.inputContributionNickname?.value,
qq: dom.inputContributionQq?.value,
});
} catch (error) {
helpers.showToast?.(error.message, 'error');
} finally {
render();
}
});
dom.btnOpenContributionUpload?.addEventListener('click', () => {
try {
helpers.openExternalUrl?.(contributionUploadUrl);