refactor: API响应统一标准格式{status,data}, 前端Form分离
- rl_verify.dspy: 返回{status:ok/data:{id,h5_link,byted_token}}
- rl_upload.dspy: 返回{status:ok/data:{id,vendor_asset_id,status}}
- rl_query_groups.dspy: 返回{status:ok/data:{groups:[...]}}
- rl_status.dspy: 返回{status:ok/data:{status,url}}
- rl_callback.dspy: 返回{status:ok/data:{vendor_group_id}}
- 新增submit_create_validate.dspy: 前端专用,返回bricks Message/Error widget
- create_validate.ui: Form指向新dspy + submited事件绑定
- api_downapp.md: 文档同步更新
This commit is contained in:
parent
2533e4f22e
commit
211b628c78
@ -48,17 +48,19 @@ Content-Type: application/json
|
|||||||
**成功**:
|
**成功**:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"success": true,
|
"status": "ok",
|
||||||
"id": "local_group_id_xxx",
|
"data": {
|
||||||
"h5_link": "https://... (H5页面链接,120秒有效)",
|
"id": "local_group_id_xxx",
|
||||||
"byted_token": "..."
|
"h5_link": "https://... (H5页面链接,120秒有效)",
|
||||||
|
"byted_token": "..."
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
**失败**(未配置):
|
**失败**(未配置):
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"success": false,
|
"status": "error",
|
||||||
"message": "供应商配置不存在"
|
"data": {"message": "供应商配置不存在"}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -84,15 +86,17 @@ Authorization: Bearer <your_api_key>
|
|||||||
**成功**:
|
**成功**:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"success": true,
|
"status": "ok",
|
||||||
"groups": [
|
"data": {
|
||||||
{
|
"groups": [
|
||||||
"vendor_group_id": "volc-asset-group-xxx",
|
{
|
||||||
"vendor": "volcengine",
|
"vendor_group_id": "volc-asset-group-xxx",
|
||||||
"status": "active",
|
"vendor": "volcengine",
|
||||||
"create_time": "2026-05-28 15:30:00"
|
"status": "active",
|
||||||
}
|
"create_time": "2026-05-28 15:30:00"
|
||||||
]
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -145,10 +149,12 @@ Content-Type: application/json
|
|||||||
**成功**:
|
**成功**:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"success": true,
|
"status": "ok",
|
||||||
"id": "asset_record_id_xxx",
|
"data": {
|
||||||
"vendor_asset_id": "asset-2026...",
|
"id": "asset_record_id_xxx",
|
||||||
"status": "Processing"
|
"vendor_asset_id": "asset-2026...",
|
||||||
|
"status": "Processing"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -183,9 +189,11 @@ Content-Type: application/json
|
|||||||
**成功**:
|
**成功**:
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
"success": true,
|
"status": "ok",
|
||||||
"status": "Active",
|
"data": {
|
||||||
"url": "https://... (临时下载链接,12小时有效)"
|
"status": "Active",
|
||||||
|
"url": "https://... (临时下载链接,12小时有效)"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@ -21,8 +21,12 @@ if not byted_token:
|
|||||||
byted_token = params_kw.get("BytedToken", params_kw.get("byted_token", ""))
|
byted_token = params_kw.get("BytedToken", params_kw.get("byted_token", ""))
|
||||||
|
|
||||||
if not byted_token:
|
if not byted_token:
|
||||||
return {"success": False, "message": "缺少 BytedToken 参数"}
|
return json.dumps({"status": "error", "data": {"message": "缺少 BytedToken 参数"}}, ensure_ascii=False)
|
||||||
|
|
||||||
# vendor is determined by looking up the session record
|
# vendor is determined by looking up the session record
|
||||||
result = await rl_handle_callback(byted_token, project_name="default")
|
result = await rl_handle_callback(byted_token, project_name="default")
|
||||||
return result
|
|
||||||
|
if result.get('success'):
|
||||||
|
return json.dumps({"status": "ok", "data": {"vendor_group_id": result.get('vendor_group_id', '')}}, ensure_ascii=False)
|
||||||
|
else:
|
||||||
|
return json.dumps({"status": "error", "data": {"message": result.get('message', '回调处理失败')}}, ensure_ascii=False)
|
||||||
|
|||||||
@ -1,4 +1,10 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
org_id = (await get_userorgid()) or '0'
|
org_id = (await get_userorgid()) or '0'
|
||||||
|
|
||||||
result = await rl_query_groups(org_id)
|
result = await rl_query_groups(org_id)
|
||||||
return result
|
|
||||||
|
if result.get('success'):
|
||||||
|
return json.dumps({"status": "ok", "data": {"groups": result.get('groups', [])}}, ensure_ascii=False)
|
||||||
|
else:
|
||||||
|
return json.dumps({"status": "error", "data": {"message": result.get('message', '查询失败')}}, ensure_ascii=False)
|
||||||
|
|||||||
@ -1,7 +1,22 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
asset_id = params_kw.get('asset_id', '')
|
asset_id = params_kw.get('asset_id', '')
|
||||||
|
|
||||||
if not asset_id:
|
if not asset_id:
|
||||||
return {"success": False, "message": "asset_id 不能为空"}
|
return json.dumps({"status": "error", "data": {"message": "asset_id 不能为空"}}, ensure_ascii=False)
|
||||||
|
|
||||||
result = await rl_sync_asset_status_user((await get_userorgid()) or '0', asset_id, (await get_user()))
|
result = await rl_sync_asset_status_user((await get_userorgid()) or '0', asset_id, (await get_user()))
|
||||||
return result
|
|
||||||
|
if result.get('success'):
|
||||||
|
return json.dumps({
|
||||||
|
"status": "ok",
|
||||||
|
"data": {
|
||||||
|
"status": result.get('status', ''),
|
||||||
|
"url": result.get('url', ''),
|
||||||
|
}
|
||||||
|
}, ensure_ascii=False)
|
||||||
|
else:
|
||||||
|
return json.dumps({
|
||||||
|
"status": "error",
|
||||||
|
"data": {"message": result.get('message', '查询失败')}
|
||||||
|
}, ensure_ascii=False)
|
||||||
|
|||||||
@ -6,19 +6,13 @@ asset_type = params_kw.get('asset_type', 'Image')
|
|||||||
name = params_kw.get('name', '')
|
name = params_kw.get('name', '')
|
||||||
|
|
||||||
if not vendor_group_id or not source_url:
|
if not vendor_group_id or not source_url:
|
||||||
return json.dumps({
|
return json.dumps({"status": "error", "data": {"message": "请选择认证组合并提供素材URL"}}, ensure_ascii=False)
|
||||||
"widgettype": "Message",
|
|
||||||
"options": {"message": "请选择认证组合并提供素材URL", "type": "error"}
|
|
||||||
})
|
|
||||||
|
|
||||||
# If source_url is base64 data or local path, convert to public URL
|
# If source_url is base64 data or local path, convert to public URL
|
||||||
if source_url.startswith('data:') or (not source_url.startswith('http') and len(source_url) < 8000):
|
if source_url.startswith('data:') or (not source_url.startswith('http') and len(source_url) < 8000):
|
||||||
source_url = await b64media2url(request, source_url)
|
source_url = await b64media2url(request, source_url)
|
||||||
if not source_url:
|
if not source_url:
|
||||||
return json.dumps({
|
return json.dumps({"status": "error", "data": {"message": "素材文件转换失败"}}, ensure_ascii=False)
|
||||||
"widgettype": "Message",
|
|
||||||
"options": {"message": "素材文件转换失败", "type": "error"}
|
|
||||||
})
|
|
||||||
|
|
||||||
org_id = (await get_userorgid()) or '0'
|
org_id = (await get_userorgid()) or '0'
|
||||||
user_id = (await get_user()) or ''
|
user_id = (await get_user()) or ''
|
||||||
@ -26,13 +20,16 @@ user_id = (await get_user()) or ''
|
|||||||
result = await rl_upload_user(org_id, vendor_group_id, source_url, asset_type, name, user_id)
|
result = await rl_upload_user(org_id, vendor_group_id, source_url, asset_type, name, user_id)
|
||||||
|
|
||||||
if result.get('success'):
|
if result.get('success'):
|
||||||
asset_id = result.get('vendor_asset_id', '')
|
|
||||||
return json.dumps({
|
return json.dumps({
|
||||||
"widgettype": "Message",
|
"status": "ok",
|
||||||
"options": {"message": f"素材上传成功!资产ID: {asset_id}", "type": "success"}
|
"data": {
|
||||||
})
|
"id": result.get('id', ''),
|
||||||
|
"vendor_asset_id": result.get('vendor_asset_id', ''),
|
||||||
|
"status": result.get('status', 'Processing'),
|
||||||
|
}
|
||||||
|
}, ensure_ascii=False)
|
||||||
else:
|
else:
|
||||||
return json.dumps({
|
return json.dumps({
|
||||||
"widgettype": "Message",
|
"status": "error",
|
||||||
"options": {"message": result.get('message', '上传失败'), "type": "error"}
|
"data": {"message": result.get('message', '上传失败')}
|
||||||
})
|
}, ensure_ascii=False)
|
||||||
|
|||||||
@ -1,41 +1,27 @@
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
vendor = params_kw.get('vendor', '')
|
vendor = params_kw.get('vendor', '')
|
||||||
|
project_name = params_kw.get('project_name', 'default')
|
||||||
|
|
||||||
if not vendor:
|
if not vendor:
|
||||||
return json.dumps({
|
return json.dumps({"status": "error", "data": {"message": "请选择供应商"}}, ensure_ascii=False)
|
||||||
"widgettype": "Message",
|
|
||||||
"options": {"message": "请选择供应商", "type": "error"}
|
|
||||||
})
|
|
||||||
|
|
||||||
org_id = (await get_userorgid()) or '0'
|
org_id = (await get_userorgid()) or '0'
|
||||||
user_id = (await get_user()) or ''
|
user_id = (await get_user()) or ''
|
||||||
project_name = "default"
|
|
||||||
|
|
||||||
result = await rl_verify_user(org_id, user_id, vendor, project_name)
|
result = await rl_verify_user(org_id, user_id, vendor, project_name)
|
||||||
|
|
||||||
if result.get('success'):
|
if result.get('success'):
|
||||||
h5_link = result.get('h5_link', '')
|
|
||||||
msg = "认证会话已创建,请在新窗口中完成真人认证"
|
|
||||||
return json.dumps({
|
return json.dumps({
|
||||||
"widgettype": "Message",
|
"status": "ok",
|
||||||
"options": {"title": "真人认证", "message": msg},
|
"data": {
|
||||||
"subwidgets": [
|
"id": result.get('id', ''),
|
||||||
{
|
"h5_link": result.get('h5_link', ''),
|
||||||
"widgettype": "Button",
|
"byted_token": result.get('byted_token', ''),
|
||||||
"options": {
|
}
|
||||||
"label": "打开认证页面",
|
}, ensure_ascii=False)
|
||||||
"action": {
|
|
||||||
"actiontype": "urlwidget",
|
|
||||||
"target": "NewWindow",
|
|
||||||
"url": h5_link
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
else:
|
else:
|
||||||
return json.dumps({
|
return json.dumps({
|
||||||
"widgettype": "Message",
|
"status": "error",
|
||||||
"options": {"message": result.get('message', '认证创建失败'), "type": "error"}
|
"data": {"message": result.get('message', '认证创建失败')}
|
||||||
})
|
}, ensure_ascii=False)
|
||||||
|
|||||||
42
wwwroot/api/submit_create_validate.dspy
Normal file
42
wwwroot/api/submit_create_validate.dspy
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import json
|
||||||
|
|
||||||
|
vendor = params_kw.get('vendor', '')
|
||||||
|
|
||||||
|
if not vendor:
|
||||||
|
return json.dumps({
|
||||||
|
"widgettype": "Error",
|
||||||
|
"options": {"title": "错误", "message": "请选择供应商"}
|
||||||
|
})
|
||||||
|
|
||||||
|
org_id = (await get_userorgid()) or '0'
|
||||||
|
user_id = (await get_user()) or ''
|
||||||
|
project_name = "default"
|
||||||
|
|
||||||
|
result = await rl_verify_user(org_id, user_id, vendor, project_name)
|
||||||
|
|
||||||
|
if result.get('success'):
|
||||||
|
h5_link = result.get('h5_link', '')
|
||||||
|
return json.dumps({
|
||||||
|
"widgettype": "Message",
|
||||||
|
"options": {"title": "真人认证", "message": "认证会话已创建,请点击按钮在新窗口中完成真人认证"},
|
||||||
|
"subwidgets": [
|
||||||
|
{
|
||||||
|
"widgettype": "Button",
|
||||||
|
"options": {"label": "打开认证页面"},
|
||||||
|
"binds": [
|
||||||
|
{
|
||||||
|
"wid": "self",
|
||||||
|
"event": "click",
|
||||||
|
"actiontype": "script",
|
||||||
|
"target": "self",
|
||||||
|
"script": "window.open('" + h5_link + "', '_blank')"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
return json.dumps({
|
||||||
|
"widgettype": "Error",
|
||||||
|
"options": {"title": "错误", "message": result.get('message', '认证创建失败')}
|
||||||
|
})
|
||||||
@ -24,7 +24,7 @@
|
|||||||
"widgettype": "Form",
|
"widgettype": "Form",
|
||||||
"id": "validate_form",
|
"id": "validate_form",
|
||||||
"options": {
|
"options": {
|
||||||
"submit_url": "{{entire_url('api/rl_verify.dspy')}}",
|
"submit_url": "{{entire_url('api/submit_create_validate.dspy')}}",
|
||||||
"fields": [
|
"fields": [
|
||||||
{
|
{
|
||||||
"uitype": "code",
|
"uitype": "code",
|
||||||
@ -36,7 +36,15 @@
|
|||||||
"required": true
|
"required": true
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
},
|
||||||
|
"binds": [
|
||||||
|
{
|
||||||
|
"wid": "self",
|
||||||
|
"event": "submited",
|
||||||
|
"actiontype": "script",
|
||||||
|
"script": "await bricks.show_resp_message_or_error(event.params)"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user