Commit 6dd63ddf authored by 邹绪超's avatar 邹绪超

chore: merge master分支

parents 2615ead3 de3bb6eb
variables:
TARGET_REPO: "F:/CIV_CI/CivWebPublish2021_CIVWeb5/CivWebPublish2021/"
TARGET_REPO: "G:/CIV_CI/CivWebPublish2021_CIVWeb5/CivWebPublish2021/"
GIT_STRATEGY: 'fetch'
GIT_CHECKOUT: 'false'
before_script:
- chcp 65001
- 'git config core.autocrlf false'
......@@ -12,12 +13,15 @@ stages:
install:
stage: install
tags:
- civ_base
script:
- git pull origin master
- npm run init
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
#cache:
# key: ${CI_COMMIT_REF_SLUG}
# paths:
# - node_modules/
only:
refs:
- master
......@@ -27,13 +31,17 @@ install:
package:
stage: package
tags:
- civ_base
script:
- echo "${CI_PROJECT_DIR}"
- git pull origin master
#- npm run init
- npm run build --releasepath=../CivWebPublish2021
cache:
key: ${CI_COMMIT_REF_SLUG}
paths:
- node_modules/
#cache:
# key: ${CI_COMMIT_REF_SLUG}
# paths:
# - node_modules/
only:
- master
when: manual
......@@ -43,6 +51,8 @@ push:
variables:
GIT_STRATEGY: none
stage: push
tags:
- civ_base
script:
- 'cd "${TARGET_REPO}"'
- 'git reset --hard head'
......@@ -51,7 +61,7 @@ push:
- 'git pull origin map'
- 'git rm -rf "${TARGET_REPO}/civbase"'
- 'git commit -m "chore: clear folder"'
- 'git push origin map'
#- 'git push origin map'
- 'robocopy "${CI_PROJECT_DIR}/../CivWebPublish2021/civbase" "${TARGET_REPO}/civbase" /S ;
IF ((${LASTEXITCODE} -le 8)) {cmd /c "exit /b 0"}'
- 'git add . ; git reset HEAD Web.config CityInterface/Web.config CityWebFW/Web.config ; git commit -m "auto package civbase."'
......
const { join } = require('path');
const proxy = require('./proxy');
const slash = require('slash2');
const proxy = require('./proxy');
const defaultSetting = require('./defaultSetting');
function resolve (dir) {
return join(__dirname, '../', dir)
}
const { REACT_APP_ENV } = process.env;
const cesiumBuild = "../node_modules/cesium/Build/Cesium"
const pkgName = require('../package.json').name;
const path = require('path');
const CESIUM_BASE_URL = `/${pkgName}`
module.exports = {
// mfsu: {},
webpack5: {},
base: '/civbase',
title: '熊猫智慧城市监控管理解决方案',
hash: true,
layout: {
siderWidth: '145px',
locale: true,
...defaultSetting
...defaultSetting,
},
fastRefresh: true,
useHash: true,
locale: {
default: 'zh-CN',
antd: true,
......@@ -33,8 +32,12 @@ module.exports = {
// },
ignoreMomentLocale: true,
nodeModulesTransform: {
type: 'all',
exclude: ['@wisdom-map/arcgismap', '@wisdom-map/arcgismap/lib/arcgisapi'],
type: 'none',
exclude: [
'@wisdom-map/arcgismap',
'@wisdom-map/arcgismap/lib/arcgisapi',
'swagger-ui-react',
],
},
proxy: proxy[REACT_APP_ENV || 'dev'],
// openAPI: {
......@@ -77,9 +80,9 @@ module.exports = {
modifyVars: {
// hack: `true; @import "~@/global.less";`,
'@ant-prefix': 'panda-console-base',
'@iconPrefixCls': 'panda-console-base-icon'
'@iconPrefixCls': 'panda-console-base-icon',
},
javascriptEnabled: true
javascriptEnabled: true,
},
copy : [{
from : path.join(pkgName , cesiumBuild, './Workers'),
......@@ -100,6 +103,7 @@ module.exports = {
},
alias: {
cesium : path.resolve(__dirname, cesiumBuild)
}
},
workerLoader: {},
// esbuild: {}
};
......@@ -4,23 +4,38 @@ export function genActiveRule(routerPrefix) {
export default {
dev: [
// {
// name: 'civ_monitor',
// entry: `//${window.location.hostname}:8082/civ_monitor`,
// name: 'civ_energy',
// entry: `//${window.location.hostname}:8081/civ_energy`,
// container: '#micro-container',
// activeRule: '/civbase/civ_monitor',
// activeRule: '/civbase/civ_energy',
// },
// {
// name: 'civ_water',
// entry: `//${window.location.hostname}:8081/civ_water`,
// container: '#micro-container',
// activeRule: '/civbase/civ_water',
// },
{
name: 'civ_water',
entry: `//${window.location.hostname}:8082/civ_water`,
name: 'civ_pandawork',
entry: `//${window.location.hostname}:8081/civ_pandawork`,
container: '#micro-container',
activeRule: '/civbase/civ_water',
activeRule: '/civbase/civ_pandawork',
},
{
name: 'civ_webgis',
entry: `//${window.location.hostname}:8080/civ_webgis`,
name: 'report',
entry: `//127.0.0.1:8345/report/workplatform`,
container: '#micro-container',
activeRule: '/civbase/civ_webgis',
activeRule: '/civbase/report',
props: {
origin: `//127.0.0.1:8345`
}
},
// {
// name: 'civ_webgis',
// entry: `//${window.location.hostname}:8080/civ_webgis`,
// container: '#micro-container',
// activeRule: '/civbase/civ_energy',
// },
{
name: 'civweb4',
entry: `//${window.location.hostname}:3020/civweb4`,
......@@ -29,7 +44,7 @@ export default {
},
{
name: 'middleground',
entry: `//${window.location.hostname}:8081/middleground`,
entry: `//${window.location.hostname}:8082/middleground`,
container: '#micro-container',
activeRule: '/civbase/middleground',
},
......
/* eslint-disable */
// const proxyURL = process.env.NODE_ENV !== 'production' ? 'http://192.168.10.150:8777' : window.location.origin;
const proxyURL = 'http://192.168.12.47:8081'
//'http://61.150.107.92:8200';
const proxyURL = 'https://work.panda-water.cn';
module.exports = {
assetsRoot: process.env.NODE_ENV !== 'production' ? proxyURL : './',
dev: {
......@@ -80,6 +80,26 @@ module.exports = {
'/PandaCore': '/PandaCore',
},
},
'/PandaInformatization': {
target: proxyURL,
changeOrigin: true,
headers: {
'Access-Control-Allow-Origin': '*',
},
pathRewrite: {
'/PandaInformatization': '/PandaInformatization',
},
},
'/PandaWorkFlow': {
target: proxyURL,
changeOrigin: true,
headers: {
'Access-Control-Allow-Origin': '*',
},
pathRewrite: {
'/PandaWorkFlow': '/PandaWorkFlow',
},
},
'/CityTemp': {
// target: 'http://192.168.10.150:8777',
target: proxyURL,
......
......@@ -23,7 +23,8 @@ module.exports = opts => {
'@babel/preset-env',
{
...mergeConfig(defaultEnvConfig,{}),
modules: false
modules: false,
...opts.env
},
],
// opts.react && ['@babel/preset-react'],
......@@ -56,17 +57,17 @@ module.exports = opts => {
'@babel/plugin-proposal-logical-assignment-operators',
'@babel/plugin-syntax-dynamic-import',
'@babel/plugin-transform-react-jsx',
// opts.transformRuntime && [
// '@babel/plugin-transform-runtime',
// {
// version: require('@babel/runtime/package.json').version,
// absoluteRuntime: dirname(
// require.resolve('@babel/runtime/package.json'),
// ),
// useESModules: true,
// ...toObject(opts.transformRuntime),
// },
// ],
opts.transformRuntime && [
'@babel/plugin-transform-runtime',
{
version: require('@babel/runtime/package.json').version,
absoluteRuntime: dirname(
require.resolve('@babel/runtime/package.json'),
),
useESModules: true,
...toObject(opts.transformRuntime),
},
],
[
'babel-plugin-transform-react-remove-prop-types',
{
......
......@@ -24,16 +24,19 @@ rm(
// eslint-disable-next-line no-shadow
webpack(webpackConfig, function (err, stats) {
spinner.stop()
if (err) throw err
// process.stdout.write(`${stats.toString({
// colors: true,
// color: true,
// progress: true,
// modules: false,
// children: false,
// chunks: true,
// chunkModules: true
// }) }\n\n`)
if (err) {
console.log(err)
throw err
}
process.stdout.write(`${stats.toString({
colors: true,
color: true,
progress: true,
modules: false,
children: false,
chunks: true,
chunkModules: true
}) }\n\n`)
printFileSizes(stats, path.relative(process.cwd(), webpackConfig.output.path));
if (stats.hasErrors()) {
......
......@@ -13,9 +13,6 @@ class DevCompileDonePlugin {
if (process.env.SYSTEM_BELL !== 'none') {
process.stdout.write('\x07');
}
this.opts.onCompileFail && this.opts.onCompileFail({
stats,
});
return;
}
......@@ -34,7 +31,6 @@ class DevCompileDonePlugin {
copied = chalk.red(`(copy to clipboard failed)`);
}
console.log();
console.log(
[
` App running at:`,
......@@ -44,18 +40,22 @@ class DevCompileDonePlugin {
.filter(Boolean)
.join('\n'),
);
process.send &&
process.send({
type: 'DONE',
});
isFirstCompile = false;
}
this.opts.onCompileDone && this.opts.onCompileDone({
isFirstCompile,
stats,
});
if(isFirstCompile) {
isFirstCompile = false;
// process.send({
// type: 'DONE'
// })
// this.opts.onCompileDone && this.opts.onCompileDone({
// isFirstCompile,
// stats,
// });
if (isFirstCompile) {
isFirstCompile = false;
// process.send({
// type: 'DONE'
// })
}
});
}
......
const { deepmerge, createDebug, winPath, resolve } = require('@umijs/utils');
// const { ESBuildPlugin, ESBuildMinifyPlugin } = require('esbuild-loader');
const terserOptions = require('./terserOptions');
const fs = require('fs');
const terserOptions = require('./terserOptions');
const path = require('path');
const webpack = require('webpack');
const { css, createCSSRule } = require('./css');
......@@ -57,6 +57,7 @@ const defaultConfig = {
type: 'all',
exclude: [],
},
hash: true,
targets: {
node: true,
chrome: 49,
......@@ -65,13 +66,13 @@ const defaultConfig = {
edge: 13,
ios: 10,
ie: 11,
}
},
};
module.exports = options => {
const chainConfig = new Config();
chainConfig.mode(options.mode);
defineConfig = Object.assign(defineConfig, defaultConfig);
const env = process.env;
const {env} = process;
const isDev = process.env.NODE_ENV === 'development';
const isProd = process.env.NODE_ENV === 'production';
const disableCompress = process.env.COMPRESS === 'none';
......@@ -86,32 +87,59 @@ module.exports = options => {
: devtool || 'cheap-module-source-map'
: devtool,
);
const mfsu = defineConfig.mfsu;
const {mfsu} = defineConfig;
const useHash = defineConfig.hash && isProd;
const absOutputPath = process.env.npm_config_releasepath
? path.resolve(
process.env.npm_config_releasepath,
pkg.name.toLocaleLowerCase(),
)
process.env.npm_config_releasepath,
pkg.name.toLocaleLowerCase(),
)
: path.resolve(process.cwd(), pkg.name.toLocaleLowerCase());
chainConfig.output
.path(absOutputPath)
.filename(useHash ? `[name].[contenthash:8].js` : `[name].js`)
.chunkFilename(
useHash ? `[name].[contenthash:8].async.js` : `[name].js`,
)
.chunkFilename(useHash ? `[name].[contenthash:8].async.js` : `[name].js`)
.publicPath(`/${pkg.name.toLocaleLowerCase()}/`)
.futureEmitAssets(true)
// .futureEmitAssets(true)
.crossOriginLoading('anonymous')
.pathinfo(isDev || disableCompress);
if (!isWebpack5) {
chainConfig.output.futureEmitAssets(true);
}
if (isWebpack5) {
chainConfig.cache({
type: 'filesystem',
buildDependencies: {
config: [__filename, path.join(process.cwd(), 'package.json')],
},
cacheDirectory: path.resolve(process.cwd(), 'node_modules/.cache'),
compression: 'gzip',
version: `${process.env.GIT_REV}`,
});
}
chainConfig.resolve.modules
.add('node_modules')
.add('src')
.end()
.extensions.merge(['.js', '.jsx', '.react.js'])
.extensions.merge([
'.js',
'.jsx',
'.react.js',
'.web.js',
'.wasm',
'.mjs',
'.js',
'.web.jsx',
'.jsx',
'.web.ts',
'.ts',
'.web.tsx',
'.tsx',
'.json',
])
.end()
.mainFields.merge(['browser', 'jsnext:main', 'main']);
......@@ -148,15 +176,13 @@ module.exports = options => {
type: 'csr',
});
let presetOpts = getBabelPresetOpts({
const presetOpts = getBabelPresetOpts({
config: defineConfig,
env: process.env.NODE_ENV,
targets: targets,
targets,
});
let preset = require('./babel-preset');
const preset = require('./babel-preset');
const getPreset = preset({
...presetOpts,
env: {
......@@ -172,11 +198,10 @@ module.exports = options => {
lockCoreJS3: {},
import: (presetOpts.import || []).concat([
{ libraryName: 'antd', libraryDirectory: 'es', style: true },
{ libraryName: 'antd-mobile', libraryDirectory: 'es', style: true },
]),
});
let babelOpts = {
const babelOpts = {
sourceType: 'unambiguous',
babelrc: false,
presets: [...getPreset.presets, ...(defineConfig.extraBabelPresets || [])],
......@@ -190,13 +215,10 @@ module.exports = options => {
chainConfig.module
.rule('js')
.test(/\.(js|mjs|jsx|ts|tsx)$/)
.include
.add([
cwd,
...(process.env.APP_ROOT ? [process.cwd()] : [])
]).end()
.exclude
.add(/node_modules/)
.include.add([cwd, ...(process.env.APP_ROOT ? [process.cwd()] : [])])
.end()
.exclude.add(/node_modules/)
.add(/\.mfsu/)
.end()
.use('babel-loader')
.loader(require.resolve('@umijs/deps/compiled/babel-loader'))
......@@ -243,16 +265,16 @@ module.exports = options => {
},
},
});
chainConfig.module
.rule('avif')
.test(/\.(avif)(\?.*)?$/)
.use('file-loader')
.loader(require.resolve('file-loader'))
.options({
name: `${staticDir}/[name].[hash:8].[ext]`,
esModule: false,
});
.loader(require.resolve('file-loader'))
.options({
name: `${staticDir}/[name].[hash:8].[ext]`,
esModule: false,
});
chainConfig.module
......@@ -292,14 +314,14 @@ module.exports = options => {
.use('raw-loader')
.loader(require.resolve('raw-loader'));
if(defineConfig.workerLoader) {
if (defineConfig.workerLoader) {
chainConfig.module
.rule('worker')
.test(/.*worker.(ts|js)/)
.use('worker-loader')
.loader(require.resolve('worker-loader'))
.options(defineConfig.workerLoader);
}
.loader(require.resolve('@umijs/deps/compiled/worker-loader'))
.options(defineConfig.workerLoader);
}
css({
type: 'csr',
......@@ -315,20 +337,21 @@ module.exports = options => {
if (defineConfig.externals) {
chainConfig.externals(defineConfig.externals);
}
chainConfig.node.merge({
setImmediate: false,
module: 'empty',
dns: 'mock',
http2: 'empty',
process: 'mock',
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty',
...options.node,
});
if (!isWebpack5) {
chainConfig.node.merge({
setImmediate: false,
module: 'empty',
dns: 'mock',
http2: 'empty',
process: 'mock',
dgram: 'empty',
fs: 'empty',
net: 'empty',
tls: 'empty',
child_process: 'empty',
...options.node,
});
}
if (defineConfig.ignoreMomentLocale) {
chainConfig.plugin('ignore-moment-locale').use(webpack.IgnorePlugin, [
......@@ -366,23 +389,23 @@ module.exports = options => {
};
const htmlPluginOptions = isDev
? {
...babelOpts,
}
...babelOpts,
}
: {
...baseHtmlOptions,
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
},
};
...baseHtmlOptions,
minify: {
removeComments: true,
collapseWhitespace: true,
removeRedundantAttributes: true,
useShortDoctype: true,
removeEmptyAttributes: true,
removeStyleLinkTypeAttributes: true,
keepClosingSlash: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
},
};
chainConfig
.plugin('htmlPlugins')
......@@ -400,7 +423,6 @@ module.exports = options => {
.plugin('replaceTheme')
.use(ThemeColorReplacer, [themePluginOption]);
const copyPatterns = [
fs.existsSync(path.join(process.cwd(), 'public')) && {
from: path.join(cwd, 'public'),
......@@ -411,23 +433,23 @@ module.exports = options => {
},
...(defineConfig.copy
? defineConfig.copy.map(item => {
if (typeof item === 'string') {
return {
from: path.join(cwd, item),
to: path.resolve(
process.env.npm_config_releasepath || process.cwd(),
pkg.name.toLocaleLowerCase(),
),
};
}
if (typeof item === 'string') {
return {
from: path.join(cwd, item.from),
from: path.join(cwd, item),
to: path.resolve(
process.env.npm_config_releasepath || process.cwd(),
pkg.name.toLocaleLowerCase() + '/' + item.to,
pkg.name.toLocaleLowerCase(),
),
};
})
}
return {
from: path.join(cwd, item.from),
to: path.resolve(
process.env.npm_config_releasepath || process.cwd(),
pkg.name.toLocaleLowerCase() + '/' + item.to,
),
};
})
: []),
].filter(Boolean);
......@@ -454,23 +476,23 @@ module.exports = options => {
// prettier-ignore
chainConfig.module
.rule(rule)
.test(/\.(js|mjs|jsx)$/)
.include
.add((a) => {
// 支持绝对路径匹配
if (path.isAbsolute(include)) {
return path.isAbsolute(include);
}
// 支持 node_modules 下的 npm 包
if (!a.includes('node_modules')) return false;
const pkgPath = getPkgPath(a);
return shouldTransform(pkgPath, include);
})
.end()
.use('babel-loader')
.loader(require.resolve('babel-loader'))
.options(babelOpts);
.test(/\.(js|mjs|jsx)$/)
.include
.add((a) => {
// 支持绝对路径匹配
if (path.isAbsolute(include)) {
return path.isAbsolute(include);
}
// 支持 node_modules 下的 npm 包
if (!a.includes('node_modules')) return false;
const pkgPath = getPkgPath(a);
return shouldTransform(pkgPath, include);
})
.end()
.use('babel-loader')
.loader(require.resolve('babel-loader'))
.options(babelOpts);
});
}
......@@ -500,9 +522,7 @@ module.exports = options => {
rule.include
.add(/node_modules/)
.end()
.exclude.add(path => {
return isMatch({ path, pkgs });
})
.exclude.add(path => isMatch({ path, pkgs }))
.end();
} else {
const pkgs = {
......@@ -510,12 +530,10 @@ module.exports = options => {
...excludeToPkgs({ exclude: nodeModulesTransform.exclude || [] }),
};
rule.include
.add(path => {
return isMatch({
.add(path => isMatch({
path,
pkgs,
});
})
}))
.end();
}
......@@ -546,24 +564,28 @@ module.exports = options => {
if (process.env.PROGRESS !== 'none') {
chainConfig.plugin('progress').use(require.resolve('webpackbar'), [
mfsu ? {
name: 'MFSU',
color: '#facc00'
}: defineConfig.ssr ? {
name: type === 'ssr' ? 'Server': 'Client'
}: {}
mfsu
? {
name: 'MFSU',
color: '#facc00',
}
: defineConfig.ssr
? {
name: type === 'ssr' ? 'Server' : 'Client',
}
: {},
]);
}
if (process.env.FRIENDLY_ERROR !== 'none') {
chainConfig
.plugin('friendly-error')
.use(require.resolve('friendly-errors-webpack-plugin'), [
{
clearConsole: false,
},
]);
}
// if (process.env.FRIENDLY_ERROR !== 'none') {
// chainConfig
// .plugin('friendly-error')
// .use(require.resolve('friendly-errors-webpack-plugin'), [
// {
// clearConsole: false,
// },
// ]);
// }
if (process.env.WEBPACK_PROFILE) {
chainConfig.profile(true);
......@@ -674,50 +696,45 @@ module.exports = options => {
process.env.SPEED_MEASURE === 'CONSOLE'
? { outputFormat: 'human', outputTarget: console.log }
: {
outputFormat: 'json',
outputTarget: join(process.cwd(), 'speed-measure.json'),
};
outputFormat: 'json',
outputTarget: join(process.cwd(), 'speed-measure.json'),
};
const smp = new SpeedMeasurePlugin(smpOption);
ret = smp.wrap(ret);
}
let entry = options.entry;
const {entry} = options;
if (defineConfig.runtimePublicPath) {
entry.push(require.resolve('./runtimePublicPathEntry'));
}
// const nodeLibs = require('node-libs-browser');
const nodeLibs = require('node-libs-browser');
// const ProvidePlugin = webpack.ProvidePlugin;
// if(isWebpack5) {
// // ret.plugins.push({
// // new ProvidePlugin({
// // process: nodeLibs['process']
// // })
// // });
// // ret.plugins.push({
// // new ProvidePlugin({
// // Buffer: ['buffer', 'Buffer'],
// // })
// // });
// ret.resolve.fallback = {
// ...ret.resolve.fallback,
// ...Object.keys(nodeLibs).reduce((memo, key) => {
// if(nodeLibs[key]) {
// memo[key] = nodeLibs[key]
// } else {
// memo[key] = false
// };
// return memo
// }, {}),
// http: false,
// https: false,
// }
// }
if (isWebpack5) {
ret.plugins.push(
new webpack.ProvidePlugin({
process: nodeLibs.process
}),
);
ret.resolve.fallback = {
...ret.resolve.fallback,
...Object.keys(nodeLibs).reduce((memo, key) => {
if (nodeLibs[key]) {
memo[key] = nodeLibs[key];
} else {
memo[key] = false;
}
return memo;
}, {}),
http: false,
https: false,
};
}
ret = {
...ret,
// mode: options.mode,
entry: entry,
entry,
plugins: options.plugins.concat([...ret.plugins]),
optimization: {
...options.optimization,
......
......@@ -13,8 +13,9 @@ module.exports = require('./webpack.base.babel')({
path.join(process.cwd(), 'src/app.js'), // Start with js/app.js
],
optimization: {
namedModules: true,
namedChunks: true,
// namedModules: true,
// namedChunks: true,
chunkIds: "named",
runtimeChunk: {
name: 'runtime',
},
......@@ -53,13 +54,13 @@ module.exports = require('./webpack.base.babel')({
},
},
plugins: [
new CircularDependencyPlugin({
exclude: /node_modules/,
include: /src/,
failOnError: false,
allowAsyncCycles: false,
cwd: process.cwd(),
}),
// new CircularDependencyPlugin({
// exclude: /node_modules/,
// include: /src/,
// failOnError: false,
// allowAsyncCycles: false,
// cwd: process.cwd(),
// }),
],
devtool: 'cheap-module-source-map',
node: {
......
// Important modules this config uses
const path = require('path');
const { HashedModuleIdsPlugin } = require('webpack');
const webpack = require('webpack');
const TerserPlugin = require('terser-webpack-plugin');
const CompressionPlugin = require('compression-webpack-plugin');
module.exports = require('./webpack.base.babel')({
mode: 'production',
mode: 'production',
// In production, we skip all hot-reloading stuff
entry: [
require.resolve('react-app-polyfill/ie11'),
path.join(process.cwd(), 'src/app.js'),
],
// In production, we skip all hot-reloading stuff
entry: [
require.resolve('react-app-polyfill/ie11'),
path.join(process.cwd(), 'src/app.js'),
],
// Utilize long-term caching by adding content hashes (not compilation hashes) to compiled assets
// output: {
// filename: '[name].[chunkhash].js',
// chunkFilename: '[name].[chunkhash].chunk.js',
// },
// Utilize long-term caching by adding content hashes (not compilation hashes) to compiled assets
// output: {
// filename: '[name].[chunkhash].js',
// chunkFilename: '[name].[chunkhash].chunk.js',
// },
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: {
warnings: false,
compress: {
comparisons: false,
},
parse: {},
mangle: true,
output: {
comments: false,
ascii_only: true,
},
},
parallel: true,
cache: true,
sourceMap: true,
}),
],
nodeEnv: 'production',
sideEffects: true,
concatenateModules: true,
runtimeChunk: 'single',
splitChunks: {
// minSize: 0,
maxSize: 100 * 1024, // 控制包的最大字节数
minSize: 10 * 1024, // 控制包的最小字节数
minChunks: 1,
cacheGroups: {
vendor: {
chunks: 'all',
maxInitialRequests: 10,
minSize: 0,
test: /[\\/]node_modules[\\/]/,
name(module) {
const packageName = module.context.match(
/[\\/]node_modules[\\/](.*?)([\\/]|$)/,
)[1];
return `npm.${packageName.replace('@', '')}`;
},
},
bizComponent: {
chunks: 'all',
minSize: 0,
maxInitialRequests: 10,
test: /[\\/]src[\\/]components[\\/]/,
name: 'biz-component',
},
},
optimization: {
minimize: true,
minimizer: [
new TerserPlugin({
terserOptions: {
warnings: false,
compress: {
comparisons: false,
},
drop_debugger: true,
drop_console: true,
pure_funcs: ['console.log'],
parse: {},
mangle: true,
output: {
comments: false,
ascii_only: true,
},
},
parallel: true,
cache: true,
sourceMap: true,
}),
],
nodeEnv: 'production',
chunkIds: 'deterministic',
moduleIds: 'deterministic',
usedExports: true,
sideEffects: true,
concatenateModules: true,
runtimeChunk: 'single',
splitChunks: {
maxSize: 100 * 1024, // 控制包的最大字节数
minSize: 10 * 1024, // 控制包的最小字节数
cacheGroups: {
vendor: {
chunks: 'all',
minSize: 0,
maxInitialRequests: 10,
test: /[\\/]node_modules[\\/]/,
name(module) {
const packageName = module.context.match(
/[\\/]node_modules[\\/](.*?)([\\/]|$)/,
)[1];
return `npm.${packageName.replace('@', '')}`;
},
},
bizComponent: {
chunks: 'all',
minSize: 0,
maxInitialRequests: 10,
test: /[\\/]src[\\/]components[\\/]/,
name: 'biz-component',
},
react: {
chunks: 'all',
minSize: 0,
maxInitialRequests: 10,
test: /[\\/]node_modules[\\/]react-dom[\\/]/,
name: 'react-dom',
}
},
},
},
plugins: [
new CompressionPlugin({
algorithm: 'gzip',
test: /\.js$|\.css$|\.html$/,
threshold: 10240,
minRatio: 0.8,
}),
plugins: [
new CompressionPlugin({
algorithm: 'gzip',
test: /\.js$|\.css$|\.html$/,
threshold: 10240,
minRatio: 0.8,
}),
new HashedModuleIdsPlugin({
hashFunction: 'sha256',
hashDigest: 'hex',
hashDigestLength: 20,
}),
],
// new webpack.ids.HashedModuleIdsPlugin({
// hashFunction: 'sha256',
// hashDigest: 'hex',
// hashDigestLength: 20,
// }),
],
performance: {
assetFilter: assetFilename =>
!/(\.map$)|(^(main\.|favicon\.))/.test(assetFilename),
},
performance: {
assetFilter: assetFilename =>
!/(\.map$)|(^(main\.|favicon\.))/.test(assetFilename),
},
});
// @ts-ignore
//import { Request, Response } from 'express';
// import { Request, Response } from 'express';
module.exports = {
'GET /api/currentUser': (req, res) => {
res
.status(200)
.send({
name: '韩磊',
avatar: '',
userid: 'de98FdAe-1fcA-985e-7EDe-A79E8FFA854E',
email: 'a.lrl@mffnge.ph',
signature: '般立层子米基断北得行办的七住。',
title: '做众亲子所化下基计称数照。',
group: '服务技术部',
tags: [
{ key: 1, label: 'IT 互联网' },
{ key: 2, label: '海纳百川' },
{ key: 3, label: '川妹子' },
{ key: 4, label: '海纳百川' },
{ key: 5, label: '算法工程师' },
{ key: 6, label: '很有想法的' },
{ key: 7, label: 'IT 互联网' },
{ key: 8, label: '专注设计' },
],
notifyCount: 93,
unreadCount: 70,
country: '韩国',
access: '众因变无律周体严器外在不根。',
geographic: {
province: { label: '新疆维吾尔自治区', key: 9 },
city: { label: '珠海市', key: 10 },
},
address: '河南省 南阳市 桐柏县',
phone: '11283974361',
});
res.status(200).send({
name: '韩磊',
avatar: '',
userid: 'de98FdAe-1fcA-985e-7EDe-A79E8FFA854E',
email: 'a.lrl@mffnge.ph',
signature: '般立层子米基断北得行办的七住。',
title: '做众亲子所化下基计称数照。',
group: '服务技术部',
tags: [
{ key: 1, label: 'IT 互联网' },
{ key: 2, label: '海纳百川' },
{ key: 3, label: '川妹子' },
{ key: 4, label: '海纳百川' },
{ key: 5, label: '算法工程师' },
{ key: 6, label: '很有想法的' },
{ key: 7, label: 'IT 互联网' },
{ key: 8, label: '专注设计' },
],
notifyCount: 93,
unreadCount: 70,
country: '韩国',
access: '众因变无律周体严器外在不根。',
geographic: {
province: { label: '新疆维吾尔自治区', key: 9 },
city: { label: '珠海市', key: 10 },
},
address: '河南省 南阳市 桐柏县',
phone: '11283974361',
});
},
'GET /api/notices': (req, res) => {
res
.status(200)
.send({
data: [
{
id: '26fd5659-6818-c9Ee-CdCF-Bc69FBf157F5',
extra: 'FreB',
key: 12,
read: true,
avatar: 'https://avatars1.githubusercontent.com/u/8186664?s=40&v=4',
title: '万究改非走命造之可从参打最。',
status: 'default',
datetime: '1980-10-19',
description: '有青设加包阶手别无往向导年关参才管复。',
type: 'notification',
},
{
id: '8b52fe55-2887-AC2B-Db2B-1fD3Ea9beeE2',
extra: '9uQO$Jh',
key: 13,
read: false,
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
title: '往条再习价机指北很些参转派。',
status: 'error',
datetime: '1988-12-24',
description: '很格连然实验九一眼到号适。',
type: 'notification',
},
{
id: 'Ff1312b7-34bd-d9FC-FC2a-a34D6eCEEbD2',
extra: '(Oe6',
key: 14,
read: false,
avatar:
'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
title: '广级般千此这于节相制认要特革。',
status: 'processing',
datetime: '1975-10-13',
description: '亲适地新水那图广候今属活法低正求。',
type: 'notification',
},
{
id: 'B353AcAB-d9FE-DCa5-309E-AfF43bC2DD92',
extra: 'Z@Z^ij',
key: 15,
read: false,
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '家不发经得器形如布力到议调采引。',
status: 'processing',
datetime: '1996-11-23',
description: '后何完十称利任里石须连因思。',
type: 'notification',
},
{
id: '4fe4A8b3-B6E5-dC3d-3864-f4da4fcF1d3f',
extra: 'b7OW',
key: 16,
read: false,
avatar:
'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
title: '观现太照号真安第活增日离准说写为这。',
status: 'processing',
datetime: '1975-04-07',
description: '厂克装省期那两八在别真通新府。',
type: 'notification',
},
{
id: '4Eefc7d3-eec7-eEC6-fDf5-EF9AF8C158B7',
extra: 't5%p',
key: 17,
read: true,
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
title: '图面济习果然选打儿往并进美。',
status: 'default',
datetime: '1981-07-21',
description: '之记议按气不人劳清且院日。',
type: 'notification',
},
{
id: 'e368F8dc-B236-04Ab-cB05-B1D6A541Da2C',
extra: 'GuGb5',
key: 18,
read: true,
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '海准到团权题时住称即按常火制。',
status: 'error',
datetime: '2014-09-18',
description: '入者属时思因至小文保美管好已电音可上。',
type: 'notification',
},
{
id: 'bD4EfbDc-5337-eec7-DaDB-FedABF06F884',
extra: '^#(b',
key: 19,
read: false,
avatar: '',
title: '次话织才决色素马型规毛员准越住林。',
status: 'warning',
datetime: '1998-09-05',
description: '化属新道商步响酸非历至该风四维属需。',
type: 'notification',
},
{
id: 'ab69bfDD-f535-ADbb-Cf3d-E5CA7DbEF2ad',
extra: '(DAIG',
key: 20,
read: true,
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '流较术合联风样少节打体中门八。',
status: 'default',
datetime: '1996-01-03',
description: '改原非还着取步效只华农名社。',
type: 'notification',
},
{
id: '418C7EeA-fDbC-843d-F76D-2BC23A9e8eF2',
extra: 'suvQ$O',
key: 21,
read: false,
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '为公受条总此类影所提无受万南非事具。',
status: 'default',
datetime: '1975-12-08',
description: '间特快装铁我品给求六片由青信区。',
type: 'notification',
},
{
id: 'ac9F7ae7-F3d2-bC14-cC5D-a38Fca151Eac',
extra: 'HIX9@)',
key: 22,
read: true,
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '展生起而两边断指内布数点铁压具。',
status: 'processing',
datetime: '2004-11-21',
description: '观织回走此性写任主在设新力小这想。',
type: 'notification',
},
{
id: 'c41f9c0A-cBDc-F07F-B85D-5DC3d0574d77',
extra: 'Bwlc!Bq',
key: 23,
read: true,
avatar: 'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
title: '或内局段花革器规关价快和口音安京。',
status: 'default',
datetime: '1994-08-07',
description: '有增史子太采只月则全革百习风此强。',
type: 'notification',
},
],
total: 63,
success: false,
});
res.status(200).send({
data: [
{
id: '26fd5659-6818-c9Ee-CdCF-Bc69FBf157F5',
extra: 'FreB',
key: 12,
read: true,
avatar: 'https://avatars1.githubusercontent.com/u/8186664?s=40&v=4',
title: '万究改非走命造之可从参打最。',
status: 'default',
datetime: '1980-10-19',
description: '有青设加包阶手别无往向导年关参才管复。',
type: 'notification',
},
{
id: '8b52fe55-2887-AC2B-Db2B-1fD3Ea9beeE2',
extra: '9uQO$Jh',
key: 13,
read: false,
avatar:
'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
title: '往条再习价机指北很些参转派。',
status: 'error',
datetime: '1988-12-24',
description: '很格连然实验九一眼到号适。',
type: 'notification',
},
{
id: 'Ff1312b7-34bd-d9FC-FC2a-a34D6eCEEbD2',
extra: '(Oe6',
key: 14,
read: false,
avatar:
'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
title: '广级般千此这于节相制认要特革。',
status: 'processing',
datetime: '1975-10-13',
description: '亲适地新水那图广候今属活法低正求。',
type: 'notification',
},
{
id: 'B353AcAB-d9FE-DCa5-309E-AfF43bC2DD92',
extra: 'Z@Z^ij',
key: 15,
read: false,
avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '家不发经得器形如布力到议调采引。',
status: 'processing',
datetime: '1996-11-23',
description: '后何完十称利任里石须连因思。',
type: 'notification',
},
{
id: '4fe4A8b3-B6E5-dC3d-3864-f4da4fcF1d3f',
extra: 'b7OW',
key: 16,
read: false,
avatar:
'https://gw.alipayobjects.com/zos/antfincdn/XAosXuNZyF/BiazfanxmamNRoxxVxka.png',
title: '观现太照号真安第活增日离准说写为这。',
status: 'processing',
datetime: '1975-04-07',
description: '厂克装省期那两八在别真通新府。',
type: 'notification',
},
{
id: '4Eefc7d3-eec7-eEC6-fDf5-EF9AF8C158B7',
extra: 't5%p',
key: 17,
read: true,
avatar:
'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
title: '图面济习果然选打儿往并进美。',
status: 'default',
datetime: '1981-07-21',
description: '之记议按气不人劳清且院日。',
type: 'notification',
},
{
id: 'e368F8dc-B236-04Ab-cB05-B1D6A541Da2C',
extra: 'GuGb5',
key: 18,
read: true,
avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '海准到团权题时住称即按常火制。',
status: 'error',
datetime: '2014-09-18',
description: '入者属时思因至小文保美管好已电音可上。',
type: 'notification',
},
{
id: 'bD4EfbDc-5337-eec7-DaDB-FedABF06F884',
extra: '^#(b',
key: 19,
read: false,
avatar: '',
title: '次话织才决色素马型规毛员准越住林。',
status: 'warning',
datetime: '1998-09-05',
description: '化属新道商步响酸非历至该风四维属需。',
type: 'notification',
},
{
id: 'ab69bfDD-f535-ADbb-Cf3d-E5CA7DbEF2ad',
extra: '(DAIG',
key: 20,
read: true,
avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '流较术合联风样少节打体中门八。',
status: 'default',
datetime: '1996-01-03',
description: '改原非还着取步效只华农名社。',
type: 'notification',
},
{
id: '418C7EeA-fDbC-843d-F76D-2BC23A9e8eF2',
extra: 'suvQ$O',
key: 21,
read: false,
avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '为公受条总此类影所提无受万南非事具。',
status: 'default',
datetime: '1975-12-08',
description: '间特快装铁我品给求六片由青信区。',
type: 'notification',
},
{
id: 'ac9F7ae7-F3d2-bC14-cC5D-a38Fca151Eac',
extra: 'HIX9@)',
key: 22,
read: true,
avatar:
'https://gw.alipayobjects.com/zos/rmsportal/udxAbMEhpwthVVcjLXik.png',
title: '展生起而两边断指内布数点铁压具。',
status: 'processing',
datetime: '2004-11-21',
description: '观织回走此性写任主在设新力小这想。',
type: 'notification',
},
{
id: 'c41f9c0A-cBDc-F07F-B85D-5DC3d0574d77',
extra: 'Bwlc!Bq',
key: 23,
read: true,
avatar:
'https://gw.alipayobjects.com/zos/rmsportal/ThXAXghbEsBCCSDihZxY.png',
title: '或内局段花革器规关价快和口音安京。',
status: 'default',
datetime: '1994-08-07',
description: '有增史子太采只月则全革百习风此强。',
type: 'notification',
},
],
total: 63,
success: false,
});
},
};
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -100,15 +100,15 @@
"@ant-design/pro-utils": "^1.10.4",
"@babel/polyfill": "7.4.3",
"@babel/runtime": "^7.10.5",
"@wisdom-cesium/cesium": "^1.0.52",
"@wisdom-cesium/cesium": "^1.0.64",
"@wisdom-components/empty": "^1.4.1",
"@wisdom-map/arcgismap": "^1.0.60-0",
"@wisdom-map/util": "^1.0.27-0",
"@wisdom-utils/components": "0.0.14",
"@wisdom-utils/runtime": "0.0.15",
"@wisdom-utils/utils": "0.0.52",
"@wisdom-utils/utils": "0.0.63",
"animate.css": "^4.1.1",
"antd": "^4.16.13",
"antd": "^4.17.4",
"compression": "1.7.4",
"connected-react-router": "6.4.0",
"fontfaceobserver": "2.1.0",
......@@ -118,7 +118,7 @@
"immutable": "^4.0.0-rc.12",
"js-base64": "^3.5.2",
"js-cookie": "^2.2.1",
"kit_global_config": "^1.0.32",
"kit_global_config": "^1.0.41",
"kit_logger": "^1.0.2",
"kit_utils": "^1.3.11",
"lodash": "4.17.11",
......@@ -130,11 +130,13 @@
"prop-types": "15.7.2",
"qiankun": "^2.4.6",
"qrcode.react": "^1.0.0",
"rc-cascader": "^2.3.2",
"react": "16.12.0",
"react-dom": "16.12.0",
"react-draggable": "^4.4.3",
"react-helmet": "6.0.0-beta",
"react-helmet-async": "^1.0.4",
"react-iframe": "^1.8.0",
"react-intl": "^3.12.1",
"react-redux": "7.0.2",
"react-router-config": "^5.1.1",
......@@ -173,9 +175,6 @@
"@umijs/fabric": "^2.2.0",
"@umijs/runtime": "3.3.7",
"@umijs/utils": "3.3.7",
"add-asset-html-webpack-plugin": "3.1.3",
"antd-icon-reduce-loader": "^1.0.6",
"antd-icon-reduce-plugin": "^1.1.1",
"babel-core": "7.0.0-bridge.0",
"babel-eslint": "10.0.1",
"babel-loader": "8.0.5",
......@@ -218,10 +217,9 @@
"express": "^4.17.1",
"file-loader": "3.0.1",
"friendly-errors-webpack-plugin": "^1.7.0",
"fs": "0.0.1-security",
"fs-extra": "^9.0.1",
"html-loader": "0.5.5",
"html-webpack-plugin": "4.4.0",
"html-webpack-plugin": "5.5.0",
"http-proxy-middleware": "^1.0.5",
"husky": "^2.3.0",
"imports-loader": "0.8.0",
......@@ -288,16 +286,15 @@
"traverse": "^0.6.6",
"umi-webpack-bundle-analyzer": "3.6.0",
"url-loader": "1.1.2",
"webpack": "4.44.1",
"webpack": "^5.65.0",
"webpack-chain": "6.5.1",
"webpack-cli": "3.3.0",
"webpack-dev-middleware": "3.6.2",
"webpack-cli": "4.2.0",
"webpack-dev-middleware": "5.3.0",
"webpack-hot-middleware": "2.24.3",
"webpack-manifest-plugin": "^3.0.0",
"webpack-theme-color-replacer": "^1.3.15",
"webpackbar": "5.0.0-3",
"whatwg-fetch": "3.0.0",
"yorkie": "^2.0.0",
"zlib": "^1.0.5"
"whatwg-fetch": "^3.0.0",
"yorkie": "^2.0.0"
}
}
-----BEGIN CERTIFICATE-----
MIIETDCCArSgAwIBAgIQKxt9OXlPUkkQASISMtxezDANBgkqhkiG9w0BAQsFADBh
MR4wHAYDVQQKExVta2NlcnQgZGV2ZWxvcG1lbnQgQ0ExGzAZBgNVBAsMEmpjbEB5
Y2pjbDg2OC5sb2NhbDEiMCAGA1UEAwwZbWtjZXJ0IGpjbEB5Y2pjbDg2OC5sb2Nh
bDAeFw0xOTA2MDEwMDAwMDBaFw0zMDA2MDEwOTMzNTdaMEkxJzAlBgNVBAoTHm1r
Y2VydCBkZXZlbG9wbWVudCBjZXJ0aWZpY2F0ZTEeMBwGA1UECwwVamNsQHVtaWpz
LmxvY2FsICh1bWkpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvKA/
Oz9az6kEZ5zSZyufpYXt5gOAnE/f8VY2hP3g7JDRCMk6w0XgkmGDJ45nY9fVVhCy
oqg8bIkLcLbvp69/I5O8ae0TbyS95mgBflhgsqjSkydhn7bZmAe5OdZv+JtGBjd2
2YDpzseK0z1VkXxgEAKYOsxszaCj6aktAhTQvER2DYGo0XaM62SOQNL4qLn97Zrg
+g8GSjS/Cg/vb+k42tCghOm0Ks26CDBl92Dwl5modEkfzewrjC2WNletiZupsX6p
rnRDBcGYHl+S/+D/iHCSu83IkxoorsIigGlSah/nVfetsKHBTXFXnSxL86T9MA1R
5ZcXoVv1cWZNiiMMawIDAQABo4GXMIGUMA4GA1UdDwEB/wQEAwIFoDATBgNVHSUE
DDAKBggrBgEFBQcDATAMBgNVHRMBAf8EAjAAMB8GA1UdIwQYMBaAFFRTg3QdwqVq
CLRjdLfglrJZqTrzMD4GA1UdEQQ3MDWCCWxvY2FsaG9zdIIQbG9jYWwuYWxpcGF5
Lm5ldIcEfwAAAYcQAAAAAAAAAAAAAAAAAAAAATANBgkqhkiG9w0BAQsFAAOCAYEA
lFgca57CNAoaq8MC6bTZo10FC/LDTnUh/p20w5uCp8iSKGtVM+HvulrWXwUGRkUl
jnukYeMwl4tONzwHeUV1oVT8DATFLAFIHE4ikGDM7V+Ximxv5yQQ9hD8fzeOWdYO
SKA5eDjd+ut+HiSfItqgM+8t1RxPxsYlGeOMp65cKt1NaIdRxQHwESGba6H0sez7
p5Eu95pXp/BUy7lnvqudXgfTAUpSzxpSG+49hzMKuN/CAZyFNp52qDDHpRtuxHns
q0pjGHBOC2aYc1eXNgn2g0wMDp3+BYh9yjoWNkMKqY7hpcB9PY5zw0u8R0wG8z+n
d915bZT3FKjx5sxmDmVaDNdARwi9ExqFvIs+hje1IUrszR7pnT7EUcUOhWNbKKkf
jRH3sy+TyA+TsYm1AAcnnY/Ne/Ce4OcMGcYwjb1L/gu/PWoup4f/GIziEw8cbPti
1+Exm+AOSjcSspPPfQmpHqupNaDJSjo6xYX3wn3oIb34WvH8INL3liiVedn+LTy4
-----END CERTIFICATE-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC8oD87P1rPqQRn
nNJnK5+lhe3mA4CcT9/xVjaE/eDskNEIyTrDReCSYYMnjmdj19VWELKiqDxsiQtw
tu+nr38jk7xp7RNvJL3maAF+WGCyqNKTJ2GfttmYB7k51m/4m0YGN3bZgOnOx4rT
PVWRfGAQApg6zGzNoKPpqS0CFNC8RHYNgajRdozrZI5A0viouf3tmuD6DwZKNL8K
D+9v6Tja0KCE6bQqzboIMGX3YPCXmah0SR/N7CuMLZY2V62Jm6mxfqmudEMFwZge
X5L/4P+IcJK7zciTGiiuwiKAaVJqH+dV962wocFNcVedLEvzpP0wDVHllxehW/Vx
Zk2KIwxrAgMBAAECggEAUdiitz2dVN/85kyYy2WVZ0g+2wCIDMtn25tSGtDiiSOp
YEuYsOSgNkQTmdVjrWIY0rh6GrQvS9UHXsgyIyu2WiSfq8LQHPjvYYudokoM41j3
zhxXcurvbdVkHOGcQl51uvrUGjqiuTPCXDiP6YnzUN8fWNwdFfhvR1M+EVog3J+F
RpSavm+SCOkyqCBWgQDb/p59kvlISJuDXKr3tV5HaKVKYfDBQLvuiZBweDwXjxop
z2Srs2GEmJPuKXU32deqNg7KgPvd6ADxb+GXhrGVBaj7dxi77E8nHL/aGutVE4ON
VqMwdWoRPkEPU33rF+CCxHqHJFcNS+62ozzeUYGlaQKBgQDR2mPnjthIgMkX+cw5
ROSadd5gZtQFXAzjAv685k+Xqm2IGk2Z2d5VydHO7cKwVLTB6cEJ+CbLZ1kIS6yV
GxBHaZ+LQxGkt4QD9IBSnL9Cxe7uvo+bpvV3eXbANG0tNl482RctS/u+g+OGSu05
6KIIlYag5hcMjr7ozuhv8LVytwKBgQDmGuIKFHXXqeRJNW+QvJfwQFKNQViqASlY
W4Y5guS6s85inJ3bRKwYtZsczne2uwYqQHlPw8X4TQMXApM+04mJtqwrYDpcX6Ad
VYPmo+J/k917QwlN8VP4AzlDdz8PU+zenmWgpKaG8GMtYia9qCIbWY/+hwwBk0sG
FNpguWnv7QKBgFSGT2ksSwdhAB5tGgoTKrTgNvLDWDDUc8hYI3y4k2R2W+nPFmSa
sYgCY0Si1aEqbSgR3BQE5LNW7DCAMoJYRUVOUNnJ6Ohclor1R15/DjZ5/RQioztB
k2tM/DzMoRDt7iU6F7DCAyMoglNMCKMjhWhJudFC/BOtx02EUXENFjifAoGAD966
yEcw+XbWL9Zno2vebsuA5g0juFXsLBPj5gOJEvdjvJlgqcbKt8mOsSXsS8YKXs+j
jkTKWp21INkknqioS781kKhKXiSaPmuvdTDIZlQkamPtOFr0l55hTK3kw4HeTFxQ
VgwFEDl0HaUvVtVJxOkgbUWTJmiqO/kkNpeTHuECgYEAtD4dRK3w65d9BWHqgeOV
IVSDeYjA6gNuC3tuGzk9bA70U0X/T8+EQMuKNvRZC61/JzAlzEH1oGIw8md8Ki86
aRT96Gce7Q0FA3SaQ+h+w+kgsJG/aly3IThaJh/mx6HN7Xry6BFO1vlYlgdlm/1G
iKX/ppCt7bJYqfrptWs42u4=
-----END PRIVATE KEY-----
......@@ -2,11 +2,11 @@ const { join } = require('path');
const { writeFileSync, mkdirSync, existsSync } = require('fs');
const rimraf = require('rimraf');
const serveStatic = require('serve-static');
const { resolve } = require('path');
const { portfinder, chalk, delay } = require('@umijs/utils');
const argv = require('./argv');
const setup = require('./middlewares/frontendMiddleware');
const pkg = require('../package.json');
const { resolve } = require('path');
const { portfinder, chalk, delay } = require('@umijs/utils');
const config = require('../config/config');
const mockMiddewares = require('./mock');
const emitter = require('./event');
......@@ -30,9 +30,9 @@ const { getSchema } = require('./openapi');
const isHTTPS = process.env.HTTPS || (argv && argv.https);
await delay(500);
const absNodeModulesPath = process.cwd() + '/node_modules';
const absNodeModulesPath = `${process.cwd()}/node_modules`;
const openAPIFilesPath = join(absNodeModulesPath, 'civ_open_api');
const loadEnv = () => {
const basePath = join(process.cwd(), '.env');
const localPath = `${basePath}.local`;
......@@ -41,7 +41,7 @@ const { getSchema } = require('./openapi');
};
loadEnv();
// const absNodeModulesPath = cwd + '/node_modules';
try {
if (existsSync(openAPIFilesPath)) {
......@@ -58,7 +58,7 @@ const { getSchema } = require('./openapi');
headers: {
'access-control-allow-origin': '*',
},
port: port,
port,
beforeMiddlewares: [
(config.mock || process.env.MOCK !== 'none') && mockMiddewares,
],
......@@ -67,6 +67,7 @@ const { getSchema } = require('./openapi');
...(config.devServer || {}),
});
setup(
server.app,
{
......@@ -76,14 +77,14 @@ const { getSchema } = require('./openapi');
config,
{
port,
homename
}
homename,
},
);
emitter.on('onDevCompileDone', async () => {
try {
const openAPIConfig = config.openAPI;
if(openAPIConfig && openAPIConfig.schemaPath) {
if (openAPIConfig && openAPIConfig.schemaPath) {
const openAPIJson = await getSchema(openAPIConfig.schemaPath);
writeFileSync(
join(openAPIFilesPath, 'civ-plugins_openapi.json'),
......
......@@ -6,46 +6,64 @@ const DevCompileDonePlugin = require('../../internals/webpack/plugins/DevCompile
const emitter = require('../event');
function getIgnoredWatchRegExp() {
// const absOutputPath = winPath(path.join(process.cwd(), outputPath));
return process.env.WATCH_IGNORED === 'none' ? undefined: new RegExp(process.env.WATCH_IGNORED || `(node_modules)`)
return process.env.WATCH_IGNORED === 'none'
? undefined
: new RegExp(process.env.WATCH_IGNORED || `(node_modules)`);
}
function createWebpackMiddleware(compiler, output, config) {
return webpackDevMiddleware(compiler, {
logLevel: 'warn',
// logLevel: 'warn',
publicPath: output.publicPath,
silent: true,
// silent: true,
stats: 'errors-only',
writeToDisk: config && config.devServer && config.devServer.writeToDisk,
watchOptions: {
ignored: getIgnoredWatchRegExp()
}
// watchOptions: {
// ignored: getIgnoredWatchRegExp()
// }
});
}
module.exports = function addDevMiddlewares(app, webpackConfig, config, { port= 8080, hostname = '127.0.0.1' }) {
webpackConfig.plugins.push(
new DevCompileDonePlugin({
port: (webpackConfig.devServer && webpackConfig.devServer.port) ? (webpackConfig.devServer.port || port): port,
hostname: (webpackConfig.devServer && webpackConfig.devServer.hostname ) ? (webpackConfig.devServer.hostname || '127.0.0.1'): hostname,
onCompileDone({ isFirstCompile, stats }) {
emitter.emit('onDevCompileDone', { isFirstCompile, stats });
},
onCompileFail(error) {
console.log(error);
},
}),
)
module.exports = function addDevMiddlewares(
app,
webpackConfig,
config,
{ port = 8080, hostname = '127.0.0.1' },
) {
if (!config.mfsu) {
webpackConfig.plugins.push(
new DevCompileDonePlugin({
port:
webpackConfig.devServer && webpackConfig.devServer.port
? webpackConfig.devServer.port || port
: port,
hostname:
webpackConfig.devServer && webpackConfig.devServer.hostname
? webpackConfig.devServer.hostname || '127.0.0.1'
: hostname,
onCompileDone({ isFirstCompile, stats }) {
if (isFirstCompile) {
emitter.emit('onDevCompileDone', { isFirstCompile, stats });
}
},
onCompileFail(error) {
console.log(error);
},
}),
);
}
const compiler = webpack(webpackConfig);
const middleware = createWebpackMiddleware(
compiler,
webpackConfig.output,
config,
);
// console.log(middleware.compiler.watching)
app.use(middleware);
app.use(webpackHotMiddleware(compiler));
const fs = middleware.fileSystem;
const fs = middleware.context.outputFileSystem;
app.get('*', (req, res) => {
fs.readFile(path.join(compiler.outputPath, 'index.html'), (err, file) => {
......
const {
lodash,
portfinder,
} = require('@umijs/utils');
const { lodash, portfinder, createDebug } = require('@umijs/utils');
const express = require('express');
const { createProxyMiddleware } = require('http-proxy-middleware');
const spdy = require('spdy');
const compress = require('compression');
const url = require('url');
const url = require('url');
const http = require('http');
// const https = require('https');
const sockjs = require('sockjs');
const debug = createDebug('umi:server:Server');
const getCredentials = (options) => {};
const defaultOpts = {
afterMiddlewares: [],
beforeMiddlewares: [],
compilerMiddleware: null,
compress: true,
https: !!process.env.HTTP2 ? true : !!process.env.HTTPS,
https: process.env.HTTP2 ? true : !!process.env.HTTPS,
onListening: argv => argv,
onConnection: () => {},
onConnectionClose: () => {},
......@@ -44,20 +43,18 @@ class Server {
if (this.opts.https) {
const credential = getCredentials(this.opts);
if (typeof this.opts.https === 'object' && this.opts.https.spdy) {
logger.warn(
console.warn(
'Providing custom spdy server options is deprecated and will be removed in the next major version.',
);
return credential;
} else {
return {
spdy: {
protocols: ['h2', 'http/1.1'],
},
...credential,
};
}
return {
spdy: {
protocols: ['h2', 'http/1.1'],
},
...credential,
};
}
return;
}
setupFeatures() {
......@@ -116,6 +113,7 @@ class Server {
deleteRoutes() {
let startIndex = null;
let endIndex = null;
// eslint-disable-next-line no-underscore-dangle
this.app._router.stack.forEach((item, index) => {
if (item.name === 'PROXY_START') startIndex = index;
if (item.name === 'PROXY_END') endIndex = index;
......@@ -126,6 +124,7 @@ class Server {
.join(', ')}`,
);
if (startIndex !== null && endIndex !== null) {
// eslint-disable-next-line no-underscore-dangle
this.app._router.stack.splice(startIndex, endIndex - startIndex + 1);
}
debug(
......@@ -135,7 +134,7 @@ class Server {
);
}
setupProxy(proxyOpts, isWatch = false) {
setupProxy(proxyOpts, isWatch = true) {
let proxy = proxyOpts || this.opts.proxy;
if (!Array.isArray(proxy)) {
if (proxy && 'target' in proxy) {
......@@ -153,7 +152,7 @@ class Server {
};
} else {
proxyOptions = {
...(proxy && proxy[context] || {}),
...((proxy && proxy[context]) || {}),
context: correctedContext,
};
}
......@@ -177,11 +176,11 @@ class Server {
: proxyConfig.target;
const realUrl = new URL(req.url || '', target).href || '';
proxyRes.headers['x-real-url'] = realUrl;
proxyConfig.onProxyRes && proxyConfig.onProxyRes(proxyRes, req, res);
proxyConfig.onProxyRes &&
proxyConfig.onProxyRes(proxyRes, req, res);
},
});
}
return;
};
let startIndex = null;
......@@ -328,4 +327,4 @@ class Server {
}
}
module.exports = Server
\ No newline at end of file
module.exports = Server;
import { Modal, notification } from 'antd';
import { instanceRequest, service } from '@wisdom-utils/utils';
import { event } from 'microser-data';
import { actionCreators } from '../containers/App/store';
import AppService from './service/base';
import notificationService from './service/notification';
const { warning } = Modal;
// eslint-disable-next-line no-return-await
instanceRequest.reportCodeError = true;
instanceRequest.transformRequestURL = function(url) {
// url = url.replace(/\/GateWay/, '')
const excludeURL = ['/PandaCore/GCK/Basis/GateWayConfig', '/CityInterface/rest/services.svc/GetConfig'];
if(excludeURL.includes(url)) {
return url;
}
if (window.globalConfig && window.globalConfig.hasGateWay && /^\/(cityinterface|CityInterface|Cityinterface|CityServer|PandaInformatization)/.test(url)) {
return /\/CityInterface\/rest\/services.svc\/GetConfig/.test(url) ? url ? /^\/GateWay/.test(url) ? url : '/GateWay' + url: '/GateWay' + url: '/GateWay' + url;
}
return url;
}
const codeMessage = {
200: '服务器成功返回请求的数据。',
201: '新建或修改数据成功。',
......@@ -40,10 +52,8 @@ instanceRequest.setErrorHandler(error => {
content: `${codeMessage[status]}`,
centered: true,
onOk(close) {
window.share &&
window.share.event &&
window.share.event.emit('triggerLoginout');
close();
event.emit('event:logout');
close();
},
});
}
......@@ -62,7 +72,6 @@ instanceRequest.setErrorHandler(error => {
}
return response;
});
const appService = service(AppService);
const noticeService = service(notificationService);
export { appService, noticeService };
import { jsonp, request } from '@wisdom-utils/utils';
import * as constants from '../../constants';
/**
* 兼容老接口
*/
const transformGateWay = (url) => {
if(!/^(cityinterface|CityInterface|CityServer)/) {
return url.replace(/GeteWay/, '')
}
}
export const API = {
AUTHORIZATION_TOKEN: '/Publish/Identity/AuthorizationToken',
GET_GATEWAY_CONFIG: '/PandaOMS/OMS/GateWayConfig',
AUTHORIZATION_TOKEN: '/Identity/AuthorizationToken',
GET_GATEWAY_CONFIG: '/PandaCore/GCK/Basis/GateWayConfig',
GET_CONFIG: '/CityInterface/rest/services.svc/GetConfig',
GENERATE_TOKEN: '/cityinterface/rest/services.svc/generatetoken',
GENERATE_GATEWAT_TOKEN: '/GCK/Basis/GenerateToken',
GENERATE_IOT_TOKEN: 'cityinterface/rest/services.svc/generateGCKToken',
GENERATE_QRCODE: 'cityinterface/rest/services.svc/generatetokenByqrcode',
GENERATE_TOKEN_CHANGE: '/cityinterface/rest/services.svc/generatetokenquick',
GET_WEB_SITE_CONFIG: '/CityInterface/rest/services.svc/GetWebSiteConfig',
GET_WEB_SITE_CONFIG_GEWAY: '/Publish/OMS/PlatformCenter/GetWebSiteConfig',
GET_WEB_SITE_CONFIG_GEWAY: '/GCK/Basis/GetWebSiteConfig',
GET_USER_INFO: '/CityInterface/rest/services.svc/getUserInfo',
GET_GATEWAY_USER_INFO: '/GCK/Basis/GetUserInfo',
GET_OA: '/CityInterface/rest/services/OA.svc/getLoginInfo',
GET_LOGS: '/CityInterface/rest/services/portal.svc/OMMonitor/SaveLoginInfo',
GET_CITY:
process.env.NODE_ENV !== 'production'
? '/cityjson?ie=utf-8'
: 'https://pv.sohu.com',
GET_ALL_GROUPS_INFO_FORUSER:
'CityInterface/rest/Services/Portal.svc/AuthorityManage/GetAllGroupsInfoForUser',
GET_ALL_GROUPS_INFO_FORUSER: '/CityInterface/rest/Services/Portal.svc/AuthorityManage/GetAllGroupsInfoForUser',
GET_WEATHER: '/CityInterface/rest/services/CountyProduct.svc/GetWeather',
SEND_MESSAGE_CODE:
'CityInterface/rest/services/portal.svc/SendMessVerificationCode',
......@@ -79,7 +87,9 @@ const services = {
},
getUserInfo: {
url: API.GET_USER_INFO,
url: () => {
return window.globalConfig && window.globalConfig.hasGateWay? API.GET_GATEWAY_USER_INFO: API.GET_USER_INFO
},
method: constants.REQUEST_METHOD_GET,
type: constants.REQUEST_HTTP,
},
......@@ -208,6 +218,31 @@ export const searchAutoCity = keywords => {
return jsonp(url, params, options);
};
export const getUserInfo = (params) => {
const url = window.globalConfig && window.globalConfig.hasGateWay? API.GET_GATEWAY_USER_INFO: API.GET_USER_INFO
return request({
url: url,
method: constants.REQUEST_METHOD_GET,
params: params,
// params: param.query,
});
}
export const getWebSiteConfig = (params) => {
const url = window.globalConfig &&
window.globalConfig &&
window.globalConfig.hasGateWay
? API.GET_WEB_SITE_CONFIG_GEWAY
: API.GET_WEB_SITE_CONFIG;
return request({
url: url,
method: constants.REQUEST_METHOD_GET,
params: params,
// params: param.query,
});
}
// 更新常用页
export const savePagePartInfo = param =>
request({
......@@ -217,4 +252,5 @@ export const savePagePartInfo = param =>
params: param.query,
});
export default services;
import * as constants from '../../constants';
import { request } from '@wisdom-utils/utils';
const API = {
GET_INFORMATION:
'/CityInterface/rest/services/CountyProduct.svc/SCADAOper/GetInformationInfo',
......@@ -34,4 +34,12 @@ const notificationService = {
},
};
export const postInformationStatus = param =>
request({
url: API.POST_INFORMATION_STATUS,
method: constants.REQUEST_METHOD_POST,
data: param.data,
params: param.query,
});
export default notificationService;
import 'whatwg-fetch';
import './public-path'
import '!file-loader?name=[name].[ext]!./images/favicon.ico';
import './global.less';
// import '@babel/polyfill';
import 'animate.css/animate.css';
import 'antd/dist/antd.less';
import 'file-loader?name=.htaccess!./.htaccess'; // eslint-disable-line import/extensions
import 'kit_utils/lib/format';
import 'sanitize.css/sanitize.css';
// import './locales/zh-CN';
// import './loader';
// import './vm';
import React from 'react';
import ReactDOM from 'react-dom';
import { Button, ConfigProvider, message, notification } from 'antd';
import { ConnectedRouter } from 'connected-react-router/immutable';
import Immutable from 'immutable';
import { params, Storeage } from 'kit_utils';
import { Provider } from 'react-redux';
import { event } from 'microser-data';
import _ from 'lodash';
import { ConfigProvider} from 'antd';
import { Storeage } from 'kit_utils';
import { history } from '@wisdom-utils/runtime';
import ErrorBoundary from './components/ErrorBoundary';
import { useIntl } from '@/locales/localeExports';
// import { ErrorBoundary } from '@ant-design/pro-utils';
import defaultSettings from '../config/defaultSetting';
// import themePluginConfig from '../config/themePluginConfig';
import { appService } from './api';
import { updateTheme } from './common/helpers/settingColor';
import Container from './components/Container';
import configureStore from './configureStore';
import App from './containers/App';
import { actionCreators } from './containers/App/store';
import { LocaleContainer } from './locales/locale';
import { initMicroApps } from './micro';
import Login from './pages/user/login/login';
import { getToken, isString } from './utils/utils';
import { initGlobalConfig } from './initConfig'
import './utils/event';
import Cookies from 'js-cookie';
const isHttps = document.location.protocol === 'https:';
const { pwa } = defaultSettings;
// eslint-disable-next-line no-restricted-globals
import store from './stores'
const namespace = `__PANDA_STORE__${location.hostname}`;
window.createStoreage = new Storeage(namespace);
// eslint-disable-next-line no-underscore-dangle
const initialState = Immutable.Map();
const store = configureStore(initialState, history);
const MOUNT_NODE = document.getElementById('root');
ConfigProvider.config({
prefixCls: 'panda-console-base'
});
const render = () => {
// eslint-disable-next-line react-hooks/rules-of-hooks
ReactDOM.render(
<Provider store={store}>
<ConnectedRouter history={history}>
<LocaleContainer>
<ConfigProvider prefixCls="panda-console-base">
<ErrorBoundary>
<Container>
<App />
</Container>
</ErrorBoundary>
</ConfigProvider>
</LocaleContainer>
</ConnectedRouter>
</Provider>,
MOUNT_NODE,
);
};
// updateTheme('#ff9600');
const loader = (appContent, loading) => render({ appContent, loading });
const initLocale = () => {
localStorage.setItem('umi_locale', 'zh-CN');
};
const PRODUCT_NAME = ['civ_water', 'civ_monitor'];
const initGlobalConfig = () => {
// eslint-disable-next-line no-debugger
// eslint-disable-next-line no-undef
let config = createStoreage.get('globalConfig') || {};
store.dispatch(actionCreators.updateComplexConfig({}));
if (!getToken() || config.token == null) {
// eslint-disable-next-line no-undef
createStoreage.remove(namespace);
config = {};
}
if (!params.getParams('client', window.location.search) && config) {
// eslint-disable-next-line no-undef
createStoreage.remove(namespace);
}
// eslint-disable-next-line no-undef
if (!createStoreage.get('globalConfig')) {
window.createStoreage = new Storeage(namespace);
}
if (!getToken()) {
localStorage.removeItem('loginSite');
}
if (config.token !== null && Object.keys(config).length > 0) {
store.dispatch(actionCreators.getConfig(config));
// render({ appContent: '', loading: true });
initMicroApps(loader, store);
if (config.isNewYear) {
updateTheme('#ff9600');
}
} else {
appService.getWateWayConfig().then(res => {
const hasGateWay =
res && res.data && isString(res.data) ? JSON.parse(res.data) : res.data;
if (res.code === 0) {
store.dispatch(
actionCreators.getConfig(
Object.assign({}, window.globalConfig, {
hasGateWay,
apiGatewayDomain: `${window.location.origin}/PandaCore/GateWay`,
}),
),
);
}
});
// eslint-disable-next-line react-hooks/rules-of-hooks
appService
.queryConfig({
client: params.getParams('client') || Cookies.get('city') || 'city',
})
.then(res => {
if (res) {
const data = res;
if (!data.client) {
data.client = 'city';
}
store.dispatch(
actionCreators.getConfig(
Object.assign({}, window.globalConfig, data),
),
);
if (data.loginTemplate === '新春 - 智联.html') {
updateTheme('#ff9600');
}
// eslint-disable-next-line no-new
if (getToken()) {
// eslint-disable-next-line no-new
new Login(
{
global: Object.assign({}, data, {
token: getToken(),
}),
// eslint-disable-next-line no-shadow
updateConfig: data =>
store.dispatch(actionCreators.getConfig(data)),
isInit: false,
logout: () => store.dispatch(actionCreators.logout()),
},
() => {
(async () => {
(await (getToken() &&
window.globalConfig &&
window.globalConfig.token)) && initMicroApps(loader, store);
})();
},
true,
);
}
// eslint-disable-next-line no-shadow
}
return res;
})
// eslint-disable-next-line no-shadow
.then(res => {
// eslint-disable-next-line no-use-before-define
initSensorType();
// eslint-disable-next-line no-use-before-define
initIsMock();
render({ appContent: '', loading: true });
})
.catch(error => {
store.dispatch(actionCreators.getConfigError(error));
});
}
};
const initSensorType = () => {
let filterProduct =
(window.globalConfig && window.globalConfig.products) || [];
filterProduct = filterProduct.filter(item =>
PRODUCT_NAME.includes(item.PackageName),
);
if (filterProduct.length > 0) {
appService.getSensorType().then(res => {
store.dispatch(
actionCreators.getConfig(
Object.assign({}, window.globalConfig, {
sensorType: res.data,
}),
),
);
});
}
};
const initIsMock = () => {
appService
.sysConfiguration({
moduleName: '是否mock数据',
})
.then(res => {
store.dispatch(
actionCreators.getConfig(
Object.assign({}, window.globalConfig, {
isMock: res.data === '是',
}),
),
);
});
};
// const PRODUCT_NAME = ['civ_water', 'civ_monitor'];
initGlobalConfig();
initLocale();
window.share &&
window.share.event &&
window.share.event.on('triggerMicro', () => {
initMicroApps(loader, store);
});
if (pwa) {
// const appPWA = window.i18n.getI18n('app');
window.addEventListener('sw.offline', () => {
message.warning(useIntl().formatMessage({ id: 'app.pwa.offline' }));
});
window.addEventListener('sw.updated', event => {
const e = event;
const reloadSW = async () => {
const worker = e.detail && e.detail.waiting;
if (!worker) {
return true;
}
await new Promise((resolve, reject) => {
const channel = new MessageChannel();
channel.port1.onmessage = msgEvent => {
if (msgEvent.data.error) {
reject(msgEvent.data.error);
} else {
resolve(msgEvent.data);
}
};
worker.postMessage({ type: 'skip-waiting' }, [channel.port2]);
});
window.location.reload(true);
return true;
};
const key = `open${Date.now()}`;
const btn = (
<Button
type="primary"
onClick={() => {
notification.close(key);
reloadSW();
}}
>
{useIntl().formatMessage({ id: 'app.pwa.serviceworker.updated.ok' })}
</Button>
);
notification.open({
message: useIntl().formatMessage({ id: 'pwa.serviceworker.updated' }),
description: useIntl().formatMessage({
id: 'pwa.serviceworker.updated.hint',
}),
btn,
key,
onClose: async () => null,
});
});
} else if ('serviceWorker' in navigator && isHttps) {
const { serviceWorker } = navigator;
if (serviceWorker.getRegistrations) {
serviceWorker.getRegistrations().then(sws => {
sws.forEach(sw => {
sw.unregister();
});
});
const unlisten = history.listen(location => {
if(location.pathname.indexOf('/civbase/user/login') > -1) {
initGlobalConfig();
}
serviceWorker.getRegistration().then(sw => {
if (sw) sw.unregister();
});
});
if (window.caches && window.caches.keys) {
caches.keys().then(keys => {
keys.forEach(key => {
caches.delete(key);
});
});
}
}
event.on('event:logout', () => {
store.dispatch(actionCreators.logout())
});
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
This diff was suppressed by a .gitattributes entry.
......@@ -12,11 +12,7 @@ export default class Container extends React.Component {
}
oms(event) {
const omsUrl = [
`${window.location.protocol}/`,
MaintenanceHost,
MaintenancePath,
].join('/');
const omsUrl = `${MaintenanceHost}/${MaintenancePath}`;
window.open(omsUrl, '_blank');
}
......
......@@ -11,7 +11,7 @@ import {
Upload,
} from 'antd';
import { withRouter } from 'react-router';
import Cookies from 'js-cookie';
import {
FormattedMessage,
useIntl,
......@@ -21,6 +21,7 @@ import { request } from '@wisdom-utils/utils';
import { appService } from '../../api';
// eslint-disable-next-line import/named
import { API } from '../../api/service/base';
import globalHeader from '../../locales/zh-CN/globalHeader';
import styles from './index.less';
// import i18n from '../../utils/share';
......@@ -70,7 +71,10 @@ class AvatarDropdown extends React.Component {
window.location.href = `${window.location.origin}/#login`;
return false;
}
window.location.reload();
// console.log(this.props)
// this.props.history.push('/login')
// window.location.reload();
//
};
getRoles = () => {
......@@ -108,7 +112,8 @@ class AvatarDropdown extends React.Component {
appService.changePassword(params)
.then(res => {
if (res.success) {
message.success(useIntl().formatMessage({id: 'component.account.password.update.success'}));
//message.success(useIntl().formatMessage({id: 'component.account.password.update.success'}));
message.success(globalHeader['component.account.password.update.success']);
setTimeout(() => {
this.setState({
visible: false,
......@@ -211,13 +216,15 @@ class AvatarDropdown extends React.Component {
})
}
formData.append("filedata", file);
request.post(action, formData, {
request(action, {
withCredentials,
headers: {
...headers,
Accept: '*/*',
'civ-site': ''
},
method: 'post',
data: formData,
ignoreSite: true,
onUploadProgress: ({ total, loaded }) => {
onProgress({ percent: Math.round((loaded / total) * 100).toFixed(2) }, file);
......@@ -270,7 +277,8 @@ class AvatarDropdown extends React.Component {
appService.updateAvatar(params).then(res => {
if(res.success) {
message.success(useIntl().formatMessage({id: 'component.avatar.update.success'}));
// message.success(useIntl().formatMessage({id: 'component.avatar.update.success'}));
message.success(globalHeader['component.avatar.update.success']);
self.setState({
currentUser: {
name: self.state.currentUser.name,
......@@ -300,7 +308,7 @@ class AvatarDropdown extends React.Component {
const menuHeaderDropdown = (
<div className={styles.userInfo}>
<div className={styles.header}>
<Upload className="avatar-uploader" {...uploadProps}>
<Upload className="avatar-uploader" {...uploadProps} maxCount={1} itemRender={()=>(<></>)}>
<div
className={styles.avatar}
style={{ backgroundImage: `url(${currentUser.avatar})` }}
......
......@@ -3,10 +3,10 @@ import { message } from 'antd';
import _, { words } from 'lodash';
import { connect } from 'react-redux';
import { withRouter } from 'react-router';
import { loadMicroApp } from 'qiankun';
import { useIntl } from '@/locales/localeExports';
import Icon from '@ant-design/icons';
import { setDefaultMountApp } from 'qiankun'
import { actionCreators } from '../../containers/App/store';
import HeaderSearch from '../HeaderSearch';
import Avatar from './AvatarDropdown';
......@@ -122,10 +122,13 @@ const GlobalHeaderRight = props => {
const goHome = event => {
event.stopPropagation();
const url = _.isString(props.global.get('homepage'))
let url = _.isString(props.global.get('homepage'))
? props.global.get('homepage')
: props.global.get('homepage.url');
window.share.event.emit('goHome', `/civbase/civweb4/${url}`);
if(!props.global.get('home')) {
url = `civweb4/${url}`
}
window.share.event.emit('goHome', `/${url}`);
url ? (
window.share.event.emit('listenerMointer', {
label: '首页',
......@@ -277,4 +280,4 @@ const mapDispatchToProps = dispatch => ({
export default connect(
mapStateToProps,
mapDispatchToProps,
)(withRouter(GlobalHeaderRight));
)(GlobalHeaderRight);
......@@ -236,4 +236,4 @@ const mapDispatchToProps = dispatch => ({
export default connect(
mapStateToProps,
mapDispatchToProps,
)(withRouter(GlobalHeaderRight));
)(GlobalHeaderRight);
......@@ -105,7 +105,7 @@ const SearchPanel = props => {
}
const goFeature = (path, rect, value) => {
// eslint-disable-next-line no-param-reassign
debugger
value = value || props.value;
const findKeywordIndex =
recentKeywords.length > 0
......
import React from 'react';
import _ from 'lodash';
import classNames from 'classnames';
import { findPathByWidget, isJSON } from '../../../../utils/utils';
import commonStyles from '../common.less';
......@@ -70,7 +70,7 @@ const Alarm = ({ message, confirmRead, config }) => {
<p style={{color: '#888'}} >
{
alarmContent && alarmContent.content.split(",")[1]
alarmContent && _.isString(alarmContent.content) && alarmContent.content.split(",")[1]
}
</p>
<p className={commonStyles.messageTime}>{message.time}</p>
......
......@@ -4,6 +4,7 @@ import _ from 'lodash';
import MqttClient from 'mqtt-client';
import { noticeService } from '../../api';
import { postInformationStatus } from '../../api/service/notification';
import { isJSON } from '../../utils/utils';
import {
DEFAULT_KEEPLIVE,
......@@ -133,8 +134,9 @@ class Notifier {
if (isAll) hisIDs = this.messageCache.messages.map(item => item.id);
const self = this;
// eslint-disable-next-line no-undef
noticeService.postInformationStatus({
userID: this.userInfo.OID,
postInformationStatus({
userID: this.userInfo.OID || window.globalConfig.userInfo.OID,
hisID: hisIDs.join(','),
isAll: isAll ? 1 : '',
})
......
......@@ -7,6 +7,7 @@ import styles from './min.less';
const Categories = props => {
const [currentIndex, setCurrentIndex] = useState(props.currentMenuIndex);
const selectCategories = (event, index) => {
debugger
event.preventDefault();
event.stopPropagation();
event.nativeEvent.stopImmediatePropagation();
......@@ -18,7 +19,7 @@ const Categories = props => {
<div className={classNames(styles['menu-categories'], {
[styles['min-cateorites']]: props.mode
})}>
{(props.data || []).map((item, index) => {
{(props.data || []).filter(item => !item.hideInMenu).map((item, index) => {
const categorieCls = classNames(
styles['categorie-name'],
styles.btn,
......@@ -35,7 +36,8 @@ const Categories = props => {
<span>{item.extData.label}</span>
</div>
);
})}
})
}
</div>
);
};
......
......@@ -3,10 +3,10 @@ import 'swagger-ui-react/swagger-ui.css';
import React from 'react';
import { Card } from 'antd';
import SwaggerUI from 'swagger-ui-react';
// import SwaggerUI from 'swagger-ui-react';
export default () => (
<Card>
<SwaggerUI url={`${window.location.origin}/civ-plugins_openapi.json`} />
{/* <SwaggerUI url={`${window.location.origin}/civ-plugins_openapi.json`} /> */}
</Card>
);
......@@ -3,14 +3,9 @@ import React, { Suspense } from 'react';
import { Helmet } from 'react-helmet';
import { connect } from 'react-redux';
// import { renderRoutes } from 'react-router-config';
import { renderRoutes } from '../../utils/routes'
import { Router, Switch, Route, Redirect } from '@wisdom-utils/runtime';
import { renderRoutes } from '../../utils/routes';
// import BootPage from '../../pages/bootpage';
import {
Router,
Switch,
Route,
Redirect
} from '@wisdom-utils/runtime';
import { dyRoutes } from '../../routes/config';
// import routeContext from '@ant-design/pro-layout/lib/RouteContext';
......@@ -20,10 +15,14 @@ const pkg = require('../../../package.json');
const config = require('../../../config/config');
const defaultSetting = config.layout;
function App(props) {
const { routes } = dyRoutes(props.menu);
console.log("routes", routes)
//
const metaSecurity = /https/.test(window.location.protocol) ? (
<meta
httpEquiv="Content-Security-Policy"
content="upgrade-insecure-requests"
/>
) : null;
return (
<>
<Helmet
......@@ -37,6 +36,7 @@ function App(props) {
href={`https://panda-water.cn/web4/${props.global &&
props.global.shortcutIcon}`}
/>
{metaSecurity}
<meta
name="description"
content={`${props.global && props.global.title}`}
......@@ -44,7 +44,7 @@ function App(props) {
</Helmet>
<Router basename={config.base || pkg.name.toLocaleLowerCase() || ''}>
<Switch>
{renderRoutes(dyRoutes(props.menu || []).routes)}
{renderRoutes(dyRoutes(props.menu || [], props.global.layout).routes)}
</Switch>
</Router>
</>
......
import Cookies from 'js-cookie';
import { event } from 'microser-data';
import {
CLEAR_RCENT_KEYWORD,
COMPLEX_CONFIG,
......@@ -185,8 +185,16 @@ export function logout(data) {
Cookies.set(window.globalConfig.client, '', {
path: '/',
});
window.globalConfig.token = null;
window.globalConfig.access_token = null;
window.globalConfig.apiGatewayDomain = window.location.origin;
window.globalConfig.baseURI = window.location.origin;
window.globalConfig.hasGateWay = false;
window.globalConfig.userInfo = null;
// window.globalConfig.hasGateWay = ;
}
Cookies.set('token', '', {
path: '/',
});
......@@ -204,11 +212,14 @@ export function logout(data) {
localStorage.removeItem('access_token');
// eslint-disable-next-line no-undef,no-restricted-globals
createStoreage.remove(`__PANDA_STORE__${location.hostname}`);
createStoreage.remove(`__PANDA_STORE__MICRO_${location.hostname}`);
localStorage.removeItem('JmReport-Access-Token');
return {
type: LOGINOUT,
data: {
currentMenuIndex: 0,
complexConfig: {},
globalConfig: window.globalConfig
},
};
}
......@@ -2,11 +2,12 @@ import { fromJS } from 'immutable';
import Cookies from 'js-cookie';
import AppConfig from 'kit_global_config';
import { Storeage as Store } from 'kit_utils';
import { store } from 'microser-data';
import { store, event } from 'microser-data';
import { Storage } from '@wisdom-utils/utils';
import pkg from '../../../../package.json';
import defaultSetting from '../../../../config/defaultSetting';
import generRoutes, { generFlatRoutes } from '../../../utils/routes';
import { transformWidgets } from '../../../utils/routes';
import {
CLEAR_RCENT_KEYWORD,
COMPLEX_CONFIG,
......@@ -78,6 +79,7 @@ export const initialState = fromJS({
const appReducer = (state = initialState, action) => {
switch (action.type) {
case GET_CONFIG:
// eslint-disable-next-line no-debugger
// eslint-disable-next-line no-underscore-dangle
window.__INITIAL_STATE__ = Object.assign(
......@@ -95,30 +97,59 @@ const appReducer = (state = initialState, action) => {
window.__INITIAL_STATE__.mdi = 'SDI';
window.__INITIAL_STATE__.menu = 'banner-left';
window.globalConfig = AppConfig(window.__INITIAL_STATE__);
// eslint-disable-next-line no-undef
createStoreage.set('globalConfig', window.globalConfig);
// eslint-disable-next-line no-undef,no-case-declarations
const config = window.globalConfig;
// config.access_token = "";
// eslint-disable-next-line no-case-declarations
const generMenu = generRoutes(config.widgets || []);
// eslint-disable-next-line no-case-declarations
const { homepage } = window.globalConfig;
if (homepage !== '') {
// const index = generMenu.findIndex(item => item.level === -1);
// if (index > -1) {
// generMenu = generMenu.reverse();
// }
const modulePkg = {};
window.globalConfig && window.globalConfig.products && Array.isArray(window.globalConfig.products) && window.globalConfig.products.map(item => {
modulePkg[item.PackageName] = item;
});
config.widgets = transformWidgets(config.widgets);
const generMenu = generRoutes(config.widgets || [], null, 0, modulePkg);
let flatMenu = [];
if(generMenu) {
flatMenu = generFlatRoutes(generMenu || [], null, null, modulePkg);
}
const home = flatMenu.find(item => {
let path = decodeURI(item.path).split("|");
let currentPath = path[0];
if(/^\//.test(currentPath)) {
currentPath = currentPath.replace(/^\//, '');
}
return currentPath === decodeURI(homepage)
});
let currentMenuIndex = 0;
if(home) {
const parent = home.level >= 2 ? home.parent.parent: home.level >= 3 ? home.parent.parent.parent: home.parent;
if(parent) {
currentMenuIndex = generMenu.findIndex(item => item.name === parent.label);
currentProduct.set('currentMenuIndex', currentMenuIndex);
store.set('updateMenuIndex', currentMenuIndex)
}
}
// eslint-disable-next-line no-case-declarations
// eslint-disable-next-line no-case-declarations
const flatMenu = generFlatRoutes(generMenu || []);
window.globalConfig.home = home;
Cookies.set('city', Cookies.get('city') || window.globalConfig.client);
window.globalConfig = config;
return state.merge({
globalConfig: config,
menu: generMenu,
menu: generMenu || [],
flatMenu,
currentMenu: generMenu[state.currentMenuIndex],
currentMenu: generMenu && generMenu[state.currentMenuIndex],
});
case GET_ERROR_CONFIG:
return state.merge({
......@@ -204,9 +235,11 @@ const appReducer = (state = initialState, action) => {
microMounted: action.data,
});
case LOGINOUT:
event.emit('event: application-logout', action.data);
return state.merge({
complexConfig: action.data.complexConfig,
currentMenuIndex: action.data.currentMenuIndex,
globalConfig: action.data.globalConfig
});
case MAP_VIEW:
store.set('view', action.data);
......
<!DOCTYPE html>
<html lang="en">
<head>
<!-- <meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests"> -->
<!-- The first thing in any HTML file should be the charset -->
<meta charset="utf-8" />
<!-- Make the page mobile compatible -->
......@@ -19,7 +19,7 @@
event: new EventEmitter(),
};
window.share.event.setMaxListeners(1000);
window.share.event.setMaxListeners(50000);
window.umi_plugin_ant_themeVar = [
{ key: 'dark', fileName: 'dark.css', theme: 'dark' },
......
import { appService } from './api';
import { initMicroApps } from './micro';
import { params, Storeage } from 'kit_utils';
import Cookies from 'js-cookie';
import { actionCreators } from './containers/App/store';
import { getToken, isString } from './utils/utils';
import loader, { render } from './render';
import store from './stores';
import Login from './pages/user/login/login';
const namespace = `__PANDA_STORE__${location.hostname}`;
window.createStoreage = new Storeage(namespace);
export const initGlobalConfig = () => {
// eslint-disable-next-line no-debugger
// eslint-disable-next-line no-undef
createStoreage.remove(`__PANDA_STORE__${location.hostname}`);
window.globalConfig = {};
window.__INITIAL_STATE__ = {};
let config = window.globalConfig || {};
//createStoreage.get('globalConfig') || {};
store.dispatch(actionCreators.updateComplexConfig({}));
if (!getToken() || config.token == null) {
// eslint-disable-next-line no-undef
createStoreage.remove(namespace);
config = {};
}
if (!params.getParams('client', window.location.search) && config) {
// eslint-disable-next-line no-undef
createStoreage.remove(namespace);
}
// eslint-disable-next-line no-undef
if (!createStoreage.get('globalConfig')) {
window.createStoreage = new Storeage(namespace);
}
if (!getToken()) {
localStorage.removeItem('loginSite');
}
if (window.globalConfig.token !== null && Object.keys(window.globalConfig).length > 0) {
store.dispatch(actionCreators.getConfig(window.globalConfig));
// render({ appContent: '', loading: true });
initMicroApps(loader, store);
if (config.isNewYear) {
updateTheme('#ff9600');
}
} else {
appService.getWateWayConfig().then(res => {
const hasGateWay =
res && res.data && isString(res.data) ? JSON.parse(res.data) : res.data;
if (res.code === 0 && res.data === 'true') {
store.dispatch(
actionCreators.getConfig(
Object.assign({}, window.globalConfig, {
hasGateWay,
apiGatewayDomain: `${window.location.origin}/PandaCore`,
}),
),
);
}
});
// eslint-disable-next-line react-hooks/rules-of-hooks
const client = params.getParams('client') || Cookies.get('city')
appService
.queryConfig({
client: client || 'city',
})
.then(res => {
if (res) {
store.dispatch(actionCreators.getConfig(Object.assign({})));
const data = res;
if (!data.client) {
data.client = params.getParams('client') || Cookies.get('city');
}
// Cookies.set('city', data.client);
store.dispatch(
actionCreators.getConfig(
Object.assign({}, data, {
token: '',
access_token: '',
userInfo: null
}),
),
);
//Cookies.set('city', params.getParams('client'))
if (data.loginTemplate === '新春 - 智联.html') {
updateTheme('#ff9600');
}
// eslint-disable-next-line no-new
if (getToken()) {
// eslint-disable-next-line no-new
new Login(
{
global: Object.assign({}, data, {
token: getToken(),
}),
// eslint-disable-next-line no-shadow
updateConfig: data =>store.dispatch(actionCreators.getConfig(data)),
isInit: false,
logout: () => store.dispatch(actionCreators.logout()),
},
() => {
(async () => {
(await (getToken() &&
window.globalConfig &&
window.globalConfig.token)) && initMicroApps(loader, store);
})();
},
true,
);
}
// eslint-disable-next-line no-shadow
}
return res;
})
// eslint-disable-next-line no-shadow
.then(res => {
// eslint-disable-next-line no-use-before-define
// initSensorType();
// eslint-disable-next-line no-use-before-define
// initIsMock();
render({ appContent: '', loading: true });
})
.catch(error => {
console.log(error);
store.dispatch(actionCreators.getConfigError(error));
});
}
};
\ No newline at end of file
......@@ -463,7 +463,10 @@ const BasicLayout = props => {
useEffect(() => {
siteAction.setGlobalConfig(props.global);
if (!Cookies.get('token')) {
history.replace(`/user/login?client=${props.global.get('client')}`);
let client = props.global.get('client');
client = _.isNull(client) || _.isUndefined(client) || client === 'undefined' ? client: 'city';
history.replace(`/user/login?client=${client}`);
props.logout();
return;
}
......@@ -836,7 +839,7 @@ const BasicLayout = props => {
if (lastIndex >= 0) {
history.push(newTabList[lastIndex].path);
} else {
history.replace(`/civweb4/${props.global.homepage}`);
history.replace(`/${props.global.homepage}`);
}
props.updateSelectedKeys(newActiveKey);
props.updatePathname(newActiveKey);
......
......@@ -129,12 +129,18 @@
}
}
}
svg {
path {
fill: #fff!important;
// svg {
// path:not(.st0) {
// fill: #fff!important;
}
}
// }
// path.st0 {
// fill:url(#SVGID_1_)!important;
// }
// path.st1 {
// fill:url(#SVGID_2_)!important;
// }
// }
}
}
&.active {
......@@ -146,7 +152,7 @@
.icon {
svg {
path, rect, circle {
fill: #fff!important;
// fill: #fff!important;
}
}
......@@ -226,8 +232,10 @@
height: 100%;
padding-left: 7px;
img {
width: 48px;
height: 25px;
//width: 48px;
width: 42px;
height: auto;
//height: 25px;
}
}
.title {
......@@ -514,8 +522,8 @@
}
}
}
}
}
}
......@@ -34,7 +34,7 @@ import { Router, Switch } from '@wisdom-utils/runtime';
import RightContent from '@/components/GlobalHeader/ExtendRightContent';
import Panel from '@/components/SliderPanel/MinPanel';
import { actionCreators } from '@/containers/App/store';
import CreateBaseMap from '@/pages/map';
// import CreateBaseMap from '@/pages/map';
import CesiumMap from '@/pages/cesiumMap'
// import Authorized from '@/utils/Authorized';
import {
......@@ -63,17 +63,17 @@ const homeSvg = () => (
<svg t="1631169883330" className="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2203" width="20" height="20"><path d="M423.9 487H221.7c-34.9 0-63.4-28.4-63.4-63.4V221.5c0-34.9 28.4-63.4 63.4-63.4h202.2c34.9 0 63.4 28.4 63.4 63.4v202.2c-0.1 34.9-28.5 63.3-63.4 63.3z m0-63.3v31.7-31.7zM221.7 221.5v202.2h202.1l0.1-202.2H221.7zM803.1 487H600.9c-34.9 0-63.4-28.4-63.4-63.4V221.5c0-34.9 28.4-63.4 63.4-63.4h202.2c34.9 0 63.4 28.4 63.4 63.4v202.2c0 34.9-28.5 63.3-63.4 63.3z m0-63.3v31.7-31.7zM600.9 221.5v202.2H803l0.1-202.2H600.9zM423.9 865.8H221.7c-34.9 0-63.4-28.4-63.4-63.4V600.3c0-34.9 28.4-63.4 63.4-63.4h202.2c34.9 0 63.4 28.4 63.4 63.4v202.2c-0.1 34.9-28.5 63.3-63.4 63.3z m0-63.3v31.7-31.7zM221.7 600.3v202.2h202.1l0.1-202.2H221.7zM736.9 865.8h-69.7c-71.4 0-129.6-58.1-129.6-129.6v-69.7c0-71.4 58.1-129.6 129.6-129.6h69.7c71.4 0 129.6 58.1 129.6 129.6v69.7c0 71.5-58.2 129.6-129.6 129.6z m-69.8-265.5c-36.5 0-66.2 29.7-66.2 66.2v69.7c0 36.5 29.7 66.2 66.2 66.2h69.7c36.5 0 66.2-29.7 66.2-66.2v-69.7c0-36.5-29.7-66.2-66.2-66.2h-69.7z" fill="#B2B2B2" p-id="2204"></path></svg>
);
const arrowSvg = ({fillColor = '#fff'}) => (
const arrowSvg = ({ fillColor = '#fff' }) => (
<svg t="1543324489942"
className="icon" viewBox="0 0 1024 1024"
version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/1999/xlink"
width="16" height="16">
<path d="M511.700683 639.423111 191.917496 319.596945 319.830771 319.596945 511.700683 511.715521 703.570595 319.596945 831.48387 319.596945Z" p-id="8626" fill={fillColor}></path>
className="icon" viewBox="0 0 1024 1024"
version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/1999/xlink"
width="16" height="16">
<path d="M511.700683 639.423111 191.917496 319.596945 319.830771 319.596945 511.700683 511.715521 703.570595 319.596945 831.48387 319.596945Z" p-id="8626" fill={fillColor}></path>
</svg>
);
const HomeIcon = props => <Icon component={homeSvg} {...props} style={{marginRight: '0px'}}/>;
const ArrowIcon = props => <Icon component={arrowSvg} {...props} />;
const HomeIcon = props => <Icon component={homeSvg} {...props} style={{ marginRight: '0px' }} />;
const ArrowIcon = props => <Icon component={arrowSvg} {...props} />;
// const { TabPane } = Tabs;
// const baseURI = isProd
......@@ -185,7 +185,7 @@ const Stations = props => {
);
};
const renderSite = ({data, config, loading, setLoading, action}) => {
const renderSite = ({ data, config, loading, setLoading, action }) => {
const [visible, setVisible] = useState(false);
let loaded = !!((data && !data.stations) || (Array.isArray(data.weathers) && data.weathers.length === 0));
if (config && config.userInfo && config.userInfo.site === '') {
......@@ -194,56 +194,56 @@ const renderSite = ({data, config, loading, setLoading, action}) => {
return (
<>
<Spin
indicator={antIcon}
spinning={loaded}
size="small"
style={{ marginLeft: '10px' }}
tip=""
wrapperClassName={styles.spinLoadding}>
<>
<Popover
placement="bottomLeft"
trigger="click"
content={
<Stations
data={data}
loading={loading}
setLoading={setLoading}
action={action}
indicator={antIcon}
spinning={loaded}
size="small"
style={{ marginLeft: '10px' }}
tip=""
wrapperClassName={styles.spinLoadding}>
<>
<Popover
placement="bottomLeft"
trigger="click"
content={
<Stations
data={data}
loading={loading}
setLoading={setLoading}
action={action}
/>
}
arrowPointAtCenter
overlayClassName={classNames(styles.stationsWrapper, styles.stationsTop)}
onVisibleChange={visible => setVisible(visible)}
>
{
Array.isArray(data.stations) ? (
<div className={layoutStyles.toggleSite}>
<img src={require('../assets/basic/site.png')} className={layoutStyles.site} />
<span className={layoutStyles.name}>{data.currentStationName}</span>
<ArrowIcon className={layoutStyles.arrow} fillColor="#fff"
style={{
transform: !visible ? `rotate(0deg)` : `rotate(180deg)`,
}}
/>
}
arrowPointAtCenter
overlayClassName={classNames(styles.stationsWrapper, styles.stationsTop)}
onVisibleChange={visible => setVisible(visible)}
>
{
Array.isArray(data.stations) && data.stations.length > 0 ? (
<div className={layoutStyles.toggleSite}>
<img src={require('../assets/basic/site.png')} className={layoutStyles.site}/>
<span className={layoutStyles.name}>{data.currentStationName}</span>
<ArrowIcon className={layoutStyles.arrow} fillColor="#fff"
style={{
transform: !visible ? `rotate(0deg)` : `rotate(180deg)`,
}}
/>
</div>
): null
}
</Popover>
</>
</Spin>
{data.weathers && Object.keys(data.weathers).length > 0 ? (
<span
className={layoutStyles.weatcher}
style={{
borderLeft:
data.stations.length === 0 ? '0px' : '1px solid rgba(256, 256, 256, 0.3)',
}}
>
<img src={data.weathers && data.weathers.icon} className={layoutStyles.icon}/>
<span className={layoutStyles.text}>{data.weathers && data.weathers.text}</span>
</span>
) : null}
</div>
) : null
}
</Popover>
</>
</Spin>
{data.weathers && Object.keys(data.weathers).length > 0 ? (
<span
className={layoutStyles.weatcher}
style={{
borderLeft:
data.stations.length === 0 ? '0px' : '1px solid rgba(256, 256, 256, 0.3)',
}}
>
<img src={data.weathers && data.weathers.icon} className={layoutStyles.icon} />
<span className={layoutStyles.text}>{data.weathers && data.weathers.text}</span>
</span>
) : null}
</>
)
......@@ -253,7 +253,6 @@ const BasicLayout = props => {
/* eslint-disable no-unused-vars */
const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);
const prefixCls = props.prefixCls || getPrefixCls('');
console.log("prefixCls", prefixCls);
// const [currentRoutes, setCurrentRoutes] = useState([]);
const [collapse, setCollapse] = useState(false);
const [toggleSystem, setToggleSystem] = useState(false);
......@@ -270,7 +269,11 @@ const BasicLayout = props => {
const basename = getBaseName();
const history = useHistory();
let currentRoutes = props.route.routes[props.currentMenuIndex]
// 处理隐藏菜单
let currentRoutes = props.route.routes.filter(item => !item.hideInMenu)[props.currentMenuIndex];
console.log(props.route)
//props.currentMenuIndex
useEffect(() => {
const initSelectRoute = findPathByLeafId(
`${props.location && props.location.pathname || ''}`,
......@@ -281,13 +284,13 @@ const BasicLayout = props => {
);
const parentMenuName = initSelectRoute && initSelectRoute.parent && initSelectRoute.parent.label;
if(parentMenuName) {
if (parentMenuName) {
let currentChildrenRoute = currentRoutes.routes.find(item => item.name === parentMenuName);
if(!currentChildrenRoute) {
if (!currentChildrenRoute) {
currentChildrenRoute = initSelectRoute
}
let childrenName = currentChildrenRoute ? currentChildrenRoute.name: parentMenuName;
if(currentChildrenRoute.routes) {
let childrenName = currentChildrenRoute ? currentChildrenRoute.name : parentMenuName;
if (currentChildrenRoute.routes) {
const active = currentChildrenRoute.routes.find(item => item.name === initSelectRoute.name);
setTabActiveKey(active.path)
} else {
......@@ -295,28 +298,32 @@ const BasicLayout = props => {
}
const initSelectIndex = currentRoutes.routes.findIndex(item => item.name === childrenName);
setSelectIndex(initSelectIndex);
currentChildrenRoute && currentChildrenRoute.routes ? setChildrenRoutes(currentChildrenRoute.routes): setChildrenRoutes([currentChildrenRoute]);
currentChildrenRoute && currentChildrenRoute.routes ? setChildrenRoutes(currentChildrenRoute.routes) : setChildrenRoutes([currentChildrenRoute]);
} else {
setChildrenRoutes([
{
icon: <HomeIcon/>,
icon: <HomeIcon />,
path: props.location && props.location.pathname,
name: '首页'
}
])
}
}, []);
window.share && window.share.event && window.share.event.on('event:updateCurrentChildrenRoutes', ({currentPath, currentRoute, selectedIndex}) => {
currentRoute && currentRoute.parent && currentRoute.parent.routes ? setChildrenRoutes(currentRoute.parent.routes): !currentRoute.parent ? setChildrenRoutes(currentRoute.routes): setChildrenRoutes([currentRoute]);
useEffect(() => {
console.log(props.route.routes);
}, [props.currentMenuIndex]);
window.share && window.share.event && window.share.event.on('event:updateCurrentChildrenRoutes', ({ currentPath, currentRoute, selectedIndex }) => {
currentRoute && currentRoute.parent && currentRoute.parent.routes ? setChildrenRoutes(currentRoute.parent.routes) : !currentRoute.parent ? setChildrenRoutes(currentRoute.routes) : setChildrenRoutes([currentRoute]);
setSelectIndex(selectedIndex);
setTabActiveKey(currentPath)
});
window.share && window.share.event && window.share.event.on('event:favitor', ({icon, name, path}) => {
window.share && window.share.event && window.share.event.on('event:favitor', ({ icon, name, path }) => {
setChildrenRoutes([
{
icon: <HomeIcon/>,
icon: <HomeIcon />,
path: path,
name: name
}
......@@ -325,7 +332,11 @@ const BasicLayout = props => {
useEffect(() => {
siteAction.setGlobalConfig(props.global);
if (!Cookies.get('token')) {
history.replace(`/user/login?client=${props.global.get('client')}`);
let client = props.global && props.global.client;
client = client !== 'undefined' && !_.isNull(client) && !_.isUndefined(client) ? client : 'city';
let generateType = props.global && props.global.hasOwnProperty('get') && props.global.get('generateType');
generateType = !_.isNull(generateType) && !_.isUndefined(generateType) && generateType !== 'undefined' ? `&generateType=${generateType}` : '';
history.replace(`/user/login?client=${client}${generateType}`);
props.logout();
return;
}
......@@ -344,24 +355,30 @@ const BasicLayout = props => {
// setChildrenRoutes(currentChildrenRoute)
window.share.event.on('goHome', url => {
setChildrenRoutes([
{
icon: <HomeIcon/>,
icon: <HomeIcon />,
path: url,
name: '首页'
}
])
]);
setTabActiveKey(url);
window.history.pushState(null, '', `/civbase${url}`);
});
/**
* web4全屏退出,切换三级菜单高亮
*/
useEffect(() => {
if(selectIndex !== -1) {
if (selectIndex !== -1) {
const routes = currentRoutes.routes[selectIndex];
if(routes) {
if( routes && routes.routes) {
if (routes) {
if (routes && routes.routes) {
const route = routes && routes.routes && routes.routes.find(item => item.path === decodeURI(window.location.pathname.replace('/civbase', '')));
if(route && route.path) {
if (route && route.path) {
setTabActiveKey(route.path)
}
}
......@@ -393,22 +410,31 @@ const BasicLayout = props => {
}, []);
const handlerSecond = (item, index) => {
let current = void 0;
if(item && item.routes) {
if (item && item.routes) {
setChildrenRoutes(item.routes);
current = item.routes[0];
} else{
} else {
setChildrenRoutes([item]);
current = item;
}
setTabActiveKey(current.path);
setSelectIndex(index);
if(current.routes) {
if (current.routes) {
setSelectedKeys([current.routes[0].href]);
window.history.pushState(null, '', `/civbase${current.routes[0].path}`);
} else {
window.history.pushState(null, '', `/civbase${current.path}`);
if (/iframe/.test(current.path)) {
history.push({
pathname: '/iframe',
state: current.params
})
} else {
window.history.pushState(null, '', `/civbase${current.path}`);
}
}
......@@ -419,6 +445,7 @@ const BasicLayout = props => {
}
const handleUpdateCurrentIndex = index => {
setSelectIndex(-1)
props.updateCurrentIndex(index);
window.share && window.share.event.emit('trigger:updateMenuIndex', index);
......@@ -426,13 +453,15 @@ const BasicLayout = props => {
}
const handleSelectMenuItem = (item) => {
setTabActiveKey(item);
if(item.indexOf('web_console') === -1) {
if (item.indexOf('web_console') === -1) {
window.history.pushState(null, '', `/civbase${item}`);
}
}
const handlerSelectMenu = ({ item, key, keyPath, domEvent }) => {
debugger
setSelectedKeys([key]);
window.history.pushState(null, '', `/civbase${key}`);
}
......@@ -442,7 +471,7 @@ const BasicLayout = props => {
};
const renderChildrenMenu = (route) => {
const routes = (route.routes || []).map(item => {
const routes = (route.routes || []).map(item => {
item.key = item.href;
return item;
});
......@@ -452,13 +481,13 @@ const BasicLayout = props => {
(routes || []).map((item, index) => {
return (
<>
<Menu.Item key={item.href}>
<Menu.Item key={item.href}>
<div>
<span></span>
<span>{item.name}</span>
</div>
</Menu.Item>
<Divider style={{width: '80%', minWidth: '80%', margin: '0 auto'}}></Divider>
<Divider style={{ width: '80%', minWidth: '80%', margin: '0 auto' }}></Divider>
</>
)
})
......@@ -470,10 +499,10 @@ const BasicLayout = props => {
<Dropdown overlay={menu} overlayClassName={`${prefixCls}-dropdown-custom-menu`}>
<div >
{
/.svg/.test(route.extData.icon) ?<ReactSVG src={route.extData.icon} style={{width: '18px', height: '18px', position: 'relative', top: '-3px'}}/>: <img src={route.extData.icon} style={{width: '18px', height: '18px'}}/>
/.svg/.test(route.extData.icon) ? <ReactSVG src={route.extData.icon} style={{ width: '18px', height: '18px', position: 'relative', top: '-3px' }} /> : <img src={route.extData.icon} style={{ width: '18px', height: '18px' }} />
}
<span style={{marginLeft: '8px'}}>{route.name} </span>
<DownOutlined style={{position: 'relative', right: '-10px'}}/>
<span style={{ marginLeft: '8px' }}>{route.name} </span>
<DownOutlined style={{ position: 'relative', right: '-10px' }} />
</div>
</Dropdown>
<Divider type="vertical" />
......@@ -481,7 +510,7 @@ const BasicLayout = props => {
)
}
const handlerIndustry = event => {
const handlerIndustry = event => {
props.global.get('userInfo.site') ? history.push(`/industry`) : void 0;
};
......@@ -489,118 +518,107 @@ const BasicLayout = props => {
setCollapse(!collapse);
}
const logo = props.global.get('bannerLogo')? window.globalConfig.transformDevAssetsBaseURL(props.global.get('bannerLogo')): defaultSetting.logo;
const logo = props.global && props.global.get('bannerLogo') ? (props.global && _.isFunction(props.global.transformDevAssetsBaseURL) && props.global.transformDevAssetsBaseURL(props.global.get('bannerLogo'))) : defaultSetting.logo;
return (
<SecurityLayout loading>
{collapse && props.global.loginTemplate === '新春 - 智联.html' ? null : (
props.global.loginTemplate === '新春 - 智联.html' && (
<img
src={logo}
style={{
width: '120px',
position: 'absolute',
bottom: '40px',
zIndex: 500,
left: '12px',
}}
/>)
)}
<div className={classNames(layoutStyles.basicLayout)}>
<div className={layoutStyles['layout-has-slider']} style={{minHeight: '100%'}}>
<div style={{
width: collapse ? '48px': '80px',
overflow: 'hidden',
flex: collapse ? '0 0 48px': '0 0 80px',
maxWidth: collapse ? '48px':'80px',
minWidth: collapse ? '48px':'80px',
transition: 'background-color 0.3s ease 0s, min-width 0.3s ease 0s, max-width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1) 0s'
}}></div>
<aside className={classNames(layoutStyles.layoutSlider, layoutStyles.fixed, {
[layoutStyles.collapsed]: collapse
})}>
<div className={layoutStyles['layout-slider-childern']}>
<div className={layoutStyles.sliderMenu} style={{flex: '1 1 0%', overflow: 'hidden auto'}}>
<ul className={classNames(layoutStyles.menu)} style={{minHeight: '0px', marginBottom: '0px'}}>
<li className={classNames(layoutStyles['menu-item'])} onClick={handleToggleSystem}>
<Tooltip placement="right" title={collapse ? currentRoutes.name: ''}>
<a>
{
(currentRoutes && currentRoutes.extData && currentRoutes.extData.icon) && <img src={currentRoutes.extData.icon} />
}
{
collapse ? null: <span className={classNames(layoutStyles.text, layoutStyles.currentText)}>{currentRoutes && currentRoutes.name}</span>
}
</a>
</Tooltip>
</li>
</ul>
<div className={layoutStyles.splitLine}></div>
<ul className={classNames(layoutStyles.menu, 'menu-vertical')}>
{
currentRoutes && (currentRoutes.routes || []).map((item, index) => {
return (
<>
<li key={index} className={classNames(layoutStyles['menu-item'], { [layoutStyles['active']]: index === selectIndex })} onClick={() => handlerSecond(item, index)}>
<Tooltip placement="right" title={collapse ? item.name: ''}>
<a>
{
item.icon ? item.icon: item.extData && /.svg/.test(item.extData.icon) ? <ReactSVG src={item.extData.icon} style={{width: '20px', height: '20px'}} className={layoutStyles.icon}/>: item.extData && <img src={item.extData.icon} />
}
{
collapse ? item.extData && <span className={classNames(layoutStyles.text)}>{(item.extData.shortName || item.name).substr(0, 2)}</span>: <span className={classNames(layoutStyles.text)}>{item.name}</span>
}
</a>
</Tooltip>
</li>
<Divider style={{border: '1px solid rgb(49, 53, 62, 0.3)', margin: '0 auto', minWidth: '80%', width: '80%'}}/>
</>
)
})
}
</ul>
</div>
<div className="ant-pro-sider-links" >
<ul className="ant-menu ant-menu-root ant-menu-inline ant-menu-dark ant-pro-sider-link-menu" role="menu" tabIndex="0" >
<li className="ant-menu-item ant-menu-item-only-child ant-pro-sider-collapsed-button" role="menuitem" tabIndex="-1" onClick={handlerCollapsed}>
<span className="ant-menu-title-content">
<span role="img" aria-label="menu-fold" className="anticon anticon-menu-fold">
<svg viewBox="64 64 896 896" focusable="false" width="1em" height="1em" fill="currentColor" aria-hidden="true">
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 000 13.8z"></path>
</svg>
</span>
</span>
</li>
</ul>
<div aria-hidden="true" style={{display: 'none'}}></div>
</div>
</div>
</aside>
<div className={layoutStyles.layout} style={{width: 'calc(100% - 80px)'}}>
<Panel
visible={toggleSystem}
keyboard
onClose={ () => setToggleSystem(false)}
currentMenuIndex={props.currentMenuIndex}
onChange={index => handleUpdateCurrentIndex(index)}
data={props.route.routes || []}
/>
<SettingDrawer
settings={defaultSetting}
onSettingChange={config => updateSettings(config)}
publicPath={`${window.location.origin}/${basename}/theme`}
/>
<div className={classNames(layoutStyles['basicLayout-content'], {
[layoutStyles['hook_web4']]: location.pathname.startsWith('/civbase/civweb4')
})}>
<div className={layoutStyles[`${props.rootPrefix}-page-container`]} style={{paddingTop: '0px'}}>
<div className={layoutStyles[`${props.rootPrefix}-page-container-warp`]}>
<div className={layoutStyles[`${props.rootPrefix}-page-header`]} style={{position: 'fixed'}}>
<img src={require('../assets/basic/图层 998@2x.png')} style={{width: '100%'}}/>
{
props.global.layout !== 'blank' ? (
<div className={classNames(layoutStyles.basicLayout)}>
<div className={layoutStyles['layout-has-slider']} style={{ minHeight: '100%' }}>
<div style={{
width: collapse ? '48px' : '80px',
overflow: 'hidden',
flex: collapse ? '0 0 48px' : '0 0 80px',
maxWidth: collapse ? '48px' : '80px',
minWidth: collapse ? '48px' : '80px',
transition: 'background-color 0.3s ease 0s, min-width 0.3s ease 0s, max-width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1) 0s'
}}></div>
<aside className={classNames(layoutStyles.layoutSlider, layoutStyles.fixed, {
[layoutStyles.collapsed]: collapse
})}>
<div className={layoutStyles['layout-slider-childern']}>
<div className={layoutStyles.sliderMenu} style={{ flex: '1 1 0%', overflow: 'hidden auto' }}>
<ul className={classNames(layoutStyles.menu)} style={{ minHeight: '0px', marginBottom: '0px' }}>
<li className={classNames(layoutStyles['menu-item'])} onClick={handleToggleSystem}>
<Tooltip placement="right" title={collapse ? currentRoutes.name : ''}>
<a>
{
(currentRoutes && currentRoutes.extData && currentRoutes.extData.icon) && <img src={currentRoutes.extData.icon} />
}
{
collapse ? null : <span className={classNames(layoutStyles.text, layoutStyles.currentText)}>{currentRoutes && currentRoutes.name}</span>
}
</a>
</Tooltip>
</li>
</ul>
<div className={layoutStyles.splitLine}></div>
<ul className={classNames(layoutStyles.menu, 'menu-vertical')}>
{
currentRoutes && (currentRoutes.routes || []).filter(item => !item.hideInMenu).map((item, index) => {
return (
<React.Fragment key={index}>
<li key={index} className={classNames(layoutStyles['menu-item'], { [layoutStyles['active']]: index === selectIndex })} onClick={() => handlerSecond(item, index)}>
<Tooltip placement="right" title={collapse ? item.name : ''}>
<a>
{
item.icon ? item.icon : item.extData && /.svg/.test(item.extData.icon) ? <ReactSVG src={item.extData.icon} style={{ width: '20px', height: '20px' }} className={layoutStyles.icon} /> : item.extData && <img src={item.extData.icon} />
}
{
collapse ? item.extData && <span className={classNames(layoutStyles.text)}>{(item.extData.shortName || item.name).substr(0, 2)}</span> : <span className={classNames(layoutStyles.text)}>{item.name}</span>
}
</a>
</Tooltip>
</li>
<Divider style={{ border: '1px solid rgb(49, 53, 62, 0.3)', margin: '0 auto', minWidth: '80%', width: '80%' }} />
</React.Fragment>
)
})
}
</ul>
</div>
<div className="ant-pro-sider-links" >
<ul className="ant-menu ant-menu-root ant-menu-inline ant-menu-dark ant-pro-sider-link-menu" role="menu" tabIndex="0" >
<li className="ant-menu-item ant-menu-item-only-child ant-pro-sider-collapsed-button" role="menuitem" tabIndex="-1" onClick={handlerCollapsed}>
<span className="ant-menu-title-content">
<span role="img" aria-label="menu-fold" className="anticon anticon-menu-fold">
<svg viewBox="64 64 896 896" focusable="false" width="1em" height="1em" fill="currentColor" aria-hidden="true">
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 000 13.8z"></path>
</svg>
</span>
</span>
</li>
</ul>
<div aria-hidden="true" style={{ display: 'none' }}></div>
</div>
</div>
</aside>
<div className={layoutStyles.layout} style={{ width: 'calc(100% - 80px)' }}>
<Panel
visible={toggleSystem}
keyboard
onClose={() => setToggleSystem(false)}
currentMenuIndex={props.currentMenuIndex}
onChange={index => handleUpdateCurrentIndex(index)}
data={props.route.routes || []}
/>
<SettingDrawer
settings={defaultSetting}
onSettingChange={config => updateSettings(config)}
publicPath={`${window.location.origin}/${basename}/theme`}
/>
<div className={classNames(layoutStyles['basicLayout-content'], {
[layoutStyles['hook_web4']]: location.pathname.startsWith('/civbase/civweb4')
})}>
<div className={layoutStyles[`${props.rootPrefix}-page-container`]} style={{ paddingTop: '0px' }}>
<div className={layoutStyles[`${props.rootPrefix}-page-container-warp`]}>
<div className={layoutStyles[`${props.rootPrefix}-page-header`]} style={{ position: 'fixed' }}>
<img src={require('../assets/basic/图层 998@2x.png')} style={{ width: '100%' }} />
<div className={layoutStyles.header}>
<a className={layoutStyles.logo} onClick={handlerIndustry}>
<img src="https://panda-water.com/web4/assets/images/logo/单独图案-白色.svg" alt="logo"/>
<img src={`${logo}`} alt="logo" />
</a>
<div className={layoutStyles.title}>{props.global.title}</div>
{
......@@ -612,28 +630,28 @@ const BasicLayout = props => {
action: siteAction,
})
}
<RightContent/>
<RightContent />
</div>
</div>
</div>
</div>
<div className={layoutStyles['menu-item-children']}>
<Tabs activeKey={tabActiveKey} defaultActiveKey={tabActiveKey} tabBarGutter={30} tabPosition="top" onTabClick={(event) => handleSelectMenuItem(event)}>
{childrenRoutes.map((item, index) => (
<div className={layoutStyles['menu-item-children']}>
<Tabs activeKey={tabActiveKey} defaultActiveKey={tabActiveKey} tabBarGutter={30} tabPosition="top" onTabClick={(event) => handleSelectMenuItem(event)}>
{childrenRoutes.map((item, index) => (
<>
<TabPane
className="only-last-children"
tab={
<>
{
item.routes ? renderChildrenMenu(item) : (
item.routes ? renderChildrenMenu(item) : (
<>
{
item.icon ? item.icon: item.extData && /.svg/.test(item.extData.icon) ? <ReactSVG src={item.extData.icon} beforeInjection={svg => console.log(svg)} style={{width: '18px', height: '18px'}}/>:item.extData && <img src={item.extData.icon} style={{width: '18px', height: '18px'}}/>
item.icon ? item.icon : item.extData && /.svg/.test(item.extData.icon) ? <ReactSVG src={item.extData.icon} style={{ width: '18px', height: '18px' }} /> : item.extData && <img src={item.extData.icon} style={{ width: '18px', height: '18px' }} />
}
<span className={layoutStyles['menu-item-name']}>{item.name}</span>
{
childrenRoutes.length === 1 ? null: <Divider type="vertical" />
childrenRoutes.length === 1 ? null : <Divider type="vertical" />
}
</>
......@@ -642,32 +660,50 @@ const BasicLayout = props => {
</>
}
key={item.path}
>
</TabPane>
>
</TabPane>
</>
))}
</Tabs>
</div>
<PageContainer style={{paddingTop: '0px', height: '100%'}}>
{
renderRoutes(props.route.routes)
))}
</Tabs>
</div>
<PageContainer style={{ paddingTop: '0px', height: '100%' }}>
{
renderRoutes(props.route.routes)
}
}
{
!window.location.pathname.startsWith('/civbase/civweb4') ? (window.location.pathname.startsWith('/civbase/civ_3d') ? <CesiumMap /> : <CreateBaseMap options={{type: 'ArcgisMap'}}/>) : null
window.location.pathname.startsWith('/civbase/civ_3d') ? <CesiumMap /> : null
}
<div id="micro-container" className="subapp-container">
{/*<CreateBaseMap/>*/}
{props.children}
</div>
<div id="micro-container" className="subapp-container">
{/*<CreateBaseMap/>*/}
{props.children}
</div>
{props.children}
</PageContainer>
</div>
</div>
</div>
</div>
</div>
</div>
</SecurityLayout>);
</div>
</div>
</div>) : (
<PageContainer style={{ paddingTop: '0px', height: '100%' }}>
{
renderRoutes(props.route.routes)
}
{
window.location.pathname.startsWith('/civbase/civ_3d') ? <CesiumMap /> : null
}
<div id="micro-container" className="subapp-container">
{/*<CreateBaseMap/>*/}
{props.children}
</div>
</PageContainer>
)
}
</SecurityLayout>);
};
const mapStateToProps = state => ({
global: state.getIn(['global', 'globalConfig']),
settings: state.getIn(['global', 'defaultSetting']),
......
......@@ -2,4 +2,4 @@ import React from 'react';
const Layout = ({ children }) => <>{children}</>;
export default Layout;
export default Layout;
\ No newline at end of file
import React from 'react';
import Cookies from 'js-cookie';
import { connect } from 'react-redux';
import { Redirect } from 'react-router-dom';
import { Redirect } from '@wisdom-utils/runtime';
import { PageLoading } from '@ant-design/pro-layout';
import { event } from 'microser-data';
import { stringify } from 'querystring';
import { getBaseName } from '../utils/utils';
import _ from 'lodash';
class SecurityLayout extends React.Component {
state = {
......@@ -22,22 +24,34 @@ class SecurityLayout extends React.Component {
const { isReady } = this.state;
const { children, global, loading } = this.props;
const isLogin = Cookies.get('token') !== null && global.token !== null;
const queryString = stringify({
redirect: window.location.href,
});
if ((!isLogin && loading) || !isReady) {
return <PageLoading />;
}
if (
!isLogin &&
window.location.pathname !== `/${getBaseName()}/user/login`
) {
// const queryString = stringify({
// redirect: window.location.href,
// });
if(_.isNull(global.token) || (global.hasGateWay && _.isNull(global.access_token))) {
this.props.updateCurrentIndex && this.props.updateCurrentIndex(0);
let client = global.client || Cookies.get('city');
client = client !== 'undefined' && !_.isNull(client) && !_.isUndefined(client) ? client: 'city';
// event.emit(?'event:initConfig');
let generateType = global.generateType;
generateType = !_.isNull(generateType) && !_.isUndefined(generateType) && generateType !== 'undefined' ? `&generateType=${generateType}` : '';
return (
<Redirect to={`/user/login?client=${global.client}&${queryString}`} />
<Redirect to={`/user/login?client=${client}${generateType}`} render={() => window.location.reload()}/>
);
}
if ((!isLogin && loading) || !isReady) {
return <PageLoading />;
}
// if (
// !isLogin &&
// window.location.pathname !== `/${getBaseName()}/user/login`
// ) {
// this.props.updateCurrentIndex && this.props.updateCurrentIndex(0);
// return (
// <Redirect to={`/user/login?client=${global.client}&${queryString}`} />
// );
// }
return children;
}
}
......
......@@ -345,7 +345,7 @@ class Site {
window.history.replaceState(
'',
'',
`/civbase/civweb4/${self.globalConfig.homepage}`,
`/${self.globalConfig.homepage}`,
);
self.getCityStationsForUser().then(res => {
window.share.event.emit('updateSite', res);
......@@ -382,6 +382,7 @@ class Site {
}
})
.catch(error => {
this.setLoading(false);
message.warning('切换企业失败');
});
}
......@@ -400,10 +401,12 @@ class Site {
this.writeCookie(token, site);
} else {
message.warning('企业切换失败,请联系管理员排查问题!');
this.setLoading(false);
}
})
.catch(e => {
message.warning('企业切换失败,请联系管理员排查问题!');
this.setLoading(false);
});
}
......
import { objectPattern } from '@babel/types';
// import { objectPattern } from '@babel/types';
import 'kit_logger';
import _ from 'lodash';
import {
......@@ -9,11 +9,14 @@ import {
setDefaultMountApp,
start,
} from 'qiankun';
import { store as microStore } from 'microser-data';
import micorConfig, { genActiveRule } from '../config/micor';
import pkg from '../package.json';
import { actionCreators } from './containers/App/store';
import { FILTER_FOLER_REG } from './utils/constants';
import loader from './render';
import store from './stores';
// eslint-disable-next-line no-undef
const Logger = logger('micro');
......@@ -32,29 +35,45 @@ const MICRO_STATUS = {
LOAD_ERROR: 'LOAD_ERROR',
};
export const initMicroApps = (loader, store) => {
export const initMicroApps = () => {
/* eslint-disable */
const config = createStoreage.get('globalConfig');
const application = config.products || [];
const config = window.globalConfig || {};
//createStoreage.get('globalConfig');
const application = config && config.products || [];
let products = [];
application && Array.isArray(application) && application.length > 0 && application.map(item => {
products.push({
name: item.PackageName,
entry: "//" + window.location.host + (`/${item.PackageName}`),
container: '#micro-container',
activeRule: genActiveRule(`/civbase/${item.PackageName}`),
props: {
...item.DefaultSetting,
routerBase: item.PackageName
}
})
if(item.PackageName === 'report') {
products.push({
name: item.PackageName,
entry: item.RouteUrl,
container: '#micro-container',
activeRule: genActiveRule(`/civbase/${item.PackageName}`),
props: {
...item.DefaultSetting,
routerBase: item.PackageName
}
})
} else {
products.push({
name: item.PackageName,
entry: window.location.protocol + "//" + window.location.host + (`/${item.PackageName}`),
container: '#micro-container',
activeRule: genActiveRule(`/civbase/${item.PackageName}`),
props: {
...item.DefaultSetting,
routerBase: item.PackageName
}
})
}
});
const entrys =
process.env.NODE_ENV !== 'production' ?
micorConfig.dev :
products;
registerMicroApps(
entrys.map(item => {
item.loader = loader;
......@@ -63,7 +82,10 @@ export const initMicroApps = (loader, store) => {
baseRoot: item.name,
// eslint-
// disable-next-line no-undef
globalConfig: createStoreage.get('globalConfig'),
globalConfig: /civweb4/.test(item.name) ? Object.assign({}, config, {
homepage: config.homepage ? config.homepage.replace(/civweb\//, ''): config.homepage
}): config,
//createStoreage.get('globalConfig'),
XMLHttpRequest: window.XMLHttpRequest,
};
return item;
......@@ -89,28 +111,39 @@ export const initMicroApps = (loader, store) => {
app => {
window.share.event.removeAllListeners('changeRoute');
Logger.info(`[LifeCycle] after unmount %c%s ${app.name}`);
window.globalConfig = {}
createStoreage.remove(`__PANDA_STORE__${location.hostname}`)
},
],
afterUnmount: [app => {}],
},
);
const globalStore = store.getState().toJS();
console.log("globalStore", globalStore)
const { setGlobalState } = initGlobalState({
// eslint-disable-next-line no-undef
globalConfig: createStoreage.get('globalConfig'),
globalConfig: window.globalConfig,
//createStoreage.get('globalConfig'),
global: globalStore.global
});
const globalConfig = window.globalConfig;
globalConfig.homepage = globalConfig.homepage && /civweb4/.test(globalConfig.homepage) ? config.homepage.replace(/civweb4\//, ''): globalConfig.homepage;
console.log(globalConfig);
setGlobalState({
// eslint-disable-next-line no-undef
globalConfig: createStoreage.get('globalConfig'),
globalConfig: globalConfig,
//createStoreage.get('globalConfig'),
});
microStore.set("props:globalConfig", {
globalConfig: globalConfig,
global: globalStore.global
});
start({
sandbox: {
experimentalStyleIsolation: false,
loose: true,
},
singular: true,
singular: false,
scopedCSS: true,
prefetch: 'all',
// eslint-disable-next-line no-underscore-dangle
......@@ -118,23 +151,27 @@ export const initMicroApps = (loader, store) => {
excludeAssetFilter: url =>
url.indexOf('framework/highcharts') !== -1 ||
// url.indexOf('framework/amap/AMap.UI') !== -1 ||
url.indexOf('framework/amap/init.js') !== -1 ||
// url.indexOf('framework/amap/init.js') !== -1 ||
url.indexOf('jquery') !== -1 ||
url.indexOf('managers/MapManager.js') !== -1 ||
url.indexOf('jquery.mCustomScrollbar.js') !== -1 ||
url.indexOf('QIAN_KUN_Platform.js') !== -1 ||
url.indexOf('configuration/js') !== -1 ||
url.indexOf('framework/three.js') !== -1 ||
url.indexOf('threedimensional/frameworkthree') !== -1 ||
url.indexOf('threedimensional/iframe') !== -1 ||
url.indexOf('iframe/Civ3DLLab/js') !== -1 ||
url.indexOf('framework/jquery/gridify-min.js') !== -1 ||
url.indexOf('framework/jquery/gridify.qrcode.js') !== -1 ||
url.indexOf('framework/application/Platform.js') !== -1 ||
url.indexOf('echarts') !== -1 ||
url.indexOf('webgisPanda/AMapTool') !== -1 ||
url.indexOf('framework/underscore') !== -1 ||
// url.indexOf('lbs.amap.com') !== -1 ||
// url.indexOf('restapi.amap.com') !== -1 ||
// url.indexOf('webapi.amap.com') !== -1 ||
// url.indexOf('webapi.amap.com/count') !== -1 ||
// url.indexOf('restapi.amap.com/v3') !== -1 ||
url.indexOf('echarts') !== -1 ||
url.indexOf('lbs.amap.com') !== -1 ||
url.indexOf('restapi.amap.com') !== -1 ||
url.indexOf('webapi.amap.com') !== -1 ||
url.indexOf('webapi.amap.com/count') !== -1 ||
url.indexOf('webapi.amap.com/maps') !== -1 ||
url.indexOf('restapi.amap.com/v3') !== -1 ||
url.indexOf('api.map.baidu.com') !== -1 ||
url.indexOf('map.baidu.com') !== -1 ||
url.indexOf('pv.sohu.com') !== -1 ||
......@@ -167,7 +204,7 @@ export const initMicroApps = (loader, store) => {
// ) {
// // window.history.pushState({message: '应用服务请求异常,请检查应用配置'}, null, '/civbase/500')
// }
console.log("microApp", event);
console.log(event);
// if(event.type === 'error') {
// // window.history.pushState({message: '应用服务请求异常,请检查应用配置'}, null, '/civbase/404')
// window.share && window.share.event.emit('event:microError');
......@@ -177,20 +214,23 @@ export const initMicroApps = (loader, store) => {
export const defaultApp = () => {
// eslint-disable-next-line no-undef
const config = createStoreage.get('globalConfig');
const config = window.globalConfig;
if (config && config.token) {
const startWith = config.homepage ? config.homepage.split('/') : [];
// console.log(findPathByLeafId(config.homepage, '', 'url'))
const basePath =
config.homepage !== '' && FILTER_FOLER_REG.test(config.homepage) ?
'civweb4' :
'civweb4';
const defaultURL =
config.homepage === '' ?
`/${pkg.name.toLocaleLowerCase()}/${basePath}?client=${config.client}` :
`/${pkg.name.toLocaleLowerCase()}/${basePath}/${config.homepage}`;
setDefaultMountApp(defaultURL);
// const basePath =config.homepage !== '' && FILTER_FOLER_REG.test(config.homepage) ?'civweb4' :'civweb4';
// if(config && config.home) {
// setDefaultMountApp(`/civbase/${config.home.path.replace(/^\//, '')}`);
// } else {
// const homepage = _.isNull(config.homepage) ? '/index': '/' + config.homepage;
// setDefaultMountApp(`/${pkg.name.toLocaleLowerCase()}/${basePath}${homepage}`);
// createStoreage.set('init_web4', true)
// }
// let homepage = config.homepage.replace('civweb4/', '');
const url = !config.home ? `/civbase/civweb4/${config.homepage.replace(/^\//, '')}`: `/civbase/${config.homepage.replace(/^\//, '')}`;
setDefaultMountApp(url);
// if(config.homepage.indexOf('civweb4') > -1) createStoreage.set('init_web4', true);
}
};
......@@ -213,7 +253,7 @@ window.app = {
if(request === '.') {
return
}
return this.modules[request]();
return _.isFunction(this.modules[request]) && this.modules[request]();
},
define: function(name, context, index) {
let keys = context.keys();
......@@ -266,188 +306,187 @@ window.app.define('@wisdom-utils/components', require.context('../node_modules/@
/**
* arcgismap
// */
window.app.define('@wisdom-map/arcgismap', require.context('../node_modules/@wisdom-map/arcgismap/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'index.js');
// window.app.define('@wisdom-map/arcgismap/lib/widgets', require.context('../node_modules/@wisdom-map/arcgismap/lib/widgets', true, /^.\/(lib\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/chunks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/chunks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/accessorSupport', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/accessorSupport', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/accessorSupport/decorators', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/accessorSupport/decorators', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/sql', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/sql', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/workers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/workers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/form', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/form', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/geometry', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/geometry', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/geometry/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/geometry/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/identity', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/identity', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/buildingSublayers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/buildingSublayers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/ogc', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/ogc', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/pointCloudFilters', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/pointCloudFilters', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
*/
// window.app.define('@wisdom-map/arcgismap', require.context('../node_modules/@wisdom-map/arcgismap/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'index.js');
// // window.app.define('@wisdom-map/arcgismap/lib/widgets', require.context('../node_modules/@wisdom-map/arcgismap/lib/widgets', true, /^.\/(lib\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/chunks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/chunks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/accessorSupport', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/accessorSupport', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/accessorSupport/decorators', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/accessorSupport/decorators', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/sql', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/sql', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/workers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/core/workers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/networks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/networks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/networks/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/networks/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/form', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/form', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/geometry', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/geometry', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/geometry/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/geometry/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/identity', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/identity', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/content', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/content', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/content/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/content/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/buildingSublayers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/buildingSublayers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/ogc', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/ogc', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/pointCloudFilters', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/pointCloudFilters', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/layers/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/portal', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/portal', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/networks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/networks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/networks/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/networks/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/visualVariables', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/visualVariables', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/visualVariables/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/visualVariables/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/content', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/content', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/content/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/popup/content/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/portal', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/portal', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/geoprocessor', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/geoprocessor', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/networks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/networks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/networks/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/networks/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/query/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/query/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/visualVariables', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/visualVariables', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/visualVariables/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/renderers/visualVariables/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/heuristics', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/heuristics', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/labels', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/labels', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/popup', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/popup', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster/renderers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster/renderers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/renderers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/renderers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/geoprocessor', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/geoprocessor', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/networks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/networks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/networks/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/networks/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/query/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/query/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/rest/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/statistics', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/statistics', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/statistics/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/statistics/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/heuristics', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/heuristics', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/labels', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/labels', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/popup', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/popup', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/symbology', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/symbology', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/symbology/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/symbology/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster/renderers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster/renderers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/raster/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/renderers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/renderers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/statistics', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/statistics', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/statistics/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/statistics/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/symbology', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/symbology', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/symbology/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/smartMapping/symbology/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/support/actions', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/support/actions', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/callouts', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/callouts', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/edges', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/edges', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/patterns', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/patterns', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/tasks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/tasks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/tasks/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/tasks/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/2d', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/2d', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/2d/layers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/2d/layers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/3d', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/3d', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/3d/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/3d/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/draw', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/draw', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/input', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/input', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/input/gamepad', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/input/gamepad', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/interactive/snapping', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/interactive/snapping', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/support/actions', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/support/actions', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/callouts', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/callouts', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/edges', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/edges', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/patterns', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/patterns', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/symbols/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/tasks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/tasks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/tasks/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/tasks/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/2d', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/2d', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/2d/layers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/2d/layers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/3d', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/3d', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/3d/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/3d/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/draw', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/draw', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/input', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/input', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/input/gamepad', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/input/gamepad', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/interactive/snapping', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/interactive/snapping', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/layers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/layers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/layers/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/layers/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/layers', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/layers', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/layers/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/layers/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/navigation', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/navigation', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/navigation/gamepad', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/navigation/gamepad', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/navigation', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/navigation', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/navigation/gamepad', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/navigation/gamepad', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/ui', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/ui', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/ui', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/views/ui', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webdoc/applicationProperties', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webdoc/applicationProperties', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webdoc/applicationProperties', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webdoc/applicationProperties', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webmap', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webmap', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webmap/background', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webmap/background', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webmap', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webmap', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webmap/background', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webmap/background', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webscene', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webscene', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webscene/background', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webscene/background', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webscene', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webscene', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webscene/background', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/webscene/background', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/AreaMeasurement2D', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/AreaMeasurement2D', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/AreaMeasurement3D', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/AreaMeasurement3D', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Attachments', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Attachments', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Attribution', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Attribution', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapGallery', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapGallery', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapGallery/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapGallery/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/AreaMeasurement2D', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/AreaMeasurement2D', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/AreaMeasurement3D', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/AreaMeasurement3D', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Attachments', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Attachments', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Attribution', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Attribution', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapGallery', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapGallery', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapGallery/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapGallery/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapLayerList', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapLayerList', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapToggle', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapToggle', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Bookmarks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Bookmarks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BuildingExplorer', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BuildingExplorer', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Compass', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Compass', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/CoordinateConversion', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/CoordinateConversion', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/CoordinateConversion/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/CoordinateConversion/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapLayerList', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapLayerList', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapToggle', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BasemapToggle', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Bookmarks', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Bookmarks', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BuildingExplorer', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/BuildingExplorer', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Compass', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Compass', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/CoordinateConversion', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/CoordinateConversion', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/CoordinateConversion/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/CoordinateConversion/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Daylight', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Daylight', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Directions', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Directions', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/DirectLineMeasurement3D', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/DirectLineMeasurement3D', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/DistanceMeasurement2D', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/DistanceMeasurement2D', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Editor', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Editor', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ElevationProfile', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ElevationProfile', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Expand', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Expand', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Feature', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Feature', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureForm', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureForm', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTable', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTable', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTable/Grid/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTable/Grid/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Daylight', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Daylight', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Directions', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Directions', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/DirectLineMeasurement3D', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/DirectLineMeasurement3D', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/DistanceMeasurement2D', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/DistanceMeasurement2D', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Editor', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Editor', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ElevationProfile', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ElevationProfile', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Expand', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Expand', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Feature', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Feature', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureForm', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureForm', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTable', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTable', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTable/Grid/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTable/Grid/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTemplates', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTemplates', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FloorFilter', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FloorFilter', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Fullscreen', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Fullscreen', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Histogram', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Histogram', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/HistogramRangeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/HistogramRangeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Home', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Home', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/LayerList', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/LayerList', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Legend', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Legend', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Legend/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Legend/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/LineOfSight', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/LineOfSight', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Locate', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Locate', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTemplates', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FeatureTemplates', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FloorFilter', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/FloorFilter', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Fullscreen', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Fullscreen', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Histogram', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Histogram', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/HistogramRangeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/HistogramRangeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Home', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Home', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/LayerList', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/LayerList', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Legend', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Legend', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Legend/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Legend/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/LineOfSight', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/LineOfSight', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Locate', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Locate', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Measurement', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Measurement', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/NavigationToggle', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/NavigationToggle', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Popup', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Popup', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Print', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Print', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ScaleBar', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ScaleBar', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ScaleRangeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ScaleRangeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Search', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Search', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ShadowAccumulation', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ShadowAccumulation', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Measurement', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Measurement', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/NavigationToggle', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/NavigationToggle', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Popup', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Popup', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Print', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Print', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ScaleBar', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ScaleBar', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ScaleRangeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ScaleRangeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Search', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Search', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ShadowAccumulation', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/ShadowAccumulation', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Sketch', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Sketch', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Slice', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Slice', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Slider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Slider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Spinner', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Spinner', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Swipe', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Swipe', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Sketch', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Sketch', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Slice', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Slice', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Slider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Slider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Spinner', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Spinner', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Swipe', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Swipe', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/TableList', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/TableList', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/TimeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/TimeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Track', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Track', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Zoom', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Zoom', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/TableList', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/TableList', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/TimeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/TimeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Track', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Track', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Zoom', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/Zoom', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ClassedColorSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ClassedColorSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ClassedSizeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ClassedSizeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ColorSizeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ColorSizeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ColorSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ColorSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/HeatmapSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/HeatmapSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ClassedColorSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ClassedColorSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ClassedSizeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ClassedSizeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ColorSizeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ColorSizeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ColorSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/ColorSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/HeatmapSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/HeatmapSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/OpacitySlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/OpacitySlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/SizeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/SizeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/OpacitySlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/OpacitySlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/SizeSlider', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/SizeSlider', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
// window.app.define('@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/support', require.context('../node_modules/@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/widgets/smartMapping/support', true, /^.\/(arcgisapi\/)?[^\/]+\.js$/));
......@@ -458,9 +497,7 @@ window.app.define('@ant-design/pro-utils', require.context('../node_modules/@ant
window.app.define('@ant-design/pro-layout', require.context('../node_modules/@ant-design/pro-layout/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'index.js');
window.app.define('@ant-design/pro-table', require.context('../node_modules/@ant-design/pro-table/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'index.js');
window.app.define('@ant-design/pro-provider', require.context('../node_modules/@ant-design/pro-provider/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'index.js');
window.app.define('@ant-design/pro-form', require.context('../node_modules/@ant-design/pro-form/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'index.js');
//
window.app.define('pinyin-match', require.context('../node_modules/pinyin-match/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'main.js');
// window.app.define('pinyin-match', require.context('../node_modules/pinyin-match/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'main.js');
window.app.define('react-intl', require.context('../node_modules/react-intl/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'index.js');
window.app.define('moment', require.context('moment', true, /^.\/moment\.js$/), 'moment.js');
window.app.define('rc-align', require.context('../node_modules/rc-align/lib', true, /^.\/(lib\/)?[^\/]+\.js$/), 'index.js');
......
......@@ -18,7 +18,8 @@ const industries = [
{ name: '农饮水', type: '农饮水', subTitle: 'RURAL POTABLE WATER' },
{ name: '排水', type: '排水', subTitle: 'DRAINAGE' },
{ name: '能源', type: '能源', subTitle: 'ENERGY SOURCES' },
{ name: '水资源', type: '水资源', subTitle: 'WATER RESOURCES' },
{ name: '直饮水', type: '直饮水', subTitle: 'DRINGKING WATER' },
// { name: '水资源', type: '水资源', subTitle: 'WATER RESOURCES' },
{ name: '熊猫智能实验室', type: '实验室', subTitle: 'PANDA AI. LAB' },
{ name: '大数据', type: '大数据', subTitle: 'BIG DATA' },
{ name: '项目案例', type: '项目案例', subTitle: 'PROJECT CASE' },
......@@ -54,7 +55,7 @@ const renderIndustries = (config, callback) =>
});
const BootPage = props => {
const [loadding, setLoadding] = useState(false);
const [scale, setScale] = useState(1);
useDocumentTitle(
......
......@@ -19,9 +19,9 @@ import starIcon from '../../assets/images/commonMenu/矢量智能对象 拷贝 3
// 是否是灰色的图标(灰色图标在白色背景中看不见,添加滤镜变色)
const isNeedFilterIcon = (icon = '') =>
icon && !icon.includes('一级') && !icon.includes('ios/');
Modal.config({
rootPrefixCls: 'panda-console-base'
});
// Modal.config({
// rootPrefixCls: 'panda-console-base'
// });
const CommonMenu = props => {
const history = useHistory();
const { menus } = props;
......
import React from 'react';
import Iframe from 'react-iframe';
import { connect } from 'react-redux';
const ShareFrame = props => {
const state = props.location.state || {};
debugger
if (!state.linkUrl) {
return null;
}
const { token, userInfo } = props.global;
return (
<Iframe
url={`${state.linkUrl}?token=${token}&loginName=${userInfo.loginName}`}
width="100%"
height="100%"
id="myId"
frameBorder="0"
className="myClassname"
display="initial"
position="relative"
/>
);
};
const mapStateToProps = state => ({
global: state.getIn(['global', 'globalConfig']),
});
export default connect(mapStateToProps)(ShareFrame);
......@@ -4,11 +4,11 @@ import { connect } from 'react-redux';
import { actionCreators } from '@/containers/App/store';
import _ from 'lodash';
// import { AMapScene } from '@wisdom-map/Amap';
import { ArcGISMap } from '@wisdom-map/arcgismap';
import arcgisConfig from '@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/config';
import pkg from '../../../package.json';
arcgisConfig.assetsPath = `${window.location.origin}/${pkg.name.toLocaleLowerCase()}/assets`;
window.arcgisAssetsPath = arcgisConfig.assetsPath;
// import { ArcGISMap } from '@wisdom-map/arcgismap';
// import arcgisConfig from '@wisdom-map/arcgismap/lib/arcgisapi/4.20/@arcgis/core/config';
// import pkg from '../../../package.json';
// arcgisConfig.assetsPath = `${window.location.origin}/${pkg.name.toLocaleLowerCase()}/assets`;
// window.arcgisAssetsPath = arcgisConfig.assetsPath;
class Map extends React.PureComponent {
constructor(props) {
super(props);
......@@ -22,50 +22,50 @@ class Map extends React.PureComponent {
}
transformMapsetting(mapsettings) {
let layers = mapsettings.layers;
layers = layers.map(item => {
item.url = /^\//.test(item.url) ? `/${item.url}`: item.url;
return item;
})
return Object.assign({}, mapsettings, {
layers: layers
});
// let layers = mapsettings.layers;
// layers = layers.map(item => {
// item.url = /^\//.test(item.url) ? `/${item.url}`: item.url;
// return item;
// })
// return Object.assign({}, mapsettings, {
// layers: layers
// });
}
destroyAMap() {
const mapKey = [
'_AMap_AMap.MapType',
'_AMap_labelcanvas',
'_AMap_imagelayer',
'_AMap_anole',
'_AMap_AMap.Scale',
'_AMap_rbush',
'_AMap_AMap.IndoorMap',
'_AMap_AMap.CustomLayer',
'_AMap_AMap.MarkerClusterer',
'_AMap_vectorlayer',
'_AMap_AMap.OverView',
'_AMap_sync',
'_AMap_AMap.PlaceSearch',
'_AMap_AMap.DistrictSearch',
'_AMap_Map3D',
'_AMap_AMap.Autocomplete',
'_AMap_AMap.Heatmap',
'_AMap_wgl',
'_AMap_overlay',
'_AMap_cvector',
'_AMap_AMap.ToolBar',
'_AMap_mouse',
'_AMap_AMap.RangingTool',
'_AMap_data.tileKeys'
];
// eslint-disable-next-line no-plusplus
for (let i = 0; i < mapKey.length; i++) {
localStorage.removeItem(mapKey[i]);
}
delete window.AMap;
delete window.AMapUI;
delete window.AMapUI_DEBUG;
// const mapKey = [
// '_AMap_AMap.MapType',
// '_AMap_labelcanvas',
// '_AMap_imagelayer',
// '_AMap_anole',
// '_AMap_AMap.Scale',
// '_AMap_rbush',
// '_AMap_AMap.IndoorMap',
// '_AMap_AMap.CustomLayer',
// '_AMap_AMap.MarkerClusterer',
// '_AMap_vectorlayer',
// '_AMap_AMap.OverView',
// '_AMap_sync',
// '_AMap_AMap.PlaceSearch',
// '_AMap_AMap.DistrictSearch',
// '_AMap_Map3D',
// '_AMap_AMap.Autocomplete',
// '_AMap_AMap.Heatmap',
// '_AMap_wgl',
// '_AMap_overlay',
// '_AMap_cvector',
// '_AMap_AMap.ToolBar',
// '_AMap_mouse',
// '_AMap_AMap.RangingTool',
// '_AMap_data.tileKeys'
// ];
// // eslint-disable-next-line no-plusplus
// for (let i = 0; i < mapKey.length; i++) {
// localStorage.removeItem(mapKey[i]);
// }
// delete window.AMap;
// delete window.AMapUI;
// delete window.AMapUI_DEBUG;
}
componentWillMount() {
......@@ -73,14 +73,14 @@ class Map extends React.PureComponent {
}
getAMap(AMapObj, AMap) {
this.props.updageMapView({
AMapObj,
AMap
});
// this.props.updageMapView({
// AMapObj,
// AMap
// });
}
getArcGISMap(map) {
this.props.updageMapView(map);
// this.props.updageMapView(map);
}
show() {
......@@ -96,17 +96,17 @@ class Map extends React.PureComponent {
}
render() {
return (
<>
{
this.state.type === 'AMap' ? (
<div {...this.state} getMapInfo={this.getAMap.bind(this)}/>
) : (
<ArcGISMap config={this.state.options} getMapInfo={this.getArcGISMap.bind(this)}/>
)
}
</>
)
// return (
// <>
// {
// this.state.type === 'AMap' ? (
// <div {...this.state} getMapInfo={this.getAMap.bind(this)}/>
// ) : (
// <ArcGISMap config={this.state.options} getMapInfo={this.getArcGISMap.bind(this)}/>
// )
// }
// </>
// )
}
}
const mapStateToProps = state => ({});
......
......@@ -3,8 +3,10 @@ import React from 'react';
import BaseLogin from './template/baseLogin';
import NewYear from './template/newYear';
import InfoLogin from './template/infoLogin';
import Yulin from './template/yulin';
/* eslint-disable */
export default () => {
const loginTemplate = window.globalConfig && window.globalConfig.loginTemplate;
switch(loginTemplate) {
case '新春 - 智联.html':
......@@ -14,6 +16,8 @@ export default () => {
return <BaseLogin/>
case '信息化.html':
return <InfoLogin />
case '项目 - 榆林.html':
return <Yulin />
default:
return <BaseLogin/>;
}
......
import 'kit_logger';
import { params } from 'kit_utils';
import { message } from 'antd';
import { decode, encode } from 'js-base64';
import Cookies from 'js-cookie';
import sha1 from 'sha1';
import { appService } from '@/api';
import { getUserInfo, getWebSiteConfig } from '@/api/service/base'
import {
SERVICE_APP_LOGIN_MODE,
SERVICE_INTERFACE_SUCCESS_CODE,
......@@ -32,16 +33,29 @@ class Login {
}
init() {
const self = this;
this.loginFailed = false;
this.guid = Math.round(Math.random() * 10000 + Date.now()).toString(16);
this.redirect_state = Cookies.get('redirect_state');
const token = this.globalConfig.initToken || Cookies.get('token');
let { ddCode } = this.globalConfig;
const { loginName } = this.globalConfig;
const { password } = this.globalConfig;
let { loginName } = this.globalConfig;
let { password } = this.globalConfig;
loginName = params.getParams('loginName') ? params.getParams('loginName'): loginName;
const redirect = params.getParams('redirect');
const generateType = params.getParams('generateType');
if(redirect) {
this.globalConfig.homepage = redirect;
// this.globalConfig.layout = 'blank';
}
if(generateType) {
this.globalConfig.generateType = generateType;
}
self.updateConfig && self.updateConfig(self.globalConfig);
password = params.getParams('password') ? params.getParams('password'): password;
const loginMode = Cookies.get('loginMode') || null;
if (loginMode && loginMode === 'iotWechat') ddCode = null;
const self = this;
// self.qrcodeLogin(self.globalConfig.qrcodeData.code);
if (token) {
self.getToweb(token);
......@@ -51,6 +65,7 @@ class Login {
} else if (ddCode && loginMode === 'qywx') {
self.qywxLoginIn(ddCode);
} else if (!!loginName && !!password) {
self.otherLoginIn(loginName, password);
} else if (
self.globalConfig.qrcodeData &&
......@@ -74,8 +89,7 @@ class Login {
const self = this;
// eslint-disable-next-line no-undef
appService
.getUserInfo({
getUserInfo({
token: this.globalConfig.token,
subOID: 'subOID',
site: this.getLocalSiteBytoken(token),
......@@ -192,13 +206,14 @@ class Login {
getWebConfig(token, getIndustry) {
const self = this;
// eslint-disable-next-line no-undef
appService
.getWebSiteConfig({
getWebSiteConfig({
client: self.globalConfig.client,
token,
'request.preventCache': Date.now(),
})
.then(response => {
const result =
response && response.code === SERVICE_INTERFACE_SUCCESS_CODE
? Array.isArray(response.data)
......@@ -206,14 +221,24 @@ class Login {
: []
: response;
if (result && result.length > 0) {
self.globalConfig = Object.assign(self.globalConfig, result.shift(), {
const config = result.shift();
const homeType = config.productType || 'civweb4';
self.globalConfig = Object.assign(self.globalConfig, config, {
theme: self.globalConfig.theme,
menu: self.globalConfig.menu,
style: self.globalConfig.style,
homepage: homeType + '/' + (params.getParams('redirect') || self.globalConfig.homepage || config.homepage),
});
self.updateConfig && self.updateConfig(self.globalConfig);
if(self.globalConfig.hasOwnProperty('webConfig')) {
self.globalConfig = {
// ...self.globalConfig,
...self.globalConfig.webConfig.basicConfig,
...self.globalConfig.webConfig.optionalConfig
}
}
self.updateConfig && self.updateConfig(self.globalConfig);
self.getProjectItems().then(() => {
window.subSysCfg = {};
result.forEach(item => {
......@@ -234,8 +259,8 @@ class Login {
self.globalConfig.userInfo.site.length > 0
) {
// eslint-disable-next-line no-undef,no-underscore-dangle
appService
.getWebSiteConfig(
getWebSiteConfig(
{
client: self.globalConfig.client,
token,
......@@ -246,6 +271,7 @@ class Login {
)
// eslint-disable-next-line no-shadow
.then(response => {
const resultData =
response && response.code === SERVICE_INTERFACE_SUCCESS_CODE
? Array.isArray(response.data)
......@@ -254,8 +280,9 @@ class Login {
: response;
if (resultData && resultData.length > 0) {
const mainConf = resultData.shift();
const mainType = mainConf.productType || 'civweb4';
if (mainConf.homepage)
self.globalConfig.homepage = mainConf.homepage;
self.globalConfig.homepage = `${mainType}/${mainConf.homepage}`;
if (mainConf.bannerLogo)
self.globalConfig.bannerLogo = mainConf.bannerLogo;
if (mainConf.logo) self.globalConfig.logo = mainConf.logo;
......@@ -263,6 +290,8 @@ class Login {
if (mainConf.menu) self.globalConfig.menu = mainConf.menu;
if (mainConf.shortcutIcon)
self.globalConfig.shortcutIcon = mainConf.shortcutIcon;
// if (mainConf.productType)
// self.globalConfig.productType = mainConf.productType;
}
self.updateConfig && self.updateConfig(self.globalConfig);
// console.log("===loginSuccess===")
......@@ -292,6 +321,7 @@ class Login {
}
})
.catch(error => {
console.log(error);
// Logger.log(error);
this.handleLoginError();
// Logger.log('获取网络配置失败');
......@@ -385,6 +415,7 @@ class Login {
}
goLogin() {
if (
this.globalConfig.style === 'ios' &&
this.globalConfig.loginTemplate === 'IOSCloud.html'
......@@ -561,8 +592,8 @@ class Login {
}
otherLoginIn(usr, pwd) {
const uesrName = decode(usr.substring(0, usr.length - 3));
const password = decode(pwd.substring(0, pwd.length - 3));
// const uesrName = decode(usr.substring(0, usr.length - 3));
// const password = decode(pwd.substring(0, pwd.length - 3));
const self = this;
// eslint-disable-next-line no-undef
appService
......@@ -570,18 +601,22 @@ class Login {
f: 'json',
expiration: this.globalConfig.expiration, // token过期时间(单位:秒)
client: 'referer',
username: uesrName,
password: sha1(password).toUpperCase(),
username: usr,
password: params.getParams('generateType') ? pwd : sha1(pwd).toUpperCase(),
referer: this.globalConfig.client,
skipMenuTest: 1,
generateType: params.getParams('generateType') || ''
})
.then(response => {
// self.globalConfig.layout = 'blank';
if (response && response.token) {
const tk = response.token;
this.globalConfig.token = tk;
self.globalConfig.token = tk;
// eslint-disable-next-line no-undef,no-debugger
appService
.getUserInfo(
getUserInfo(
{
token: tk,
subOID: 'subOID',
......@@ -592,17 +627,55 @@ class Login {
)
// eslint-disable-next-line no-shadow
.then(response => {
if (response && response.errMsg) {
this.globalConfig.userInfo = {};
if (
response.data.Groups &&
response.data.Groups instanceof Array &&
response.data.Groups.length
) {
this.globalConfig.userInfo.Groups = response.data.Groups;
try {
if (response && !response.errMsg) {
self.globalConfig.userInfo = Object.assign(
{},
response,
);
if(response.hasOwnProperty('data')) {
self.globalConfig.userInfo = {
// ... self.globalConfig.userInfo,
...response.data
}
}
const date = new Date();
date.setTime(date.getTime() + 24 * 60 * 60 * 1000);
// date = date.toGMTString();
const encodeSite = encode(encodeURIComponent(response.site));
Cookies.set('site', encodeSite, {
expires: date,
path: '/',
});
Cookies.set('token', tk, {
expires: date,
path: '/',
})
// self.globalConfig.Industry = industry;
self.isSignIn = true;
self.updateConfig && self.updateConfig(self.globalConfig);
const loginSite = {};
loginSite[tk] = response.site;
// Cookie.set()
localStorage.setItem('loginSite', JSON.stringify(loginSite));
self.writeLogs();
self.getIndustry(false, tk);
} else {
message.error(response.errMsg);
if (self.goLogin()) {
return false;
}
// self.handleLoginError(failCallback);
}
self.updateConfig && self.updateConfig(self.globalConfig);
self.getUserInfoAndConfig();
} catch (error) {
console.log(error);
if (self.goLogin()) {
return false;
}
// self.handleLoginError(failCallback);
}
});
} else {
......@@ -626,6 +699,7 @@ class Login {
/* eslint-disable */
let _industrySite = null;
if (industry) {
const userInfo =
self.globalConfig.userInfo &&
self.globalConfig.userInfo.Groups &&
......@@ -659,7 +733,7 @@ class Login {
if (self.isSignIn || !!industry) {
// eslint-disable-next-line no-undef
appService.getUserInfo(
getUserInfo(
{
token,
subOID: 'subOID',
......@@ -677,8 +751,14 @@ class Login {
self.globalConfig.userInfo = Object.assign(
{},
response,
self.globalConfig.userInfo,
// self.globalConfig.userInfo,
);
if(response.hasOwnProperty('data')) {
self.globalConfig.userInfo = {
// ... self.globalConfig.userInfo,
...response.data
}
}
const date = new Date();
date.setTime(date.getTime() + 24 * 60 * 60 * 1000);
// date = date.toGMTString();
......@@ -739,9 +819,13 @@ class Login {
if(response.access_token!== "") {
self.globalConfig.access_token = response.access_token;
localStorage.setItem('access_token', response.access_token);
Cookies.set('city', self.globalConfig.client, {
expires: exp / (24 * 60 * 60 * 1000),
path: '/',
})
}
if (isRememberPWD) {
Cookies.set(self.globalConfig.client, token, {
Cookies.set('city', self.globalConfig.client, {
expires: exp / (24 * 60 * 60 * 1000),
path: '/',
});
......@@ -769,9 +853,11 @@ class Login {
usr = userPhone ? userPhone: usr;
appService.authorizationToken({
loginName: usr,
password: pwd ? sha1(pwd).toUpperCase(): '',
type: mode
password: pwd ? (params.getParams('generateType') ? pwd : sha1(pwd).toUpperCase()) : '',
type: mode,
generateType: params.getParams('generateType') || ''
}).then(res => {
if(res.code === 0) {
const data = res.data;
self.updateConfig && self.updateConfig(Object.assign({}, self.globalConfig, {
......@@ -781,7 +867,7 @@ class Login {
return data
} else {
message.error({
duration: 300,
duration: 3,
content: `授权失败:${res.msg}`
});
self.events.emit('loginError', res.msg);
......@@ -797,18 +883,21 @@ class Login {
expiration: this.globalConfig.expiration, // token过期时间(单位:秒)
client: 'referer',
username: usr,
password: pwd ? sha1(pwd).toUpperCase() : '',
password: pwd ? (params.getParams('generateType') ? pwd : sha1(pwd).toUpperCase()) : '',
referer: this.globalConfig.client,
skipMenuTest: 1,
userPhone,
'request.preventCache': Date.now(),
ignoreSite: true,
loginName: usr,
generateType: params.getParams('generateType') || ''
},
)
.then(response => {
self.transformLoginHander(response, isRememberPWD)
})
.catch(error => {
self.hasTry = true;
self.handleLoginError();
self.events.emit('loginError', error.message);
......
import 'kit_utils/lib/format';
import React, { forwardRef, useEffect, useRef, useState } from 'react';
import { params } from 'kit_utils';
import { connect } from 'react-redux';
import { useHistory, withRouter } from '@wisdom-utils/runtime';
import { actionCreators } from '@/containers/App/store';
import LoginAction from './login';
import { initMicroApps } from '../../../micro';
const Login = forwardRef((props, _ref) => {
const history = useHistory();
const [action, setAction] = useState(
() => new LoginAction(Object.assign({}, props, {history}), () => {}, true),
);
useEffect(() => {
action.globalConfig = props.global;
}, [props.global]);
useEffect(() => {
action &&
action.events.on('loginSuccess', event => {
//http://127.0.0.1:8080/civbase/civweb4/
// props.updateConfig(Object.assign({}, props.global, {
// homepage: params.getParams('redirect')
// }));
// props.history.push('/' + params.getParams('redirect'))
props.history.push(`/?client=${props.global.client}&generateType=${props.global.generateType}`);
// window.share.event.emit('triggerMicro', props.global);
initMicroApps();
});
}, [props.globalConfig && props.globalConfig.userInfo])
return <div>{props.children}</div>;
});
const mapStateToProps = state => ({
global: state.getIn(['global', 'globalConfig']),
loginMode: state.getIn(['global', 'loginMode']),
});
const mapDispatchToProps = dispatch => ({
updateConfig(config) {
dispatch(actionCreators.getConfig(config));
},
createContext(data) {
dispatch(actionCreators.createContext(data));
},
updateLoginMode(mode) {
dispatch(actionCreators.changeLoginMode(mode));
},
updateCurrentIndex(index) {
dispatch(actionCreators.updateCurrentIndex(index));
},
});
export default connect(
mapStateToProps,
mapDispatchToProps,
)(Login);
......@@ -17,6 +17,7 @@ import styles from '../style.less';
import useRenderQcode from '../js/useRenderQcode';
import Account from '../js/useAccount';
import IotComponent from '../js/useIOTComponent';
import { initMicroApps } from '../../../../micro';
const Login = forwardRef((props, _ref) => {
const videoRef = useRef();
const loginRef = useRef();
......@@ -61,8 +62,10 @@ const Login = forwardRef((props, _ref) => {
action && action.events.on('loginSuccess', event => {
setSubmitting(false);
props.updateCurrentIndex && props.updateCurrentIndex(0);
props.history.push(`/?client=${props.global.client}`);
window.share.event.emit('triggerMicro', props.global);
props.history.push(`/`);
// debugger
// window.share.event.emit('triggerMicro', props.global);
initMicroApps();
});
action && action.events.on('loginError', event => {
setVisible(false);
......@@ -78,7 +81,8 @@ const Login = forwardRef((props, _ref) => {
action &&
action.events.on('loginSuccess', event => {
props.history.push(`/?client=${props.global.client}`);
window.share.event.emit('triggerMicro', props.global);
// window.share.event.emit('triggerMicro', props.global);
initMicroApps();
});
action &&
action.events.on('loginError', event => {
......
......@@ -9,7 +9,8 @@
import React from 'react';
import styles from './style/infoLogin.less'
import { connect } from 'react-redux';
import { withRouter } from 'react-router-dom';
// import { withRouter } from 'react-router-dom';
import { withRouter } from '@wisdom-utils/runtime';
import Logo from '@/assets/oa/login/信息化logo.png'
import Code from '@/assets/oa/login/扫码.png'
import Web from '@/assets/oa/login/电脑.png'
......@@ -23,6 +24,7 @@ import UnSelected from '@/assets/oa/login/unselected.jpg'
import LoginAction from '../login';
import { actionCreators } from '@/containers/App/store';
import Cookies from 'js-cookie';
import { initMicroApps } from '../../../../micro';
const Logger = logger('login');
// 、登录页
class InfoLogin extends React.Component{
......@@ -107,7 +109,8 @@ changeQrCode=(item)=>{
action && action.events.on('loginSuccess', event => {
this.props.updateCurrentIndex && this.props.updateCurrentIndex(0);
this.props.history.push(`/?client=${this.props.global.client}`);
window.share.event.emit('triggerMicro', this.props.global);
// window.share.event.emit('triggerMicro', this.props.global);
initMicroApps();
});
action && action.events.on('loginError', event => {
......
.InfoBg{
width: 100%;
height: 100%;
background-image: url('../../../../../assets/images/login/榆林/背景.jpg');
background-size: cover;
background-repeat: no-repeat;
position: relative;
.loginBg{
position: absolute;
top: 50%;
left: 50%;
margin-left: -385px;
margin-top: -226px;
width: 770px;
height: 452px;
.IBcenter{
width: 100%;
height: 89.5%;
.IBCleft{
width: 50%;
height: 100%;
background-image: url('../../../../../assets/images/login/榆林/左图.png');
background-size: 100% 100%;
background-repeat: no-repeat;
float: left;
}
.IBCright{
width: 50%;
height: 100%;
float: left;
background: rgba(255,255,255,0.8);
}
}
.IBtitle{
width: 100%;
height: 10.5%;
text-align: center;
img{
width: 70%;
height: 100%;
}
}
.title{
font-family: SourceHanSansCN-Medium;
font-weight: bold;
color: #43484D;
position: absolute;
top: 21px;
right: 50%;
margin-right: -285px;
line-height: 1;
width: 570px;
text-align: center;
overflow-wrap: break-word;
font-size: 24px;
img{
margin-right: 14px;
}
}
.ddCode{
position: absolute;
top: 50px;
right: -9px;
cursor: pointer;
}
.titleImg {
position: absolute;
top: 132px;
right: 133px;
}
.loginForm{
width: 280px;
margin: 9% auto 25%;
.formgroup{
position: relative;
line-height: 1;
display: flex;
align-items: center;
.IBCRimg{
top: 33px;
}
img{
position: absolute;
left: 10px;
top: 50%;
}
.eyes{
left: 89%;
margin-top: 10px;
cursor: pointer;
}
input[type="checkbox"] {
width: 12px;
height: 12px;
}
input {
font-size: 16px;
outline: 0;
}
span {
position: relative;
top: 0px;
}
.formControl{
display: block;
width: 100%;
}
.inputLg{
padding-left: 42px;
color: #2D3033;
border: none;
box-shadow: none;
border-radius: 0;
padding: 10px 50px;
line-height: 1.3333333;
margin-top: 21px;
}
}
.submitBtn {
width: 100%;
background-color: #0599F4 !important;
border: none !important;
color: #fff !important;
outline: none !important;
border-color: transparent !important;
height: 40px;
line-height: 40px;
font-size: 18px;
text-align: center;
margin-top: 25px;
cursor: pointer;
}
}
.login_container {
position: absolute;
top: 59%;
left: 52%;
margin-left: 150px;
margin-top: -219px;
width: 400px;
height: 500px;
}
.wxlogin_container{
position: absolute;
top: 60%;
left: 55%;
margin-left: 150px;
margin-top: -219px;
width: 300px;
height: 300px;
background: #fff;
}
.changeCode {
position: absolute;
top: 80%;
left: 75%;
align-items: center;
font-size: 14px;
display: flex;
}
}
.IBCRnamec{
margin-top: 15%;
height: 22px;
font-size: 22px;
letter-spacing: 1px;
font-family: PingFang SC;
font-weight: bold;
color: #0599F4;
line-height: 37px;
text-align: center;
margin-bottom: 0;
}
.IBCRnameE{
height: 9px;
font-size: 1px;
color: #0599F4;
line-height: 32px;
text-align: center;
}
.rmpwdInput{
display: inline-block;
width: 20px;
height: 20px;
border-radius: 10px;
border: 1px solid #0599F4;
position: relative;
cursor: pointer;
span{
font-size: 12px;
color: #fff;
visibility: hidden;
position: absolute;
top: 3px;
left: -7px;
}
}
.active{
display: inline-block;
width: 20px;
height: 20px;
border-radius: 10px;
border: 1px solid #0599F4;
position: relative;
cursor: pointer;
background-color: #0599F4;
span{
visibility: visible;
color: #fff;
font-size: 15px;
color: #fff;
position: absolute;
top: 3px;
left: 1px;
font-weight: bold;
}
}
.codeBox{
width: 34px;
height: 34px;
position: absolute;
right: -34px;
bottom: 0px;
background: rgba(255, 255, 255, 0.7);
padding: 6px;
border-radius: 0 3px 3px 0;
cursor: pointer;
}
.codeImg{
width: 23px;
}
.codeBig{
width: 128px;
height: 150px;
position: absolute;
bottom: 0;
left: 0px;
background: rgba(255, 255, 255, 0.7);
padding: 6px;
display: none;
justify-content: space-around;
span{
font-size: 12px;
font-weight: 100;
}
}
.codeBox:hover .codeBig{
display: block;
}
.codeBox:hover .codeImg{
display: none;
}
.codeText{
font-size: 14px;
font-family: PingFang SC;
font-weight: bold;
color: #121F2B;
text-align: center;
line-height: 24px;
}
.codeBox:hover .codeBig {
display: flex;
}
.IBtimeBox{
}
.IBTtime{
position: absolute;
width: 88px;
height: 26px;
font-size: 32px;
font-family: Microsoft YaHei UI;
font-weight: 400;
color: #FFFFFF;
line-height: 34px;
top: 34px;
right: 130px;
}
.IBTweek{
position: absolute;
top: 25px;
right: 69px;
height: 15px;
font-size: 16px;
font-family: Source Han Sans CN;
font-weight: 200;
color: #FFFFFF;
line-height: 30px;
}
.IBTdate{
position: absolute;
top: 46px;
right: 36px;
width: 80px;
height: 13px;
font-size: 14px;
font-family: Microsoft YaHei UI;
font-weight: 300;
color: #FFFFFF;
line-height: 30px;
}
}
\ No newline at end of file
/* eslint-disable */
/*
* @Author: xule;
* @Date: 2021-11-22
* @Description:榆林登录页;
*/
import React from 'react';
import styles from './style/yulin.less'
import classNames from 'classnames';
import { connect } from 'react-redux';
import { CheckOutlined } from '@ant-design/icons';
import { withRouter } from '@wisdom-utils/runtime';
import Logo from '@/assets/images/login/榆林/标题.png'
import Code from '@/assets/images/login/榆林/小程序@2x.png'
import MyHead from '@/assets/images/login/榆林/d-我的.png'
import PassWord from '@/assets/images/login/榆林/密码.png'
import Close from '@/assets/oa/login/close.png'
import Open from '@/assets/oa/login/open.png'
import LoginAction from '../login';
import { actionCreators } from '@/containers/App/store';
import Cookies from 'js-cookie';
import QRCode from 'qrcode.react';
import { initMicroApps } from '../../../../micro';
const Logger = logger('login');
// 、登录页
class InfoLogin extends React.Component {
state = {
loginStyle: false, //true 账号密码登录 false 扫码登录
isOpen: false, //查看密码
isRember: false, //记住密码
ddOrWeixin: '',
qrcode: '',//二维码
codeLenth: 1,
time: '',
week: '',
date: ''
}
componentDidMount() {
let action = new LoginAction(this.props, false, true)
this.loginEvent(action);
this.renderQRcode();
this.renderTime();
}
renderQRcode() {
var me = this;
var list = globalConfig.qrcode ? globalConfig.qrcode.split("|") : [];
let str = [];
if (list.length) {
list.forEach(function (val, index) {
if (val && val.replace(/ /g, "").length > 0) {
str.push(me.creatCodeHtml(val, index));
}
})
} else {
str.push(<span>手持APP下载未配置</span>);
}
this.setState({
qrcode: str,
codeLenth: list.length
})
}
renderTime() {
let me = this;
setInterval(() => {
const date = new Date();
const weekday = ['周日', '周一', '周二', '周三', '周四', '周五', '周六'];
const time = `${date.getHours() < 10 ? `0${date.getHours()}` : date.getHours()
}:${date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes()}`;
me.setState({
time,
week: weekday[date.getDay()],
date: date.pattern('yyyy/MM/dd'),
})
}, 1000);
}
creatCodeHtml(val, index) {
return (
<div className={('codeCase codeCase' + index)}>
<QRCode value={val.replace(/{ip}/ig, globalConfig.ip).split('=')[0]} />
<div className={styles.codeText}>{val.replace(/{ip}/ig, globalConfig.ip).split('=')[0]}</div>
</div>);
}
// 切换登录方式
changeloginStyle = () => {
const { ddOrWeixin } = this.state
this.setState({
loginStyle: !this.state.loginStyle,
ddOrWeixin: ddOrWeixin ? '' : 'dingding'
}, () => {
Cookies.set('loginMode', `${this.state.ddOrWeixin ? 'dingding' : 'pdw'}`, {
path: '/',
});
if (this.state.ddOrWeixin === 'dingding') {
let action = new LoginAction(this.props, false, true)
action.loginByDD()
}
})
}
// 查看密码
seePassWord = (e) => {
this.setState({
isOpen: !this.state.isOpen
})
}
// 记住密码
remberWord = () => {
this.setState({
isRember: !this.state.isRember
})
}
// 输入框变化
handleForm = (e) => {
const target = e.target
// 判断事件类型,如果是checkbox返回checked值,不是返回文本框的value值
const value = target.type == 'checkbox' ? target.checked : target.value;
// 获取文本框的name值
const name = target.name
this.setState({
[name]: value
})
}
onKeyDownchange(e){
if(e.keyCode == 13){
this.loginToWeb5();
}
}
// 登录
loginToWeb5 = () => {
const { loginName, passWord, isRember } = this.state
let action = new LoginAction(this.props, false, true)
action.loginHandler(loginName, passWord, null, isRember, false)
this.loginEvent(action)
}
// 登录成功事件
loginEvent(action) {
action.globalConfig = this.props.global;
this.props.updateCurrentIndex && this.props.updateCurrentIndex(-1);
action && action.events.on('loginSuccess', event => {
this.props.updateCurrentIndex && this.props.updateCurrentIndex(0);
this.props.history.push(`/?client=${this.props.global.client}`);
// window.share.event.emit('triggerMicro', this.props.global);
initMicroApps();
});
action && action.events.on('loginError', event => {
});
action && action.events.on('loginVisible', status => {
});
}
render() {
const { loginStyle, isOpen, isRember, loginName, passWord, qrcode, codeLenth, time, week, date } = this.state
return (
<div className={styles.InfoBg}>
<div className={styles.IBtimeBox}>
<span className={styles.IBTtime}>{time}</span>
<span className={styles.IBTweek}>{week}</span>
<span className={styles.IBTdate}>{date}</span>
</div>
<div className={styles.loginBg}>
{/* 标题 */}
<div className={styles.IBtitle}>
<img src={Logo} alt="" />
</div>
<div className={styles.IBcenter}>
<div className={styles.IBCleft}></div>
<div className={styles.IBCright}>
<p className={styles.IBCRnamec}>榆林清水工业园智慧水务平台</p>
<p className={styles.IBCRnameE}>Smart Water Platform of Yulin Qingshui Industrial Park</p>
{/* 登录主题 */}
<form className={styles.loginForm} style={{ display: loginStyle ? 'none' : '' }}>
<div className={styles.formgroup}>
<img className={styles.IBCRimg} src={MyHead} alt="" />
<input type="text" className={styles.inputLg} id='loginName' name='loginName' value={loginName} onChange={this.handleForm} placeholder="请输入你的用户名" />
</div>
<div className={styles.formgroup}>
<img className={styles.IBCRimg} src={PassWord} alt="" />
<input type={isOpen ? 'text' : "password"} className={styles.inputLg} onKeyDown={e=> this.onKeyDownchange(e)} id='passWord' name='passWord' value={passWord} onChange={this.handleForm} placeholder="请输入你的密码" />
<img className={styles.eyes} src={isOpen ? Open : Close} alt="" onMouseDown={(e) => this.seePassWord(e)} onMouseUp={(e) => this.seePassWord(e)} />
</div>
<div className={styles.formgroup} style={{ position: 'relative', marginTop: '20px' }}>
<label className={classNames(isRember ? (styles.rmpwdInput, styles.active) : styles.rmpwdInput)} onClick={() => this.remberWord()}>
<CheckOutlined style={{ display: isRember ? '' : 'none' }} />
</label>
<span style={{ color: '#9FA8B3', marginLeft: '10px', fontSize: '14px' }}>记住密码</span>
</div>
<div className={styles.submitBtn} onClick={this.loginToWeb5}>登录</div>
</form>
</div>
<div className={styles.codeBox}>
<img className={styles.codeImg} src={Code} alt="" />
<div className={styles.codeBig} style={{ width: codeLenth * 148 + 'px' }}>
{qrcode}
</div>
</div>
</div>
</div>
</div>
)
}
}
const mapStateToProps = state => ({
global: state.getIn(['global', 'globalConfig']),
loginMode: state.getIn(['global', 'loginMode']),
});
const mapDispatchToProps = dispatch => ({
updateConfig(config) {
dispatch(actionCreators.getConfig(config));
},
createContext(data) {
dispatch(actionCreators.createContext(data));
},
updateLoginMode(mode) {
dispatch(actionCreators.changeLoginMode(mode));
},
updateCurrentIndex(index) {
dispatch(actionCreators.updateCurrentIndex(index));
},
});
export default connect(
mapStateToProps,
mapDispatchToProps,
)(withRouter(InfoLogin));
import React from 'react';
import ReactDOM from 'react-dom';
import store from './stores'
import { history } from '@wisdom-utils/runtime';
import { Provider } from 'react-redux';
import { ConfigProvider } from 'antd';
import { ConnectedRouter } from 'connected-react-router/immutable';
import ErrorBoundary from './components/ErrorBoundary';
import Container from './components/Container';
import { LocaleContainer } from './locales/locale';
import App from './containers/App';
const MOUNT_NODE = document.getElementById('root');
export const render = () => {
// eslint-disable-next-line react-hooks/rules-of-hooks
ReactDOM.render(
<Provider store={store}>
<ConnectedRouter history={history}>
<LocaleContainer>
<ConfigProvider prefixCls="panda-console-base">
<ErrorBoundary>
<Container>
<App />
</Container>
</ErrorBoundary>
</ConfigProvider>
</LocaleContainer>
</ConnectedRouter>
</Provider>,
MOUNT_NODE,
);
};
// updateTheme('#ff9600');
const loader = (appContent, loading) => render({ appContent, loading });
export default loader;
\ No newline at end of file
......@@ -4,10 +4,12 @@ import { dynamic } from '@wisdom-utils/runtime';
import BasicLayout from '../layouts/BasicLayout1';
import UserLayout from '../layouts/UserLayout';
import BootPage from '../pages/bootpage';
import Iframe from '../pages/iframe';
import Login from '../pages/user/login';
import CommonMenu from '../pages/commonMenu';
import NoSecret from '../pages/user/login/noSecret';
export const dyRoutes = routes => {
export const dyRoutes = (routes, layout) => {
// eslint-disable-next-line no-shadow
const dyRoutes = routes || [];
return {
......@@ -21,6 +23,11 @@ export const dyRoutes = routes => {
path: '/user/login',
component: Login,
},
{
name: 'noscret',
path: '/user/noscret',
component: NoSecret
}
],
},
{
......@@ -35,7 +42,11 @@ export const dyRoutes = routes => {
{
path: '/commonmenu',
component: CommonMenu,
name: 'commonmenu'
name: '菜单收藏'
},
{
path: '/iframe',
component: Iframe
},
{
path: '/404',
......
import { history } from '@wisdom-utils/runtime';
import Immutable from 'immutable';
const initialState = Immutable.Map();
import configureStore from './configureStore';
const store = configureStore(initialState, history);
export default store;
......@@ -6,4 +6,9 @@ store.on('event:route', (url) => {
window.share && window.share.event && window.share.event.on('event:logs', params => {
delete params.site;
appService.pvLogs(params);
})
});
// store.on('event:logout', () => {
// window.globalConfig = {};
// })
import { transformURL } from './utils';
import LoadingComponent from '@ant-design/pro-layout/es/PageLoading';
import {
dynamic
} from '@wisdom-utils/runtime';
import { matchPath, Route, Switch} from 'react-router';
import React, { Suspense, Fragment } from 'react';
export const isURL = function(url) {
......@@ -24,6 +27,19 @@ export const guid = function(prefix) {
return prefix + uuid.replace(/-/g, '.') + new Date().getTime();
};
function getParams(pathname) {
let ret = {};
const url = pathname ? pathname : decodeURIComponent(window.location.pathname);
if (url.indexOf('|') > -1) {
const params = url.split('|')[1];
params.split('&').map(item => ret[item.split("=")[0]] = item.split("=")[1])
return ret;
}
return ret;
}
function isAbsoluteURL(url) {
return /^([a-z][a-z\d\+\-\.]*:)?\/\//i.test(url);
};
......@@ -36,8 +52,9 @@ const getURL = url => {
};
const generRotes = (widgets, parent, level = 0) => {
const ret = [];
if(!widgets) {
if(!widgets || widgets.length === 0){
return
}
(widgets).forEach((item, index) => {
......@@ -64,6 +81,7 @@ const generRotes = (widgets, parent, level = 0) => {
item.widgets,
Object.assign({}, item, { path, key: subKey }),
_level_,
item.label
),
extData: {
...item,
......@@ -86,14 +104,15 @@ const generRotes = (widgets, parent, level = 0) => {
url = item.url
}
url = transformURL(url);
const convertURL = transformURL(item.icon.replace(/\s*/g, ''));
//url = url.replace(/[(\\|)|(&)]widget=[0-9]*/, '')
const convertURL = item.icon && transformURL(item.icon.replace(/\s*/g, ''));
const icon = (item && item.icon && item.icon !== null &&
isAbsoluteURL(convertURL) ? convertURL: /(\\|\/)/.test(convertURL) ?
window.globalConfig.transformDevAssetsBaseURL(transformURL(item.icon.replace(/\s*/g, ''))): item.icon
) || '';
const l = level ? level + 1 : -1;
const common = {
let common = {
name: item.label,
level: l,
component: 'BasicLayout',
......@@ -101,7 +120,8 @@ const generRotes = (widgets, parent, level = 0) => {
href: url,
target: isURL(url) ? '_blank' : '',
key: guid('panda'),
hideInMenu: l > 3 ? true: item.hideInMenu || false,
hideInMenu: item.label === '系统菜单组' ? true: item.hideInMenu,
//l > 3 ? true: item.hideInMenu || false,
alias: item.product || DEFAULT_APPLICATION,
extData: {
...item,
......@@ -109,11 +129,61 @@ const generRotes = (widgets, parent, level = 0) => {
},
parent,
};
if(/iframe/.test(url)) {
url = url.replace(/\/report/, '');
common = {
name: item.label,
level: l,
component: dynamic({ loader: () =>
import ( /* webpackChunkName: "p__[request]" */ `@/pages/${component}.js`), loading: LoadingComponent }),
path: baseURL !== '' ? transformURL(url) : '',
href: url,
target: isURL(url) ? '_blank' : '',
key: guid('panda'),
hideInMenu: item.label === '系统菜单组' ? true: item.hideInMenu,
//l > 3 ? true: item.hideInMenu || false,
alias: item.product || DEFAULT_APPLICATION,
extData: {
...item,
icon,
},
params: getParams(url),
parent,
}
}
ret.push(common);
}
});
return ret;
};
export const transformWidgets = (widgets) => {
if(!widgets || widgets.length === 0) {
return []
}
return widgets.map(item => {
const widgets = item.widgets;
const homepage = window.globalConfig.homepage;
const homePageConvertArray = homepage.split("/");
const findIndex = widgets && widgets.findIndex(item => item.label === '系统菜单组');
if(findIndex === -1 && homePageConvertArray[0] !== 'civweb4') {
const index = widgets.findIndex(item => item.label === '首页');
if(index === -1) {
widgets.push({
label: "首页",
icon: '',
product: homePageConvertArray[0],
shortName: "首页",
hideInMenu: true,
url: homePageConvertArray.slice(1, homePageConvertArray.length).join("/")
});
}
item.widgets = Array.from(new Set(widgets));
}
return item;
});
}
export function simpleNormalizeChildren(children) {
for (let i = 0; i < children.length; i++) {
if (Array.isArray(children[i])) {
......@@ -123,16 +193,21 @@ export function simpleNormalizeChildren(children) {
return children;
}
export const generFlatRoutes = (widgets, parent, subSystem) => {
export const generFlatRoutes = (widgets, parent, subSystem, modulePkg) => {
const treeKeys = [];
const flatMenu = [];
if(!widgets || Array.isArray(widgets) && widgets.length === 0) {
return [];
}
(widgets || []).forEach(item => {
if (item.hasOwnProperty('routes')) {
const route = generFlatRoutes(item.routes, item, item.name);
const route = generFlatRoutes(item.routes, item, item.name, modulePkg);
flatMenu.push(simpleNormalizeChildren(route));
} else {
flatMenu.push({
...item,
origin: item,
moduleName: modulePkg[item.alias],
treeKeys,
subSystem,
parent,
......
......@@ -87,6 +87,8 @@ export function findPathByLeafId(leafId, nodes, path, key, clear) {
}
export function transformURL(path) {
//civweb4/
// path = path.replace(/[(\\|)|(&)]widget=[0-9]*/, '');
const el = document.createElement('input');
el.value = path;
String.fromCharCode(92);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment