From b6080d5e16b30b638b1f9a4168dbc3966da0f6ac Mon Sep 17 00:00:00 2001 From: taiyi Date: Wed, 22 Jul 2026 10:07:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E5=85=A5=E5=8D=A1=E5=AF=86=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- authApi.js | 382 +++++++++++++++++++++++++++++ server/data.db-shm | Bin 32768 -> 32768 bytes server/data.db-wal | Bin 4128272 -> 4128272 bytes server/index.js | 6 + server/routes/generate.js | 162 ++++++++---- web/src/App.jsx | 92 +++---- web/src/auth.js | 117 +++++++++ web/src/components/AuthToolbar.jsx | 82 +++++++ web/src/pages/Products.jsx | 65 ++++- 9 files changed, 807 insertions(+), 99 deletions(-) create mode 100644 authApi.js create mode 100644 web/src/auth.js create mode 100644 web/src/components/AuthToolbar.jsx diff --git a/authApi.js b/authApi.js new file mode 100644 index 0000000..fc93958 --- /dev/null +++ b/authApi.js @@ -0,0 +1,382 @@ +/** + * 授权验证 API 客户端 + * 负责与后端 Python 验证服务进行通信 + * Author: taiyi1224 + */ + +// 配置常量 +const AUTH_CONFIG = { + // ⚠️ 请修改为你的实际服务器地址 + API_URL: 'http://km.taisan.online/api/v1', + SOFTWARE_ID: 'QFFB', // 软件 ID(与后端一致) + SECRET_KEY: 'taiyi1224', // 密钥(与后端一致) + TIMEOUT: 10000, // 请求超时时间(毫秒) + RECHECK_INTERVAL: 60 * 60 * 1000 // ✅ 联网复查间隔:1小时(毫秒),可按需调整 +}; + +/** + * 生成签名 + */ +async function generateSignature(data) { + const encoder = new TextEncoder(); + const signatureData = `${data.software_id}${data.license_key}${data.machine_code}${data.timestamp}`; + const combined = signatureData + AUTH_CONFIG.SECRET_KEY; + const hashBuffer = await crypto.subtle.digest('SHA-256', encoder.encode(combined)); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + return hashArray.map(b => b.toString(16).padStart(2, '0')).join(''); +} + +/** + * 获取机器码(基于浏览器指纹) + */ +async function getMachineCode() { + const cacheKey = 'tb_auth_machine_code'; + const cached = localStorage.getItem(cacheKey); + if (cached) return cached; + + try { + const fingerprint = [ + navigator.userAgent, + navigator.language, + navigator.platform, + screen.width, + screen.height, + new Date().getTimezoneOffset(), + ].join('|'); + + const encoder = new TextEncoder(); + const hashBuffer = await crypto.subtle.digest('SHA-256', encoder.encode(fingerprint)); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const machineCode = hashArray.map(b => b.toString(16).padStart(2, '0')).join('').substring(0, 32).toUpperCase(); + + localStorage.setItem(cacheKey, machineCode); + return machineCode; + } catch (error) { + console.error('[Auth] 生成机器码失败:', error); + const fallback = 'BROWSER_' + Date.now().toString(36).toUpperCase(); + localStorage.setItem(cacheKey, fallback); + return fallback; + } +} + +/** + * 测试服务器连接 + */ +async function testConnection() { + try { + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), AUTH_CONFIG.TIMEOUT); + + const response = await fetch(`${AUTH_CONFIG.API_URL}/auth/verify`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + software_id: AUTH_CONFIG.SOFTWARE_ID, + license_key: 'TEST', + machine_code: await getMachineCode(), + timestamp: Math.floor(Date.now() / 1000), + signature: 'test' + }), + signal: controller.signal + }); + + clearTimeout(timeoutId); + return { success: true, message: '服务器连接正常' }; + } catch (error) { + if (error.name === 'AbortError') { + return { success: false, message: `连接超时,服务器可能无响应:${AUTH_CONFIG.API_URL}` }; + } + return { success: false, message: `无法连接到服务器:${error.message}\n请检查服务器地址是否正确:${AUTH_CONFIG.API_URL}` }; + } +} + +/** + * 在线验证卡密 + */ +async function verifyLicense(licenseKey) { + try { + const machineCode = await getMachineCode(); + const timestamp = Math.floor(Date.now() / 1000); + + const signature = await generateSignature({ + software_id: AUTH_CONFIG.SOFTWARE_ID, + license_key: licenseKey, + machine_code: machineCode, + timestamp: timestamp + }); + + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), AUTH_CONFIG.TIMEOUT); + + const response = await fetch(`${AUTH_CONFIG.API_URL}/auth/verify`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + software_id: AUTH_CONFIG.SOFTWARE_ID, + license_key: licenseKey, + machine_code: machineCode, + timestamp: timestamp, + signature: signature, + software_version: chrome.runtime.getManifest().version + }), + signal: controller.signal + }); + + clearTimeout(timeoutId); + + if (!response.ok) { + let errorMsg = `服务器返回错误:${response.status}`; + try { + const errorData = await response.json(); + errorMsg = errorData.message || errorMsg; + } catch (e) {} + + switch (response.status) { + case 503: errorMsg = '服务器暂时不可用,请稍后重试'; break; + case 500: errorMsg = '服务器内部错误,请联系管理员'; break; + case 404: errorMsg = 'API 接口不存在,请检查 API 地址'; break; + case 401: errorMsg = '签名验证失败,请检查密钥配置'; break; + } + + return { success: false, message: errorMsg }; + } + + const result = await response.json(); + + if (!result.success) { + return { success: false, message: result.message || '验证失败' }; + } + + const data = result.data || {}; + + return { + success: true, + message: result.message || '验证成功', + data: { + expire_time: data.expire_time, + machine_code: machineCode, + last_check: new Date().toISOString(), + license_key: data.license_key || licenseKey, + type: data.type, + type_name: data.type_name || '', + remaining_days: data.remaining_days, + product_name: data.product_name || '' + } + }; + + } catch (error) { + if (error.name === 'AbortError') { + return { success: false, message: `连接超时(${AUTH_CONFIG.TIMEOUT / 1000}秒),请检查网络连接或服务器地址:${AUTH_CONFIG.API_URL}` }; + } + return { success: false, message: `网络请求异常:${error.message}\n请检查网络连接和服务器地址:${AUTH_CONFIG.API_URL}` }; + } +} + +/** + * 解绑卡密 + */ +async function unbindLicense(licenseKey) { + try { + const machineCode = await getMachineCode(); + const timestamp = Math.floor(Date.now() / 1000); + + const signature = await generateSignature({ + software_id: AUTH_CONFIG.SOFTWARE_ID, + license_key: licenseKey, + machine_code: machineCode, + timestamp: timestamp + }); + + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), AUTH_CONFIG.TIMEOUT); + + const response = await fetch(`${AUTH_CONFIG.API_URL}/auth/unbind`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + software_id: AUTH_CONFIG.SOFTWARE_ID, + license_key: licenseKey, + machine_code: machineCode, + timestamp: timestamp, + signature: signature + }), + signal: controller.signal + }); + + clearTimeout(timeoutId); + + if (!response.ok) { + let errorMsg = `服务器返回错误:${response.status}`; + try { + const errorData = await response.json(); + errorMsg = errorData.message || errorMsg; + } catch (e) {} + + switch (response.status) { + case 503: errorMsg = '服务器暂时不可用,请稍后重试'; break; + case 500: errorMsg = '服务器内部错误,请联系管理员'; break; + case 404: errorMsg = 'API 接口不存在,请检查 API 地址'; break; + case 401: errorMsg = '签名验证失败,请检查密钥配置'; break; + } + + return { success: false, message: errorMsg }; + } + + const result = await response.json(); + return { + success: result.success || false, + message: result.message || (result.success ? '解绑成功' : '解绑失败') + }; + + } catch (error) { + if (error.name === 'AbortError') { + return { success: false, message: `连接超时,请检查网络连接` }; + } + return { success: false, message: `网络请求失败:${error.message}` }; + } +} + +/** + * 解绑设备 + */ +async function unbindDevice() { + try { + const machineCode = await getMachineCode(); + const timestamp = Math.floor(Date.now() / 1000); + + const signature = await generateSignature({ + software_id: AUTH_CONFIG.SOFTWARE_ID, + machine_code: machineCode, + timestamp: timestamp + }); + + const controller = new AbortController(); + const timeoutId = setTimeout(() => controller.abort(), AUTH_CONFIG.TIMEOUT); + + const response = await fetch(`${AUTH_CONFIG.API_URL}/auth/unbind_device`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + software_id: AUTH_CONFIG.SOFTWARE_ID, + machine_code: machineCode, + timestamp: timestamp, + signature: signature + }), + signal: controller.signal + }); + + clearTimeout(timeoutId); + + if (!response.ok) { + let errorMsg = `服务器返回错误:${response.status}`; + try { + const errorData = await response.json(); + errorMsg = errorData.message || errorMsg; + } catch (e) {} + + switch (response.status) { + case 503: errorMsg = '服务器暂时不可用,请稍后重试'; break; + case 500: errorMsg = '服务器内部错误,请联系管理员'; break; + case 404: errorMsg = 'API 接口不存在,请检查 API 地址'; break; + case 401: errorMsg = '签名验证失败,请检查密钥配置'; break; + } + + return { success: false, message: errorMsg }; + } + + const result = await response.json(); + return { + success: result.success || false, + message: result.message || (result.success ? '设备解绑成功' : '解绑失败') + }; + + } catch (error) { + if (error.name === 'AbortError') { + return { success: false, message: `连接超时,请检查网络连接` }; + } + return { success: false, message: `网络请求失败:${error.message}` }; + } +} + +/** + * 保存授权信息到本地存储 + */ +async function saveAuthData(authData) { + await chrome.storage.local.set({ tb_auth_data: authData }); +} + +/** + * 获取本地存储的授权信息 + */ +async function getAuthData() { + const result = await chrome.storage.local.get('tb_auth_data'); + return result.tb_auth_data || null; +} + +/** + * 清除授权信息 + */ +async function clearAuthData() { + await chrome.storage.local.remove('tb_auth_data'); +} + +/** + * ✅ 核心修复:检查是否已授权 + * + * 逻辑: + * 1. 本地无数据 → 未授权 + * 2. 距上次联网复查超过 RECHECK_INTERVAL → 联网验证 + * - 服务器返回成功 → 刷新 last_check,授权有效 + * - 服务器返回失败(卡密被删/禁用/过期)→ 清除本地授权,返回未授权 + * 3. 未超过间隔 → 使用本地缓存,避免频繁请求 + */ +async function isAuthorized() { + const authData = await getAuthData(); + + // 1. 本地没有授权数据 + if (!authData || !authData.license_key) { + return false; + } + + const now = Date.now(); + const lastCheck = authData.last_check ? new Date(authData.last_check).getTime() : 0; + const elapsed = now - lastCheck; + + // 2. 超过复查间隔,联网重新验证 + if (elapsed >= AUTH_CONFIG.RECHECK_INTERVAL) { + console.log('[Auth] 超过复查间隔,开始联网验证...'); + + const result = await verifyLicense(authData.license_key); + + if (result.success) { + // 验证通过,更新本地缓存(刷新 last_check) + await saveAuthData(result.data); + console.log('[Auth] 联网验证通过,授权有效'); + return true; + } else { + // 验证失败:卡密已被删除/禁用/过期,清除本地授权 + await clearAuthData(); + console.warn('[Auth] 联网验证失败,已清除本地授权:', result.message); + return false; + } + } + + // 3. 未超过间隔,使用本地缓存 + const remainingMin = Math.round((AUTH_CONFIG.RECHECK_INTERVAL - elapsed) / 60000); + console.log(`[Auth] 使用本地缓存,距下次复查还有 ${remainingMin} 分钟`); + return true; +} + +// 导出 API +export { + AUTH_CONFIG, + testConnection, + verifyLicense, + unbindLicense, + unbindDevice, + getMachineCode, + saveAuthData, + getAuthData, + clearAuthData, + isAuthorized +}; \ No newline at end of file diff --git a/server/data.db-shm b/server/data.db-shm index 3be63226de8ec86439ff17e941968450956a2862..cffd42b97ba11422650734d2906b6f24c7fcfb46 100644 GIT binary patch delta 2446 zcmbtUYgANa6usX*b74?Kgi#Oy2Sh{#6ciQ27rqb#0TBchP*4O-%?F|qk|~vyVV_x< zm6%$Mk3`B>FD-lds4Oy5Gczl*mzt%OY2TUd%$jAts#$BVd(J+4@B2MwrltlpHCXI_ zHcE4Rgr<2nvqr@0rLAdyXKktRi;P$$zVNWOMFKmyf}_X*|$m zo?DNG-DliaUa`c4s9vo^vnT{BbW})CNLO&>!wi0$6eeE}?nWsT%NXG+Yjl%HlbNDj zRGQ)PR?h&1t_p(`k`+cOFwbv{Q%GHT$xqoDgzt#qsx4M%uHdQAO2J3LDOI)WVnS6P zuD~AVeHC~Et)+1D)l*b8nHQ$>a!TY;Y9CXgD%S+oj8Q1Mh3}zy`%Gr)e)@RTO|U2B zsj7sx7{iro5+6kl>u%vYs6Li?r$3+lBHw<1Jk3=YD>F^)gR+gzHJ2}f6$N&Gma6{t zXE`q*Q*op1{zz4E$9{JOKIR|=zR)cDs=0Hdw>2hwf)1DS1Qq9};Lj%+)kRh8YNNne zr3zCOnB!-eOIw{&9$vd7eoxkSM3VhMM6%rNryd6pGEH`?tb*^OteB&J}b=?Q2 z6gpHcPflZ})7^?y|BDUzN5X$h#ZYfbpn)`)M$kygqA`?1c~nS~XeyPnwOUpunMF6lZk0EZk`tSw75os4 zu1LfPj6xntaU14fA@0TlkXVOjupK+`1`gsQoWa+)gkSL+t|N>i!^vMeY6NEJ8}U3| zFuE{t!KktttA=(LXvO;VR4O(Ze7N||saTk-6h3x^UX5Bj;!HW~)KsQ63H?z#g_j&d zc{t6}6a^3Vt&tV!+mdvIp(A>s5Ji}X8r+G;um&&V6?}>l2%;_&N!_SB^`UqgL`jrF zsWh6hDVN4l5ly5rj!Ka0M(q%7jJH_b3WQBGOK~p~3vfRkGWyVF!^AOsjtnpT7%SYHArw6@%n%G|zD)BHv&A)WUBnn%usmOEH4TQw*|p}4+Ai&oX5qzz z3Q89v4OxbJ2XsMSsQ*s;Z{@J8E8U_8VGz;{Ce(6Gn<%!5Y}8=`Hsd|~08b8GExZj$ zggjSfvAUxZ`k)whVJ%+6DG0Js4@#t=luqNQge?_vMY&Bcz!WSttYLEZG%p_u+F=Zq zV+-EK`}h$pSiD>WI`hv?w^+@HKs-vY6i;9uJ_9I(dQv|cMx$svO}6Lj@uDSK8@6;Y z))}yKhQGHLaxfoT(TET56TH~4L>A3F9qR!rIwKOXNWeHuMirLfVLXZ5*pH8K8bqNK zPI1(qhEoPjpebw(Xk0$4zc3F#8qT35Gb{9W@FBi(?(FpJY|{{!c$8%xqK(ipwAS3L z7gwC?+A-Ir@5Spl?sT1+XEhCl&ca$*TVd0G!Bzb39B-d*6Yo0hCn|ls{E>mVsK)_( z12?uUmrEDe%-7JC0%;l(m2%rco7m=b9bXh3?g<~XML(n<6H_q*^KcJVU_G8i1Kz|T ze1Y?DXLF8RQe`v!fdFo*#6=?|OXgHt+@@hR+VEhCJXY=9EDO)!FusMEsXAG+xaKeN CZXt^R delta 660 zcmb7=Pe@cz6vpqFY0N+_A|ivUHW5aNGq!0H4@omLOPCa0I9ia5$u!6`PW5{8kaXc9 zqA#REBScY04fVogtxDRJE=ocoM5KkdG2G-rs&nsi;kE;hbI-r;{LXV-pX>TE!Ob&5 zTRwjzMBx#i5I6b#dnC8gms;K_j?ue~(_?SD$|K8bKI{4a_G@izTKDfE^RgmOZ1Gls zmb}XO#f_uttW1TKC5HpZS|#{$agu`)f>V``rDz&|s%qI^r=SYSucYki3PMr3A~TyjL3F-gzs!pPdmcIiP2;ILQ)Uy(LSs8V(Z3n&JG5~#T)U7RZb8! z=ygUJk2`0$>IC*g2hAEbOWODuGhBGol{G(L@s{K+y*7!>ZjbrgLAQ%s+`F{>_Bw;q ztHH#14WirQSnn}(feYf2xN6p8A?d09xMRpLkn-ZWUeA9|>m#4x;awBcE{~NF*6x>c X+D4z9_1K#nP122TP9ggja5L^d31ti! diff --git a/server/data.db-wal b/server/data.db-wal index 7cb1473e2e1f0550bf169b04f26b6a763815e0a6..94f65a1ca6d1fb484651a2bbaab02b9ccf5ccd5b 100644 GIT binary patch delta 151930 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 { console.log(`Server running at http://localhost:${PORT}`); console.log(`API: http://localhost:${PORT}/api`); }); + diff --git a/server/routes/generate.js b/server/routes/generate.js index bfd3795..162c772 100644 --- a/server/routes/generate.js +++ b/server/routes/generate.js @@ -4,19 +4,18 @@ const { generateImage } = require('../lib/generate-image'); function createGenerateRoutes(db) { const router = express.Router(); + const runningJobs = new Set(); - // Helper: call AI text generation for a single prompt async function callAI(prompt, maxTokens = 2000) { const aiConfig = {}; const keys = ['ai_api_key', 'ai_base_url', 'ai_model', 'ai_temperature']; - for (const k of keys) { - const row = db.prepare('SELECT value FROM configs WHERE key = ?').get(k); - aiConfig[k] = row?.value || ''; + for (const key of keys) { + const row = db.prepare('SELECT value FROM configs WHERE key = ?').get(key); + aiConfig[key] = row?.value || ''; } if (!aiConfig.ai_api_key) throw new Error('AI API key not configured. Please set it in Settings.'); - const baseUrl = aiConfig.ai_base_url || 'https://api.deepseek.com'; - const response = await fetch(`${baseUrl}/chat/completions`, { + const response = await fetch(`${aiConfig.ai_base_url || 'https://api.deepseek.com'}/chat/completions`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -39,7 +38,6 @@ function createGenerateRoutes(db) { return data.choices?.[0]?.message?.content || ''; } - // Helper: generate title for a note async function generateTitle(productTitle) { const titleRow = db.prepare('SELECT value FROM configs WHERE key = ?').get('title_prompt_template'); const fallbackRow = db.prepare('SELECT value FROM configs WHERE key = ?').get('prompt_template'); @@ -50,7 +48,6 @@ function createGenerateRoutes(db) { return title || productTitle; } - // Helper: generate content for a note async function generateContent(productTitle) { const contentRow = db.prepare('SELECT value FROM configs WHERE key = ?').get('content_prompt_template'); const fallbackRow = db.prepare('SELECT value FROM configs WHERE key = ?').get('prompt_template'); @@ -58,11 +55,10 @@ function createGenerateRoutes(db) { const prompt = template.replace(/\{\{title\}\}/g, productTitle); const generated = await callAI(prompt, 2000); const topicMatches = generated.match(/#[^\s#]+/g) || []; - const topics = topicMatches.map(t => t.replace('#', '').trim()); + const topics = topicMatches.map((topic) => topic.replace('#', '').trim()); return { content: generated.trim(), topics }; } - // Helper: generate title and content together (legacy fallback) async function generateText(productTitle) { const title = await generateTitle(productTitle); const { content, topics } = await generateContent(productTitle); @@ -70,12 +66,10 @@ function createGenerateRoutes(db) { } async function createNoteForProduct(product, options = {}) { - // Dedup: if a note is already being generated for this product, skip const existing = db.prepare( "SELECT id, title, content, topics, image_paths, image_prompt FROM notes WHERE product_id = ? AND status = 'generating' ORDER BY created_at DESC LIMIT 1" ).get(product.id); if (existing) { - console.log(`[generate] Note already generating for product ${product.id}, reusing ${existing.id}`); return { noteId: existing.id, title: existing.title, @@ -87,9 +81,8 @@ function createGenerateRoutes(db) { } const noteId = uuidv4(); - db.prepare( - "INSERT INTO notes (id, product_id, shop_id, title, content, status) VALUES (?, ?, ?, ?, '', 'generating')" - ).run(noteId, product.id, product.shop_id, product.title); + db.prepare("INSERT INTO notes (id, product_id, shop_id, title, content, status) VALUES (?, ?, ?, ?, '', 'generating')") + .run(noteId, product.id, product.shop_id, product.title); const { title, content, topics } = await generateText(product.title); const imageResult = await generateImage(db, noteId, product.title, options); @@ -99,16 +92,99 @@ function createGenerateRoutes(db) { db.prepare( "UPDATE notes SET title=?, content=?, topics=?, image_paths=?, image_prompt=?, status='generated', updated_at=CURRENT_TIMESTAMP WHERE id=?" ).run(title, content, JSON.stringify(topics), JSON.stringify(imagePaths), imagePrompt, noteId); - db.prepare( - "UPDATE products SET status='generated', updated_at=CURRENT_TIMESTAMP WHERE id=?" - ).run(product.id); + db.prepare("UPDATE products SET status='generated', updated_at=CURRENT_TIMESTAMP WHERE id=?").run(product.id); return { noteId, title, content, topics, imagePaths, imagePrompt }; } - // Generate note for a product using AI - router.post('/note', async (req, res) => { - const { product_id, shop_id } = req.body; + function updateJob(jobId, fields) { + const keys = Object.keys(fields); + if (keys.length === 0) return; + const setSql = keys.map((key) => `${key} = ?`).join(', '); + const values = keys.map((key) => fields[key]); + values.push(jobId); + db.prepare(`UPDATE generation_jobs SET ${setSql}, updated_at=CURRENT_TIMESTAMP WHERE id = ?`).run(...values); + } + + async function runGenerationJob(jobId, productIds, countPerProduct, options = {}) { + if (runningJobs.has(jobId)) return; + runningJobs.add(jobId); + try { + updateJob(jobId, { status: 'running', message: '开始生成' }); + let completedNotes = 0; + let failedNotes = 0; + + for (const productId of productIds) { + const product = db.prepare('SELECT * FROM products WHERE id = ?').get(productId); + if (!product) { + failedNotes += countPerProduct; + completedNotes += countPerProduct; + updateJob(jobId, { + completed_notes: completedNotes, + failed_notes: failedNotes, + current_product_id: productId, + current_product_title: '', + message: '商品不存在', + }); + continue; + } + + db.prepare("UPDATE products SET status='generating', updated_at=CURRENT_TIMESTAMP WHERE id=?").run(product.id); + updateJob(jobId, { + current_product_id: product.id, + current_product_title: product.title, + message: `正在生成:${product.title}`, + }); + + for (let index = 0; index < countPerProduct; index += 1) { + try { + await createNoteForProduct(product, options); + } catch (error) { + failedNotes += 1; + } finally { + completedNotes += 1; + updateJob(jobId, { + completed_notes: completedNotes, + failed_notes: failedNotes, + message: `进度 ${completedNotes}/${productIds.length * countPerProduct}`, + }); + } + } + + db.prepare("UPDATE products SET status='generated', updated_at=CURRENT_TIMESTAMP WHERE id=?").run(product.id); + } + + updateJob(jobId, { + status: 'completed', + message: failedNotes > 0 ? `完成,失败 ${failedNotes} 条` : '全部完成', + }); + } catch (error) { + updateJob(jobId, { status: 'failed', message: error.message }); + } finally { + runningJobs.delete(jobId); + } + } + + function enqueueGeneration(jobId, productIds, countPerProduct, options) { + setImmediate(() => { + runGenerationJob(jobId, productIds, countPerProduct, options); + }); + } + + router.get('/jobs', (req, res) => { + const { shop_id } = req.query; + let sql = 'SELECT * FROM generation_jobs WHERE 1=1'; + const params = []; + if (shop_id) { + sql += ' AND shop_id = ?'; + params.push(shop_id); + } + sql += ' ORDER BY created_at DESC LIMIT 20'; + res.json(db.prepare(sql).all(...params)); + }); + + router.post('/note', (req, res) => { + const { product_id, shop_id, count_per_product, image_count, image_size, image_prompt_template } = req.body; if (!product_id || !shop_id) { return res.status(400).json({ error: 'product_id and shop_id required' }); } @@ -116,21 +192,15 @@ function createGenerateRoutes(db) { const product = db.prepare('SELECT * FROM products WHERE id = ?').get(product_id); if (!product) return res.status(404).json({ error: 'Product not found' }); - db.prepare("UPDATE products SET status = 'generating', updated_at = CURRENT_TIMESTAMP WHERE id = ?").run(product_id); - - try { - const result = await createNoteForProduct(product); - res.json({ note_id: result.noteId, title: result.title, content: result.content, topics: result.topics, image_paths: result.imagePaths }); - } catch (error) { - db.prepare("UPDATE notes SET status='failed', error_message=?, updated_at=CURRENT_TIMESTAMP WHERE id=(SELECT id FROM notes WHERE product_id=? ORDER BY created_at DESC LIMIT 1)") - .run(error.message, product_id); - db.prepare("UPDATE products SET status='pending', updated_at=CURRENT_TIMESTAMP WHERE id=?") - .run(product_id); - res.status(500).json({ error: error.message }); - } + const repeatCount = Math.max(1, parseInt(count_per_product || '1', 10) || 1); + const jobId = uuidv4(); + db.prepare( + 'INSERT INTO generation_jobs (id, shop_id, status, total_products, total_notes, message) VALUES (?, ?, ?, ?, ?, ?)' + ).run(jobId, shop_id, 'pending', 1, repeatCount, '等待开始'); + enqueueGeneration(jobId, [product_id], repeatCount, { image_count, image_size, image_prompt_template }); + res.status(201).json({ job_id: jobId, status: 'pending' }); }); - // Generate image for a note router.post('/image', async (req, res) => { const { note_id } = req.body; if (!note_id) return res.status(400).json({ error: 'note_id required' }); @@ -152,10 +222,10 @@ function createGenerateRoutes(db) { }); async function batchGenerate(req, res) { - const { shop_id, product_ids, image_count, image_size, image_prompt_template } = req.body; + const { shop_id, product_ids, count_per_product, image_count, image_size, image_prompt_template } = req.body; if (!shop_id) return res.status(400).json({ error: 'shop_id required' }); - let sql = "SELECT * FROM products WHERE shop_id = ?"; + let sql = 'SELECT * FROM products WHERE shop_id = ?'; const params = [shop_id]; if (Array.isArray(product_ids) && product_ids.length > 0) { sql += ` AND id IN (${product_ids.map(() => '?').join(',')})`; @@ -164,19 +234,13 @@ function createGenerateRoutes(db) { const products = db.prepare(sql).all(...params); if (products.length === 0) return res.json({ count: 0, message: 'No pending products' }); - const results = []; - for (const product of products) { - try { - db.prepare("UPDATE products SET status = 'generating', updated_at = CURRENT_TIMESTAMP WHERE id = ?").run(product.id); - const result = await createNoteForProduct(product, { image_count, image_size, image_prompt_template }); - results.push({ product_id: product.id, note_id: result.noteId, title: result.title, images: result.imagePaths.length }); - } catch (error) { - results.push({ product_id: product.id, error: error.message }); - db.prepare("UPDATE products SET status = 'pending', updated_at = CURRENT_TIMESTAMP WHERE id = ?").run(product.id); - } - } - - return res.json({ total: products.length, results, images_generated: results.reduce((sum, item) => sum + (item.images || 0), 0) }); + const repeatCount = Math.max(1, parseInt(count_per_product || '1', 10) || 1); + const jobId = uuidv4(); + db.prepare( + 'INSERT INTO generation_jobs (id, shop_id, status, total_products, total_notes, message) VALUES (?, ?, ?, ?, ?, ?)' + ).run(jobId, shop_id, 'pending', products.length, products.length * repeatCount, '等待开始'); + enqueueGeneration(jobId, products.map((product) => product.id), repeatCount, { image_count, image_size, image_prompt_template }); + res.status(201).json({ job_id: jobId, total: products.length, total_notes: products.length * repeatCount }); } router.post('/', batchGenerate); diff --git a/web/src/App.jsx b/web/src/App.jsx index 83ae0d3..33c9483 100644 --- a/web/src/App.jsx +++ b/web/src/App.jsx @@ -1,5 +1,9 @@ -import { Routes, Route, NavLink, Navigate } from "react-router-dom"; +import { Routes, Route, NavLink, Navigate } from "react-router-dom"; +import { useState } from "react"; import { ToastProvider } from "./toast"; +import ErrorBoundary from "./ErrorBoundary"; +import LicenseGate from "./pages/LicenseGate"; +import AuthToolbar from "./components/AuthToolbar"; import Dashboard from "./pages/Dashboard"; import Shops from "./pages/Shops"; import Products from "./pages/Products"; @@ -8,30 +12,28 @@ import NotesUnapproved from "./pages/NotesUnapproved"; import SettingsDeepseek from "./pages/SettingsDeepseek"; import SettingsAgnes from "./pages/SettingsAgnes"; import SettingsPrompts from "./pages/SettingsPrompts"; -import { useState } from "react"; -import ErrorBoundary from "./ErrorBoundary"; const navSections = [ { title: "小红书管理", items: [ - { to: "/shops", label: "账号管理", icon: "🏪" }, - { to: "/products", label: "商品管理", icon: "📦" }, + { to: "/shops", label: "账号管理", icon: "店" }, + { to: "/products", label: "商品管理", icon: "品" }, ], }, { title: "笔记管理", items: [ - { to: "/notes/approved", label: "已审核笔记", icon: "✅" }, - { to: "/notes/unapproved", label: "未审核笔记", icon: "📝" }, + { to: "/notes/approved", label: "已审核笔记", icon: "审" }, + { to: "/notes/unapproved", label: "未审核笔记", icon: "待" }, ], }, { - title: "AI 管理", + title: "AI 配置", items: [ - { to: "/settings/deepseek", label: "Deep Seek 配置", icon: "🤖" }, - { to: "/settings/agnes", label: "Agnes 配置", icon: "🎨" }, - { to: "/settings/prompts", label: "提示词管理", icon: "💬" }, + { to: "/settings/deepseek", label: "DeepSeek 配置", icon: "D" }, + { to: "/settings/agnes", label: "Agnes 配置", icon: "A" }, + { to: "/settings/prompts", label: "提示词配置", icon: "P" }, ], }, ]; @@ -47,32 +49,26 @@ function getNavClass(isActive) { function Sidebar({ collapsed, onToggle }) { return ( -