From 8ebe09eeb58067cffd87413ac0244bb0b12001fc Mon Sep 17 00:00:00 2001 From: liuwei Date: Tue, 10 Jun 2025 15:13:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4json=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=AD=98=E5=82=A8link=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- admin/dashboard/blueprints/message_push.py | 57 ++++++++++++------- .../templates/message_push_management.html | 27 +++++++-- wechat_ipad/client/tools.py | 22 ++++++- 3 files changed, 80 insertions(+), 26 deletions(-) diff --git a/admin/dashboard/blueprints/message_push.py b/admin/dashboard/blueprints/message_push.py index 59cae3e..7c3464c 100644 --- a/admin/dashboard/blueprints/message_push.py +++ b/admin/dashboard/blueprints/message_push.py @@ -149,34 +149,53 @@ def api_create_task(): @message_push_bp.route('/api/tasks/', methods=['PUT']) @login_required -def api_update_task(task_id): - """更新任务API""" +def update_task(task_id): + """更新任务""" try: - data = request.json + data = request.get_json() if not data: - return jsonify({"success": False, "error": "无效的请求数据"}), 400 - - # 获取任务 + return jsonify({ + 'success': False, + 'message': '无效的请求数据' + }) + + # 获取任务信息 db = current_app.dashboard_server.task_db task = db.get_task(task_id) if not task: - return jsonify({"success": False, "error": "任务不存在"}), 404 - + return jsonify({ + 'success': False, + 'message': '任务不存在' + }) + + # 检查任务状态 + if task['status'] not in ['draft', 'paused']: + return jsonify({ + 'success': False, + 'message': '只能编辑草稿或已暂停状态的任务' + }) + # 更新任务 - if not db.update_task(task_id, data): - return jsonify({"success": False, "error": "更新任务失败"}), 500 - - # 获取更新后的任务 - updated_task = db.get_task(task_id) + db.update_task(task_id, data) + + # 记录操作日志 + db.log_task_action({ + 'log_id': f"log_{datetime.now().strftime('%Y%m%d%H%M%S')}", + 'task_id': task_id, + 'action': 'update', + 'user_id': session.get('user_id'), + 'changes': data + }) + return jsonify({ - "success": True, - "data": { - "task": updated_task - } + 'success': True, + 'message': '更新成功' }) except Exception as e: - logger.error(f"更新任务失败: {e}") - return jsonify({"success": False, "error": str(e)}), 500 + return jsonify({ + 'success': False, + 'message': f'更新失败: {str(e)}' + }) @message_push_bp.route('/api/tasks/', methods=['DELETE']) diff --git a/admin/dashboard/templates/message_push_management.html b/admin/dashboard/templates/message_push_management.html index c935ab5..73d201e 100644 --- a/admin/dashboard/templates/message_push_management.html +++ b/admin/dashboard/templates/message_push_management.html @@ -564,15 +564,23 @@ new Vue({ formData.content_link = JSON.stringify(formData.content_link); } - const response = await axios.post('/message_push/api/tasks', formData); + let response; + if (formData.task_id) { + // 更新任务 + response = await axios.put(`/message_push/api/tasks/${formData.task_id}`, formData); + } else { + // 创建新任务 + response = await axios.post('/message_push/api/tasks', formData); + } + if (response.data.success) { - this.$message.success('保存任务成功'); + this.$message.success(formData.task_id ? '更新任务成功' : '创建任务成功'); this.taskDialogVisible = false; this.loadTasks(); this.loadStatistics(); } } catch (error) { - this.$message.error('保存任务失败'); + this.$message.error(formData.task_id ? '更新任务失败' : '创建任务失败'); } } }); @@ -844,7 +852,18 @@ new Vue({ return statusMap[status] || ''; }, formatDateTime(datetime) { - return new Date(datetime).toLocaleString(); + if (!datetime) return ''; + // 创建日期对象并转换为本地时间 + const date = new Date(datetime); + // 使用 padStart 确保月份和日期是两位数 + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + + return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; }, refreshTasks() { this.loadTasks(); diff --git a/wechat_ipad/client/tools.py b/wechat_ipad/client/tools.py index 83b6a99..693e089 100644 --- a/wechat_ipad/client/tools.py +++ b/wechat_ipad/client/tools.py @@ -69,9 +69,9 @@ class ToolMixin(WechatAPIClientBase): return json_resp.get("Data").get("data").get("buffer") else: self.error_handler(json_resp) - - async def download_attach_xml(self, xml_str: str) -> str: - #读取消息信息,进行处理 + + async def download_attach_xml(self, xml_str: str) -> str: + # 读取消息信息,进行处理 import xml.etree.ElementTree as ET root = ET.fromstring(xml_str) appmsg = root.find("appmsg") @@ -146,6 +146,22 @@ class ToolMixin(WechatAPIClientBase): else: self.error_handler(json_resp) + async def friend_circle_upload(self, base64: str) -> str: + # / FriendCircle / Upload + + if not self.wxid: + raise UserLoggedOut("请先登录") + + async with aiohttp.ClientSession() as session: + json_param = {"Wxid": self.wxid, "Base64": base64} + response = await session.post(f'http://{self.ip}:{self.port}/api/FriendCircle/Upload', json=json_param) + json_resp = await response.json() + + if json_resp.get("Success"): + return json_resp.get("Data").get("ThumbUrls")[0].get("Url") + else: + self.error_handler(json_resp) + async def set_step(self, count: int) -> bool: """设置步数。