From fe8c6b94ae30ff00feac0a1cb73102c19e7b7e41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=93=AD=E5=9D=A4?= <10372463+ming-kun@user.noreply.gitee.com> Date: Fri, 27 Mar 2026 21:56:19 +0800 Subject: [PATCH] modified: assets/convert.js modified: assets/dedupe.js modified: assets/split.js modified: blueprints/__pycache__/brand.cpython-311.pyc modified: blueprints/__pycache__/brand.cpython-39.pyc new file: blueprints/communication.py modified: config.py modified: main.py modified: new_web_source/convert.html modified: new_web_source/dedupe.html modified: new_web_source/split.html --- .../__pycache__/brand.cpython-311.pyc | Bin 24298 -> 45865 bytes .../__pycache__/brand.cpython-39.pyc | Bin 19360 -> 20788 bytes app/blueprints/communication.py | 18 ++++++++ app/config.py | 15 ++++++- app/main.py | 41 +++++++----------- 5 files changed, 47 insertions(+), 27 deletions(-) create mode 100644 app/blueprints/communication.py diff --git a/app/blueprints/__pycache__/brand.cpython-311.pyc b/app/blueprints/__pycache__/brand.cpython-311.pyc index 8731fea1cc2b1607ae4bcabf76ac35ed485ae17f..d6c2ef1bd6e7f11f8de8f5719ffb7eae4e36024a 100644 GIT binary patch literal 45865 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 W)+W|eyuBCUxw;ysI2M&nX8%844+)9@ literal 24298 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

