fix: 全面修复所有dspy文件和数据库访问模式
dspy文件修复(27个entcms + 10个dingdingflow): - 删除所有import语句(dspy环境已预加载) - 替换 sor = DBPools().sqlorContext() 为 async with db.sqlorContext() as sor: - 替换 print(json.dumps()) 为 return - 替换 uuid() 为 getID() - 替换 datetime.datetime.now() 为 datetime.now() - 修复 get_user() 缺少 await - 删除shebang/docstrings等无关内容 - 修正缩进 Python模块修复: - entcms/init.py: DBNAME从'entcms'改为'ocai_cms' - app/global_func.py: get_module_dbname返回'ocai_cms'而非'sage' - 所有函数使用 async with db.sqlorContext() as sor: 正确模式
This commit is contained in:
parent
7abdc336b7
commit
f70e8e4d26
@ -4,8 +4,8 @@ CMS全局函数 — 注册到ServerEnv供.dspy和.ui调用
|
|||||||
from ahserver.serverenv import ServerEnv
|
from ahserver.serverenv import ServerEnv
|
||||||
|
|
||||||
def get_module_dbname(mname):
|
def get_module_dbname(mname):
|
||||||
"""所有模块共享sage数据库"""
|
"""CMS应用统一使用ocai_cms数据库"""
|
||||||
return 'sage'
|
return 'ocai_cms'
|
||||||
|
|
||||||
def UiWindow(title, icon, content, cheight=10, cwidth=15):
|
def UiWindow(title, icon, content, cheight=10, cwidth=15):
|
||||||
return {
|
return {
|
||||||
|
|||||||
@ -10,7 +10,7 @@ from sqlor.dbpools import DBPools
|
|||||||
MODULE_NAME = "entcms"
|
MODULE_NAME = "entcms"
|
||||||
MODULE_VERSION = "1.0.0"
|
MODULE_VERSION = "1.0.0"
|
||||||
|
|
||||||
DBNAME = "entcms"
|
DBNAME = "ocai_cms"
|
||||||
|
|
||||||
|
|
||||||
# ===== CMS Content CRUD =====
|
# ===== CMS Content CRUD =====
|
||||||
|
|||||||
@ -1,15 +1,13 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
content_type = params_kw.get('content_type', None)
|
content_type = params_kw.get('content_type', None)
|
||||||
ns = {'sort': 'sort_order asc'}
|
ns = {'sort': 'sort_order asc'}
|
||||||
if content_type:
|
if content_type:
|
||||||
ns['content_type'] = content_type
|
ns['content_type'] = content_type
|
||||||
rows = await sor.R('cms_categories', ns)
|
rows = await sor.R('cms_categories', ns)
|
||||||
options = [{'value': r['id'], 'text': r['name']} for r in rows]
|
options = [{'value': r['id'], 'text': r['name']} for r in rows]
|
||||||
print(json.dumps({'status': 'ok', 'data': {'options': options}}, ensure_ascii=False))
|
return {'status': 'ok', 'data': {'options': options}}
|
||||||
|
|||||||
@ -1,36 +1,34 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': getID()}
|
data = {'id': getID()}
|
||||||
|
|
||||||
v = params_kw.get('org_id', None)
|
v = params_kw.get('org_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['org_id'] = v
|
data['org_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('name', None)
|
v = params_kw.get('name', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['name'] = v
|
data['name'] = v
|
||||||
|
|
||||||
v = params_kw.get('parent_id', None)
|
v = params_kw.get('parent_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['parent_id'] = v
|
data['parent_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('content_type', None)
|
v = params_kw.get('content_type', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['content_type'] = v
|
data['content_type'] = v
|
||||||
|
|
||||||
v = params_kw.get('description', None)
|
v = params_kw.get('description', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['description'] = v
|
data['description'] = v
|
||||||
|
|
||||||
v = params_kw.get('sort_order', None)
|
v = params_kw.get('sort_order', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['sort_order'] = v
|
data['sort_order'] = v
|
||||||
|
|
||||||
await sor.C('cms_categories', data)
|
await sor.C('cms_categories', data)
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||||
|
|||||||
@ -1,14 +1,11 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
_id = params_kw.get('id', '')
|
_id = params_kw.get('id', '')
|
||||||
if not _id:
|
if not _id:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
await sor.D('cms_categories', {'id': _id})
|
||||||
await sor.D('cms_categories', {'id': _id})
|
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
|
||||||
|
|||||||
@ -1,32 +1,30 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
ns = {'sort': 'sort_order asc'}
|
ns = {'sort': 'sort_order asc'}
|
||||||
|
|
||||||
# data_filter support
|
# data_filter support
|
||||||
filter_json = params_kw.get('data_filter', None)
|
filter_json = params_kw.get('data_filter', None)
|
||||||
if filter_json:
|
if filter_json:
|
||||||
from sqlor.filter import DBFilter
|
from sqlor.filter import DBFilter
|
||||||
try:
|
try:
|
||||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||||
dbf = DBFilter(filter_def)
|
dbf = DBFilter(filter_def)
|
||||||
conds = dbf.gen(params_kw)
|
conds = dbf.gen(params_kw)
|
||||||
ns.update(conds)
|
ns.update(conds)
|
||||||
ns.update(dbf.consts)
|
ns.update(dbf.consts)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Manual filter params
|
# Manual filter params
|
||||||
|
|
||||||
_content_type = params_kw.get('content_type', None)
|
_content_type = params_kw.get('content_type', None)
|
||||||
if _content_type:
|
if _content_type:
|
||||||
ns['content_type'] = _content_type
|
ns['content_type'] = _content_type
|
||||||
|
|
||||||
rows = await sor.R('cms_categories', ns)
|
rows = await sor.R('cms_categories', ns)
|
||||||
total = len(rows)
|
total = len(rows)
|
||||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': total}, ensure_ascii=False))
|
return {'status': 'ok', 'rows': rows, 'total': total}
|
||||||
|
|||||||
@ -1,39 +1,36 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': params_kw.get('id', '')}
|
data = {'id': params_kw.get('id', '')}
|
||||||
if not data['id']:
|
if not data['id']:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
|
||||||
|
|
||||||
v = params_kw.get('org_id', None)
|
v = params_kw.get('org_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['org_id'] = v
|
data['org_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('name', None)
|
v = params_kw.get('name', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['name'] = v
|
data['name'] = v
|
||||||
|
|
||||||
v = params_kw.get('parent_id', None)
|
v = params_kw.get('parent_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['parent_id'] = v
|
data['parent_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('content_type', None)
|
v = params_kw.get('content_type', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['content_type'] = v
|
data['content_type'] = v
|
||||||
|
|
||||||
v = params_kw.get('description', None)
|
v = params_kw.get('description', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['description'] = v
|
data['description'] = v
|
||||||
|
|
||||||
v = params_kw.get('sort_order', None)
|
v = params_kw.get('sort_order', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['sort_order'] = v
|
data['sort_order'] = v
|
||||||
|
|
||||||
await sor.U('cms_categories', data)
|
await sor.U('cms_categories', data)
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||||
|
|||||||
@ -1,60 +1,58 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': getID()}
|
data = {'id': getID()}
|
||||||
|
|
||||||
v = params_kw.get('org_id', None)
|
v = params_kw.get('org_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['org_id'] = v
|
data['org_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('content_type', None)
|
v = params_kw.get('content_type', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['content_type'] = v
|
data['content_type'] = v
|
||||||
|
|
||||||
v = params_kw.get('category_id', None)
|
v = params_kw.get('category_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['category_id'] = v
|
data['category_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('title', None)
|
v = params_kw.get('title', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['title'] = v
|
data['title'] = v
|
||||||
|
|
||||||
v = params_kw.get('subtitle', None)
|
v = params_kw.get('subtitle', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['subtitle'] = v
|
data['subtitle'] = v
|
||||||
|
|
||||||
v = params_kw.get('summary_text', None)
|
v = params_kw.get('summary_text', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['summary_text'] = v
|
data['summary_text'] = v
|
||||||
|
|
||||||
v = params_kw.get('body', None)
|
v = params_kw.get('body', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['body'] = v
|
data['body'] = v
|
||||||
|
|
||||||
v = params_kw.get('image_url', None)
|
v = params_kw.get('image_url', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['image_url'] = v
|
data['image_url'] = v
|
||||||
|
|
||||||
v = params_kw.get('tags', None)
|
v = params_kw.get('tags', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['tags'] = v
|
data['tags'] = v
|
||||||
|
|
||||||
v = params_kw.get('sort_order', None)
|
v = params_kw.get('sort_order', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['sort_order'] = v
|
data['sort_order'] = v
|
||||||
|
|
||||||
v = params_kw.get('status', None)
|
v = params_kw.get('status', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['status'] = v
|
data['status'] = v
|
||||||
|
|
||||||
v = params_kw.get('extra_json', None)
|
v = params_kw.get('extra_json', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['extra_json'] = v
|
data['extra_json'] = v
|
||||||
|
|
||||||
await sor.C('cms_content', data)
|
await sor.C('cms_content', data)
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||||
|
|||||||
@ -1,14 +1,11 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
_id = params_kw.get('id', '')
|
_id = params_kw.get('id', '')
|
||||||
if not _id:
|
if not _id:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
await sor.D('cms_content', {'id': _id})
|
||||||
await sor.D('cms_content', {'id': _id})
|
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
|
||||||
|
|||||||
@ -1,36 +1,34 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
ns = {'sort': 'sort_order asc, created_at desc'}
|
ns = {'sort': 'sort_order asc, created_at desc'}
|
||||||
|
|
||||||
# data_filter support
|
# data_filter support
|
||||||
filter_json = params_kw.get('data_filter', None)
|
filter_json = params_kw.get('data_filter', None)
|
||||||
if filter_json:
|
if filter_json:
|
||||||
from sqlor.filter import DBFilter
|
from sqlor.filter import DBFilter
|
||||||
try:
|
try:
|
||||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||||
dbf = DBFilter(filter_def)
|
dbf = DBFilter(filter_def)
|
||||||
conds = dbf.gen(params_kw)
|
conds = dbf.gen(params_kw)
|
||||||
ns.update(conds)
|
ns.update(conds)
|
||||||
ns.update(dbf.consts)
|
ns.update(dbf.consts)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Manual filter params
|
# Manual filter params
|
||||||
|
|
||||||
_content_type = params_kw.get('content_type', None)
|
_content_type = params_kw.get('content_type', None)
|
||||||
if _content_type:
|
if _content_type:
|
||||||
ns['content_type'] = _content_type
|
ns['content_type'] = _content_type
|
||||||
|
|
||||||
_status = params_kw.get('status', None)
|
_status = params_kw.get('status', None)
|
||||||
if _status:
|
if _status:
|
||||||
ns['status'] = _status
|
ns['status'] = _status
|
||||||
|
|
||||||
rows = await sor.R('cms_content', ns)
|
rows = await sor.R('cms_content', ns)
|
||||||
total = len(rows)
|
total = len(rows)
|
||||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': total}, ensure_ascii=False))
|
return {'status': 'ok', 'rows': rows, 'total': total}
|
||||||
|
|||||||
@ -1,71 +1,68 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': params_kw.get('id', '')}
|
data = {'id': params_kw.get('id', '')}
|
||||||
if not data['id']:
|
if not data['id']:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
|
||||||
|
|
||||||
v = params_kw.get('org_id', None)
|
v = params_kw.get('org_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['org_id'] = v
|
data['org_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('content_type', None)
|
v = params_kw.get('content_type', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['content_type'] = v
|
data['content_type'] = v
|
||||||
|
|
||||||
v = params_kw.get('category_id', None)
|
v = params_kw.get('category_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['category_id'] = v
|
data['category_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('title', None)
|
v = params_kw.get('title', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['title'] = v
|
data['title'] = v
|
||||||
|
|
||||||
v = params_kw.get('subtitle', None)
|
v = params_kw.get('subtitle', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['subtitle'] = v
|
data['subtitle'] = v
|
||||||
|
|
||||||
v = params_kw.get('summary_text', None)
|
v = params_kw.get('summary_text', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['summary_text'] = v
|
data['summary_text'] = v
|
||||||
|
|
||||||
v = params_kw.get('body', None)
|
v = params_kw.get('body', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['body'] = v
|
data['body'] = v
|
||||||
|
|
||||||
v = params_kw.get('image_url', None)
|
v = params_kw.get('image_url', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['image_url'] = v
|
data['image_url'] = v
|
||||||
|
|
||||||
v = params_kw.get('tags', None)
|
v = params_kw.get('tags', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['tags'] = v
|
data['tags'] = v
|
||||||
|
|
||||||
v = params_kw.get('sort_order', None)
|
v = params_kw.get('sort_order', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['sort_order'] = v
|
data['sort_order'] = v
|
||||||
|
|
||||||
v = params_kw.get('status', None)
|
v = params_kw.get('status', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['status'] = v
|
data['status'] = v
|
||||||
|
|
||||||
v = params_kw.get('extra_json', None)
|
v = params_kw.get('extra_json', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['extra_json'] = v
|
data['extra_json'] = v
|
||||||
|
|
||||||
v = params_kw.get('approval_id', None)
|
v = params_kw.get('approval_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['approval_id'] = v
|
data['approval_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('published_at', None)
|
v = params_kw.get('published_at', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['published_at'] = v
|
data['published_at'] = v
|
||||||
|
|
||||||
await sor.U('cms_content', data)
|
await sor.U('cms_content', data)
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||||
|
|||||||
@ -1,68 +1,66 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': getID()}
|
data = {'id': getID()}
|
||||||
|
|
||||||
v = params_kw.get('org_id', None)
|
v = params_kw.get('org_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['org_id'] = v
|
data['org_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('source', None)
|
v = params_kw.get('source', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['source'] = v
|
data['source'] = v
|
||||||
|
|
||||||
v = params_kw.get('name', None)
|
v = params_kw.get('name', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['name'] = v
|
data['name'] = v
|
||||||
|
|
||||||
v = params_kw.get('company', None)
|
v = params_kw.get('company', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['company'] = v
|
data['company'] = v
|
||||||
|
|
||||||
v = params_kw.get('phone', None)
|
v = params_kw.get('phone', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['phone'] = v
|
data['phone'] = v
|
||||||
|
|
||||||
v = params_kw.get('email', None)
|
v = params_kw.get('email', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['email'] = v
|
data['email'] = v
|
||||||
|
|
||||||
v = params_kw.get('industry', None)
|
v = params_kw.get('industry', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['industry'] = v
|
data['industry'] = v
|
||||||
|
|
||||||
v = params_kw.get('region', None)
|
v = params_kw.get('region', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['region'] = v
|
data['region'] = v
|
||||||
|
|
||||||
v = params_kw.get('interest_products', None)
|
v = params_kw.get('interest_products', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['interest_products'] = v
|
data['interest_products'] = v
|
||||||
|
|
||||||
v = params_kw.get('message', None)
|
v = params_kw.get('message', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['message'] = v
|
data['message'] = v
|
||||||
|
|
||||||
v = params_kw.get('raw_text', None)
|
v = params_kw.get('raw_text', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['raw_text'] = v
|
data['raw_text'] = v
|
||||||
|
|
||||||
v = params_kw.get('status', None)
|
v = params_kw.get('status', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['status'] = v
|
data['status'] = v
|
||||||
|
|
||||||
v = params_kw.get('assigned_to', None)
|
v = params_kw.get('assigned_to', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['assigned_to'] = v
|
data['assigned_to'] = v
|
||||||
|
|
||||||
v = params_kw.get('notes', None)
|
v = params_kw.get('notes', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['notes'] = v
|
data['notes'] = v
|
||||||
|
|
||||||
await sor.C('cms_leads', data)
|
await sor.C('cms_leads', data)
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||||
|
|||||||
@ -1,14 +1,11 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
_id = params_kw.get('id', '')
|
_id = params_kw.get('id', '')
|
||||||
if not _id:
|
if not _id:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
await sor.D('cms_leads', {'id': _id})
|
||||||
await sor.D('cms_leads', {'id': _id})
|
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
|
||||||
|
|||||||
@ -1,36 +1,34 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
ns = {'sort': 'created_at desc'}
|
ns = {'sort': 'created_at desc'}
|
||||||
|
|
||||||
# data_filter support
|
# data_filter support
|
||||||
filter_json = params_kw.get('data_filter', None)
|
filter_json = params_kw.get('data_filter', None)
|
||||||
if filter_json:
|
if filter_json:
|
||||||
from sqlor.filter import DBFilter
|
from sqlor.filter import DBFilter
|
||||||
try:
|
try:
|
||||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||||
dbf = DBFilter(filter_def)
|
dbf = DBFilter(filter_def)
|
||||||
conds = dbf.gen(params_kw)
|
conds = dbf.gen(params_kw)
|
||||||
ns.update(conds)
|
ns.update(conds)
|
||||||
ns.update(dbf.consts)
|
ns.update(dbf.consts)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Manual filter params
|
# Manual filter params
|
||||||
|
|
||||||
_status = params_kw.get('status', None)
|
_status = params_kw.get('status', None)
|
||||||
if _status:
|
if _status:
|
||||||
ns['status'] = _status
|
ns['status'] = _status
|
||||||
|
|
||||||
_source = params_kw.get('source', None)
|
_source = params_kw.get('source', None)
|
||||||
if _source:
|
if _source:
|
||||||
ns['source'] = _source
|
ns['source'] = _source
|
||||||
|
|
||||||
rows = await sor.R('cms_leads', ns)
|
rows = await sor.R('cms_leads', ns)
|
||||||
total = len(rows)
|
total = len(rows)
|
||||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': total}, ensure_ascii=False))
|
return {'status': 'ok', 'rows': rows, 'total': total}
|
||||||
|
|||||||
@ -1,71 +1,68 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': params_kw.get('id', '')}
|
data = {'id': params_kw.get('id', '')}
|
||||||
if not data['id']:
|
if not data['id']:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
|
||||||
|
|
||||||
v = params_kw.get('org_id', None)
|
v = params_kw.get('org_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['org_id'] = v
|
data['org_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('source', None)
|
v = params_kw.get('source', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['source'] = v
|
data['source'] = v
|
||||||
|
|
||||||
v = params_kw.get('name', None)
|
v = params_kw.get('name', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['name'] = v
|
data['name'] = v
|
||||||
|
|
||||||
v = params_kw.get('company', None)
|
v = params_kw.get('company', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['company'] = v
|
data['company'] = v
|
||||||
|
|
||||||
v = params_kw.get('phone', None)
|
v = params_kw.get('phone', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['phone'] = v
|
data['phone'] = v
|
||||||
|
|
||||||
v = params_kw.get('email', None)
|
v = params_kw.get('email', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['email'] = v
|
data['email'] = v
|
||||||
|
|
||||||
v = params_kw.get('industry', None)
|
v = params_kw.get('industry', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['industry'] = v
|
data['industry'] = v
|
||||||
|
|
||||||
v = params_kw.get('region', None)
|
v = params_kw.get('region', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['region'] = v
|
data['region'] = v
|
||||||
|
|
||||||
v = params_kw.get('interest_products', None)
|
v = params_kw.get('interest_products', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['interest_products'] = v
|
data['interest_products'] = v
|
||||||
|
|
||||||
v = params_kw.get('message', None)
|
v = params_kw.get('message', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['message'] = v
|
data['message'] = v
|
||||||
|
|
||||||
v = params_kw.get('raw_text', None)
|
v = params_kw.get('raw_text', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['raw_text'] = v
|
data['raw_text'] = v
|
||||||
|
|
||||||
v = params_kw.get('status', None)
|
v = params_kw.get('status', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['status'] = v
|
data['status'] = v
|
||||||
|
|
||||||
v = params_kw.get('assigned_to', None)
|
v = params_kw.get('assigned_to', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['assigned_to'] = v
|
data['assigned_to'] = v
|
||||||
|
|
||||||
v = params_kw.get('notes', None)
|
v = params_kw.get('notes', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['notes'] = v
|
data['notes'] = v
|
||||||
|
|
||||||
await sor.U('cms_leads', data)
|
await sor.U('cms_leads', data)
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||||
|
|||||||
@ -1,44 +1,42 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': getID()}
|
data = {'id': getID()}
|
||||||
v = params_kw.get('org_id', None)
|
v = params_kw.get('org_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['org_id'] = v
|
data['org_id'] = v
|
||||||
v = params_kw.get('section_key', None)
|
v = params_kw.get('section_key', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['section_key'] = v
|
data['section_key'] = v
|
||||||
v = params_kw.get('title', None)
|
v = params_kw.get('title', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['title'] = v
|
data['title'] = v
|
||||||
v = params_kw.get('subtitle', None)
|
v = params_kw.get('subtitle', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['subtitle'] = v
|
data['subtitle'] = v
|
||||||
v = params_kw.get('section_type', None)
|
v = params_kw.get('section_type', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['section_type'] = v
|
data['section_type'] = v
|
||||||
v = params_kw.get('content_type', None)
|
v = params_kw.get('content_type', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['content_type'] = v
|
data['content_type'] = v
|
||||||
v = params_kw.get('sort_order', None)
|
v = params_kw.get('sort_order', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['sort_order'] = v
|
data['sort_order'] = v
|
||||||
v = params_kw.get('is_visible', None)
|
v = params_kw.get('is_visible', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['is_visible'] = v
|
data['is_visible'] = v
|
||||||
v = params_kw.get('display_config', None)
|
v = params_kw.get('display_config', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['display_config'] = v
|
data['display_config'] = v
|
||||||
v = params_kw.get('style_config', None)
|
v = params_kw.get('style_config', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['style_config'] = v
|
data['style_config'] = v
|
||||||
v = params_kw.get('static_content', None)
|
v = params_kw.get('static_content', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['static_content'] = v
|
data['static_content'] = v
|
||||||
await sor.C('cms_sections', data)
|
await sor.C('cms_sections', data)
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||||
|
|||||||
@ -1,14 +1,11 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
_id = params_kw.get('id', '')
|
_id = params_kw.get('id', '')
|
||||||
if not _id:
|
if not _id:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
await sor.D('cms_sections', {'id': _id})
|
||||||
await sor.D('cms_sections', {'id': _id})
|
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
|
||||||
|
|||||||
@ -1,22 +1,20 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
ns = {'sort': 'sort_order asc'}
|
ns = {'sort': 'sort_order asc'}
|
||||||
filter_json = params_kw.get('data_filter', None)
|
filter_json = params_kw.get('data_filter', None)
|
||||||
if filter_json:
|
if filter_json:
|
||||||
from sqlor.filter import DBFilter
|
from sqlor.filter import DBFilter
|
||||||
try:
|
try:
|
||||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||||
dbf = DBFilter(filter_def)
|
dbf = DBFilter(filter_def)
|
||||||
conds = dbf.gen(params_kw)
|
conds = dbf.gen(params_kw)
|
||||||
ns.update(conds)
|
ns.update(conds)
|
||||||
ns.update(dbf.consts)
|
ns.update(dbf.consts)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
rows = await sor.R('cms_sections', ns)
|
rows = await sor.R('cms_sections', ns)
|
||||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': len(rows)}, ensure_ascii=False))
|
return {'status': 'ok', 'rows': rows, 'total': len(rows)}
|
||||||
|
|||||||
@ -1,47 +1,44 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': params_kw.get('id', '')}
|
data = {'id': params_kw.get('id', '')}
|
||||||
if not data['id']:
|
if not data['id']:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
v = params_kw.get('org_id', None)
|
||||||
v = params_kw.get('org_id', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['org_id'] = v
|
||||||
data['org_id'] = v
|
v = params_kw.get('section_key', None)
|
||||||
v = params_kw.get('section_key', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['section_key'] = v
|
||||||
data['section_key'] = v
|
v = params_kw.get('title', None)
|
||||||
v = params_kw.get('title', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['title'] = v
|
||||||
data['title'] = v
|
v = params_kw.get('subtitle', None)
|
||||||
v = params_kw.get('subtitle', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['subtitle'] = v
|
||||||
data['subtitle'] = v
|
v = params_kw.get('section_type', None)
|
||||||
v = params_kw.get('section_type', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['section_type'] = v
|
||||||
data['section_type'] = v
|
v = params_kw.get('content_type', None)
|
||||||
v = params_kw.get('content_type', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['content_type'] = v
|
||||||
data['content_type'] = v
|
v = params_kw.get('sort_order', None)
|
||||||
v = params_kw.get('sort_order', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['sort_order'] = v
|
||||||
data['sort_order'] = v
|
v = params_kw.get('is_visible', None)
|
||||||
v = params_kw.get('is_visible', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['is_visible'] = v
|
||||||
data['is_visible'] = v
|
v = params_kw.get('display_config', None)
|
||||||
v = params_kw.get('display_config', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['display_config'] = v
|
||||||
data['display_config'] = v
|
v = params_kw.get('style_config', None)
|
||||||
v = params_kw.get('style_config', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['style_config'] = v
|
||||||
data['style_config'] = v
|
v = params_kw.get('static_content', None)
|
||||||
v = params_kw.get('static_content', None)
|
if v is not None:
|
||||||
if v is not None:
|
data['static_content'] = v
|
||||||
data['static_content'] = v
|
await sor.U('cms_sections', data)
|
||||||
await sor.U('cms_sections', data)
|
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
|
||||||
|
|||||||
@ -1,36 +1,34 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': getID()}
|
data = {'id': getID()}
|
||||||
|
|
||||||
v = params_kw.get('org_id', None)
|
v = params_kw.get('org_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['org_id'] = v
|
data['org_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('config_group', None)
|
v = params_kw.get('config_group', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['config_group'] = v
|
data['config_group'] = v
|
||||||
|
|
||||||
v = params_kw.get('config_key', None)
|
v = params_kw.get('config_key', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['config_key'] = v
|
data['config_key'] = v
|
||||||
|
|
||||||
v = params_kw.get('config_value', None)
|
v = params_kw.get('config_value', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['config_value'] = v
|
data['config_value'] = v
|
||||||
|
|
||||||
v = params_kw.get('config_type', None)
|
v = params_kw.get('config_type', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['config_type'] = v
|
data['config_type'] = v
|
||||||
|
|
||||||
v = params_kw.get('sort_order', None)
|
v = params_kw.get('sort_order', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['sort_order'] = v
|
data['sort_order'] = v
|
||||||
|
|
||||||
await sor.C('cms_site_config', data)
|
await sor.C('cms_site_config', data)
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||||
|
|||||||
@ -1,14 +1,11 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
_id = params_kw.get('id', '')
|
_id = params_kw.get('id', '')
|
||||||
if not _id:
|
if not _id:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
await sor.D('cms_site_config', {'id': _id})
|
||||||
await sor.D('cms_site_config', {'id': _id})
|
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
|
||||||
|
|||||||
@ -1,32 +1,30 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
ns = {'sort': 'config_group asc, sort_order asc'}
|
ns = {'sort': 'config_group asc, sort_order asc'}
|
||||||
|
|
||||||
# data_filter support
|
# data_filter support
|
||||||
filter_json = params_kw.get('data_filter', None)
|
filter_json = params_kw.get('data_filter', None)
|
||||||
if filter_json:
|
if filter_json:
|
||||||
from sqlor.filter import DBFilter
|
from sqlor.filter import DBFilter
|
||||||
try:
|
try:
|
||||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||||
dbf = DBFilter(filter_def)
|
dbf = DBFilter(filter_def)
|
||||||
conds = dbf.gen(params_kw)
|
conds = dbf.gen(params_kw)
|
||||||
ns.update(conds)
|
ns.update(conds)
|
||||||
ns.update(dbf.consts)
|
ns.update(dbf.consts)
|
||||||
except Exception:
|
except Exception:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
# Manual filter params
|
# Manual filter params
|
||||||
|
|
||||||
_config_group = params_kw.get('config_group', None)
|
_config_group = params_kw.get('config_group', None)
|
||||||
if _config_group:
|
if _config_group:
|
||||||
ns['config_group'] = _config_group
|
ns['config_group'] = _config_group
|
||||||
|
|
||||||
rows = await sor.R('cms_site_config', ns)
|
rows = await sor.R('cms_site_config', ns)
|
||||||
total = len(rows)
|
total = len(rows)
|
||||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': total}, ensure_ascii=False))
|
return {'status': 'ok', 'rows': rows, 'total': total}
|
||||||
|
|||||||
@ -1,39 +1,36 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {'id': params_kw.get('id', '')}
|
data = {'id': params_kw.get('id', '')}
|
||||||
if not data['id']:
|
if not data['id']:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||||
return
|
|
||||||
|
|
||||||
v = params_kw.get('org_id', None)
|
v = params_kw.get('org_id', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['org_id'] = v
|
data['org_id'] = v
|
||||||
|
|
||||||
v = params_kw.get('config_group', None)
|
v = params_kw.get('config_group', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['config_group'] = v
|
data['config_group'] = v
|
||||||
|
|
||||||
v = params_kw.get('config_key', None)
|
v = params_kw.get('config_key', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['config_key'] = v
|
data['config_key'] = v
|
||||||
|
|
||||||
v = params_kw.get('config_value', None)
|
v = params_kw.get('config_value', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['config_value'] = v
|
data['config_value'] = v
|
||||||
|
|
||||||
v = params_kw.get('config_type', None)
|
v = params_kw.get('config_type', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['config_type'] = v
|
data['config_type'] = v
|
||||||
|
|
||||||
v = params_kw.get('sort_order', None)
|
v = params_kw.get('sort_order', None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data['sort_order'] = v
|
data['sort_order'] = v
|
||||||
|
|
||||||
await sor.U('cms_site_config', data)
|
await sor.U('cms_site_config', data)
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||||
|
|||||||
@ -1,20 +1,18 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
group = params_kw.get('group', None)
|
group = params_kw.get('group', None)
|
||||||
ns = {'sort': 'sort_order asc'}
|
ns = {'sort': 'sort_order asc'}
|
||||||
if group:
|
if group:
|
||||||
ns['config_group'] = group
|
ns['config_group'] = group
|
||||||
rows = await sor.R('cms_site_config', ns)
|
rows = await sor.R('cms_site_config', ns)
|
||||||
result = {}
|
result = {}
|
||||||
for r in rows:
|
for r in rows:
|
||||||
g = r.get('config_group', '')
|
g = r.get('config_group', '')
|
||||||
if g not in result:
|
if g not in result:
|
||||||
result[g] = {}
|
result[g] = {}
|
||||||
result[g][r.get('config_key', '')] = r.get('config_value', '')
|
result[g][r.get('config_key', '')] = r.get('config_value', '')
|
||||||
print(json.dumps({'status': 'ok', 'data': result}, ensure_ascii=False))
|
return {'status': 'ok', 'data': result}
|
||||||
|
|||||||
@ -1,18 +1,16 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
_id = params_kw.get('id', '')
|
_id = params_kw.get('id', '')
|
||||||
if not _id:
|
if not _id:
|
||||||
print(json.dumps({'status': 'error', 'message': '缺少ID'}, ensure_ascii=False))
|
return {'status': 'error', 'message': '缺少ID'}
|
||||||
else:
|
|
||||||
ns = {'id': _id}
|
|
||||||
rows = await sor.R('cms_content', ns)
|
|
||||||
if rows:
|
|
||||||
print(json.dumps({'status': 'ok', 'data': rows[0]}, ensure_ascii=False))
|
|
||||||
else:
|
else:
|
||||||
print(json.dumps({'status': 'error', 'message': '内容不存在'}, ensure_ascii=False))
|
ns = {'id': _id}
|
||||||
|
rows = await sor.R('cms_content', ns)
|
||||||
|
if rows:
|
||||||
|
return {'status': 'ok', 'data': rows[0]}
|
||||||
|
else:
|
||||||
|
return {'status': 'error', 'message': '内容不存在'}
|
||||||
|
|||||||
@ -1,17 +1,15 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
content_type = params_kw.get('content_type', None)
|
content_type = params_kw.get('content_type', None)
|
||||||
limit = int(params_kw.get('limit', '10'))
|
limit = int(params_kw.get('limit', '10'))
|
||||||
ns = {'status': 'published', 'sort': 'sort_order asc, published_at desc'}
|
ns = {'status': 'published', 'sort': 'sort_order asc, published_at desc'}
|
||||||
if content_type:
|
if content_type:
|
||||||
ns['content_type'] = content_type
|
ns['content_type'] = content_type
|
||||||
rows = await sor.R('cms_content', ns)
|
rows = await sor.R('cms_content', ns)
|
||||||
if limit:
|
if limit:
|
||||||
rows = rows[:limit]
|
rows = rows[:limit]
|
||||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': len(rows)}, ensure_ascii=False))
|
return {'status': 'ok', 'rows': rows, 'total': len(rows)}
|
||||||
|
|||||||
@ -1,20 +1,18 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
ns = {'is_visible': '1', 'sort': 'sort_order asc'}
|
ns = {'is_visible': '1', 'sort': 'sort_order asc'}
|
||||||
rows = await sor.R('cms_sections', ns)
|
rows = await sor.R('cms_sections', ns)
|
||||||
# Parse JSON fields
|
# Parse JSON fields
|
||||||
for r in rows:
|
for r in rows:
|
||||||
for field in ['display_config', 'style_config', 'static_content']:
|
for field in ['display_config', 'style_config', 'static_content']:
|
||||||
v = r.get(field, None)
|
v = r.get(field, None)
|
||||||
if v and isinstance(v, str):
|
if v and isinstance(v, str):
|
||||||
try:
|
try:
|
||||||
r[field] = json.loads(v)
|
r[field] = json.loads(v)
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': len(rows)}, ensure_ascii=False))
|
return {'status': 'ok', 'rows': rows, 'total': len(rows)}
|
||||||
|
|||||||
@ -1,28 +1,26 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
content_id = params_kw.get('content_id', '')
|
content_id = params_kw.get('content_id', '')
|
||||||
if not content_id:
|
if not content_id:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少内容ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '缺少内容ID', 'messagetype': 'error'}}
|
||||||
else:
|
else:
|
||||||
# Update status to pending
|
# Update status to pending
|
||||||
await sor.U('cms_content', {'id': content_id, 'status': 'pending'})
|
await sor.U('cms_content', {'id': content_id, 'status': 'pending'})
|
||||||
|
|
||||||
# Try to call dingdingflow
|
# Try to call dingdingflow
|
||||||
try:
|
try:
|
||||||
from dingdingflow.init import submit_approval
|
from dingdingflow.init import submit_approval
|
||||||
user_id = await get_user()
|
user_id = await get_user()
|
||||||
ns_detail = {'id': content_id}
|
ns_detail = {'id': content_id}
|
||||||
rows = await sor.R('cms_content', ns_detail)
|
rows = await sor.R('cms_content', ns_detail)
|
||||||
title = rows[0].get('title', '内容审批') if rows else '内容审批'
|
title = rows[0].get('title', '内容审批') if rows else '内容审批'
|
||||||
result = await submit_approval('content_publish', content_id, title, user_id)
|
result = await submit_approval('content_publish', content_id, title, user_id)
|
||||||
if result and result.get('approval_id'):
|
if result and result.get('approval_id'):
|
||||||
await sor.U('cms_content', {'id': content_id, 'approval_id': result['approval_id']})
|
await sor.U('cms_content', {'id': content_id, 'approval_id': result['approval_id']})
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '已提交审批', 'messagetype': 'success'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '已提交审批', 'messagetype': 'success'}}
|
||||||
except ImportError:
|
except ImportError:
|
||||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '审批模块未安装,状态已改为待审批', 'messagetype': 'warning'}}, ensure_ascii=False))
|
return {'widgettype': 'Message', 'options': {'text': '审批模块未安装,状态已改为待审批', 'messagetype': 'warning'}}
|
||||||
|
|||||||
@ -1,25 +1,22 @@
|
|||||||
import json
|
|
||||||
from appPublic.uniqueID import getID
|
|
||||||
|
|
||||||
config = getConfig('.')
|
config = getConfig('.')
|
||||||
DBPools(config.databases)
|
DBPools(config.databases)
|
||||||
dbname = get_module_dbname('entcms')
|
dbname = get_module_dbname('entcms')
|
||||||
sor = DBPools().sqlorContext(dbname)
|
async with db.sqlorContext(dbname) as sor:
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'id': getID(),
|
'id': getID(),
|
||||||
'source': 'website',
|
'source': 'website',
|
||||||
'status': 'new',
|
'status': 'new',
|
||||||
'org_id': '0'
|
'org_id': '0'
|
||||||
}
|
}
|
||||||
for field in ['name', 'company', 'phone', 'email', 'industry', 'region',
|
for field in ['name', 'company', 'phone', 'email', 'industry', 'region',
|
||||||
'interest_products', 'message']:
|
'interest_products', 'message']:
|
||||||
v = params_kw.get(field, None)
|
v = params_kw.get(field, None)
|
||||||
if v is not None:
|
if v is not None:
|
||||||
data[field] = v
|
data[field] = v
|
||||||
|
|
||||||
await sor.C('cms_leads', data)
|
await sor.C('cms_leads', data)
|
||||||
print(json.dumps({
|
return {
|
||||||
'widgettype': 'Message',
|
'widgettype': 'Message',
|
||||||
'options': {'text': '感谢您的留言,我们会尽快联系您!', 'messagetype': 'success'}
|
'options': {'text': '感谢您的留言,我们会尽快联系您!', 'messagetype': 'success'}
|
||||||
}, ensure_ascii=False))
|
}
|
||||||
|
|||||||
@ -1,7 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""dd_approval_configs create API"""
|
|
||||||
|
|
||||||
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -12,9 +8,9 @@ try:
|
|||||||
if not biz_type:
|
if not biz_type:
|
||||||
result['options'] = {'title': 'Error', 'message': 'biz_type is required', 'type': 'error'}
|
result['options'] = {'title': 'Error', 'message': 'biz_type is required', 'type': 'error'}
|
||||||
else:
|
else:
|
||||||
new_id = uuid()
|
new_id = getID()
|
||||||
org_id = (await get_userorgid()) or '0'
|
org_id = (await get_userorgid()) or '0'
|
||||||
now_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
now_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
dbname = get_module_dbname('dingdingflow')
|
dbname = get_module_dbname('dingdingflow')
|
||||||
async with DBPools().sqlorContext(dbname) as sor:
|
async with DBPools().sqlorContext(dbname) as sor:
|
||||||
@ -38,4 +34,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result['options'] = {'title': 'Error', 'message': f'创建失败: {str(e)}', 'type': 'error'}
|
result['options'] = {'title': 'Error', 'message': f'创建失败: {str(e)}', 'type': 'error'}
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False)
|
return result
|
||||||
|
|||||||
@ -1,7 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""dd_approval_configs delete API"""
|
|
||||||
|
|
||||||
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -17,4 +13,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result['options'] = {'title': 'Error', 'message': f'删除失败: {str(e)}', 'type': 'error'}
|
result['options'] = {'title': 'Error', 'message': f'删除失败: {str(e)}', 'type': 'error'}
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False)
|
return result
|
||||||
|
|||||||
@ -1,7 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""dd_approval_configs list API"""
|
|
||||||
|
|
||||||
result = {'success': False, 'rows': [], 'total': 0}
|
result = {'success': False, 'rows': [], 'total': 0}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -55,4 +51,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result['error'] = str(e)
|
result['error'] = str(e)
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False, default=str)
|
return result
|
||||||
|
|||||||
@ -1,7 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""dd_approval_configs update API"""
|
|
||||||
|
|
||||||
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -21,7 +17,7 @@ try:
|
|||||||
update_ns[field] = val
|
update_ns[field] = val
|
||||||
|
|
||||||
# Always update updated_at
|
# Always update updated_at
|
||||||
now_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
now_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
update_fields.append("updated_at=${updated_at}$")
|
update_fields.append("updated_at=${updated_at}$")
|
||||||
update_ns['updated_at'] = now_str
|
update_ns['updated_at'] = now_str
|
||||||
|
|
||||||
@ -33,4 +29,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result['options'] = {'title': 'Error', 'message': f'更新失败: {str(e)}', 'type': 'error'}
|
result['options'] = {'title': 'Error', 'message': f'更新失败: {str(e)}', 'type': 'error'}
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False)
|
return result
|
||||||
|
|||||||
@ -1,7 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""dd_approvals create API"""
|
|
||||||
|
|
||||||
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -13,9 +9,9 @@ try:
|
|||||||
if not biz_type or not title:
|
if not biz_type or not title:
|
||||||
result['options'] = {'title': 'Error', 'message': 'biz_type and title are required', 'type': 'error'}
|
result['options'] = {'title': 'Error', 'message': 'biz_type and title are required', 'type': 'error'}
|
||||||
else:
|
else:
|
||||||
new_id = uuid()
|
new_id = getID()
|
||||||
org_id = (await get_userorgid()) or '0'
|
org_id = (await get_userorgid()) or '0'
|
||||||
now_str = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
now_str = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
|
||||||
dbname = get_module_dbname('dingdingflow')
|
dbname = get_module_dbname('dingdingflow')
|
||||||
async with DBPools().sqlorContext(dbname) as sor:
|
async with DBPools().sqlorContext(dbname) as sor:
|
||||||
@ -40,4 +36,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result['options'] = {'title': 'Error', 'message': f'创建失败: {str(e)}', 'type': 'error'}
|
result['options'] = {'title': 'Error', 'message': f'创建失败: {str(e)}', 'type': 'error'}
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False)
|
return result
|
||||||
|
|||||||
@ -1,7 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""dd_approvals delete API"""
|
|
||||||
|
|
||||||
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -17,4 +13,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result['options'] = {'title': 'Error', 'message': f'删除失败: {str(e)}', 'type': 'error'}
|
result['options'] = {'title': 'Error', 'message': f'删除失败: {str(e)}', 'type': 'error'}
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False)
|
return result
|
||||||
|
|||||||
@ -1,7 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""dd_approvals list API with data_filter support"""
|
|
||||||
|
|
||||||
result = {'success': False, 'rows': [], 'total': 0}
|
result = {'success': False, 'rows': [], 'total': 0}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -73,4 +69,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result['error'] = str(e)
|
result['error'] = str(e)
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False, default=str)
|
return result
|
||||||
|
|||||||
@ -1,7 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""dd_approvals update API"""
|
|
||||||
|
|
||||||
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
result = {'widgettype': 'Message', 'options': {'title': 'Error', 'message': 'Invalid request', 'type': 'error'}}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -33,4 +29,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result['options'] = {'title': 'Error', 'message': f'更新失败: {str(e)}', 'type': 'error'}
|
result['options'] = {'title': 'Error', 'message': f'更新失败: {str(e)}', 'type': 'error'}
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False)
|
return result
|
||||||
|
|||||||
@ -1,20 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""
|
|
||||||
DingTalk webhook callback endpoint.
|
|
||||||
PUBLIC endpoint (any permission) - DingTalk servers call this when approval status changes.
|
|
||||||
|
|
||||||
Expected POST body:
|
|
||||||
{
|
|
||||||
"processInstanceId": "xxx",
|
|
||||||
"processCode": "xxx",
|
|
||||||
"type": "bpms_instance_change",
|
|
||||||
"result": "agree" / "refuse",
|
|
||||||
"staffId": "xxx",
|
|
||||||
"remark": "optional comment"
|
|
||||||
}
|
|
||||||
"""
|
|
||||||
|
|
||||||
result = {'success': False, 'message': 'Invalid callback'}
|
result = {'success': False, 'message': 'Invalid callback'}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -59,4 +42,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result = {'success': False, 'message': f'Callback processing error: {str(e)}'}
|
result = {'success': False, 'message': f'Callback processing error: {str(e)}'}
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False, default=str)
|
return result
|
||||||
|
|||||||
@ -1,10 +1,3 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
"""
|
|
||||||
Submit approval API - triggered by entcms when content needs approval.
|
|
||||||
Creates a dd_approvals record and calls DingTalk API to start the approval process.
|
|
||||||
"""
|
|
||||||
|
|
||||||
result = {'success': False, 'message': 'Invalid request'}
|
result = {'success': False, 'message': 'Invalid request'}
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -22,7 +15,7 @@ try:
|
|||||||
else:
|
else:
|
||||||
# Use current user as applicant if not specified
|
# Use current user as applicant if not specified
|
||||||
if not applicant_id:
|
if not applicant_id:
|
||||||
applicant_id = get_user() or ''
|
applicant_id = (await get_user()) or ''
|
||||||
|
|
||||||
org_id = (await get_userorgid()) or '0'
|
org_id = (await get_userorgid()) or '0'
|
||||||
|
|
||||||
@ -33,4 +26,4 @@ try:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
result = {'success': False, 'message': f'提交审批失败: {str(e)}'}
|
result = {'success': False, 'message': f'提交审批失败: {str(e)}'}
|
||||||
|
|
||||||
return json.dumps(result, ensure_ascii=False, default=str)
|
return result
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user