From f27e3956b97b0cfda18f587e59eb2f7dc71a871c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=87=AA=E5=B8=A6=E5=A4=A7=E4=BD=AC=E6=B0=94=E5=9C=BA?= <188633308@qq.com> Date: Mon, 28 Jun 2021 13:19:26 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=93=8D=E4=BD=9C=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Api/Ewide.Core/Filter/RequestActionFilter.cs | 27 ++- Api/Ewide.Core/Service/Auth/AuthService.cs | 32 +-- Api/Ewide.Core/Service/Log/SysOpLogService.cs | 13 +- Api/Ewide.Core/Service/Menu/SysMenuService.cs | 2 +- web-react/package.json | 3 +- .../src/components/query-table/index.jsx | 2 +- .../src/pages/system/log/oplog/index.jsx | 209 ++++++++++-------- web-react/src/pages/system/user/index.jsx | 15 +- web-react/src/store/reducer/layout.js | 2 +- .../src/views/main/_layout/sider/menu.jsx | 38 ++-- web-react/yarn.lock | 139 +++++++++++- 11 files changed, 334 insertions(+), 148 deletions(-) diff --git a/Api/Ewide.Core/Filter/RequestActionFilter.cs b/Api/Ewide.Core/Filter/RequestActionFilter.cs index fa6ce44..6c441ee 100644 --- a/Api/Ewide.Core/Filter/RequestActionFilter.cs +++ b/Api/Ewide.Core/Filter/RequestActionFilter.cs @@ -8,6 +8,8 @@ using System.Diagnostics; using System.Security.Claims; using System.Threading.Tasks; using UAParser; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; namespace Ewide.Core { @@ -34,12 +36,29 @@ namespace Ewide.Core var actionDescriptor = context.ActionDescriptor as ControllerActionDescriptor; var descAtt = Attribute.GetCustomAttribute(actionDescriptor.MethodInfo, typeof(DescriptionAttribute)) as DescriptionAttribute; + var message = "请求成功"; + if (isRequestSucceed) + { + var result = actionContext.Result; + var resultType = result.GetType(); + if (resultType.Name == "ContentResult") + { + var resultContent = ((Microsoft.AspNetCore.Mvc.ContentResult)actionContext.Result)?.Content; + var resultJson = JsonConvert.DeserializeObject(resultContent); + message = resultJson["message"]?.ToString(); + } + } + else + { + message = actionContext.Exception.Message; + } + var sysOpLog = new SysLogOp { Name = descAtt != null ? descAtt.Description : actionDescriptor.ActionName, OpType = 1, Success = isRequestSucceed, - //Message = isRequestSucceed ? "成功" : "失败", + Message = message, Ip = httpContext.GetRemoteIpAddressToIPv4(), Location = httpRequest.GetRequestUrlAddress(), Browser = clent.UA.Family + clent.UA.Major, @@ -48,13 +67,13 @@ namespace Ewide.Core ClassName = context.Controller.ToString(), MethodName = actionDescriptor.ActionName, ReqMethod = httpRequest.Method, - //Param = JsonSerializerUtility.Serialize(context.ActionArguments), - //Result = JsonSerializerUtility.Serialize(actionContext.Result), + Param = JsonConvert.SerializeObject(context.ActionArguments), + // Result = resultContent, ElapsedTime = sw.ElapsedMilliseconds, OpTime = DateTime.Now, Account = httpContext.User?.FindFirstValue(ClaimConst.CLAINM_ACCOUNT) }; - await sysOpLog.InsertAsync(); + await sysOpLog.(); } } } diff --git a/Api/Ewide.Core/Service/Auth/AuthService.cs b/Api/Ewide.Core/Service/Auth/AuthService.cs index b9b3773..fba2662 100644 --- a/Api/Ewide.Core/Service/Auth/AuthService.cs +++ b/Api/Ewide.Core/Service/Auth/AuthService.cs @@ -101,6 +101,24 @@ namespace Ewide.Core.Service // 设置刷新Token令牌 _httpContextAccessor.HttpContext.Response.Headers["x-access-token"] = refreshToken; + // 增加登录日志 + var loginOutput = user.Adapt(); + var clent = Parser.GetDefault().Parse(App.GetService().HttpContext.Request.Headers["User-Agent"]); + loginOutput.LastLoginBrowser = clent.UA.Family + clent.UA.Major; + loginOutput.LastLoginOs = clent.OS.Family + clent.OS.Major; + await new SysLogVis + { + Name = "登录", + Success = true, + Message = "登录成功", + Ip = loginOutput.LastLoginIp, + Browser = loginOutput.LastLoginBrowser, + Os = loginOutput.LastLoginOs, + VisType = 1, + VisTime = loginOutput.LastLoginTime, + Account = loginOutput.Account + }.InsertAsync(); + return accessToken; } @@ -163,20 +181,6 @@ namespace Ewide.Core.Service loginOutput.Menus = await _sysMenuService.GetLoginMenusAntDesign(userId, defaultActiveAppCode); } - // 增加登录日志 - //await new SysLogVis - //{ - // Name = "登录", - // Success = true, - // Message = "登录成功", - // Ip = loginOutput.LastLoginIp, - // Browser = loginOutput.LastLoginBrowser, - // Os = loginOutput.LastLoginOs, - // VisType = 1, - // VisTime = loginOutput.LastLoginTime, - // Account = loginOutput.Account - //}.InsertAsync(); - return loginOutput; } diff --git a/Api/Ewide.Core/Service/Log/SysOpLogService.cs b/Api/Ewide.Core/Service/Log/SysOpLogService.cs index 7c23226..5a6e346 100644 --- a/Api/Ewide.Core/Service/Log/SysOpLogService.cs +++ b/Api/Ewide.Core/Service/Log/SysOpLogService.cs @@ -1,4 +1,5 @@ -using Ewide.Core.Extension; +using Dapper; +using Ewide.Core.Extension; using Furion.DatabaseAccessor; using Furion.DatabaseAccessor.Extensions; using Furion.DependencyInjection; @@ -20,10 +21,12 @@ namespace Ewide.Core.Service public class SysOpLogService : ISysOpLogService, IDynamicApiController, ITransient { private readonly IRepository _sysOpLogRep; // 操作日志表仓储 + private readonly IDapperRepository _dapperRepository; - public SysOpLogService(IRepository sysOpLogRep) + public SysOpLogService(IRepository sysOpLogRep, IDapperRepository dapperRepository) { _sysOpLogRep = sysOpLogRep; + _dapperRepository = dapperRepository; } /// @@ -54,11 +57,7 @@ namespace Ewide.Core.Service [HttpPost("/sysOpLog/delete")] public async Task ClearOpLog() { - var opLogs = await _sysOpLogRep.Entities.ToListAsync(); - opLogs.ForEach(u => - { - u.Delete(); - }); + await _dapperRepository.ExecuteAsync("DELETE FROM sys_log_op"); } } } diff --git a/Api/Ewide.Core/Service/Menu/SysMenuService.cs b/Api/Ewide.Core/Service/Menu/SysMenuService.cs index fa73ffa..2a79991 100644 --- a/Api/Ewide.Core/Service/Menu/SysMenuService.cs +++ b/Api/Ewide.Core/Service/Menu/SysMenuService.cs @@ -84,7 +84,7 @@ namespace Ewide.Core.Service .Where(u => u.Status == (int)CommonStatus.ENABLE) .Where(u => u.Application == appCode) .Where(u => u.Type != (int)MenuType.BTN) - //.Where(u => u.Weight != (int)MenuWeight.DEFAULT_WEIGHT) + .Where(u => u.Weight != (int)MenuWeight.DEFAULT_WEIGHT) .OrderBy(u => u.Sort).ToListAsync(); } else diff --git a/web-react/package.json b/web-react/package.json index 502591d..8de0070 100644 --- a/web-react/package.json +++ b/web-react/package.json @@ -20,6 +20,7 @@ "photoswipe": "^4.1.3", "react": "^17.0.2", "react-dom": "^17.0.2", + "react-json-view": "^1.21.3", "react-monaco-editor": "^0.43.0", "react-router": "^5.2.0", "react-router-dom": "^5.2.0", @@ -58,4 +59,4 @@ "last 1 safari version" ] } -} \ No newline at end of file +} diff --git a/web-react/src/components/query-table/index.jsx b/web-react/src/components/query-table/index.jsx index d28e0fe..750906b 100644 --- a/web-react/src/components/query-table/index.jsx +++ b/web-react/src/components/query-table/index.jsx @@ -298,7 +298,7 @@ export default class QueryTable extends Component { columns: (() => { const c = [] if (type !== 'tree' && rowNumber & !expandable & !expandedRowRender) { - c.push(rowNoColumn) + //c.push(rowNoColumn) } c.push(...(columns || [])) return c.filter(p => !p.hidden) diff --git a/web-react/src/pages/system/log/oplog/index.jsx b/web-react/src/pages/system/log/oplog/index.jsx index 52bf8d0..3a9b794 100644 --- a/web-react/src/pages/system/log/oplog/index.jsx +++ b/web-react/src/pages/system/log/oplog/index.jsx @@ -1,23 +1,42 @@ import React, { Component } from 'react' -import { Alert, Button, Card, Descriptions, Form, Popconfirm, Input, message as Message, Select, DatePicker } from 'antd' +import { + Alert, + Button, + Card, + Descriptions, + Form, + Popconfirm, + Input, + message as Message, + Select, + DatePicker, + Tag, +} from 'antd' import { Auth, Container, QueryTable } from 'components' import { api } from 'common/api' import { toCamelCase } from 'util/format' import { isEqual } from 'lodash' import getDictData from 'util/dic' import moment from 'moment' +import ReactJson from 'react-json-view' -const { RangePicker } = DatePicker; +const { RangePicker } = DatePicker const apiAction = { page: api.sysOpLogPage, - delete: api.sysOpLogDelete + delete: api.sysOpLogDelete, } + +const methodColor = { + POST: 'orange', + GET: 'green', +} + export default class index extends Component { state = { codes: { - opType: [] - } + opType: [], + }, } // 表格实例 table = React.createRef() @@ -26,37 +45,54 @@ export default class index extends Component { { title: '日志名称', dataIndex: 'name', - sorter: true, - }, - { - title: '操作类型', - dataIndex: 'opType', - render: text => (<>{this.bindCodeValue(text, 'op_type')}), - sorter: true, - }, - { - title: '是否成功', - dataIndex: 'success', - render: text => (<> {text ? '是' : '否'}), - sorter: true, - }, - { - title: 'ip', - dataIndex: 'ip', + width: 200, sorter: true, }, { title: '请求地址', dataIndex: 'url', + width: 300, + sorter: true, + render: (text, record) => ( + <> + + {record.reqMethod} + {' '} + {text} + + ), + }, + { + title: '是否成功', + dataIndex: 'success', + width: 100, + render: text => ( + <> + {text ? ( + + ) : ( + + )} + + ), + sorter: true, + }, + { + title: 'ip', + dataIndex: 'ip', + width: 120, sorter: true, }, { title: '操作时间', dataIndex: 'opTime', + width: 140, sorter: true, + defaultSortOrder: 'descend', }, { title: '操作人', + width: 140, dataIndex: 'account', sorter: true, }, @@ -66,9 +102,9 @@ export default class index extends Component { * 阻止外部组件引发的渲染,提升性能 * 可自行添加渲染条件 * [必要] - * @param {*} props - * @param {*} state - * @returns + * @param {*} props + * @param {*} state + * @returns */ shouldComponentUpdate(props, state) { return !isEqual(this.state, state) @@ -78,29 +114,20 @@ export default class index extends Component { * 加载字典数据,之后开始加载表格数据 * 如果必须要加载字典数据,可直接对表格设置autoLoad=true */ - componentDidMount() { - this.table.current.onLoading() - getDictData('op_type').then(res => { - this.setState({ - codes: res - }, () => { - this.table.current.onLoadData() - }) - }) - } + componentDidMount() {} /** * 调用加载数据接口,可在调用前对query进行处理 * [异步,必要] - * @param {*} params - * @param {*} query - * @returns + * @param {*} params + * @param {*} query + * @returns */ loadData = async (params, query) => { if (query.dates && query.dates.length) { - query.searchBeginTime = moment(query.dates[0]).format('YYYY-MM-DD HH:mm:ss'); - query.searchEndTime = moment(query.dates[1]).format('YYYY-MM-DD HH:mm:ss'); - delete query.dates; + query.searchBeginTime = moment(query.dates[0]).format('YYYY-MM-DD HH:mm:ss') + query.searchEndTime = moment(query.dates[1]).format('YYYY-MM-DD HH:mm:ss') + delete query.dates } const { data } = await apiAction.page({ ...params, @@ -109,16 +136,16 @@ export default class index extends Component { return data } /** - * 绑定字典数据 - * @param {*} code - * @param {*} name - * @returns - */ + * 绑定字典数据 + * @param {*} code + * @param {*} name + * @returns + */ bindCodeValue(code, name) { name = toCamelCase(name) const codes = this.state.codes[name] if (codes) { - const c = codes.find((p) => +p.code === code) + const c = codes.find(p => +p.code === code) if (c) { return c.value } @@ -129,8 +156,8 @@ export default class index extends Component { /** * 对表格上的操作进行统一处理 * [异步] - * @param {*} action - * @param {*} successMessage + * @param {*} action + * @param {*} successMessage */ async onAction(action, successMessage) { this.table.current.onLoading() @@ -144,27 +171,27 @@ export default class index extends Component { } onOpLogClear() { - this.onAction( - apiAction.delete(), - '清空成功' - ) + this.onAction(apiAction.delete(), '清空成功') } render() { return (
- -
后端bug:任何操作的操作类型都是增加
-
没有记录请求参数.返回结果等信息
- - } /> + +
后端bug:任何操作的操作类型都是增加
+
没有记录请求参数.返回结果等信息
+ + } + />
- - - - + > } @@ -222,8 +231,14 @@ export default class index extends Component { } expandable={{ - expandedRowRender: record => - + expandedRowRender: record => ( + {record.methodName} @@ -240,20 +255,26 @@ export default class index extends Component { {record.className} - {record.result} + - {record.param} + {record.message} + ), }} - />
) } -} \ No newline at end of file +} diff --git a/web-react/src/pages/system/user/index.jsx b/web-react/src/pages/system/user/index.jsx index 7418764..f40c684 100644 --- a/web-react/src/pages/system/user/index.jsx +++ b/web-react/src/pages/system/user/index.jsx @@ -21,6 +21,7 @@ import getDictData from 'util/dic' import FormBody from './form' import RoleForm from './role' import DataForm from './data' +import auth from 'components/authorized/handler' // 配置页面所需接口函数 const apiAction = { @@ -209,25 +210,25 @@ export default class index extends Component { this.onResetPassword(record)}>重置密码 , - + - - + {auth('sysUser:grantRole') && ( + this.onOpen(this.roleForm, record)}> 授权角色 - - - + )} + {auth('sysUser:grantData') && ( + this.onOpen(this.dataForm, record)}> 授权额外数据 - + )} } > diff --git a/web-react/src/store/reducer/layout.js b/web-react/src/store/reducer/layout.js index aeadbee..1441e84 100644 --- a/web-react/src/store/reducer/layout.js +++ b/web-react/src/store/reducer/layout.js @@ -7,7 +7,7 @@ const defaultState = { } const localStorageState = () => { - return JSON.parse(window.localStorage.getItem(SETTING_KEY)) + return JSON.parse(window.localStorage.getItem(SETTING_KEY)) || {} } const mergeState = { diff --git a/web-react/src/views/main/_layout/sider/menu.jsx b/web-react/src/views/main/_layout/sider/menu.jsx index 4d91304..f20f406 100644 --- a/web-react/src/views/main/_layout/sider/menu.jsx +++ b/web-react/src/views/main/_layout/sider/menu.jsx @@ -6,9 +6,8 @@ import store from 'store' const { getState, subscribe } = store export default class index extends Component { - state = { - ...getState('nav') + ...getState('nav'), } constructor(props) { @@ -23,21 +22,25 @@ export default class index extends Component { this.unsubscribe() } - renderMenu = (menu) => { - return menu.map((p) => { + renderMenu = menu => { + return menu.map(p => { return p.children ? this.renderSubMenu(p) : this.renderMenuItem(p) }) } - renderSubMenu = (menu) => { + renderSubMenu = menu => { return ( - }> + } + > {this.renderMenu(menu.children)} ) } - renderMenuItem = (menu) => { + renderMenuItem = menu => { return ( this.onOpenContentWindow(menu)}> {menu.meta.icon && } @@ -46,12 +49,12 @@ export default class index extends Component { ) } - onOpenContentWindow = (menu) => { + onOpenContentWindow = menu => { window.openContentWindow({ key: menu.id, title: menu.meta.title, icon: menu.meta.icon, - path: menu.component + path: menu.component, }) } @@ -60,12 +63,11 @@ export default class index extends Component { } render() { - const props = { mode: 'inline', selectable: false, style: this.props.menuStyle, - theme: 'light' + theme: 'light', } const on = { @@ -74,16 +76,20 @@ export default class index extends Component { return ( <> - { - this.state.nav.map((item, i) => { + {this.state.nav.map((item, i) => { + if (item.menu.length) { return (
{item.app.name}
- {this.renderMenu(item.menu)} + + {this.renderMenu(item.menu)} +
) - }) - } + } else { + return false + } + })} ) } diff --git a/web-react/yarn.lock b/web-react/yarn.lock index c0cf4a2..cad1a03 100644 --- a/web-react/yarn.lock +++ b/web-react/yarn.lock @@ -2554,7 +2554,7 @@ arrify@^2.0.1: resolved "https://registry.nlark.com/arrify/download/arrify-2.0.1.tgz?cache=0&sync_timestamp=1619599497996&other_urls=https%3A%2F%2Fregistry.nlark.com%2Farrify%2Fdownload%2Farrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" integrity sha1-yWVekzHgq81YjSp8rX6ZVvZnAfo= -asap@~2.0.6: +asap@~2.0.3, asap@~2.0.6: version "2.0.6" resolved "https://registry.nlark.com/asap/download/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= @@ -2852,6 +2852,11 @@ balanced-match@^1.0.0: resolved "https://registry.npm.taobao.org/balanced-match/download/balanced-match-1.0.2.tgz?cache=0&sync_timestamp=1617714233441&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fbalanced-match%2Fdownload%2Fbalanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4= +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/base16/download/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha1-4pf2DX7BAUp6lxo568ipjAtoHnA= + base64-js@^1.0.2: version "1.5.1" resolved "https://registry.nlark.com/base64-js/download/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -3752,6 +3757,13 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +cross-fetch@^3.0.4: + version "3.1.4" + resolved "https://registry.npm.taobao.org/cross-fetch/download/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" + integrity sha1-lyPzo6JHv4uJA586OAqSROj6Lzk= + dependencies: + node-fetch "2.6.1" + cross-spawn@7.0.3, cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.npm.taobao.org/cross-spawn/download/cross-spawn-7.0.3.tgz?cache=0&sync_timestamp=1606748073153&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcross-spawn%2Fdownload%2Fcross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -5086,6 +5098,31 @@ fb-watchman@^2.0.0: dependencies: bser "2.1.1" +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/fbemitter/download/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha1-ALKhr1QRJUqrQWzXX55iib7kv/M= + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.npm.taobao.org/fbjs-css-vars/download/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha1-IWVRE2rgL+JVkyw+yHdfGOLAeLg= + +fbjs@^3.0.0: + version "3.0.0" + resolved "https://registry.npm.taobao.org/fbjs/download/fbjs-3.0.0.tgz?cache=0&sync_timestamp=1602048886093&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffbjs%2Fdownload%2Ffbjs-3.0.0.tgz#0907067fb3f57a78f45d95f1eacffcacd623c165" + integrity sha1-CQcGf7P1enj0XZXx6s/8rNYjwWU= + dependencies: + cross-fetch "^3.0.4" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.18" + figgy-pudding@^3.5.1: version "3.5.2" resolved "https://registry.nlark.com/figgy-pudding/download/figgy-pudding-3.5.2.tgz#b4eee8148abb01dcf1d1ac34367d59e12fa61d6e" @@ -5212,6 +5249,14 @@ flush-write-stream@^1.0.0: inherits "^2.0.3" readable-stream "^2.3.6" +flux@^4.0.1: + version "4.0.1" + resolved "https://registry.npm.taobao.org/flux/download/flux-4.0.1.tgz#7843502b02841d4aaa534af0b373034a1f75ee5c" + integrity sha1-eENQKwKEHUqqU0rws3MDSh917lw= + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.0" + follow-redirects@^1.0.0, follow-redirects@^1.10.0: version "1.14.1" resolved "https://registry.nlark.com/follow-redirects/download/follow-redirects-1.14.1.tgz#d9114ded0a1cfdd334e164e6662ad02bfd91ff43" @@ -7137,11 +7182,21 @@ lodash.clonedeep@^4.5.0: resolved "https://registry.nlark.com/lodash.clonedeep/download/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.npm.taobao.org/lodash.curry/download/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha1-JI42By7ekGUB11lmIAqG2riyMXA= + lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.npm.taobao.org/lodash.debounce/download/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.npm.taobao.org/lodash.flow/download/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o= + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.nlark.com/lodash.memoize/download/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -7639,6 +7694,11 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.nlark.com/node-fetch/download/node-fetch-2.6.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fnode-fetch%2Fdownload%2Fnode-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha1-BFvTI2Mfdu0uK1VXM5RBa2OaAFI= + node-forge@^0.10.0: version "0.10.0" resolved "https://registry.npm.taobao.org/node-forge/download/node-forge-0.10.0.tgz?cache=0&sync_timestamp=1599010726129&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnode-forge%2Fdownload%2Fnode-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" @@ -9040,6 +9100,13 @@ promise-inflight@^1.0.1: resolved "https://registry.nlark.com/promise-inflight/download/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.npm.taobao.org/promise/download/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha1-BktyYCsY+Q8pGSuLG8QY/9Hr078= + dependencies: + asap "~2.0.3" + promise@^8.1.0: version "8.1.0" resolved "https://registry.npm.taobao.org/promise/download/promise-8.1.0.tgz#697c25c3dfe7435dd79fcd58c38a135888eaf05e" @@ -9142,6 +9209,11 @@ punycode@^2.1.0, punycode@^2.1.1: resolved "https://registry.nlark.com/punycode/download/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha1-tYsBCsQMIsVldhbI0sLALHv0eew= +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.npm.taobao.org/pure-color/download/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha1-H+Bk+wrIUfDeYTIKi/eWg2Qi8z4= + q@^1.1.2: version "1.5.1" resolved "https://registry.nlark.com/q/download/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" @@ -9576,6 +9648,16 @@ react-app-polyfill@^2.0.0: regenerator-runtime "^0.13.7" whatwg-fetch "^3.4.1" +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.npm.taobao.org/react-base16-styling/download/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha1-7yFW1mz0E5aVyKFniGy2nqZgeSw= + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + react-dev-utils@^11.0.3: version "11.0.4" resolved "https://registry.npm.taobao.org/react-dev-utils/download/react-dev-utils-11.0.4.tgz?cache=0&sync_timestamp=1615231838520&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freact-dev-utils%2Fdownload%2Freact-dev-utils-11.0.4.tgz#a7ccb60257a1ca2e0efe7a83e38e6700d17aa37a" @@ -9630,6 +9712,21 @@ react-is@^17.0.1: resolved "https://registry.nlark.com/react-is/download/react-is-17.0.2.tgz?cache=0&sync_timestamp=1623273254569&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-is%2Fdownload%2Freact-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" integrity sha1-5pHUqOnHiTZWVVOas3J2Kw77VPA= +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.npm.taobao.org/react-json-view/download/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha1-8YQgnujxvzdPsMQbCBPP9UVJxHU= + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.npm.taobao.org/react-lifecycles-compat/download/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha1-TxonOv38jzSIqMUWv9p4+HI1I2I= + react-monaco-editor@^0.43.0: version "0.43.0" resolved "https://registry.npm.taobao.org/react-monaco-editor/download/react-monaco-editor-0.43.0.tgz#495578470db7b27ab306af813b31f206a6bf9d1c" @@ -9738,6 +9835,15 @@ react-scripts@4.0.3: optionalDependencies: fsevents "^2.1.3" +react-textarea-autosize@^8.3.2: + version "8.3.3" + resolved "https://registry.nlark.com/react-textarea-autosize/download/react-textarea-autosize-8.3.3.tgz?cache=0&sync_timestamp=1622628433420&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact-textarea-autosize%2Fdownload%2Freact-textarea-autosize-8.3.3.tgz#f70913945369da453fd554c168f6baacd1fa04d8" + integrity sha1-9wkTlFNp2kU/1VTBaPa6rNH6BNg= + dependencies: + "@babel/runtime" "^7.10.2" + use-composed-ref "^1.0.0" + use-latest "^1.0.0" + react@^17.0.2: version "17.0.2" resolved "https://registry.nlark.com/react/download/react-17.0.2.tgz?cache=0&sync_timestamp=1623272232595&other_urls=https%3A%2F%2Fregistry.nlark.com%2Freact%2Fdownload%2Freact-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" @@ -10387,7 +10493,7 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.nlark.com/setimmediate/download/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -11220,6 +11326,11 @@ tryer@^1.0.1: resolved "https://registry.npm.taobao.org/tryer/download/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8" integrity sha1-8shUBoALmw90yfdGW4HqrSQSUvg= +ts-essentials@^2.0.3: + version "2.0.12" + resolved "https://registry.nlark.com/ts-essentials/download/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" + integrity sha1-yTA/PXT3X6dSjD1JuA4ImrCdh0U= + ts-pnp@1.2.0, ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.npm.taobao.org/ts-pnp/download/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" @@ -11336,6 +11447,11 @@ typedarray@^0.0.6: resolved "https://registry.nlark.com/typedarray/download/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +ua-parser-js@^0.7.18: + version "0.7.28" + resolved "https://registry.nlark.com/ua-parser-js/download/ua-parser-js-0.7.28.tgz#8ba04e653f35ce210239c64661685bf9121dec31" + integrity sha1-i6BOZT81ziECOcZGYWhb+RId7DE= + unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.npm.taobao.org/unbox-primitive/download/unbox-primitive-1.0.1.tgz?cache=0&sync_timestamp=1616706302651&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Funbox-primitive%2Fdownload%2Funbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" @@ -11480,6 +11596,25 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-composed-ref@^1.0.0: + version "1.1.0" + resolved "https://registry.npm.taobao.org/use-composed-ref/download/use-composed-ref-1.1.0.tgz#9220e4e94a97b7b02d7d27eaeab0b37034438bbc" + integrity sha1-kiDk6UqXt7AtfSfq6rCzcDRDi7w= + dependencies: + ts-essentials "^2.0.3" + +use-isomorphic-layout-effect@^1.0.0: + version "1.1.1" + resolved "https://registry.npm.taobao.org/use-isomorphic-layout-effect/download/use-isomorphic-layout-effect-1.1.1.tgz#7bb6589170cd2987a152042f9084f9effb75c225" + integrity sha1-e7ZYkXDNKYehUgQvkIT57/t1wiU= + +use-latest@^1.0.0: + version "1.2.0" + resolved "https://registry.npm.taobao.org/use-latest/download/use-latest-1.2.0.tgz#a44f6572b8288e0972ec411bdd0840ada366f232" + integrity sha1-pE9lcrgojgly7EEb3QhAraNm8jI= + dependencies: + use-isomorphic-layout-effect "^1.0.0" + use@^3.1.0: version "3.1.1" resolved "https://registry.nlark.com/use/download/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f"