yumoqing 4fd136bf53 refactor: reseller org_id isolation for product_management module
- product_category: org_id scoped tree, product_table_name -> product_type
- product: org_id scoped, added extra_json for custom attributes, product_type field
- product_type_config: org_id + operator_id dual isolation, unique key on (org_id, operator_id, category_id, config_name)
- All 18 API endpoints enforce org_id filtering via ServerEnv
- core.py: all methods accept optional org_id, default to current user's org
- CRUD definitions: logined_userorgid set to org_id on all lists
- init/data.json: removed hardcoded global categories (managed per reseller)
- Rebuilt mysql.ddl.sql and all CRUD UI files
2026-05-25 17:03:08 +08:00

361 lines
8.2 KiB
XML

{
"id":"product_tbl",
"widgettype":"Tabular",
"options":{
"width":"100%",
"height":"100%",
"title":"产品注册表",
"css":"card",
"editable":{
"new_data_url":"{{entire_url('add_product.dspy')}}",
"delete_data_url":"{{entire_url('delete_product.dspy')}}",
"update_data_url":"{{entire_url('update_product.dspy')}}"
},
"data_url":"{{entire_url('./get_product.dspy')}}",
"data_method":"GET",
"data_params":{{json.dumps(params_kw, indent=4, ensure_ascii=False)}},
"row_options":{
"browserfields": {
"exclouded": [],
"alters": {
"category_id": {
"uitype": "code",
"dataurl": "{{entire_url('../api/category_options.dspy')}}",
"datamethod": "GET"
},
"status": {
"uitype": "code",
"data": [
{
"value": "1",
"text": "启用"
},
{
"value": "0",
"text": "禁用"
}
]
},
"price_type": {
"uitype": "code",
"data": [
{
"value": "1",
"text": "固定价格"
},
{
"value": "2",
"text": "阶梯价格"
},
{
"value": "3",
"text": "议价"
}
]
}
}
},
"editexclouded":[
"created_by",
"created_at",
"updated_at",
"org_id"
],
"fields":[
{
"name": "id",
"title": "主键ID",
"type": "str",
"length": 32,
"nullable": "no",
"cwidth": 18,
"uitype": "str",
"datatype": "str",
"label": "主键ID"
},
{
"name": "category_id",
"title": "类别ID",
"type": "str",
"length": 32,
"nullable": "no",
"label": "类别ID",
"uitype": "code",
"valueField": "category_id",
"textField": "category_id_text",
"params": {
"dbname": "{{get_module_dbname('product_management')}}",
"table": "product_category",
"tblvalue": "id",
"tbltext": "name",
"valueField": "category_id",
"textField": "category_id_text",
"cond": "has_product='1' AND status='1'"
},
"dataurl": "{{entire_url('../api/category_options.dspy')}}",
"datamethod": "GET"
},
{
"name": "product_code",
"title": "产品编码",
"type": "str",
"length": 64,
"nullable": "no",
"cwidth": 18,
"uitype": "str",
"datatype": "str",
"label": "产品编码"
},
{
"name": "product_name",
"title": "产品名称",
"type": "str",
"length": 255,
"nullable": "no",
"cwidth": 18,
"uitype": "str",
"datatype": "str",
"label": "产品名称"
},
{
"name": "product_type",
"title": "产品类型标识",
"type": "str",
"length": 64,
"nullable": "no",
"label": "产品类型标识",
"uitype": "code",
"valueField": "product_type",
"textField": "product_type_text",
"params": {
"dbname": "{{get_module_dbname('product_management')}}",
"table": "appcodes_kv",
"tblvalue": "k",
"tbltext": "v",
"valueField": "product_type",
"textField": "product_type_text",
"cond": "id='product_type'"
},
"dataurl": "{{entire_url('/appbase/get_code.dspy')}}"
},
{
"name": "brief_intro",
"title": "产品简介",
"type": "text",
"length": 0,
"uitype": "text",
"datatype": "text",
"label": "产品简介"
},
{
"name": "detail_intro",
"title": "产品详情",
"type": "text",
"length": 0,
"uitype": "text",
"datatype": "text",
"label": "产品详情"
},
{
"name": "extra_json",
"title": "扩展属性",
"type": "text",
"length": 0,
"uitype": "text",
"datatype": "text",
"label": "扩展属性"
},
{
"name": "enabled_date",
"title": "启用日期",
"type": "date",
"length": 0,
"uitype": "date",
"datatype": "date",
"label": "启用日期"
},
{
"name": "expired_date",
"title": "失效日期",
"type": "date",
"length": 0,
"uitype": "date",
"datatype": "date",
"label": "失效日期"
},
{
"name": "status",
"title": "状态",
"type": "char",
"length": 1,
"default": "1",
"label": "状态",
"uitype": "code",
"valueField": "status",
"textField": "status_text",
"params": {
"dbname": "{{get_module_dbname('product_management')}}",
"table": "appcodes_kv",
"tblvalue": "k",
"tbltext": "v",
"valueField": "status",
"textField": "status_text",
"cond": "id='product_status'"
},
"dataurl": "{{entire_url('/appbase/get_code.dspy')}}",
"data": [
{
"value": "1",
"text": "启用"
},
{
"value": "0",
"text": "禁用"
}
]
},
{
"name": "price_type",
"title": "价格类型",
"type": "char",
"length": 1,
"default": "1",
"label": "价格类型",
"uitype": "code",
"valueField": "price_type",
"textField": "price_type_text",
"params": {
"dbname": "{{get_module_dbname('product_management')}}",
"table": "appcodes_kv",
"tblvalue": "k",
"tbltext": "v",
"valueField": "price_type",
"textField": "price_type_text",
"cond": "id='product_price_type'"
},
"dataurl": "{{entire_url('/appbase/get_code.dspy')}}",
"data": [
{
"value": "1",
"text": "固定价格"
},
{
"value": "2",
"text": "阶梯价格"
},
{
"value": "3",
"text": "议价"
}
]
},
{
"name": "price",
"title": "价格",
"type": "double",
"length": 15,
"dec": 2,
"default": "0.00",
"cwidth": 15,
"uitype": "float",
"datatype": "double",
"label": "价格"
},
{
"name": "currency",
"title": "货币",
"type": "char",
"length": 8,
"default": "CNY",
"cwidth": 8,
"uitype": "str",
"datatype": "char",
"label": "货币"
},
{
"name": "sort_order",
"title": "排序序号",
"type": "int",
"default": "0",
"length": 0,
"uitype": "int",
"datatype": "int",
"label": "排序序号"
},
{
"name": "org_id",
"title": "所属机构ID",
"type": "str",
"length": 32,
"default": "0",
"cwidth": 18,
"uitype": "str",
"datatype": "str",
"label": "所属机构ID"
},
{
"name": "created_by",
"title": "创建人",
"type": "str",
"length": 32,
"cwidth": 18,
"uitype": "str",
"datatype": "str",
"label": "创建人"
},
{
"name": "created_at",
"title": "创建时间",
"type": "datetime",
"nullable": "no",
"length": 0,
"uitype": "str",
"datatype": "datetime",
"label": "创建时间"
},
{
"name": "updated_at",
"title": "更新时间",
"type": "datetime",
"nullable": "no",
"length": 0,
"uitype": "str",
"datatype": "datetime",
"label": "更新时间"
}
]
},
"page_rows":160,
"cache_limit":5
}
,"binds":[]
}