396 lines
9.7 KiB
JSON
396 lines
9.7 KiB
JSON
{
|
||
"name": "用户",
|
||
"table": {
|
||
"name": "user",
|
||
"comment": "用户表",
|
||
"engine": "InnoDB"
|
||
},
|
||
"columns": [
|
||
{ "label": "ID", "name": "id", "type": "ID" },
|
||
{
|
||
"label": "厂商",
|
||
"name": "manu_id",
|
||
"type": "bigInteger",
|
||
"length": 50,
|
||
"comment": "所属厂商",
|
||
"nullable": true,
|
||
"index": true,
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["integer"],
|
||
"message": "{{input}}类型错误, {{label}}应为数字"
|
||
},
|
||
{
|
||
"method": "min",
|
||
"args": [0],
|
||
"message": "{{label}}应大于0"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"label": "类型",
|
||
"name": "type",
|
||
"type": "enum",
|
||
"option": ["admin", "staff", "user"],
|
||
"comment": "账号类型 admin 管理员, staff 员工, user 用户",
|
||
"default": "staff",
|
||
"index": true,
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["string"],
|
||
"message": "{{input}}类型错误, {{label}}应该为字符串"
|
||
},
|
||
{
|
||
"method": "enum",
|
||
"args": ["admin", "staff", "user"],
|
||
"message": "{{input}}不在许可范围, {{label}}应该为 admin/staff/user"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"label": "手机号",
|
||
"name": "mobile",
|
||
"type": "string",
|
||
"length": 50,
|
||
"comment": "手机号",
|
||
"index": true,
|
||
"crypt": "AES",
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["string"],
|
||
"message": "{{input}}类型错误, {{label}}应该为字符串"
|
||
},
|
||
{
|
||
"method": "pattern",
|
||
"args": ["^1[3-9]\\d{9}$"],
|
||
"message": "{{input}}格式错误"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"label": "登录密码",
|
||
"name": "password",
|
||
"type": "string",
|
||
"length": 256,
|
||
"comment": "登录密码",
|
||
"crypt": "PASSWORD",
|
||
"index": true,
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["string"],
|
||
"message": "{{input}}类型错误, {{label}}应该为字符串"
|
||
},
|
||
{
|
||
"method": "minLength",
|
||
"args": [6],
|
||
"message": "{{label}}应该由6-18位,大小写字母、数字和符号构成"
|
||
},
|
||
{
|
||
"method": "maxLength",
|
||
"args": [18],
|
||
"message": "{{label}}应该由6-18位,大小写字母、数字和符号构成"
|
||
},
|
||
{
|
||
"method": "pattern",
|
||
"args": ["[0-9]+"],
|
||
"message": "{{label}}应该至少包含一个数字"
|
||
},
|
||
{
|
||
"method": "pattern",
|
||
"args": ["[A-Z]+"],
|
||
"message": "{{label}}应该至少包含一个大写字母"
|
||
},
|
||
{
|
||
"method": "pattern",
|
||
"args": ["[a-z]+"],
|
||
"message": "{{label}}应该至少包含一个小写字母"
|
||
},
|
||
{
|
||
"method": "pattern",
|
||
"args": ["[@#$&*]+"],
|
||
"message": "{{label}}应该至少包含一个符号"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"label": "姓名",
|
||
"name": "name",
|
||
"type": "string",
|
||
"length": 80,
|
||
"comment": "姓名",
|
||
"index": true,
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["string"],
|
||
"message": "{{input}}类型错误, {{label}}应该为字符串"
|
||
},
|
||
{
|
||
"method": "minLength",
|
||
"args": [2],
|
||
"message": "{{label}}至少需要2个字"
|
||
},
|
||
{
|
||
"method": "maxLength",
|
||
"args": [40],
|
||
"message": "{{label}}不能超过20个字"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"label": "身份证号码",
|
||
"name": "idcard",
|
||
"type": "string",
|
||
"length": 256,
|
||
"comment": "身份证号码",
|
||
"crypt": "AES",
|
||
"nullable": true,
|
||
"index": true,
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["string"],
|
||
"message": "{{input}}类型错误, {{label}}应该为字符串"
|
||
},
|
||
{
|
||
"method": "pattern",
|
||
"args": ["^(\\d{18})|(\\d{14}X)$"],
|
||
"message": "{{label}}格式错误"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"label": "账户余额",
|
||
"name": "balance",
|
||
"type": "integer",
|
||
"length": 20,
|
||
"comment": "账户余额(冗余)",
|
||
"default": 0,
|
||
"index": true,
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["integer"],
|
||
"message": "{{input}}类型错误, {{label}}应为数字"
|
||
},
|
||
{
|
||
"method": "min",
|
||
"args": [0],
|
||
"message": "{{label}}应大于0"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"label": "API Key",
|
||
"name": "key",
|
||
"type": "string",
|
||
"length": 256,
|
||
"comment": "API Key",
|
||
"nullable": true,
|
||
"unique": true,
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["string"],
|
||
"message": "{{input}}类型错误, {{label}}应该为字符串"
|
||
},
|
||
{
|
||
"method": "pattern",
|
||
"args": ["^[0-9A-Za-z@#$&*]{8}$"],
|
||
"message": " {{label}}应该由8位,大小写字母、数字和符号构成"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"label": "API 密钥",
|
||
"name": "secret",
|
||
"type": "string",
|
||
"length": 256,
|
||
"nullable": true,
|
||
"crypt": "AES",
|
||
"comment": "API 密钥",
|
||
"index": true,
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["string"],
|
||
"message": "{{input}}类型错误, {{label}}应该为字符串"
|
||
},
|
||
{
|
||
"method": "pattern",
|
||
"args": ["^[0-9A-Za-z@#$&*]{32}$"],
|
||
"message": "{{label}}应该由32位,大小写字母、数字和符号构成"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"label": "简历",
|
||
"name": "resume",
|
||
"type": "text",
|
||
"comment": "简历",
|
||
"nullable": true
|
||
},
|
||
{
|
||
"label": "扩展信息",
|
||
"name": "extra",
|
||
"type": "json",
|
||
"comment": "扩展信息",
|
||
"nullable": true
|
||
},
|
||
{
|
||
"label": "状态",
|
||
"comment": "用户状态 enabled 有效, disabled 无效",
|
||
"name": "status",
|
||
"type": "enum",
|
||
"default": "enabled",
|
||
"option": ["enabled", "disabled"],
|
||
"index": true,
|
||
"validations": [
|
||
{
|
||
"method": "typeof",
|
||
"args": ["string"],
|
||
"message": "{{input}}类型错误, {{label}}应该为字符串"
|
||
},
|
||
{
|
||
"method": "enum",
|
||
"args": ["enabled", "disabled"],
|
||
"message": "{{input}}不在许可范围, {{label}}应该为 enabled/disabled"
|
||
}
|
||
]
|
||
}
|
||
],
|
||
"relations": {
|
||
"manu": {
|
||
"type": "hasOne",
|
||
"model": "manu",
|
||
"key": "id",
|
||
"foreign": "manu_id",
|
||
"select": ["name", "short_name", "type"]
|
||
},
|
||
"addresses": {
|
||
"type": "hasMany",
|
||
"model": "address",
|
||
"key": "user_id",
|
||
"foreign": "id",
|
||
"query": {
|
||
"select": ["province", "city", "location", "status"],
|
||
"pagesize": 20
|
||
}
|
||
},
|
||
"mother": {
|
||
"type": "hasOneThrough",
|
||
"links": [
|
||
{
|
||
"type": "hasOne",
|
||
"model": "friends",
|
||
"key": "user_id",
|
||
"foreign": "user.id",
|
||
"query": {
|
||
"select": ["status", "type", "friend_id"],
|
||
"wheres": [
|
||
{
|
||
"column": "type",
|
||
"value": "monther"
|
||
}
|
||
]
|
||
}
|
||
},
|
||
{
|
||
"type": "hasOne",
|
||
"model": "user",
|
||
"key": "id",
|
||
"foreign": "user_mother_friends.friend_id",
|
||
"query": {
|
||
"select": ["name", "id", "status", "type", "secret", "extra"],
|
||
"withs": {
|
||
"manu": { "name": "manu" },
|
||
"roles": { "name": "roles" },
|
||
"address": { "name": "address" }
|
||
}
|
||
}
|
||
}
|
||
]
|
||
},
|
||
"roles": {
|
||
"type": "hasManyThrough",
|
||
"links": [
|
||
{
|
||
"type": "hasMany",
|
||
"model": "user_roles",
|
||
"key": "user_id",
|
||
"foreign": "id",
|
||
"query": {
|
||
"select": ["status"],
|
||
"pagesize": 20
|
||
}
|
||
},
|
||
{
|
||
"type": "hasOne",
|
||
"model": "role",
|
||
"key": "id",
|
||
"foreign": "role_id",
|
||
"query": {
|
||
"select": ["name", "label", "permission"]
|
||
}
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"values": [
|
||
{
|
||
"name": "管理员",
|
||
"manu_id": 1,
|
||
"type": "admin",
|
||
"idcard": "230624198301170015",
|
||
"mobile": "13900001111",
|
||
"password": "cvSK@RY6",
|
||
"key": "FB3fxCeQ",
|
||
"secret": "XMTdNRVigbgUiAPdiJCfaWgWcz2PaQXw",
|
||
"status": "enabled",
|
||
"extra": { "sex": "男" }
|
||
},
|
||
{
|
||
"name": "员工",
|
||
"manu_id": 1,
|
||
"type": "staff",
|
||
"idcard": "23082619820207024X",
|
||
"mobile": "13900002222",
|
||
"password": "qV@uT1DI",
|
||
"key": "JDh2ZiUt",
|
||
"secret": "wBeYjL7FjbcvpAdBrxtDFfjydsoPKhRN",
|
||
"status": "enabled",
|
||
"extra": { "sex": "女" }
|
||
},
|
||
{
|
||
"name": "用户",
|
||
"manu_id": 2,
|
||
"type": "user",
|
||
"idcard": "23082619820207004X",
|
||
"mobile": "13900003333",
|
||
"password": "qV@uT1DI",
|
||
"key": "XZ12MiPz",
|
||
"secret": "wBeYjL7FjbcvpAdBrxtDFfjydsoPKhRN",
|
||
"status": "enabled",
|
||
"extra": { "sex": "女" }
|
||
}
|
||
],
|
||
"indexes": [
|
||
{
|
||
"comment": "厂商用户",
|
||
"name": "manu_id_mobile_unique",
|
||
"columns": ["manu_id", "mobile"],
|
||
"type": "unique"
|
||
},
|
||
{
|
||
"comment": "简历全文检索",
|
||
"name": "resume_fulltext",
|
||
"columns": ["resume"],
|
||
"type": "fulltext"
|
||
}
|
||
],
|
||
"option": { "timestamps": true, "soft_deletes": true }
|
||
}
|