{"maintainers":[{}],"dist-tags":{"latest":"1.1.8"},"versions":{"1.0.12":{"name":"x-pc-widget","version":"1.0.12","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"c62fc739ba2e780959eac0f0ba4d1d4a6b94ebda","_id":"x-pc-widget@1.0.12","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-HhsLsT0ou/Qs5lIQVJTbzEP29ThIXCWlHQErJsOhLVFqjq2/uqYSIta8gqy6OXAwqhDNbB5Qx84xxgl3SAuJLA==","shasum":"5727d45c67befc023f109d00071f72d234a04f17","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.12.tgz"}},"1.0.13":{"name":"x-pc-widget","version":"1.0.13","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"586ed0ce790490a7b488055080690e26699213f3","_id":"x-pc-widget@1.0.13","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-AZSzuTZj+YYm58qg+jbYtltndGRUZK4wjcdsZxE6oXXVXZPQ1e1Jwi1JXYyDPktkQ21Qt4AuTQwIiITlWpXV5A==","shasum":"0ac36cf1bd18408d695f082687eb68ccd7a3e701","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.13.tgz"}},"1.0.14":{"name":"x-pc-widget","version":"1.0.14","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"586ed0ce790490a7b488055080690e26699213f3","_id":"x-pc-widget@1.0.14","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-dssMv3zHrM+e3sLafUFKWu1+2TzWwvlRtwFXG+ySFSkx+F0JfEdc3LibgusWOjWyOSmd8wCDhpgxG+6Mzy7jwg==","shasum":"7c6a53cab36e30660bd0d628096082593f6969b4","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.14.tgz"}},"1.0.15":{"name":"x-pc-widget","version":"1.0.15","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"6dd089969d3fb5913984cdaf150109c77efedabf","_id":"x-pc-widget@1.0.15","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-BLLg0y3TUd2H5zOkkvb1JeEe7AreABWdjOhSczZFGZ3mHUjosC+uYz4fQyW+Jf9WRG1XmU/G5GStv1uEu7TPwg==","shasum":"c12ad8a4248a88f08a19cebce9bd438ce35ffdea","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.15.tgz"}},"1.0.10":{"name":"x-pc-widget","version":"1.0.10","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"9f3d2e215cb1421a06a67215a4077af2a3130050","_id":"x-pc-widget@1.0.10","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-zWKzXBEyzmXLh3strdDMmBBOEHstAgv/oLjNHQz4Mt8+Bmss/B1X3JPg/urbO3BH6Hc7piSTvrNd7G1zHO5IhQ==","shasum":"de0d320b16cab95d06f26c74cec86a2a75f182db","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.10.tgz"}},"1.0.11":{"name":"x-pc-widget","version":"1.0.11","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"7a4041216728c2fc8a14c9b4161545ec50fec217","_id":"x-pc-widget@1.0.11","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-+TcKutTf1pRzY4SoBJfwF5tZ0BE26AyIWhgDnIrLrFdnDCMEtaMxkVDhB2NLMZYMlSS/2z2TlJA9N8fSrpftsQ==","shasum":"f019a3ec4f48ffa80079d8c39e767ec0a2da8fc0","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.11.tgz"}},"1.0.62-beta.12":{"name":"x-pc-widget","version":"1.0.62-beta.12","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"dd9594f182a7d293ddb177ff9d828d46c3187823","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.62-beta.12","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-Fk3CoqX49EdSrOH0hii7zlSrdFqQwV+smbEGdwkaY5xfDrxTrdlb2ZM3ZJ27g9MbEMho4Bk1Nxa6Mc+pcpTKFA==","shasum":"ee73f0da35adcc618dd54c9876df8beda3b48012","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.62-beta.12.tgz"}},"1.0.62-beta.11":{"name":"x-pc-widget","version":"1.0.62-beta.11","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"0ed197cb55ae4b908ac5d00ffde9338bbca581a5","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.62-beta.11","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-U4YARt2sndBvQmC1PxoUi8ELfbtTD4CC8xXjwPFMp2SD8e8y+qH3Wpk5M87l8zHFiH1En3hybgBGHZZ0KnusOQ==","shasum":"3ec18c2d791912ad5d705303d86be5a199385459","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.62-beta.11.tgz"}},"1.0.34":{"name":"x-pc-widget","version":"1.0.34","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"50b246f915aaf37c1192b8279743cc8de60011f3","_id":"x-pc-widget@1.0.34","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-rbXa62gGZxH01BCwOlIs8o8SUs/Yb5H2bLDVrHgc1+n8oiYSY+3Psr3yatvlUZVFqvmle+6yhMYxVrl+2BYTcQ==","shasum":"2bdbd890895a20dc6e4fe244f744814b0f2025b2","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.34.tgz"}},"1.0.35":{"name":"x-pc-widget","version":"1.0.35","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"f2c1d16683e12deb2bc710f86c4ba7046e0736dd","_id":"x-pc-widget@1.0.35","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-J7uZG1FTeqVqAVJWNqa9pvYjtvV4Df7gwwWDH9eAv3cIdsi865TTbUrRvdOld2o1hoK2pMARCTNWI1jUqnXqXg==","shasum":"40f79eb7f4b247b80cad50b5430a05c15e8804dd","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.35.tgz"}},"1.0.36":{"name":"x-pc-widget","version":"1.0.36","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"93e2bc449bf658da6f596594a862bcbf2cb31165","_id":"x-pc-widget@1.0.36","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-TGQ5JdGTxFrUUGSpYvcGHwiau7jmKeLGulG9sdKrNsHjYN03sGE5rI+e20tkfDuQ1FJwUopFM6Jrx7AYe0UXLw==","shasum":"6f983fb96608e9680b5ca739b9b3afcbdca544b5","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.36.tgz"}},"1.0.37":{"name":"x-pc-widget","version":"1.0.37","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","publish":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"661a1c27eb326cbe1d9678f996b46d4861935d29","_id":"x-pc-widget@1.0.37","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-arQ1hkJupxU5Oggx8EVSTe05ZU1oV232bcIRaDqCU8dDxfvlOGQRyK8alwxT7fSKJVaYr2sxCMYAY2JKZ9ujnQ==","shasum":"4483149c8fb31a6e82a59bf4d7d81a33a1b4fa48","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.37.tgz"}},"1.0.30":{"name":"x-pc-widget","version":"1.0.30","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"1eb71614dcc45bd0193ab74bceaace4bd2e4f223","_id":"x-pc-widget@1.0.30","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-EYkQHefL4nvmE4q7xlOVSj4H44Pnxz9HNJim3vpWHGbbxfvZGL5AVBfz8ttjxpqomggKtikwn9NWvERQoSv1uA==","shasum":"8fc76b322d8ff4f7c55543cadfcf5de93fc885d2","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.30.tgz"}},"1.0.31":{"name":"x-pc-widget","version":"1.0.31","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"8f94c2433951a9c97def35bcb6c59c6ef9fa5841","_id":"x-pc-widget@1.0.31","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-4gUTBgpTMIMTSga3V1CjatDueoMcN9M0xs+n+cTvrWrZu0fs/MO0ZNlut/0Ll/ha9fVsaXw8iRg2zFOWlZdwTA==","shasum":"ac52730e5852161b181b5f33eb094403e243ebe3","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.31.tgz"}},"1.0.32":{"name":"x-pc-widget","version":"1.0.32","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"5a55ec6967d7317bb9040b9e9c2d0a97d0ed8655","_id":"x-pc-widget@1.0.32","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-nkqpxWNMk1S2jL/lJi18MwQ0dRq2a1riJ+jrSV3dgJSKKWywxGc4jfvMbv++MAc84rpH0bc61qR2pNcjYAxWWQ==","shasum":"d78ef2bd1c5f95811a82f0fdf9ee12d7e65f2736","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.32.tgz"}},"1.0.33":{"name":"x-pc-widget","version":"1.0.33","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"516da721e2379bd7ed398a930e0737a06d076119","_id":"x-pc-widget@1.0.33","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-K8SfUldFt/DDEf/TEJ7ISc6ZeUG0pJgV8XEJn0t1FCB7jSAavByrV4zFFnt4ItAylMGDd62Jci8Rs/1r/f3ABQ==","shasum":"35794ca63f4547747aca9d7b35a441316b4edced","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.33.tgz"}},"1.0.59-beta.1":{"name":"x-pc-widget","version":"1.0.59-beta.1","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"11793077cda1ec5d38ebdf37d32f2bba8c873f3a","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.59-beta.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-aZLx0lvCsXeDidYSDAkMIUl74PSeXBDVJbQvE16BqkoW0NUADHe4UOcf1vEHE/WdFOsmAwEUtY//pONQnizuSg==","shasum":"de912d98beecf63bb0b16f849e6e34ceebc7d496","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.59-beta.1.tgz"}},"1.0.27":{"name":"x-pc-widget","version":"1.0.27","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"106cb15b433fd2d2fabbddb9cdb1ee2f41d86cc4","_id":"x-pc-widget@1.0.27","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-UlrxeV9jJYc4z3R9d3/2QeH1QKmP6aARyhOsQC74DppNbiffsj8G82Ho1b2q0ZnI+GnDJvs4eU+TvhxFFdDZ3Q==","shasum":"0d0d0cea4de83a8d55168ab9eaf4429c5bc0606a","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.27.tgz"}},"1.0.28":{"name":"x-pc-widget","version":"1.0.28","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"d3a82c08d5af28c764b032a0008a86e16cc26136","_id":"x-pc-widget@1.0.28","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-l1/EZgnJgGuamVja/77CgqJhxgyZKoAJ8bYBHLL/SoQJLLCfK/E9uZE3J86IT2NSMuE3fMUptv1o5EvOJFXtig==","shasum":"951fc1a059430f18150cc8826da73090bd62d8e4","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.28.tgz"}},"1.0.29":{"name":"x-pc-widget","version":"1.0.29","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"69934df0da9736a8a361735f99626a001368a06e","_id":"x-pc-widget@1.0.29","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-zlWpA4qgTcmDBQxwktH2YhMbKOZdNiBPYrgxKrB9W1B6R3Mdy7E/L83BVCNMJuQ/qzXQIVJ2gSsPoxpS1kMgzg==","shasum":"f9344a202a6106c3b9cbde04d2d98493efa35bac","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.29.tgz"}},"1.0.59-beta.4":{"name":"x-pc-widget","version":"1.0.59-beta.4","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"3ff9af0d0fe0c8674ca75b98421e8c78a71293b8","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.59-beta.4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-74w/eNFkNcyTm1d4Z5FmgGlWMPpg79t3bI1OnHFvLjhY10XgLfrvLjDaq2odiXX8HQyMeIVLO0HZNDeQZq2cRg==","shasum":"3650f17741280c7ded5c255da1b227f52d5e8cb4","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.59-beta.4.tgz"}},"1.0.23":{"name":"x-pc-widget","version":"1.0.23","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"5db80b602053254cf55ba99f0b55a1d9e9b48769","_id":"x-pc-widget@1.0.23","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-HjuHFqjDOruKp0EkCk9yUsNqTx+muqUoEyeheD2RRWxzYLI/dxxkdGVCty9Vy7UNo/qrcqVBk8nuxbL8jw5hUA==","shasum":"5b993b0cd967a2fb79aab81093c42c61b442b8a3","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.23.tgz"}},"1.0.24":{"name":"x-pc-widget","version":"1.0.24","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"2a00bc1e96b02377601296ae0ec6da129cda4bc8","_id":"x-pc-widget@1.0.24","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-DmopfQDZttd8ZgQbXd421nCGpMLCNTxIUNL4wWV0CwrDqLOnwnzxwtQVTVMdNe4yku6N1+dtzk687wpugXmUFg==","shasum":"e71313c8539a0b520b923167d9a24a74c3ba3f32","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.24.tgz"}},"1.0.25":{"name":"x-pc-widget","version":"1.0.25","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"192051416d114aa0c35561c9f8cca6f91a51a215","_id":"x-pc-widget@1.0.25","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-nSrDqvdVS8XH27Q13poKoQnPXZZEh9cGxBKlOeqfsSQcNpdrlOVD6x5mFEdmoduIyynvBV6CrVijh+B0FoHU6A==","shasum":"3f66404c3ee0002d3fb4e1e343f2df92405001be","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.25.tgz"}},"1.0.26":{"name":"x-pc-widget","version":"1.0.26","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"429b011ec0fca67bd256f04ceb5e414b809ad15c","_id":"x-pc-widget@1.0.26","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-4HbP5/ROUppL5da7vv3M33OiD8nfgvN2gKtFrkloZkrG5GxYto2Brbva0BCBAI/8I1kpv0QtU78y3+EjI3kX+g==","shasum":"f3225a9d0773bc60082feb5902826073166d5492","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.26.tgz"}},"1.0.20":{"name":"x-pc-widget","version":"1.0.20","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"41d60834c03dadaa34e197a4560da1ddc1378acc","_id":"x-pc-widget@1.0.20","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-M+BQba/5KD7M0NTOx9ZoadMSU3hAk9940RAnHnBKAapNwCgdmFu11LtdHFJNPKoIr0Z7b+D3QfIjYnKB+RvVrA==","shasum":"abc26f06012564f02210d60a9440e063d86c0d60","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.20.tgz"}},"1.0.21":{"name":"x-pc-widget","version":"1.0.21","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"ffc70fcc70bafdc999c3003732336d10384157f8","_id":"x-pc-widget@1.0.21","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-nddhZiQp/FQ3AxGGKsw15GKJvm4l6pkcy41RHZFbpm9JZ94CNuyB7NWk7b6t8pFmUVRdkx1nwNA9+6zTGClwBw==","shasum":"23793342f52badbb111c670dd1a51ebfb08273a2","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.21.tgz"}},"1.0.22":{"name":"x-pc-widget","version":"1.0.22","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"1861c9df7be1594da3af29d95da6b777b141f176","_id":"x-pc-widget@1.0.22","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-xTk8/6vMU2G5GzJwbPRu0Kbw8r8zevUyu6ok5QSUL6Xjd+jzLTQxGFyAf474ZeX1sd/R15mMCC45KckFMmHvtg==","shasum":"241967b0a90a37be57a05b6bcae112bb0a723141","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.22.tgz"}},"1.0.3":{"name":"x-pc-widget","version":"1.0.3","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"b83ccf69fffd24d763a69774aa7689c2ece81c22","_id":"x-pc-widget@1.0.3","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-JB9vtMuQT5FMyEWES+SNHpsqELZv8G5EInEuKr8PJ3fhzSakdLgO030fnlLQN20GpqH7zjRjmWQIq/WLhz7+LA==","shasum":"2b65a0888990d63f94d78d5dbcdc860607d3d7c6","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.3.tgz"}},"1.0.4":{"name":"x-pc-widget","version":"1.0.4","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"285be2afbd35270895b91081746c75641bb29150","_id":"x-pc-widget@1.0.4","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-h8+25rnOAgfN9Rm5RDa7hPcR0nLP+NwHDzXcuUDQTpHf6plTGV843gWKMVlekyD1VN8L2wPe5Et5VQX4rHx9uA==","shasum":"5c22e4f7211151772fd383bd46bea2e231969701","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.4.tgz"}},"1.0.5":{"name":"x-pc-widget","version":"1.0.5","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"29895790f3f2d5ee50626a1e792f75ed7315a9c2","_id":"x-pc-widget@1.0.5","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-zPT6kffTwi/sJPlHnKbkDtGGiY0Ws64u3Mvy1tc4s8fWt4+iSvKP+bqRfFCd6jxqWxMrr0vqt6gI2U0TREntmw==","shasum":"592c76b48ad1382d5b1f648d34f39c486c053224","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.5.tgz"}},"1.0.6":{"name":"x-pc-widget","version":"1.0.6","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"eb6ff001847f5bd638acfb1c73bd0aad7c735d2c","_id":"x-pc-widget@1.0.6","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-6GM679Rb3hRgYs716g9GYsU6NNOtvOx4Y/Ln2vFja4sO8IJXGBcLxquQv6WjAV4P3JiWMhdav8/n03OtOuoucg==","shasum":"8d73614653f38d3d04fa727050e7c2ee6c5b01cc","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.6.tgz"}},"1.0.7":{"name":"x-pc-widget","version":"1.0.7","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"c06e8989960efe6ab0ad102e0e93e8c9c10372cb","_id":"x-pc-widget@1.0.7","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-pL+So9+K//ToTeTgDrbQJyJySff0q4lJwuUYo9dxc6zYbuiBkKmkPu97ZKG7sywDIZjWVr03ztvKs5ay0jsVDQ==","shasum":"4b0166ac05756bd44dbc7216709f9801da44a175","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.7.tgz"}},"1.0.8":{"name":"x-pc-widget","version":"1.0.8","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"76ffb5cd74c4676cee9ecb31d484b31197152ae7","_id":"x-pc-widget@1.0.8","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-CmIMnjyqcPII21+oqsFiiY/Qq71kWeLg9uDVCTSstswwp1eHojHibWxJ2srPNFW0aFpsrN3BJpfNVld3HK63Zw==","shasum":"edc4d8d24857d6b7263e8388fceb8ae27fcb9947","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.8.tgz"}},"1.0.9":{"name":"x-pc-widget","version":"1.0.9","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"442b7358fb7b0279013615e619f8251d112e94ff","_id":"x-pc-widget@1.0.9","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-InuY0wmFRavWnvcRCGWJRRwgIj063/XNCI0wHQlGymD6g7CA4zwSO0Zyatovv8ea8nBMRMoKzzh8nhpffvZzLg==","shasum":"1902e2d1ca8ea6f6bffeb2a4afdfee70290983e3","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.9.tgz"}},"1.0.16":{"name":"x-pc-widget","version":"1.0.16","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"911223f2dffca2b4c010a908ca36635d094ffc7f","_id":"x-pc-widget@1.0.16","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-MFPuSn3DvENlW9d01x424kofavAHdfm2oDXwjbOa5QyrSUhylWKTsrXrQzDFynk5sB4O2hLnCoT+/1lIgPdwDQ==","shasum":"878593c39872077cbfc8122d65ef09fab092c760","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.16.tgz"}},"1.0.0":{"name":"x-pc-widget","version":"1.0.0","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡","readmeFilename":"README.md","gitHead":"b8604b0f2c748d4e3acbdfb230db5def22e8b285","_id":"x-pc-widget@1.0.0","_nodeVersion":"12.22.7","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-u+lyykB7k43i94SECif53jr42YO/qcQZNuiIWsx5Mp5a80bCPvfRRNt3/TesjDrqqrD/3KABc27dMxizr30vYA==","shasum":"1cd3871affda3cff1737ca9f1b0662a190e38447","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.0.tgz"}},"1.0.17":{"name":"x-pc-widget","version":"1.0.17","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"dddfcd29a983299fad9d7080a31f0322aa52ced6","_id":"x-pc-widget@1.0.17","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-LbW3XisnHVCBDN79LG771wHR9n6O7wvlJNRUNWlq7sm/35hpzVSzYsNU/sTvvGak6z+twJjZwE7FbbxzRh6zKg==","shasum":"f695956016967f0aeb9fd8e692e0f05017368bed","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.17.tgz"}},"1.0.1":{"name":"x-pc-widget","version":"1.0.1","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"cd259e7ac99d33c8dcd6a5e3bda4b17f33db7f06","_id":"x-pc-widget@1.0.1","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-CwmDqInWYlhXENAjOGJxAYYptInjWpomfT0Ay8d/WG9GjdhNE+65xJCcxpOovzO5vbdMfNfq1vomvDNOVrhhoA==","shasum":"4331bfb048e7ce290991e7f0f22c64f92399672b","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.1.tgz"}},"1.0.18":{"name":"x-pc-widget","version":"1.0.18","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"399e222b1dbe00e96bde2d8ee8ebd5626f7c0f92","_id":"x-pc-widget@1.0.18","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-QUa2KV1/GFGOtZw7bvuUmSoAPW+kwCItbyKUfkzfeUVK4RDNGuXFR8d4z8+JpuNkcwYuo8ryqYDhUx1fYyLJ7Q==","shasum":"922bc7e1f7e287ea24c0edc74c9da8c138cd66a1","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.18.tgz"}},"1.0.2":{"name":"x-pc-widget","version":"1.0.2","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"^4.0.0","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"2bc512167b54a96f285547ac6b9da54ad7ea70b9","_id":"x-pc-widget@1.0.2","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-Egy8VSiBWfBl5yjZmUc+rpuvMqaNKumrR6XpQKYFfEmYC5u6JaWnCRnNQbwL2N+JEuJUtkfgct5yCV/XqVpLYQ==","shasum":"25d262b322227ff79649cc41238bcb842deeba0f","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.2.tgz"}},"1.0.19":{"name":"x-pc-widget","version":"1.0.19","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0","@babel/runtime-corejs2":"^7.16.3","js-cookie":"^3.0.1"},"scripts":{"start":"node scripts/start.js","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"4b1c83e64578c297d7758e404e02ab8ead2c24d6","_id":"x-pc-widget@1.0.19","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-5N6eKZeZFjQTlyDmP8/pwjmruY0qX92dSvEsJn1LJHDAfF/LKUgSlitozNL8i5ejdMGmfdm+WiGGMwGDEHKODA==","shasum":"652f3252248579d5ef039461e690f8bd42d0aa7a","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.19.tgz"}},"1.0.56":{"name":"x-pc-widget","version":"1.0.56","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"cross-env-shell NODE_OPTIONS=--max_old_space_size=4096 dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","gitHead":"b77007f7818281b41833ea7a097b2f55acf79dcc","_id":"x-pc-widget@1.0.56","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-dx2uNuo5Wlw8eeyQwcRjleB1eyK18ESGOx93Fsv4qRvj36iowpMaho0b3xuvkx13UELx53cpSiOMzT3HPEo5Hg==","shasum":"b11f8cbbe4b9be6aa7c3d76b2c591aa4cfab6c06","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.56.tgz"}},"1.0.58":{"name":"x-pc-widget","version":"1.0.58","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"cross-env-shell NODE_OPTIONS=--max_old_space_size=4096 dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","gitHead":"b77007f7818281b41833ea7a097b2f55acf79dcc","_id":"x-pc-widget@1.0.58","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-m5ufwi5z2XW6bhGGdkN5fkOynZiBKB2c3buSLCJ/+jLRaeJjv8dB8nbFWQwEyxakrbjIlzrpGImpCCONvlcvKg==","shasum":"15982935f197a3fbc30cebcefb04e970cd9b8ba1","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.58.tgz"}},"1.0.52":{"name":"x-pc-widget","version":"1.0.52","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"5438b02022f425d1458ce43b6d7df47c4303768b","_id":"x-pc-widget@1.0.52","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-vk3O4+bFsNLgXQFTwMf2Qi5O4/ziNwYqVJeb5OhWGFdri9CX2IN7TQ2hWK3VcE3jEz1tAgvpLfL5HJzAh909rw==","shasum":"2afa63eccdc11854bef22c4547e577d68ee834b4","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.52.tgz"}},"1.0.60-beta.6":{"name":"x-pc-widget","version":"1.0.60-beta.6","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"cc4d82ba1411514b0602acf7c3e4e163d71d13a4","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.60-beta.6","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-/60GLqQFXnQ8OeOEBXA79pnHpvY5TJBj2l3qqgdj4VDFF2pz5VTv/iSIHqk8sGlqXNaLQdhwuK+7Gm50nIyFig==","shasum":"2c50114a1be14c5e6e876a12379397795e741a88","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.60-beta.6.tgz"}},"1.0.61-beta.8":{"name":"x-pc-widget","version":"1.0.61-beta.8","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"b5abe02057a8ef7277f9fc408602fdb4a9deb7ec","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.61-beta.8","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-Gw5nmw+dmYrtkVUKThdLJyCxUc1lfKWdUdc9Y/GWIWXSfJ/mXfmcMtCDNmRlU0n92u3bqWw0oG1TnoRWC6hF0Q==","shasum":"7f241af4f8e4603261287f6a24d2fc9a6204bcf1","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.61-beta.8.tgz"}},"1.0.53":{"name":"x-pc-widget","version":"1.0.53","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"5438b02022f425d1458ce43b6d7df47c4303768b","_id":"x-pc-widget@1.0.53","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-7rBuHS602YrpNzCSHngBTdEiVNw3xYtofXKJBO8AxUx6PI0TjcKDUFJ/cDBSrGp/2Q0HoMW20BDsmiaoNCHhvA==","shasum":"afd72f237d08ed6ed06f29c649c1722f0c0149cd","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.53.tgz"}},"1.0.60-beta.7":{"name":"x-pc-widget","version":"1.0.60-beta.7","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"6d40963b3fdb11a3c901531bb83941533fbaf588","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.60-beta.7","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-ZcJdOqak3nF+67iLX5rjm1gdwVt21KAZnnz0UKkAz7AjirDjiF4bTjre3blZdbKmBtPdkypEoD+v19NWVk8eVg==","shasum":"521433f0b9728c665c559afc048c5374424dfb43","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.60-beta.7.tgz"}},"1.0.54":{"name":"x-pc-widget","version":"1.0.54","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"5438b02022f425d1458ce43b6d7df47c4303768b","_id":"x-pc-widget@1.0.54","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-LBLaJOAyuM/UdsqYO2dsT/NjQklh68BGiR+vSMi8zScoLUmg5r+wnzcH2IsMvwqtqX48tDM7jFljnXJ/3mCnug==","shasum":"bc9e6effdf8dfbc35b530ddba222144dd368acec","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.54.tgz"}},"1.0.60-beta.8":{"name":"x-pc-widget","version":"1.0.60-beta.8","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"ad2300cde995647bcb223595b1839fe4fe9c87bd","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.60-beta.8","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-IL5IinF41OZ7eazELWPzBa0KfOLO3sPSfWDQL3PPZ3em8YYEa0fBtsJGkDUWPJ6o/cS9Vbwtf97cGoG6W4qzMA==","shasum":"4468635b888409259faa78df8965aef2f2d3c83b","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.60-beta.8.tgz"}},"1.0.55":{"name":"x-pc-widget","version":"1.0.55","description":"云徙组件库","main":"./src/component/index.js","module":"./src/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"cross-env-shell NODE_OPTIONS=--max_old_space_size=4096 dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","gitHead":"1eae33d3ec5a6248536e433b7f0b96496378751b","_id":"x-pc-widget@1.0.55","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-V33UGURP7FDTK+9SPE8AUy3xpDzm/+rUXP/ecAu9n/H3xbZxM+lJu81LLbOaFZIv2cOH6kfOaYaoxvOPPNhosg==","shasum":"cd6cb69b397463ab4794a7232fbcae7dd27bdf37","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.55.tgz"}},"1.0.60-beta.9":{"name":"x-pc-widget","version":"1.0.60-beta.9","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"cb15861033e6e9e3967a5c987707327157049869","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.60-beta.9","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-NwDqWX28OFRSqPwq5/heCIQJgMsH5YZmNxv8YCZBj19B3YcfxCjgdANKAmY4Kc3soNOPpiw0WjNR8zDu57k4og==","shasum":"3f84afbe6113493b022c444e1c3f7fadb81788a2","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.60-beta.9.tgz"}},"1.0.61-beta.9":{"name":"x-pc-widget","version":"1.0.61-beta.9","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"e3f981ebb18549c88636394ce652cadc2c38c344","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.61-beta.9","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-LLXmDPQSrXFWWti646HUIhqfGygQymqVUWLN1YTayDPyqLfHH8Mq19GtxkzDpcCrtzfTLp9eeBDTiM0S45moGg==","shasum":"50b8684319f8e031c2f3af12f1817f5974f33fc6","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.61-beta.9.tgz"}},"1.0.50":{"name":"x-pc-widget","version":"1.0.50","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"af99aa4b1c2fc318a9a65f98b8620e2f7c6a5412","_id":"x-pc-widget@1.0.50","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-Nv6Imz3AvEStrDtk3N+yZtNAZOaabfOMebTB7xxyUpBkFcEbcz8K0+9KW7EdHYiTXO1iVCAgG1GPPJIMpBnXMw==","shasum":"c82d6301945f9cac8defb773f2493e0168562682","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.50.tgz"}},"1.0.51":{"name":"x-pc-widget","version":"1.0.51","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"5438b02022f425d1458ce43b6d7df47c4303768b","_id":"x-pc-widget@1.0.51","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-z6rvyC+zNnaQO7grNtozT9Olcm/pF/NAKPiDbd2QGBHqcnqPLBsseLdRPs49Me8bSHyysVFi/8vC1stBXDIdUA==","shasum":"bab5113126cb3893afec11e8c3112f414244fb78","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.51.tgz"}},"1.0.60-beta.2":{"name":"x-pc-widget","version":"1.0.60-beta.2","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"2c494ba99d5b93a59d4f5ad1b9d108807ad1f747","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.60-beta.2","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-hWAa0lGMl3KgMoHqlnd9e9g+z34daf3N+O16SL4/hjmCpqTqKFQpfeYSQnER97Q8Rju/wmGWC0B5hMgb/OXYKQ==","shasum":"ec5404255da86e04b3da49dfc15cc2eade4d55fd","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.60-beta.2.tgz"}},"1.0.61-beta.4":{"name":"x-pc-widget","version":"1.0.61-beta.4","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"69378f3bfbdc158aee08d8248b03265bc63c4492","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.61-beta.4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-PAO1T6w8/JHju5VN+oETV9wAJplaGLJPNL3vwPnAJTDcDd59DVG79DXIh9L7EhFNdn6Is+TbVMKC0KREpDMGlQ==","shasum":"21700677ad555f8b5ec55e317f1947bca6f59818","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.61-beta.4.tgz"}},"1.0.62-beta.6":{"name":"x-pc-widget","version":"1.0.62-beta.6","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"ccdc90a7f2618ec9ae33dc795fc3f02f4d7d58aa","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.62-beta.6","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-KxhfqH+r8qrJ20XbxUaEQEFjAmGIks9xP6UFuHfcWD3/9ekEkC1yQCg/4xOks8vlvLzb2Ul0auEYmV2d4tC37g==","shasum":"c6f38888c41809a6695677b9b5104c6b6a682fde","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.62-beta.6.tgz"}},"1.0.60-beta.3":{"name":"x-pc-widget","version":"1.0.60-beta.3","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"884aa8450698aa84e9d52c14c436b3d788dd3ddd","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.60-beta.3","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-jAfVSwO/etmuWrYx7A3WdKhi+21YN1Yqs9e/lpmztnmXfwFoiLxfnk6M8tJoo53iZrk6/imIzlFRMn0oTCQrLg==","shasum":"e7b78644ef792f67ad0f12265954183b576674aa","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.60-beta.3.tgz"}},"1.0.61-beta.3":{"name":"x-pc-widget","version":"1.0.61-beta.3","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"e72ac45192d769d8b40675177ac8a0c8c3a5d97e","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.61-beta.3","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-6JE9pTKSo+O0/gdhkhcLs61OvlM8BdYexkVa5ppcmkqQWWg9FS7s3wKz51jwKHZD+i2uvI26a44TKG26/c2cbA==","shasum":"8d0f681342f7494b73b5b113e0278428b77ef765","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.61-beta.3.tgz"}},"1.0.62-beta.7":{"name":"x-pc-widget","version":"1.0.62-beta.7","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"18778addbb74d489a213f91c83a6b7059c85896c","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.62-beta.7","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-vG2Vgk/S6AZETaUzs+6L4Cs/Z1RdqhQNaGYtLeqtXsR95sLmUyBzNXdDlzq0wKwnsO6z0lMrPMWxFK6eu7EeAw==","shasum":"a15f5856385fa7ebf35a280ab497133690af15d5","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.62-beta.7.tgz"}},"1.0.60-beta.4":{"name":"x-pc-widget","version":"1.0.60-beta.4","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"52c10a632a3ac91aa1097bf0dbae13be18d46dd5","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.60-beta.4","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-zAuqBVDKm57WrP0Dfc+8sbfFFSE2luYgjnWTOabjN+q265wmgdr3qpiJw7UajvudL+l0fNEpoDrE+gUstZZC0w==","shasum":"e23238a7ee650cbfdfe658198513d5bccf461e2d","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.60-beta.4.tgz"}},"1.0.61-beta.6":{"name":"x-pc-widget","version":"1.0.61-beta.6","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"ab83e9f8bba2af7d7049562a817d710a862d1e38","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.61-beta.6","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-20Cko76CRXVytV86TzUFmDDiNXsqMSGtOxT6HO9XFRyJT58k1JEYchKGDh2w91Q8bMsCxJ5HqkqvyR/lKOZNag==","shasum":"562e8eb66a47301ed535600a3658fdb2510c37e3","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.61-beta.6.tgz"}},"1.0.61-beta.5":{"name":"x-pc-widget","version":"1.0.61-beta.5","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"e7ee67998684b805e53a317edf13421bb2f8e137","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.61-beta.5","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-Oy+L4OwHpzY2wCIOk15XHpYCZiBjiYw36jP9bcthrRA5vi7WsAJMfWtwpSjNB7/srGNOnnhycdYDKO7Qm8vcnA==","shasum":"2fc6cb8df7fc56607aabef234baf6a91a87ab675","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.61-beta.5.tgz"}},"1.0.62-beta.5":{"name":"x-pc-widget","version":"1.0.62-beta.5","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"fe688d3a096862706ac361a1eca992b8a713a609","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.62-beta.5","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-MytVnieggPTyvvddyRCJNKv0etjmWFhypCVOVLwlqhM21c0NwznG6iFN/zo7q3nTeCe3D6D34KVVYjCpwF5zvQ==","shasum":"551bf5fefa04993e8ab5e9d5bedaeddaf34eabb1","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.62-beta.5.tgz"}},"1.0.49":{"name":"x-pc-widget","version":"1.0.49","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"e92c8d9c3437ac83a140e17948717b969669586a","_id":"x-pc-widget@1.0.49","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-0L4CyItsjfIqXt/0OLEuyL87Daj6kx5pR2+o7Q9Hal04hIXo2W9uvpFWcKOy0yAj4X2gwlXme0YXavm16jh/Mg==","shasum":"b8c37c762821455e0bcf0f3c2f0bd2403bbbb8d2","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.49.tgz"}},"1.0.61-beta.2":{"name":"x-pc-widget","version":"1.0.61-beta.2","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"90a30547379ab7b5cc194445779699a1b25653d4","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.61-beta.2","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-UIGMbhodrlg5k+QL92f/3H8cqX/nxBQ9LrvECX3He4kn1LzVrkYbyRHu9qvozBB7nMhKvYv7OQv2XSFLQ1HkBQ==","shasum":"b35427019232ab9c5ad691b168267e6d92c691df","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.61-beta.2.tgz"}},"1.0.60-beta.1":{"name":"x-pc-widget","version":"1.0.60-beta.1","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"71800e5a6f91ec7bbd341665e9a247d5396871d7","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址  https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1. 修改更新日志`doc/更新日志.txt`\n2. 修改`package.json`版本号\n3. 合并到`master`\n4. 打版本`tag`\n5. `npm run build`\n7. `npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/`\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.60-beta.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-2s8WB0SCHdA16JjhNQ7sF4J9QTNxP1Ygwf3UGYfgAtymJ4zBT4CPqrOVzN+i9/1RoFhI4LdVio4guoLvjxLOBA==","shasum":"b0d58fc2f22cc96b60709a758560852f91938364","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.60-beta.1.tgz"}},"1.0.61-beta.1":{"name":"x-pc-widget","version":"1.0.61-beta.1","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"ac8d39cb9defdb173608271db010f2f79c389882","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.61-beta.1","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-xG0MlNicxQRJH2+9lrpYq7NE55IumGuNI5ysjZrg5ESnmPefWMz+8TfLceqinJs0E1DrDP1C+jycOueE3EMOpw==","shasum":"390a6587252ff216a0545b03f1d027d269be9046","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.61-beta.1.tgz"}},"1.0.62-beta.1":{"name":"x-pc-widget","version":"1.0.62-beta.1","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"6073854c926b4d37528b5d67b50745dbe404569c","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.62-beta.1","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-qRuhU/ZOvPijD2FxD9OlEXDQ3yHUiX76IGmumucF7M103cAy1NEb+S35GexyorLtKoNXI/v0QnaD4b7utVUmUQ==","shasum":"a19a83c5caaf74bf1cbb202441239855adc58497","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.62-beta.1.tgz"}},"1.0.45":{"name":"x-pc-widget","version":"1.0.45","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"a9920f4db9eaf41b0be7a705690607389c59f15d","_id":"x-pc-widget@1.0.45","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-Pb5gx+O7Snz3Ixe0BBkQVU70I2xkW1efrZNj0/BIxJsfF2J45vXZH3Bme6kTbkh3uDgVLNoza0b8HyzSdpqNQA==","shasum":"5d7fb205d6eb8176b83d2c479311971cb4e9900f","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.45.tgz"}},"1.0.46":{"name":"x-pc-widget","version":"1.0.46","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"e3f747019e34c3e59211a99b9c80bf57cbff9a38","_id":"x-pc-widget@1.0.46","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-kpflCJDjIVltZf6Dulk0iD5sNlPvGt5gpHy92/cREEoUP1XNrGL5LPY6n9h10wNp19nT+ovOIFBrcqX9Pwocsg==","shasum":"20f98610cb37a10063357e25e5a2203e7be9a448","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.46.tgz"}},"1.0.47":{"name":"x-pc-widget","version":"1.0.47","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"18e8ea035f2de4f5f8a6f56743c2fd9b27512275","_id":"x-pc-widget@1.0.47","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-cSaTpYO6uj0uR6EcavVISrO7GDT+qKRixzWjMF55AKxCJSHeC/qbQ3xnWU74TgSJ0oBUw9qpQ0XNOy2gLPVorQ==","shasum":"e31a296a9e32e638d06b97f23bfa2ad9f3da3670","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.47.tgz"}},"1.0.48":{"name":"x-pc-widget","version":"1.0.48","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"6fe89becfeb33abdfc5ef379b19fb2a5626c280a","_id":"x-pc-widget@1.0.48","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-34UpNiSHRldYkXeQbboF+gJQjG7uzgi4oHcSSiWaC4UM6L8Pw3AYtuj/y3xDcBinVxRvEQFy/h2gD4r6WizJqA==","shasum":"e65d30325b1ce19da8f29cae8826fabb59af92a1","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.48.tgz"}},"1.0.41":{"name":"x-pc-widget","version":"1.0.41","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"32198d159098117b531eb6750e7f6f05e222fedd","_id":"x-pc-widget@1.0.41","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-06IBLXpWcuPAptfGyRRQSJ3zKDlxifyBVUSKcN/uKjBuXmrozY6dIZFpjCgXIIfflhywRHGUOD8Mw3hrB3Q+yg==","shasum":"c8c4ef8697f23a8d6d5a4c6738ad255218a5094d","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.41.tgz"}},"1.0.42":{"name":"x-pc-widget","version":"1.0.42","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"a5fbdaff98913db8fa8c0710c5d2fd83435e52ac","_id":"x-pc-widget@1.0.42","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-NbmSyGsF1uxaczjkqDjwCl8OvB2gCs1Azo7j4dwNiCpRgUUNhkISGWiFJP6sYvtwbfsbr6SjAiLIkR6TOrQLag==","shasum":"7b59218ef61c3758700bb823a6b8bfced98bb050","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.42.tgz"}},"1.0.43":{"name":"x-pc-widget","version":"1.0.43","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"189ed0ca6cbd09825352dcbaef55b22ce0444853","_id":"x-pc-widget@1.0.43","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-zyVvMGr+r7hWnIGrd2aWKV77CAQzgRB1SKOoniYpi1syVqmtXLlOdJEJWu/TSOA+h8//1IMb8gtZmEH/fnzW0w==","shasum":"647f489213a3035fae7031fc978c40cd95b17f9e","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.43.tgz"}},"1.0.44":{"name":"x-pc-widget","version":"1.0.44","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"7833e60f5ba2d71d91ff12cc5e18752acc453c19","_id":"x-pc-widget@1.0.44","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-S8UpmKe7RNmGbw4zBQDVLPwCXYpNRA5FwprSleRW5zJJGsNiAjumTkTbqr1fL8Y/tWBI6c24BU59wZt2sIR2WA==","shasum":"3feefb6aeef4f2e942001fe42c66f473dea9470f","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.44.tgz"}},"1.0.40":{"name":"x-pc-widget","version":"1.0.40","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"661a1c27eb326cbe1d9678f996b46d4861935d29","_id":"x-pc-widget@1.0.40","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-6KMnkk3p8c4V41DaJZpZaxyHbOEqFDmyoyjutlHUt2KjiUm4xOqWWIUEbSxXrWrnHwUo4T5jAYmvvh81Cbo3zg==","shasum":"663848b5d5893d3417997834e2f19b86916660ca","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.40.tgz"}},"1.1.2":{"name":"x-pc-widget","version":"1.1.2","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"945da4adf88be4281644a071a3fca158a35b3f65","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.2","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-l2md9a4MS8rrag4yLSuv9f4G0agloe4O4ejJcPG3Vph7toDKdWt6CKqRCG9jP8xft3qtZWQGlWRg8C6LhDxGwQ==","shasum":"cc0aef572f61ba554267d7d5baff8c41cb1205ff","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.2.tgz"}},"1.1.3":{"name":"x-pc-widget","version":"1.1.3","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"484073f2e65081b776cb822a90383decf84f9836","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.3","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-rNZ5QfLEsbsAepc+9B4EuoDkk8j4c2oPykUK67+RgO6/eBws+eIhREsgtig/TK7zb/ra0ALwk5DGjpiS6Qy7ZQ==","shasum":"d8546b07ede8d82376e11c79e68ad30c7f28529c","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.3.tgz"}},"1.1.4":{"name":"x-pc-widget","version":"1.1.4","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"570d0a7e729ba1d7b2bb063ccbaf494077bbeb3c","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.4","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-YCFt3R7j+RyW+2FUDRW1VKRFYfOVSfZwRBi1SNAKXhGnIT73xzdagPMVBWcjWhhWa5UnB0ExITAjqJFAU7NS8A==","shasum":"43f2683c36c6be4c61edb96884e0023a5b94e9c4","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.4.tgz"}},"1.1.5":{"name":"x-pc-widget","version":"1.1.5","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"1c517828a8d85d3c8005c67b0fe27eea23a9eb84","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.5","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-jV+JnorfYx8Zp1DeuINj1WUFUcW87jA0pu+t7gLbkbuJ3SqQCE1maQyk49eXARys7GQ4WY6w1EMd8LrA/GwLEA==","shasum":"8a36eae5de94d7c8c980e1cd94f5f2cf1652d93b","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.5.tgz"}},"1.1.6":{"name":"x-pc-widget","version":"1.1.6","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"37fa70468b180e571b7ea87b929060df4d12a72d","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.6","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-b/1o+2U19c/HgDwXD643dtNfR3YaIopjRGfiP4qF70WAiDPXQA1IANTcrkQ6Xaq2zXcz9+MQM59Yex69XO/a+g==","shasum":"c7eb5b97bc605c938e7c334ccf8b09e2a9cff6eb","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.6.tgz"}},"1.1.7":{"name":"x-pc-widget","version":"1.1.7","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"4989517d45897a1934f7fa54aa7b3b1b0d2837ef","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.7","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-EeZozVqNsYEN0WVusNX5J9thVm17/UDM1UxjOSWnQ03s6FlDGRWQNXzrPz/c/KyuJiTSl2tF3DVYGr1qu+NhEQ==","shasum":"49c7cfb2c664a21570943a98c092ee09e38a1211","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.7.tgz"}},"1.1.8":{"name":"x-pc-widget","version":"1.1.8","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"f61358006c88c8988b5845415ef3082611d62c4d","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.8","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-sM+RdBP08a83T1eA7NCSYFjhPJ/kHkAG+S5vsMdS8a9HrA9/o6IsZJ3xoZPCQj/oHdedMn5DVAEJagAtoGLHGQ==","shasum":"5e305289f5f77d1cb2cdac7347f38928cb7c7765","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.8.tgz"}},"1.0.38":{"name":"x-pc-widget","version":"1.0.38","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","publish":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":"rimraf dist/ && webpack  --config config/webpack.dist.config.js","build:es":"rimraf es && webpack   --config config/webpack.es.config.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\""},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4"},"readme":"#   腾飞项目前端组件库\n\n# 私有库地址：https://npm.dtyunxi.cn/#/\n\n# 设计图地址  https://docs.qq.com/doc/DYUV3R2Rkc0JzdWNy\n\n## 使用方法：\n\n    安装模块：npm install yx-widget --npm https://npm.dtyunxi.cn\n    发布模块：npm publish --registry https://npm.dtyunxi.cn\n\n## 工程结构\n\n01.    assets 静态资源文件夹\n01.    component 组件文件夹\n01.    demo 测试案例\n01.    doc 文档\n01.    utils 工具类\n01.    config 公共配置\n\n## 依赖\n\n01. 基于 webpack + ES6 + react16\n01. 基础ui我们依旧依赖antd 3.19.8\n01. 工具库我们依赖lodash\n01. 日期控件我们依赖moment\n01. 依赖ARM-admin脚手架\n01. 依赖classnames\n\n1, 依赖脚手架的 utils/request   路径不能错\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n\n02. 每个函数都必须要注释，注明该函数实现的功能（以下为标准的注释，可以使用jsdoc生成api文档）\n\n  /**\n   *  获取用户信息\n   * @param  {String} userId 用户ID\n   * @param  {Array} adress 地址\n   * @return {Object}   返回用户信息对象\n   *\n   **/\n\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫  index.js 也必须有这个文件   主css必须叫index.less   这是为了让按需加载能正常工作\n\n   YxCarModel/index.js\n\n   所有组件命名都以 Yx开头的驼峰\n   比如 YxButton\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在common.less中\n\n06. 每一个组件，根目录必须有一个README.md文件用于解释功能，以及api，必须使用markdown语法\n\n07. 每个组件必须在demo中写上详细的测试案例\n\n08. 有接口功能的组件\n   树控件，YxTree\n   注册组件 YxRegister\n   登录组件 YxLogin\n   \n09. 按需加载的配置方法,\n``` \n[\"babel-plugin-imports-transform\", {\n              \"yx-widget\": {\n                \"transform\": \"yx-widget/component/${member}\",\n                \"preventFullImport\": true,\n                \"style\": \"yx-widget/component/${member}/index.less\",\n              },\n              //\"next\": {\n              //  \"transform\": \"yx-widget/component/${member}\",\n              //  \"preventFullImport\": true,\n              //  \"style\": \"yx-widget/component/${member}/index.less\",\n              //}\n            }]\n```\n\n09. 组件内部定义的接口参数都应该为 **requestParam**,其参数格式为\n\n``` \nrequestParam:{\n                    url:\"\",\n                    data:{},\n                    method:\"\",\n                    callback:(data)=>{\n                      console.log(data);\n                    }\n                  },\n```\n\n10. 请求参数包装，统一使用utils里的request.js\n\n使用例子\n\n``` \nimport request from '../../utils/request'\nawait request(requestParam)\n```\n\nPS:requestParam是axios的超集，其外允许以下额外7个参数传入\n\n* callback 请求成功回调函数\n* responseModel\n* afterRequest\n* requestModel\n* beforeRequest\n* filterEmpty\n* joinArray 为true时将会自动将类型为数组的值用 joinMark（默认为英文逗号, ） 字段连接起来变成字符串，比如a=[1, 2, 3] 变成  a=1, 2, 3\n\n特别注意 `requestParam.data` 会作为responseModel和afterRequest的数据源进行处理\n\n动态表单使用富文本编辑器 需要在index.html中引入\n<script\n\n\t\t\ttype=\"text/javascript\"\n\t\t\tsrc=\"<%=htmlWebpackPlugin.options.publicPath%>assets/kindEditor/kindeditor-all.js\"\n\t\t></script>\n\n11. 登录组件 YxLogin的微信登录需要引入js文件\n\n  <script src=\"http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js\"></script>\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n``` \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n    // 子节点\n    ...defaul(),\n  }\n```\n\n13. 所有的下拉，树  的数据内容   都从  data.list中拿，  他们所有的值， 都必须包含  label 和 key, 所有递归结构的格式都要有 children\n\n14. 注意，如果需要在组件外部定义参数， 如果参数中有节点内容， 那么节点必须是一个函数返回， 否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，\n\n如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数\nagainRequest，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新dataList\n给组件开发者使用的， 我们可以统一定义一个函数emptyInternalState ， 可以修改所有state，只提供给开发者使用\n代码中这样实现\n//根据外部传值修改内部state\n  emptyInternalState(obj){\n\n    let THIS = this;\n    for(let i in obj){\n      get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n    }\n    THIS.forceUpdate();\n\n  }\n if(isFunction(get(tmpProps, 'againRequest', false))){\n\n      tmpProps.againRequest(()=>{\n        THIS.emptyInternalState({version : Math.random()});\n      });\n    }\n\n    //如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\n    if(isObject(get(tmpProps,'emptyInternalState',false))){\n      tmpProps.emptyInternalState((obj)=>{\n        THIS.emptyInternalState(obj);\n      })\n    }\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\nlet treeParam = {\n\n      againRequest:(requestTree)=>{\n        //把函数存储到本地，在合适的时机调用\n        this.requestTree = requestTree;\n      },\n\n}\nonclick = ()=>{\n  this.requestTree(); \n}\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n\n let defaul = ()=>{\n\n\treturn {\n\t\ttype: 'secondary',\n\t\tsize:'default',\n\t\tstyleParam:{\n\t\t  size:\"default\", //样式风格-大小\n\t\t  type:\"secondary\", //样式风格-类型\n\t\t},\n\t\ticon:\"\",\n\t};\n\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n\n\tlet classParam = {\n\t\t\tyx_yxButton:\"\",\n\t\t\tyx_yxButton_:\"styleParam.type\",\n\t\t\tyx_yxButton_size_:\"styleParam.size\",\n\t\t};\n\t\ttmpProps.className = this.styleParamClassName(tmpProps,classParam);\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\nimport { WidgetConfig } from 'yx-widget'\n WidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n\n\n### 全局权限\n在window._authList  挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n[\n  {auth:'',extra:{}}\n]\n\n\n### 向下兼容\n 新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n1、修改更新日志\n2、修改版本号\n3、合并到master\n4、打版本tag\n5、npm run build\n6、npm publish","readmeFilename":"README.md","gitHead":"661a1c27eb326cbe1d9678f996b46d4861935d29","_id":"x-pc-widget@1.0.38","_nodeVersion":"14.18.1","_npmVersion":"6.14.15","maintainers":[{}],"dist":{"integrity":"sha512-xgnEUuFSuE/B3WCLSPYU0OxXkAKvGAvdnGiV0dj2pgZYRA0TariR6EPKweoTWoiRA79zIymEVx+tAQ4jK/luTg==","shasum":"32a3dbaa6da5f49489bce087598d42e605ddb090","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.38.tgz"}},"1.1.0":{"name":"x-pc-widget","version":"1.1.0","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"f8a4d71110f9ddb6c495e4d76db0d521672d6644","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.0","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-+D5xql243LWshXhSqQCi0DbATHH/bC3PCmgC4tMDQSPSynBFY/hZAOqxlal+V38HAa7MSk8lGNziVYQGHmaYbg==","shasum":"6b430b9d0dc1f600d795e332ca20e2e7069ba823","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.0.tgz"}},"1.1.1":{"name":"x-pc-widget","version":"1.1.1","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"f8a4d71110f9ddb6c495e4d76db0d521672d6644","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.1","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-lG1Dunf2Ea+XK1FY+oYIKFNp3BYRUvmdors/jQD8Wyadi/uzcoOdVx1BgHlSRV5W7G87jW/ALm991TFcxSZuIg==","shasum":"f05986eb27275625a0877af070acc626b402b16b","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.1.tgz"}},"1.1.4-beta.4":{"name":"x-pc-widget","version":"1.1.4-beta.4","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"72b2a4f60621e386d81fedaf2a5fe1ac23d018dd","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.4-beta.4","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-uPeBDBhsJwzAhHXfiXVdoP8uJQXE/VEKmOOf6q8BIzBvM4sJ3+ZInck0vXJcispxoxLNUaTgnDmFdnfKnupDzw==","shasum":"a90ff9bad39522189c201d279fd7116ae347a231","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.4-beta.4.tgz"}},"1.1.4-beta.3":{"name":"x-pc-widget","version":"1.1.4-beta.3","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"f8fdbc4133e5c47a8a889dff7d7bbb108bb00249","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.4-beta.3","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-h9k3aUHTeuUnwpVCbeaMkh4e1tQCwmXxbPDHQh3cbQfeHnyGdlzo+CSupHa5wtM+r3QYtY32o9WSDhgj61e1zw==","shasum":"10d937e6fa2d9984e74a06322769175da94ca0c2","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.4-beta.3.tgz"}},"1.1.4-beta.6":{"name":"x-pc-widget","version":"1.1.4-beta.6","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"90988e50153d5a6b5e9e2f968d3f6793da56dcd8","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.4-beta.6","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-Fkv9rhv89MFNBvzPeOouqX14NCkOrkhljwE1hqfistY1TbGSX7JrL1mw190bAxeJub+XM4boZWVuPEJCnTI7oQ==","shasum":"8358530058f9fc889655d86888389ba37789cdd5","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.4-beta.6.tgz"}},"1.1.4-beta.5":{"name":"x-pc-widget","version":"1.1.4-beta.5","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"e3a6b8ffaed59b322244da9e7a9186f7cba353ce","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.4-beta.5","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-ipwmLmpgmnKCQGZ9llG8aXzFxk94hekYBIxV6672IdDHhtyYKvUHEVHifA/594GEpc+OHnJwFKi9ykYhinAY/A==","shasum":"6923453f0c26513721213c28831b255279d1f422","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.4-beta.5.tgz"}},"1.1.4-beta.8":{"name":"x-pc-widget","version":"1.1.4-beta.8","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"a75c81f164268cf8f4f2b918feb9eb56fca51c3d","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.4-beta.8","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-8jMp0jS8txcAI0txBjsIeWg3Qx3vzKdt/qJW+2ekua5Ytz8bH3shTh1a0TYmpVOjcRqKjtpid+Z4NdgFG43shw==","shasum":"139968e965fec962b782011df154677379c952b1","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.4-beta.8.tgz"}},"1.1.4-beta.7":{"name":"x-pc-widget","version":"1.1.4-beta.7","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"897254055bffe8c7087eec465b58c2347068131a","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.4-beta.7","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-kmEi43yEVfvtj83glqYarqH9l/7FOYNwRSyQPfx09GpQUxETP65IKZnaXdzx+Ad0Wqobm8wdCJ+tyayJ82uxdA==","shasum":"b745bdbf3ab06938c4776acf126485aa73e424d4","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.4-beta.7.tgz"}},"1.1.4-beta.2":{"name":"x-pc-widget","version":"1.1.4-beta.2","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"33ef1ba3812494f4c987c274b572e9477deff177","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.4-beta.2","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-bOan1weGtEPvKENm81hwxhcPlYzGFXyLyONjbIHwzsVnverycU6fyGcmduyrE6Vgs8+nm0sbJpjXeZEIcEGeBA==","shasum":"1b242166c31e4a9e2c2f277e5d6452a5466e9ac2","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.4-beta.2.tgz"}},"1.1.4-beta.1":{"name":"x-pc-widget","version":"1.1.4-beta.1","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","classnames":"^2.3.1","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"a0340a9cabe5cf5bcd804759a21178fe184be12f","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.1.4-beta.1","_nodeVersion":"14.15.1","_npmVersion":"6.14.8","maintainers":[{}],"dist":{"integrity":"sha512-JV+QdtZpxsjVzse2JOEKeaw2l39Bn0jCUAVW3VpI1Odyz3W565KG6YfhudIeYMOytfBdYd+0RK+t6n5d9z4hfw==","shasum":"a2e45787a8b0c20e47accdc2dbbb785322ba82f6","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.1.4-beta.1.tgz"}},"1.0.60":{"name":"x-pc-widget","version":"1.0.60","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"8c92d150bcdfa1c7d1bd01f74b9c34d51ce286ca","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.60","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-Foo9dcl7X2SCXFUNG0PEGfy+NSRbMRitSHCwxT6eue9PpTpGn5rvayr6HMTSrunwppVE3v3GL5UxIh8vpgUTqg==","shasum":"c576268549b5d0f5244e7661113e4eea69e0ea4e","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.60.tgz"}},"1.0.61":{"name":"x-pc-widget","version":"1.0.61","description":"云徙组件库","main":"./es/component/index.js","module":"./es/component/index.js","unpkg":"./dist/main.js","private":false,"author":"","license":"ISC","files":["es","dist","types/*.d.ts"],"repository":{"type":"git"},"dependencies":{"@babel/runtime-corejs2":"^7.16.3","antd":"^4.16.13","axios":"^0.18.0","babel-plugin-import":"^1.13.3","bundle-loader":"^0.5.6","js-cookie":"^3.0.1","js-md5":"","lodash":"^4.17.11","moment":"2.19.2","omit.js":"^2.0.2","qs":"^6.10.1","rc-notification":"~4.5.7","react":"17.0.2","react-dom":"17.0.2","react-fast-marquee":"^1.2.1","react-file-viewer":"^1.2.1","react-refresh":"^0.11.0","react-router-dom":"^5.2.0"},"scripts":{"start":"node scripts/start.js","dumi":"dumi dev","push":"node scripts/add-version.js && npm run build && npm publish --registry https://repo.dtyunxi.cn/nexus/repository/npm-yunxi/","dll":"webpack  --progress --color --config ./config/webpack.dll.config.js","build":"npm run prettier&& npm run clean && npm run build:dist && gulp","build:dist":" webpack  --config config/webpack.dist.config.js && node ./scripts/copy.js","test":"node scripts/test.js","debugger":"node --inspect  --inspect-brk scripts/start.js --inline --progress","clean":"rimraf dist/ && rimraf es/","watch":"gulp watch","prettier":"prettier --write \"./src/component/**/*.{js,jsx,tsx,ts}\"","docs:build":"dumi build","docs:deploy":"gh-pages -d docs-dist","deploy":"npm run docs:build && npm run docs:deploy","release":"npm run build && npm publish","test:coverage":"umi-test --coverage","publish":"npm version patch","postversion":"git push --follow-tags"},"eslintConfig":{"extends":["react-app","react-app/jest"]},"browserslist":{"production":[">0.2%","not dead","not op_mini all"],"development":["last 1 chrome version","last 1 firefox version","last 1 safari version"]},"jest":{"roots":["<rootDir>/src"],"collectCoverageFrom":["src/**/*.{js,jsx,ts,tsx}","!src/**/*.d.ts"],"setupFiles":["react-app-polyfill/jsdom"],"setupFilesAfterEnv":["<rootDir>/src/setupTests.js"],"testMatch":["<rootDir>/src/**/__tests__/**/*.{js,jsx,ts,tsx}","<rootDir>/src/**/*.{spec,test}.{js,jsx,ts,tsx}"],"testEnvironment":"jsdom","testRunner":"/Users/changfu/Desktop/npm-code/react-code/react-demo2/node_modules/jest-circus/runner.js","transform":{"^.+\\.(js|jsx|mjs|cjs|ts|tsx)$":"<rootDir>/node_modules/babel-jest","^.+\\.css$":"<rootDir>/config/jest/cssTransform.js","^(?!.*\\.(js|jsx|mjs|cjs|ts|tsx|css|json)$)":"<rootDir>/config/jest/fileTransform.js"},"transformIgnorePatterns":["[/\\\\]node_modules[/\\\\].+\\.(js|jsx|mjs|cjs|ts|tsx)$","^.+\\.module\\.(css|sass|scss)$"],"modulePaths":[],"moduleNameMapper":{"^react-native$":"react-native-web","^.+\\.module\\.(css|sass|scss)$":"identity-obj-proxy"},"moduleFileExtensions":["web.js","js","web.ts","ts","web.tsx","tsx","json","web.jsx","jsx","node"],"watchPlugins":["jest-watch-typeahead/filename","jest-watch-typeahead/testname"],"resetMocks":true},"devDependencies":{"@babel/core":"7.12.3","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/plugin-proposal-decorators":"^7.12.1","@babel/plugin-syntax-jsx":"^7.12.1","@babel/plugin-transform-runtime":"^7.16.5","@babel/preset-react":"7.16.0","@pmmmwh/react-refresh-webpack-plugin":"^0.5.2","@svgr/webpack":"5.4.0","@testing-library/jest-dom":"^5.11.4","@testing-library/react":"^11.1.0","@testing-library/user-event":"^12.1.10","@types/lodash":"^4.14.168","@types/qs":"^6.9.6","@typescript-eslint/eslint-plugin":"^4.5.0","@typescript-eslint/parser":"^4.5.0","@umijs/test":"^3.0.5","babel-eslint":"^10.1.0","babel-jest":"^26.6.0","babel-loader":"8.1.0","babel-plugin-named-asset-import":"^0.3.7","babel-preset-react-app":"^10.0.0","bfj":"^7.0.2","camelcase":"^6.1.0","case-sensitive-paths-webpack-plugin":"2.3.0","copy-webpack-plugin":"^6.2.1","cross-env":"^7.0.3","css-loader":"^5.0.2","dotenv":"8.2.0","dotenv-expand":"5.1.0","dumi":"^1.0.13","eslint":"^7.11.0","eslint-config-react-app":"^6.0.0","eslint-plugin-flowtype":"^5.2.0","eslint-plugin-import":"^2.22.1","eslint-plugin-jest":"^24.1.0","eslint-plugin-jsx-a11y":"^6.3.1","eslint-plugin-react":"^7.21.5","eslint-plugin-react-hooks":"^4.2.0","eslint-plugin-testing-library":"^3.9.2","eslint-webpack-plugin":"^2.1.0","extract-loader":"^5.1.0","extract-text-webpack-plugin":"^3.0.2","father-build":"^1.17.2","file-loader":"6.1.1","fs-extra":"^9.0.1","gh-pages":"^3.0.0","gulp":"^4.0.2","gulp-babel":"^8.0.0","gulp-less":"^5.0.0","gulp-replace":"^1.1.3","gulp-uglify":"^3.0.2","html-webpack-plugin":"4.5.0","html-webpack-plugin-for-multihtml":"^2.30.2","husky":"^7.0.4","identity-obj-proxy":"3.0.0","jest":"26.6.0","jest-circus":"26.6.0","jest-resolve":"26.6.0","jest-watch-typeahead":"0.6.1","less":"^3.12.2","less-loader":"^4.1.0","less-vars-to-js":"^1.3.0","lint-staged":"^10.0.7","mini-css-extract-plugin":"0.11.3","optimize-css-assets-webpack-plugin":"5.0.4","pnp-webpack-plugin":"1.6.4","postcss":"^8.1.7","postcss-cssnext":"^3.1.0","postcss-flexbugs-fixes":"4.2.1","postcss-import":"^12.0.0","postcss-loader":"^3.0.0","postcss-normalize":"8.0.1","postcss-preset-env":"6.7.0","postcss-safe-parser":"5.0.2","prettier":"^2.5.0","react-app-polyfill":"^2.0.0","react-dev-utils":"^11.0.0","react-sortablejs":"^6.0.0","resolve":"1.18.1","resolve-url-loader":"^3.1.2","rimraf":"^2.6.2","sass-loader":"8.0.2","semver":"7.3.2","sortablejs":"^1.12.0","style-loader":"1.3.0","terser-webpack-plugin":"4.2.3","ts-pnp":"1.2.0","uglifyjs-webpack-plugin":"^2.2.0","url-loader":"4.1.1","web-vitals":"^0.2.4","webpack":"4.44.2","webpack-cli":"^4.1.0","webpack-dev-server":"3.11.0","webpack-manifest-plugin":"2.2.0","workbox-webpack-plugin":"5.1.4","yorkie":"^2.0.0"},"gitHead":"11802c841f7067ba8901846b6f127bb4cc91bd7d","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","readmeFilename":"README.md","_id":"x-pc-widget@1.0.61","_nodeVersion":"10.16.0","_npmVersion":"6.9.0","maintainers":[{}],"dist":{"integrity":"sha512-NH9yDzWinJib1zQ67aiTl9vh/5XycNTcHDbyLIpWmcXqPpwLzMmPa0FWNpejV/WP+rZA6/3TVFpCicF4yoOOig==","shasum":"509c3d0a6ea0a34ef6831130557f86eec65c2fb9","tarball":"http://mvn.by-health.com/nexus/content/groups/yxUI/x-pc-widget/-/x-pc-widget-1.0.61.tgz"}}},"name":"x-pc-widget","description":"云徙组件库","readme":"# 介绍\n\n## x-pc-widget 云徙web商城组件库\n\n在线文档地址：http://spec.yx.com/x-pc-widget/\n\n私有库地址：https://repo.dtyunxi.cn/nexus/repository/npm\n\n设计图地址：https://www.figma.com/file/J1RUy5JeGETvZ31NLb2I0D/01-xMall%E5%95%86%E5%9F%8E%E7%BB%84%E4%BB%B6%E7%BC%96%E7%A0%81-2021?node-id=846%3A459\n\n更新日志：[链接](./doc/%E6%9B%B4%E6%96%B0%E6%97%A5%E5%BF%97.txt)\n\n## 使用方法：\n\n安装模块：\n```shell\nnpm install x-pc-widget --registry https://repo.dtyunxi.cn/nexus/repository/npm\n```\n\n## 工程结构\n\n|- assets 静态资源文件夹\n|- component 组件文件夹\n|- demo 测试案例\n|- doc 文档\n|- utils 工具类\n|- config 公共配置\n|- src 源码存放目录\n\n## 依赖\n\n01. 基于`react@17.0.2`\n02. 基础ui我们依旧依赖`antd@^4.16.13`,\n03. 工具库我们依赖`lodash`\n04. 日期控件我们依赖`moment`\n\n### WidgetConfig\n\n项目可自行给组件的默认配置进行修改\n```js\nimport { WidgetConfig } from 'x-pc-widget'\n\nWidgetConfig.set({\n  listPage: {\n    resetModel: 'local'\n  },\n  button: {\n    size: 'small'\n  }\n})\n```\n\n### 全局权限\n在`window._authList`挂载一组数据，即可拥有权限功能\nauth，权限id   组件必须包含  _auth 字段   该字段会互相进行对比，如果一致，则拥有权限\nextra， 该组件参数，覆盖组件本身的参数\n```js\n[\n  {auth:'',extra:{}}\n]\n```\n\n### 向下兼容\n新版本必须向下兼容， 如果需要废弃参数， 需要wning提示，最少要2个版本之后才能真正废弃，以便开发者过渡\n\n### 组件发版流程\n\n注意：需要在`beta`分支开发或者debug，发版验证后再合并到`master`分支发正式版\n\n1. 修改更新日志`doc/更新日志.txt`\n\n2. commit代码\n\n3. 提交代码\n\n```shell\ngit push origin beta\n```\n\n4. 打版本`tag`\n\n```shell\ngit tag -a v1.0.0-beta.1 -m \"发版\"\n```\n\n5. 提交tag触发ci\n\n```shell\ngit push origin v1.0.0-beta.1\n```\n\n## 代码规范\n\n01. 每个文件开头都必须注明开发人及时间和版权信息\n\n```js\n/**\n * @(#)2019/7/1.\n * @author 飞光\n * Copyright (c) 2019, YUNXI. All rights reserved.\n * YUNXI PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.\n *\n **/\n```\n\n02. 每个函数都必须要注释，注明该函数实现的功能\n\n```js\n/**\n * 获取用户信息\n * @param  {String} userId 用户ID\n * @param  {Array} adress 地址\n * @return {Object}   返回用户信息对象\n *\n **/\n```\n03. 组件文件夹采用首字母大写驼峰，其他文件/文件夹名采用首字母小写驼峰，主文件 必须叫`index.js`也必须有这个文件，主css必须叫`index.less`这是为了让按需加载能正常工作\n\n``YxCarModel/index.js``\n\n所有组件命名都以 Yx开头的驼峰\n比如 `YxButton`\n\n04. 每一个组件必须要有一个样式命名空间，该组件的样式都要写在该命名空间下，样式命名，建议采取驼峰或者中短杠或者下斜杠,必须以yx开头\n\n`==.yx_{组件命名空间}  ` \n\n`==.yx_{组件命名空间}_{模块}_homePage==  ` \n\n05. 通用的样式需要写在`common.less`中\n\n06. 每一个组件，根目录必须有一个`index.md`文件用于解释功能，以及`interface.ts`，必须使用markdown语法\n\n07. 每个组件必须在`demo`中写上详细的测试案例\n\n12. 关于props累计的问题，可以将 **defaul** 改成函数，以函数调用的方式加入默认参数\n\n```js \nlet defaul = function () {\n  return {\n    test:''\n  }\n}\n\nstatic defaultProps = {\n  // 子节点\n  ...defaul(),\n}\n```\n\n13. 所有的下拉树的数据内容都从`data.list`中拿，他们所有的值，都必须包含`label`和`key`, 所有递归结构的格式都要有`children`\n\n14. 注意，如果需要在组件外部定义参数，如果参数中有节点内容，那么节点必须是一个函数返回，否则会报错\n\n15. 组件如果需要从外部通知内部进行数据刷新，应该使用版本号机制，如果版本号机制无法完成目标， 组件可以以这种方式提供对外暴露的函数`againRequest`，对外暴露一个可以执行的函数，对外暴露给项目开发者必须指定特定的功能， 比如刷新`dataList`给组件开发者使用的， 我们可以统一定义一个函数`emptyInternalState`，可以修改所有`state`，只提供给开发者使用代码中这样实现\n\n```js\n//根据外部传值修改内部state\nemptyInternalState(obj){\n  let THIS = this;\n  for(let i in obj){\n    get(THIS.state,i) !== undefined ? THIS.state[i] = obj[i] : '';\n  }\n  THIS.forceUpdate();\n}\nif(isFunction(get(tmpProps, 'againRequest', false))){\n  tmpProps.againRequest(()=>{\n    THIS.emptyInternalState({version : Math.random()});\n  });\n}\n\n//如果，外部修改state的数据有值，则执行它，并将返回值一个个修改到state中\nif(isObject(get(tmpProps,'emptyInternalState',false))){\n  tmpProps.emptyInternalState((obj)=>{\n    THIS.emptyInternalState(obj);\n  })\n}\n```\n\n使用者如何使用, 在组件参数中执行该函数，或者赋值给当前组件的变量， 然后在恰当时机使用\n\n```js\nlet treeParam = {\n  againRequest:(requestTree)=>{\n    //把函数存储到本地，在合适的时机调用\n    this.requestTree = requestTree;\n  },\n}\nonclick = () => {\n  this.requestTree(); \n}\n```\n\n16. 所有组件都继承YxComponent组件， 所有组件都用  YxComponent下的Connection进行连接组件，用装饰器的方式引入默认props\n```\nlet defaul = () => {\n\n  return {\n    type: 'secondary',\n    size:'default',\n    styleParam:{\n      size:\"default\", //样式风格-大小\n      type:\"secondary\", //样式风格-类型\n    },\n    icon:\"\",\n  };\n}\n@Connection(defaul)\nclass YxButton extends YxComponent{}\n```\n\n  组件中都有一个styleParam参数，下面是所有的样式类参数，调用this的styleParamClassName函数进行转换className\n```\nlet classParam = {\n  yx_yxButton:\"\",\n  yx_yxButton_:\"styleParam.type\",\n  yx_yxButton_size_:\"styleParam.size\",\n};\ntmpProps.className = this.styleParamClassName(tmpProps,classParam);\n```","time":{"1.0.12":"2022-01-05T07:03:46.485Z","1.0.13":"2022-01-05T10:06:35.411Z","1.0.14":"2022-01-06T05:54:49.727Z","1.0.15":"2022-01-06T06:04:41.671Z","1.0.10":"2022-01-04T11:28:53.516Z","1.0.11":"2022-01-05T03:06:24.578Z","1.0.62-beta.12":"2022-07-04T03:40:28.175Z","1.0.62-beta.11":"2022-07-04T02:01:15.577Z","1.0.34":"2022-01-19T09:57:12.862Z","1.0.35":"2022-01-20T03:09:12.891Z","1.0.36":"2022-01-20T03:17:58.624Z","1.0.37":"2022-01-20T07:50:13.863Z","1.0.30":"2022-01-17T02:49:00.428Z","1.0.31":"2022-01-17T11:02:38.843Z","1.0.32":"2022-01-18T08:06:00.630Z","1.0.33":"2022-01-19T06:44:35.097Z","1.0.59-beta.1":"2022-03-21T06:03:56.680Z","1.0.27":"2022-01-13T05:31:57.083Z","1.0.28":"2022-01-14T06:45:32.309Z","1.0.29":"2022-01-14T09:33:21.943Z","1.0.59-beta.4":"2022-03-22T03:42:56.974Z","1.0.23":"2022-01-08T09:10:36.397Z","1.0.24":"2022-01-10T01:52:10.345Z","1.0.25":"2022-01-10T09:54:23.824Z","1.0.26":"2022-01-11T06:52:55.001Z","1.0.20":"2022-01-08T03:27:17.036Z","1.0.21":"2022-01-08T07:51:37.593Z","1.0.22":"2022-01-08T08:37:10.428Z","1.0.3":"2021-12-30T02:09:35.540Z","1.0.4":"2021-12-30T02:28:09.476Z","1.0.5":"2021-12-30T08:22:46.042Z","1.0.6":"2021-12-30T10:17:14.866Z","1.0.7":"2021-12-31T07:57:36.483Z","1.0.8":"2022-01-04T03:01:48.394Z","1.0.9":"2022-01-04T09:17:02.032Z","1.0.16":"2022-01-06T10:35:08.228Z","1.0.0":"2021-12-22T09:03:38.297Z","1.0.17":"2022-01-07T07:27:00.453Z","1.0.1":"2021-12-27T07:55:01.162Z","1.0.18":"2022-01-07T09:53:57.511Z","1.0.2":"2021-12-27T11:03:58.518Z","1.0.19":"2022-01-07T10:02:30.418Z","1.0.56":"2022-03-08T06:27:57.346Z","1.0.58":"2022-03-12T06:40:31.402Z","1.0.52":"2022-02-12T03:28:09.938Z","1.0.60-beta.6":"2022-04-12T06:04:10.784Z","1.0.61-beta.8":"2022-05-23T06:23:29.596Z","1.0.53":"2022-02-12T03:36:26.316Z","1.0.60-beta.7":"2022-04-15T03:47:19.827Z","1.0.54":"2022-02-12T07:42:38.087Z","1.0.60-beta.8":"2022-04-15T08:11:47.439Z","1.0.55":"2022-03-08T06:03:57.147Z","1.0.60-beta.9":"2022-04-19T03:00:16.003Z","1.0.61-beta.9":"2022-05-23T07:25:42.468Z","1.0.50":"2022-02-11T06:39:39.190Z","1.0.51":"2022-02-12T02:37:10.298Z","1.0.60-beta.2":"2022-03-23T07:04:46.072Z","1.0.61-beta.4":"2022-05-18T08:09:20.835Z","1.0.62-beta.6":"2022-06-07T12:13:01.062Z","modified":"2023-01-10T08:00:52.051Z","1.0.60-beta.3":"2022-03-23T07:55:55.751Z","1.0.61-beta.3":"2022-05-18T06:59:41.664Z","1.0.62-beta.7":"2022-06-08T08:15:21.691Z","1.0.60-beta.4":"2022-03-28T02:55:53.021Z","1.0.61-beta.6":"2022-05-20T03:46:22.640Z","1.0.61-beta.5":"2022-05-19T02:23:38.131Z","1.0.62-beta.5":"2022-06-07T02:54:18.452Z","1.0.49":"2022-01-27T09:11:37.838Z","1.0.61-beta.2":"2022-05-17T11:16:55.059Z","1.0.60-beta.1":"2022-03-22T08:32:23.643Z","1.0.61-beta.1":"2022-05-09T09:01:02.994Z","1.0.62-beta.1":"2022-05-26T12:15:41.654Z","1.0.45":"2022-01-26T07:59:36.225Z","1.0.46":"2022-01-26T09:57:56.965Z","1.0.47":"2022-01-27T02:43:16.265Z","1.0.48":"2022-01-27T06:39:47.991Z","1.0.41":"2022-01-20T10:39:41.011Z","1.0.42":"2022-01-21T06:49:54.949Z","created":"2021-12-22T09:03:38.297Z","1.0.43":"2022-01-25T04:21:18.067Z","1.0.44":"2022-01-26T03:28:31.801Z","1.0.40":"2022-01-20T07:52:17.798Z","1.1.2":"2022-07-14T06:52:53.756Z","1.1.3":"2022-07-15T10:08:35.881Z","1.1.4":"2022-09-01T03:17:48.259Z","1.1.5":"2022-09-01T09:41:02.503Z","1.1.6":"2022-10-21T01:52:14.469Z","1.1.7":"2022-11-07T02:44:21.635Z","1.1.8":"2023-01-10T07:32:17.965Z","1.0.38":"2022-01-20T07:50:56.077Z","1.1.0":"2022-07-11T03:39:11.753Z","1.1.1":"2022-07-14T06:26:17.082Z","1.1.4-beta.4":"2022-08-10T08:47:42.320Z","1.1.4-beta.3":"2022-08-09T03:41:43.013Z","1.1.4-beta.6":"2022-08-11T09:30:21.554Z","1.1.4-beta.5":"2022-08-10T09:39:52.859Z","1.1.4-beta.8":"2022-08-24T05:55:33.361Z","1.1.4-beta.7":"2022-08-19T07:23:58.925Z","1.1.4-beta.2":"2022-07-21T08:18:08.879Z","1.1.4-beta.1":"2022-07-18T10:24:24.661Z","1.0.60":"2022-04-20T01:27:50.107Z","1.0.61":"2022-05-24T11:59:51.279Z"}}