提交暂存
This commit is contained in:
Binary file not shown.
Binary file not shown.
18
app/blueprints/communication.py
Normal file
18
app/blueprints/communication.py
Normal file
@@ -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})
|
||||||
@@ -5,6 +5,7 @@ STITCH_WORKFLOW_ID = "7608813873483300907"
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
|
from queue import Queue
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
_base_url = os.getenv("base_url","http://159.75.121.33:15124")
|
_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"
|
os.environ['SECRET_KEY'] = "ddffc7c1d02121d9554d7b080b2511b6"
|
||||||
|
|
||||||
|
|
||||||
debug = False
|
debug = True
|
||||||
version = "1.0.17"
|
version = "1.0.13"
|
||||||
APP_UPDATE_URL = f"{_base_url}/api/version/latest" # 检测更新接口地址,返回 { "file_url": "...", "version": "x.x.x" }
|
APP_UPDATE_URL = f"{_base_url}/api/version/latest" # 检测更新接口地址,返回 { "file_url": "...", "version": "x.x.x" }
|
||||||
os.environ['APP_VERSION'] = version
|
os.environ['APP_VERSION'] = version
|
||||||
os.environ['APP_UPDATE_URL'] = APP_UPDATE_URL
|
os.environ['APP_UPDATE_URL'] = APP_UPDATE_URL
|
||||||
|
|
||||||
|
|
||||||
|
# 队列
|
||||||
|
JSON_TASK_QUEUE = Queue()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
41
app/main.py
41
app/main.py
@@ -1,7 +1,7 @@
|
|||||||
"""
|
"""
|
||||||
基于 pywebview 实现的跨平台 UI,需先登录方可使用
|
基于 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 datetime
|
||||||
import json
|
import json
|
||||||
import sys
|
import sys
|
||||||
@@ -234,6 +234,19 @@ class WindowAPI:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
return {'success': False, 'error': str(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():
|
def _select_folder_win32():
|
||||||
"""Windows: 用 ctypes 调用系统文件夹选择对话框,打包成 exe 后也能正常弹窗(不依赖 tkinter)"""
|
"""Windows: 用 ctypes 调用系统文件夹选择对话框,打包成 exe 后也能正常弹窗(不依赖 tkinter)"""
|
||||||
try:
|
try:
|
||||||
@@ -279,24 +292,6 @@ def _select_folder_win32():
|
|||||||
return ''
|
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():
|
def _select_folder_tk():
|
||||||
import tkinter as tk
|
import tkinter as tk
|
||||||
from tkinter import filedialog
|
from tkinter import filedialog
|
||||||
@@ -323,10 +318,6 @@ def _select_folder_tk():
|
|||||||
|
|
||||||
def select_folder():
|
def select_folder():
|
||||||
"""弹窗选择文件夹,返回路径(空字符串表示取消)。Windows 打包 exe 时优先用系统 API 避免 tkinter 不弹窗。"""
|
"""弹窗选择文件夹,返回路径(空字符串表示取消)。Windows 打包 exe 时优先用系统 API 避免 tkinter 不弹窗。"""
|
||||||
# if sys.platform == 'win32':
|
|
||||||
# path = _select_folder_win32()
|
|
||||||
# if path:
|
|
||||||
# return path
|
|
||||||
return _select_folder_tk()
|
return _select_folder_tk()
|
||||||
|
|
||||||
|
|
||||||
@@ -356,9 +347,9 @@ def main():
|
|||||||
)
|
)
|
||||||
api = WindowAPI(window)
|
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,
|
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(
|
webview.start(
|
||||||
debug=False,
|
debug=True,
|
||||||
storage_path=cache_path,
|
storage_path=cache_path,
|
||||||
private_mode=False
|
private_mode=False
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user