workflow_approval/wwwroot/api/task_list.dspy
yumoqing 5472211972 sync: local modifications to workflow_approval
- Updated all model JSON files: approval_instance, approval_step, approval_task, approval_workflow
- Updated init.py, mysql.ddl.sql, mobile_base.ui
- Added __init__.py
- Added API files: instance CRUD, step CRUD, task approve/reject/list, workflow CRUD
- Added UI files: base.ui, approval_instance.ui, approval_task.ui, approval_workflow.ui
2026-04-28 18:55:29 +08:00

38 lines
1.3 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""List approval tasks"""
import json
result = {'success': False, 'rows': [], 'total': 0}
try:
dbname = get_module_dbname('workflow_approval')
ns = {
'page': int(params_kw.get('page', 1)),
'rows': int(params_kw.get('rows', 20)),
'sort': 'assigned_at desc'
}
sql = """
SELECT at.id, at.instance_id, at.step_id, at.assignee_id as approver_id, at.status, at.comment as decision,
at.org_id, at.assigned_at, at.completed_at,
ai.business_type as module_type, ai.business_id as module_record_id,
ast.step_name, ast.approver_role as approver_type
FROM approval_task at
LEFT JOIN approval_instance ai ON at.instance_id = ai.id
LEFT JOIN approval_step ast ON at.step_id = ast.id
"""
async with DBPools().sqlorContext(dbname) as sor:
data = await sor.sqlExe(sql, ns)
if isinstance(data, dict):
result['total'] = data.get('total', 0)
result['rows'] = [dict(r) for r in data.get('rows', [])]
else:
result['rows'] = [dict(r) for r in (data or [])]
result['total'] = len(result['rows'])
result['success'] = True
except Exception as e:
result['error'] = str(e)
return json.dumps(result, ensure_ascii=False, default=str)