=GUKf5 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 Bf-nF8 diff --git a/app/blueprints/__pycache__/brand.cpython-39.pyc b/app/blueprints/__pycache__/brand.cpython-39.pyc index bac8622ca9264917ead9d13f915e6485ffa7227b..fff3b6d730843c2562e32b2cc7ae8b77afd0952c 100644 GIT binary patch delta 8766 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 delta 7396 zcmd5>d5|2{dGFWV)6+B4JI5Zg_pM!N(5|$*y3p!AErAYs|>h zJ&f_n0aVsuJwq@Ed&XruP$gu8a8MKo4t8RLFF|4_nE-_o3yYLZVh0C`qENo?&1iQe zAXTZ#AJNwQ`n~Uc@AbRB-}im3r@v0}e@gtZiVCj;|GxI<3-OD?U-CB*_NBSk<>aI% z>Y;=xNpH#*^`(rcK_sZF$%>Re>Q4ot0a14)gQ-w7B+6Q{GF26=N>xXzQ#H|=R5%(= z)kbSmbs{RPu8RQnUxkz2)*ebN-|h?JL*%X$AEk zlA;4NK!fmHKtr?=o(pLet%m0!T0_I|Tuf_e9XyxNdYWs1!nJfgZKO?yNOUP}rY#^D zq^-0Kp3BUx#B$nBJN6RVc|;dSE~ZP$(se?5t&lFI zgJtP@@$zLeUcQ{JD7S48Z3DD_<nn`3r7 zljhyV8dp)-YuY?%^zv7q2Lm- zfS(VxH!Xr!vBdyIEpCm(lV;Q%OU8#Xmc`caicsUm<*2X}A%t2=JZ%?MJDxI&YG%w# z7gc7)D2s?T%VrU8)SJu<$C5*1F?(OpJ#Lw7C{B4IWRjcs`A{#3@()Ark+uBY%HPA9 z_CarxS^RfZE65<9TRk}IR(uyl_$RRibPewt zPmdOL+>D`dmVDgB?f`jIH}5ou$L$P**L<<5q3-|)UxA-EL{0WyVjWN$Hvrze|IaQK zzIfr@b8mh5E36X)kISr$|FWsOALqt;0E%idZrMc_i>3FPViIf+#Y!rkW_T@FE5ZQp zZJsp`cb8?b*<-WVu(>BTJX-XQWLPR@51Drkvm2o;Qo$NgkMUe{-QYMD#a8ael7lb- z5Ot4?+vCi%idw0_K7&oW5SkF~<}Ww5k%#ynnmg z#F;l+my&LwE8ZivO1xIAPAMuZc7So{!M@Blw9l3QC~?-_K_27}v@grymLWT@gP(O2 zU}Bps}k6l1^S8Jb<~61HEEYby;nR@9MY-F8j+J zZTsL7;0-CdOvWZ+JcEUYH8CwbP);l2C7SWlGS~}SCP{PWjnb?S9sO3RejUaA> z*cX*C6nq5%M`648Q0Lrc4~%71LS0hvEO3jf%csNgXP)SsLpm3r_CkR7$!@k8o)I}} z#P(R3YKyzXdU)9~ovt2dU--I1~Y>G$N5)iOu z07dmcEIC@@4rGy{o0-WHD=>2`3HP{kk905m|9jNQ*}LQ79M-}bHnN8S*&_�_-dwKYI)%Uj?{))a+|0x$2Zp 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 diff --git a/app/blueprints/communication.py b/app/blueprints/communication.py new file mode 100644 index 0000000..7d85a76 --- /dev/null +++ b/app/blueprints/communication.py @@ -0,0 +1,18 @@ +from queue import Empty + +from flask import Blueprint, jsonify + +from config import JSON_TASK_QUEUE + + +communication_bp = Blueprint('communication', __name__) + + +@communication_bp.route('/api/amazon/del_brand', methods=['GET', 'POST']) +def del_brand(): + """返回队列中的一个元素;队列为空时返回空提示。""" + try: + item = JSON_TASK_QUEUE.get_nowait() + return jsonify({'success': True, 'data': item}) + except Empty: + return jsonify({'success': False, 'message': '队列为空', 'data': None}) diff --git a/app/config.py b/app/config.py index fea1dec..bfdfd2a 100644 --- a/app/config.py +++ b/app/config.py @@ -5,6 +5,7 @@ STITCH_WORKFLOW_ID = "7608813873483300907" import os from dotenv import load_dotenv +from queue import Queue load_dotenv() _base_url = os.getenv("base_url","http://159.75.121.33:15124") @@ -38,11 +39,21 @@ os.environ['OSS_ACCESS_KEY_SECRET'] = accessKeySecret os.environ['SECRET_KEY'] = "ddffc7c1d02121d9554d7b080b2511b6" -debug = False -version = "1.0.17" +debug = True +version = "1.0.13" APP_UPDATE_URL = f"{_base_url}/api/version/latest" # 检测更新接口地址,返回 { "file_url": "...", "version": "x.x.x" } os.environ['APP_VERSION'] = version os.environ['APP_UPDATE_URL'] = APP_UPDATE_URL +# 队列 +JSON_TASK_QUEUE = Queue() + + + + + + + + diff --git a/app/main.py b/app/main.py index e13472b..2fa401f 100644 --- a/app/main.py +++ b/app/main.py @@ -1,7 +1,7 @@ """ 基于 pywebview 实现的跨平台 UI,需先登录方可使用 """ -from config import cache_path,debug,version,JAVA_API_BASE +from config import cache_path,debug,version,JAVA_API_BASE,JSON_TASK_QUEUE import datetime import json import sys @@ -234,6 +234,19 @@ class WindowAPI: except Exception as e: return {'success': False, 'error': str(e)} + def enqueue_json(self, data): + """保存任务到队列""" + try: + payload = data + if isinstance(data, str): + payload = json.loads(data) + if not isinstance(payload, (dict, list)): + return {'success': False, 'error': '仅支持 JSON 对象或数组'} + JSON_TASK_QUEUE.put(payload) + return {'success': True, 'queue_size': JSON_TASK_QUEUE.qsize()} + except Exception as e: + return {'success': False, 'error': str(e)} + def _select_folder_win32(): """Windows: 用 ctypes 调用系统文件夹选择对话框,打包成 exe 后也能正常弹窗(不依赖 tkinter)""" try: @@ -279,24 +292,6 @@ def _select_folder_win32(): return '' -# def _select_folder_tk(): -# """使用 tkinter 选择文件夹(在非 Windows 或作为后备)""" -# try: -# -# root = tkinter.Tk() -# root.withdraw() -# root.attributes('-topmost', True) -# path = filedialog.askdirectory(title='选择保存图片的文件夹') -# try: -# root.destroy() -# except Exception: -# pass -# return path if path else '' -# except Exception as e: -# print("tkinter 选择文件夹失败:", e) -# return '' - - def _select_folder_tk(): import tkinter as tk from tkinter import filedialog @@ -323,10 +318,6 @@ def _select_folder_tk(): def select_folder(): """弹窗选择文件夹,返回路径(空字符串表示取消)。Windows 打包 exe 时优先用系统 API 避免 tkinter 不弹窗。""" - # if sys.platform == 'win32': - # path = _select_folder_win32() - # if path: - # return path return _select_folder_tk() @@ -356,9 +347,9 @@ def main(): ) api = WindowAPI(window) window.expose(api.close, api.minimize, api.maximize, api.toggle_maximize, generate_images, api.save_image, api.save_image_to_folder, api.select_folder, api.select_brand_xlsx_files, api.select_brand_folder, - api.save_file_from_url, api.save_template_xlsx,api.save_template_zip,api.upload_file_to_java) + api.save_file_from_url, api.save_template_xlsx,api.save_template_zip,api.upload_file_to_java,api.enqueue_json) webview.start( - debug=False, + debug=True, storage_path=cache_path, private_mode=False )