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
|
||||
|
||||
def get_module_dbname(mname):
|
||||
"""所有模块共享sage数据库"""
|
||||
return 'sage'
|
||||
"""CMS应用统一使用ocai_cms数据库"""
|
||||
return 'ocai_cms'
|
||||
|
||||
def UiWindow(title, icon, content, cheight=10, cwidth=15):
|
||||
return {
|
||||
|
||||
@ -10,7 +10,7 @@ from sqlor.dbpools import DBPools
|
||||
MODULE_NAME = "entcms"
|
||||
MODULE_VERSION = "1.0.0"
|
||||
|
||||
DBNAME = "entcms"
|
||||
DBNAME = "ocai_cms"
|
||||
|
||||
|
||||
# ===== CMS Content CRUD =====
|
||||
|
||||
@ -1,15 +1,13 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
content_type = params_kw.get('content_type', None)
|
||||
ns = {'sort': 'sort_order asc'}
|
||||
if content_type:
|
||||
ns['content_type'] = content_type
|
||||
rows = await sor.R('cms_categories', ns)
|
||||
options = [{'value': r['id'], 'text': r['name']} for r in rows]
|
||||
print(json.dumps({'status': 'ok', 'data': {'options': options}}, ensure_ascii=False))
|
||||
content_type = params_kw.get('content_type', None)
|
||||
ns = {'sort': 'sort_order asc'}
|
||||
if content_type:
|
||||
ns['content_type'] = content_type
|
||||
rows = await sor.R('cms_categories', ns)
|
||||
options = [{'value': r['id'], 'text': r['name']} for r in rows]
|
||||
return {'status': 'ok', 'data': {'options': options}}
|
||||
|
||||
@ -1,36 +1,34 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
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)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
|
||||
v = params_kw.get('name', None)
|
||||
if v is not None:
|
||||
data['name'] = v
|
||||
v = params_kw.get('name', None)
|
||||
if v is not None:
|
||||
data['name'] = v
|
||||
|
||||
v = params_kw.get('parent_id', None)
|
||||
if v is not None:
|
||||
data['parent_id'] = v
|
||||
v = params_kw.get('parent_id', None)
|
||||
if v is not None:
|
||||
data['parent_id'] = v
|
||||
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
|
||||
v = params_kw.get('description', None)
|
||||
if v is not None:
|
||||
data['description'] = v
|
||||
v = params_kw.get('description', None)
|
||||
if v is not None:
|
||||
data['description'] = v
|
||||
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
|
||||
await sor.C('cms_categories', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
await sor.C('cms_categories', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
await sor.D('cms_categories', {'id': _id})
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
await sor.D('cms_categories', {'id': _id})
|
||||
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,32 +1,30 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
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
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
# data_filter support
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Manual filter params
|
||||
# Manual filter params
|
||||
|
||||
_content_type = params_kw.get('content_type', None)
|
||||
if _content_type:
|
||||
ns['content_type'] = _content_type
|
||||
_content_type = params_kw.get('content_type', None)
|
||||
if _content_type:
|
||||
ns['content_type'] = _content_type
|
||||
|
||||
rows = await sor.R('cms_categories', ns)
|
||||
total = len(rows)
|
||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': total}, ensure_ascii=False))
|
||||
rows = await sor.R('cms_categories', ns)
|
||||
total = len(rows)
|
||||
return {'status': 'ok', 'rows': rows, 'total': total}
|
||||
|
||||
@ -1,39 +1,36 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
|
||||
v = params_kw.get('name', None)
|
||||
if v is not None:
|
||||
data['name'] = v
|
||||
v = params_kw.get('name', None)
|
||||
if v is not None:
|
||||
data['name'] = v
|
||||
|
||||
v = params_kw.get('parent_id', None)
|
||||
if v is not None:
|
||||
data['parent_id'] = v
|
||||
v = params_kw.get('parent_id', None)
|
||||
if v is not None:
|
||||
data['parent_id'] = v
|
||||
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
|
||||
v = params_kw.get('description', None)
|
||||
if v is not None:
|
||||
data['description'] = v
|
||||
v = params_kw.get('description', None)
|
||||
if v is not None:
|
||||
data['description'] = v
|
||||
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
|
||||
await sor.U('cms_categories', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
await sor.U('cms_categories', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,60 +1,58 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
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)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
|
||||
v = params_kw.get('category_id', None)
|
||||
if v is not None:
|
||||
data['category_id'] = v
|
||||
v = params_kw.get('category_id', None)
|
||||
if v is not None:
|
||||
data['category_id'] = v
|
||||
|
||||
v = params_kw.get('title', None)
|
||||
if v is not None:
|
||||
data['title'] = v
|
||||
v = params_kw.get('title', None)
|
||||
if v is not None:
|
||||
data['title'] = v
|
||||
|
||||
v = params_kw.get('subtitle', None)
|
||||
if v is not None:
|
||||
data['subtitle'] = v
|
||||
v = params_kw.get('subtitle', None)
|
||||
if v is not None:
|
||||
data['subtitle'] = v
|
||||
|
||||
v = params_kw.get('summary_text', None)
|
||||
if v is not None:
|
||||
data['summary_text'] = v
|
||||
v = params_kw.get('summary_text', None)
|
||||
if v is not None:
|
||||
data['summary_text'] = v
|
||||
|
||||
v = params_kw.get('body', None)
|
||||
if v is not None:
|
||||
data['body'] = v
|
||||
v = params_kw.get('body', None)
|
||||
if v is not None:
|
||||
data['body'] = v
|
||||
|
||||
v = params_kw.get('image_url', None)
|
||||
if v is not None:
|
||||
data['image_url'] = v
|
||||
v = params_kw.get('image_url', None)
|
||||
if v is not None:
|
||||
data['image_url'] = v
|
||||
|
||||
v = params_kw.get('tags', None)
|
||||
if v is not None:
|
||||
data['tags'] = v
|
||||
v = params_kw.get('tags', None)
|
||||
if v is not None:
|
||||
data['tags'] = v
|
||||
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
|
||||
v = params_kw.get('status', None)
|
||||
if v is not None:
|
||||
data['status'] = v
|
||||
v = params_kw.get('status', None)
|
||||
if v is not None:
|
||||
data['status'] = v
|
||||
|
||||
v = params_kw.get('extra_json', None)
|
||||
if v is not None:
|
||||
data['extra_json'] = v
|
||||
v = params_kw.get('extra_json', None)
|
||||
if v is not None:
|
||||
data['extra_json'] = v
|
||||
|
||||
await sor.C('cms_content', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
await sor.C('cms_content', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
await sor.D('cms_content', {'id': _id})
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
await sor.D('cms_content', {'id': _id})
|
||||
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,36 +1,34 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
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
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
# data_filter support
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Manual filter params
|
||||
# Manual filter params
|
||||
|
||||
_content_type = params_kw.get('content_type', None)
|
||||
if _content_type:
|
||||
ns['content_type'] = _content_type
|
||||
_content_type = params_kw.get('content_type', None)
|
||||
if _content_type:
|
||||
ns['content_type'] = _content_type
|
||||
|
||||
_status = params_kw.get('status', None)
|
||||
if _status:
|
||||
ns['status'] = _status
|
||||
_status = params_kw.get('status', None)
|
||||
if _status:
|
||||
ns['status'] = _status
|
||||
|
||||
rows = await sor.R('cms_content', ns)
|
||||
total = len(rows)
|
||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': total}, ensure_ascii=False))
|
||||
rows = await sor.R('cms_content', ns)
|
||||
total = len(rows)
|
||||
return {'status': 'ok', 'rows': rows, 'total': total}
|
||||
|
||||
@ -1,71 +1,68 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
|
||||
v = params_kw.get('category_id', None)
|
||||
if v is not None:
|
||||
data['category_id'] = v
|
||||
v = params_kw.get('category_id', None)
|
||||
if v is not None:
|
||||
data['category_id'] = v
|
||||
|
||||
v = params_kw.get('title', None)
|
||||
if v is not None:
|
||||
data['title'] = v
|
||||
v = params_kw.get('title', None)
|
||||
if v is not None:
|
||||
data['title'] = v
|
||||
|
||||
v = params_kw.get('subtitle', None)
|
||||
if v is not None:
|
||||
data['subtitle'] = v
|
||||
v = params_kw.get('subtitle', None)
|
||||
if v is not None:
|
||||
data['subtitle'] = v
|
||||
|
||||
v = params_kw.get('summary_text', None)
|
||||
if v is not None:
|
||||
data['summary_text'] = v
|
||||
v = params_kw.get('summary_text', None)
|
||||
if v is not None:
|
||||
data['summary_text'] = v
|
||||
|
||||
v = params_kw.get('body', None)
|
||||
if v is not None:
|
||||
data['body'] = v
|
||||
v = params_kw.get('body', None)
|
||||
if v is not None:
|
||||
data['body'] = v
|
||||
|
||||
v = params_kw.get('image_url', None)
|
||||
if v is not None:
|
||||
data['image_url'] = v
|
||||
v = params_kw.get('image_url', None)
|
||||
if v is not None:
|
||||
data['image_url'] = v
|
||||
|
||||
v = params_kw.get('tags', None)
|
||||
if v is not None:
|
||||
data['tags'] = v
|
||||
v = params_kw.get('tags', None)
|
||||
if v is not None:
|
||||
data['tags'] = v
|
||||
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
|
||||
v = params_kw.get('status', None)
|
||||
if v is not None:
|
||||
data['status'] = v
|
||||
v = params_kw.get('status', None)
|
||||
if v is not None:
|
||||
data['status'] = v
|
||||
|
||||
v = params_kw.get('extra_json', None)
|
||||
if v is not None:
|
||||
data['extra_json'] = v
|
||||
v = params_kw.get('extra_json', None)
|
||||
if v is not None:
|
||||
data['extra_json'] = v
|
||||
|
||||
v = params_kw.get('approval_id', None)
|
||||
if v is not None:
|
||||
data['approval_id'] = v
|
||||
v = params_kw.get('approval_id', None)
|
||||
if v is not None:
|
||||
data['approval_id'] = v
|
||||
|
||||
v = params_kw.get('published_at', None)
|
||||
if v is not None:
|
||||
data['published_at'] = v
|
||||
v = params_kw.get('published_at', None)
|
||||
if v is not None:
|
||||
data['published_at'] = v
|
||||
|
||||
await sor.U('cms_content', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
await sor.U('cms_content', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,68 +1,66 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
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)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
|
||||
v = params_kw.get('source', None)
|
||||
if v is not None:
|
||||
data['source'] = v
|
||||
v = params_kw.get('source', None)
|
||||
if v is not None:
|
||||
data['source'] = v
|
||||
|
||||
v = params_kw.get('name', None)
|
||||
if v is not None:
|
||||
data['name'] = v
|
||||
v = params_kw.get('name', None)
|
||||
if v is not None:
|
||||
data['name'] = v
|
||||
|
||||
v = params_kw.get('company', None)
|
||||
if v is not None:
|
||||
data['company'] = v
|
||||
v = params_kw.get('company', None)
|
||||
if v is not None:
|
||||
data['company'] = v
|
||||
|
||||
v = params_kw.get('phone', None)
|
||||
if v is not None:
|
||||
data['phone'] = v
|
||||
v = params_kw.get('phone', None)
|
||||
if v is not None:
|
||||
data['phone'] = v
|
||||
|
||||
v = params_kw.get('email', None)
|
||||
if v is not None:
|
||||
data['email'] = v
|
||||
v = params_kw.get('email', None)
|
||||
if v is not None:
|
||||
data['email'] = v
|
||||
|
||||
v = params_kw.get('industry', None)
|
||||
if v is not None:
|
||||
data['industry'] = v
|
||||
v = params_kw.get('industry', None)
|
||||
if v is not None:
|
||||
data['industry'] = v
|
||||
|
||||
v = params_kw.get('region', None)
|
||||
if v is not None:
|
||||
data['region'] = v
|
||||
v = params_kw.get('region', None)
|
||||
if v is not None:
|
||||
data['region'] = v
|
||||
|
||||
v = params_kw.get('interest_products', None)
|
||||
if v is not None:
|
||||
data['interest_products'] = v
|
||||
v = params_kw.get('interest_products', None)
|
||||
if v is not None:
|
||||
data['interest_products'] = v
|
||||
|
||||
v = params_kw.get('message', None)
|
||||
if v is not None:
|
||||
data['message'] = v
|
||||
v = params_kw.get('message', None)
|
||||
if v is not None:
|
||||
data['message'] = v
|
||||
|
||||
v = params_kw.get('raw_text', None)
|
||||
if v is not None:
|
||||
data['raw_text'] = v
|
||||
v = params_kw.get('raw_text', None)
|
||||
if v is not None:
|
||||
data['raw_text'] = v
|
||||
|
||||
v = params_kw.get('status', None)
|
||||
if v is not None:
|
||||
data['status'] = v
|
||||
v = params_kw.get('status', None)
|
||||
if v is not None:
|
||||
data['status'] = v
|
||||
|
||||
v = params_kw.get('assigned_to', None)
|
||||
if v is not None:
|
||||
data['assigned_to'] = v
|
||||
v = params_kw.get('assigned_to', None)
|
||||
if v is not None:
|
||||
data['assigned_to'] = v
|
||||
|
||||
v = params_kw.get('notes', None)
|
||||
if v is not None:
|
||||
data['notes'] = v
|
||||
v = params_kw.get('notes', None)
|
||||
if v is not None:
|
||||
data['notes'] = v
|
||||
|
||||
await sor.C('cms_leads', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
await sor.C('cms_leads', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
await sor.D('cms_leads', {'id': _id})
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
await sor.D('cms_leads', {'id': _id})
|
||||
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,36 +1,34 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
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
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
# data_filter support
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Manual filter params
|
||||
# Manual filter params
|
||||
|
||||
_status = params_kw.get('status', None)
|
||||
if _status:
|
||||
ns['status'] = _status
|
||||
_status = params_kw.get('status', None)
|
||||
if _status:
|
||||
ns['status'] = _status
|
||||
|
||||
_source = params_kw.get('source', None)
|
||||
if _source:
|
||||
ns['source'] = _source
|
||||
_source = params_kw.get('source', None)
|
||||
if _source:
|
||||
ns['source'] = _source
|
||||
|
||||
rows = await sor.R('cms_leads', ns)
|
||||
total = len(rows)
|
||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': total}, ensure_ascii=False))
|
||||
rows = await sor.R('cms_leads', ns)
|
||||
total = len(rows)
|
||||
return {'status': 'ok', 'rows': rows, 'total': total}
|
||||
|
||||
@ -1,71 +1,68 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
|
||||
v = params_kw.get('source', None)
|
||||
if v is not None:
|
||||
data['source'] = v
|
||||
v = params_kw.get('source', None)
|
||||
if v is not None:
|
||||
data['source'] = v
|
||||
|
||||
v = params_kw.get('name', None)
|
||||
if v is not None:
|
||||
data['name'] = v
|
||||
v = params_kw.get('name', None)
|
||||
if v is not None:
|
||||
data['name'] = v
|
||||
|
||||
v = params_kw.get('company', None)
|
||||
if v is not None:
|
||||
data['company'] = v
|
||||
v = params_kw.get('company', None)
|
||||
if v is not None:
|
||||
data['company'] = v
|
||||
|
||||
v = params_kw.get('phone', None)
|
||||
if v is not None:
|
||||
data['phone'] = v
|
||||
v = params_kw.get('phone', None)
|
||||
if v is not None:
|
||||
data['phone'] = v
|
||||
|
||||
v = params_kw.get('email', None)
|
||||
if v is not None:
|
||||
data['email'] = v
|
||||
v = params_kw.get('email', None)
|
||||
if v is not None:
|
||||
data['email'] = v
|
||||
|
||||
v = params_kw.get('industry', None)
|
||||
if v is not None:
|
||||
data['industry'] = v
|
||||
v = params_kw.get('industry', None)
|
||||
if v is not None:
|
||||
data['industry'] = v
|
||||
|
||||
v = params_kw.get('region', None)
|
||||
if v is not None:
|
||||
data['region'] = v
|
||||
v = params_kw.get('region', None)
|
||||
if v is not None:
|
||||
data['region'] = v
|
||||
|
||||
v = params_kw.get('interest_products', None)
|
||||
if v is not None:
|
||||
data['interest_products'] = v
|
||||
v = params_kw.get('interest_products', None)
|
||||
if v is not None:
|
||||
data['interest_products'] = v
|
||||
|
||||
v = params_kw.get('message', None)
|
||||
if v is not None:
|
||||
data['message'] = v
|
||||
v = params_kw.get('message', None)
|
||||
if v is not None:
|
||||
data['message'] = v
|
||||
|
||||
v = params_kw.get('raw_text', None)
|
||||
if v is not None:
|
||||
data['raw_text'] = v
|
||||
v = params_kw.get('raw_text', None)
|
||||
if v is not None:
|
||||
data['raw_text'] = v
|
||||
|
||||
v = params_kw.get('status', None)
|
||||
if v is not None:
|
||||
data['status'] = v
|
||||
v = params_kw.get('status', None)
|
||||
if v is not None:
|
||||
data['status'] = v
|
||||
|
||||
v = params_kw.get('assigned_to', None)
|
||||
if v is not None:
|
||||
data['assigned_to'] = v
|
||||
v = params_kw.get('assigned_to', None)
|
||||
if v is not None:
|
||||
data['assigned_to'] = v
|
||||
|
||||
v = params_kw.get('notes', None)
|
||||
if v is not None:
|
||||
data['notes'] = v
|
||||
v = params_kw.get('notes', None)
|
||||
if v is not None:
|
||||
data['notes'] = v
|
||||
|
||||
await sor.U('cms_leads', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
await sor.U('cms_leads', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,44 +1,42 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
data = {'id': getID()}
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('section_key', None)
|
||||
if v is not None:
|
||||
data['section_key'] = v
|
||||
v = params_kw.get('title', None)
|
||||
if v is not None:
|
||||
data['title'] = v
|
||||
v = params_kw.get('subtitle', None)
|
||||
if v is not None:
|
||||
data['subtitle'] = v
|
||||
v = params_kw.get('section_type', None)
|
||||
if v is not None:
|
||||
data['section_type'] = v
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('is_visible', None)
|
||||
if v is not None:
|
||||
data['is_visible'] = v
|
||||
v = params_kw.get('display_config', None)
|
||||
if v is not None:
|
||||
data['display_config'] = v
|
||||
v = params_kw.get('style_config', None)
|
||||
if v is not None:
|
||||
data['style_config'] = v
|
||||
v = params_kw.get('static_content', None)
|
||||
if v is not None:
|
||||
data['static_content'] = v
|
||||
await sor.C('cms_sections', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
data = {'id': getID()}
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('section_key', None)
|
||||
if v is not None:
|
||||
data['section_key'] = v
|
||||
v = params_kw.get('title', None)
|
||||
if v is not None:
|
||||
data['title'] = v
|
||||
v = params_kw.get('subtitle', None)
|
||||
if v is not None:
|
||||
data['subtitle'] = v
|
||||
v = params_kw.get('section_type', None)
|
||||
if v is not None:
|
||||
data['section_type'] = v
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('is_visible', None)
|
||||
if v is not None:
|
||||
data['is_visible'] = v
|
||||
v = params_kw.get('display_config', None)
|
||||
if v is not None:
|
||||
data['display_config'] = v
|
||||
v = params_kw.get('style_config', None)
|
||||
if v is not None:
|
||||
data['style_config'] = v
|
||||
v = params_kw.get('static_content', None)
|
||||
if v is not None:
|
||||
data['static_content'] = v
|
||||
await sor.C('cms_sections', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
await sor.D('cms_sections', {'id': _id})
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
await sor.D('cms_sections', {'id': _id})
|
||||
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,22 +1,20 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
ns = {'sort': 'sort_order asc'}
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
rows = await sor.R('cms_sections', ns)
|
||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': len(rows)}, ensure_ascii=False))
|
||||
ns = {'sort': 'sort_order asc'}
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
rows = await sor.R('cms_sections', ns)
|
||||
return {'status': 'ok', 'rows': rows, 'total': len(rows)}
|
||||
|
||||
@ -1,47 +1,44 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('section_key', None)
|
||||
if v is not None:
|
||||
data['section_key'] = v
|
||||
v = params_kw.get('title', None)
|
||||
if v is not None:
|
||||
data['title'] = v
|
||||
v = params_kw.get('subtitle', None)
|
||||
if v is not None:
|
||||
data['subtitle'] = v
|
||||
v = params_kw.get('section_type', None)
|
||||
if v is not None:
|
||||
data['section_type'] = v
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('is_visible', None)
|
||||
if v is not None:
|
||||
data['is_visible'] = v
|
||||
v = params_kw.get('display_config', None)
|
||||
if v is not None:
|
||||
data['display_config'] = v
|
||||
v = params_kw.get('style_config', None)
|
||||
if v is not None:
|
||||
data['style_config'] = v
|
||||
v = params_kw.get('static_content', None)
|
||||
if v is not None:
|
||||
data['static_content'] = v
|
||||
await sor.U('cms_sections', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('section_key', None)
|
||||
if v is not None:
|
||||
data['section_key'] = v
|
||||
v = params_kw.get('title', None)
|
||||
if v is not None:
|
||||
data['title'] = v
|
||||
v = params_kw.get('subtitle', None)
|
||||
if v is not None:
|
||||
data['subtitle'] = v
|
||||
v = params_kw.get('section_type', None)
|
||||
if v is not None:
|
||||
data['section_type'] = v
|
||||
v = params_kw.get('content_type', None)
|
||||
if v is not None:
|
||||
data['content_type'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('is_visible', None)
|
||||
if v is not None:
|
||||
data['is_visible'] = v
|
||||
v = params_kw.get('display_config', None)
|
||||
if v is not None:
|
||||
data['display_config'] = v
|
||||
v = params_kw.get('style_config', None)
|
||||
if v is not None:
|
||||
data['style_config'] = v
|
||||
v = params_kw.get('static_content', None)
|
||||
if v is not None:
|
||||
data['static_content'] = v
|
||||
await sor.U('cms_sections', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,36 +1,34 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
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)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
|
||||
v = params_kw.get('config_group', None)
|
||||
if v is not None:
|
||||
data['config_group'] = v
|
||||
v = params_kw.get('config_group', None)
|
||||
if v is not None:
|
||||
data['config_group'] = v
|
||||
|
||||
v = params_kw.get('config_key', None)
|
||||
if v is not None:
|
||||
data['config_key'] = v
|
||||
v = params_kw.get('config_key', None)
|
||||
if v is not None:
|
||||
data['config_key'] = v
|
||||
|
||||
v = params_kw.get('config_value', None)
|
||||
if v is not None:
|
||||
data['config_value'] = v
|
||||
v = params_kw.get('config_value', None)
|
||||
if v is not None:
|
||||
data['config_value'] = v
|
||||
|
||||
v = params_kw.get('config_type', None)
|
||||
if v is not None:
|
||||
data['config_type'] = v
|
||||
v = params_kw.get('config_type', None)
|
||||
if v is not None:
|
||||
data['config_type'] = v
|
||||
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
|
||||
await sor.C('cms_site_config', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
await sor.C('cms_site_config', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '创建成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,14 +1,11 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
await sor.D('cms_site_config', {'id': _id})
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
await sor.D('cms_site_config', {'id': _id})
|
||||
return {'widgettype': 'Message', 'options': {'text': '删除成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,32 +1,30 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
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
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
# data_filter support
|
||||
filter_json = params_kw.get('data_filter', None)
|
||||
if filter_json:
|
||||
from sqlor.filter import DBFilter
|
||||
try:
|
||||
filter_def = json.loads(filter_json) if isinstance(filter_json, str) else filter_json
|
||||
dbf = DBFilter(filter_def)
|
||||
conds = dbf.gen(params_kw)
|
||||
ns.update(conds)
|
||||
ns.update(dbf.consts)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Manual filter params
|
||||
# Manual filter params
|
||||
|
||||
_config_group = params_kw.get('config_group', None)
|
||||
if _config_group:
|
||||
ns['config_group'] = _config_group
|
||||
_config_group = params_kw.get('config_group', None)
|
||||
if _config_group:
|
||||
ns['config_group'] = _config_group
|
||||
|
||||
rows = await sor.R('cms_site_config', ns)
|
||||
total = len(rows)
|
||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': total}, ensure_ascii=False))
|
||||
rows = await sor.R('cms_site_config', ns)
|
||||
total = len(rows)
|
||||
return {'status': 'ok', 'rows': rows, 'total': total}
|
||||
|
||||
@ -1,39 +1,36 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
return
|
||||
data = {'id': params_kw.get('id', '')}
|
||||
if not data['id']:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少ID', 'messagetype': 'error'}}
|
||||
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
v = params_kw.get('org_id', None)
|
||||
if v is not None:
|
||||
data['org_id'] = v
|
||||
|
||||
v = params_kw.get('config_group', None)
|
||||
if v is not None:
|
||||
data['config_group'] = v
|
||||
v = params_kw.get('config_group', None)
|
||||
if v is not None:
|
||||
data['config_group'] = v
|
||||
|
||||
v = params_kw.get('config_key', None)
|
||||
if v is not None:
|
||||
data['config_key'] = v
|
||||
v = params_kw.get('config_key', None)
|
||||
if v is not None:
|
||||
data['config_key'] = v
|
||||
|
||||
v = params_kw.get('config_value', None)
|
||||
if v is not None:
|
||||
data['config_value'] = v
|
||||
v = params_kw.get('config_value', None)
|
||||
if v is not None:
|
||||
data['config_value'] = v
|
||||
|
||||
v = params_kw.get('config_type', None)
|
||||
if v is not None:
|
||||
data['config_type'] = v
|
||||
v = params_kw.get('config_type', None)
|
||||
if v is not None:
|
||||
data['config_type'] = v
|
||||
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
v = params_kw.get('sort_order', None)
|
||||
if v is not None:
|
||||
data['sort_order'] = v
|
||||
|
||||
await sor.U('cms_site_config', data)
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}, ensure_ascii=False))
|
||||
await sor.U('cms_site_config', data)
|
||||
return {'widgettype': 'Message', 'options': {'text': '更新成功', 'messagetype': 'success'}}
|
||||
|
||||
@ -1,20 +1,18 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
group = params_kw.get('group', None)
|
||||
ns = {'sort': 'sort_order asc'}
|
||||
if group:
|
||||
ns['config_group'] = group
|
||||
rows = await sor.R('cms_site_config', ns)
|
||||
result = {}
|
||||
for r in rows:
|
||||
g = r.get('config_group', '')
|
||||
if g not in result:
|
||||
result[g] = {}
|
||||
result[g][r.get('config_key', '')] = r.get('config_value', '')
|
||||
print(json.dumps({'status': 'ok', 'data': result}, ensure_ascii=False))
|
||||
group = params_kw.get('group', None)
|
||||
ns = {'sort': 'sort_order asc'}
|
||||
if group:
|
||||
ns['config_group'] = group
|
||||
rows = await sor.R('cms_site_config', ns)
|
||||
result = {}
|
||||
for r in rows:
|
||||
g = r.get('config_group', '')
|
||||
if g not in result:
|
||||
result[g] = {}
|
||||
result[g][r.get('config_key', '')] = r.get('config_value', '')
|
||||
return {'status': 'ok', 'data': result}
|
||||
|
||||
@ -1,18 +1,16 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
print(json.dumps({'status': 'error', 'message': '缺少ID'}, ensure_ascii=False))
|
||||
else:
|
||||
ns = {'id': _id}
|
||||
rows = await sor.R('cms_content', ns)
|
||||
if rows:
|
||||
print(json.dumps({'status': 'ok', 'data': rows[0]}, ensure_ascii=False))
|
||||
_id = params_kw.get('id', '')
|
||||
if not _id:
|
||||
return {'status': 'error', 'message': '缺少ID'}
|
||||
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('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
content_type = params_kw.get('content_type', None)
|
||||
limit = int(params_kw.get('limit', '10'))
|
||||
ns = {'status': 'published', 'sort': 'sort_order asc, published_at desc'}
|
||||
if content_type:
|
||||
ns['content_type'] = content_type
|
||||
rows = await sor.R('cms_content', ns)
|
||||
if limit:
|
||||
rows = rows[:limit]
|
||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': len(rows)}, ensure_ascii=False))
|
||||
content_type = params_kw.get('content_type', None)
|
||||
limit = int(params_kw.get('limit', '10'))
|
||||
ns = {'status': 'published', 'sort': 'sort_order asc, published_at desc'}
|
||||
if content_type:
|
||||
ns['content_type'] = content_type
|
||||
rows = await sor.R('cms_content', ns)
|
||||
if limit:
|
||||
rows = rows[:limit]
|
||||
return {'status': 'ok', 'rows': rows, 'total': len(rows)}
|
||||
|
||||
@ -1,20 +1,18 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
ns = {'is_visible': '1', 'sort': 'sort_order asc'}
|
||||
rows = await sor.R('cms_sections', ns)
|
||||
# Parse JSON fields
|
||||
for r in rows:
|
||||
for field in ['display_config', 'style_config', 'static_content']:
|
||||
v = r.get(field, None)
|
||||
if v and isinstance(v, str):
|
||||
try:
|
||||
r[field] = json.loads(v)
|
||||
except:
|
||||
pass
|
||||
print(json.dumps({'status': 'ok', 'rows': rows, 'total': len(rows)}, ensure_ascii=False))
|
||||
ns = {'is_visible': '1', 'sort': 'sort_order asc'}
|
||||
rows = await sor.R('cms_sections', ns)
|
||||
# Parse JSON fields
|
||||
for r in rows:
|
||||
for field in ['display_config', 'style_config', 'static_content']:
|
||||
v = r.get(field, None)
|
||||
if v and isinstance(v, str):
|
||||
try:
|
||||
r[field] = json.loads(v)
|
||||
except:
|
||||
pass
|
||||
return {'status': 'ok', 'rows': rows, 'total': len(rows)}
|
||||
|
||||
@ -1,28 +1,26 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
content_id = params_kw.get('content_id', '')
|
||||
if not content_id:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '缺少内容ID', 'messagetype': 'error'}}, ensure_ascii=False))
|
||||
else:
|
||||
# Update status to pending
|
||||
await sor.U('cms_content', {'id': content_id, 'status': 'pending'})
|
||||
|
||||
# Try to call dingdingflow
|
||||
try:
|
||||
from dingdingflow.init import submit_approval
|
||||
user_id = await get_user()
|
||||
ns_detail = {'id': content_id}
|
||||
rows = await sor.R('cms_content', ns_detail)
|
||||
title = rows[0].get('title', '内容审批') if rows else '内容审批'
|
||||
result = await submit_approval('content_publish', content_id, title, user_id)
|
||||
if result and result.get('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))
|
||||
except ImportError:
|
||||
print(json.dumps({'widgettype': 'Message', 'options': {'text': '审批模块未安装,状态已改为待审批', 'messagetype': 'warning'}}, ensure_ascii=False))
|
||||
content_id = params_kw.get('content_id', '')
|
||||
if not content_id:
|
||||
return {'widgettype': 'Message', 'options': {'text': '缺少内容ID', 'messagetype': 'error'}}
|
||||
else:
|
||||
# Update status to pending
|
||||
await sor.U('cms_content', {'id': content_id, 'status': 'pending'})
|
||||
|
||||
# Try to call dingdingflow
|
||||
try:
|
||||
from dingdingflow.init import submit_approval
|
||||
user_id = await get_user()
|
||||
ns_detail = {'id': content_id}
|
||||
rows = await sor.R('cms_content', ns_detail)
|
||||
title = rows[0].get('title', '内容审批') if rows else '内容审批'
|
||||
result = await submit_approval('content_publish', content_id, title, user_id)
|
||||
if result and result.get('approval_id'):
|
||||
await sor.U('cms_content', {'id': content_id, 'approval_id': result['approval_id']})
|
||||
return {'widgettype': 'Message', 'options': {'text': '已提交审批', 'messagetype': 'success'}}
|
||||
except ImportError:
|
||||
return {'widgettype': 'Message', 'options': {'text': '审批模块未安装,状态已改为待审批', 'messagetype': 'warning'}}
|
||||
|
||||
@ -1,25 +1,22 @@
|
||||
import json
|
||||
from appPublic.uniqueID import getID
|
||||
|
||||
config = getConfig('.')
|
||||
DBPools(config.databases)
|
||||
dbname = get_module_dbname('entcms')
|
||||
sor = DBPools().sqlorContext(dbname)
|
||||
async with db.sqlorContext(dbname) as sor:
|
||||
|
||||
data = {
|
||||
'id': getID(),
|
||||
'source': 'website',
|
||||
'status': 'new',
|
||||
'org_id': '0'
|
||||
}
|
||||
for field in ['name', 'company', 'phone', 'email', 'industry', 'region',
|
||||
'interest_products', 'message']:
|
||||
v = params_kw.get(field, None)
|
||||
if v is not None:
|
||||
data[field] = v
|
||||
data = {
|
||||
'id': getID(),
|
||||
'source': 'website',
|
||||
'status': 'new',
|
||||
'org_id': '0'
|
||||
}
|
||||
for field in ['name', 'company', 'phone', 'email', 'industry', 'region',
|
||||
'interest_products', 'message']:
|
||||
v = params_kw.get(field, None)
|
||||
if v is not None:
|
||||
data[field] = v
|
||||
|
||||
await sor.C('cms_leads', data)
|
||||
print(json.dumps({
|
||||
'widgettype': 'Message',
|
||||
'options': {'text': '感谢您的留言,我们会尽快联系您!', 'messagetype': 'success'}
|
||||
}, ensure_ascii=False))
|
||||
await sor.C('cms_leads', data)
|
||||
return {
|
||||
'widgettype': 'Message',
|
||||
'options': {'text': '感谢您的留言,我们会尽快联系您!', 'messagetype': 'success'}
|
||||
}
|
||||
|
||||
@ -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'}}
|
||||
|
||||
try:
|
||||
@ -12,9 +8,9 @@ try:
|
||||
if not biz_type:
|
||||
result['options'] = {'title': 'Error', 'message': 'biz_type is required', 'type': 'error'}
|
||||
else:
|
||||
new_id = uuid()
|
||||
new_id = getID()
|
||||
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')
|
||||
async with DBPools().sqlorContext(dbname) as sor:
|
||||
@ -38,4 +34,4 @@ try:
|
||||
except Exception as e:
|
||||
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'}}
|
||||
|
||||
try:
|
||||
@ -17,4 +13,4 @@ try:
|
||||
except Exception as e:
|
||||
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}
|
||||
|
||||
try:
|
||||
@ -55,4 +51,4 @@ try:
|
||||
except Exception as 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'}}
|
||||
|
||||
try:
|
||||
@ -21,7 +17,7 @@ try:
|
||||
update_ns[field] = val
|
||||
|
||||
# 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_ns['updated_at'] = now_str
|
||||
|
||||
@ -33,4 +29,4 @@ try:
|
||||
except Exception as e:
|
||||
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'}}
|
||||
|
||||
try:
|
||||
@ -13,9 +9,9 @@ try:
|
||||
if not biz_type or not title:
|
||||
result['options'] = {'title': 'Error', 'message': 'biz_type and title are required', 'type': 'error'}
|
||||
else:
|
||||
new_id = uuid()
|
||||
new_id = getID()
|
||||
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')
|
||||
async with DBPools().sqlorContext(dbname) as sor:
|
||||
@ -40,4 +36,4 @@ try:
|
||||
except Exception as e:
|
||||
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'}}
|
||||
|
||||
try:
|
||||
@ -17,4 +13,4 @@ try:
|
||||
except Exception as e:
|
||||
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}
|
||||
|
||||
try:
|
||||
@ -73,4 +69,4 @@ try:
|
||||
except Exception as 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'}}
|
||||
|
||||
try:
|
||||
@ -33,4 +29,4 @@ try:
|
||||
except Exception as e:
|
||||
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'}
|
||||
|
||||
try:
|
||||
@ -59,4 +42,4 @@ try:
|
||||
except Exception as 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'}
|
||||
|
||||
try:
|
||||
@ -22,7 +15,7 @@ try:
|
||||
else:
|
||||
# Use current user as applicant if not specified
|
||||
if not applicant_id:
|
||||
applicant_id = get_user() or ''
|
||||
applicant_id = (await get_user()) or ''
|
||||
|
||||
org_id = (await get_userorgid()) or '0'
|
||||
|
||||
@ -33,4 +26,4 @@ try:
|
||||
except Exception as 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