diff --git a/admin-web/config/config.js b/admin-web/config/config.js index bbf147278..95c640a50 100644 --- a/admin-web/config/config.js +++ b/admin-web/config/config.js @@ -4,9 +4,13 @@ import pageRoutes from './router.config'; import webpackPlugin from './plugin.config'; import defaultSettings from '../src/defaultSettings'; import slash from 'slash2'; +import proxy from './proxy'; const { pwa, primaryColor } = defaultSettings; -const { NODE_ENV, APP_TYPE, TEST } = process.env; +const { NODE_ENV, APP_TYPE, TEST, BASE_PATH } = process.env; + +// 用于控制,部署非跟目录下 +const basePath = BASE_PATH ? BASE_PATH : ''; const plugins = [ [ @@ -60,6 +64,8 @@ if (APP_TYPE === 'site') { export default { // add for transfer to umi + base: basePath, + publicPath: basePath, plugins, define: { APP_TYPE: APP_TYPE || '', @@ -79,18 +85,7 @@ export default { '@antv/data-set': 'DataSet', bizcharts: 'BizCharts', }, - proxy: { - '/admin-api/': { - target: 'http://180.167.213.26:18083/', - changeOrigin: true, - pathRewrite: {}, - }, - '/server/api/': { - target: 'https://preview.pro.ant.design/', - changeOrigin: true, - pathRewrite: { '^/server': '' }, - }, - }, + proxy: proxy(NODE_ENV, basePath), ignoreMomentLocale: true, lessLoaderOptions: { javascriptEnabled: true, diff --git a/admin-web/config/proxy/index.js b/admin-web/config/proxy/index.js new file mode 100644 index 000000000..079f6dc16 --- /dev/null +++ b/admin-web/config/proxy/index.js @@ -0,0 +1,27 @@ +// development 和 production + +import path from 'path'; +import proxyDev from './proxy.dev'; +import proxyProd from './proxy.prod'; + +function basePathBuilder(proxys, basePath) { + for (const key in proxys) { + const proxy = proxys[key]; + const pathRewrite = proxy.pathRewrite; + const newPathRewrite = {}; + for (const key2 in pathRewrite) { + const item = pathRewrite[key2]; + newPathRewrite[key2] = path.join(basePath, item); + } + proxy.pathRewrite = newPathRewrite; + } + return proxys; +} + +export default function(NODE_ENV, basePath) { + let proxys = NODE_ENV === 'development' || NODE_ENV === 'undefined' ? proxyDev : proxyProd; + if (basePath) { + proxys = basePathBuilder(proxys, basePath); + } + return proxys; +} diff --git a/admin-web/config/proxy/proxy.dev.js b/admin-web/config/proxy/proxy.dev.js new file mode 100644 index 000000000..f9f2bbdda --- /dev/null +++ b/admin-web/config/proxy/proxy.dev.js @@ -0,0 +1,14 @@ +// 开发环境,的代理配置 + +export default { + '/admin-api/': { + target: 'http://180.167.213.26:18083/', + changeOrigin: true, + pathRewrite: {}, + }, + '/server/api/': { + target: 'https://preview.pro.ant.design/', + changeOrigin: true, + pathRewrite: { '^/server': '' }, + }, +}; diff --git a/admin-web/config/proxy/proxy.prod.js b/admin-web/config/proxy/proxy.prod.js new file mode 100644 index 000000000..968def624 --- /dev/null +++ b/admin-web/config/proxy/proxy.prod.js @@ -0,0 +1,16 @@ +// production 配置文件 + +export default { + '/admin-api/': { + target: 'http://180.167.213.26:18083/', + changeOrigin: true, + pathRewrite: { + '^/admin-api': `/admin-web/admin-api`, + }, + }, + '/server/api/': { + target: 'https://preview.pro.ant.design/', + changeOrigin: true, + pathRewrite: { '^/server': '' }, + }, +}; diff --git a/admin-web/config/server/README.md b/admin-web/config/server/README.md new file mode 100644 index 000000000..a1d0df88d --- /dev/null +++ b/admin-web/config/server/README.md @@ -0,0 +1,25 @@ + +# 使用说明 + + +### 第一步 + +``` +npm install + +``` + + +### 第二步 +复制文件到 server 目录 + +``` +cp -rf dist server +``` + +### 第三步 + +``` + node server.prod +``` + diff --git a/admin-web/config/server/config/chalk.config.js b/admin-web/config/server/config/chalk.config.js new file mode 100644 index 000000000..e6f6db99c --- /dev/null +++ b/admin-web/config/server/config/chalk.config.js @@ -0,0 +1,12 @@ +// +// 粉笔: +// 输出不同颜色的提示信息 + +const chalk = require('chalk'); + +module.exports = { + chalkError: chalk.red, + chalkSuccess: chalk.green, + chalkWarning: chalk.yellow, + chalkProcessing: chalk.blue, +}; diff --git a/admin-web/config/server/config/proxy.prod.config.js b/admin-web/config/server/config/proxy.prod.config.js new file mode 100644 index 000000000..a3ce7f6f4 --- /dev/null +++ b/admin-web/config/server/config/proxy.prod.config.js @@ -0,0 +1,10 @@ +module.exports = { + '/admin-api -> http://180.167.213.26:18083/': { + changeOrigin: true, + pathRewrite: {}, + }, + '/server/api -> https://preview.pro.ant.design/': { + changeOrigin: true, + pathRewrite: { '^/server': '' }, + }, +}; diff --git a/admin-web/config/server/package.json b/admin-web/config/server/package.json new file mode 100644 index 000000000..7944dbaf4 --- /dev/null +++ b/admin-web/config/server/package.json @@ -0,0 +1,10 @@ +{ + "name": "browser-work-server", + "description": "node server", + "dependencies": { + "express": "^4.16.3", + "object-assign": "4.1.1", + "chalk": "2.4.1", + "http-proxy-middleware": "^0.18.0" + } +} diff --git a/admin-web/config/server/pm2.json b/admin-web/config/server/pm2.json new file mode 100644 index 000000000..5dec00dbc --- /dev/null +++ b/admin-web/config/server/pm2.json @@ -0,0 +1,11 @@ +{ + "name": "admin-web", + "script": "./server.prod.js", + "instances": "2", + "env": { + "NODE_ENV": "development" + }, + "env_production": { + "NODE_ENV": "production" + } +} diff --git a/admin-web/config/server/server.prod.js b/admin-web/config/server/server.prod.js new file mode 100644 index 000000000..42aaf804f --- /dev/null +++ b/admin-web/config/server/server.prod.js @@ -0,0 +1,35 @@ +const path = require('path'); +const express = require('express'); + +const { chalkSuccess } = require('./config/chalk.config'); +const proxyConfig = require('./config/proxy.prod.config'); +const proxyBuild = require('./utils/proxy.build'); + +// create app server +const app = express(); +const port = 3000; + +// host proxy +app.use(proxyBuild(proxyConfig)); + +// use index.html +app.use(express.static(path.join(__dirname, 'dist/static'))); +app.use(express.static(path.join(__dirname, 'dist'))); + +app.use((req, res) => { + res.sendFile(path.join(__dirname, 'dist', 'index.html')); +}); + +app.listen(port, error => { + if (error) { + console.error(error); + } else { + console.info( + chalkSuccess( + '==> 🌎 Listening on port %s. ' + 'Open up http://localhost:%s/ in your browser.' + ), + port, + port + ); + } +}); diff --git a/admin-web/config/server/shell.sh b/admin-web/config/server/shell.sh new file mode 100644 index 000000000..9c9274d81 --- /dev/null +++ b/admin-web/config/server/shell.sh @@ -0,0 +1,24 @@ + +# 安装依赖包 + +cd mall + +cd admin-web + +npm install + +# 开始构建 + +npm run build + +# 创建 app 运行目录 + +mkdir app + +# 复制配置文件 + +cp -rf config/server app/ + +# 复制文件到 server 努力 + +cp -rf dist app/ diff --git a/admin-web/config/server/utils/proxy.build.js b/admin-web/config/server/utils/proxy.build.js new file mode 100644 index 000000000..e250fdd5b --- /dev/null +++ b/admin-web/config/server/utils/proxy.build.js @@ -0,0 +1,46 @@ +const proxy = require('http-proxy-middleware'); +const ObjectAssign = require('object-assign'); +const { chalkError, chalkSuccess } = require('../config/chalk.config'); + +/** + * + * key : + * [0]: /api + * [1]: target url + * + * 预计写法: + * 1、 /api -> baidu.com : { } + * 2、 /user : function() { return {} } + * + * @param config + */ +module.exports = function(config) { + console.info(chalkSuccess('build proxy.%s.config 配置!'), process.env.NODE_ENV); + + const proxys = []; + + if (!config) { + console.log(chalkError('proxy.%s.config 没有配置!'), process.env.NODE_ENV); + } + + for (const key in config) { + if (/->/.test(key)) { + const keys = key.toString().split('->'); + const source = keys[0].trim(); + const target = keys[1].trim(); + + if (typeof config !== 'object') { + console.log( + chalkError('%s: proxy.%s.config 初始化失败 config 类型为 object!'), + key, + process.env.NODE_ENV + ); + break; + } + + proxys.push(proxy(source, ObjectAssign({ target }, config[key]))); + } + } + + return proxys; +}; diff --git a/admin-web/mock/admin.js b/admin-web/mock/admin.js index 4a9df2b0e..5fac79368 100644 --- a/admin-web/mock/admin.js +++ b/admin-web/mock/admin.js @@ -44,8 +44,8 @@ function getDictionaryText(req, res) { } export default { - 'GET /admin-api/admins/resource/admin_menu_tree': getAdminMenuAll, - 'GET /admin-api/admins/resource/admin_url_list': getAdminUrls, + 'GET /admin-api/admins/admin/menu_resource_tree': getAdminMenuAll, + 'GET /admin-api/admins/admin/url_resource_list': getAdminUrls, 'GET /admin-api/admins/resource/tree': getResourceTree, 'GET /admin-api/admins/role/page': getQueryRole, 'GET /admin-api/admins/admin/page': getQueryRole, diff --git a/admin-web/mock/user.js b/admin-web/mock/user.js index 3db39da5f..207378386 100644 --- a/admin-web/mock/user.js +++ b/admin-web/mock/user.js @@ -74,9 +74,9 @@ export default { address: 'Sidney No. 1 Lake Park', }, ], - 'POST /admin-api/admin/passport/login': (req, res) => { - const { password, username } = req.body; - if (password === 'admin' && username === 'admin') { + 'POST /admin-api/admins/passport/login': (req, res) => { + const { username } = req.body; + if (username === 'admin') { res.send({ code: 0, data: { @@ -91,7 +91,7 @@ export default { res.send({ code: 1000, data: {}, - message: '账号或密码错误!', + message: '账号或密码错误-mock!', }); }, 'POST /api/register': (req, res) => { diff --git a/admin-web/package.json b/admin-web/package.json index b75d69109..435260d2f 100644 --- a/admin-web/package.json +++ b/admin-web/package.json @@ -7,7 +7,10 @@ "presite": "cd functions && npm install", "start": "cross-env APP_TYPE=site umi dev", "start:no-mock": "cross-env MOCK=none umi dev", + "start:admin-web": "cross-env BASE_PATH='/admin-web/' NODE_ENV=development APP_TYPE=site umi dev", + "start:admin-web:no-mock": "cross-env BASE_PATH='/admin-web/' NODE_ENV=development MOCK=none APP_TYPE=site umi dev", "build": "umi build", + "build:admin-web": "cross-env BASE_PATH='/admin-web/' NODE_ENV=production umi build", "site": "npm run presite && cross-env APP_TYPE=site npm run build && firebase deploy && npm run docker:push", "analyze": "cross-env ANALYZE=1 umi build", "lint:style": "stylelint 'src/**/*.less' --syntax less", diff --git a/admin-web/src/layouts/UserLayout.js b/admin-web/src/layouts/UserLayout.js index f4710ec83..f17467fce 100644 --- a/admin-web/src/layouts/UserLayout.js +++ b/admin-web/src/layouts/UserLayout.js @@ -36,14 +36,14 @@ const copyright = ( class UserLayout extends Component { componentDidMount() { - const { - dispatch, - route: { routes, authority }, - } = this.props; - dispatch({ - type: 'menu/getMenuData', - payload: { routes, authority }, - }); + // const { + // dispatch, + // route: { routes, authority }, + // } = this.props; + // dispatch({ + // type: 'menu/getMenuData', + // payload: { routes, authority }, + // }); } render() { diff --git a/admin-web/src/services/admin.js b/admin-web/src/services/admin.js index be01dffab..2aa104b4d 100644 --- a/admin-web/src/services/admin.js +++ b/admin-web/src/services/admin.js @@ -4,11 +4,11 @@ import request from '@/utils/request'; // auth export async function getAdminMenus() { - return request('/admin-api/admins/resource/admin_menu_tree'); + return request('/admin-api/admins/admin/menu_resource_tree'); } export async function getAdminUrls(params) { - return request(`/admin-api/admins/resource/admin_url_list?${stringify(params)}`); + return request(`/admin-api/admins/admin/url_resource_list?${stringify(params)}`); } // admin diff --git a/admin-web/src/services/api.js b/admin-web/src/services/api.js index 9a822c9ad..379e94c9f 100644 --- a/admin-web/src/services/api.js +++ b/admin-web/src/services/api.js @@ -104,14 +104,14 @@ export async function updateFakeList(params) { } export async function fakeAccountLogin(params) { - return request(`/admin-api/admin/passport/login?${stringify(params)}`, { + return request(`/admin-api/admins/passport/login?${stringify(params)}`, { method: 'POST', body: params, }); } export async function fakeRegister(params) { - return request(`/admin-api/admin/passport/login?${stringify(params)}`, { + return request(`/admin-api/admins/passport/login?${stringify(params)}`, { method: 'POST', body: params, });