@@ -3466,6 +3466,8 @@ https://github.com/Tencent/APIJSON/issues
34663466 return ''
34673467 }
34683468
3469+ var isChainShow = this.isChainShow;
3470+
34693471 var config = ''
34703472 var childPath = path == null || path == '' ? key : path + '/' + key
34713473 var prefix = childPath + ': '
@@ -3528,6 +3530,7 @@ https://github.com/Tencent/APIJSON/issues
35283530
35293531 for (var k in value) {
35303532 var v = value[k]
3533+ var isId = k != null && k.toLowerCase() == 'id'
35313534
35323535 var isAPIJSONArray = isConst == false && v instanceof Object && v instanceof Array == false
35333536 && k.startsWith('@') == false && (k.endsWith('[]') || k.endsWith('@'))
@@ -3556,6 +3559,9 @@ https://github.com/Tencent/APIJSON/issues
35563559
35573560 var cfg = this.newRandomConfig(childPath, k, v, isRand, isBad, noDeep, isConst)
35583561 if (StringUtil.isNotEmpty(cfg, true)) {
3562+ if (isId) {
3563+ return cfg
3564+ }
35593565 config += '\n' + cfg
35603566 }
35613567 }
@@ -3571,7 +3577,219 @@ https://github.com/Tencent/APIJSON/issues
35713577 return config
35723578 }
35733579
3574- if (typeof value == 'boolean') {
3580+ if (isChainShow && (typeof value != 'string' || ! key.endsWith('@'))) {
3581+ var keys = StringUtil.split(path, '/');
3582+ var table = keys == null ? '' : keys[keys.length - 1];
3583+ var isAPIJSONArray = childPath.indexOf('[]') >= 0;
3584+ var isId = key.toLowerCase() == 'id';
3585+ var isList = isAPIJSONArray || childPath.toLowerCase().indexOf('list') >= 0;
3586+ var isRestful = ! JSONObject.isAPIJSONPath(this.getMethod());
3587+
3588+ var tbl = StringUtil.getTableName(key)
3589+ tbl = StringUtil.firstCase(tbl, true)
3590+ var col = StringUtil.getColumnName(key)
3591+ col = StringUtil.firstCase(tbl, false)
3592+
3593+ var ks = keys == null ? [] : keys.subarray(0, keys.length - 1)
3594+ ks.push(tbl)
3595+ var p = ks.join('/')
3596+ var cp = StringUtil.isNotEmpty(tbl) ? childPath : (StringUtil.isEmpty(p) ? '' : p + '/') + col
3597+ var kp = StringUtil.isEmpty(p) ? path : p;
3598+ var fd = StringUtil.isEmpty(kp) ? '' : kp + '/';
3599+
3600+ if (isList) {
3601+ if (isId) {
3602+ config += prefix + 'PRE_ARG("' + StringUtil.firstCase(table + 'Id') + '")';
3603+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + table.toLowerCase() + '_id")';
3604+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3605+ if (isRestful) {
3606+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3607+ if (key != cp) {
3608+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3609+ }
3610+ }
3611+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + StringUtil.firstCase(table + 'Id') + '")';
3612+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + table.toLowerCase() + '_id")';
3613+ config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + StringUtil.firstCase(table + 'Id') + '")';
3614+ config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + table.toLowerCase() + '_id")';
3615+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + StringUtil.firstCase(table + 'Id') + '")';
3616+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + table.toLowerCase() + '_id")';
3617+ if (isRestful && ! isAPIJSONArray) {
3618+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + StringUtil.firstCase(table + 'Id') + '")';
3619+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + table.toLowerCase() + '_id")';
3620+ }
3621+ }
3622+ else if (StringUtil.isIdKey(key)) {
3623+ config += prefix + 'PRE_ARG("' + key + '")';
3624+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("id")';
3625+ if (key != cp) {
3626+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + cp + '")';
3627+ }
3628+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3629+
3630+ var idKey = key.toLowerCase().startsWith(table.toLowerCase()) ? key : "id";
3631+ if (isRestful && ! isAPIJSONArray) {
3632+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3633+ if (key != cp) {
3634+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3635+ }
3636+
3637+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list/0/' + key + '")';
3638+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list/0/id")';
3639+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/0/' + key + '")';
3640+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/0/id")';
3641+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3642+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/id")';
3643+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("list/0/' + key + '")';
3644+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("list/0/id")';
3645+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/' + key + '")';
3646+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/id")';
3647+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + '0/' + key + '")';
3648+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + '0/id")';
3649+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + key + '")';
3650+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + 'id")';
3651+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/' + key + '")';
3652+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/id")';
3653+ } else {
3654+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/' + key + '")';
3655+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/id")';
3656+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + fd + key + '")';
3657+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + fd + 'id")';
3658+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (path || '') + '[]/0/' + key + '")';
3659+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (path || '') + '[]/0/id")';
3660+ }
3661+ }
3662+ else {
3663+ config += StringUtil.isEmpty(cp) ? '' : prefix + 'PRE_DATA("' + cp + '", get4Path(req,"' + childPath + '"))';
3664+ config += (StringUtil.isEmpty(cp) ? '' : '\n// 可替代上面的 ') + prefix + 'PRE_DATA("' + cp + '", get4Path(req,"' + childPath + '"))';
3665+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3666+ if (isRestful && ! isAPIJSONArray) {
3667+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3668+ if (key != cp) {
3669+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3670+ if (StringUtil.isNotEmpty(col)) {
3671+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + (StringUtil.isEmpty(tbl) ? '' : tbl + '/') + col + '")';
3672+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + col + '")';
3673+ }
3674+ }
3675+ }
3676+ }
3677+
3678+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + childPath + '")';
3679+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + cp + '")';
3680+ config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + key + '")';
3681+ if (key != childPath) {
3682+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + key + '")';
3683+ config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + key + '")';
3684+ }
3685+ } else {
3686+ if (isId) {
3687+ if (isRestful) {
3688+ config += prefix + 'PRE_DATA("' + 'data/list/0/' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3689+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + 'data/0/' + table.toLowerCase() + '_id")';
3690+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + 'list/0/' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3691+ } else {
3692+ config += prefix + 'PRE_DATA("' + kp + '[]') + '/0/' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3693+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (path || '') + '[]/0/' + (tbl || table).toLowerCase() + '_id")';
3694+ }
3695+
3696+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3697+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (tbl || table).toLowerCase() + '_id")';
3698+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3699+ if (isRestful) {
3700+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3701+ if (key != cp) {
3702+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3703+ }
3704+ }
3705+ config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3706+ config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + table.toLowerCase() + '_id")';
3707+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (StringUtil.isEmpty(path) ? '' : path + '/') + StringUtil.firstCase((tbl || table) + 'Id') + '")';
3708+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (StringUtil.isEmpty(path) ? '' : path + '/') + table.toLowerCase() + '_id")';
3709+ }
3710+ else if (StringUtil.isIdKey(key)) {
3711+ if (isRestful) {
3712+ config += prefix + 'PRE_DATA("data/list/0/id")';
3713+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/0/id")';
3714+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("list/0/id")';
3715+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/id")';
3716+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + '0/id")';
3717+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list' + fd + '0/id")';
3718+ } else {
3719+ config += prefix + 'PRE_DATA("[]/0/' + (StringUtil.isEmpty(p) ? '' : p + '/') + 'id")';
3720+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/' + fd + (col || key) + '")';
3721+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/' + fd + 'id")';
3722+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (p || path || '') + '[]/0/' + (col || key) + '")';
3723+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (p || path || '') + '[]/0/id")';
3724+ }
3725+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3726+ if (isRestful) {
3727+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3728+ if (key != cp) {
3729+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + (col || key) + '")';
3730+ }
3731+ }
3732+ config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + key + '")';
3733+ config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("id")';
3734+ if (isRestful) {
3735+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/id")';
3736+ }
3737+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("id")';
3738+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + fd + 'id")';
3739+ if (isRestful) {
3740+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + 'id")';
3741+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/id")';
3742+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + fd + 'id")';
3743+ }
3744+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + fd + 'id")';
3745+ }
3746+ else {
3747+ config += prefix + 'PRE_DATA("' + cp + '", get4Path(req,"' + key + '"))';
3748+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + cp + '")';
3749+ if (isRestful) {
3750+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3751+ if (key != cp) {
3752+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + key + '")';
3753+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + key + '")';
3754+ }
3755+ } else {
3756+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + key + '")';
3757+ }
3758+ }
3759+
3760+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + childPath + '")';
3761+ if (key != childPath) {
3762+ config += '\n// 可替代上面的 ' + prefix + 'PRE_ARG("' + key + '")';
3763+ }
3764+
3765+ if (isRestful) {
3766+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/' + cp + '")';
3767+ }
3768+ config += '\n// 可替代上面的 ' + prefix + 'CTX_GET("' + key + '")';
3769+ if (isRestful) {
3770+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/list/0/' + cp + '")';
3771+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("data/0/' + cp + '")';
3772+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("list/0/' + cp + '")';
3773+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("[]/0/' + cp + '", PRE_DATA")';
3774+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("data/0' + cp + '", PRE_DATA")';
3775+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("list/0' + cp + '", PRE_DATA")';
3776+ } else {
3777+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("[]/0/' + cp + '")';
3778+ config += '\n// 可替代上面的 ' + prefix + 'PRE_DATA("' + (p || path || '') + '[]/0/' + (col || key) + '")';
3779+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + (p || path || '') + '[]/0/' + (col || key) + '", PRE_DATA")';
3780+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("[]/0' + cp + '", PRE_DATA")';
3781+ }
3782+ }
3783+
3784+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + key + '", App.getCurrentAccount())';
3785+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + childPath + '", PRE_DATA")';
3786+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + childPath + '", PRE_ARG")';
3787+ if (key != childPath) {
3788+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + key + '", PRE_DATA")';
3789+ config += '\n// 可替代上面的 ' + prefix + 'CTX_PUT("' + key + '", PRE_ARG")';
3790+ }
3791+ }
3792+ else if (typeof value == 'boolean') {
35753793 if (isBad) {
35763794 return prefix + (isRand ? 'RANDOM_BAD_BOOL' : 'ORDER_BAD_BOOL' + offset) + '()'
35773795 }
@@ -5208,6 +5426,8 @@ https://github.com/Tencent/APIJSON/issues
52085426
52095427 var groupName = group.groupName
52105428 var isAdd = true
5429+ var reqObj = this.getRequest()
5430+ var config = StringUtil.trim(this.newRandomConfig(null, '', reqObj))
52115431 this.request(true, REQUEST_TYPE_POST, REQUEST_TYPE_JSON, this.server + '/post', {
52125432 Chain: {
52135433 'rank': this.formatDateTime(StringUtil.isEmpty(nextRank, true) ? null : new Date(new Date(nextRank).getTime() - 10)),
@@ -5216,6 +5436,13 @@ https://github.com/Tencent/APIJSON/issues
52165436 'documentId': item.id,
52175437 'documentName': item.name
52185438 },
5439+ Random: {
5440+ toId: 0,
5441+ documentId: item.id,
5442+ count: 1,
5443+ name: '参数传递 ' + App.formatDateTime(),
5444+ config: config
5445+ },
52195446 tag: 'Chain'
52205447 }, {}, function (url, res, err) {
52215448 App.onResponse(url, res, err)
@@ -8201,7 +8428,7 @@ Content-Type: ` + contentType) + (StringUtil.isEmpty(headerStr, true) ? '' : hea
82018428 var methods = this.methods
82028429 var types = this.types
82038430
8204- //修改 Document
8431+ // Document
82058432 this.request(true, REQUEST_TYPE_POST, REQUEST_TYPE_JSON, this.server + '/get', {
82068433 format: false,
82078434 'Document[]': {
0 commit comments