diff --git a/.babelrc b/.babelrc deleted file mode 100644 index f169027..0000000 --- a/.babelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - presets: ['env', 'react'], - plugins: ['transform-runtime'] -} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 8e0b2b6..6bb4d89 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ # Logs -logs +/**/logs *.log npm-debug.log* yarn-debug.log* yarn-error.log* +.idea # Runtime data pids @@ -33,7 +34,7 @@ bower_components build/Release # Dependency directories -node_modules/ +/**/node_modules/ jspm_packages/ # Typescript v1 declaration files @@ -61,30 +62,30 @@ typings/ .DS_Store # Dist file -client/static/dist/* -client/static/assets/* +www/client/static/dist/* +www/client/static/assets/* # uploads static/wp-content/* # routers list -client/.routers.json +www/client/.routers.json # Icon fonts assets -client/static/iconfonts/fonts +www/client/static/iconfonts/fonts # static html files -client/static/html +www/client/static/html # common css -client/static/common/style/*.css +www/client/static/common/style/*.css # common js -client/static/common/js/*.g.js +www/client/static/common/js/*.g.js # admin dist and manifest file -admin/dist/ -admin/manifest.json +www-admin/admin/dist/ +www-admin/admin/manifest.json # config file config/index.js @@ -93,3 +94,9 @@ config/index.js package-lock.json nginx_conf/* + +#run file +run/ + +#vscode +.vscode/ \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index f8c1c45..a5a05bd 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,4 @@ -[submodule "admin/uskin"] - path = admin/uskin +[submodule "www-admin/admin/uskin"] + path = www-admin/admin/uskin url = https://github.com/unitedstack/uskin.git + diff --git a/.gitreview b/.gitreview new file mode 100644 index 0000000..e503e9e --- /dev/null +++ b/.gitreview @@ -0,0 +1,4 @@ +[gerrit] +host=review.ustack.com +port=29418 +project=ued/ashe.git diff --git a/admin/uskin b/admin/uskin deleted file mode 160000 index 84281f8..0000000 --- a/admin/uskin +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 84281f8f0adc92c4d6c9cdfe32ce205e8fdf415f diff --git a/config/default.js b/config/default.js new file mode 100644 index 0000000..0d2d3bb --- /dev/null +++ b/config/default.js @@ -0,0 +1,33 @@ +module.exports = ({ + keys:'tmoe', + sequelize:{ + dialect: 'mysql', // support: mysql, mariadb, postgres, mssql + database: 'ashe', + host: 'localhost', + port: '3306', + username: 'root', + password: '1234', + }, + security:{ + csrf:{ + enable:false + } + }, + smtp: { + host: 'smtp.qq.com', + port: 465, + secure: true, + auth: { + user: '', + pass: '' + } + }, + emailTemplate: { + logoUrl: 'https://www.tfcloud.com/static/assets/logo1.png', + homeUrl: 'https://www.tfcloud.com', + corporationName: 'TFCloud Inc. - www.tfcloud.com' + }, + emailAddress: { + contact: 'contact@unitedstack.com' + } +}); diff --git a/config/index.js.sample b/config/index.js.sample deleted file mode 100644 index a4c2400..0000000 --- a/config/index.js.sample +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; -const path = require('path'); - -const configObj = { - env: process.env.NODE_ENV || 'development', - log: { - 'accessLogPath': '/var/log/halo/access.log', - 'errorLogPath': '/var/log/halo/error.log', - 'debug': false, // true | false - 'format': 'combined', // 'combined' | 'common' | 'dev' | 'short' | 'tiny' - 'printAccessLog': true // true | false - }, - hl95: { - host: 'http://q.hl95.com:8061/', - username: '', - password: '', - epid: 0 - }, - image_upload: { - local: { - prefix: '/wp-content/upload/', // '/'或'/static/'或... - upload_path: path.join(__dirname, '../static/wp-content/upload') - } - }, - docs: { - repoPath: path.join(__dirname, '../static/repo'), - buildPath: path.join(__dirname, '../static/book'), - pdfPath: path.join(__dirname, '../static/pdf') - }, - sessionEngine: { - 'type': 'Memcached', // 'Redis' | 'Memcached' | 'Session' (do not use it in production) - 'remotes': ['127.0.0.1:11211'], - 'secret': 'uso_www', - 'cookie_name': 'ustack_www' - }, - port: 5555, - mysql: { - host: '127.0.0.1', - port: 3306, - user: 'root', - password: '1234', - database: 'ashe' - }, - smtp: { - host: 'smtp.qq.com', - port: 465, - secure: true, - auth: { - user: '', - pass: '' - } - }, - emailTemplate: { - logoUrl: 'https://www.tfcloud.com/static/assets/logo1.png', - homeUrl: 'https://www.tfcloud.com', - corporationName: 'TFCloud Inc. - www.tfcloud.com' - }, - emailAddress: { - contact: 'contact@unitedstack.com' - } -}; -const wwwConfig = Object.assign({}, configObj); - -function config(field) { - return wwwConfig[field]; -} - -module.exports = config; diff --git a/index.js b/index.js deleted file mode 100644 index e9f3127..0000000 --- a/index.js +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env node - -'use strict'; -const start = Date.now(); -const http = require('http'); - -const pkg = require('package.json'); -const app = require('server/app'); -const config = require('config'); - -const port = config('port') || 5000; - -console.log(`${pkg.name} booted in ${(Date.now()) - start}ms - port: ${port}`); - -const server = http.createServer(app.callback()); -server.listen(port); - -module.exports = server; diff --git a/nginx_conf/mime.types b/nginx_conf/mime.types deleted file mode 100644 index 89be9a4..0000000 --- a/nginx_conf/mime.types +++ /dev/null @@ -1,89 +0,0 @@ - -types { - text/html html htm shtml; - text/css css; - text/xml xml; - image/gif gif; - image/jpeg jpeg jpg; - application/javascript js; - application/atom+xml atom; - application/rss+xml rss; - - text/mathml mml; - text/plain txt; - text/vnd.sun.j2me.app-descriptor jad; - text/vnd.wap.wml wml; - text/x-component htc; - - image/png png; - image/tiff tif tiff; - image/vnd.wap.wbmp wbmp; - image/x-icon ico; - image/x-jng jng; - image/x-ms-bmp bmp; - image/svg+xml svg svgz; - image/webp webp; - - application/font-woff woff; - application/java-archive jar war ear; - application/json json; - application/mac-binhex40 hqx; - application/msword doc; - application/pdf pdf; - application/postscript ps eps ai; - application/rtf rtf; - application/vnd.apple.mpegurl m3u8; - application/vnd.ms-excel xls; - application/vnd.ms-fontobject eot; - application/vnd.ms-powerpoint ppt; - application/vnd.wap.wmlc wmlc; - application/vnd.google-earth.kml+xml kml; - application/vnd.google-earth.kmz kmz; - application/x-7z-compressed 7z; - application/x-cocoa cco; - application/x-java-archive-diff jardiff; - application/x-java-jnlp-file jnlp; - application/x-makeself run; - application/x-perl pl pm; - application/x-pilot prc pdb; - application/x-rar-compressed rar; - application/x-redhat-package-manager rpm; - application/x-sea sea; - application/x-shockwave-flash swf; - application/x-stuffit sit; - application/x-tcl tcl tk; - application/x-x509-ca-cert der pem crt; - application/x-xpinstall xpi; - application/xhtml+xml xhtml; - application/xspf+xml xspf; - application/zip zip; - - application/octet-stream bin exe dll; - application/octet-stream deb; - application/octet-stream dmg; - application/octet-stream iso img; - application/octet-stream msi msp msm; - - application/vnd.openxmlformats-officedocument.wordprocessingml.document docx; - application/vnd.openxmlformats-officedocument.spreadsheetml.sheet xlsx; - application/vnd.openxmlformats-officedocument.presentationml.presentation pptx; - - audio/midi mid midi kar; - audio/mpeg mp3; - audio/ogg ogg; - audio/x-m4a m4a; - audio/x-realaudio ra; - - video/3gpp 3gpp 3gp; - video/mp2t ts; - video/mp4 mp4; - video/mpeg mpeg mpg; - video/quicktime mov; - video/webm webm; - video/x-flv flv; - video/x-m4v m4v; - video/x-mng mng; - video/x-ms-asf asx asf; - video/x-ms-wmv wmv; - video/x-msvideo avi; -} diff --git a/package.json b/package.json index 6f2601c..b3f1588 100644 --- a/package.json +++ b/package.json @@ -4,21 +4,15 @@ "description": "Public cloud official website", "main": "index.js", "scripts": { - "start": "pm2 start pm2.json", - "client_build": "cd client/build && grunt build", - "client_dev": "cd client/build && grunt watch", - "admin_build": "cd admin && rm -rf dist/ && mkdir dist && cp -R uskin/dist/css dist/uskin && node build.js --production", - "admin_dev": "cd admin && rm -rf dist/*.* dist/dll manifest.json && node build.js --development", - "build": "npm run client_build && npm run admin_build", - "release": "npm run client_build && npm run admin_build", - "iconfont": "cd client/build && grunt font", - "palette": "cd client/build && grunt palette", - "merge_assets": "cd client/build && grunt copy_assets", - "html": "cd client/build && grunt html", - "eslint": "eslint *.js server/**/ scripts/ client/**/ admin/**/ --ext .js,.jsx --cache", - "add_eslint": "cd scripts && node checkPreCommit.js", - "prepare": "cd scripts && node checkPreCommit.js", - "preinstall": "cd scripts && node checkNodeVersion.js && cd ../admin/uskin && npm install" + "start": "cd www && npm start", + "start-admin": "cd www-admin && npm start", + "test": "cd www && npm test && cd ../www-admin && npm test", + "debug": "cd www && npm run debug", + "debug-admin": "cd www-admin && npm run debug", + "build": "cd www && npm run build && cd ../www-admin && npm run build", + "eslint": "cd www && npm run eslint && cd ../www-admin && npm run eslint", + "prepare": "cd www/scripts && node checkPreCommit.js", + "preinstall": "cd www && npm install && cd ../www-admin && npm install" }, "repository": { "type": "git", @@ -36,84 +30,6 @@ "url": "https://github.com/unitedstack/Ashe/issues" }, "homepage": "https://github.com/unitedstack/Ashe#readme", - "devDependencies": { - "autoprefixer": "^7.1.5", - "babel-core": "^6.26.0", - "babel-eslint": "^8.0.1", - "babel-loader": "^7.1.2", - "babel-plugin-transform-runtime": "^6.23.0", - "babel-preset-env": "^1.6.0", - "babel-preset-react": "^6.24.1", - "colors": "^1.1.2", - "compression-webpack-plugin": "^1.0.1", - "css-loader": "^0.28.7", - "ejs": "^2.5.7", - "eslint": "^4.8.0", - "eslint-plugin-babel": "^4.1.2", - "eslint-plugin-react": "^7.4.0", - "extract-text-webpack-plugin": "^3.0.1", - "file-loader": "^1.1.6", - "glob": "^7.1.2", - "grunt": "^1.0.1", - "grunt-banner": "^0.6.0", - "grunt-contrib-clean": "^1.1.0", - "grunt-contrib-copy": "^1.0.0", - "grunt-contrib-less": "^1.4.1", - "grunt-contrib-watch": "^1.0.0", - "grunt-rev": "^0.1.0", - "grunt-webfont": "^1.6.0", - "grunt-webpack": "^3.0.2", - "less": "^2.7.2", - "less-loader": "^4.0.5", - "less-plugin-autoprefix": "^1.5.1", - "less-var-parse": "^1.0.1", - "load-grunt-tasks": "^3.5.2", - "postcss-loader": "^2.0.6", - "time-grunt": "^1.4.0", - "uglifyjs-webpack-plugin": "^0.4.6", - "url-loader": "^0.6.2", - "webpack": "^3.9.1" - }, - "dependencies": { - "babel-polyfill": "^6.26.0", - "babel-runtime": "^6.26.0", - "bcrypt": "^1.0.3", - "boom": "^6.0.0", - "ccap": "^0.6.10", - "clipboard-plus": "^1.1.0", - "co": "^4.6.0", - "connect-memjs": "^0.2.1", - "fs-async-await": "0.0.3", - "koa": "^2.3.0", - "koa-bodyparser": "^4.2.0", - "koa-conditional-get": "^2.0.0", - "koa-etag": "^3.0.0", - "koa-json": "^2.0.2", - "koa-log4": "^2.2.1", - "koa-mount": "^3.0.0", - "koa-multer": "^1.0.2", - "koa-onerror": "^3.1.0", - "koa-router": "^7.2.1", - "koa-send": "^4.1.1", - "koa-session-minimal": "^3.0.4", - "koa-static": "^4.0.1", - "koa-validate": "^1.0.7", - "koa-views": "^6.1.1", - "lodash": "^4.17.4", - "memjs": "^0.10.2", - "mysql": "^2.15.0", - "nodemailer": "^4.4.0", - "normalize.css": "^7.0.0", - "react": "^15.4.2", - "react-dom": "^15.4.2", - "rsvp": "^4.7.0", - "sequelize": "^3.30.4", - "simditor": "^2.3.6", - "superagent": "^3.6.3", - "urlencode": "^1.1.0", - "uuid": "^3.1.0", - "wangeditor": "^2.1.22" - }, "engineStrict": true, "engines": { "node": ">=8" diff --git a/pm2.json b/pm2.json deleted file mode 100644 index 5feac98..0000000 --- a/pm2.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "ashe", - "watch": [ - "server" - ], - "script": "index.js", - "log_date_format": "YYYY-MM-DD HH:mm Z", - "env": { - "NODE_PATH": "server:.", - "NODE_ENV": "development" - }, - "env_production": { - "NODE_ENV": "production" - } -} diff --git a/server/app-admin/account/controller/account.js b/server/app-admin/account/controller/account.js deleted file mode 100644 index edfcfd7..0000000 --- a/server/app-admin/account/controller/account.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -const models = require('server/models').sequelize.models; -const modelAccount = models.account; -const tools = require('tools'); -const list = async () => { - return modelAccount.findAll({ - attributes: {exclude: ['password']} - }); -}; -const create = async (opt) => { - opt.password = await tools.password.hash(opt.password); - return modelAccount.create(opt); -}; -const update = async (id, opt) => { - let account = await modelAccount.findById(id); - if (!account) { - return Promise.reject({statusCode: 404, errors: [{message: '账户不存在'}]}); - } - delete opt.enable; - - if (opt.password) { - opt.password = await tools.password.hash(opt.password); - } - - Object.assign(account, opt); - return account.save(); - -}; -const enable = async (id, flag) => { - - let account = await modelAccount.findById(id); - if (!account) { - return Promise.reject({statusCode: 404, errors: [{message: '账户不存在'}]}); - } - return account.update({enable: flag}); -}; - -module.exports = {list, update, create, enable}; \ No newline at end of file diff --git a/server/app-admin/apply/controller/apply.js b/server/app-admin/apply/controller/apply.js deleted file mode 100644 index b3fbf5a..0000000 --- a/server/app-admin/apply/controller/apply.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; - -const models = require('models').sequelize.models; -const cloudModel = models.apply_cloud; -const trainModel = models.apply_train; - -const listCloudApply = function () { - return cloudModel.findAll(); -}; -const listTrainApply = function () { - return trainModel.findAll(); -}; - -module.exports = {listCloudApply, listTrainApply}; diff --git a/server/app-admin/apply/routes/apply.js b/server/app-admin/apply/routes/apply.js deleted file mode 100644 index f912287..0000000 --- a/server/app-admin/apply/routes/apply.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -const controller = require('../controller/apply'); - -module.exports = async (router) => { - router.get('/api/apply/private-cloud', async (ctx, next) => { - - let list = await controller.listCloudApply(); - ctx.body = { - statusCode: 200, - message: '获取托管云申请成功', - payload: { - list - } - }; - }); - router.get('/api/apply/train', async (ctx, next) => { - let list = await controller.listTrainApply(); - ctx.body = { - statusCode: 200, - message: '获取培训申请成功', - payload: { - list - } - }; - }); -}; diff --git a/server/app-admin/article/controller/article.js b/server/app-admin/article/controller/article.js deleted file mode 100644 index 8439ba9..0000000 --- a/server/app-admin/article/controller/article.js +++ /dev/null @@ -1,210 +0,0 @@ -'use strict'; - -const tools = require('tools'); -const models = require('server/models').sequelize.models; -const articleModel = models.article; - -const handleTagForArticle = function*(article, tagsString) { - let tagsNew = JSON.parse(tagsString); - let tagsOld = JSON.parse(article.tags); - if (tools._.difference(tagsOld, tagsNew).length || tools._.difference(tagsNew, tagsOld).length) { - yield models.article_tag.destroy({where: {articleId: article.id}, force: true}); - yield [ - models.article_tag.bulkCreate(tagsNew.map(tag => { - return { - articleId: article.id, - tag: tag, - category: article.category - }; - })), - article.update({'tags': tagsString}) - ]; - } -}; - - -const create = async function (body, author) { - body.authorName = author.nickname; - body.authorId = author.id; - if (body.url) { - body.url = encodeURI(body.url); - } - - let article = await articleModel.create(body); - let tags = []; - if (body.tags) { - tags = JSON.parse(body.tags); - } else { - body.tags = JSON.stringify([]); - } - - if (!body.url) { - article.url = article.id; - await article.save(); - } - - await models.article_tag.bulkCreate(tags.map(tag => { - return { - articleId: article.id, - tag: tag, - category: article.category - }; - })); - return article; -}; - -const get = async function (id) { - let article = await articleModel.findById(id); - article.url = decodeURI(article.url); - return article; -}; - -const list = async function (query) { - //query.status: - //query.tags:"['hello']" - //query.month:2017-02 - //query.page - //query.limit - //query.category - //query.search - - let obj = {where: {}, attributes: {exclude: ['content']}}; - if (query.search) { - obj.where.title = { - $like: '%' + decodeURI(query.search) + '%' - }; - } - - if (query.tags) { - query.tags = JSON.parse(query.tags); - obj.include = [ - { - model: models.article_tag, - where: {tag: {$in: query.tags}} - } - ]; - } - - query.limit = obj.limit = parseInt(query.limit) || 10; - query.page = parseInt(query.page) > 0 ? parseInt(query.page) : 1; - obj.offset = (query.page - 1) * query.limit; - - if (query.month) { - obj.where.createdAt = {}; - obj.where.createdAt.$gt = new Date(query.month); - let yearAndMonth = query.month.split('-'); - if ('12' === yearAndMonth[1]) { - yearAndMonth[0]++; - yearAndMonth[1] = ['01']; - } else if ('09' === yearAndMonth[1] || '10' === yearAndMonth[1] || '11' === yearAndMonth[1]) { - yearAndMonth[1]++; - } else { - yearAndMonth[1] = '0' + (++yearAndMonth[1]); - } - obj.where.createdAt.$lt = new Date(yearAndMonth.join('-')); - } - - if (query.status) { - if ('top' === query.status) { - obj.where.top = true; - } else { - obj.where.status = query.status; - } - } - - if (query.category) { - obj.where.category = query.category; - } - obj.order = [ - ['createdAt', 'DESC'] - ]; - - let result = await articleModel.findAndCount(obj); - return { - articles: result.rows, - count: result.count, - page: query.page, - limit: query.limit, - prev: query.page > 1 ? query.page - 1 : null, - next: result.count > query.page * query.limit ? query.page + 1 : null - }; -}; - -const update = async function (articleId, body) { - let article = await articleModel.find({where: {id: articleId}}); - if (body.tags) { - await handleTagForArticle(article, body.tags); - } - if (!article) { - return Promise.reject({statusCode: 404, errors: [{message: '文章不存在'}]}); - } - if (body.url) { - body.url = encodeURI(body.url); - } - delete body.status; - Object.assign(article, body); - article = await article.save(); - return article; -}; - -const updateField = async (articleId, field, value) => { - const fields = ['title', 'introduction', 'content', 'tags', 'url', 'cover', 'time']; - if (fields.indexOf(field) < 0) { - return Promise.reject({statusCode: 400, errors: [{message: '错误的请求参数'}]}); - } - - let article = await articleModel.findOne({where: {id: articleId}}); - if (!article) { - return Promise.reject({statusCode: 404, errors: [{message: '文章不存在'}]}); - } - if ('tags' === field) { - await handleTagForArticle(article, value); - } else if ('url' === field) { - let update = {}; - update[field] = encodeURI(value); - article = await article.update(update); - } else { - let update = {}; - update[field] = value; - article = await article.update(update); - } - return article; -}; - - -const listTag = () => { - return models.article_tag.count({ - attributes: ['category', 'tag'], - group: ['category', 'tag'] - }); -}; - -const setLevel = (articleId, level) => { - level = parseInt(level); - if (articleId && level >= 0 && level <= 9) { - return articleModel.update({level}, {where: {id: articleId}}); - } -}; - - -const setTop = (articleId, top) => { - return articleModel.update({top}, {where: {id: articleId}}); -}; - -const setStatus = async (articleId, status) => { - let statuses = ['public', 'private', 'trash', 'draft']; - let article = await articleModel.findOne({where: {id: articleId}}); - if (!article) { - return Promise.reject({status: 404, message: '文章不存在'}); - } - if (statuses.indexOf(status) < 0) { - return Promise.reject({status: 400, message: '参数错误'}); - } - return await article.update({status}); -}; - - -module.exports = { - create, get, list, update, updateField, listTag, - setLevel, setTop, setStatus -}; diff --git a/server/app-admin/article/controller/media.js b/server/app-admin/article/controller/media.js deleted file mode 100644 index 41c881b..0000000 --- a/server/app-admin/article/controller/media.js +++ /dev/null @@ -1,182 +0,0 @@ -'use strict'; - -const models = require('server/models').sequelize.models; - -const childProcess = require('child_process'); -const path = require('path'); -const fs = require('fs'); - -const co = require('co'); -const _ = require('lodash'); -const multer = require('koa-multer'); -const uuid = require('uuid'); - -const mediaModel = models.media; -const mediaTagModel = models.media_tag; - -const config = require('config')('image_upload'); - - -const mediaPath = config.local.upload_path; -const mediaSizeLimit = 10 * 1024 * 1024; - -const storage = multer.diskStorage({ - destination: mediaPath, - filename: function (req, file, cb) { - let u = uuid.v4(); - fs.mkdir(path.join(mediaPath, u), err => { - if (err) { - cb(err); - } else { - cb(null, u + '/' + file.originalname); - } - }); - } -}); - -const upload = multer({storage: storage, limits: {fileSize: mediaSizeLimit}}); - -const middlewareCreate = function (router, url) { - router.post( - url, - upload.single('media'), - async (ctx, next) => { - let file = ctx.req.file; - let arr = file.path.split('/'); - let fileToReturn = { - name: file.originalname, - size: file.size, - mimetype: file.mimetype, - state: 'SUCCESS', - prefix: config.local.prefix, - filename: arr[arr.length - 2] + '/' + arr[arr.length - 1], - }; - let position = 'local'; - - - await mediaModel.create(Object.assign( - {position, tags: '', userId: ctx.session.admin_user.id}, - fileToReturn - )); - - if (ctx.query.editor) { - ctx.body = fileToReturn.prefix + fileToReturn.filename; - } else { - ctx.body = fileToReturn; - } - }); -}; - -const del = (ctx) => { - return co(function *() { - let mediaId = ctx.params.id; - let media = yield mediaModel.findById(mediaId); - if (!media) { - return; - } - - childProcess.exec('rm -rf ' + path.join(mediaPath, media.filename.split('/')[0])); - - yield [ - media.destroy({force: true}), - mediaTagModel.destroy({ - where: {mediaId: media.id}, - force: true - }) - ]; - }); - -}; - -const list = async (query) => { - //query.tag:hello - //query.page - //query.limit - let obj = {where: {}}; - if (query.tag) { - obj.include = [{model: mediaTagModel, where: {tag: query.tag}}]; - } - query.limit = obj.limit = parseInt(query.limit) || 10; - query.page = parseInt(query.page) > 0 ? parseInt(query.page) : 1; - obj.offset = (query.page - 1) * query.limit; - obj.order = [ - ['createdAt', 'DESC'] - ]; - let result = await mediaModel.findAndCount(obj); - return { - medias: result.rows, - count: result.count, - page: query.page, - limit: query.limit, - prev: query.page > 1 ? query.page - 1 : null, - next: result.count > query.page * query.limit ? query.page + 1 : null - }; -}; - -const bulkAddTags = (ctx) => { - co(function *() { - let ids = ctx.request.body.ids; - let tagsAdd = ctx.request.body.tag; - if (!tagsAdd) { - return; - } - tagsAdd = _.compact(tagsAdd.split('\n')); - let medias = yield mediaModel.findAll({where: {id: {in: [ids]}}}); - - yield medias.map(media => { - let tagsOld = media.tags.split('\n'); - let tagsToAdd = _.difference(tagsAdd, tagsOld); - let tagsNew = tagsOld.concat(tagsToAdd); - if (tagsToAdd.length) { - return [mediaTagModel.bulkCreate(tagsToAdd.map(tag => { - return {tag: tag.toLowerCase(), mediaId: media.id}; - })), media.update({tags: tagsNew.join('\n')})]; - } else { - return media.update({tags: tagsNew.join('\n')}); - } - }); - }); -}; - -const listTag = () => { - return mediaTagModel.count({ - attributes: {exclude: ['id', 'mediaId', 'createdAt', 'updatedAt']}, - group: 'tag' - }); -}; - -const update = (ctx) => { - return co(function *() { - let id = ctx.params.id; - let tags = ctx.request.body.tags; - let media = yield mediaModel.findById(id); - if (!media) { - return Promise.reject({code: 404, error: '附件不存在'}); - } - if (tags) { - yield handleTagForAttachment(media, tags); - } - yield media.update({description: ctx.request.body.description, tags}); - return media; - }); -}; - -const get = (id) => mediaModel.findById(id); - -module.exports = { - middlewareCreate, get, del, list, bulkAddTags, update, listTag -}; -const handleTagForAttachment = function *(attachment, tagsString) { - - let tagsNew = JSON.parse(tagsString); - let tagsOld = JSON.parse(attachment.tags); - if (_.difference(tagsOld, tagsNew).length || _.difference(tagsNew, tagsOld).length) { - yield mediaTagModel.destroy({where: {attachmentId: attachment.id}, force: true}); - yield [ - mediaTagModel.bulkCreate(tagsNew.map(tag => { - return {attachmentId: attachment.id, tag: tag}; - })), - attachment.update({'tags': tagsString}) - ]; - } -}; diff --git a/server/app-admin/article/routes/article.js b/server/app-admin/article/routes/article.js deleted file mode 100644 index c998feb..0000000 --- a/server/app-admin/article/routes/article.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -const controller = require('../controller/article'); -module.exports = (router) => { - - router.get('/api/article', async (ctx, next) => { - ctx.body = await controller.list(ctx.query); - }); - - router.get('/api/article/:id', async (ctx, next) => { - let article = await controller.get(ctx.params.id); - ctx.body = {article}; - }); - - router.post('/api/article', async (ctx, next) => { - ctx.body = {article: await controller.create(ctx.request.body, ctx.session.admin_user)}; - }); - - router.put('/api/article/:id', async (ctx, next) => { - ctx.body = {article: await controller.update(ctx.params.id, ctx.request.body)}; - }); - - router.put('/api/article/:id/:field/:value', async (ctx, next) => { - let id = ctx.params.id; - let field = ctx.params.field; - let value = ctx.params.value; - switch (field){ - case 'status': - await controller.setStatus(id, value); - break; - case 'top': - await controller.setTop(id, 'true' === value); - break; - case 'level': - await controller.setLevel(id, value); - break; - default: - break; - } - ctx.body = 'SUCCESS'; - }); - - router.put('/api/article/:id/:field', async (ctx, next) => { - let {id, field} = ctx.params, body = ctx.request.body; - if (!body.hasOwnProperty(field)) { - ctx.status = 400; - ctx.body = {statusCode: 400, errors: [{message: '错误的请求参数'}]}; - } else { - ctx.body = {article: await controller.updateField(id, field, body[field])}; - } - }); - - router.get('/api/article-tag', async (ctx, next) => { - ctx.body = await controller.listTag(); - }); - -}; diff --git a/server/app-admin/article/routes/media.js b/server/app-admin/article/routes/media.js deleted file mode 100644 index 5593fc6..0000000 --- a/server/app-admin/article/routes/media.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; -const ctrl = require('../controller/media'); - -module.exports = (router) => { - router.get('/api/media', async (ctx, next) => { - - let query = ctx.query; - query.limit = parseInt(query.limit) || 10; - ctx.body = await ctrl.list(ctx.query); - }); - - ctrl.middlewareCreate(router, '/api/media'); - - router.put('/api/media/tags', async (ctx, next) => { - await ctrl.bulkAddTags(ctx); - ctx.body = 'SUCCESS'; - }); - - router.put('/api/media/:id', async (ctx, next) => { - ctx.body = {media: await ctrl.update(ctx)}; - }); - - router.delete('/api/media/:id', async (ctx, next) => { - await ctrl.del(ctx); - ctx.body = 'SUCCESS'; - }); - - router.get('/api/media-tag', async (ctx, next) => { - ctx.body = await ctrl.listTag(ctx); - }); -}; diff --git a/server/app-admin/customer/controller/company.js b/server/app-admin/customer/controller/company.js deleted file mode 100644 index ae84c50..0000000 --- a/server/app-admin/customer/controller/company.js +++ /dev/null @@ -1,68 +0,0 @@ -'use strict'; - -const models = require('server/models').sequelize.models; -const modelCompany = models.c_company; -const modelUser = models.c_user; -const modelCompanyUser = models.c_company_user; -const createCompany = async (company, admin) => { - - let user; - try { - user = await modelUser.create(admin); - } catch (e) { - return Promise.reject(e.errors); - } - let cp = await modelCompany.create(company); - - await modelCompanyUser.create({ - role: 'admin', - cUserId: user.id, - cCompanyId: cp.id - }); -}; - -const updateCompany = async (companyId, company, admin) => { - - let cp = await modelCompany.findById(companyId, { - include: modelUser, through: { - model: modelCompanyUser, where: { - role: 'admin' - } - } - }); - if (!cp) { - return Promise.reject({message: '公司不存在'}); - } - Object.assign(cp, company); - await cp.save(); - - if (cp.c_users[0]) { - let user = await modelUser.findById(cp.c_users[0].id); - Object.assign(user, admin); - await user.save(); - } -}; - -const listCompany = async () => { - return modelCompany.findAll({ - include: [{ - model: modelUser, - through: { - model: models.c_company_user, - where: {role: 'admin'} - } - }] - }); -}; -const enable = async (companyId, flag) => { - - let company = await modelCompany.findById(companyId); - if (!company) { - return Promise.reject({message: '公司不存在'}); - } - return company.update({enable: flag}); -}; - -module.exports = { - listCompany, createCompany, updateCompany, enable -}; diff --git a/server/app-admin/customer/controller/user.js b/server/app-admin/customer/controller/user.js deleted file mode 100644 index 92081bf..0000000 --- a/server/app-admin/customer/controller/user.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -const models = require('server/models'); - -const userModel = models.c_user; - - -const enable = async (id, flag) => { - - let user = await userModel.findById(id); - if (!user) { - return Promise.reject({statusCode: 404, errors: [{message: '账户不存在'}]}); - } - return user.update({enable: flag}); -}; - -const list = async () => { - return userModel.findAll({ - include: [{model: models.c_company}] - }); -}; - -module.exports = {enable, list}; diff --git a/server/app-admin/customer/routes/company.js b/server/app-admin/customer/routes/company.js deleted file mode 100644 index 733d5c0..0000000 --- a/server/app-admin/customer/routes/company.js +++ /dev/null @@ -1,118 +0,0 @@ -'use strict'; -const tools = require('tools'); -const controller = require('../controller/company'); - -module.exports = (router) => { - // - router.get('/api/company', async (ctx, next) => { - const companies = await controller.listCompany(); - ctx.body = { - statusCode: 200, - payload: { - companies - } - }; - }); - - - //创建公司含管理员 - router.post('/api/company', async (ctx, next) => { - //name - //location - //phone - //admin:{nickname,email,phone} - let errors = []; - let {name, location, phone} = ctx.request.body; - - if (!name || !name.trim()) { - ctx.status = 400; - ctx.body = { - errors: [{message: '公司名称不能为空'}] - }; - return; - } - name = name.trim(); - let admin = ctx.request.body.admin; - if (!admin) { - errors.push({message: '管理员不能为空'}); - } else { - if (tools.RegExp.PHONE.test(admin.phone)) { - errors.push({message: '管理员手机号格式不正确'}); - } - if (tools.RegExp.EMAIL.test(admin.email)) { - errors.push({message: '管理员邮箱格式不正确'}); - } - } - - if (errors.length) { - ctx.status = 400; - ctx.body = { - statusCode: 400, - errors - }; - return; - } - - try { - await controller.createCompany({ - name, location, phone - }, admin); - } catch (e) { - ctx.status = 409; - ctx.body = { - statusCode: 409, - errors: e - }; - return; - } - - ctx.body = { - statusCode: 200, - message: '公司创建成功' - }; - - }); - //修改公司信息含管理员 - router.put('/api/company/:companyId', async (ctx, next) => { - let companyId = ctx.params.companyId; - let {name, location, phone, admin} = ctx.request.body; - try { - await controller.updateCompany(companyId, { - name, location, phone - }, admin); - } catch (e) { - ctx.status = 500; - ctx.body = { - statusCode: 500, - errors: [e] - }; - return; - } - - ctx.body = { - statusCode: 200, - message: '公司更新成功' - }; - }); - - //修改公司的状态 - router.put('/api/company/:id/enable', async (ctx, next) => { - let enable = !!ctx.request.body.enable; - let companyId = ctx.params.id; - try { - await controller.enable(companyId, enable); - } catch (e) { - ctx.status = 500; - ctx.body = { - statusCode: 500, - errors: [e] - }; - return; - } - - ctx.body = { - statusCode: 200, - message: `公司${enable ? '启用' : '禁用'}成功` - }; - }); -}; \ No newline at end of file diff --git a/server/app-admin/customer/routes/user.js b/server/app-admin/customer/routes/user.js deleted file mode 100644 index 655c8d3..0000000 --- a/server/app-admin/customer/routes/user.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; -const controller = require('../controller/user'); -module.exports = (router) => { - // - router.get('/api/user', async (ctx, next) => { - const users = await controller.list(); - ctx.body = { - statusCode: 200, - payload: { - users - } - }; - }); - //修改用户的状态 - router.put('/api/user/:id/enable', async (ctx, next) => { - let enable = !!ctx.request.body.enable; - let userId = ctx.params.id; - await controller.enable(userId, enable); - ctx.body = { - statusCode: 200, - message: `用户${enable ? '启用' : '禁用'}成功` - }; - }); - -}; \ No newline at end of file diff --git a/server/app-admin/docs/controller/docs.js b/server/app-admin/docs/controller/docs.js deleted file mode 100644 index 6c3b914..0000000 --- a/server/app-admin/docs/controller/docs.js +++ /dev/null @@ -1,132 +0,0 @@ -'use strict'; -const fs = require('fs-async-await'); -const path = require('path'); -const cp = require('child_process'); -const config = require('config')('docs'); -const models = require('server/models').sequelize.models; -const modesDocs = models.docs; - -try { - fs.statSync(config.repoPath); -} catch (e) { - fs.mkdirSync(config.repoPath); -} -try { - fs.statSync(config.buildPath); -} catch (e) { - fs.mkdirSync(config.buildPath); -} -try { - fs.statSync(config.pdfPath); -} catch (e) { - fs.mkdirSync(config.pdfPath); -} - -const build = async (doc, repoDir, buildDir, pdfDir) => { - cp.exec(`gitbook build ${repoDir} ${buildDir} && gzip -kr9 ${buildDir}`, async (err) => { - if (err) { - console.error(err); - await doc.update({status: 'Error:build Error'}); - return; - } - await doc.update({status: 'success'}); - }); - cp.exec(`gitbook pdf ${repoDir} ${pdfDir}/${doc.name || doc.projectName}.pdf && gzip -k9 ${pdfDir}/${doc.name || doc.projectName}.pdf`, async (err) => { - if (err) { - console.error(err); - await doc.update({pdf: 'Error:pdf build Error'}); - return; - } - await doc.update({pdf: `${doc.name || doc.projectName}.pdf`}); - }); -}; - -// -/** - * 创建文档 - * 执行命令 - * git clone xxx - * gitbook build - * - * @return {Promise.} - */ -const create = async (doc) => { - let repoDir = path.join(config.repoPath, doc.directory); - let buildDir = path.join(config.buildPath, doc.projectName); - let pdfDir = path.join(config.pdfPath); - cp.exec(`git clone -b ${doc.branch} ${doc.repository} ${repoDir}`, async (err) => { - if (err) { - console.error(err); - await doc.update({status: 'Error:clone Error'}); - return; - } - await build(doc, repoDir, buildDir, pdfDir); - }); -}; - -const upgrade = async (doc) => { - let repoDir = path.join(config.repoPath, doc.directory); - let buildDir = path.join(config.buildPath, doc.projectName); - let pdfDir = path.join(config.pdfPath); - try { - await fs.statAsync(repoDir); - } catch (e) { - create(doc); - return; - } - cp.exec(`git pull origin ${doc.branch}`, {cwd: repoDir}, async (err) => { - if (err) { - console.error(err); - await doc.update({status: 'Error:clone Error'}); - return; - } - await build(doc, repoDir, buildDir, pdfDir); - }); -}; - -const createDoc = async (opt = {}) => { - opt.status = 'pending'; - opt.directory = `${opt.projectName}-${new Date().getTime()}`; - let doc = await modesDocs.create(opt); - create(doc); - return doc; -}; - -const updateDoc = async (id, body) => { - let doc = await modesDocs.find({where: {id}}); - - if (!doc) { - return Promise.reject({statusCode: 404, errors: [{message: '文档不存在'}]}); - } - - doc.directory = `${doc.projectName}-${new Date().getTime()}`; - Object.assign(doc, body); - let changedRepository = false; - if (doc.changed('repository') || doc.changed('branch')) { - changedRepository = true; - doc.status = 'pending'; - } - doc = await doc.save(); - if (changedRepository || doc.status !== 'success') { - create(doc); - } - return doc; -}; - -const listDoc = async () => { - return modesDocs.findAll({attributes: {exclude: ['projectName', 'directory']}}); -}; -const upgradeDoc = async (id) => { - let doc = await modesDocs.find({where: {id}}); - - if (!doc) { - return Promise.reject({statusCode: 404, errors: [{message: '文档不存在'}]}); - } - doc.status = 'pending'; - upgrade(doc); - return await doc.save(); - -}; - - -module.exports = {createDoc, updateDoc, listDoc, upgradeDoc}; diff --git a/server/app-admin/docs/routes/index.js b/server/app-admin/docs/routes/index.js deleted file mode 100644 index fb204c4..0000000 --- a/server/app-admin/docs/routes/index.js +++ /dev/null @@ -1,119 +0,0 @@ -'use strict'; - -const tools = require('tools'); -const controller = require('../controller/docs'); -module.exports = (router) => { - - router.get('/api/docs', async (ctx, next) => { - ctx.body = { - payload: { - docs: await controller.listDoc() - } - }; - }); - //create - router.post('/api/docs', async (ctx, next) => { - let {repository, name, version, authorization, url, branch, introduction, logo} = ctx.request.body; - let errors = []; - if (!tools.RegExp.GITURL.test(repository)) { - errors.push({ - message: '非法的仓库链接', location: 'repository' - }); - } - - if (errors.length) { - ctx.status = 400; - ctx.body = { - statusCode: 400, - errors - }; - return; - } - let projectName = repository.replace(/(.*\/)*(.+).git$/ig, '$2'); - if (!branch || !branch.trim()) { - branch = 'master'; - } - try { - await controller.createDoc({ - repository, - projectName, - name, - version, - authorization, - url, - branch, - introduction, - logo - }); - } catch (e) { - ctx.status = 409; - ctx.body = { - statusCode: 409, - errors: e.errors - }; - return; - } - - ctx.body = { - statusCode: 200, - message: '文档创建成功' - }; - }); - - //update - router.put('/api/docs/:docsId', async (ctx, next) => { - let {repository, name, version, authorization, url, branch, introduction, logo} = ctx.request.body; - let errors = []; - if (!tools.RegExp.GITURL.test(repository)) { - errors.push({ - message: '非法的仓库链接', location: 'repository' - }); - } - - if (errors.length) { - ctx.status = 400; - ctx.body = { - statusCode: 400, - errors - }; - return; - } - let projectName = repository.replace(/(.*\/)*([^.]+).git$/ig, '$2'); - if (!branch || !branch.trim()) { - branch = 'master'; - } - try { - await controller.updateDoc( - ctx.params.docsId, - {repository, projectName, name, version, authorization, url, branch, introduction, logo} - ); - } catch (e) { - ctx.status = e.statusCode || 400; - ctx.body = { - errors: e.errors - }; - return; - } - ctx.body = { - message: '文档修改成功' - }; - - }); - - //upgrade - router.put('/api/docs/:docsId/upgrade', async (ctx, next) => { - try { - await controller.upgradeDoc(ctx.params.docsId); - } catch (e) { - ctx.status = e.statusCode || 400; - ctx.body = { - errors: e.errors - }; - return; - } - ctx.body = { - message: '文档更新成功' - }; - }); - -}; diff --git a/server/app-admin/index.js b/server/app-admin/index.js deleted file mode 100644 index dde03d3..0000000 --- a/server/app-admin/index.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); - -const mount = require('koa-mount'); -const KoaRouter = require('koa-router'); -const router = new KoaRouter(); - -module.exports = (app) => { - router.use('/api', async (ctx, next) => { - if (ctx.session.admin_user && ctx.session.admin_user.token) { - await next(); - } else { - ctx.status = 403; - ctx.body = {statusCode: 403, errors: [{message: '授权失败,请登录'}]}; - } - }); - - fs.readdirSync(path.join(__dirname)).filter(application => application !== 'index.js').forEach(application => { - let routes; - try { - routes = fs.statSync(path.join(__dirname, application, 'routes')); - } catch (e) { - return; - } - if (routes.isDirectory()) { - fs.readdirSync(path.join(__dirname, application, 'routes')).filter(file => file.indexOf('.') !== 0).forEach(file => { - require(path.join(__dirname, application, 'routes', file))(router); - }); - } - }); - - app.use(mount('/admin', router.routes(), router.allowedMethods())); - -}; diff --git a/server/app-admin/job/controller/job.js b/server/app-admin/job/controller/job.js deleted file mode 100644 index 65d7e41..0000000 --- a/server/app-admin/job/controller/job.js +++ /dev/null @@ -1,131 +0,0 @@ -'use strict'; - -const models = require('server/models').sequelize.models; -const jobModel = models.job; - - -const create = async function (body) { - let job = JSON.parse(JSON.stringify(body)); - job.location = job.location.join(','); - if (body.url) { - body.url = encodeURI(body.url); - } - - return await jobModel.create(job); -}; - -const get = async function (id) { - let job = await jobModel.findById(id); - job.location = job.location ? job.location.split(',') : []; - return job; -}; - -const list = async function (query) { - //query.status: - //query.tags:"['hello']" - //query.month:2017-02 - //query.page - //query.limit - //query.category - //query.search - - let obj = {where: {}}; - if (query.search) { - obj.where.title = { - $like: '%' + decodeURI(query.search) + '%' - }; - } - - if (query.limit) { - query.limit = obj.limit = parseInt(query.limit) || 10; - query.page = parseInt(query.page) > 0 ? parseInt(query.page) : 1; - obj.offset = (query.page - 1) * query.limit; - } - - if (query.status) { - obj.where.status = query.status; - } - - obj.order = [ - ['createdAt', 'DESC'] - ]; - - let result = await jobModel.findAndCount(obj); - - result.rows.forEach(job => { - job.location = job.location ? job.location.split(',') : []; - }); - return { - jobs: result.rows, - count: result.count, - page: query.page, - limit: query.limit, - prev: query.page > 1 ? query.page - 1 : null, - next: result.count > query.page * query.limit ? query.page + 1 : null - }; -}; - -const update = async function (jobId, body) { - let job = await jobModel.find({where: {id: jobId}}); - - if (!job) { - return Promise.reject({statusCode: 404, errors: [{message: 'Not Found'}]}); - } - if (body.location) { - body.location = job.location.join(','); - } - - Object.assign(job, body); - job = await job.save(); - return job; -}; - -const updateField = async (jobId, field, value) => { - const fields = ['title', 'description', 'requirement', 'preferred', 'status', 'role', 'type', 'location']; - if (fields.indexOf(field) < 0) { - return Promise.reject({statusCode: 400, errors: [{message: '错误的请求参数'}]}); - } - - let job = await jobModel.findOne({where: {id: jobId}}); - if (!job) { - return Promise.reject({statusCode: 404, errors: [{message: 'Not Found'}]}); - } - if ('location' === field) { - let update = {}; - update[field] = location.join(','); - job = await job.update(update); - } else { - let update = {}; - update[field] = value; - job = await job.update(update); - } - return job; -}; - - -const setTop = (jobId, top) => { - return jobModel.update({top}, {where: {id: jobId}}); -}; - -const setStatus = async (jobId, status) => { - let statuses = ['public', 'private', 'trash', 'draft']; - let job = await jobModel.findOne({where: {id: jobId}}); - if (!job) { - return Promise.reject({status: 404, message: '文章不存在'}); - } - if (statuses.indexOf(status) < 0) { - return Promise.reject({status: 400, message: '参数错误'}); - } - return await job.update({status}); -}; - -const del = (jobId) => { - return jobModel.destroy({ - where: {id: jobId} - }); -}; - -module.exports = { - create, get, list, update, updateField, - setTop, setStatus, del -}; diff --git a/server/app-admin/job/routes/job.js b/server/app-admin/job/routes/job.js deleted file mode 100644 index fb0f288..0000000 --- a/server/app-admin/job/routes/job.js +++ /dev/null @@ -1,33 +0,0 @@ -'use strict'; - -const controller = require('../controller/job'); -module.exports = (router) => { - - router.get('/api/job', async (ctx, next) => { - ctx.body = await controller.list(ctx.query); - }); - - router.post('/api/job', async (ctx, next) => { - ctx.body = {job: await controller.create(ctx.request.body, ctx.session.admin_user)}; - }); - - router.put('/api/job/:id', async (ctx, next) => { - ctx.body = {job: await controller.update(ctx.params.id, ctx.request.body)}; - }); - - router.put('/api/job/:id/:field', async (ctx, next) => { - let {id, field} = ctx.params, body = ctx.request.body; - if (!body.hasOwnProperty(field)) { - ctx.status = 400; - ctx.body = {statusCode: 400, errors: [{message: '错误的请求参数'}]}; - } else { - ctx.body = {job: await controller.updateField(id, field, body[field])}; - } - }); - - router.delete('/api/job/:id', async (ctx, next) => { - await controller.del(ctx.params.id); - ctx.status = 204; - }); - -}; diff --git a/server/app-www/apply/controller/apply.js b/server/app-www/apply/controller/apply.js deleted file mode 100644 index 0d5d8e0..0000000 --- a/server/app-www/apply/controller/apply.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -const models = require('models').sequelize.models; -const cloudModel = models.apply_cloud; -const trainModel = models.apply_train; -const cooperationModel = models.apply_cooperation; - -const applyCloud = function (cloud) { - return cloudModel.create(cloud); -}; -const applyTrain = function (train) { - return trainModel.create(train); -}; -const applyCooperation = (cooperation) => { - return cooperationModel.create(cooperation); -}; - -module.exports = {applyCloud, applyTrain, applyCooperation}; diff --git a/server/app-www/apply/routes/apply.js b/server/app-www/apply/routes/apply.js deleted file mode 100644 index 0f36ea5..0000000 --- a/server/app-www/apply/routes/apply.js +++ /dev/null @@ -1,137 +0,0 @@ -'use strict'; -const config = require('config'); -const sendEmail = require('drivers').email.sendEmailByTemplateAsync; -const controller = require('../controller/apply'); -const tools = require('tools'); - -const contactEmail = config('emailAddress').contact; - -const checkCaptcha = (ctx, next) => { - let captcha = ctx.request.body.captcha; - let sessionCaptcha = ctx.session.www_captcha; - captcha = captcha && captcha.toLowerCase(); - sessionCaptcha = sessionCaptcha && sessionCaptcha.toLowerCase(); - if ( captcha && sessionCaptcha && captcha === sessionCaptcha) { - ctx.session.www_captcha = ''; - return next(); - } else { - ctx.status = 400; - ctx.body = { - statusCode: 400, - errors: [{ - location: 'captcha', - message: '验证码错误' - }] - }; - } -}; - -module.exports = async (router, globalLang, viewsPath) => { - router.post('/apply/api/train', checkCaptcha, async (ctx, next) => { - ctx.checkBody('nickname').notEmpty('用户名不能为空'); - ctx.checkBody('phone').notEmpty('电话不能为空'); - ctx.checkBody('email').notEmpty('邮箱不能为空'); - ctx.checkBody('company').notEmpty('公司不能为空'); - ctx.checkBody('location').notEmpty('上课地点不能为空'); - if (ctx.errors) { - ctx.status = 400; - ctx.body = { - statusCode: 400, - errors: ctx.errors.map(err => { - let r = {}; - tools._.forEach(err, (value, key) => { - r.message = value; - r.location = key; - }); - return r; - }) - }; - } else { - await controller.applyTrain(ctx.request.body); - ctx.body = { - statusCode: 200, - message: '培训申请成功' - }; - //todo 发送邮件 - const body = ctx.request.body; - sendEmail( - contactEmail, - '【同方有云】有新的培训申请', - {content: ` -

姓名:${body.nickname}

-

邮箱:${body.email}

-

电话:${body.phone}

-

公司:${body.company}

-

上课地点:${body.location}

- `} - ); - } - - }); - router.post('/apply/api/cooperation', checkCaptcha, async (ctx, next) => { - ctx.checkBody('nickname').notEmpty('用户名不能为空'); - ctx.checkBody('phone').notEmpty('电话不能为空'); - if (ctx.errors) { - ctx.status = 400; - ctx.body = { - statusCode: 400, - errors: ctx.errors.map(err => { - let r = {}; - tools._.forEach(err, (value, key) => { - r.message = value; - r.location = key; - }); - return r; - }) - }; - } else { - let body = ctx.request.body; - await controller.applyCooperation(body); - ctx.body = { - statusCode: 200, - message: '合作申请成功' - }; - //todo 发送邮件 - sendEmail( - contactEmail, - '【同方有云】有新的合作申请', - {content: ` -

姓名:${body.nickname}

-

电话:${body.phone}

-

邮箱:${body.email || ''}

-

公司:${body.company || ''}

-

公司地点:${body.location || ''}

- `} - ); - } - }); - - router.post('/apply/api/private-cloud', checkCaptcha, async (ctx, next) => { - ctx.checkBody('nickname').notEmpty('用户名不能为空'); - ctx.checkBody('phone').notEmpty('电话不能为空'); - ctx.checkBody('email').notEmpty('邮箱不能为空'); - ctx.checkBody('company').notEmpty('公司不能为空'); - if (ctx.errors) { - ctx.status = 400; - ctx.body = { - statusCode: 400, - errors: ctx.errors.map(err => { - let r = {}; - tools._.forEach(err, (value, key) => { - r.message = value; - r.location = key; - }); - return r; - }) - }; - } else { - let body = ctx.request.body; - body.evaluation = JSON.stringify(body.evaluation); - await controller.applyCloud(body); - ctx.body = { - statusCode: 200, - message: '托管云申请成功' - }; - } - }); -}; diff --git a/server/app-www/article/controller/article.js b/server/app-www/article/controller/article.js deleted file mode 100644 index 7d58cd7..0000000 --- a/server/app-www/article/controller/article.js +++ /dev/null @@ -1,83 +0,0 @@ -'use strict'; - -const models = require('models').sequelize.models; -const articleModel = models.article; -const publicStatus = 'public'; - -const getArticle = async (params) => { - const {category, url} = params; - const article = await articleModel.findOne({where: {url: encodeURI(url), category, status: publicStatus}}); - if (article) { - article.increment('view_count'); - } - return article; -}; - -const listArticle = async (params) => { - const obj = {where: {status: publicStatus}}; - if (params.search) { - obj.where.title = {$like: '%' + decodeURI(params.search) + '%'}; - } - - if (params.tag) { - obj.include = [{model: models.article_tag, where: {tag: params.tag}}]; - } - if (params.category) { - obj.where.category = params.category; - } - - params.limit = obj.limit = parseInt(params.limit) || 10; - params.page = parseInt(params.page) > 0 ? parseInt(params.page) : 1; - obj.offset = (params.page - 1) * params.limit; - - obj.order = [['top', 'DESC'], ['createdAt', 'DESC']]; - - obj.attributes = {exclude: ['content']}; - - const result = await articleModel.findAndCount(obj); - return { - articles: result.rows, - count: result.count, - page: params.page, - limit: params.limit, - prev: params.page > 1 ? params.page - 1 : null, - next: result.count > params.page * params.limit ? params.page + 1 : null - }; -}; - -const getTags = (category = 'blog') => { - return models.article_tag.count({ - where: {category}, - attributes: {exclude: ['id', 'articleId', 'createdAt', 'updatedAt']}, - group: ['tag'] - }); -}; - -const getTops = async (category = 'blog') => { - return await articleModel.findAll({ - where: {status: publicStatus, category}, - limit: 10, - attributes: {exclude: ['content']}, - order: [['top', 'DESC'], ['view_count', 'DESC']] - }); - -}; -const getPrevNext = async (category = 'blog', articleId) => { - return await Promise.all([ - articleModel.findOne({ - where: {status: publicStatus, category, id: {$lt: articleId}}, - limit: 1, - attributes: ['url', 'title'], - order: [['top', 'DESC'], ['createdAt', 'DESC']] - }), - articleModel.findOne({ - where: {status: publicStatus, category, id: {$gt: articleId}}, - limit: 1, - attributes: ['url', 'title'], - order: [['top', 'DESC'], ['createdAt', 'DESC']] - }) - ]); -}; - - -module.exports = {getArticle, listArticle, getTags, getTops, getPrevNext}; \ No newline at end of file diff --git a/server/app-www/index.js b/server/app-www/index.js deleted file mode 100644 index e82ca29..0000000 --- a/server/app-www/index.js +++ /dev/null @@ -1,94 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const views = require('koa-views'); -const KoaRouter = require('koa-router'); -const send = require('koa-send'); - -const router = new KoaRouter(); -const themeConfig = require('client/config.json'); -const globalLang = require('client/locale/lang.json'); -const viewsPath = path.join(__dirname, '../../client/views'); -const homeLang = require('client/views/home-views/lang.json'); - -const staticPage = require('client/.routers.json'); - - -module.exports = (app) => { - //static page - router.get(Object.keys(staticPage), async(ctx, next) => { - let filePath = staticPage[ctx.path][ctx.session.lang || 'zh']; - let themeDir = path.join(__dirname, '../../client'); - let relativePath = path.relative(themeDir, filePath); - await send(ctx, relativePath ,{root: themeDir}); - }); - - router.use(views(viewsPath, { - extension: 'ejs' - })); - - const defaultLang = themeConfig.defaultLang; - - //i18n & user info - router.use(async (ctx, next) => { - if (ctx.request.query && ctx.request.query.lang && ctx.session.lang !== ctx.request.query.lang) { - ctx.session.lang = ctx.request.query.lang; - } - if (!ctx.session.lang) { - ctx.session.lang = defaultLang; - } - await next(); - }); - - //home page - const articleCtrl = require('./article/controller/article'); - router.get('/', async (ctx, next) => { - let articles = await Promise.all([ - articleCtrl.listArticle({category: 'news', limit: 5}), - articleCtrl.listArticle({category: 'blog', limit: 5}) - ]); - const data = Object.assign({ - commonCssFile: `/static/common/style/${ctx.app.FileHash.index}.index.css`, - commonJsFile: `/static/common/js/${ctx.app.FileHash.g}.g.js`, - home_news: articles[0].articles, - home_blog: articles[1].articles - }, globalLang[ctx.session.lang], homeLang[ctx.session.lang],{ - cssFile: `/static/dist/${ctx.app.FileHash.home ? ctx.app.FileHash.home + '.' : ''}home.min.css`, - jsFile: `/static/dist/${ctx.app.FileHash.home ? ctx.app.FileHash.home + '.' : ''}home.min.js`, - }); - await ctx.render('home-views/index', data); - }); - - //traversal - fs.readdirSync(path.join(__dirname)).filter(application => application !== 'index.js').forEach(application => { - let routes; - try { - routes = fs.statSync(path.join(__dirname, application, 'routes')); - } catch (e) { - return; - } - if (routes.isDirectory()) { - fs.readdirSync(path.join(__dirname, application, 'routes')).filter(file => file.indexOf('.') !== 0).forEach(file => { - require(path.join(__dirname, application, 'routes', file))(router, globalLang, viewsPath); - }); - } - }); - - //404 - const pageLang = require(viewsPath + '/404-views/lang.json'); - router.get('*', async (ctx) => { - let data = Object.assign({ - commonCssFile: `/static/common/style/${ctx.app.FileHash.index}.index.css`, - commonJsFile: `/static/common/js/${ctx.app.FileHash.g}.g.js`, - }, globalLang[ctx.session.lang], pageLang[ctx.session.lang],{ - cssFile: `/static/dist/${ctx.app.FileHash[404]? ctx.app.FileHash[404] + '.' : ''}404.min.css`, - jsFile: `/static/dist/${ctx.app.FileHash[404] ? ctx.app.FileHash[404] + '.' : ''}404.min.js`, - }); - ctx.status = 404; - await ctx.render('404-views/index', data); - }); - - app.use(router.routes(), router.allowedMethods()); - -}; diff --git a/server/app-www/job/controller/job.js b/server/app-www/job/controller/job.js deleted file mode 100644 index cfadf91..0000000 --- a/server/app-www/job/controller/job.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -const models = require('models').sequelize.models; -const jobModel = models.job; - -const listJobs = async () => { - - let jobs = await jobModel.findAll({ - where: { - status: 'public' - }, - order: [ - ['top', 'DESC'], - ['createdAt', 'DESC'] - ] - }); - jobs.forEach(job => { - job.location = job.location ? job.location.split(',') : []; - }); - return jobs; -}; - - -module.exports = {listJobs}; diff --git a/server/app-www/job/routes/job.js b/server/app-www/job/routes/job.js deleted file mode 100644 index ed0ebc9..0000000 --- a/server/app-www/job/routes/job.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; -const controller = require('../controller/job'); - -module.exports = async (router, globalLang, viewsPath) => { - router.get('/api/job', async (ctx, next) => { - const jobs = await controller.listJobs(); - - ctx.body = {jobs}; - }); -}; diff --git a/server/app.js b/server/app.js deleted file mode 100644 index affcf4c..0000000 --- a/server/app.js +++ /dev/null @@ -1,69 +0,0 @@ -'use strict'; -const path = require('path'); -const glob = require('glob'); - -const hashs = {}; -const matchDist = glob.sync('*.min.js',{cwd: path.join(__dirname, '../client/static/dist/')}); -matchDist.forEach(fileName => { - let arr = fileName.split('.'); - if (arr.length === 4) { - hashs[arr[1]] = arr[0]; - } else if (arr.length === 3) { - hashs[arr[0]] = ''; - } -}); -const matchCommonCss = glob.sync('*.index.css', {cwd: path.join(__dirname, '../client/static/common/style/')}); -const matchCommonJs = glob.sync('*.g.js', {cwd: path.join(__dirname, '../client/static/common/js/')}); -if (matchCommonCss[0]) { - hashs.index = matchCommonCss[0].split('.')[0]; -} -if (matchCommonJs[0]) { - hashs.g = matchCommonJs[0].split('.')[0]; -} - -const Koa = require('koa'); -const app = new Koa(); -const koaOnError = require('koa-onerror'); -const bodyParser = require('koa-bodyparser'); -const koaStatic = require('koa-static'); -const mount = require('koa-mount'); -const env = process.env.NODE_ENV; -if (env !== 'development') { - const etag = require('koa-etag'); - const conditional = require('koa-conditional-get'); - - app.use(conditional()); - app.use(etag()); -} -app.FileHash = hashs; -//static files -const maxAge = env === 'development' ? 1 : 365 * 24 * 60 * 60 * 1000; - -app.use(mount('/static', koaStatic(path.resolve(__dirname, '../client/static'), {maxAge}))); -app.use(mount('/admin-static/dist', koaStatic(path.resolve(__dirname, '../admin/dist'), {maxAge}))); -app.use(mount('/admin-static/assets', koaStatic(path.resolve(__dirname, '../admin/assets'), {maxAge}))); -app.use(mount('/wp-content', koaStatic(path.resolve(__dirname, '../static/wp-content'), {maxAge}))); - -// handle error -koaOnError(app); - -app.use(async (ctx, next) => { - await next(); - if (ctx.customError) { - ctx.status = ctx.customError.statusCode; - ctx.body = ctx.customError; - } -}); - -//body parser -app.use(bodyParser()); - -//session -require('server/middlewares/sessionHandler')(app); - -// routes definition -require('koa-validate')(app); -require('server/app-admin')(app); -require('server/app-www')(app); - -module.exports = app; diff --git a/server/drivers/email/index.js b/server/drivers/email/index.js deleted file mode 100644 index e5c5154..0000000 --- a/server/drivers/email/index.js +++ /dev/null @@ -1,42 +0,0 @@ -'use strict'; -const path = require('path'); -const fs = require('fs'); -const nodemailer = require('nodemailer'); -const ejs = require('ejs'); -const driver = {}; -const config = require('config'); -const smtpConfig = config('smtp'); -const templateConfig = config('emailTemplate'); - -const templates = {}; -fs.readdirSync(path.join(__dirname, 'templates')).forEach(file => { - templates[file.split('.')[0]] = fs.readFileSync(path.join(__dirname, 'templates', file), 'utf8'); -}); - -const transporter = nodemailer.createTransport(smtpConfig); -transporter.sendEmailAsync = (data) => { - return new Promise((resolve, reject) => { - transporter.sendMail(data, (err, info) => { - if (err) { - reject(err); - } else { - resolve(info); - } - }); - }); -}; - -/*** Promise ***/ -driver.sendEmailAsync = function (to, subject, text) { - return transporter.sendEmailAsync({ to, subject, text, from: smtpConfig.auth.user }); -}; - -/*** Promise ***/ -driver.sendEmailByTemplateAsync = function (to, subject, data, templateName) { - if (templateName && templates[templateName] === undefined) { - throw new Error('模板不存在'); - } - let content = ejs.render(templates[templateName || 'default'], Object.assign({}, templateConfig, data)); - return transporter.sendEmailAsync({ to, subject, html: content, from: smtpConfig.auth.user }); -}; -module.exports = {email: driver}; diff --git a/server/drivers/memcached/index.js b/server/drivers/memcached/index.js deleted file mode 100644 index 01fa786..0000000 --- a/server/drivers/memcached/index.js +++ /dev/null @@ -1,13 +0,0 @@ -'use strict'; - -const Memcached = require('memjs'); - -const config = require('config'); -const sessionEngine = config('sessionEngine'); -const MemcachedStore = require('./memcachedStore'); - - -const driver = {}; -driver.memcached = new MemcachedStore(Memcached.Client.create(sessionEngine.remotes.join(','), {})); - -module.exports = driver; diff --git a/server/drivers/memcached/memcachedStore.js b/server/drivers/memcached/memcachedStore.js deleted file mode 100644 index 916dc4d..0000000 --- a/server/drivers/memcached/memcachedStore.js +++ /dev/null @@ -1,54 +0,0 @@ -'use strict'; - -class MemcachedStore { - constructor(client) { - this.client = client; - } - - get(sid) { - const that = this; - return new Promise(function (resolve, reject) { - that.client.get(sid.toString(), function (err, data) { - if (err) { - reject(err); - } else { - if (!data) { - data = '{}'; - } else { - data = JSON.parse(data.toString()); - } - resolve(data); - } - }); - }); - } - - set(sid, value, expires) { - const that = this; - value = JSON.stringify(value); - return new Promise(function (resolve, reject) { - that.client.set(sid, value, parseInt(expires, 10) / 1000, function (err) { - if (err) { - reject(err); - } else { - resolve(Array.prototype.slice.call(arguments, 1)); - } - }); - }); - } - - destroy(sid) { - const that = this; - return new Promise(function (resolve, reject) { - that.client.delete(sid, function (err) { - if (err) { - reject(err); - } else { - resolve(Array.prototype.slice.call(arguments, 1)); - } - }); - }); - } -} - -module.exports = MemcachedStore; diff --git a/server/drivers/sequelize/index.js b/server/drivers/sequelize/index.js deleted file mode 100644 index 7d2428f..0000000 --- a/server/drivers/sequelize/index.js +++ /dev/null @@ -1,21 +0,0 @@ -'use strict'; - -const Sequelize = require('sequelize'); -const mysqlConfig = require('config')('mysql'); - -const sequelize = new Sequelize(mysqlConfig.database, mysqlConfig.user, mysqlConfig.password, { - host: mysqlConfig.host, - port: mysqlConfig.port, - dialect: 'mysql', - pool: { - max: 5, - min: 0, - idle: 10000 - }, - logging: false -}); - -const driver = {}; -driver.sequelize = sequelize; - -module.exports = driver; diff --git a/server/drivers/sms/index.js b/server/drivers/sms/index.js deleted file mode 100644 index 82126d1..0000000 --- a/server/drivers/sms/index.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -const urlencode = require('urlencode'); -const request = require('superagent'); -const _ = require('lodash'); -const hl95Config = require('config')('hl95'); - -const url = hl95Config.host; -const queryOptions = _.omit(hl95Config, 'host'); -const driver = {}; -driver.sms = async (phone, message) => { - return await request - .get(url) - .query( - Object.assign( - {}, - queryOptions, - { - phone, - message: urlencode(message, 'gb2312') - } - ) - ); -}; - -module.exports = driver; diff --git a/server/middlewares/sessionHandler.js b/server/middlewares/sessionHandler.js deleted file mode 100644 index 2e59581..0000000 --- a/server/middlewares/sessionHandler.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; -const session = require('koa-session-minimal'); - -const memStore = require('server/drivers').memcached; -const config = require('config'); -const sessionEngine = config('sessionEngine'); - -module.exports = (app) => { - - app.use(session({ - key: 'ustack.com', - cookie: { - httpOnly: true, - path: '/', - maxAge: 30 * 24 * 60 * 60 * 1000 - }, - secret: sessionEngine.secret, - resave: false, - saveUninitialized: true, - store: memStore - })); - - app.use(async (ctx, next) => { - if (!ctx.session) { - await next(new Error('Memcached 服务不可用')); - } else { - await next(); - } - }); - return app; -}; diff --git a/server/models/account/account.js b/server/models/account/account.js deleted file mode 100644 index b1390d2..0000000 --- a/server/models/account/account.js +++ /dev/null @@ -1,49 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: false - }, - model: (sequelize, DataTypes) => { - return sequelize.define('account', { - id: { - type: DataTypes.UUID, - defaultValue: DataTypes.UUIDV4, - primaryKey: true - }, - username: { - type: DataTypes.STRING, - unique: true - }, - phone: { - type: DataTypes.STRING - }, - email: { - type: DataTypes.STRING, - unique: true - }, - password: { - type: DataTypes.STRING, - allowNull: false - }, - nickname: { - type: DataTypes.STRING - }, - enable: { - type: DataTypes.BOOLEAN, - defaultValue: true, - allowNull: false - } - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'account', - classMethods: { - associate: function (models) { - models.account.hasMany(models.account_service); - } - } - }); - } -}; diff --git a/server/models/account/account_service.js b/server/models/account/account_service.js deleted file mode 100644 index 7ed7575..0000000 --- a/server/models/account/account_service.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: false - }, - model: (sequelize, DataTypes) => { - return sequelize.define('account_service', { - serviceName: { - type: DataTypes.STRING, - allowNull: false - }, - enable: { - type: DataTypes.BOOLEAN, - allowNull: false - }, - role: { - type: DataTypes.STRING, - allowNull: false - } - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'account_service' - }); - } -}; diff --git a/server/models/article/article.js b/server/models/article/article.js deleted file mode 100644 index a5070b5..0000000 --- a/server/models/article/article.js +++ /dev/null @@ -1,109 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: true - }, - model: (mysql, DataTypes) => { - return mysql.define('article', { - id: { - type: DataTypes.UUID, - primaryKey: true, - defaultValue: DataTypes.UUIDV4 - }, - category: { - type: DataTypes.STRING, - allowNull: false, - comment: '大类:blog,news,...' - }, - term: { - type: DataTypes.STRING, - comment: 'blog的小类.' - }, - title: { - type: DataTypes.TEXT, - allowNull: false, - comment: '标题' - }, - introduction: { - type: DataTypes.TEXT, - comment: '导语' - }, - content: { - type: DataTypes.TEXT('long'), - comment: '内容' - }, - tags: { - type: DataTypes.STRING, - comment: '标签' - }, - cover: { - type: DataTypes.STRING, - comment: '封面图片链接' - }, - status: { - type: DataTypes.ENUM('public', 'private', 'trash', 'draft'), - allowNull: false, - comment: '状态:草稿,已发布,私密,回收站' - }, - url: { - type: DataTypes.STRING, - comment: '固定链接' - }, - time: { - type: DataTypes.STRING - }, - authorId: { - type: DataTypes.UUID, - allowNull: false - }, - authorName: { - type: DataTypes.STRING, - allowNull: false - }, - level: { - type: DataTypes.INTEGER, - allowNull: false, - defaultValue: 0 - }, - top: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: false - }, - view_count: { - type: DataTypes.BIGINT, - allowNull: false, - defaultValue: 0, - comment: '浏览量' - }, - comment_count: { - type: DataTypes.BIGINT, - allowNull: false, - defaultValue: 0, - comment: '评论量' - }, - comment_status: { - type: DataTypes.BOOLEAN, - defaultValue: true, - allowNull: false - } - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'article', - classMethods: { - associate: function (models) { - models.article.hasMany(models.article_tag); - } - }, - indexes: [ - { - unique: true, - fields: ['url', 'category'] - } - ] - }); - } -}; diff --git a/server/models/article/article_tag.js b/server/models/article/article_tag.js deleted file mode 100644 index f031286..0000000 --- a/server/models/article/article_tag.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: true - }, - model: (mysql, DataTypes) =>{ - return mysql.define('article_tag', { - category: { - type: DataTypes.STRING, - allowNull: false - }, - tag: { - type: DataTypes.STRING, - allowNull: false - } - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'article_tag', - }); - } -}; diff --git a/server/models/customer/apply_cloud.js b/server/models/customer/apply_cloud.js deleted file mode 100644 index b236c53..0000000 --- a/server/models/customer/apply_cloud.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: true - }, - model: (mysql, DataTypes) => { - return mysql.define('apply_cloud', { - id: { - type: DataTypes.UUID, - defaultValue: DataTypes.UUIDV4, - primaryKey: true - }, - nickname: { - type: DataTypes.STRING - }, - email: { - type: DataTypes.STRING - }, - phone: { - type: DataTypes.STRING - }, - company: { - type: DataTypes.STRING - }, - description: { - type: DataTypes.TEXT - }, - evaluation: { - type: DataTypes.TEXT - } - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'apply_cloud' - }); - } -}; diff --git a/server/models/customer/apply_cooperation.js b/server/models/customer/apply_cooperation.js deleted file mode 100644 index ad42f3d..0000000 --- a/server/models/customer/apply_cooperation.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: true - }, - model: (mysql, DataTypes) => { - return mysql.define('apply_cooperation', { - id: { - type: DataTypes.UUID, - defaultValue: DataTypes.UUIDV4, - primaryKey: true - }, - nickname: { - type: DataTypes.STRING - }, - email: { - type: DataTypes.STRING - }, - phone: { - type: DataTypes.STRING - }, - company: { - type: DataTypes.STRING - }, - location: { - type: DataTypes.STRING - }, - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'apply_cooperation' - }); - } -}; diff --git a/server/models/customer/apply_train.js b/server/models/customer/apply_train.js deleted file mode 100644 index 85e312d..0000000 --- a/server/models/customer/apply_train.js +++ /dev/null @@ -1,36 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: true - }, - model: (mysql, DataTypes) => { - return mysql.define('apply_train', { - id: { - type: DataTypes.UUID, - defaultValue: DataTypes.UUIDV4, - primaryKey: true - }, - nickname: { - type: DataTypes.STRING - }, - email: { - type: DataTypes.STRING - }, - phone: { - type: DataTypes.STRING - }, - company: { - type: DataTypes.STRING - }, - location: { - type: DataTypes.STRING - }, - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'apply_train' - }); - } -}; diff --git a/server/models/customer/company.js b/server/models/customer/company.js deleted file mode 100644 index 7cacce4..0000000 --- a/server/models/customer/company.js +++ /dev/null @@ -1,46 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: true - }, - model: (mysql, DataTypes) => { - return mysql.define('c_company', { - id: { - type: DataTypes.UUID, - defaultValue: DataTypes.UUIDV4, - primaryKey: true - }, - name: { - type: DataTypes.STRING - }, - phone: { - type: DataTypes.STRING - }, - location: { - type: DataTypes.TEXT - }, - enable: { - type: DataTypes.BOOLEAN, - defaultValue: true - }, - logo: { - type: DataTypes.STRING - } - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'c_company', - classMethods: { - associate: function (models) { - models.c_company.belongsToMany(models.c_user, { - through: { - model: models.c_company_user - } - }); - } - } - }); - } -}; diff --git a/server/models/customer/user.js b/server/models/customer/user.js deleted file mode 100644 index 9c64a13..0000000 --- a/server/models/customer/user.js +++ /dev/null @@ -1,55 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: true - }, - model: (mysql, DataTypes) => { - return mysql.define('c_user', { - id: { - type: DataTypes.UUID, - defaultValue: DataTypes.UUIDV4, - primaryKey: true - }, - username: { - type: DataTypes.STRING, - unique: true - }, - phone: { - type: DataTypes.STRING, - allowNull: false - }, - email: { - type: DataTypes.STRING, - allowNull: false, - unique: true - }, - password: { - type: DataTypes.STRING - }, - nickname: { - type: DataTypes.STRING - }, - enable: { - type: DataTypes.BOOLEAN, - defaultValue: true, - allowNull: false - } - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'c_user', - classMethods: { - associate: function (models) { - models.c_user.belongsToMany(models.c_company, { - through: { - model: models.c_company_user - } - }); - models.c_user.hasMany(models.c_user_meta, {}); - } - } - }); - } -}; diff --git a/server/models/customer/user_meta.js b/server/models/customer/user_meta.js deleted file mode 100644 index 5605e5f..0000000 --- a/server/models/customer/user_meta.js +++ /dev/null @@ -1,28 +0,0 @@ -'use strict'; - -module.exports = { - config: { - www: true - }, - model: (mysql, DataTypes) => { - return mysql.define('c_user_meta', { - user_id: { - type: DataTypes.UUID, - defaultValue: DataTypes.UUIDV4, - primaryKey: true - }, - field: { - type: DataTypes.STRING, - allowNull: false - }, - value: { - type: DataTypes.STRING - } - }, { - paranoid: false, - charset: 'utf8', - freezeTableName: true, - tableName: 'c_user_meta' - }); - } -}; diff --git a/server/models/index.js b/server/models/index.js deleted file mode 100644 index 3df6732..0000000 --- a/server/models/index.js +++ /dev/null @@ -1,34 +0,0 @@ -'use strict'; - -const fs = require('fs'); -const path = require('path'); -const sequelize = require('server/drivers').sequelize; - -const db = {}; - -fs.readdirSync(path.join(__dirname)) - .filter(dir => dir !== 'index.js') - .forEach(app => { - let models; - try { - models = fs.statSync(path.join(__dirname, app)); - } catch (e) { - return; - } - if (models.isDirectory()) { - fs.readdirSync(path.join(__dirname, app)) - .filter(file => file.indexOf('.') !== 0) - .forEach(file => { - let model = require(`models/${app}/${file}`).model(sequelize, sequelize.Sequelize); - db[model.name] = model; - }); - } - }); - -Object.keys(db).forEach(modelName => db[modelName].associate && db[modelName].associate(db)); - -db.sequelize = sequelize; -sequelize.sync().then(() => { - console.log('MySQL sync Done'); -}).catch(console.error); -module.exports = db; diff --git a/server/tools/memClient.js b/server/tools/memClient.js deleted file mode 100644 index 924163c..0000000 --- a/server/tools/memClient.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; -const memClient = require('server/drivers').memcached; -const sms = require('server/drivers').sms; - -const expireCode = 10 * 60 * 1000; - -const createCode = () => { - return Math.random() * 900000 | 100000; -}; - -const savePhoneCode = async (purpose, phone, code) => { - let value = JSON.stringify({ - code, - createdAt: new Date().getTime() - }); - await memClient.set(purpose + phone, value, expireCode); -}; - -const checkCodeFrequently = async (purpose, phone) => { - let value = await memClient.get(purpose + phone); - if (!value) { - return false; - } - try { - value = JSON.parse(value); - } catch (e) { - return false; - } - - return (new Date().getTime() - value.createdAt) < 60000; -}; - -const verifyCodeCorrect = async (purpose, phone, code) => { - let value = await memClient.get(purpose + phone); - if (!value) { - return false; - } - try { - value = JSON.parse(value); - } catch (e) { - return false; - } - - return code === value.code; -}; - -const sendCode = async (phone, message) => { - return await sms(phone, message); -}; - -module.exports = { - memClient, - phoneCode: { - send: sendCode, - create: createCode, - save: savePhoneCode, - checkFrequently: checkCodeFrequently, - verifyCorrect: verifyCodeCorrect - } -}; \ No newline at end of file diff --git a/www-admin/.babelrc b/www-admin/.babelrc new file mode 100644 index 0000000..c96ebc0 --- /dev/null +++ b/www-admin/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["env", "react"], + "plugins": ["transform-runtime"] +} \ No newline at end of file diff --git a/.browserslistrc b/www-admin/.browserslistrc similarity index 100% rename from .browserslistrc rename to www-admin/.browserslistrc diff --git a/.eslintignore b/www-admin/.eslintignore similarity index 100% rename from .eslintignore rename to www-admin/.eslintignore diff --git a/.eslintrc b/www-admin/.eslintrc similarity index 81% rename from .eslintrc rename to www-admin/.eslintrc index 948a91d..48bfd01 100644 --- a/.eslintrc +++ b/www-admin/.eslintrc @@ -5,7 +5,10 @@ "es6": true, "node": true }, - "extends": ["eslint:recommended", "plugin:react/recommended"], + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], "parserOptions": { "sourceType": "module", "ecmaVersion": 8, @@ -26,7 +29,8 @@ "rules": { "indent": [ "error", - 2, { + 2, + { "SwitchCase": 1 } ], @@ -45,11 +49,17 @@ "no-console": 0, "no-useless-escape": 0, "no-case-declarations": 0, - "no-unused-vars": [2, { "vars": "all", "args": "none" }], + "no-unused-vars": [ + 2, + { + "vars": "all", + "args": "none" + } + ], "react/no-string-refs": 0, "react/prop-types": 0, "react/display-name": 0, "react/no-direct-mutation-state": 0, "react/no-deprecated": 0 } -} +} \ No newline at end of file diff --git a/.travis.yml b/www-admin/.travis.yml similarity index 100% rename from .travis.yml rename to www-admin/.travis.yml diff --git a/admin/applications/blog/cores/getErrorMessage.js b/www-admin/admin/applications/blog/cores/getErrorMessage.js similarity index 100% rename from admin/applications/blog/cores/getErrorMessage.js rename to www-admin/admin/applications/blog/cores/getErrorMessage.js diff --git a/admin/applications/blog/cores/loader.js b/www-admin/admin/applications/blog/cores/loader.js similarity index 100% rename from admin/applications/blog/cores/loader.js rename to www-admin/admin/applications/blog/cores/loader.js diff --git a/admin/applications/blog/cores/watchdog.js b/www-admin/admin/applications/blog/cores/watchdog.js similarity index 100% rename from admin/applications/blog/cores/watchdog.js rename to www-admin/admin/applications/blog/cores/watchdog.js diff --git a/admin/applications/blog/index.jsx b/www-admin/admin/applications/blog/index.jsx similarity index 100% rename from admin/applications/blog/index.jsx rename to www-admin/admin/applications/blog/index.jsx diff --git a/admin/applications/blog/model.jsx b/www-admin/admin/applications/blog/model.jsx similarity index 100% rename from admin/applications/blog/model.jsx rename to www-admin/admin/applications/blog/model.jsx diff --git a/admin/applications/blog/modules/admin-user/config.json b/www-admin/admin/applications/blog/modules/admin-user/config.json similarity index 100% rename from admin/applications/blog/modules/admin-user/config.json rename to www-admin/admin/applications/blog/modules/admin-user/config.json diff --git a/admin/applications/blog/modules/admin-user/index.jsx b/www-admin/admin/applications/blog/modules/admin-user/index.jsx similarity index 100% rename from admin/applications/blog/modules/admin-user/index.jsx rename to www-admin/admin/applications/blog/modules/admin-user/index.jsx diff --git a/admin/applications/blog/modules/admin-user/pop/create/config.json b/www-admin/admin/applications/blog/modules/admin-user/pop/create/config.json similarity index 100% rename from admin/applications/blog/modules/admin-user/pop/create/config.json rename to www-admin/admin/applications/blog/modules/admin-user/pop/create/config.json diff --git a/admin/applications/blog/modules/admin-user/pop/create/index.js b/www-admin/admin/applications/blog/modules/admin-user/pop/create/index.js similarity index 100% rename from admin/applications/blog/modules/admin-user/pop/create/index.js rename to www-admin/admin/applications/blog/modules/admin-user/pop/create/index.js diff --git a/admin/applications/blog/modules/admin-user/pop/enable/config.json b/www-admin/admin/applications/blog/modules/admin-user/pop/enable/config.json similarity index 100% rename from admin/applications/blog/modules/admin-user/pop/enable/config.json rename to www-admin/admin/applications/blog/modules/admin-user/pop/enable/config.json diff --git a/admin/applications/blog/modules/admin-user/pop/enable/index.js b/www-admin/admin/applications/blog/modules/admin-user/pop/enable/index.js similarity index 100% rename from admin/applications/blog/modules/admin-user/pop/enable/index.js rename to www-admin/admin/applications/blog/modules/admin-user/pop/enable/index.js diff --git a/admin/applications/blog/modules/admin-user/request.js b/www-admin/admin/applications/blog/modules/admin-user/request.js similarity index 100% rename from admin/applications/blog/modules/admin-user/request.js rename to www-admin/admin/applications/blog/modules/admin-user/request.js diff --git a/admin/applications/blog/modules/admin-user/style/index.less b/www-admin/admin/applications/blog/modules/admin-user/style/index.less similarity index 100% rename from admin/applications/blog/modules/admin-user/style/index.less rename to www-admin/admin/applications/blog/modules/admin-user/style/index.less diff --git a/admin/applications/blog/modules/jobs-list/config.json b/www-admin/admin/applications/blog/modules/jobs-list/config.json similarity index 100% rename from admin/applications/blog/modules/jobs-list/config.json rename to www-admin/admin/applications/blog/modules/jobs-list/config.json diff --git a/admin/applications/blog/modules/jobs-list/index.jsx b/www-admin/admin/applications/blog/modules/jobs-list/index.jsx similarity index 100% rename from admin/applications/blog/modules/jobs-list/index.jsx rename to www-admin/admin/applications/blog/modules/jobs-list/index.jsx diff --git a/admin/applications/blog/modules/jobs-list/jobs.json b/www-admin/admin/applications/blog/modules/jobs-list/jobs.json similarity index 100% rename from admin/applications/blog/modules/jobs-list/jobs.json rename to www-admin/admin/applications/blog/modules/jobs-list/jobs.json diff --git a/admin/applications/blog/modules/jobs-list/pop/create/config.json b/www-admin/admin/applications/blog/modules/jobs-list/pop/create/config.json similarity index 100% rename from admin/applications/blog/modules/jobs-list/pop/create/config.json rename to www-admin/admin/applications/blog/modules/jobs-list/pop/create/config.json diff --git a/admin/applications/blog/modules/jobs-list/pop/create/index.js b/www-admin/admin/applications/blog/modules/jobs-list/pop/create/index.js similarity index 100% rename from admin/applications/blog/modules/jobs-list/pop/create/index.js rename to www-admin/admin/applications/blog/modules/jobs-list/pop/create/index.js diff --git a/admin/applications/blog/modules/jobs-list/pop/status/config.json b/www-admin/admin/applications/blog/modules/jobs-list/pop/status/config.json similarity index 100% rename from admin/applications/blog/modules/jobs-list/pop/status/config.json rename to www-admin/admin/applications/blog/modules/jobs-list/pop/status/config.json diff --git a/admin/applications/blog/modules/jobs-list/pop/status/index.js b/www-admin/admin/applications/blog/modules/jobs-list/pop/status/index.js similarity index 100% rename from admin/applications/blog/modules/jobs-list/pop/status/index.js rename to www-admin/admin/applications/blog/modules/jobs-list/pop/status/index.js diff --git a/admin/applications/blog/modules/jobs-list/request.js b/www-admin/admin/applications/blog/modules/jobs-list/request.js similarity index 100% rename from admin/applications/blog/modules/jobs-list/request.js rename to www-admin/admin/applications/blog/modules/jobs-list/request.js diff --git a/admin/applications/blog/modules/jobs-list/style/index.less b/www-admin/admin/applications/blog/modules/jobs-list/style/index.less similarity index 100% rename from admin/applications/blog/modules/jobs-list/style/index.less rename to www-admin/admin/applications/blog/modules/jobs-list/style/index.less diff --git a/admin/applications/blog/modules/jobs-publish/config.json b/www-admin/admin/applications/blog/modules/jobs-publish/config.json similarity index 100% rename from admin/applications/blog/modules/jobs-publish/config.json rename to www-admin/admin/applications/blog/modules/jobs-publish/config.json diff --git a/admin/applications/blog/modules/jobs-publish/index.jsx b/www-admin/admin/applications/blog/modules/jobs-publish/index.jsx similarity index 100% rename from admin/applications/blog/modules/jobs-publish/index.jsx rename to www-admin/admin/applications/blog/modules/jobs-publish/index.jsx diff --git a/admin/applications/blog/modules/jobs-publish/request.js b/www-admin/admin/applications/blog/modules/jobs-publish/request.js similarity index 100% rename from admin/applications/blog/modules/jobs-publish/request.js rename to www-admin/admin/applications/blog/modules/jobs-publish/request.js diff --git a/admin/applications/blog/modules/jobs-publish/select_multi.jsx b/www-admin/admin/applications/blog/modules/jobs-publish/select_multi.jsx similarity index 100% rename from admin/applications/blog/modules/jobs-publish/select_multi.jsx rename to www-admin/admin/applications/blog/modules/jobs-publish/select_multi.jsx diff --git a/admin/applications/blog/modules/jobs-publish/style/index.less b/www-admin/admin/applications/blog/modules/jobs-publish/style/index.less similarity index 100% rename from admin/applications/blog/modules/jobs-publish/style/index.less rename to www-admin/admin/applications/blog/modules/jobs-publish/style/index.less diff --git a/admin/applications/blog/modules/news-publish/config.json b/www-admin/admin/applications/blog/modules/news-publish/config.json similarity index 100% rename from admin/applications/blog/modules/news-publish/config.json rename to www-admin/admin/applications/blog/modules/news-publish/config.json diff --git a/admin/applications/blog/modules/news-publish/index.jsx b/www-admin/admin/applications/blog/modules/news-publish/index.jsx similarity index 100% rename from admin/applications/blog/modules/news-publish/index.jsx rename to www-admin/admin/applications/blog/modules/news-publish/index.jsx diff --git a/admin/applications/blog/modules/news-publish/request.js b/www-admin/admin/applications/blog/modules/news-publish/request.js similarity index 100% rename from admin/applications/blog/modules/news-publish/request.js rename to www-admin/admin/applications/blog/modules/news-publish/request.js diff --git a/admin/applications/blog/modules/news-publish/style/index.less b/www-admin/admin/applications/blog/modules/news-publish/style/index.less similarity index 100% rename from admin/applications/blog/modules/news-publish/style/index.less rename to www-admin/admin/applications/blog/modules/news-publish/style/index.less diff --git a/admin/applications/blog/modules/train-apply/config.json b/www-admin/admin/applications/blog/modules/train-apply/config.json similarity index 100% rename from admin/applications/blog/modules/train-apply/config.json rename to www-admin/admin/applications/blog/modules/train-apply/config.json diff --git a/admin/applications/blog/modules/train-apply/index.jsx b/www-admin/admin/applications/blog/modules/train-apply/index.jsx similarity index 100% rename from admin/applications/blog/modules/train-apply/index.jsx rename to www-admin/admin/applications/blog/modules/train-apply/index.jsx diff --git a/admin/applications/blog/modules/train-apply/request.js b/www-admin/admin/applications/blog/modules/train-apply/request.js similarity index 100% rename from admin/applications/blog/modules/train-apply/request.js rename to www-admin/admin/applications/blog/modules/train-apply/request.js diff --git a/admin/applications/blog/modules/train-apply/style/index.less b/www-admin/admin/applications/blog/modules/train-apply/style/index.less similarity index 100% rename from admin/applications/blog/modules/train-apply/style/index.less rename to www-admin/admin/applications/blog/modules/train-apply/style/index.less diff --git a/admin/applications/blog/style/common.less b/www-admin/admin/applications/blog/style/common.less similarity index 100% rename from admin/applications/blog/style/common.less rename to www-admin/admin/applications/blog/style/common.less diff --git a/admin/applications/blog/style/index.less b/www-admin/admin/applications/blog/style/index.less similarity index 100% rename from admin/applications/blog/style/index.less rename to www-admin/admin/applications/blog/style/index.less diff --git a/admin/applications/login/index.jsx b/www-admin/admin/applications/login/index.jsx similarity index 100% rename from admin/applications/login/index.jsx rename to www-admin/admin/applications/login/index.jsx diff --git a/admin/applications/login/model.jsx b/www-admin/admin/applications/login/model.jsx similarity index 97% rename from admin/applications/login/model.jsx rename to www-admin/admin/applications/login/model.jsx index 018d281..60fe410 100644 --- a/admin/applications/login/model.jsx +++ b/www-admin/admin/applications/login/model.jsx @@ -59,7 +59,7 @@ class Model extends React.Component {
- +
diff --git a/admin/applications/login/request.js b/www-admin/admin/applications/login/request.js similarity index 100% rename from admin/applications/login/request.js rename to www-admin/admin/applications/login/request.js diff --git a/admin/applications/login/style/index.less b/www-admin/admin/applications/login/style/index.less similarity index 100% rename from admin/applications/login/style/index.less rename to www-admin/admin/applications/login/style/index.less diff --git a/admin/assets/blog/arrow-left.svg b/www-admin/admin/assets/blog/arrow-left.svg similarity index 100% rename from admin/assets/blog/arrow-left.svg rename to www-admin/admin/assets/blog/arrow-left.svg diff --git a/admin/assets/blog/arrow-right.svg b/www-admin/admin/assets/blog/arrow-right.svg similarity index 100% rename from admin/assets/blog/arrow-right.svg rename to www-admin/admin/assets/blog/arrow-right.svg diff --git a/admin/assets/blog/close.svg b/www-admin/admin/assets/blog/close.svg similarity index 100% rename from admin/assets/blog/close.svg rename to www-admin/admin/assets/blog/close.svg diff --git a/admin/assets/blog/headpic.jpg b/www-admin/admin/assets/blog/headpic.jpg similarity index 100% rename from admin/assets/blog/headpic.jpg rename to www-admin/admin/assets/blog/headpic.jpg diff --git a/admin/assets/blog/search.png b/www-admin/admin/assets/blog/search.png similarity index 100% rename from admin/assets/blog/search.png rename to www-admin/admin/assets/blog/search.png diff --git a/admin/assets/login/logo.png b/www-admin/admin/assets/login/logo.png similarity index 100% rename from admin/assets/login/logo.png rename to www-admin/admin/assets/login/logo.png diff --git a/admin/build.js b/www-admin/admin/build.js similarity index 100% rename from admin/build.js rename to www-admin/admin/build.js diff --git a/admin/components/basic_props/edit_content.jsx b/www-admin/admin/components/basic_props/edit_content.jsx similarity index 100% rename from admin/components/basic_props/edit_content.jsx rename to www-admin/admin/components/basic_props/edit_content.jsx diff --git a/admin/components/basic_props/index.jsx b/www-admin/admin/components/basic_props/index.jsx similarity index 100% rename from admin/components/basic_props/index.jsx rename to www-admin/admin/components/basic_props/index.jsx diff --git a/admin/components/basic_props/style/index.less b/www-admin/admin/components/basic_props/style/index.less similarity index 100% rename from admin/components/basic_props/style/index.less rename to www-admin/admin/components/basic_props/style/index.less diff --git a/admin/components/keywords/config.json b/www-admin/admin/components/keywords/config.json similarity index 100% rename from admin/components/keywords/config.json rename to www-admin/admin/components/keywords/config.json diff --git a/admin/components/keywords/index.jsx b/www-admin/admin/components/keywords/index.jsx similarity index 100% rename from admin/components/keywords/index.jsx rename to www-admin/admin/components/keywords/index.jsx diff --git a/admin/components/keywords/style/index.less b/www-admin/admin/components/keywords/style/index.less similarity index 100% rename from admin/components/keywords/style/index.less rename to www-admin/admin/components/keywords/style/index.less diff --git a/admin/components/leftbar/config.json b/www-admin/admin/components/leftbar/config.json similarity index 100% rename from admin/components/leftbar/config.json rename to www-admin/admin/components/leftbar/config.json diff --git a/admin/components/leftbar/index.jsx b/www-admin/admin/components/leftbar/index.jsx similarity index 89% rename from admin/components/leftbar/index.jsx rename to www-admin/admin/components/leftbar/index.jsx index 2a34e3a..f1fd09a 100644 --- a/admin/components/leftbar/index.jsx +++ b/www-admin/admin/components/leftbar/index.jsx @@ -47,7 +47,7 @@ class Leftbar extends React.Component { return (
-
+

{state.nickname}

退出登录
@@ -59,7 +59,7 @@ class Leftbar extends React.Component { }
- +
); diff --git a/admin/components/leftbar/style/index.less b/www-admin/admin/components/leftbar/style/index.less similarity index 100% rename from admin/components/leftbar/style/index.less rename to www-admin/admin/components/leftbar/style/index.less diff --git a/admin/components/main/button_list.jsx b/www-admin/admin/components/main/button_list.jsx similarity index 100% rename from admin/components/main/button_list.jsx rename to www-admin/admin/components/main/button_list.jsx diff --git a/admin/components/main/detail.jsx b/www-admin/admin/components/main/detail.jsx similarity index 100% rename from admin/components/main/detail.jsx rename to www-admin/admin/components/main/detail.jsx diff --git a/admin/components/main/event.js b/www-admin/admin/components/main/event.js similarity index 100% rename from admin/components/main/event.js rename to www-admin/admin/components/main/event.js diff --git a/admin/components/main/filter_search.jsx b/www-admin/admin/components/main/filter_search.jsx similarity index 100% rename from admin/components/main/filter_search.jsx rename to www-admin/admin/components/main/filter_search.jsx diff --git a/admin/components/main/index.jsx b/www-admin/admin/components/main/index.jsx similarity index 100% rename from admin/components/main/index.jsx rename to www-admin/admin/components/main/index.jsx diff --git a/admin/components/main/model.jsx b/www-admin/admin/components/main/model.jsx similarity index 100% rename from admin/components/main/model.jsx rename to www-admin/admin/components/main/model.jsx diff --git a/admin/components/main/style/index.less b/www-admin/admin/components/main/style/index.less similarity index 100% rename from admin/components/main/style/index.less rename to www-admin/admin/components/main/style/index.less diff --git a/admin/components/main/style/model.less b/www-admin/admin/components/main/style/model.less similarity index 100% rename from admin/components/main/style/model.less rename to www-admin/admin/components/main/style/model.less diff --git a/admin/components/main/table_filter.jsx b/www-admin/admin/components/main/table_filter.jsx similarity index 100% rename from admin/components/main/table_filter.jsx rename to www-admin/admin/components/main/table_filter.jsx diff --git a/admin/components/modal_common/base.jsx b/www-admin/admin/components/modal_common/base.jsx similarity index 100% rename from admin/components/modal_common/base.jsx rename to www-admin/admin/components/modal_common/base.jsx diff --git a/admin/components/modal_common/index.jsx b/www-admin/admin/components/modal_common/index.jsx similarity index 100% rename from admin/components/modal_common/index.jsx rename to www-admin/admin/components/modal_common/index.jsx diff --git a/admin/components/modal_common/style/index.less b/www-admin/admin/components/modal_common/style/index.less similarity index 100% rename from admin/components/modal_common/style/index.less rename to www-admin/admin/components/modal_common/style/index.less diff --git a/admin/components/modal_common/subs/adapter/index.jsx b/www-admin/admin/components/modal_common/subs/adapter/index.jsx similarity index 100% rename from admin/components/modal_common/subs/adapter/index.jsx rename to www-admin/admin/components/modal_common/subs/adapter/index.jsx diff --git a/admin/components/modal_common/subs/checkbox/index.jsx b/www-admin/admin/components/modal_common/subs/checkbox/index.jsx similarity index 100% rename from admin/components/modal_common/subs/checkbox/index.jsx rename to www-admin/admin/components/modal_common/subs/checkbox/index.jsx diff --git a/admin/components/modal_common/subs/data_list/index.jsx b/www-admin/admin/components/modal_common/subs/data_list/index.jsx similarity index 100% rename from admin/components/modal_common/subs/data_list/index.jsx rename to www-admin/admin/components/modal_common/subs/data_list/index.jsx diff --git a/admin/components/modal_common/subs/display_box/index.jsx b/www-admin/admin/components/modal_common/subs/display_box/index.jsx similarity index 100% rename from admin/components/modal_common/subs/display_box/index.jsx rename to www-admin/admin/components/modal_common/subs/display_box/index.jsx diff --git a/admin/components/modal_common/subs/group_select/index.jsx b/www-admin/admin/components/modal_common/subs/group_select/index.jsx similarity index 100% rename from admin/components/modal_common/subs/group_select/index.jsx rename to www-admin/admin/components/modal_common/subs/group_select/index.jsx diff --git a/admin/components/modal_common/subs/icon_label/index.jsx b/www-admin/admin/components/modal_common/subs/icon_label/index.jsx similarity index 100% rename from admin/components/modal_common/subs/icon_label/index.jsx rename to www-admin/admin/components/modal_common/subs/icon_label/index.jsx diff --git a/admin/components/modal_common/subs/input/index.jsx b/www-admin/admin/components/modal_common/subs/input/index.jsx similarity index 100% rename from admin/components/modal_common/subs/input/index.jsx rename to www-admin/admin/components/modal_common/subs/input/index.jsx diff --git a/admin/components/modal_common/subs/input_pwd/index.jsx b/www-admin/admin/components/modal_common/subs/input_pwd/index.jsx similarity index 100% rename from admin/components/modal_common/subs/input_pwd/index.jsx rename to www-admin/admin/components/modal_common/subs/input_pwd/index.jsx diff --git a/admin/components/modal_common/subs/key_value/index.jsx b/www-admin/admin/components/modal_common/subs/key_value/index.jsx similarity index 100% rename from admin/components/modal_common/subs/key_value/index.jsx rename to www-admin/admin/components/modal_common/subs/key_value/index.jsx diff --git a/admin/components/modal_common/subs/key_value_table/index.jsx b/www-admin/admin/components/modal_common/subs/key_value_table/index.jsx similarity index 100% rename from admin/components/modal_common/subs/key_value_table/index.jsx rename to www-admin/admin/components/modal_common/subs/key_value_table/index.jsx diff --git a/admin/components/modal_common/subs/progress/index.jsx b/www-admin/admin/components/modal_common/subs/progress/index.jsx similarity index 100% rename from admin/components/modal_common/subs/progress/index.jsx rename to www-admin/admin/components/modal_common/subs/progress/index.jsx diff --git a/admin/components/modal_common/subs/radio_input/index.jsx b/www-admin/admin/components/modal_common/subs/radio_input/index.jsx similarity index 100% rename from admin/components/modal_common/subs/radio_input/index.jsx rename to www-admin/admin/components/modal_common/subs/radio_input/index.jsx diff --git a/admin/components/modal_common/subs/select/index.jsx b/www-admin/admin/components/modal_common/subs/select/index.jsx similarity index 100% rename from admin/components/modal_common/subs/select/index.jsx rename to www-admin/admin/components/modal_common/subs/select/index.jsx diff --git a/admin/components/modal_common/subs/select_group/index.jsx b/www-admin/admin/components/modal_common/subs/select_group/index.jsx similarity index 100% rename from admin/components/modal_common/subs/select_group/index.jsx rename to www-admin/admin/components/modal_common/subs/select_group/index.jsx diff --git a/admin/components/modal_common/subs/select_single/index.jsx b/www-admin/admin/components/modal_common/subs/select_single/index.jsx similarity index 100% rename from admin/components/modal_common/subs/select_single/index.jsx rename to www-admin/admin/components/modal_common/subs/select_single/index.jsx diff --git a/admin/components/modal_common/subs/short_tip/index.jsx b/www-admin/admin/components/modal_common/subs/short_tip/index.jsx similarity index 100% rename from admin/components/modal_common/subs/short_tip/index.jsx rename to www-admin/admin/components/modal_common/subs/short_tip/index.jsx diff --git a/admin/components/modal_common/subs/slider/index.jsx b/www-admin/admin/components/modal_common/subs/slider/index.jsx similarity index 100% rename from admin/components/modal_common/subs/slider/index.jsx rename to www-admin/admin/components/modal_common/subs/slider/index.jsx diff --git a/admin/components/modal_common/subs/tab/index.jsx b/www-admin/admin/components/modal_common/subs/tab/index.jsx similarity index 100% rename from admin/components/modal_common/subs/tab/index.jsx rename to www-admin/admin/components/modal_common/subs/tab/index.jsx diff --git a/admin/components/modal_common/subs/text/index.jsx b/www-admin/admin/components/modal_common/subs/text/index.jsx similarity index 100% rename from admin/components/modal_common/subs/text/index.jsx rename to www-admin/admin/components/modal_common/subs/text/index.jsx diff --git a/admin/components/modal_common/subs/textarea/index.jsx b/www-admin/admin/components/modal_common/subs/textarea/index.jsx similarity index 100% rename from admin/components/modal_common/subs/textarea/index.jsx rename to www-admin/admin/components/modal_common/subs/textarea/index.jsx diff --git a/admin/components/modal_common/subs/tip/index.jsx b/www-admin/admin/components/modal_common/subs/tip/index.jsx similarity index 100% rename from admin/components/modal_common/subs/tip/index.jsx rename to www-admin/admin/components/modal_common/subs/tip/index.jsx diff --git a/admin/components/modal_delete/base.jsx b/www-admin/admin/components/modal_delete/base.jsx similarity index 100% rename from admin/components/modal_delete/base.jsx rename to www-admin/admin/components/modal_delete/base.jsx diff --git a/admin/components/modal_delete/index.jsx b/www-admin/admin/components/modal_delete/index.jsx similarity index 100% rename from admin/components/modal_delete/index.jsx rename to www-admin/admin/components/modal_delete/index.jsx diff --git a/admin/components/modal_delete/style/index.less b/www-admin/admin/components/modal_delete/style/index.less similarity index 100% rename from admin/components/modal_delete/style/index.less rename to www-admin/admin/components/modal_delete/style/index.less diff --git a/admin/components/tip/index.jsx b/www-admin/admin/components/tip/index.jsx similarity index 100% rename from admin/components/tip/index.jsx rename to www-admin/admin/components/tip/index.jsx diff --git a/admin/components/tip/style/index.less b/www-admin/admin/components/tip/style/index.less similarity index 100% rename from admin/components/tip/style/index.less rename to www-admin/admin/components/tip/style/index.less diff --git a/admin/config/editor.js b/www-admin/admin/config/editor.js similarity index 100% rename from admin/config/editor.js rename to www-admin/admin/config/editor.js diff --git a/admin/core/ajax.js b/www-admin/admin/core/ajax.js similarity index 100% rename from admin/core/ajax.js rename to www-admin/admin/core/ajax.js diff --git a/admin/core/fetch.js b/www-admin/admin/core/fetch.js similarity index 100% rename from admin/core/fetch.js rename to www-admin/admin/core/fetch.js diff --git a/admin/core/fileupload.js b/www-admin/admin/core/fileupload.js similarity index 100% rename from admin/core/fileupload.js rename to www-admin/admin/core/fileupload.js diff --git a/admin/dll.config.js b/www-admin/admin/dll.config.js similarity index 100% rename from admin/dll.config.js rename to www-admin/admin/dll.config.js diff --git a/admin/style/index.less b/www-admin/admin/style/index.less similarity index 100% rename from admin/style/index.less rename to www-admin/admin/style/index.less diff --git a/www-admin/admin/uskin b/www-admin/admin/uskin new file mode 160000 index 0000000..fdbf7ea --- /dev/null +++ b/www-admin/admin/uskin @@ -0,0 +1 @@ +Subproject commit fdbf7ea603c80470355edf31ea0eb3dcafaa457b diff --git a/admin/utils/error_message.js b/www-admin/admin/utils/error_message.js similarity index 100% rename from admin/utils/error_message.js rename to www-admin/admin/utils/error_message.js diff --git a/admin/utils/router.js b/www-admin/admin/utils/router.js similarity index 100% rename from admin/utils/router.js rename to www-admin/admin/utils/router.js diff --git a/admin/utils/router_delegate.js b/www-admin/admin/utils/router_delegate.js similarity index 100% rename from admin/utils/router_delegate.js rename to www-admin/admin/utils/router_delegate.js diff --git a/admin/utils/time_unification.js b/www-admin/admin/utils/time_unification.js similarity index 100% rename from admin/utils/time_unification.js rename to www-admin/admin/utils/time_unification.js diff --git a/admin/webpack.config.js b/www-admin/admin/webpack.config.js similarity index 100% rename from admin/webpack.config.js rename to www-admin/admin/webpack.config.js diff --git a/www-admin/app.js b/www-admin/app.js new file mode 100644 index 0000000..770f70e --- /dev/null +++ b/www-admin/app.js @@ -0,0 +1,8 @@ +module.exports = app => { + // if (app.config.env === 'local') { + app.beforeStart( async ()=>{ + + await app.model.sync({}); + }); + //} +}; \ No newline at end of file diff --git a/server/app-admin/account/routes/account.js b/www-admin/app/controller/admin/account.js similarity index 68% rename from server/app-admin/account/routes/account.js rename to www-admin/app/controller/admin/account.js index 26e38c5..40cf6ef 100644 --- a/server/app-admin/account/routes/account.js +++ b/www-admin/app/controller/admin/account.js @@ -1,18 +1,22 @@ 'use strict'; -const tools = require('tools'); -const controller = require('../controller/account'); -module.exports = (router) => { - router.get('/api/account', async (ctx, next) => { - let accounts = await controller.list(); + +const Controller = require('egg').Controller; +const tools = require('../../tools'); + +class AccountController extends Controller { + async showList() { + const { ctx,service } = this; + let accounts = await service.admin.account.findAll(); ctx.body = { statusCode: 200, payload: { accounts } }; - }); + } - router.post('/api/account', async (ctx, next) => { + async create() { + const { ctx,service } = this; let {email, phone, nickname, password} = ctx.request.body; let errors = []; if (!tools.RegExp.PHONE.test(phone)) { @@ -40,10 +44,11 @@ module.exports = (router) => { nickname = nickname.trim(); } try { - await controller.create({ + await service.admin.account.create({ password, nickname, email, phone }); } catch (e) { + console.log(e); ctx.status = 500; ctx.body = { statusCode: 500, @@ -54,21 +59,23 @@ module.exports = (router) => { statusCode: 200, message: '企业客户创建成功' }; + } - }); - - router.put('/api/account/:id', async (ctx, next) => { - await controller.update(ctx.params.id, ctx.request.body); + async update() { + const { ctx, service } = this; + await service.admin.account.update(ctx.params.id, ctx.request.body); ctx.body = { statusCode: 200, message: '账户更新成功' }; - }); - router.put('/api/account/:id/enable', async (ctx, next) => { + } + + async enable() { + const { ctx, service } = this; let enable = !!ctx.request.body.enable; let accountId = ctx.params.id; - await controller.enable(accountId, enable); + await service.admin.account.enable(accountId, enable); if (ctx.session.admin_user.id === accountId) { delete ctx.session.admin_user; } @@ -76,6 +83,7 @@ module.exports = (router) => { statusCode: 200, message: `账户${enable ? '启用' : '禁用'}成功` }; + } +} - }); -}; +module.exports = AccountController; \ No newline at end of file diff --git a/www-admin/app/controller/admin/apply.js b/www-admin/app/controller/admin/apply.js new file mode 100644 index 0000000..2a07e90 --- /dev/null +++ b/www-admin/app/controller/admin/apply.js @@ -0,0 +1,33 @@ +'use strict'; + +const Controller = require('egg').Controller; + +class ApplyController extends Controller { + async listCloudApply() { + const { ctx, service } = this; + let list = await service.admin.apply.cloudFindAll(); + + ctx.body = { + statusCode: 200, + message: '获取托管云申请成功', + payload: { + list + } + }; + } + + async listTrainApply() { + const { ctx,service } = this; + let list = await service.admin.apply.trainFindAll(); + + ctx.body = { + statusCode: 200, + message: '获取培训成功', + payload: { + list + } + }; + } +} + +module.exports = ApplyController; \ No newline at end of file diff --git a/www-admin/app/controller/admin/article.js b/www-admin/app/controller/admin/article.js new file mode 100644 index 0000000..0b86a1f --- /dev/null +++ b/www-admin/app/controller/admin/article.js @@ -0,0 +1,65 @@ +'use strict'; + +const Controller = require('egg').Controller; + +class ArticleController extends Controller { + async list() { + const { ctx,service } = this; + ctx.body = await service.admin.article.list(this.ctx.query); + } + + async get() { + const { ctx, service } = this; + let article = await service.admin.article.get(ctx.params.id); + ctx.body = { article }; + } + + async create() { + const { ctx, service } = this; + ctx.body = { article: await service.admin.article.create(ctx.request.body, ctx.session.admin_user) }; + } + + async update() { + const { ctx, service } = this; + ctx.body = { article: await service.admin.article.update(ctx.params.id, ctx.request.body) }; + } + + async set() { + const { ctx, service } = this; + let id = ctx.params.id; + let field = ctx.params.field; + let value = ctx.params.value; + switch (field) { + case 'status': + await service.admin.article.setStatus(id, value); + break; + case 'top': + await service.admin.article.setTop(id, 'true' === value); + break; + case 'level': + await service.admin.article.setLevel(id, value); + break; + default: + break; + } + ctx.body = 'SUCCESS'; + } + + async updateField() { + const { ctx, service } = this; + let { id, field } = ctx.params, body = ctx.request.body; + if (!body.hasOwnProperty(field)) { + ctx.status = 400; + ctx.body = { statusCode: 400, errors: [{ message: '错误的请求参数' }] }; + } else { + ctx.body = { article: await service.admin.article.updateField(id, field, body[field]) }; + } + } + + async listTag() { + const { ctx, service } = this; + ctx.body = await service.admin.article.listTag(); + } +} + +module.exports = ArticleController; \ No newline at end of file diff --git a/server/app-admin/account/routes/auth.js b/www-admin/app/controller/admin/auth.js similarity index 75% rename from server/app-admin/account/routes/auth.js rename to www-admin/app/controller/admin/auth.js index 2dba2f6..6869b1a 100644 --- a/server/app-admin/account/routes/auth.js +++ b/www-admin/app/controller/admin/auth.js @@ -1,10 +1,10 @@ 'use strict'; -const tools = require('tools'); -const userModel = require('server/models').sequelize.models.account; - -module.exports = (router) => { - router.post('/login', async (ctx, next) => { +const Controller = require('egg').Controller; +const tools = require('../../tools'); +class AuthController extends Controller { + async login() { + const { ctx, service} = this; const {captcha, password, username} = ctx.request.body; if (!captcha || !ctx.session.admin_captcha || captcha.toLowerCase() !== ctx.session.admin_captcha.toLowerCase()) { @@ -20,11 +20,7 @@ module.exports = (router) => { } else { where.username = username; } - const user = await userModel.findOne({ - where, - attributes: {exclude: ['createdAt', 'updatedAt']}, - raw: true - }); + const user = await service.admin.auth.findOne(where); const errors = []; if (!user) { errors.push({message: '账户不存在'}); @@ -40,10 +36,13 @@ module.exports = (router) => { ctx.session.admin_user = Object.assign({token: tools.uuid.v4()}, user); ctx.body = 'SUCCESS'; } - }); + } - router.all('/logout', (ctx, next) => { + async all() { + const { ctx } = this; delete ctx.session.admin_user; ctx.redirect('/admin/login'); - }); -}; + } +} + +module.exports = AuthController; \ No newline at end of file diff --git a/www-admin/app/controller/admin/company.js b/www-admin/app/controller/admin/company.js new file mode 100644 index 0000000..0dbfabe --- /dev/null +++ b/www-admin/app/controller/admin/company.js @@ -0,0 +1,119 @@ +// 'use strict'; + +// const Controller = require('egg').Controller; +// const tools = require('tools'); + +// class CompanyController extends Controller { +// async listCompany() { +// const { ctx, service } = this; +// const companies = await service.admin.company.listCompany(); +// ctx.body = { +// statusCode: 200, +// payload: { +// companies +// } +// }; +// } + +// async createCompany() { +// const { ctx, service } = this; +// //name +// //location +// //phone +// //admin:{nickname,email,phone} +// let errors = []; +// let {name, location, phone} = ctx.request.body; + +// if (!name || !name.trim()) { +// ctx.status = 400; +// ctx.body = { +// errors: [{message: '公司名称不能为空'}] +// }; +// return; +// } +// name = name.trim(); +// let admin = ctx.request.body.admin; +// if (!admin) { +// errors.push({message: '管理员不能为空'}); +// } else { +// if (tools.RegExp.PHONE.test(admin.phone)) { +// errors.push({message: '管理员手机号格式不正确'}); +// } +// if (tools.RegExp.EMAIL.test(admin.email)) { +// errors.push({message: '管理员邮箱格式不正确'}); +// } +// } + +// if (errors.length) { +// ctx.status = 400; +// ctx.body = { +// statusCode: 400, +// errors +// }; +// return; +// } + +// try { +// await service.admin.company.createCompany({ +// name, location, phone +// }, admin); +// } catch (e) { +// ctx.status = 409; +// ctx.body = { +// statusCode: 409, +// errors: e +// }; +// return; +// } + +// ctx.body = { +// statusCode: 200, +// message: '公司创建成功' +// }; +// } + +// async updateCompany() { +// const { ctx, service } = this; +// let companyId = ctx.params.companyId; +// let {name, location, phone, admin} = ctx.request.body; +// try { +// await service.admin.company.updateCompany(companyId, { +// name, location, phone +// }, admin); +// } catch (e) { +// ctx.status = 500; +// ctx.body = { +// statusCode: 500, +// errors: [e] +// }; +// return; +// } + +// ctx.body = { +// statusCode: 200, +// message: '公司更新成功' +// }; +// } + +// async enable() { +// const { ctx, service } = this; +// let enable = !!ctx.request.body.enable; +// let companyId = ctx.params.id; +// try { +// await service.admin.company.enable(companyId, enable); +// } catch (e) { +// ctx.status = 500; +// ctx.body = { +// statusCode: 500, +// errors: [e] +// }; +// return; +// } + +// ctx.body = { +// statusCode: 200, +// message: `公司${enable ? '启用' : '禁用'}成功` +// }; +// } +// } +// module.exports = CompanyController; \ No newline at end of file diff --git a/client/static/common/style/fonts/icons-hinted.ttf b/www-admin/app/controller/admin/docs.js similarity index 100% rename from client/static/common/style/fonts/icons-hinted.ttf rename to www-admin/app/controller/admin/docs.js diff --git a/server/app-admin/view/routes/view.js b/www-admin/app/controller/admin/index.js similarity index 54% rename from server/app-admin/view/routes/view.js rename to www-admin/app/controller/admin/index.js index 0edb2d5..c4ce7c9 100644 --- a/server/app-admin/view/routes/view.js +++ b/www-admin/app/controller/admin/index.js @@ -1,6 +1,7 @@ 'use strict'; -const fs = require('fs'); +const Controller = require('egg').Controller; +// const fs = require('fs'); const glob = require('glob'); const template = (data) => { @@ -11,14 +12,14 @@ const template = (data) => { - - + + ${data.title}
- - + + `; @@ -41,48 +42,58 @@ const getTemplateObj = (name) => { }) }; }; -const frontendApps = fs.readdirSync('admin/applications').filter(file => file.indexOf('.') === -1); -let firstApp; -module.exports = (router) => { - const routesRegExp = frontendApps.map(name => { - if (!firstApp && name !== 'login') { - firstApp = name; - } - return new RegExp(`(^\/${name}$)|(^\/${name}\/(.*))`); - }); - - router.get('/', function (ctx, next) { +// const frontendApps = fs.readdirSync('admin/applications').filter(file => file.indexOf('.') === -1); +let firstApp='/admin/blog'; +// const routesRegExp = frontendApps.map(name => { +// if (!firstApp && name !== 'login') { +// firstApp = '/admin/'+name; +// } +// return new RegExp(`(^\/admin\/${name}$)|(^\/admin\/${name}\/(.*))`); +// }); +class IndexController extends Controller { + async render() { + // console.log('render'); + const { ctx } = this; if (ctx.session && ctx.session.admin_user && ctx.session.admin_user.token) { - ctx.redirect('/admin/login'); + ctx.redirect('/admin/blog'); } else { ctx.redirect('/admin/login'); } - }); - router.get(routesRegExp, (ctx, next) => { - let name = ctx.path.split('/')[1]; + } + + async renderByRegExp() { + const { ctx } = this; + let name = ctx.path.split('/')[2]; let hasLogin = ctx.session && ctx.session.admin_user && ctx.session.admin_user.token; if (hasLogin) { if (name !== 'login') { const obj = getTemplateObj(name); + // console.log('----------template-------\n' + obj); obj.nickname = ctx.session.admin_user.nickname || ctx.session.admin_user.username || ctx.session.admin_user.email; ctx.body = template(obj); } else { if (ctx.query.callback) { + // console.log('---------callback---------\n' + ctx.query.callback); ctx.redirect(encodeURI(ctx.query.callback)); } else { - ctx.redirect('/admin/' + firstApp); + // console.log('---------first--------\n' + firstApp); + ctx.redirect(firstApp); } } } else { + // console.log('----------name-----------\n' + name); if (name === 'login') { const obj = getTemplateObj(name); obj.nickname = ''; ctx.body = template(obj); } else { - ctx.redirect('/admin/login?callback=' + + // console.log('----------11-----------\n' + ctx.originalUrl); + ctx.redirect( encodeURI(ctx.protocol + '://' + ctx.host + ctx.originalUrl)); } } - }); -}; + } +} + +module.exports = IndexController; \ No newline at end of file diff --git a/www-admin/app/controller/admin/job.js b/www-admin/app/controller/admin/job.js new file mode 100644 index 0000000..208d162 --- /dev/null +++ b/www-admin/app/controller/admin/job.js @@ -0,0 +1,40 @@ +'use strict'; + +const Controller = require('egg').Controller; + +class JobController extends Controller { + async list() { + const { ctx, service } = this; + ctx.body = await service.admin.job.list(ctx.query); + } + + async create() { + const { ctx, service } = this; + ctx.body = {job: await service.admin.job.create(ctx.request.body, ctx.session.admin_user)}; + + } + + async update() { + const { ctx, service } = this; + ctx.body = {job: await service.admin.job.update(ctx.params.id, ctx.request.body)}; + + } + + async updateField() { + const { ctx, service } = this; + let {id, field} = ctx.params, body = ctx.request.body; + if (!body.hasOwnProperty(field)) { + ctx.status = 400; + ctx.body = {statusCode: 400, errors: [{message: '错误的请求参数'}]}; + } else { + ctx.body = {job: await service.admin.job.updateField(id, field, body[field])}; + } + } + + async delete() { + const { ctx, service } = this; + await service.admin.job.delete(ctx.params.id); + ctx.status = 204; + } +} +module.exports = JobController; \ No newline at end of file diff --git a/www-admin/app/controller/admin/media.js b/www-admin/app/controller/admin/media.js new file mode 100644 index 0000000..e69de29 diff --git a/server/app-admin/tool/routes/captcha.js b/www-admin/app/controller/admin/tool.js similarity index 70% rename from server/app-admin/tool/routes/captcha.js rename to www-admin/app/controller/admin/tool.js index fb6dee0..b1ddc34 100644 --- a/server/app-admin/tool/routes/captcha.js +++ b/www-admin/app/controller/admin/tool.js @@ -1,9 +1,11 @@ 'use strict'; +const Controller = require('egg').Controller; const ccap = require('ccap'); -module.exports = (router) => { - router.get('/tool/captcha', async (ctx, next) => { +class ToolController extends Controller { + async tool() { + const { ctx } = this; const captcha = ccap({ width: 200, //set width,default is 256 height: 60, //set height,default is 60 @@ -15,5 +17,7 @@ module.exports = (router) => { let ary = captcha.get(); ctx.session.admin_captcha = ary[0]; ctx.body = ary[1]; - }); -}; + } +} + +module.exports = ToolController; \ No newline at end of file diff --git a/www-admin/app/controller/admin/user.js b/www-admin/app/controller/admin/user.js new file mode 100644 index 0000000..f32f0c4 --- /dev/null +++ b/www-admin/app/controller/admin/user.js @@ -0,0 +1,29 @@ +// 'use strict'; + +// const Controller = require('egg').Controller; + +// class UserController extends Controller { +// async list() { +// const { ctx, service } = this; +// const users = await service.admin.user.list(); +// ctx.body = { +// statusCode: 200, +// payload: { +// users +// } +// }; +// } + +// async enable() { +// const { ctx, service } = this; +// let enable = !!ctx.request.body.enable; +// let userId = ctx.params.id; +// await service.admin.user.enable(userId, enable); +// ctx.body = { +// statusCode: 200, +// message: `用户${enable ? '启用' : '禁用'}成功` +// }; +// } +// } + +// module.exports = UserController; \ No newline at end of file diff --git a/www-admin/app/extend/application.js b/www-admin/app/extend/application.js new file mode 100644 index 0000000..3ef81cb --- /dev/null +++ b/www-admin/app/extend/application.js @@ -0,0 +1,25 @@ +'use strict'; +const path = require('path'); +const glob = require('glob'); + +const hashs = {}; +const matchDist = glob.sync('*.min.js',{cwd: path.join(__dirname, '../../../www/client/static/dist/')}); +matchDist.forEach(fileName => { + let arr = fileName.split('.'); + if (arr.length === 4) { + hashs[arr[1]] = arr[0]; + } else if (arr.length === 3) { + hashs[arr[0]] = ''; + } +}); +const matchCommonCss = glob.sync('*.index.css', {cwd: path.join(__dirname, '../../../www/client/static/common/style/')}); +const matchCommonJs = glob.sync('*.g.js', {cwd: path.join(__dirname, '../../../www/client/static/common/js/')}); +if (matchCommonCss[0]) { + hashs.index = matchCommonCss[0].split('.')[0]; +} +if (matchCommonJs[0]) { + hashs.g = matchCommonJs[0].split('.')[0]; +} +module.exports={ + FileHash:hashs, +}; \ No newline at end of file diff --git a/www-admin/app/middleware/checkCaptcha.js b/www-admin/app/middleware/checkCaptcha.js new file mode 100644 index 0000000..1bd9d74 --- /dev/null +++ b/www-admin/app/middleware/checkCaptcha.js @@ -0,0 +1,21 @@ +module.exports = () => { + return function checkCaptcha(ctx, next) { + let captcha = ctx.request.body.captcha; + let sessionCaptcha = ctx.session.www_captcha; + captcha = captcha && captcha.toLowerCase(); + sessionCaptcha = sessionCaptcha && sessionCaptcha.toLowerCase(); + if ( captcha && sessionCaptcha && captcha === sessionCaptcha) { + ctx.session.www_captcha = ''; + return next(); + } else { + ctx.status = 400; + ctx.body = { + statusCode: 400, + errors: [{ + location: 'captcha', + message: '验证码错误' + }] + }; + } + }; +}; \ No newline at end of file diff --git a/www-admin/app/middleware/error_handler.js b/www-admin/app/middleware/error_handler.js new file mode 100644 index 0000000..890c570 --- /dev/null +++ b/www-admin/app/middleware/error_handler.js @@ -0,0 +1,23 @@ +module.exports = () => { + return async function errorHandler(ctx, next) { + try { + await next(); + } catch (err) { + // All exceptions will trigger an error event on the app and the error log will be recorded + ctx.app.emit('error', err, ctx); + + const status = err.status || 500; + // error 500 not returning to client when in the production environment because it may contain sensitive information + const error = status === 500 && ctx.app.config.env === 'prod' + ? 'Internal Server Error' + : err.message; + + // Reading from the properties of error object and set it to the response + ctx.body = { error }; + if (status === 422) { + ctx.body.detail = err.errors; + } + ctx.status = status; + } + }; +}; \ No newline at end of file diff --git a/www-admin/app/model/account.js b/www-admin/app/model/account.js new file mode 100644 index 0000000..b1fa5c2 --- /dev/null +++ b/www-admin/app/model/account.js @@ -0,0 +1,52 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN, UUID, UUIDV4} = app.Sequelize; + const Account = app.model.define('account',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + username: { + type: STRING, + unique: true + }, + phone: { + type: STRING + }, + email: { + type: STRING, + unique: true + }, + password: { + type: STRING, + allowNull: false + }, + nickname: { + type: STRING + }, + enable: { + type: BOOLEAN, + defaultValue: true, + allowNull: false + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'account', + // classMethods: { + // associate: function (models) { + // models.account.hasMany(models.account_service); + // } + // } + }); + Account.associate=function () { + app.model.Account.hasMany(app.model.AccountService); + }; + // Project.hasMany(User, {as: 'Workers'}) + return Account; +}; diff --git a/www-admin/app/model/account_service.js b/www-admin/app/model/account_service.js new file mode 100644 index 0000000..114a9eb --- /dev/null +++ b/www-admin/app/model/account_service.js @@ -0,0 +1,29 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN } = app.Sequelize; + const Account_Server = app.model.define('account_server',{ + serviceName: { + type: STRING, + allowNull: false + }, + enable: { + type: BOOLEAN, + allowNull: false + }, + role: { + type: STRING, + allowNull: false + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'account_service' + }); + + return Account_Server; +}; + diff --git a/www-admin/app/model/apply_cloud.js b/www-admin/app/model/apply_cloud.js new file mode 100644 index 0000000..4ae22cc --- /dev/null +++ b/www-admin/app/model/apply_cloud.js @@ -0,0 +1,39 @@ +'use strict'; + +module.exports = app => { + const { STRING, UUID, TEXT, UUIDV4 } = app.Sequelize; + const Apply_Cloud = app.model.define('apply_cloud', { + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + nickname: { + type: STRING + }, + email: { + type: STRING + }, + phone: { + type: STRING + }, + company: { + type: STRING + }, + description: { + type: TEXT + }, + evaluation: { + type: TEXT + } + }, { + createdAt: 'createdAt', + updatedAt: 'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'apply_cloud' + }); + + return Apply_Cloud; +}; diff --git a/www-admin/app/model/apply_cooperation.js b/www-admin/app/model/apply_cooperation.js new file mode 100644 index 0000000..461403a --- /dev/null +++ b/www-admin/app/model/apply_cooperation.js @@ -0,0 +1,33 @@ +'use strict'; + +module.exports = app => { + const { STRING, UUID, UUIDV4 } = app.Sequelize; + const Apply_Cooperation = app.model.define('apply_coopreation',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + nickname: { + type: STRING + }, + email: { + type: STRING + }, + phone: { + type: STRING + }, + company: { + type: STRING + }, + location: { + type: STRING + }, + }, { + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'apply_cooperation' + }); + return Apply_Cooperation; +}; diff --git a/www-admin/app/model/apply_train.js b/www-admin/app/model/apply_train.js new file mode 100644 index 0000000..457e5ae --- /dev/null +++ b/www-admin/app/model/apply_train.js @@ -0,0 +1,35 @@ +'use strict'; + +module.exports = app => { + const { STRING, UUID,UUIDV4 } = app.Sequelize; + const Apply_Train = app.model.define('apply_train',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + nickname: { + type: STRING + }, + email: { + type: STRING + }, + phone: { + type: STRING + }, + company: { + type: STRING + }, + location: { + type: STRING + }, + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'apply_train' + }); + return Apply_Train; +}; diff --git a/www-admin/app/model/article.js b/www-admin/app/model/article.js new file mode 100644 index 0000000..7c10391 --- /dev/null +++ b/www-admin/app/model/article.js @@ -0,0 +1,111 @@ +'use strict'; + +module.exports = app => { + const { STRING, INTEGER, BOOLEAN, BIGINT, TEXT, ENUM, UUID, UUIDV4 } = app.Sequelize; + const Article = app.model.define('article', { + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true, + }, + category: { + type: STRING, + allowNull: false, + comment: '大类:blog,news,...' + }, + term: { + type: STRING, + comment: 'blog的小类.' + }, + title: { + type: TEXT, + allowNull: false, + comment: '标题' + }, + introduction: { + type: TEXT, + comment: '导语' + }, + content: { + type: TEXT('long'), + comment: '内容' + }, + tags: { + type: STRING, + comment: '标签' + }, + cover: { + type: STRING, + comment: '封面图片链接' + }, + status: { + type: ENUM('public', 'private', 'trash', 'draft'), + allowNull: false, + comment: '状态:草稿,已发布,私密,回收站' + }, + url: { + type: STRING, + comment: '固定链接' + }, + time: { + type: STRING + }, + authorId: { + type: UUID, + allowNull: false, + }, + authorName: { + type: STRING, + allowNull: false + }, + level: { + type: INTEGER, + allowNull: false, + defaultValue: 0 + }, + top: { + type: BOOLEAN, + allowNull: false, + defaultValue: false + }, + view_count: { + type: BIGINT, + allowNull: false, + defaultValue: 0, + comment: '浏览量' + }, + comment_count: { + type: BIGINT, + allowNull: false, + defaultValue: 0, + comment: '评论量' + }, + comment_status: { + type: BOOLEAN, + defaultValue: true, + allowNull: false + } + }, { + createdAt: 'createdAt', + updatedAt: 'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'article', + // classMethods: { + // associate: function (models) { + // models.article.hasMany(models.article_tag); + // } + // }, + indexes: [ + { + unique: true, + fields: ['url', 'category'] + } + ] + }); + Article.associate = () => { + app.model.Article.hasMany(app.model.ArticleTag); + }; + return Article; +}; diff --git a/www-admin/app/model/article_tag.js b/www-admin/app/model/article_tag.js new file mode 100644 index 0000000..4f1e5b2 --- /dev/null +++ b/www-admin/app/model/article_tag.js @@ -0,0 +1,25 @@ +'use strict'; +module.exports = app => { + const { STRING } = app.Sequelize; + + const User = app.model.define('article_tag', { + category: { + type: STRING, + allowNull: false + }, + tag: { + type: STRING, + allowNull: false + } + }, { + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'article_tag', + }); + + return User; +}; + + + diff --git a/www-admin/app/model/company.js b/www-admin/app/model/company.js new file mode 100644 index 0000000..5d2ec25 --- /dev/null +++ b/www-admin/app/model/company.js @@ -0,0 +1,53 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN, UUID, UUIDV4, TEXT } = app.Sequelize; + const Company = app.model.define('c_company',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + name: { + type: STRING + }, + phone: { + type: STRING + }, + location: { + type: TEXT + }, + enable: { + type: BOOLEAN, + defaultValue: true + }, + logo: { + type: STRING + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'c_company', + // classMethods: { + // associate: function (models) { + // models.c_company.belongsToMany(models.c_user, { + // through: { + // model: models.c_company_user + // } + // }); + // } + // } + }); + Company.associate=()=> { + app.model.Company.belongsToMany(app.model.User, { + through: { + model: app.model.CompanyUser + } + }); + }; + return Company; +}; + diff --git a/www-admin/app/model/company_user.js b/www-admin/app/model/company_user.js new file mode 100644 index 0000000..9b4099b --- /dev/null +++ b/www-admin/app/model/company_user.js @@ -0,0 +1,23 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN } = app.Sequelize; + const Company_User = app.model.define('c_company_user',{ + role: { + type: STRING, + allowNull: false + }, + status: { + type: BOOLEAN, + defaultValue: true + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'c_company_user' + }); + return Company_User; +}; diff --git a/server/models/docs/docs.js b/www-admin/app/model/docs.js similarity index 100% rename from server/models/docs/docs.js rename to www-admin/app/model/docs.js diff --git a/www-admin/app/model/job.js b/www-admin/app/model/job.js new file mode 100644 index 0000000..5b8b076 --- /dev/null +++ b/www-admin/app/model/job.js @@ -0,0 +1,54 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN, UUID, UUIDV4, TEXT } = app.Sequelize; + const Job = app.model.define('job',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + title: { + type: STRING, + allowNull: false + }, + description: { + type: TEXT + }, + requirement: { + type: TEXT + }, + preferred: { + type: TEXT + }, + location: { + type: STRING, + }, + role: { + type: STRING, + allowNull: false + }, + type: { + type: STRING, + allowNull: false + }, + status: { + type: STRING, + allowNull: false + }, + top: { + type: BOOLEAN, + allowNull: false, + defaultValue: false + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'job', + }); + return Job; +}; + diff --git a/server/models/article/media.js b/www-admin/app/model/media.js similarity index 86% rename from server/models/article/media.js rename to www-admin/app/model/media.js index b262988..614c2dd 100644 --- a/server/models/article/media.js +++ b/www-admin/app/model/media.js @@ -51,11 +51,12 @@ module.exports = { charset: 'utf8', freezeTableName: true, tableName: 'media', - classMethods: { - associate: function (models) { - models.media.hasMany(models.media_tag, {foreignKey: 'mediaId'}); - } - } + // classMethods: { + // associate: function (models) { + // models.media.hasMany(models.media_tag, {foreignKey: 'mediaId'}); + // } + // } }); + } }; diff --git a/server/models/article/media_tag.js b/www-admin/app/model/media_tag.js similarity index 100% rename from server/models/article/media_tag.js rename to www-admin/app/model/media_tag.js diff --git a/www-admin/app/model/user.js b/www-admin/app/model/user.js new file mode 100644 index 0000000..3757f48 --- /dev/null +++ b/www-admin/app/model/user.js @@ -0,0 +1,63 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN, UUID, UUIDV4 } = app.Sequelize; + const User = app.model.define('c_user',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + username: { + type: STRING, + unique: true + }, + phone: { + type: STRING, + allowNull: false + }, + email: { + type: STRING, + allowNull: false, + unique: true + }, + password: { + type: STRING + }, + nickname: { + type: STRING + }, + enable: { + type: BOOLEAN, + defaultValue: true, + allowNull: false + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'c_user', + // classMethods: { + // associate: function (models) { + // models.c_user.belongsToMany(models.c_company, { + // through: { + // model: models.c_company_user + // } + // }); + // models.c_user.hasMany(models.c_user_meta, {}); + // } + // } + }); + User.associate=()=> { + app.model.User.belongsToMany(app.model.Company, { + through: { + model: app.model.CompanyUser + } + }); + app.model.User.hasMany(app.model.UserMeta, {}); + }; + return User; +}; + diff --git a/www-admin/app/model/user_meta.js b/www-admin/app/model/user_meta.js new file mode 100644 index 0000000..9559be7 --- /dev/null +++ b/www-admin/app/model/user_meta.js @@ -0,0 +1,25 @@ +'use strict'; + +module.exports = app => { + const { STRING, UUID, UUIDV4 } = app.Sequelize; + const User_Meta = app.model.define('c_user_meta',{ + user_id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + field: { + type: STRING, + allowNull: false + }, + value: { + type: STRING + } + }, { + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'c_user_meta' + }); + return User_Meta; +}; diff --git a/www-admin/app/router.js b/www-admin/app/router.js new file mode 100644 index 0000000..72a6d6d --- /dev/null +++ b/www-admin/app/router.js @@ -0,0 +1,57 @@ +const staticPage = require('../../www/client/.routers.json'); +const path = require('path'); +const themeConfig = require('../../www/client/config.json'); +const urls = themeConfig.articleUrl; +const fs = require('fs'); +// const path = require('path'); +const frontendApps = fs.readdirSync('admin/applications').filter(file => file.indexOf('.') === -1); +let firstApp; +const routesRegExp = frontendApps.map(name => { + if (!firstApp && name !== 'login') { + firstApp = '/admin/'+name; + } + return new RegExp(`(^\/admin\/${name}$)|(^\/admin\/${name}\/(.*))`); +}); + +module.exports = app=>{ + const { router,controller }= app; + + /** + * admin + */ + // view + router.get('/admin',controller.admin.index.render); + router.get(routesRegExp,controller.admin.index.renderByRegExp); + + // account + router.get('/admin/api/account',controller.admin.account.showList); + router.post('/admin/api/account',controller.admin.account.create); + router.put('/admin/api/account/:id',controller.admin.account.update); + router.put('/admin/api/account/:id/enable',controller.admin.account.enable); + + // auth + router.post('/admin/login',controller.admin.auth.login); + router.all('/admin/logout',controller.admin.auth.all); + + // apply + router.get('/admin/api/apply/train',controller.admin.apply.listTrainApply); + router.get('/admin/api/apply/private-cloud',controller.admin.apply.listCloudApply); + + //article + router.get('/admin/api/article',controller.admin.article.list); + router.get('/admin/api/article/:id',controller.admin.article.get); + router.post('/admin/api/article',controller.admin.article.create); + router.put('/admin/api/article/:id',controller.admin.article.update); + router.put('/admin/api/article/:id/:field/:value',controller.admin.article.set); + router.put('/admin/api/article/:id/:field',controller.admin.article.updateField); + router.put('/api/article-tag',controller.admin.article.listTag); + // job + router.get('/admin/api/job',controller.admin.job.list); + router.post('/admin/api/job',controller.admin.job.create); + router.put('/admin/api/job/:id',controller.admin.job.update); + router.put('/admin/api/job/:id/:field',controller.admin.job.updateField); + router.delete('/admin/api/job/:id',controller.admin.job.delete); + + // tool + router.get('/admin/tool/captcha',controller.admin.tool.tool); +} \ No newline at end of file diff --git a/www-admin/app/service/admin/account.js b/www-admin/app/service/admin/account.js new file mode 100644 index 0000000..d10827b --- /dev/null +++ b/www-admin/app/service/admin/account.js @@ -0,0 +1,41 @@ +'use strict'; +const Service = require('egg').Service; +const tools = require('../../tools'); + +class AccountService extends Service { + async findAll() { + return this.app.model.Account.findAll({ + attributes: {exclude: ['password']} + }); + } + + async create(opt) { + opt.password = await tools.password.hash(opt.password); + return this.app.model.Account.create(opt); + } + + async update(id, opt) { + let account = await this.app.model.Account.findById(id); + if (!account) { + return Promise.reject({statusCode: 404, errors: [{message: '账户不存在'}]}); + } + delete opt.enable; + + if (opt.password) { + opt.password = await tools.password.hash(opt.password); + } + + Object.assign(account, opt); + return account.save(); + } + + async enable(id, flag) { + let account = await this.app.model.Account.findById(id); + if (!account) { + return Promise.reject({statusCode: 404, errors: [{message: '账户不存在'}]}); + } + return account.update({enable: flag}); + } +} + +module.exports = AccountService; \ No newline at end of file diff --git a/www-admin/app/service/admin/apply.js b/www-admin/app/service/admin/apply.js new file mode 100644 index 0000000..c1ffc24 --- /dev/null +++ b/www-admin/app/service/admin/apply.js @@ -0,0 +1,16 @@ +'use strict'; + +const Service = require('egg').Service; + +class ApplyService extends Service { + async cloudFindAll() { + return this.ctx.model.ApplyCloud.findAll(); + } + + async trainFindAll() { + console.log(this.ctx.model); + return this.ctx.model.ApplyTrain.findAll(); + } +} + +module.exports = ApplyService; \ No newline at end of file diff --git a/www-admin/app/service/admin/article.js b/www-admin/app/service/admin/article.js new file mode 100644 index 0000000..398e7ec --- /dev/null +++ b/www-admin/app/service/admin/article.js @@ -0,0 +1,219 @@ +'use strict'; + +const Service = require('egg').Service; +const tools = require('../../tools'); + +class ArticleSevice extends Service { + async handleTagForArticle(article, tagsString) { + let tagsNew = JSON.parse(tagsString); + let tagsOld = JSON.parse(article.tags); + if (tools._.difference(tagsOld, tagsNew).length || tools._.difference(tagsNew, tagsOld).length) { + await this.app.model.article_tag.destroy({ where: { articleId: article.id }, force: true }); + await this.app.model.article_tag.bulkCreate(tagsNew.map(tag => { + return { + articleId: article.id, + tag: tag, + category: article.category + }; + })); + await this.app.model.Article.update({ 'tags': tagsString }); + } + } + + // async handleTagForArticle(article, tagsString) { + // let tagsNew = JSON.parse(tagsString); + // let tagsOld = JSON.parse(article.tags); + // if (tools._.difference(tagsOld, tagsNew).length || tools._.difference(tagsNew, tagsOld).length) { + // await this.app.model.ArticleTag.destroy({ where: { article_id: article.id }, force: true }); + // await [ + // this.app.model.ArticleTag.bulkCreate(tagsNew.map(tag => { + // return { + // article_id: article.id, + // tag: tag, + // category: article.category + // }; + // })), + // article.update({ 'tags': tagsString }) + // ]; + // } + // } + async list(query) { + //query.status: + //query.tags:"['hello']" + //query.month:2017-02 + //query.page + //query.limit + //query.category + //query.search + + let obj = { where: {}, attributes: { exclude: ['content'] } }; + if (query.search) { + obj.where.title = { + $like: '%' + decodeURI(query.search) + '%' + }; + } + + if (query.tags) { + query.tags = JSON.parse(query.tags); + obj.include = [ + { + model: this.app.model.ArticleTag, + where: { tag: { $in: query.tags } } + } + ]; + } + + query.limit = obj.limit = parseInt(query.limit) || 10; + query.page = parseInt(query.page) > 0 ? parseInt(query.page) : 1; + obj.offset = (query.page - 1) * query.limit; + + if (query.month) { + obj.where.createdAt = {}; + obj.where.createdAt.$gt = new Date(query.month); + let yearAndMonth = query.month.split('-'); + if ('12' === yearAndMonth[1]) { + yearAndMonth[0]++; + yearAndMonth[1] = ['01']; + } else if ('09' === yearAndMonth[1] || '10' === yearAndMonth[1] || '11' === yearAndMonth[1]) { + yearAndMonth[1]++; + } else { + yearAndMonth[1] = '0' + (++yearAndMonth[1]); + } + obj.where.createdAt.$lt = new Date(yearAndMonth.join('-')); + } + + if (query.status) { + if ('top' === query.status) { + obj.where.top = true; + } else { + obj.where.status = query.status; + } + } + + if (query.category) { + obj.where.category = query.category; + } + obj.order = [ + ['createdAt', 'DESC'] + ]; + + let result = await this.app.model.Article.findAndCount(obj); + return { + articles: result.rows, + count: result.count, + page: query.page, + limit: query.limit, + prev: query.page > 1 ? query.page - 1 : null, + next: result.count > query.page * query.limit ? query.page + 1 : null + }; + } + + async get(id) { + let article = await this.app.model.Article.findById(id); + article.url = decodeURI(article.url); + return article; + } + + async create(body, author) { + body.authorName = author.nickname; + body.authorId = author.id; + if (body.url) { + body.url = encodeURI(body.url); + } + + let article = await this.app.model.Article.create(body); + let tags = []; + if (body.tags) { + tags = JSON.parse(body.tags); + } else { + body.tags = JSON.stringify([]); + } + + if (!body.url) { + article.url = article.id; + await article.save(); + } + + await this.app.model.ArticleTag.bulkCreate(tags.map(tag => { + return { + article_id: article.id, + tag: tag, + category: article.category + }; + })); + return article; + } + + async update(article_id, body) { + let article = await this.app.model.Article.find({ where: { id: article_id } }); + if (body.tags) { + await this.handleTagForArticle(article, body.tags); + } + if (!article) { + return Promise.reject({ statusCode: 404, errors: [{ message: '文章不存在' }] }); + } + if (body.url) { + body.url = encodeURI(body.url); + } + delete body.status; + Object.assign(article, body); + article = await article.save(); + return article; + } + + async setStatus(article_id, status) { + let statuses = ['public', 'private', 'trash', 'draft']; + let article = await this.app.model.Article.findOne({ where: { id: article_id } }); + if (!article) { + return Promise.reject({ status: 404, message: '文章不存在' }); + } + if (statuses.indexOf(status) < 0) { + return Promise.reject({ status: 400, message: '参数错误' }); + } + return await article.update({ status }); + } + + async setTop(article_id, top) { + return this.app.model.Article.update({ top }, { where: { id: article_id } }); + } + + async setLevel(article_id, level) { + level = parseInt(level); + if (article_id && level >= 0 && level <= 9) { + return this.app.model.Article.update({ level }, { where: { id: article_id } }); + } + } + + async updateField(article_id, field, value) { + const fields = ['title', 'introduction', 'content', 'tags', 'url', 'cover', 'time']; + if (fields.indexOf(field) < 0) { + return Promise.reject({ statusCode: 400, errors: [{ message: '错误的请求参数' }] }); + } + + let article = await this.app.model.Article.findOne({ where: { id: article_id } }); + if (!article) { + return Promise.reject({ statusCode: 404, errors: [{ message: '文章不存在' }] }); + } + if ('tags' === field) { + await this.handleTagForArticle(article, value); + } else if ('url' === field) { + let update = {}; + update[field] = encodeURI(value); + article = await article.update(update); + } else { + let update = {}; + update[field] = value; + article = await article.update(update); + } + return article; + } + + async listTag() { + return this.app.model.ArticleTag.count({ + attributes: ['category', 'tag'], + group: ['category', 'tag'] + }); + } +} + +module.exports = ArticleSevice; \ No newline at end of file diff --git a/www-admin/app/service/admin/auth.js b/www-admin/app/service/admin/auth.js new file mode 100644 index 0000000..22d6676 --- /dev/null +++ b/www-admin/app/service/admin/auth.js @@ -0,0 +1,13 @@ +const Service = require('egg').Service; + +class AuthService extends Service { + async findOne(where) { + return this.app.model.Account.findOne({ + where, + attributes: { exclude: ['createdAt', 'updatedAt']}, + raw: true + }); + } +} + +module.exports = AuthService; \ No newline at end of file diff --git a/www-admin/app/service/admin/company.js b/www-admin/app/service/admin/company.js new file mode 100644 index 0000000..1013765 --- /dev/null +++ b/www-admin/app/service/admin/company.js @@ -0,0 +1,68 @@ +'use strict'; + +const Service = require('egg').Service; + +class CompanyService extends Service { + async listCompany() { + const { app } = this; + return app.model.Company.findAll({ + include: [{ + model: app.model.User, + through: { + model: app.model.Company_User, + where: {role: 'admin'} + } + }] + }); + } + + async createCompany(company, admin) { + const { app } = this; + let user; + try { + user = await app.model.User.create(admin); + } catch (e) { + return Promise.reject(e.errors); + } + let cp = await app.model.Company.create(company); + + await app.model.Company_User.create({ + role: 'admin', + cUserId: user.id, + cCompanyId: cp.id + }); + } + + async updateCompany(companyId, company, admin) { + const { app } = this; + let cp = await app.model.Company.findById(companyId, { + include: app.model.User, through: { + model: app.model.Company_User, where: { + role: 'admin' + } + } + }); + if (!cp) { + return Promise.reject({message: '公司不存在'}); + } + Object.assign(cp, company); + await cp.save(); + + if (cp.c_users[0]) { + let user = await app.model.User.findById(cp.c_users[0].id); + Object.assign(user, admin); + await user.save(); + } + } + + async enable(companyId, flag) { + const { app } = this; + let company = await app.model.Company.findById(companyId); + if (!company) { + return Promise.reject({message: '公司不存在'}); + } + return company.update({enable: flag}); + } +} + +module.exports = CompanyService; \ No newline at end of file diff --git a/www-admin/app/service/admin/docs.js b/www-admin/app/service/admin/docs.js new file mode 100644 index 0000000..e69de29 diff --git a/www-admin/app/service/admin/job.js b/www-admin/app/service/admin/job.js new file mode 100644 index 0000000..c417271 --- /dev/null +++ b/www-admin/app/service/admin/job.js @@ -0,0 +1,104 @@ +'use strict'; + +const Service = require('egg').Service; + +class JobService extends Service { + async list(query) { + const { app } = this; + + let obj = { where: {} }; + if (query.search) { + obj.where.title = { + $like: '%' + decodeURI(query.search) + '%' + }; + } + + if (query.limit) { + query.limit = obj.limit = parseInt(query.limit) || 10; + query.page = parseInt(query.page) > 0 ? parseInt(query.page) : 1; + obj.offset = (query.page - 1) * query.limit; + } + + if (query.status) { + obj.where.status = query.status; + } + + obj.order = [ + ['createdAt', 'DESC'] + ]; + + let result = await app.model.Job.findAndCount(obj); + + result.rows.forEach(job => { + job.location = job.location ? job.location.split(',') : []; + }); + return { + jobs: result.rows, + count: result.count, + page: query.page, + limit: query.limit, + prev: query.page > 1 ? query.page - 1 : null, + next: result.count > query.page * query.limit ? query.page + 1 : null + }; + } + + async create(body) { + const { app } = this; + + let job = JSON.parse(JSON.stringify(body)); + job.location = job.location.join(','); + if (body.url) { + body.url = encodeURI(body.url); + } + + return await app.model.Job.create(job); + } + + async update(jobId, body) { + const { app } = this; + let job = await app.model.Job.find({ where: { id: jobId } }); + + if (!job) { + return Promise.reject({ statusCode: 404, errors: [{ message: 'Not Found' }] }); + } + if (body.location) { + body.location = job.location.join(','); + } + + Object.assign(job, body); + job = await job.save(); + return job; + } + + async updateField(jobId, field, value) { + const { app } = this; + const fields = ['title', 'description', 'requirement', 'preferred', 'status', 'role', 'type', 'location']; + if (fields.indexOf(field) < 0) { + return Promise.reject({ statusCode: 400, errors: [{ message: '错误的请求参数' }] }); + } + + let job = await app.model.Job.findOne({ where: { id: jobId } }); + if (!job) { + return Promise.reject({ statusCode: 404, errors: [{ message: 'Not Found' }] }); + } + if ('location' === field) { + let update = {}; + update[field] = location.join(','); + job = await job.update(update); + } else { + let update = {}; + update[field] = value; + job = await job.update(update); + } + return job; + } + + async delete(jobId) { + const { app } = this; + return app.model.Job.destroy({ + where: { id: jobId } + }); + } +} + +module.exports = JobService; \ No newline at end of file diff --git a/www-admin/app/service/admin/media.js b/www-admin/app/service/admin/media.js new file mode 100644 index 0000000..e69de29 diff --git a/www-admin/app/service/admin/user.js b/www-admin/app/service/admin/user.js new file mode 100644 index 0000000..3bf34dc --- /dev/null +++ b/www-admin/app/service/admin/user.js @@ -0,0 +1,22 @@ +'use strict'; + +const Service = require('egg').Service; + +class UserService extends Service { + async list() { + const { app } = this; + return app.model.User.findAll({ + include: [{model: app.model.User}] + }); + } + + async enable(id, flag) { + const { app } = this; + let user = await app.model.User.findById(id); + if (!user) { + return Promise.reject({statusCode: 404, errors: [{message: '账户不存在'}]}); + } + return user.update({enable: flag}); + } +} +module.exports = UserService; \ No newline at end of file diff --git a/server/tools/RegExp.js b/www-admin/app/tools/RegExp.js similarity index 100% rename from server/tools/RegExp.js rename to www-admin/app/tools/RegExp.js diff --git a/server/tools/auth.js b/www-admin/app/tools/auth.js similarity index 100% rename from server/tools/auth.js rename to www-admin/app/tools/auth.js diff --git a/server/tools/index.js b/www-admin/app/tools/index.js similarity index 100% rename from server/tools/index.js rename to www-admin/app/tools/index.js diff --git a/server/tools/password.js b/www-admin/app/tools/password.js similarity index 100% rename from server/tools/password.js rename to www-admin/app/tools/password.js diff --git a/server/tools/third.js b/www-admin/app/tools/third.js similarity index 100% rename from server/tools/third.js rename to www-admin/app/tools/third.js diff --git a/www-admin/config/config.default.js b/www-admin/config/config.default.js new file mode 100644 index 0000000..bd2d866 --- /dev/null +++ b/www-admin/config/config.default.js @@ -0,0 +1,39 @@ +const { join } = require('path'); +const defaultConfig = require('../../config/default'); +module.exports = app=>{ + const config={}; + config.keys='tfcloud', + config.static={ + prefix: '/static/', + dir:join(app.baseDir, 'admin'), + // support lazy load + dynamic: true, + preload: false, + buffer: false, + maxFiles: 1000, + }; + config.cluster={ + listen:{ + port:3001, + } + }; + config.view={ + root: [ + join(app.baseDir, '../www/client/views'), + ].join(','), + defaultViewEngine: 'ejs', + defaultExtension: '.ejs', + mapping: { '.ejs': 'ejs' } + }; + //middleware + config.middleware=['errorHandler']; + // only takes effect on URL prefix with '/api' + config.errorHandler={ + match: /(^admin\/api\/.*)/, + }; + // config.checkCaptcha={ + // match:'/apply/api/*' + // }; + Object.assign(config,defaultConfig); + return config; +}; diff --git a/www-admin/config/plugin.js b/www-admin/config/plugin.js new file mode 100644 index 0000000..3f57e3e --- /dev/null +++ b/www-admin/config/plugin.js @@ -0,0 +1,14 @@ +// exports.ejs={ +// enable:true, +// package:'egg-view-ejs' +// } +// exports.sequelize = { +// enable: true, +// package: 'egg-sequelize' +// } + +exports.sequelize = true; +exports.validate = { + enable: true, + package: 'egg-validate', +}; diff --git a/www-admin/package.json b/www-admin/package.json new file mode 100644 index 0000000..8f959d3 --- /dev/null +++ b/www-admin/package.json @@ -0,0 +1,100 @@ +{ + "name": "ashe-admin", + "version": "0.0.1", + "description": "Public cloud official website admin part", + "main": "index.js", + "scripts": { + "start": "egg-bin dev", + "test": "egg-bin test", + "debug": "egg-bin debug", + "admin_build": "cd admin && rm -rf dist/ && mkdir dist && cp -R uskin/dist/css dist/uskin && node build.js --production", + "admin_dev": "cd admin && rm -rf dist/*.* dist/dll manifest.json && node build.js --development", + "build": "npm run admin_build", + "eslint": "eslint *.js www-admin/app/**/**/ www-admin/admin/**/ --ext .js,.jsx --cache", + "add_eslint": "cd scripts && node checkPreCommit.js", + "prepare": "cd scripts && node checkPreCommit.js", + "preinstall": "cd scripts && node checkNodeVersion.js && cd ../admin/uskin && npm install" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/unitedstack/Ashe.git" + }, + "keywords": [ + "official", + "website" + ], + "authors": [ + "PengJiyuan <731401082@qq.com>" + ], + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/unitedstack/Ashe/issues" + }, + "homepage": "https://github.com/unitedstack/Ashe#readme", + "egg": { + "framework": "@ustack/halo" + }, + "devDependencies": { + "autoprefixer": "^7.1.5", + "babel-core": "^6.26.0", + "babel-eslint": "^8.0.1", + "babel-loader": "^7.1.2", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-preset-env": "^1.6.0", + "babel-preset-react": "^6.24.1", + "colors": "^1.1.2", + "compression-webpack-plugin": "^1.0.1", + "css-loader": "^0.28.7", + "egg-mock": "^3.17.3", + "ejs": "^2.5.7", + "eslint": "^4.8.0", + "eslint-plugin-babel": "^4.1.2", + "eslint-plugin-react": "^7.4.0", + "extract-text-webpack-plugin": "^3.0.1", + "file-loader": "^1.1.6", + "glob": "^7.1.2", + "grunt": "^1.0.1", + "grunt-banner": "^0.6.0", + "grunt-contrib-clean": "^1.1.0", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-less": "^1.4.1", + "grunt-contrib-watch": "^1.0.0", + "grunt-rev": "^0.1.0", + "grunt-webfont": "^1.6.0", + "grunt-webpack": "^3.0.2", + "less": "^2.7.2", + "less-loader": "^4.0.5", + "less-plugin-autoprefix": "^1.5.1", + "less-var-parse": "^1.0.1", + "load-grunt-tasks": "^3.5.2", + "mocha": "^5.2.0", + "postcss-loader": "^2.0.6", + "time-grunt": "^1.4.0", + "uglifyjs-webpack-plugin": "^0.4.6", + "url-loader": "^0.6.2", + "webpack": "^3.9.1" + }, + "dependencies": { + "@ustack/halo": "^0.0.10", + "babel-polyfill": "^6.26.0", + "babel-runtime": "^6.26.0", + "bcrypt": "^3.0.0", + "ccap": "^0.6.10", + "clipboard-plus": "^1.1.0", + "egg-bin": "^4.8.1", + "egg-validate": "^1.1.1", + "json-path": "^0.1.3", + "koa-send": "^5.0.0", + "memjs": "^1.2.0", + "nodemailer": "^4.6.7", + "react": "^15.4.2", + "react-dom": "^15.4.2", + "rsvp": "^4.7.0", + "simditor": "^2.3.6", + "urlencode": "^1.1.0" + }, + "engineStrict": true, + "engines": { + "node": ">=8" + } +} diff --git a/www-admin/pre-commit b/www-admin/pre-commit new file mode 100755 index 0000000..2270969 --- /dev/null +++ b/www-admin/pre-commit @@ -0,0 +1,6 @@ +#!/bin/bash + +# CSC, Code Style Checker + +cd /home/yjk/ashe222/www-admin +npm run eslint diff --git a/scripts/checkNodeVersion.js b/www-admin/scripts/checkNodeVersion.js similarity index 100% rename from scripts/checkNodeVersion.js rename to www-admin/scripts/checkNodeVersion.js diff --git a/scripts/checkPreCommit.js b/www-admin/scripts/checkPreCommit.js similarity index 100% rename from scripts/checkPreCommit.js rename to www-admin/scripts/checkPreCommit.js diff --git a/scripts/mkAccount.js b/www-admin/scripts/mkAccount.js similarity index 100% rename from scripts/mkAccount.js rename to www-admin/scripts/mkAccount.js diff --git a/scripts/mkNginxConf.js b/www-admin/scripts/mkNginxConf.js similarity index 97% rename from scripts/mkNginxConf.js rename to www-admin/scripts/mkNginxConf.js index 65d21d0..65733e8 100644 --- a/scripts/mkNginxConf.js +++ b/www-admin/scripts/mkNginxConf.js @@ -84,14 +84,14 @@ server { gzip on; gzip_static on; } - location /admin-static/dist/ { + location /static/dist/ { alias "${projectDirectory}/admin/dist/"; satisfy all; expires 1y; gzip_static on; } - location /admin-static/assets { + location /static/assets { alias "${projectDirectory}/admin/assets"; satisfy all; expires 1y; diff --git a/scripts/precommit-hook.sh b/www-admin/scripts/precommit-hook.sh similarity index 100% rename from scripts/precommit-hook.sh rename to www-admin/scripts/precommit-hook.sh diff --git a/www-admin/test/app/controller/admin/account.test.js b/www-admin/test/app/controller/admin/account.test.js new file mode 100644 index 0000000..736b051 --- /dev/null +++ b/www-admin/test/app/controller/admin/account.test.js @@ -0,0 +1,53 @@ +const { app, mock, assert } = require('egg-mock/bootstrap'); + +describe('test/app/controller/account.test.js',() => { + describe('showList', () => { + it('account content', async () => { + await app.httpRequest().get('/admin/api/account').expect(200); + }); + }); + + describe('create', () => { + + it('create account', async () => { + await app.httpRequest() + .post('/admin/api/account') + .send({ + username: 'yan', + password: 'yjk', + nickname: 'yjk', + email:"357571433@qq.com", + phone:"15122579960" + }) + .expect(200); + }); + }); + + describe('update', () => { + it('update account', async () => { + const ctx = app.mockContext({ + session: { + admin_user:{ + id: 'a34f3fe8-2053-4350-bbc7-4d4162ddc373 ' + } + } + }); + const reqUrl = '/admin/api/account/' + ctx.session.admin_user.id; + await app.httpRequest().put(reqUrl).expect(200); + }); + }); + + describe('enable', () => { + it('enable account', async () => { + const ctx = app.mockContext({ + session: { + admin_user:{ + id: 'a34f3fe8-2053-4350-bbc7-4d4162ddc373 ' + } + } + }); + const reqUrl = '/admin/api/account/' + ctx.session.admin_user.id + '/enable'; + await app.httpRequest().put(reqUrl).expect(200); + }); + }); +}) \ No newline at end of file diff --git a/www-admin/test/app/controller/admin/apply.test.js b/www-admin/test/app/controller/admin/apply.test.js new file mode 100644 index 0000000..2263db5 --- /dev/null +++ b/www-admin/test/app/controller/admin/apply.test.js @@ -0,0 +1,18 @@ +const { app, mock, assert } = require('egg-mock/bootstrap'); + +describe('test/app/controller/apply.test.js',() => { + describe('list cloud apply', () => { + it('content', async () => { + await app.httpRequest().get('/admin/api/apply/train').expect(200); + }); + }); + + describe('list train apply', () => { + + it('content', async () => { + await app.httpRequest() + .get('/admin/api/apply/private-cloud') + .expect(200); + }); + }); +}) \ No newline at end of file diff --git a/www-admin/test/app/controller/admin/article.test.js b/www-admin/test/app/controller/admin/article.test.js new file mode 100644 index 0000000..ed05673 --- /dev/null +++ b/www-admin/test/app/controller/admin/article.test.js @@ -0,0 +1,61 @@ +const { app, mock, assert } = require('egg-mock/bootstrap'); + +describe('test/app/controller/article.test.js',() => { + describe('list all article', () => { + it('get:/admin/api/article', async () => { + await app.httpRequest().get('/admin/api/article').expect(200); + }); + }); + + describe('list article by id', () => { + it('get: /admin/api/article/:id', async () => { + await app.httpRequest() + .get('/admin/api/article/:id') + .expect(200); + }); + }); + + //forbidden + describe('add article', () => { + it('post: /admin/api/article', async () => { + app.mockCsrf(); + await app.httpRequest() + .post('/admin/api/article') + .send('1111') + .expect(200); + }); + }); + //forbidden + describe('update', () => { + it('put: /admin/api/article/:id', async () => { + app.mockCsrf(); + await app.httpRequest() + .put('/admin/api/article/:id') + .expect(200); + }); + }); + //forbidden + describe('set', () => { + it('put: /admin/api/article/:id/:field/:value', async () => { + await app.httpRequest() + .put('/admin/api/article/:id/:field/:value') + .expect(200); + }); + }); + //forbidden + describe('updateField', () => { + it('put: /admin/api/article/:id/:field', async () => { + await app.httpRequest() + .put('/admin/api/article/:id/:field') + .expect(200); + }); + }); + //forbidden + describe('listTag', () => { + it('put: /api/article-tag', async () => { + await app.httpRequest() + .put('/api/article-tag') + .expect(200); + }); + }); +}) \ No newline at end of file diff --git a/www-admin/test/app/controller/admin/job.test.js b/www-admin/test/app/controller/admin/job.test.js new file mode 100644 index 0000000..3013ce4 --- /dev/null +++ b/www-admin/test/app/controller/admin/job.test.js @@ -0,0 +1,81 @@ +const { app, mock, assert } = require('egg-mock/bootstrap'); + +describe('test/app/controller/job.test.js',() => { + describe('list all job', () => { + it('get:/admin/api/job', async () => { + await app.httpRequest().get('/admin/api/job').expect(200); + }); + }); + + describe('add job', () => { + it('post: /admin/api/job', async () => { + app.mockCsrf(); + await app.httpRequest() + .post('/admin/api/job') + .send({ + title: 'node.js', + description: 'nothing', + requirement: 'nothing', + preffered: 'english', + location: ['上海'], + type: '全职', + role: '技术', + status: 'public' + }) + .expect(200); + }); + }); + + describe('update', () => { + it('put: /admin/api/job/:id', async () => { + const ctx = app.mockContext({ + session: { + admin_user:{ + id: 'd70a78aa-f3fa-478b-a184-d649f2be95cc' + } + } + }); + const reqUrl = '/admin/api/job/' + ctx.session.admin_user.id; + await app.httpRequest() + .put(reqUrl) + .expect(200); + }); + }); + + describe('updateField', () => { + it('put: /admin/api/job/:id/:field', async () => { + const ctx = app.mockContext({ + session: { + admin_user:{ + id: 'd70a78aa-f3fa-478b-a184-d649f2be95cc' + } + } + }); + const filed = 'title'; + const reqUrl = '/admin/api/job/' + ctx.session.admin_user.id + '/' + filed; + + await app.httpRequest() + .put(reqUrl) + .send({ + title: 'node' + }) + .expect(200); + }); + }); + + describe('delete', () => { + it('put: /admin/api/job/:id', async () => { + const ctx = app.mockContext({ + session: { + admin_user:{ + id: '9130444e-337f-4155-994c-0aab6cb56d71' + } + } + }); + const reqUrl = '/admin/api/job/' + ctx.session.admin_user.id; + await app.httpRequest() + .delete(reqUrl) + .expect(204); + }); + }); +}) \ No newline at end of file diff --git a/www/.babelrc b/www/.babelrc new file mode 100644 index 0000000..c96ebc0 --- /dev/null +++ b/www/.babelrc @@ -0,0 +1,4 @@ +{ + "presets": ["env", "react"], + "plugins": ["transform-runtime"] +} \ No newline at end of file diff --git a/www/.browserslistrc b/www/.browserslistrc new file mode 100644 index 0000000..7b4c08a --- /dev/null +++ b/www/.browserslistrc @@ -0,0 +1,6 @@ +# Browsers that we support + +ie >= 10 +Firefox >= 35 +Chrome >= 45 +Safari >= 8 \ No newline at end of file diff --git a/www/.eslintignore b/www/.eslintignore new file mode 100644 index 0000000..7a24c9a --- /dev/null +++ b/www/.eslintignore @@ -0,0 +1,5 @@ +client/static/dist/* +admin/dist/* +admin/uskin +client/static/third-party/* +**/node_modules/** diff --git a/www/.eslintrc b/www/.eslintrc new file mode 100644 index 0000000..48bfd01 --- /dev/null +++ b/www/.eslintrc @@ -0,0 +1,65 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:react/recommended" + ], + "parserOptions": { + "sourceType": "module", + "ecmaVersion": 8, + "ecmaFeatures": { + "jsx": true + } + }, + "globals": { + "ActiveXObject": false, + "$": false, + "jQuery": false, + "G": false + }, + "plugins": [ + "react", + "babel" + ], + "rules": { + "indent": [ + "error", + 2, + { + "SwitchCase": 1 + } + ], + "linebreak-style": [ + "error", + "unix" + ], + "quotes": [ + "error", + "single" + ], + "semi": [ + "error", + "always" + ], + "no-console": 0, + "no-useless-escape": 0, + "no-case-declarations": 0, + "no-unused-vars": [ + 2, + { + "vars": "all", + "args": "none" + } + ], + "react/no-string-refs": 0, + "react/prop-types": 0, + "react/display-name": 0, + "react/no-direct-mutation-state": 0, + "react/no-deprecated": 0 + } +} \ No newline at end of file diff --git a/www/.travis.yml b/www/.travis.yml new file mode 100644 index 0000000..89043a9 --- /dev/null +++ b/www/.travis.yml @@ -0,0 +1,9 @@ +sudo: false +language: node_js +node_js: + - '8' +install: + - npm install +script: + - npm run eslint + - npm run build diff --git a/www/app.js b/www/app.js new file mode 100644 index 0000000..770f70e --- /dev/null +++ b/www/app.js @@ -0,0 +1,8 @@ +module.exports = app => { + // if (app.config.env === 'local') { + app.beforeStart( async ()=>{ + + await app.model.sync({}); + }); + //} +}; \ No newline at end of file diff --git a/www/app/controller/client/apply.js b/www/app/controller/client/apply.js new file mode 100644 index 0000000..4a6acf3 --- /dev/null +++ b/www/app/controller/client/apply.js @@ -0,0 +1,140 @@ +const Controller = require('egg').Controller; +const tools=require('../../tools'); +// const config = require('../../../config'); +//const ctx.service.drivers.email.sendEmailByTemplateAsync = require('../../drivers').email.ctx.service.drivers.email.sendEmailByTemplateAsyncByTemplateAsync; +// const ctx.app.config.emailAddress.contact = app.config.emailAddress.contact; +class ApplyController extends Controller{ + async applyTrain(){ + const { ctx }=this; + // console.log(ctx.checkBody); + // ctx.checkBody('nickname').notEmpty('用户名不能为空'); + // ctx.checkBody('phone').notEmpty('电话不能为空'); + // ctx.checkBody('email').notEmpty('邮箱不能为空'); + // ctx.checkBody('company').notEmpty('公司不能为空'); + // ctx.checkBody('location').notEmpty('上课地点不能为空'); + const createRule = { + // accesstoken: 'string', + nickname: {type:'string',required:true}, + phone: {type:'string',required:true}, + email: {type:'string',required:true}, + company: {type:'string',required:true}, + location: {type:'string',required:true}, + }; + ctx.validate(createRule, ctx.request.body); + if (ctx.errors) { + ctx.status = 400; + ctx.body = { + statusCode: 400, + errors: ctx.errors.map(err => { + let r = {}; + tools._.forEach(err, (value, key) => { + r.message = value; + r.location = key; + }); + return r; + }) + }; + } else { + await ctx.service.client.apply.applyTrain(ctx.request.body); + ctx.body = { + statusCode: 200, + message: '培训申请成功' + }; + //todo 发送邮件 + const body = ctx.request.body; + ctx.service.drivers.email.sendEmailByTemplateAsync( + ctx.app.config.emailAddress.contact, + '【同方有云】有新的培训申请', + {content: ` +

姓名:${body.nickname}

+

邮箱:${body.email}

+

电话:${body.phone}

+

公司:${body.company}

+

上课地点:${body.location}

+ `} + ); + } + } + + async applyCooperation(){ + const { ctx }=this; + const createRule = { + // accesstoken: 'string', + nickname: {type:'string',required:true}, + phone: {type:'string',required:true}, + // email: {type:'string',required:true}, + // company: {type:'string',required:true}, + // location: {type:'string',required:true}, + }; + ctx.validate(createRule, ctx.request.body); + if (ctx.errors) { + ctx.status = 400; + ctx.body = { + statusCode: 400, + errors: ctx.errors.map(err => { + let r = {}; + tools._.forEach(err, (value, key) => { + r.message = value; + r.location = key; + }); + return r; + }) + }; + } else { + let body = ctx.request.body; + await ctx.service.client.apply.applyCooperation(body); + ctx.body = { + statusCode: 200, + message: '合作申请成功' + }; + //todo 发送邮件 + ctx.service.drivers.email.sendEmailByTemplateAsync( + ctx.app.config.emailAddress.contact, + '【同方有云】有新的合作申请', + {content: ` +

姓名:${body.nickname}

+

电话:${body.phone}

+

邮箱:${body.email || ''}

+

公司:${body.company || ''}

+

公司地点:${body.location || ''}

+ `} + ); + } + } + + async applyPrivateCloud(){ + const { ctx }=this; + const createRule = { + // accesstoken: 'string', + nickname: {type:'string',required:true}, + phone: {type:'string',required:true}, + email: {type:'string',required:true}, + company: {type:'string',required:true}, + // location: {type:'string',required:true}, + }; + ctx.validate(createRule, ctx.request.body); + if (ctx.errors) { + ctx.status = 400; + ctx.body = { + statusCode: 400, + errors: ctx.errors.map(err => { + let r = {}; + tools._.forEach(err, (value, key) => { + r.message = value; + r.location = key; + }); + return r; + }) + }; + } else { + let body = ctx.request.body; + body.evaluation = JSON.stringify(body.evaluation); + await ctx.service.client.apply.applyCloud(body); + ctx.body = { + statusCode: 200, + message: '托管云申请成功' + }; + } + } +} +module.exports=ApplyController; \ No newline at end of file diff --git a/server/app-www/article/routes/article.js b/www/app/controller/client/article.js similarity index 63% rename from server/app-www/article/routes/article.js rename to www/app/controller/client/article.js index e9a684d..da58350 100644 --- a/server/app-www/article/routes/article.js +++ b/www/app/controller/client/article.js @@ -1,10 +1,19 @@ 'use strict'; const path = require('path'); +const globalLang = require('../../../../www/client/locale/lang.json'); +const viewsPath = path.join(__dirname, '../../../../www/client/views'); const _ = require('lodash'); - -const controller = require('../controller/article'); -const themeConfig = require('client/config.json'); +const themeConfig = require('../../../../www/client/config.json'); const urls = themeConfig.articleUrl; +const lang = { + blog: { detail: null, list: null }, + news: { detail: null, list: null } +}; +lang.blog.detail = require(path.join(viewsPath, 'blog-views/detail/lang.json')); +lang.blog.list = require(path.join(viewsPath, 'blog-views/list/lang.json')); +lang.news.detail = require(path.join(viewsPath, 'news-views/detail/lang.json')); +lang.news.list = require(path.join(viewsPath, 'news-views/list/lang.json')); + _.forEach(urls, (value, key) => { if (value && value.type === 'list') { urls[key].params = Object.assign({}, { page: 1 }, urls[key].params); @@ -12,31 +21,25 @@ _.forEach(urls, (value, key) => { delete urls[key]; } }); -module.exports = (router, globalLang, viewsPath) => { - const lang = { - blog: { detail: null, list: null }, - news: { detail: null, list: null } - }; - lang.blog.detail = require(path.join(viewsPath, 'blog-views/detail/lang.json')); - lang.blog.list = require(path.join(viewsPath, 'blog-views/list/lang.json')); - lang.news.detail = require(path.join(viewsPath, 'news-views/detail/lang.json')); - lang.news.list = require(path.join(viewsPath, 'news-views/list/lang.json')); - - router.get(Object.keys(urls), async (ctx, next) => { +const Controller = require('egg').Controller; +class ArticleController extends Controller{ + async articlePage(){ + const { ctx }=this; const matched = ctx.matched; let re; if (Array.isArray(matched)) { matched.some(m => m && m.opts && m.opts.end && (re = m.path)); } if (!re || !urls[re]) { - return next(); + // return next(); + return; } const pageConfig = urls[re]; const params = Object.assign({}, pageConfig.params, ctx.params); const tt = {}; - tt[params.category + '_tags'] = await controller.getTags(params.category); - tt[params.category + '_tops'] = await controller.getTops(params.category); + tt[params.category + '_tags'] = await ctx.service.client.article.getTags(params.category); + tt[params.category + '_tops'] = await ctx.service.client.article.getTops(params.category); const commonData = Object.assign( tt, { category: params.category }, @@ -54,12 +57,12 @@ module.exports = (router, globalLang, viewsPath) => { let page = parseInt(ctx.query.page); params.page = page > 1 ? page : 1; params.limit = 10; - const articles = await controller.listArticle(params); + const articles = await ctx.service.client.article.listArticle(params); const data = Object.assign(commonData, articles, lang[params.category].list[ctx.session.lang]); await ctx.render(params.category + '-views/list/index', data); } else if (pageConfig.type === 'detail') { - let article = await controller.getArticle(params); + let article = await ctx.service.client.article.getArticle(params); let prevNext = {}; if (!article) { article = { @@ -67,7 +70,7 @@ module.exports = (router, globalLang, viewsPath) => { }; ctx.status = 404; } else { - let pn = await controller.getPrevNext(params.category, article.id); + let pn = await ctx.service.client.article.getPrevNext(params.category, article.id); prevNext.prev_article = pn[0] ? { url: pn[0].url, title: pn[0].title } : null; prevNext.next_article = pn[1] ? { url: pn[1].url, title: pn[1].title } : null; } @@ -75,5 +78,6 @@ module.exports = (router, globalLang, viewsPath) => { const data = Object.assign(commonData, prevNext, { article }, lang[params.category].detail[ctx.session.lang]); await ctx.render(params.category + '-views/detail/index', data); } - }); -}; + } +} +module.exports=ArticleController; \ No newline at end of file diff --git a/www/app/controller/client/job.js b/www/app/controller/client/job.js new file mode 100644 index 0000000..a403cce --- /dev/null +++ b/www/app/controller/client/job.js @@ -0,0 +1,9 @@ +const Controller = require('egg').Controller; +class JobController extends Controller{ + async listJobs(){ + const { ctx }= this; + const jobs = await this.ctx.service.client.job.listJobs(); + ctx.body = {jobs}; + } +} +module.exports=JobController; \ No newline at end of file diff --git a/server/app-www/tool/routes/captcha.js b/www/app/controller/client/tool.js similarity index 65% rename from server/app-www/tool/routes/captcha.js rename to www/app/controller/client/tool.js index 91ef1d9..4e94649 100644 --- a/server/app-www/tool/routes/captcha.js +++ b/www/app/controller/client/tool.js @@ -1,9 +1,8 @@ -'use strict'; - -const ccap = require('ccap'); - -module.exports = (router) => { - router.get('/api/tool/captcha', async (ctx, next) => { +const ccap=require('ccap'); +const Controller = require('egg').Controller; +class ToolController extends Controller{ + async chap(){ + const { ctx }=this; const captcha = ccap({ width: 200, //set width,default is 256 height: 60, //set height,default is 60 @@ -15,5 +14,6 @@ module.exports = (router) => { let ary = captcha.get(); ctx.session.www_captcha = ary[0]; ctx.body = ary[1]; - }); -}; + } +} +module.exports=ToolController; \ No newline at end of file diff --git a/www/app/controller/client/view.js b/www/app/controller/client/view.js new file mode 100644 index 0000000..dfbdacd --- /dev/null +++ b/www/app/controller/client/view.js @@ -0,0 +1,80 @@ +const Controller = require('egg').Controller; +const globalLang = require('../../../../www/client/locale/lang.json'); +const homeLang = require('../../../../www/client/views/home-views/lang.json'); +const themeConfig = require('../../../../www/client/config.json'); +const staticPage = require('../../../../www/client/.routers.json'); +const path = require('path'); +const viewsPath = path.join(__dirname, '../../../../www/client/views'); +const pageLang = require(viewsPath + '/404-views/lang.json'); +const send=require('koa-send'); +class ViewController extends Controller { + /** + * 首页 + */ + async index() { + const { ctx } = this; + const defaultLang = themeConfig.defaultLang; + if (ctx.request.query && ctx.request.query.lang && ctx.session.lang !== ctx.request.query.lang) { + ctx.session.lang = ctx.request.query.lang; + } + if (!ctx.session.lang) { + ctx.session.lang = defaultLang; + } + let articles = await Promise.all([ + ctx.service.client.article.listArticle({category: 'news', limit: 5}), + ctx.service.client.article.listArticle({category: 'blog', limit: 5}) + ]); + // console.log(`---------${JSON.stringify(homeLang['en'])}--------`); + const data = Object.assign({ + commonCssFile: `/static/common/style/${ctx.app.FileHash.index}.index.css`, + commonJsFile: `/static/common/js/${ctx.app.FileHash.g}.g.js`, + home_news: articles[0].articles, + home_blog: articles[1].articles + }, globalLang[ctx.session.lang], homeLang[ctx.session.lang],{ + cssFile: `/static/dist/${ctx.app.FileHash.home ? ctx.app.FileHash.home + '.' : ''}home.min.css`, + jsFile: `/static/dist/${ctx.app.FileHash.home ? ctx.app.FileHash.home + '.' : ''}home.min.js`, + }); + await ctx.render('home-views/index',data); + } + + + /** + * 出错页 + */ + async errorPage(){ + const { ctx }=this; + const defaultLang = themeConfig.defaultLang; + if (ctx.request.query && ctx.request.query.lang && ctx.session.lang !== ctx.request.query.lang) { + ctx.session.lang = ctx.request.query.lang; + } + if (!ctx.session.lang) { + ctx.session.lang = defaultLang; + } + let data = Object.assign({ + commonCssFile: `/static/common/style/${ctx.app.FileHash.index}.index.css`, + commonJsFile: `/static/common/js/${ctx.app.FileHash.g}.g.js`, + }, globalLang[ctx.session.lang], pageLang[ctx.session.lang],{ + cssFile: `/static/dist/${ctx.app.FileHash[404]? ctx.app.FileHash[404] + '.' : ''}404.min.css`, + jsFile: `/static/dist/${ctx.app.FileHash[404] ? ctx.app.FileHash[404] + '.' : ''}404.min.js`, + }); + ctx.status = 404; + await ctx.render('404-views/index', data); + } + + /** + * 静态页 + */ + async staticPage(){ + const { ctx }=this; + let filePath = staticPage[ctx.path][ctx.session.lang || 'zh']; + // const staticPath=filePath.substring(filePath.indexOf('/static')); + let themeDir = path.join(__dirname, '../../../../www/client/'); + // console.log(themeDir); + let relativePath = path.relative(themeDir, filePath); + // console.log(relativePath); + await send(ctx, relativePath ,{root: themeDir}); + // await ctx.redirect(staticPath); + } +} + +module.exports = ViewController; \ No newline at end of file diff --git a/www/app/extend/application.js b/www/app/extend/application.js new file mode 100644 index 0000000..3ef81cb --- /dev/null +++ b/www/app/extend/application.js @@ -0,0 +1,25 @@ +'use strict'; +const path = require('path'); +const glob = require('glob'); + +const hashs = {}; +const matchDist = glob.sync('*.min.js',{cwd: path.join(__dirname, '../../../www/client/static/dist/')}); +matchDist.forEach(fileName => { + let arr = fileName.split('.'); + if (arr.length === 4) { + hashs[arr[1]] = arr[0]; + } else if (arr.length === 3) { + hashs[arr[0]] = ''; + } +}); +const matchCommonCss = glob.sync('*.index.css', {cwd: path.join(__dirname, '../../../www/client/static/common/style/')}); +const matchCommonJs = glob.sync('*.g.js', {cwd: path.join(__dirname, '../../../www/client/static/common/js/')}); +if (matchCommonCss[0]) { + hashs.index = matchCommonCss[0].split('.')[0]; +} +if (matchCommonJs[0]) { + hashs.g = matchCommonJs[0].split('.')[0]; +} +module.exports={ + FileHash:hashs, +}; \ No newline at end of file diff --git a/www/app/middleware/checkCaptcha.js b/www/app/middleware/checkCaptcha.js new file mode 100644 index 0000000..1bd9d74 --- /dev/null +++ b/www/app/middleware/checkCaptcha.js @@ -0,0 +1,21 @@ +module.exports = () => { + return function checkCaptcha(ctx, next) { + let captcha = ctx.request.body.captcha; + let sessionCaptcha = ctx.session.www_captcha; + captcha = captcha && captcha.toLowerCase(); + sessionCaptcha = sessionCaptcha && sessionCaptcha.toLowerCase(); + if ( captcha && sessionCaptcha && captcha === sessionCaptcha) { + ctx.session.www_captcha = ''; + return next(); + } else { + ctx.status = 400; + ctx.body = { + statusCode: 400, + errors: [{ + location: 'captcha', + message: '验证码错误' + }] + }; + } + }; +}; \ No newline at end of file diff --git a/www/app/middleware/error_handler.js b/www/app/middleware/error_handler.js new file mode 100644 index 0000000..890c570 --- /dev/null +++ b/www/app/middleware/error_handler.js @@ -0,0 +1,23 @@ +module.exports = () => { + return async function errorHandler(ctx, next) { + try { + await next(); + } catch (err) { + // All exceptions will trigger an error event on the app and the error log will be recorded + ctx.app.emit('error', err, ctx); + + const status = err.status || 500; + // error 500 not returning to client when in the production environment because it may contain sensitive information + const error = status === 500 && ctx.app.config.env === 'prod' + ? 'Internal Server Error' + : err.message; + + // Reading from the properties of error object and set it to the response + ctx.body = { error }; + if (status === 422) { + ctx.body.detail = err.errors; + } + ctx.status = status; + } + }; +}; \ No newline at end of file diff --git a/www/app/model/account.js b/www/app/model/account.js new file mode 100644 index 0000000..b1fa5c2 --- /dev/null +++ b/www/app/model/account.js @@ -0,0 +1,52 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN, UUID, UUIDV4} = app.Sequelize; + const Account = app.model.define('account',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + username: { + type: STRING, + unique: true + }, + phone: { + type: STRING + }, + email: { + type: STRING, + unique: true + }, + password: { + type: STRING, + allowNull: false + }, + nickname: { + type: STRING + }, + enable: { + type: BOOLEAN, + defaultValue: true, + allowNull: false + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'account', + // classMethods: { + // associate: function (models) { + // models.account.hasMany(models.account_service); + // } + // } + }); + Account.associate=function () { + app.model.Account.hasMany(app.model.AccountService); + }; + // Project.hasMany(User, {as: 'Workers'}) + return Account; +}; diff --git a/www/app/model/account_service.js b/www/app/model/account_service.js new file mode 100644 index 0000000..114a9eb --- /dev/null +++ b/www/app/model/account_service.js @@ -0,0 +1,29 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN } = app.Sequelize; + const Account_Server = app.model.define('account_server',{ + serviceName: { + type: STRING, + allowNull: false + }, + enable: { + type: BOOLEAN, + allowNull: false + }, + role: { + type: STRING, + allowNull: false + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'account_service' + }); + + return Account_Server; +}; + diff --git a/www/app/model/apply_cloud.js b/www/app/model/apply_cloud.js new file mode 100644 index 0000000..4ae22cc --- /dev/null +++ b/www/app/model/apply_cloud.js @@ -0,0 +1,39 @@ +'use strict'; + +module.exports = app => { + const { STRING, UUID, TEXT, UUIDV4 } = app.Sequelize; + const Apply_Cloud = app.model.define('apply_cloud', { + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + nickname: { + type: STRING + }, + email: { + type: STRING + }, + phone: { + type: STRING + }, + company: { + type: STRING + }, + description: { + type: TEXT + }, + evaluation: { + type: TEXT + } + }, { + createdAt: 'createdAt', + updatedAt: 'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'apply_cloud' + }); + + return Apply_Cloud; +}; diff --git a/www/app/model/apply_cooperation.js b/www/app/model/apply_cooperation.js new file mode 100644 index 0000000..461403a --- /dev/null +++ b/www/app/model/apply_cooperation.js @@ -0,0 +1,33 @@ +'use strict'; + +module.exports = app => { + const { STRING, UUID, UUIDV4 } = app.Sequelize; + const Apply_Cooperation = app.model.define('apply_coopreation',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + nickname: { + type: STRING + }, + email: { + type: STRING + }, + phone: { + type: STRING + }, + company: { + type: STRING + }, + location: { + type: STRING + }, + }, { + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'apply_cooperation' + }); + return Apply_Cooperation; +}; diff --git a/www/app/model/apply_train.js b/www/app/model/apply_train.js new file mode 100644 index 0000000..457e5ae --- /dev/null +++ b/www/app/model/apply_train.js @@ -0,0 +1,35 @@ +'use strict'; + +module.exports = app => { + const { STRING, UUID,UUIDV4 } = app.Sequelize; + const Apply_Train = app.model.define('apply_train',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + nickname: { + type: STRING + }, + email: { + type: STRING + }, + phone: { + type: STRING + }, + company: { + type: STRING + }, + location: { + type: STRING + }, + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'apply_train' + }); + return Apply_Train; +}; diff --git a/www/app/model/article.js b/www/app/model/article.js new file mode 100644 index 0000000..7c10391 --- /dev/null +++ b/www/app/model/article.js @@ -0,0 +1,111 @@ +'use strict'; + +module.exports = app => { + const { STRING, INTEGER, BOOLEAN, BIGINT, TEXT, ENUM, UUID, UUIDV4 } = app.Sequelize; + const Article = app.model.define('article', { + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true, + }, + category: { + type: STRING, + allowNull: false, + comment: '大类:blog,news,...' + }, + term: { + type: STRING, + comment: 'blog的小类.' + }, + title: { + type: TEXT, + allowNull: false, + comment: '标题' + }, + introduction: { + type: TEXT, + comment: '导语' + }, + content: { + type: TEXT('long'), + comment: '内容' + }, + tags: { + type: STRING, + comment: '标签' + }, + cover: { + type: STRING, + comment: '封面图片链接' + }, + status: { + type: ENUM('public', 'private', 'trash', 'draft'), + allowNull: false, + comment: '状态:草稿,已发布,私密,回收站' + }, + url: { + type: STRING, + comment: '固定链接' + }, + time: { + type: STRING + }, + authorId: { + type: UUID, + allowNull: false, + }, + authorName: { + type: STRING, + allowNull: false + }, + level: { + type: INTEGER, + allowNull: false, + defaultValue: 0 + }, + top: { + type: BOOLEAN, + allowNull: false, + defaultValue: false + }, + view_count: { + type: BIGINT, + allowNull: false, + defaultValue: 0, + comment: '浏览量' + }, + comment_count: { + type: BIGINT, + allowNull: false, + defaultValue: 0, + comment: '评论量' + }, + comment_status: { + type: BOOLEAN, + defaultValue: true, + allowNull: false + } + }, { + createdAt: 'createdAt', + updatedAt: 'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'article', + // classMethods: { + // associate: function (models) { + // models.article.hasMany(models.article_tag); + // } + // }, + indexes: [ + { + unique: true, + fields: ['url', 'category'] + } + ] + }); + Article.associate = () => { + app.model.Article.hasMany(app.model.ArticleTag); + }; + return Article; +}; diff --git a/www/app/model/article_tag.js b/www/app/model/article_tag.js new file mode 100644 index 0000000..4f1e5b2 --- /dev/null +++ b/www/app/model/article_tag.js @@ -0,0 +1,25 @@ +'use strict'; +module.exports = app => { + const { STRING } = app.Sequelize; + + const User = app.model.define('article_tag', { + category: { + type: STRING, + allowNull: false + }, + tag: { + type: STRING, + allowNull: false + } + }, { + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'article_tag', + }); + + return User; +}; + + + diff --git a/www/app/model/company.js b/www/app/model/company.js new file mode 100644 index 0000000..5d2ec25 --- /dev/null +++ b/www/app/model/company.js @@ -0,0 +1,53 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN, UUID, UUIDV4, TEXT } = app.Sequelize; + const Company = app.model.define('c_company',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + name: { + type: STRING + }, + phone: { + type: STRING + }, + location: { + type: TEXT + }, + enable: { + type: BOOLEAN, + defaultValue: true + }, + logo: { + type: STRING + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'c_company', + // classMethods: { + // associate: function (models) { + // models.c_company.belongsToMany(models.c_user, { + // through: { + // model: models.c_company_user + // } + // }); + // } + // } + }); + Company.associate=()=> { + app.model.Company.belongsToMany(app.model.User, { + through: { + model: app.model.CompanyUser + } + }); + }; + return Company; +}; + diff --git a/www/app/model/company_user.js b/www/app/model/company_user.js new file mode 100644 index 0000000..9b4099b --- /dev/null +++ b/www/app/model/company_user.js @@ -0,0 +1,23 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN } = app.Sequelize; + const Company_User = app.model.define('c_company_user',{ + role: { + type: STRING, + allowNull: false + }, + status: { + type: BOOLEAN, + defaultValue: true + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'c_company_user' + }); + return Company_User; +}; diff --git a/server/models/job/job.js b/www/app/model/docs.js similarity index 52% rename from server/models/job/job.js rename to www/app/model/docs.js index f88e11d..ca2e665 100644 --- a/server/models/job/job.js +++ b/www/app/model/docs.js @@ -5,51 +5,59 @@ module.exports = { www: true }, model: (mysql, DataTypes) => { - return mysql.define('job', { + return mysql.define('docs', { id: { type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4, primaryKey: true }, - title: { + repository: { + type: DataTypes.STRING, + allowNull: false, + unique: true + }, + projectName: { type: DataTypes.STRING, allowNull: false }, - description: { + introduction: { type: DataTypes.TEXT }, - requirement: { - type: DataTypes.TEXT + branch: { + type: DataTypes.STRING, + allowNull: false, + defaultValue: 'master' }, - preferred: { + name: { + type: DataTypes.STRING + }, + logo: { type: DataTypes.TEXT }, - location: { - type: DataTypes.STRING, + pdf: { + type: DataTypes.STRING }, - role: { - type: DataTypes.STRING, - allowNull: false + version: { + type: DataTypes.STRING }, - type: { - type: DataTypes.STRING, - allowNull: false + authorization: { + type: DataTypes.INTEGER.UNSIGNED, }, status: { + type: DataTypes.STRING + }, + url: { type: DataTypes.STRING, - allowNull: false + unique: true }, - top: { - type: DataTypes.BOOLEAN, - allowNull: false, - defaultValue: false + directory: { + type: DataTypes.STRING } }, { paranoid: false, charset: 'utf8', freezeTableName: true, - tableName: 'job', + tableName: 'docs' }); - } }; diff --git a/www/app/model/job.js b/www/app/model/job.js new file mode 100644 index 0000000..5b8b076 --- /dev/null +++ b/www/app/model/job.js @@ -0,0 +1,54 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN, UUID, UUIDV4, TEXT } = app.Sequelize; + const Job = app.model.define('job',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + title: { + type: STRING, + allowNull: false + }, + description: { + type: TEXT + }, + requirement: { + type: TEXT + }, + preferred: { + type: TEXT + }, + location: { + type: STRING, + }, + role: { + type: STRING, + allowNull: false + }, + type: { + type: STRING, + allowNull: false + }, + status: { + type: STRING, + allowNull: false + }, + top: { + type: BOOLEAN, + allowNull: false, + defaultValue: false + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'job', + }); + return Job; +}; + diff --git a/www/app/model/media.js b/www/app/model/media.js new file mode 100644 index 0000000..614c2dd --- /dev/null +++ b/www/app/model/media.js @@ -0,0 +1,62 @@ +'use strict'; + +module.exports = { + config: { + www: false + }, + model: (mysql, DataTypes) => { + return mysql.define('media', { + id: { + type: DataTypes.UUID, + primaryKey: true, + defaultValue: DataTypes.UUIDV4 + }, + name: { + type: DataTypes.STRING, + allowNull: false + }, + tags: { + type: DataTypes.STRING + }, + size: { + type: DataTypes.INTEGER, + allowNull: false + }, + mimetype: { + type: DataTypes.STRING, + allowNull: false + }, + position: { + type: DataTypes.STRING, + allowNull: false + }, + description: { + type: DataTypes.STRING, + allowNull: true + }, + filename: { + type: DataTypes.STRING, + allowNull: false + }, + prefix: { + type: DataTypes.STRING, + allowNull: false + }, + userId: { + type: DataTypes.UUID, + allowNull: false + } + }, { + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'media', + // classMethods: { + // associate: function (models) { + // models.media.hasMany(models.media_tag, {foreignKey: 'mediaId'}); + // } + // } + }); + + } +}; diff --git a/server/models/customer/company_user.js b/www/app/model/media_tag.js similarity index 50% rename from server/models/customer/company_user.js rename to www/app/model/media_tag.js index 2be342b..b4110a7 100644 --- a/server/models/customer/company_user.js +++ b/www/app/model/media_tag.js @@ -2,23 +2,19 @@ module.exports = { config: { - www: true + www: false }, model: (mysql, DataTypes) => { - return mysql.define('c_company_user', { - role: { + return mysql.define('media_tag', { + tag: { type: DataTypes.STRING, - allowNull: false - }, - status: { - type: DataTypes.BOOLEAN, - defaultValue: true + allowNull: false, } }, { paranoid: false, charset: 'utf8', freezeTableName: true, - tableName: 'c_company_user' + tableName: 'media_tag' }); } }; diff --git a/www/app/model/user.js b/www/app/model/user.js new file mode 100644 index 0000000..3757f48 --- /dev/null +++ b/www/app/model/user.js @@ -0,0 +1,63 @@ +'use strict'; + +module.exports = app => { + const { STRING, BOOLEAN, UUID, UUIDV4 } = app.Sequelize; + const User = app.model.define('c_user',{ + id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + username: { + type: STRING, + unique: true + }, + phone: { + type: STRING, + allowNull: false + }, + email: { + type: STRING, + allowNull: false, + unique: true + }, + password: { + type: STRING + }, + nickname: { + type: STRING + }, + enable: { + type: BOOLEAN, + defaultValue: true, + allowNull: false + } + }, { + createdAt:'createdAt', + updatedAt:'updatedAt', + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'c_user', + // classMethods: { + // associate: function (models) { + // models.c_user.belongsToMany(models.c_company, { + // through: { + // model: models.c_company_user + // } + // }); + // models.c_user.hasMany(models.c_user_meta, {}); + // } + // } + }); + User.associate=()=> { + app.model.User.belongsToMany(app.model.Company, { + through: { + model: app.model.CompanyUser + } + }); + app.model.User.hasMany(app.model.UserMeta, {}); + }; + return User; +}; + diff --git a/www/app/model/user_meta.js b/www/app/model/user_meta.js new file mode 100644 index 0000000..9559be7 --- /dev/null +++ b/www/app/model/user_meta.js @@ -0,0 +1,25 @@ +'use strict'; + +module.exports = app => { + const { STRING, UUID, UUIDV4 } = app.Sequelize; + const User_Meta = app.model.define('c_user_meta',{ + user_id: { + type: UUID, + defaultValue: UUIDV4, + primaryKey: true + }, + field: { + type: STRING, + allowNull: false + }, + value: { + type: STRING + } + }, { + paranoid: false, + charset: 'utf8', + freezeTableName: true, + tableName: 'c_user_meta' + }); + return User_Meta; +}; diff --git a/www/app/router.js b/www/app/router.js new file mode 100644 index 0000000..c04c4ae --- /dev/null +++ b/www/app/router.js @@ -0,0 +1,42 @@ +const staticPage = require('../../www/client/.routers.json'); +const path = require('path'); +const themeConfig = require('../../www/client/config.json'); +const urls = themeConfig.articleUrl; +const fs = require('fs'); +// const path = require('path'); + +module.exports = app=>{ + const { router,controller }= app; + //static pages + router.get(Object.keys(staticPage),controller.client.view.staticPage); + + /** + * 首页 + */ + router.get('/',controller.client.view.index); + + /** + * apply + */ + router.post('/apply/api/train',controller.client.apply.applyTrain); + router.post('/apply/api/cooperation',controller.client.apply.applyCooperation); + router.post('/apply/api/private-cloud',controller.client.apply.applyPrivateCloud); + + /** + * article + */ + router.get(Object.keys(urls),controller.client.article.articlePage); + + /** + * job + */ + router.get('/api/job',controller.client.job.listJobs); + + /** + * tool + */ + router.get('/api/tool/captcha', controller.client.tool.chap); + + + router.get('*',controller.client.view.errorPage); +} \ No newline at end of file diff --git a/www/app/service/client/apply.js b/www/app/service/client/apply.js new file mode 100644 index 0000000..b0d9ebf --- /dev/null +++ b/www/app/service/client/apply.js @@ -0,0 +1,18 @@ +const Service = require('egg').Service; + +class ViewService extends Service { + + async applyTrain(train) { + return await this.app.model.ApplyTrain.create(train); + } + + async applyCooperation(cooperation){ + return await this.app.model.ApplyCooperation.create(cooperation); + } + + async applyCloud(cloud){ + return await this.app.model.ApplyCloud.create(cloud); + } +} + +module.exports = ViewService; \ No newline at end of file diff --git a/www/app/service/client/article.js b/www/app/service/client/article.js new file mode 100644 index 0000000..6240267 --- /dev/null +++ b/www/app/service/client/article.js @@ -0,0 +1,92 @@ +'use strict'; +// const ctx.model = require('ctx.model').sequelize.ctx.model; +// const ctx.model.article = ctx.model.article; +const publicStatus = 'public'; +const Service = require('egg').Service; +class ArticleService extends Service { + + async getArticle(params) { + const { ctx } = this; + const { category, url } = params; + const article = await ctx.model.article.findOne({ where: { url: encodeURI(url), category, status: publicStatus } }); + if (article) { + article.increment('view_count'); + } + return article; + } + + async listArticle(params) { + + const { ctx } = this; + const obj = { where: { status: publicStatus } }; + if (params.search) { + obj.where.title = { $like: '%' + decodeURI(params.search) + '%' }; + } + + if (params.tag) { + obj.include = [{ model: ctx.model.Article_tag, where: { tag: params.tag } }]; + } + if (params.category) { + obj.where.category = params.category; + } + + params.limit = obj.limit = parseInt(params.limit) || 10; + params.page = parseInt(params.page) > 0 ? parseInt(params.page) : 1; + obj.offset = (params.page - 1) * params.limit; + + obj.order = [['top', 'DESC'], ['createdAt', 'DESC']]; + + obj.attributes = { exclude: ['content'] }; + + const result = await ctx.model.Article.findAndCount(obj); + return { + articles: result.rows, + count: result.count, + page: params.page, + limit: params.limit, + prev: params.page > 1 ? params.page - 1 : null, + next: result.count > params.page * params.limit ? params.page + 1 : null + }; + } + + async getTags(category = 'blog') { + const { ctx } = this; + return await ctx.model.ArticleTag.count({ + where: { category }, + attributes: { exclude: ['id', 'article_id', 'created_at', 'updated_at'] }, + group: ['tag'] + }); + } + + async getTops(category = 'blog') { + const { ctx } = this; + return await ctx.model.Article.findAll({ + where: { status: publicStatus, category }, + limit: 10, + attributes: { exclude: ['content'] }, + order: [['top', 'DESC'], ['view_count', 'DESC']] + }); + + } + + async getPrevNext(category = 'blog', articleId) { + + const { ctx } = this; + return await Promise.all([ + ctx.model.article.findOne({ + where: { status: publicStatus, category, id: { $lt: articleId } }, + limit: 1, + attributes: ['url', 'title'], + order: [['top', 'DESC'], ['createdAt', 'DESC']] + }), + ctx.model.article.findOne({ + where: { status: publicStatus, category, id: { $gt: articleId } }, + limit: 1, + attributes: ['url', 'title'], + order: [['top', 'DESC'], ['createdAt', 'DESC']] + }) + ]); + } + +} +module.exports = ArticleService; \ No newline at end of file diff --git a/www/app/service/client/job.js b/www/app/service/client/job.js new file mode 100644 index 0000000..2636879 --- /dev/null +++ b/www/app/service/client/job.js @@ -0,0 +1,20 @@ +const Service = require('egg').Service; +class JobService extends Service{ + async listJobs(){ + const { ctx }= this; + let jobs = await ctx.model.Job.findAll({ + where: { + status: 'public' + }, + order: [ + ['top', 'DESC'], + ['createdAt', 'DESC'] + ] + }); + jobs.forEach(job => { + job.location = job.location ? job.location.split(',') : []; + }); + return jobs; + } +} +module.exports=JobService; \ No newline at end of file diff --git a/www/app/service/client/view.js b/www/app/service/client/view.js new file mode 100644 index 0000000..e69de29 diff --git a/www/app/service/drivers/email.js b/www/app/service/drivers/email.js new file mode 100644 index 0000000..5a8ebd3 --- /dev/null +++ b/www/app/service/drivers/email.js @@ -0,0 +1,43 @@ +const path = require('path'); +const fs = require('fs'); +const nodemailer = require('nodemailer'); +const ejs = require('ejs'); + +const templates = {}; +fs.readdirSync(path.join(__dirname, 'templates')).forEach(file => { + templates[file.split('.')[0]] = fs.readFileSync(path.join(__dirname, 'templates', file), 'utf8'); +}); + +const Service = require('egg').Service; + +class EmailService extends Service { + sendEmailAsync_1(data) { + const { ctx } = this; + const transporter = nodemailer.createTransport(ctx.app.config.smtp); + return new Promise((resolve, reject) => { + transporter.sendMail(data, (err, info) => { + if (err) { + reject(err); + } else { + resolve(info); + } + }); + }); + } + + sendEmailAsync(to, subject, text) { + + const { ctx } = this; + return this.sendEmailAsync_1({ to, subject, text, from: ctx.app.config.smtp.auth.user }); + } + + sendEmailByTemplateAsync(to, subject, data, templateName) { + const { ctx } = this; + if (templateName && templates[templateName] === undefined) { + throw new Error('模板不存在'); + } + let content = ejs.render(templates[templateName || 'default'], Object.assign({}, ctx.app.config.emailTemplate, data)); + return this.sendEmailAsync_1({ to, subject, html: content, from: ctx.app.config.smtp.auth.user }); + } +} +module.exports = EmailService; \ No newline at end of file diff --git a/server/drivers/email/templates/default.ejs b/www/app/service/drivers/templates/default.ejs similarity index 100% rename from server/drivers/email/templates/default.ejs rename to www/app/service/drivers/templates/default.ejs diff --git a/www/app/tools/RegExp.js b/www/app/tools/RegExp.js new file mode 100644 index 0000000..d0d3013 --- /dev/null +++ b/www/app/tools/RegExp.js @@ -0,0 +1,17 @@ +'use strict'; + +const RegExp_USERNAME = /^[a-zA-Z]{1}([a-zA-Z0-9]){4,19}$/; +const RegExp_PHONE = /^1[34578][0-9]\d{8}$/; +const RegExp_EMAIL = /^[a-z0-9][a-z0-9_\-\.]+@([_a-z0-9]+\.)+[a-z]{2,7}$/i; +const RegExp_CODE = /^[0-9]\d{5}$/; +const RegExp_GITURL = /((git@[a-z0-9\-_.]+:)|((http|https)+:\/\/+[a-z0-9\-_.]+\/))+[a-z0-9\-_.]+\/+[a-z0-9\-_.]+\.git$/i; + +const tool = {}; +tool.RegExp = { + USERNAME: RegExp_USERNAME, + PHONE: RegExp_PHONE, + EMAIL: RegExp_EMAIL, + CODE: RegExp_CODE, + GITURL: RegExp_GITURL +}; +module.exports = tool; \ No newline at end of file diff --git a/www/app/tools/auth.js b/www/app/tools/auth.js new file mode 100644 index 0000000..546ec85 --- /dev/null +++ b/www/app/tools/auth.js @@ -0,0 +1,10 @@ +'use strict'; +const checkLogin = (ctx, user = 'user') => { + return ctx.session && ctx.session[user] && ctx.session[user].token; +}; + +const tool = {}; +tool.auth = { + checkLogin +}; +module.exports = tool; \ No newline at end of file diff --git a/server/drivers/index.js b/www/app/tools/index.js similarity index 52% rename from server/drivers/index.js rename to www/app/tools/index.js index b5c42f2..e6a20a7 100644 --- a/server/drivers/index.js +++ b/www/app/tools/index.js @@ -2,23 +2,20 @@ const fs = require('fs'); const path = require('path'); - -let driver = {}; +let tools = {}; fs.readdirSync(__dirname) - .filter(c => { - return fs.statSync(path.join(__dirname, c)).isDirectory(); - }) + .filter(c => c !== 'index.js') .forEach(c => { let cloud; try { - cloud = require(__dirname + '/' + c); + cloud = require(path.join(__dirname, c)); } catch (e) { console.log(e.toString()); } if (cloud) { - Object.assign(driver, cloud); + Object.assign(tools, cloud); } }); -module.exports = driver; +module.exports = tools; diff --git a/www/app/tools/password.js b/www/app/tools/password.js new file mode 100644 index 0000000..3598927 --- /dev/null +++ b/www/app/tools/password.js @@ -0,0 +1,22 @@ +'use strict'; + +const bcrypt = require('bcrypt'); +const saltRounds = 10; +const hash = async (originalPassword) => { + return new Promise((resolve, reject) => { + bcrypt.hash(originalPassword, saltRounds, (err, hash) => (err ? reject(err) : resolve(hash))); + }); + +}; + +const compare = async (originalPassword, hashPassword) => { + return new Promise((resolve, reject) => { + bcrypt.compare(originalPassword, hashPassword, (err, same) => (err ? reject(err) : resolve(same))); + }); +}; + +module.exports = { + password: { + hash, compare + } +}; \ No newline at end of file diff --git a/www/app/tools/third.js b/www/app/tools/third.js new file mode 100644 index 0000000..d09c18e --- /dev/null +++ b/www/app/tools/third.js @@ -0,0 +1,6 @@ +'use strict'; + +const uuid = require('uuid'); +const _ = require('lodash'); +let tool = {_, uuid}; +module.exports = tool; \ No newline at end of file diff --git a/client/build/Gruntfile.js b/www/client/build/Gruntfile.js similarity index 90% rename from client/build/Gruntfile.js rename to www/client/build/Gruntfile.js index 7dbcca3..c1a5170 100644 --- a/client/build/Gruntfile.js +++ b/www/client/build/Gruntfile.js @@ -12,8 +12,10 @@ const childProcess = require('child_process'); const glob = require('glob'); const lessVarParse = require('less-var-parse'); let webpackConfig = require('./webpack.config.js'); +const mozjpeg = require('imagemin-mozjpeg'); let devConfig = webpackConfig; let routers = {}; +let assetsDirs = []; require('colors'); /** * @@ -54,6 +56,19 @@ const renderEjs = function(lang, done) { }); }; +const getAssetsFiles = (initDir = '../views/') => { + const dir = path.join(__dirname, initDir); + if (fs.statSync(dir).isDirectory()) { + fs.readdirSync(dir).forEach((r) => { + r === 'assets' ? + assetsDirs.push(`${dir.split('/views/')[1]}/assets/*.{png,jpg,gif}`) : + getAssetsFiles(`${initDir}/${r}`); + }); + } +}; + +getAssetsFiles(); + module.exports = function(grunt) { grunt.initConfig({ @@ -84,6 +99,25 @@ module.exports = function(grunt) { commonJs: 'client/static/common/js/*.g.js' }, + imagemin: { + dynamic: { + options: { + optimizationLevel: 3, + svgoPlugins: [{removeViewBox: false}], + use: [mozjpeg()] + }, + files: [{ + expand: true, + cwd: 'client/views', + src: assetsDirs, + dest: assetsFolder, + rename: function(dest, matchedSrcPath) { + return path.join(dest, matchedSrcPath.replace('/assets', '')); + } + }] + } + }, + webpack: { build: webpackConfig, dev: devConfig @@ -222,7 +256,7 @@ module.exports = function(grunt) { grunt.registerTask('font', ['clean:fonts', 'webfont', 'copy:fonts', 'commonCss']); // copy assets to static/assets - grunt.registerTask('copy_assets', 'Copy assets to /static/assets', ['clean:assets', 'copy:assets', 'copy:common']); + grunt.registerTask('copy_assets', 'Copy assets to /static/assets', ['clean:assets', 'imagemin:dynamic', 'copy:common']); // render ejs file to html grunt.registerTask('ejs2html', 'Generate html by render ejs file', function(lang) { diff --git a/client/build/dev.webpack.config.js b/www/client/build/dev.webpack.config.js similarity index 100% rename from client/build/dev.webpack.config.js rename to www/client/build/dev.webpack.config.js diff --git a/client/build/getPages.js b/www/client/build/getPages.js similarity index 100% rename from client/build/getPages.js rename to www/client/build/getPages.js diff --git a/client/build/webpack.config.js b/www/client/build/webpack.config.js similarity index 100% rename from client/build/webpack.config.js rename to www/client/build/webpack.config.js diff --git a/client/components/footer.ejs b/www/client/components/footer.ejs similarity index 100% rename from client/components/footer.ejs rename to www/client/components/footer.ejs diff --git a/client/components/footer.less b/www/client/components/footer.less similarity index 100% rename from client/components/footer.less rename to www/client/components/footer.less diff --git a/client/components/header.ejs b/www/client/components/header.ejs similarity index 100% rename from client/components/header.ejs rename to www/client/components/header.ejs diff --git a/client/components/header.less b/www/client/components/header.less similarity index 100% rename from client/components/header.less rename to www/client/components/header.less diff --git a/client/components/pagination.less b/www/client/components/pagination.less similarity index 100% rename from client/components/pagination.less rename to www/client/components/pagination.less diff --git a/client/config.json b/www/client/config.json similarity index 100% rename from client/config.json rename to www/client/config.json diff --git a/client/locale/lang.json b/www/client/locale/lang.json similarity index 100% rename from client/locale/lang.json rename to www/client/locale/lang.json diff --git a/client/static/common/assets/3-1@v2.0.jpg b/www/client/static/common/assets/3-1@v2.0.jpg similarity index 100% rename from client/static/common/assets/3-1@v2.0.jpg rename to www/client/static/common/assets/3-1@v2.0.jpg diff --git a/client/static/common/assets/3-2@v2.0.jpg b/www/client/static/common/assets/3-2@v2.0.jpg similarity index 100% rename from client/static/common/assets/3-2@v2.0.jpg rename to www/client/static/common/assets/3-2@v2.0.jpg diff --git a/client/static/common/assets/3-3@v2.0.jpg b/www/client/static/common/assets/3-3@v2.0.jpg similarity index 100% rename from client/static/common/assets/3-3@v2.0.jpg rename to www/client/static/common/assets/3-3@v2.0.jpg diff --git a/client/static/common/assets/5-1-0.png b/www/client/static/common/assets/5-1-0.png similarity index 100% rename from client/static/common/assets/5-1-0.png rename to www/client/static/common/assets/5-1-0.png diff --git a/client/static/common/assets/5-1@v2.0.jpg b/www/client/static/common/assets/5-1@v2.0.jpg similarity index 100% rename from client/static/common/assets/5-1@v2.0.jpg rename to www/client/static/common/assets/5-1@v2.0.jpg diff --git a/client/static/common/assets/5-2-0.png b/www/client/static/common/assets/5-2-0.png similarity index 100% rename from client/static/common/assets/5-2-0.png rename to www/client/static/common/assets/5-2-0.png diff --git a/client/static/common/assets/5-2@v2.0.jpg b/www/client/static/common/assets/5-2@v2.0.jpg similarity index 100% rename from client/static/common/assets/5-2@v2.0.jpg rename to www/client/static/common/assets/5-2@v2.0.jpg diff --git a/client/static/common/assets/5-3-0.png b/www/client/static/common/assets/5-3-0.png similarity index 100% rename from client/static/common/assets/5-3-0.png rename to www/client/static/common/assets/5-3-0.png diff --git a/client/static/common/assets/5-3@v2.0.jpg b/www/client/static/common/assets/5-3@v2.0.jpg similarity index 100% rename from client/static/common/assets/5-3@v2.0.jpg rename to www/client/static/common/assets/5-3@v2.0.jpg diff --git a/client/static/common/assets/5-4-0.png b/www/client/static/common/assets/5-4-0.png similarity index 100% rename from client/static/common/assets/5-4-0.png rename to www/client/static/common/assets/5-4-0.png diff --git a/client/static/common/assets/5-4@v2.0.jpg b/www/client/static/common/assets/5-4@v2.0.jpg similarity index 100% rename from client/static/common/assets/5-4@v2.0.jpg rename to www/client/static/common/assets/5-4@v2.0.jpg diff --git a/client/static/common/assets/6-1@v2.0.jpg b/www/client/static/common/assets/6-1@v2.0.jpg similarity index 100% rename from client/static/common/assets/6-1@v2.0.jpg rename to www/client/static/common/assets/6-1@v2.0.jpg diff --git a/client/static/common/assets/6-2@v2.0.jpg b/www/client/static/common/assets/6-2@v2.0.jpg similarity index 100% rename from client/static/common/assets/6-2@v2.0.jpg rename to www/client/static/common/assets/6-2@v2.0.jpg diff --git a/client/static/common/assets/6-3@v2.0.jpg b/www/client/static/common/assets/6-3@v2.0.jpg similarity index 100% rename from client/static/common/assets/6-3@v2.0.jpg rename to www/client/static/common/assets/6-3@v2.0.jpg diff --git a/client/static/common/assets/6-4@v2.0.jpg b/www/client/static/common/assets/6-4@v2.0.jpg similarity index 100% rename from client/static/common/assets/6-4@v2.0.jpg rename to www/client/static/common/assets/6-4@v2.0.jpg diff --git a/client/static/common/assets/7-1.png b/www/client/static/common/assets/7-1.png similarity index 100% rename from client/static/common/assets/7-1.png rename to www/client/static/common/assets/7-1.png diff --git a/client/static/common/assets/7-2.png b/www/client/static/common/assets/7-2.png similarity index 100% rename from client/static/common/assets/7-2.png rename to www/client/static/common/assets/7-2.png diff --git a/client/static/common/assets/7-3.png b/www/client/static/common/assets/7-3.png similarity index 100% rename from client/static/common/assets/7-3.png rename to www/client/static/common/assets/7-3.png diff --git a/client/static/common/assets/7-4.png b/www/client/static/common/assets/7-4.png similarity index 100% rename from client/static/common/assets/7-4.png rename to www/client/static/common/assets/7-4.png diff --git a/client/static/common/assets/7-5.png b/www/client/static/common/assets/7-5.png similarity index 100% rename from client/static/common/assets/7-5.png rename to www/client/static/common/assets/7-5.png diff --git a/client/static/common/assets/8@v2.0.jpg b/www/client/static/common/assets/8@v2.0.jpg similarity index 100% rename from client/static/common/assets/8@v2.0.jpg rename to www/client/static/common/assets/8@v2.0.jpg diff --git a/client/static/common/assets/ad1.png b/www/client/static/common/assets/ad1.png similarity index 100% rename from client/static/common/assets/ad1.png rename to www/client/static/common/assets/ad1.png diff --git a/client/static/common/assets/ad2.png b/www/client/static/common/assets/ad2.png similarity index 100% rename from client/static/common/assets/ad2.png rename to www/client/static/common/assets/ad2.png diff --git a/client/static/common/assets/ad3.png b/www/client/static/common/assets/ad3.png similarity index 100% rename from client/static/common/assets/ad3.png rename to www/client/static/common/assets/ad3.png diff --git a/client/static/common/assets/ad4.png b/www/client/static/common/assets/ad4.png similarity index 100% rename from client/static/common/assets/ad4.png rename to www/client/static/common/assets/ad4.png diff --git a/client/static/common/assets/ad5.png b/www/client/static/common/assets/ad5.png similarity index 100% rename from client/static/common/assets/ad5.png rename to www/client/static/common/assets/ad5.png diff --git a/client/static/common/assets/advantage.png b/www/client/static/common/assets/advantage.png similarity index 100% rename from client/static/common/assets/advantage.png rename to www/client/static/common/assets/advantage.png diff --git a/client/static/common/assets/banner1@v2.0.jpg b/www/client/static/common/assets/banner1@v2.0.jpg similarity index 100% rename from client/static/common/assets/banner1@v2.0.jpg rename to www/client/static/common/assets/banner1@v2.0.jpg diff --git a/client/static/common/assets/banner2.jpg b/www/client/static/common/assets/banner2.jpg similarity index 100% rename from client/static/common/assets/banner2.jpg rename to www/client/static/common/assets/banner2.jpg diff --git a/client/static/common/assets/bg6.jpg b/www/client/static/common/assets/bg6.jpg similarity index 100% rename from client/static/common/assets/bg6.jpg rename to www/client/static/common/assets/bg6.jpg diff --git a/client/static/common/assets/crosswise1.png b/www/client/static/common/assets/crosswise1.png similarity index 100% rename from client/static/common/assets/crosswise1.png rename to www/client/static/common/assets/crosswise1.png diff --git a/client/static/common/assets/crosswise11.png b/www/client/static/common/assets/crosswise11.png similarity index 100% rename from client/static/common/assets/crosswise11.png rename to www/client/static/common/assets/crosswise11.png diff --git a/client/static/common/assets/crosswise2.png b/www/client/static/common/assets/crosswise2.png similarity index 100% rename from client/static/common/assets/crosswise2.png rename to www/client/static/common/assets/crosswise2.png diff --git a/client/static/common/assets/crosswise22.png b/www/client/static/common/assets/crosswise22.png similarity index 100% rename from client/static/common/assets/crosswise22.png rename to www/client/static/common/assets/crosswise22.png diff --git a/client/static/common/assets/crosswise3.png b/www/client/static/common/assets/crosswise3.png similarity index 100% rename from client/static/common/assets/crosswise3.png rename to www/client/static/common/assets/crosswise3.png diff --git a/client/static/common/assets/crosswise33.png b/www/client/static/common/assets/crosswise33.png similarity index 100% rename from client/static/common/assets/crosswise33.png rename to www/client/static/common/assets/crosswise33.png diff --git a/client/static/common/assets/crosswise4.png b/www/client/static/common/assets/crosswise4.png similarity index 100% rename from client/static/common/assets/crosswise4.png rename to www/client/static/common/assets/crosswise4.png diff --git a/client/static/common/assets/crosswise44.png b/www/client/static/common/assets/crosswise44.png similarity index 100% rename from client/static/common/assets/crosswise44.png rename to www/client/static/common/assets/crosswise44.png diff --git a/client/static/common/assets/favicon.ico b/www/client/static/common/assets/favicon.ico similarity index 100% rename from client/static/common/assets/favicon.ico rename to www/client/static/common/assets/favicon.ico diff --git a/client/static/common/assets/framework-1-1.png b/www/client/static/common/assets/framework-1-1.png similarity index 100% rename from client/static/common/assets/framework-1-1.png rename to www/client/static/common/assets/framework-1-1.png diff --git a/client/static/common/assets/framework-1-2.png b/www/client/static/common/assets/framework-1-2.png similarity index 100% rename from client/static/common/assets/framework-1-2.png rename to www/client/static/common/assets/framework-1-2.png diff --git a/client/static/common/assets/framework-2-1.png b/www/client/static/common/assets/framework-2-1.png similarity index 100% rename from client/static/common/assets/framework-2-1.png rename to www/client/static/common/assets/framework-2-1.png diff --git a/client/static/common/assets/framework-2-2.png b/www/client/static/common/assets/framework-2-2.png similarity index 100% rename from client/static/common/assets/framework-2-2.png rename to www/client/static/common/assets/framework-2-2.png diff --git a/client/static/common/assets/framework-3-1.png b/www/client/static/common/assets/framework-3-1.png similarity index 100% rename from client/static/common/assets/framework-3-1.png rename to www/client/static/common/assets/framework-3-1.png diff --git a/client/static/common/assets/framework-3-2.png b/www/client/static/common/assets/framework-3-2.png similarity index 100% rename from client/static/common/assets/framework-3-2.png rename to www/client/static/common/assets/framework-3-2.png diff --git a/client/static/common/assets/framework-4-1.png b/www/client/static/common/assets/framework-4-1.png similarity index 100% rename from client/static/common/assets/framework-4-1.png rename to www/client/static/common/assets/framework-4-1.png diff --git a/client/static/common/assets/framework-4-2.png b/www/client/static/common/assets/framework-4-2.png similarity index 100% rename from client/static/common/assets/framework-4-2.png rename to www/client/static/common/assets/framework-4-2.png diff --git a/client/static/common/assets/holder.png b/www/client/static/common/assets/holder.png similarity index 100% rename from client/static/common/assets/holder.png rename to www/client/static/common/assets/holder.png diff --git a/client/static/common/assets/logo1.png b/www/client/static/common/assets/logo1.png similarity index 100% rename from client/static/common/assets/logo1.png rename to www/client/static/common/assets/logo1.png diff --git a/client/static/common/assets/logo@v2.0.png b/www/client/static/common/assets/logo@v2.0.png similarity index 100% rename from client/static/common/assets/logo@v2.0.png rename to www/client/static/common/assets/logo@v2.0.png diff --git a/client/static/common/assets/logo@v3.0.png b/www/client/static/common/assets/logo@v3.0.png similarity index 100% rename from client/static/common/assets/logo@v3.0.png rename to www/client/static/common/assets/logo@v3.0.png diff --git a/client/static/common/assets/mobile-banner.jpg b/www/client/static/common/assets/mobile-banner.jpg similarity index 100% rename from client/static/common/assets/mobile-banner.jpg rename to www/client/static/common/assets/mobile-banner.jpg diff --git a/client/static/common/assets/mobilebanner@v2.0.jpg b/www/client/static/common/assets/mobilebanner@v2.0.jpg similarity index 100% rename from client/static/common/assets/mobilebanner@v2.0.jpg rename to www/client/static/common/assets/mobilebanner@v2.0.jpg diff --git a/client/static/common/assets/openstack-gold-member-badge.png b/www/client/static/common/assets/openstack-gold-member-badge.png similarity index 100% rename from client/static/common/assets/openstack-gold-member-badge.png rename to www/client/static/common/assets/openstack-gold-member-badge.png diff --git a/client/static/common/assets/openstack-logo-powered.png b/www/client/static/common/assets/openstack-logo-powered.png similarity index 100% rename from client/static/common/assets/openstack-logo-powered.png rename to www/client/static/common/assets/openstack-logo-powered.png diff --git a/client/static/common/assets/openstack-logo-training.png b/www/client/static/common/assets/openstack-logo-training.png similarity index 100% rename from client/static/common/assets/openstack-logo-training.png rename to www/client/static/common/assets/openstack-logo-training.png diff --git a/client/static/common/assets/tongfangyouyun-logo-2018-1.ai b/www/client/static/common/assets/tongfangyouyun-logo-2018-1.ai similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-2018-1.ai rename to www/client/static/common/assets/tongfangyouyun-logo-2018-1.ai diff --git a/client/static/common/assets/tongfangyouyun-logo-2018-1.ai.zip b/www/client/static/common/assets/tongfangyouyun-logo-2018-1.ai.zip similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-2018-1.ai.zip rename to www/client/static/common/assets/tongfangyouyun-logo-2018-1.ai.zip diff --git a/client/static/common/assets/tongfangyouyun-logo-black-2018-1.ai b/www/client/static/common/assets/tongfangyouyun-logo-black-2018-1.ai similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-black-2018-1.ai rename to www/client/static/common/assets/tongfangyouyun-logo-black-2018-1.ai diff --git a/client/static/common/assets/tongfangyouyun-logo-black-2018-1.ai.zip b/www/client/static/common/assets/tongfangyouyun-logo-black-2018-1.ai.zip similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-black-2018-1.ai.zip rename to www/client/static/common/assets/tongfangyouyun-logo-black-2018-1.ai.zip diff --git a/client/static/common/assets/tongfangyouyun-logo-black-2018-1.png b/www/client/static/common/assets/tongfangyouyun-logo-black-2018-1.png similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-black-2018-1.png rename to www/client/static/common/assets/tongfangyouyun-logo-black-2018-1.png diff --git a/client/static/common/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg b/www/client/static/common/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg rename to www/client/static/common/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg diff --git a/client/static/common/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg.zip b/www/client/static/common/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg.zip similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg.zip rename to www/client/static/common/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg.zip diff --git a/client/static/common/assets/tongfangyouyun-logo-black-72dpi-2018-1.png b/www/client/static/common/assets/tongfangyouyun-logo-black-72dpi-2018-1.png similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-black-72dpi-2018-1.png rename to www/client/static/common/assets/tongfangyouyun-logo-black-72dpi-2018-1.png diff --git a/client/static/common/assets/tongfangyouyun-logo-black-72dpi-2018-1.png.zip b/www/client/static/common/assets/tongfangyouyun-logo-black-72dpi-2018-1.png.zip similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-black-72dpi-2018-1.png.zip rename to www/client/static/common/assets/tongfangyouyun-logo-black-72dpi-2018-1.png.zip diff --git a/client/static/common/assets/tongfangyouyun-logo-upanddown-2018-1.ai b/www/client/static/common/assets/tongfangyouyun-logo-upanddown-2018-1.ai similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-upanddown-2018-1.ai rename to www/client/static/common/assets/tongfangyouyun-logo-upanddown-2018-1.ai diff --git a/client/static/common/assets/tongfangyouyun-logo-upanddown-2018-1.ai.zip b/www/client/static/common/assets/tongfangyouyun-logo-upanddown-2018-1.ai.zip similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-upanddown-2018-1.ai.zip rename to www/client/static/common/assets/tongfangyouyun-logo-upanddown-2018-1.ai.zip diff --git a/client/static/common/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg b/www/client/static/common/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg rename to www/client/static/common/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg diff --git a/client/static/common/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg.zip b/www/client/static/common/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg.zip similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg.zip rename to www/client/static/common/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg.zip diff --git a/client/static/common/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png b/www/client/static/common/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png rename to www/client/static/common/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png diff --git a/client/static/common/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png.zip b/www/client/static/common/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png.zip similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png.zip rename to www/client/static/common/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png.zip diff --git a/client/static/common/assets/tongfangyouyun-logo300dpi-2018-1.jpg b/www/client/static/common/assets/tongfangyouyun-logo300dpi-2018-1.jpg similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo300dpi-2018-1.jpg rename to www/client/static/common/assets/tongfangyouyun-logo300dpi-2018-1.jpg diff --git a/client/static/common/assets/tongfangyouyun-logo300dpi-2018-1.jpg.zip b/www/client/static/common/assets/tongfangyouyun-logo300dpi-2018-1.jpg.zip similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo300dpi-2018-1.jpg.zip rename to www/client/static/common/assets/tongfangyouyun-logo300dpi-2018-1.jpg.zip diff --git a/client/static/common/assets/tongfangyouyun-logo72dpi-2018-1.jpg b/www/client/static/common/assets/tongfangyouyun-logo72dpi-2018-1.jpg similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo72dpi-2018-1.jpg rename to www/client/static/common/assets/tongfangyouyun-logo72dpi-2018-1.jpg diff --git a/client/static/common/assets/tongfangyouyun-logo72dpi-2018-1.jpg.zip b/www/client/static/common/assets/tongfangyouyun-logo72dpi-2018-1.jpg.zip similarity index 100% rename from client/static/common/assets/tongfangyouyun-logo72dpi-2018-1.jpg.zip rename to www/client/static/common/assets/tongfangyouyun-logo72dpi-2018-1.jpg.zip diff --git a/client/static/common/assets/touxiang.jpg b/www/client/static/common/assets/touxiang.jpg similarity index 100% rename from client/static/common/assets/touxiang.jpg rename to www/client/static/common/assets/touxiang.jpg diff --git a/client/static/common/assets/wechat.jpg b/www/client/static/common/assets/wechat.jpg similarity index 100% rename from client/static/common/assets/wechat.jpg rename to www/client/static/common/assets/wechat.jpg diff --git a/client/static/common/assets/weibo.png b/www/client/static/common/assets/weibo.png similarity index 100% rename from client/static/common/assets/weibo.png rename to www/client/static/common/assets/weibo.png diff --git a/client/static/common/assets/weixin.png b/www/client/static/common/assets/weixin.png similarity index 100% rename from client/static/common/assets/weixin.png rename to www/client/static/common/assets/weixin.png diff --git a/client/static/common/js/global.js b/www/client/static/common/js/global.js similarity index 100% rename from client/static/common/js/global.js rename to www/client/static/common/js/global.js diff --git a/client/static/common/js/modal/modal.js b/www/client/static/common/js/modal/modal.js similarity index 100% rename from client/static/common/js/modal/modal.js rename to www/client/static/common/js/modal/modal.js diff --git a/client/static/common/js/modal/style/index.less b/www/client/static/common/js/modal/style/index.less similarity index 100% rename from client/static/common/js/modal/style/index.less rename to www/client/static/common/js/modal/style/index.less diff --git a/client/static/common/js/pagination/index.js b/www/client/static/common/js/pagination/index.js similarity index 100% rename from client/static/common/js/pagination/index.js rename to www/client/static/common/js/pagination/index.js diff --git a/www/client/static/common/style/fonts/icons-hinted.ttf b/www/client/static/common/style/fonts/icons-hinted.ttf new file mode 100644 index 0000000..e69de29 diff --git a/client/static/common/style/fonts/icons.eot b/www/client/static/common/style/fonts/icons.eot similarity index 100% rename from client/static/common/style/fonts/icons.eot rename to www/client/static/common/style/fonts/icons.eot diff --git a/client/static/common/style/fonts/icons.svg b/www/client/static/common/style/fonts/icons.svg similarity index 100% rename from client/static/common/style/fonts/icons.svg rename to www/client/static/common/style/fonts/icons.svg diff --git a/client/static/common/style/fonts/icons.ttf b/www/client/static/common/style/fonts/icons.ttf similarity index 100% rename from client/static/common/style/fonts/icons.ttf rename to www/client/static/common/style/fonts/icons.ttf diff --git a/client/static/common/style/fonts/icons.woff b/www/client/static/common/style/fonts/icons.woff similarity index 100% rename from client/static/common/style/fonts/icons.woff rename to www/client/static/common/style/fonts/icons.woff diff --git a/client/static/common/style/icons.less b/www/client/static/common/style/icons.less similarity index 100% rename from client/static/common/style/icons.less rename to www/client/static/common/style/icons.less diff --git a/client/static/common/style/index.less b/www/client/static/common/style/index.less similarity index 100% rename from client/static/common/style/index.less rename to www/client/static/common/style/index.less diff --git a/client/static/iconfonts/html/icons.html b/www/client/static/iconfonts/html/icons.html similarity index 100% rename from client/static/iconfonts/html/icons.html rename to www/client/static/iconfonts/html/icons.html diff --git a/client/static/iconfonts/svgs/common/about-1.svg b/www/client/static/iconfonts/svgs/common/about-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/about-1.svg rename to www/client/static/iconfonts/svgs/common/about-1.svg diff --git a/client/static/iconfonts/svgs/common/about-2.svg b/www/client/static/iconfonts/svgs/common/about-2.svg similarity index 100% rename from client/static/iconfonts/svgs/common/about-2.svg rename to www/client/static/iconfonts/svgs/common/about-2.svg diff --git a/client/static/iconfonts/svgs/common/about-3.svg b/www/client/static/iconfonts/svgs/common/about-3.svg similarity index 100% rename from client/static/iconfonts/svgs/common/about-3.svg rename to www/client/static/iconfonts/svgs/common/about-3.svg diff --git a/client/static/iconfonts/svgs/common/about-4.svg b/www/client/static/iconfonts/svgs/common/about-4.svg similarity index 100% rename from client/static/iconfonts/svgs/common/about-4.svg rename to www/client/static/iconfonts/svgs/common/about-4.svg diff --git a/client/static/iconfonts/svgs/common/arrow-down.svg b/www/client/static/iconfonts/svgs/common/arrow-down.svg similarity index 100% rename from client/static/iconfonts/svgs/common/arrow-down.svg rename to www/client/static/iconfonts/svgs/common/arrow-down.svg diff --git a/client/static/iconfonts/svgs/common/arrow-left.svg b/www/client/static/iconfonts/svgs/common/arrow-left.svg similarity index 100% rename from client/static/iconfonts/svgs/common/arrow-left.svg rename to www/client/static/iconfonts/svgs/common/arrow-left.svg diff --git a/client/static/iconfonts/svgs/common/arrow-right.svg b/www/client/static/iconfonts/svgs/common/arrow-right.svg similarity index 100% rename from client/static/iconfonts/svgs/common/arrow-right.svg rename to www/client/static/iconfonts/svgs/common/arrow-right.svg diff --git a/client/static/iconfonts/svgs/common/arrow-up.svg b/www/client/static/iconfonts/svgs/common/arrow-up.svg similarity index 100% rename from client/static/iconfonts/svgs/common/arrow-up.svg rename to www/client/static/iconfonts/svgs/common/arrow-up.svg diff --git a/client/static/iconfonts/svgs/common/classify-1.svg b/www/client/static/iconfonts/svgs/common/classify-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/classify-1.svg rename to www/client/static/iconfonts/svgs/common/classify-1.svg diff --git a/client/static/iconfonts/svgs/common/classify-2.svg b/www/client/static/iconfonts/svgs/common/classify-2.svg similarity index 100% rename from client/static/iconfonts/svgs/common/classify-2.svg rename to www/client/static/iconfonts/svgs/common/classify-2.svg diff --git a/client/static/iconfonts/svgs/common/classify-3.svg b/www/client/static/iconfonts/svgs/common/classify-3.svg similarity index 100% rename from client/static/iconfonts/svgs/common/classify-3.svg rename to www/client/static/iconfonts/svgs/common/classify-3.svg diff --git a/client/static/iconfonts/svgs/common/classify-4.svg b/www/client/static/iconfonts/svgs/common/classify-4.svg similarity index 100% rename from client/static/iconfonts/svgs/common/classify-4.svg rename to www/client/static/iconfonts/svgs/common/classify-4.svg diff --git a/client/static/iconfonts/svgs/common/close.svg b/www/client/static/iconfonts/svgs/common/close.svg similarity index 100% rename from client/static/iconfonts/svgs/common/close.svg rename to www/client/static/iconfonts/svgs/common/close.svg diff --git a/client/static/iconfonts/svgs/common/cloud-1.svg b/www/client/static/iconfonts/svgs/common/cloud-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/cloud-1.svg rename to www/client/static/iconfonts/svgs/common/cloud-1.svg diff --git a/client/static/iconfonts/svgs/common/cloud-2.svg b/www/client/static/iconfonts/svgs/common/cloud-2.svg similarity index 100% rename from client/static/iconfonts/svgs/common/cloud-2.svg rename to www/client/static/iconfonts/svgs/common/cloud-2.svg diff --git a/client/static/iconfonts/svgs/common/cloud-3.svg b/www/client/static/iconfonts/svgs/common/cloud-3.svg similarity index 100% rename from client/static/iconfonts/svgs/common/cloud-3.svg rename to www/client/static/iconfonts/svgs/common/cloud-3.svg diff --git a/client/static/iconfonts/svgs/common/email.svg b/www/client/static/iconfonts/svgs/common/email.svg similarity index 100% rename from client/static/iconfonts/svgs/common/email.svg rename to www/client/static/iconfonts/svgs/common/email.svg diff --git a/client/static/iconfonts/svgs/common/enlarge.svg b/www/client/static/iconfonts/svgs/common/enlarge.svg similarity index 100% rename from client/static/iconfonts/svgs/common/enlarge.svg rename to www/client/static/iconfonts/svgs/common/enlarge.svg diff --git a/client/static/iconfonts/svgs/common/facebook.svg b/www/client/static/iconfonts/svgs/common/facebook.svg similarity index 100% rename from client/static/iconfonts/svgs/common/facebook.svg rename to www/client/static/iconfonts/svgs/common/facebook.svg diff --git a/client/static/iconfonts/svgs/common/global.svg b/www/client/static/iconfonts/svgs/common/global.svg similarity index 100% rename from client/static/iconfonts/svgs/common/global.svg rename to www/client/static/iconfonts/svgs/common/global.svg diff --git a/client/static/iconfonts/svgs/common/home-6-1.svg b/www/client/static/iconfonts/svgs/common/home-6-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/home-6-1.svg rename to www/client/static/iconfonts/svgs/common/home-6-1.svg diff --git a/client/static/iconfonts/svgs/common/home-6-2.svg b/www/client/static/iconfonts/svgs/common/home-6-2.svg similarity index 100% rename from client/static/iconfonts/svgs/common/home-6-2.svg rename to www/client/static/iconfonts/svgs/common/home-6-2.svg diff --git a/client/static/iconfonts/svgs/common/home-6-4.svg b/www/client/static/iconfonts/svgs/common/home-6-4.svg similarity index 100% rename from client/static/iconfonts/svgs/common/home-6-4.svg rename to www/client/static/iconfonts/svgs/common/home-6-4.svg diff --git a/client/static/iconfonts/svgs/common/home.svg b/www/client/static/iconfonts/svgs/common/home.svg similarity index 100% rename from client/static/iconfonts/svgs/common/home.svg rename to www/client/static/iconfonts/svgs/common/home.svg diff --git a/client/static/iconfonts/svgs/common/homepage-1.svg b/www/client/static/iconfonts/svgs/common/homepage-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/homepage-1.svg rename to www/client/static/iconfonts/svgs/common/homepage-1.svg diff --git a/client/static/iconfonts/svgs/common/homepage-6-1.svg b/www/client/static/iconfonts/svgs/common/homepage-6-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/homepage-6-1.svg rename to www/client/static/iconfonts/svgs/common/homepage-6-1.svg diff --git a/client/static/iconfonts/svgs/common/homepage-6-2.svg b/www/client/static/iconfonts/svgs/common/homepage-6-2.svg similarity index 100% rename from client/static/iconfonts/svgs/common/homepage-6-2.svg rename to www/client/static/iconfonts/svgs/common/homepage-6-2.svg diff --git a/client/static/iconfonts/svgs/common/homepage-6-3.svg b/www/client/static/iconfonts/svgs/common/homepage-6-3.svg similarity index 100% rename from client/static/iconfonts/svgs/common/homepage-6-3.svg rename to www/client/static/iconfonts/svgs/common/homepage-6-3.svg diff --git a/client/static/iconfonts/svgs/common/homepage-7-1.svg b/www/client/static/iconfonts/svgs/common/homepage-7-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/homepage-7-1.svg rename to www/client/static/iconfonts/svgs/common/homepage-7-1.svg diff --git a/client/static/iconfonts/svgs/common/homepage-7-2.svg b/www/client/static/iconfonts/svgs/common/homepage-7-2.svg similarity index 100% rename from client/static/iconfonts/svgs/common/homepage-7-2.svg rename to www/client/static/iconfonts/svgs/common/homepage-7-2.svg diff --git a/client/static/iconfonts/svgs/common/homepage-7-3.svg b/www/client/static/iconfonts/svgs/common/homepage-7-3.svg similarity index 100% rename from client/static/iconfonts/svgs/common/homepage-7-3.svg rename to www/client/static/iconfonts/svgs/common/homepage-7-3.svg diff --git a/client/static/iconfonts/svgs/common/homepage-7-4.svg b/www/client/static/iconfonts/svgs/common/homepage-7-4.svg similarity index 100% rename from client/static/iconfonts/svgs/common/homepage-7-4.svg rename to www/client/static/iconfonts/svgs/common/homepage-7-4.svg diff --git a/client/static/iconfonts/svgs/common/icon-profile-company.svg b/www/client/static/iconfonts/svgs/common/icon-profile-company.svg similarity index 100% rename from client/static/iconfonts/svgs/common/icon-profile-company.svg rename to www/client/static/iconfonts/svgs/common/icon-profile-company.svg diff --git a/client/static/iconfonts/svgs/common/icon-profile-email.svg b/www/client/static/iconfonts/svgs/common/icon-profile-email.svg similarity index 100% rename from client/static/iconfonts/svgs/common/icon-profile-email.svg rename to www/client/static/iconfonts/svgs/common/icon-profile-email.svg diff --git a/client/static/iconfonts/svgs/common/icon-profile-password.svg b/www/client/static/iconfonts/svgs/common/icon-profile-password.svg similarity index 100% rename from client/static/iconfonts/svgs/common/icon-profile-password.svg rename to www/client/static/iconfonts/svgs/common/icon-profile-password.svg diff --git a/client/static/iconfonts/svgs/common/icon-profile-phone.svg b/www/client/static/iconfonts/svgs/common/icon-profile-phone.svg similarity index 100% rename from client/static/iconfonts/svgs/common/icon-profile-phone.svg rename to www/client/static/iconfonts/svgs/common/icon-profile-phone.svg diff --git a/client/static/iconfonts/svgs/common/lang-EN.svg b/www/client/static/iconfonts/svgs/common/lang-EN.svg similarity index 100% rename from client/static/iconfonts/svgs/common/lang-EN.svg rename to www/client/static/iconfonts/svgs/common/lang-EN.svg diff --git a/client/static/iconfonts/svgs/common/lang-ZH.svg b/www/client/static/iconfonts/svgs/common/lang-ZH.svg similarity index 100% rename from client/static/iconfonts/svgs/common/lang-ZH.svg rename to www/client/static/iconfonts/svgs/common/lang-ZH.svg diff --git a/client/static/iconfonts/svgs/common/minus.svg b/www/client/static/iconfonts/svgs/common/minus.svg similarity index 100% rename from client/static/iconfonts/svgs/common/minus.svg rename to www/client/static/iconfonts/svgs/common/minus.svg diff --git a/client/static/iconfonts/svgs/common/partners-clients.svg b/www/client/static/iconfonts/svgs/common/partners-clients.svg similarity index 100% rename from client/static/iconfonts/svgs/common/partners-clients.svg rename to www/client/static/iconfonts/svgs/common/partners-clients.svg diff --git a/client/static/iconfonts/svgs/common/phone.svg b/www/client/static/iconfonts/svgs/common/phone.svg similarity index 100% rename from client/static/iconfonts/svgs/common/phone.svg rename to www/client/static/iconfonts/svgs/common/phone.svg diff --git a/client/static/iconfonts/svgs/common/play.svg b/www/client/static/iconfonts/svgs/common/play.svg similarity index 100% rename from client/static/iconfonts/svgs/common/play.svg rename to www/client/static/iconfonts/svgs/common/play.svg diff --git a/client/static/iconfonts/svgs/common/plus.svg b/www/client/static/iconfonts/svgs/common/plus.svg similarity index 100% rename from client/static/iconfonts/svgs/common/plus.svg rename to www/client/static/iconfonts/svgs/common/plus.svg diff --git a/client/static/iconfonts/svgs/common/private-service-1-1.svg b/www/client/static/iconfonts/svgs/common/private-service-1-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/private-service-1-1.svg rename to www/client/static/iconfonts/svgs/common/private-service-1-1.svg diff --git a/client/static/iconfonts/svgs/common/private-service-1-2.svg b/www/client/static/iconfonts/svgs/common/private-service-1-2.svg similarity index 100% rename from client/static/iconfonts/svgs/common/private-service-1-2.svg rename to www/client/static/iconfonts/svgs/common/private-service-1-2.svg diff --git a/client/static/iconfonts/svgs/common/private-service-1-3.svg b/www/client/static/iconfonts/svgs/common/private-service-1-3.svg similarity index 100% rename from client/static/iconfonts/svgs/common/private-service-1-3.svg rename to www/client/static/iconfonts/svgs/common/private-service-1-3.svg diff --git a/client/static/iconfonts/svgs/common/private-service-2-1.svg b/www/client/static/iconfonts/svgs/common/private-service-2-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/private-service-2-1.svg rename to www/client/static/iconfonts/svgs/common/private-service-2-1.svg diff --git a/client/static/iconfonts/svgs/common/private-service-2-2.svg b/www/client/static/iconfonts/svgs/common/private-service-2-2.svg similarity index 100% rename from client/static/iconfonts/svgs/common/private-service-2-2.svg rename to www/client/static/iconfonts/svgs/common/private-service-2-2.svg diff --git a/client/static/iconfonts/svgs/common/private-service-2-3.svg b/www/client/static/iconfonts/svgs/common/private-service-2-3.svg similarity index 100% rename from client/static/iconfonts/svgs/common/private-service-2-3.svg rename to www/client/static/iconfonts/svgs/common/private-service-2-3.svg diff --git a/client/static/iconfonts/svgs/common/private-service-3-1.svg b/www/client/static/iconfonts/svgs/common/private-service-3-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/private-service-3-1.svg rename to www/client/static/iconfonts/svgs/common/private-service-3-1.svg diff --git a/client/static/iconfonts/svgs/common/private-service-3-2.svg b/www/client/static/iconfonts/svgs/common/private-service-3-2.svg similarity index 100% rename from client/static/iconfonts/svgs/common/private-service-3-2.svg rename to www/client/static/iconfonts/svgs/common/private-service-3-2.svg diff --git a/client/static/iconfonts/svgs/common/private-service-3-3.svg b/www/client/static/iconfonts/svgs/common/private-service-3-3.svg similarity index 100% rename from client/static/iconfonts/svgs/common/private-service-3-3.svg rename to www/client/static/iconfonts/svgs/common/private-service-3-3.svg diff --git a/client/static/iconfonts/svgs/common/search.svg b/www/client/static/iconfonts/svgs/common/search.svg similarity index 100% rename from client/static/iconfonts/svgs/common/search.svg rename to www/client/static/iconfonts/svgs/common/search.svg diff --git a/client/static/iconfonts/svgs/common/service-center.svg b/www/client/static/iconfonts/svgs/common/service-center.svg similarity index 100% rename from client/static/iconfonts/svgs/common/service-center.svg rename to www/client/static/iconfonts/svgs/common/service-center.svg diff --git a/client/static/iconfonts/svgs/common/star.svg b/www/client/static/iconfonts/svgs/common/star.svg similarity index 100% rename from client/static/iconfonts/svgs/common/star.svg rename to www/client/static/iconfonts/svgs/common/star.svg diff --git a/client/static/iconfonts/svgs/common/triangle-1.svg b/www/client/static/iconfonts/svgs/common/triangle-1.svg similarity index 100% rename from client/static/iconfonts/svgs/common/triangle-1.svg rename to www/client/static/iconfonts/svgs/common/triangle-1.svg diff --git a/client/static/iconfonts/svgs/common/twitter.svg b/www/client/static/iconfonts/svgs/common/twitter.svg similarity index 100% rename from client/static/iconfonts/svgs/common/twitter.svg rename to www/client/static/iconfonts/svgs/common/twitter.svg diff --git a/client/static/iconfonts/svgs/common/wechat.svg b/www/client/static/iconfonts/svgs/common/wechat.svg similarity index 100% rename from client/static/iconfonts/svgs/common/wechat.svg rename to www/client/static/iconfonts/svgs/common/wechat.svg diff --git a/client/static/iconfonts/svgs/common/weibo.svg b/www/client/static/iconfonts/svgs/common/weibo.svg similarity index 100% rename from client/static/iconfonts/svgs/common/weibo.svg rename to www/client/static/iconfonts/svgs/common/weibo.svg diff --git a/client/static/iconfonts/svgs/login/eye.svg b/www/client/static/iconfonts/svgs/login/eye.svg similarity index 100% rename from client/static/iconfonts/svgs/login/eye.svg rename to www/client/static/iconfonts/svgs/login/eye.svg diff --git a/client/static/iconfonts/svgs/services/VDCnetwork/network-1.svg b/www/client/static/iconfonts/svgs/services/VDCnetwork/network-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/VDCnetwork/network-1.svg rename to www/client/static/iconfonts/svgs/services/VDCnetwork/network-1.svg diff --git a/client/static/iconfonts/svgs/services/VDCnetwork/network-2.svg b/www/client/static/iconfonts/svgs/services/VDCnetwork/network-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/VDCnetwork/network-2.svg rename to www/client/static/iconfonts/svgs/services/VDCnetwork/network-2.svg diff --git a/client/static/iconfonts/svgs/services/VDCnetwork/network-3.svg b/www/client/static/iconfonts/svgs/services/VDCnetwork/network-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/VDCnetwork/network-3.svg rename to www/client/static/iconfonts/svgs/services/VDCnetwork/network-3.svg diff --git a/client/static/iconfonts/svgs/services/VDCnetwork/network-4.svg b/www/client/static/iconfonts/svgs/services/VDCnetwork/network-4.svg similarity index 100% rename from client/static/iconfonts/svgs/services/VDCnetwork/network-4.svg rename to www/client/static/iconfonts/svgs/services/VDCnetwork/network-4.svg diff --git a/client/static/iconfonts/svgs/services/VDCnetwork/network-5.svg b/www/client/static/iconfonts/svgs/services/VDCnetwork/network-5.svg similarity index 100% rename from client/static/iconfonts/svgs/services/VDCnetwork/network-5.svg rename to www/client/static/iconfonts/svgs/services/VDCnetwork/network-5.svg diff --git a/client/static/iconfonts/svgs/services/VDCnetwork/network-6.svg b/www/client/static/iconfonts/svgs/services/VDCnetwork/network-6.svg similarity index 100% rename from client/static/iconfonts/svgs/services/VDCnetwork/network-6.svg rename to www/client/static/iconfonts/svgs/services/VDCnetwork/network-6.svg diff --git a/client/static/iconfonts/svgs/services/alarm/alarm-1.svg b/www/client/static/iconfonts/svgs/services/alarm/alarm-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/alarm/alarm-1.svg rename to www/client/static/iconfonts/svgs/services/alarm/alarm-1.svg diff --git a/client/static/iconfonts/svgs/services/alarm/alarm-2.svg b/www/client/static/iconfonts/svgs/services/alarm/alarm-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/alarm/alarm-2.svg rename to www/client/static/iconfonts/svgs/services/alarm/alarm-2.svg diff --git a/client/static/iconfonts/svgs/services/alarm/alarm-3.svg b/www/client/static/iconfonts/svgs/services/alarm/alarm-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/alarm/alarm-3.svg rename to www/client/static/iconfonts/svgs/services/alarm/alarm-3.svg diff --git a/client/static/iconfonts/svgs/services/alarm/alarm-4.svg b/www/client/static/iconfonts/svgs/services/alarm/alarm-4.svg similarity index 100% rename from client/static/iconfonts/svgs/services/alarm/alarm-4.svg rename to www/client/static/iconfonts/svgs/services/alarm/alarm-4.svg diff --git a/client/static/iconfonts/svgs/services/alarm/alarm-5.svg b/www/client/static/iconfonts/svgs/services/alarm/alarm-5.svg similarity index 100% rename from client/static/iconfonts/svgs/services/alarm/alarm-5.svg rename to www/client/static/iconfonts/svgs/services/alarm/alarm-5.svg diff --git a/client/static/iconfonts/svgs/services/alarm/alarm-6.svg b/www/client/static/iconfonts/svgs/services/alarm/alarm-6.svg similarity index 100% rename from client/static/iconfonts/svgs/services/alarm/alarm-6.svg rename to www/client/static/iconfonts/svgs/services/alarm/alarm-6.svg diff --git a/client/static/iconfonts/svgs/services/api/api-1.svg b/www/client/static/iconfonts/svgs/services/api/api-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/api/api-1.svg rename to www/client/static/iconfonts/svgs/services/api/api-1.svg diff --git a/client/static/iconfonts/svgs/services/api/api-2.svg b/www/client/static/iconfonts/svgs/services/api/api-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/api/api-2.svg rename to www/client/static/iconfonts/svgs/services/api/api-2.svg diff --git a/client/static/iconfonts/svgs/services/api/api-3.svg b/www/client/static/iconfonts/svgs/services/api/api-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/api/api-3.svg rename to www/client/static/iconfonts/svgs/services/api/api-3.svg diff --git a/client/static/iconfonts/svgs/services/api/api-4.svg b/www/client/static/iconfonts/svgs/services/api/api-4.svg similarity index 100% rename from client/static/iconfonts/svgs/services/api/api-4.svg rename to www/client/static/iconfonts/svgs/services/api/api-4.svg diff --git a/client/static/iconfonts/svgs/services/api/api-5.svg b/www/client/static/iconfonts/svgs/services/api/api-5.svg similarity index 100% rename from client/static/iconfonts/svgs/services/api/api-5.svg rename to www/client/static/iconfonts/svgs/services/api/api-5.svg diff --git a/client/static/iconfonts/svgs/services/api/api-6.svg b/www/client/static/iconfonts/svgs/services/api/api-6.svg similarity index 100% rename from client/static/iconfonts/svgs/services/api/api-6.svg rename to www/client/static/iconfonts/svgs/services/api/api-6.svg diff --git a/client/static/iconfonts/svgs/services/database/database-1.svg b/www/client/static/iconfonts/svgs/services/database/database-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/database/database-1.svg rename to www/client/static/iconfonts/svgs/services/database/database-1.svg diff --git a/client/static/iconfonts/svgs/services/database/database-2.svg b/www/client/static/iconfonts/svgs/services/database/database-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/database/database-2.svg rename to www/client/static/iconfonts/svgs/services/database/database-2.svg diff --git a/client/static/iconfonts/svgs/services/database/database-3.svg b/www/client/static/iconfonts/svgs/services/database/database-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/database/database-3.svg rename to www/client/static/iconfonts/svgs/services/database/database-3.svg diff --git a/client/static/iconfonts/svgs/services/filesharing/share-1.svg b/www/client/static/iconfonts/svgs/services/filesharing/share-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/filesharing/share-1.svg rename to www/client/static/iconfonts/svgs/services/filesharing/share-1.svg diff --git a/client/static/iconfonts/svgs/services/filesharing/share-2.svg b/www/client/static/iconfonts/svgs/services/filesharing/share-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/filesharing/share-2.svg rename to www/client/static/iconfonts/svgs/services/filesharing/share-2.svg diff --git a/client/static/iconfonts/svgs/services/filesharing/share-3.svg b/www/client/static/iconfonts/svgs/services/filesharing/share-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/filesharing/share-3.svg rename to www/client/static/iconfonts/svgs/services/filesharing/share-3.svg diff --git a/client/static/iconfonts/svgs/services/filesharing/share-4.svg b/www/client/static/iconfonts/svgs/services/filesharing/share-4.svg similarity index 100% rename from client/static/iconfonts/svgs/services/filesharing/share-4.svg rename to www/client/static/iconfonts/svgs/services/filesharing/share-4.svg diff --git a/client/static/iconfonts/svgs/services/filesharing/share-5.svg b/www/client/static/iconfonts/svgs/services/filesharing/share-5.svg similarity index 100% rename from client/static/iconfonts/svgs/services/filesharing/share-5.svg rename to www/client/static/iconfonts/svgs/services/filesharing/share-5.svg diff --git a/client/static/iconfonts/svgs/services/filesharing/share-6.svg b/www/client/static/iconfonts/svgs/services/filesharing/share-6.svg similarity index 100% rename from client/static/iconfonts/svgs/services/filesharing/share-6.svg rename to www/client/static/iconfonts/svgs/services/filesharing/share-6.svg diff --git a/client/static/iconfonts/svgs/services/instance/instance-1.svg b/www/client/static/iconfonts/svgs/services/instance/instance-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/instance/instance-1.svg rename to www/client/static/iconfonts/svgs/services/instance/instance-1.svg diff --git a/client/static/iconfonts/svgs/services/instance/instance-2.svg b/www/client/static/iconfonts/svgs/services/instance/instance-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/instance/instance-2.svg rename to www/client/static/iconfonts/svgs/services/instance/instance-2.svg diff --git a/client/static/iconfonts/svgs/services/instance/instance-3.svg b/www/client/static/iconfonts/svgs/services/instance/instance-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/instance/instance-3.svg rename to www/client/static/iconfonts/svgs/services/instance/instance-3.svg diff --git a/client/static/iconfonts/svgs/services/instance/instance-4.svg b/www/client/static/iconfonts/svgs/services/instance/instance-4.svg similarity index 100% rename from client/static/iconfonts/svgs/services/instance/instance-4.svg rename to www/client/static/iconfonts/svgs/services/instance/instance-4.svg diff --git a/client/static/iconfonts/svgs/services/instance/instance-5.svg b/www/client/static/iconfonts/svgs/services/instance/instance-5.svg similarity index 100% rename from client/static/iconfonts/svgs/services/instance/instance-5.svg rename to www/client/static/iconfonts/svgs/services/instance/instance-5.svg diff --git a/client/static/iconfonts/svgs/services/instance/instance-6.svg b/www/client/static/iconfonts/svgs/services/instance/instance-6.svg similarity index 100% rename from client/static/iconfonts/svgs/services/instance/instance-6.svg rename to www/client/static/iconfonts/svgs/services/instance/instance-6.svg diff --git a/client/static/iconfonts/svgs/services/loadbalance/loadbalance-1.svg b/www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/loadbalance/loadbalance-1.svg rename to www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-1.svg diff --git a/client/static/iconfonts/svgs/services/loadbalance/loadbalance-2.svg b/www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/loadbalance/loadbalance-2.svg rename to www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-2.svg diff --git a/client/static/iconfonts/svgs/services/loadbalance/loadbalance-3.svg b/www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/loadbalance/loadbalance-3.svg rename to www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-3.svg diff --git a/client/static/iconfonts/svgs/services/loadbalance/loadbalance-4.svg b/www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-4.svg similarity index 100% rename from client/static/iconfonts/svgs/services/loadbalance/loadbalance-4.svg rename to www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-4.svg diff --git a/client/static/iconfonts/svgs/services/loadbalance/loadbalance-5.svg b/www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-5.svg similarity index 100% rename from client/static/iconfonts/svgs/services/loadbalance/loadbalance-5.svg rename to www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-5.svg diff --git a/client/static/iconfonts/svgs/services/loadbalance/loadbalance-6.svg b/www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-6.svg similarity index 100% rename from client/static/iconfonts/svgs/services/loadbalance/loadbalance-6.svg rename to www/client/static/iconfonts/svgs/services/loadbalance/loadbalance-6.svg diff --git a/client/static/iconfonts/svgs/services/object-storage/object-storage-1.svg b/www/client/static/iconfonts/svgs/services/object-storage/object-storage-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/object-storage/object-storage-1.svg rename to www/client/static/iconfonts/svgs/services/object-storage/object-storage-1.svg diff --git a/client/static/iconfonts/svgs/services/object-storage/object-storage-2.svg b/www/client/static/iconfonts/svgs/services/object-storage/object-storage-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/object-storage/object-storage-2.svg rename to www/client/static/iconfonts/svgs/services/object-storage/object-storage-2.svg diff --git a/client/static/iconfonts/svgs/services/object-storage/object-storage-3.svg b/www/client/static/iconfonts/svgs/services/object-storage/object-storage-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/object-storage/object-storage-3.svg rename to www/client/static/iconfonts/svgs/services/object-storage/object-storage-3.svg diff --git a/client/static/iconfonts/svgs/services/subaccount/subaccount-1.svg b/www/client/static/iconfonts/svgs/services/subaccount/subaccount-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/subaccount/subaccount-1.svg rename to www/client/static/iconfonts/svgs/services/subaccount/subaccount-1.svg diff --git a/client/static/iconfonts/svgs/services/subaccount/subaccount-2.svg b/www/client/static/iconfonts/svgs/services/subaccount/subaccount-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/subaccount/subaccount-2.svg rename to www/client/static/iconfonts/svgs/services/subaccount/subaccount-2.svg diff --git a/client/static/iconfonts/svgs/services/subaccount/subaccount-3.svg b/www/client/static/iconfonts/svgs/services/subaccount/subaccount-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/subaccount/subaccount-3.svg rename to www/client/static/iconfonts/svgs/services/subaccount/subaccount-3.svg diff --git a/client/static/iconfonts/svgs/services/subaccount/subaccount-4.svg b/www/client/static/iconfonts/svgs/services/subaccount/subaccount-4.svg similarity index 100% rename from client/static/iconfonts/svgs/services/subaccount/subaccount-4.svg rename to www/client/static/iconfonts/svgs/services/subaccount/subaccount-4.svg diff --git a/client/static/iconfonts/svgs/services/subaccount/subaccount-5.svg b/www/client/static/iconfonts/svgs/services/subaccount/subaccount-5.svg similarity index 100% rename from client/static/iconfonts/svgs/services/subaccount/subaccount-5.svg rename to www/client/static/iconfonts/svgs/services/subaccount/subaccount-5.svg diff --git a/client/static/iconfonts/svgs/services/subaccount/subaccount-6.svg b/www/client/static/iconfonts/svgs/services/subaccount/subaccount-6.svg similarity index 100% rename from client/static/iconfonts/svgs/services/subaccount/subaccount-6.svg rename to www/client/static/iconfonts/svgs/services/subaccount/subaccount-6.svg diff --git a/client/static/iconfonts/svgs/services/volume/volume-1.svg b/www/client/static/iconfonts/svgs/services/volume/volume-1.svg similarity index 100% rename from client/static/iconfonts/svgs/services/volume/volume-1.svg rename to www/client/static/iconfonts/svgs/services/volume/volume-1.svg diff --git a/client/static/iconfonts/svgs/services/volume/volume-2.svg b/www/client/static/iconfonts/svgs/services/volume/volume-2.svg similarity index 100% rename from client/static/iconfonts/svgs/services/volume/volume-2.svg rename to www/client/static/iconfonts/svgs/services/volume/volume-2.svg diff --git a/client/static/iconfonts/svgs/services/volume/volume-3.svg b/www/client/static/iconfonts/svgs/services/volume/volume-3.svg similarity index 100% rename from client/static/iconfonts/svgs/services/volume/volume-3.svg rename to www/client/static/iconfonts/svgs/services/volume/volume-3.svg diff --git a/client/static/iconfonts/svgs/services/volume/volume-4.svg b/www/client/static/iconfonts/svgs/services/volume/volume-4.svg similarity index 100% rename from client/static/iconfonts/svgs/services/volume/volume-4.svg rename to www/client/static/iconfonts/svgs/services/volume/volume-4.svg diff --git a/client/static/iconfonts/svgs/services/volume/volume-5.svg b/www/client/static/iconfonts/svgs/services/volume/volume-5.svg similarity index 100% rename from client/static/iconfonts/svgs/services/volume/volume-5.svg rename to www/client/static/iconfonts/svgs/services/volume/volume-5.svg diff --git a/client/static/iconfonts/svgs/services/volume/volume-6.svg b/www/client/static/iconfonts/svgs/services/volume/volume-6.svg similarity index 100% rename from client/static/iconfonts/svgs/services/volume/volume-6.svg rename to www/client/static/iconfonts/svgs/services/volume/volume-6.svg diff --git a/client/static/iconfonts/svgs/services/volume/volume-7.svg b/www/client/static/iconfonts/svgs/services/volume/volume-7.svg similarity index 100% rename from client/static/iconfonts/svgs/services/volume/volume-7.svg rename to www/client/static/iconfonts/svgs/services/volume/volume-7.svg diff --git a/client/static/iconfonts/svgs/services/volume/volume-8.svg b/www/client/static/iconfonts/svgs/services/volume/volume-8.svg similarity index 100% rename from client/static/iconfonts/svgs/services/volume/volume-8.svg rename to www/client/static/iconfonts/svgs/services/volume/volume-8.svg diff --git a/client/static/template/color.tpl b/www/client/static/template/color.tpl similarity index 100% rename from client/static/template/color.tpl rename to www/client/static/template/color.tpl diff --git a/client/static/theme/banner.less b/www/client/static/theme/banner.less similarity index 100% rename from client/static/theme/banner.less rename to www/client/static/theme/banner.less diff --git a/client/static/theme/custom.less b/www/client/static/theme/custom.less similarity index 100% rename from client/static/theme/custom.less rename to www/client/static/theme/custom.less diff --git a/client/static/theme/default/index.html b/www/client/static/theme/default/index.html similarity index 100% rename from client/static/theme/default/index.html rename to www/client/static/theme/default/index.html diff --git a/client/static/theme/default/index.less b/www/client/static/theme/default/index.less similarity index 100% rename from client/static/theme/default/index.less rename to www/client/static/theme/default/index.less diff --git a/client/static/theme/index.less b/www/client/static/theme/index.less similarity index 100% rename from client/static/theme/index.less rename to www/client/static/theme/index.less diff --git a/client/static/third-party/jquery-3.2.1.min.js b/www/client/static/third-party/jquery-3.2.1.min.js similarity index 100% rename from client/static/third-party/jquery-3.2.1.min.js rename to www/client/static/third-party/jquery-3.2.1.min.js diff --git a/client/static/third-party/jquery-3.2.1.min.js.gz b/www/client/static/third-party/jquery-3.2.1.min.js.gz similarity index 100% rename from client/static/third-party/jquery-3.2.1.min.js.gz rename to www/client/static/third-party/jquery-3.2.1.min.js.gz diff --git a/client/static/third-party/normalize.css b/www/client/static/third-party/normalize.css similarity index 100% rename from client/static/third-party/normalize.css rename to www/client/static/third-party/normalize.css diff --git a/client/static/third-party/reset.css b/www/client/static/third-party/reset.css similarity index 100% rename from client/static/third-party/reset.css rename to www/client/static/third-party/reset.css diff --git a/client/views/404-views/assets/bannerpic@v2.0.png b/www/client/views/404-views/assets/bannerpic@v2.0.png similarity index 100% rename from client/views/404-views/assets/bannerpic@v2.0.png rename to www/client/views/404-views/assets/bannerpic@v2.0.png diff --git a/client/views/404-views/index.ejs b/www/client/views/404-views/index.ejs similarity index 100% rename from client/views/404-views/index.ejs rename to www/client/views/404-views/index.ejs diff --git a/client/views/404-views/index.js b/www/client/views/404-views/index.js similarity index 100% rename from client/views/404-views/index.js rename to www/client/views/404-views/index.js diff --git a/client/views/404-views/lang.json b/www/client/views/404-views/lang.json similarity index 100% rename from client/views/404-views/lang.json rename to www/client/views/404-views/lang.json diff --git a/client/views/404-views/style/index.less b/www/client/views/404-views/style/index.less similarity index 100% rename from client/views/404-views/style/index.less rename to www/client/views/404-views/style/index.less diff --git a/client/views/blog-views/detail/assets/bannerpic@v2.0.png b/www/client/views/blog-views/detail/assets/bannerpic@v2.0.png similarity index 100% rename from client/views/blog-views/detail/assets/bannerpic@v2.0.png rename to www/client/views/blog-views/detail/assets/bannerpic@v2.0.png diff --git a/client/views/blog-views/detail/index.ejs b/www/client/views/blog-views/detail/index.ejs similarity index 100% rename from client/views/blog-views/detail/index.ejs rename to www/client/views/blog-views/detail/index.ejs diff --git a/client/views/blog-views/detail/index.js b/www/client/views/blog-views/detail/index.js similarity index 100% rename from client/views/blog-views/detail/index.js rename to www/client/views/blog-views/detail/index.js diff --git a/client/views/blog-views/detail/lang.json b/www/client/views/blog-views/detail/lang.json similarity index 100% rename from client/views/blog-views/detail/lang.json rename to www/client/views/blog-views/detail/lang.json diff --git a/client/views/blog-views/detail/style/index.less b/www/client/views/blog-views/detail/style/index.less similarity index 100% rename from client/views/blog-views/detail/style/index.less rename to www/client/views/blog-views/detail/style/index.less diff --git a/client/views/blog-views/list/assets/bannerpic@v2.0.png b/www/client/views/blog-views/list/assets/bannerpic@v2.0.png similarity index 100% rename from client/views/blog-views/list/assets/bannerpic@v2.0.png rename to www/client/views/blog-views/list/assets/bannerpic@v2.0.png diff --git a/client/views/blog-views/list/assets/default.png b/www/client/views/blog-views/list/assets/default.png similarity index 100% rename from client/views/blog-views/list/assets/default.png rename to www/client/views/blog-views/list/assets/default.png diff --git a/client/views/blog-views/list/assets/holder.png b/www/client/views/blog-views/list/assets/holder.png similarity index 100% rename from client/views/blog-views/list/assets/holder.png rename to www/client/views/blog-views/list/assets/holder.png diff --git a/client/views/blog-views/list/index.ejs b/www/client/views/blog-views/list/index.ejs similarity index 100% rename from client/views/blog-views/list/index.ejs rename to www/client/views/blog-views/list/index.ejs diff --git a/client/views/blog-views/list/index.js b/www/client/views/blog-views/list/index.js similarity index 100% rename from client/views/blog-views/list/index.js rename to www/client/views/blog-views/list/index.js diff --git a/client/views/blog-views/list/lang.json b/www/client/views/blog-views/list/lang.json similarity index 100% rename from client/views/blog-views/list/lang.json rename to www/client/views/blog-views/list/lang.json diff --git a/client/views/blog-views/list/style/index.less b/www/client/views/blog-views/list/style/index.less similarity index 100% rename from client/views/blog-views/list/style/index.less rename to www/client/views/blog-views/list/style/index.less diff --git a/client/views/home-views/assets/1.png b/www/client/views/home-views/assets/1.png similarity index 100% rename from client/views/home-views/assets/1.png rename to www/client/views/home-views/assets/1.png diff --git a/client/views/home-views/assets/2.png b/www/client/views/home-views/assets/2.png similarity index 100% rename from client/views/home-views/assets/2.png rename to www/client/views/home-views/assets/2.png diff --git a/client/views/home-views/assets/3.png b/www/client/views/home-views/assets/3.png similarity index 100% rename from client/views/home-views/assets/3.png rename to www/client/views/home-views/assets/3.png diff --git a/client/views/home-views/assets/arch-hover.png b/www/client/views/home-views/assets/arch-hover.png similarity index 100% rename from client/views/home-views/assets/arch-hover.png rename to www/client/views/home-views/assets/arch-hover.png diff --git a/client/views/home-views/assets/arch.png b/www/client/views/home-views/assets/arch.png similarity index 100% rename from client/views/home-views/assets/arch.png rename to www/client/views/home-views/assets/arch.png diff --git a/client/views/home-views/assets/architecture-bg-v1.1.png b/www/client/views/home-views/assets/architecture-bg-v1.1.png similarity index 100% rename from client/views/home-views/assets/architecture-bg-v1.1.png rename to www/client/views/home-views/assets/architecture-bg-v1.1.png diff --git a/client/views/home-views/assets/com.png b/www/client/views/home-views/assets/com.png similarity index 100% rename from client/views/home-views/assets/com.png rename to www/client/views/home-views/assets/com.png diff --git a/client/views/home-views/assets/cu1.png b/www/client/views/home-views/assets/cu1.png similarity index 100% rename from client/views/home-views/assets/cu1.png rename to www/client/views/home-views/assets/cu1.png diff --git a/client/views/home-views/assets/cu10.png b/www/client/views/home-views/assets/cu10.png similarity index 100% rename from client/views/home-views/assets/cu10.png rename to www/client/views/home-views/assets/cu10.png diff --git a/client/views/home-views/assets/cu2.png b/www/client/views/home-views/assets/cu2.png similarity index 100% rename from client/views/home-views/assets/cu2.png rename to www/client/views/home-views/assets/cu2.png diff --git a/client/views/home-views/assets/cu3.png b/www/client/views/home-views/assets/cu3.png similarity index 100% rename from client/views/home-views/assets/cu3.png rename to www/client/views/home-views/assets/cu3.png diff --git a/client/views/home-views/assets/cu4.png b/www/client/views/home-views/assets/cu4.png similarity index 100% rename from client/views/home-views/assets/cu4.png rename to www/client/views/home-views/assets/cu4.png diff --git a/client/views/home-views/assets/cu5.png b/www/client/views/home-views/assets/cu5.png similarity index 100% rename from client/views/home-views/assets/cu5.png rename to www/client/views/home-views/assets/cu5.png diff --git a/client/views/home-views/assets/cu6.png b/www/client/views/home-views/assets/cu6.png similarity index 100% rename from client/views/home-views/assets/cu6.png rename to www/client/views/home-views/assets/cu6.png diff --git a/client/views/home-views/assets/cu7.png b/www/client/views/home-views/assets/cu7.png similarity index 100% rename from client/views/home-views/assets/cu7.png rename to www/client/views/home-views/assets/cu7.png diff --git a/client/views/home-views/assets/cu8.png b/www/client/views/home-views/assets/cu8.png similarity index 100% rename from client/views/home-views/assets/cu8.png rename to www/client/views/home-views/assets/cu8.png diff --git a/client/views/home-views/assets/cu9.png b/www/client/views/home-views/assets/cu9.png similarity index 100% rename from client/views/home-views/assets/cu9.png rename to www/client/views/home-views/assets/cu9.png diff --git a/client/views/home-views/assets/edu.png b/www/client/views/home-views/assets/edu.png similarity index 100% rename from client/views/home-views/assets/edu.png rename to www/client/views/home-views/assets/edu.png diff --git a/client/views/home-views/assets/feature-bg.jpg b/www/client/views/home-views/assets/feature-bg.jpg similarity index 100% rename from client/views/home-views/assets/feature-bg.jpg rename to www/client/views/home-views/assets/feature-bg.jpg diff --git a/client/views/home-views/assets/fin.png b/www/client/views/home-views/assets/fin.png similarity index 100% rename from client/views/home-views/assets/fin.png rename to www/client/views/home-views/assets/fin.png diff --git a/client/views/home-views/assets/first-banner-bg.jpg b/www/client/views/home-views/assets/first-banner-bg.jpg similarity index 100% rename from client/views/home-views/assets/first-banner-bg.jpg rename to www/client/views/home-views/assets/first-banner-bg.jpg diff --git a/client/views/home-views/assets/gov.png b/www/client/views/home-views/assets/gov.png similarity index 100% rename from client/views/home-views/assets/gov.png rename to www/client/views/home-views/assets/gov.png diff --git a/client/views/home-views/assets/qu1.png b/www/client/views/home-views/assets/qu1.png similarity index 100% rename from client/views/home-views/assets/qu1.png rename to www/client/views/home-views/assets/qu1.png diff --git a/www/client/views/home-views/assets/qu1@v2.0.png b/www/client/views/home-views/assets/qu1@v2.0.png new file mode 100644 index 0000000..53c7783 Binary files /dev/null and b/www/client/views/home-views/assets/qu1@v2.0.png differ diff --git a/client/views/home-views/assets/qu2.png b/www/client/views/home-views/assets/qu2.png similarity index 100% rename from client/views/home-views/assets/qu2.png rename to www/client/views/home-views/assets/qu2.png diff --git a/client/views/home-views/assets/qu3.png b/www/client/views/home-views/assets/qu3.png similarity index 100% rename from client/views/home-views/assets/qu3.png rename to www/client/views/home-views/assets/qu3.png diff --git a/client/views/home-views/assets/qu4.png b/www/client/views/home-views/assets/qu4.png similarity index 100% rename from client/views/home-views/assets/qu4.png rename to www/client/views/home-views/assets/qu4.png diff --git a/client/views/home-views/assets/refer-bg-move1.png b/www/client/views/home-views/assets/refer-bg-move1.png similarity index 100% rename from client/views/home-views/assets/refer-bg-move1.png rename to www/client/views/home-views/assets/refer-bg-move1.png diff --git a/client/views/home-views/assets/refer-bg-move2.png b/www/client/views/home-views/assets/refer-bg-move2.png similarity index 100% rename from client/views/home-views/assets/refer-bg-move2.png rename to www/client/views/home-views/assets/refer-bg-move2.png diff --git a/client/views/home-views/assets/refer-bg-move3.png b/www/client/views/home-views/assets/refer-bg-move3.png similarity index 100% rename from client/views/home-views/assets/refer-bg-move3.png rename to www/client/views/home-views/assets/refer-bg-move3.png diff --git a/client/views/home-views/assets/refer-bg.jpg b/www/client/views/home-views/assets/refer-bg.jpg similarity index 100% rename from client/views/home-views/assets/refer-bg.jpg rename to www/client/views/home-views/assets/refer-bg.jpg diff --git a/client/views/home-views/assets/right.png b/www/client/views/home-views/assets/right.png similarity index 100% rename from client/views/home-views/assets/right.png rename to www/client/views/home-views/assets/right.png diff --git a/client/views/home-views/assets/second-banner-bg.jpg b/www/client/views/home-views/assets/second-banner-bg.jpg similarity index 100% rename from client/views/home-views/assets/second-banner-bg.jpg rename to www/client/views/home-views/assets/second-banner-bg.jpg diff --git a/client/views/home-views/assets/third-banner-bg.jpg b/www/client/views/home-views/assets/third-banner-bg.jpg similarity index 100% rename from client/views/home-views/assets/third-banner-bg.jpg rename to www/client/views/home-views/assets/third-banner-bg.jpg diff --git a/client/views/home-views/index.ejs b/www/client/views/home-views/index.ejs similarity index 95% rename from client/views/home-views/index.ejs rename to www/client/views/home-views/index.ejs index 257fafd..9a66356 100644 --- a/client/views/home-views/index.ejs +++ b/www/client/views/home-views/index.ejs @@ -401,7 +401,7 @@
  • - +

    可信云资格认证

  • @@ -491,38 +491,4 @@
-
-
-
-
-
    -
  • -
  • -
  • -
  • -
  • -
-
-
-
-
-
- -
- -
<%- include('../../components/footer.ejs') %> \ No newline at end of file diff --git a/client/views/home-views/index.js b/www/client/views/home-views/index.js similarity index 91% rename from client/views/home-views/index.js rename to www/client/views/home-views/index.js index 35f4cfd..73b8599 100644 --- a/client/views/home-views/index.js +++ b/www/client/views/home-views/index.js @@ -2,76 +2,26 @@ require('./style/index.less'); var srcBase = '/static/assets/home-views/'; var imageSrc = [ - 'first-banner-bg.jpg', - 'second-banner-bg.jpg', - 'third-banner-bg.jpg', - 'architecture-bg-v1.1.png', - 'arch-hover.png', - 'arch.png', - 'feature-bg.jpg', - 'com.png', - 'edu.png', - 'fin.png', - 'gov.png', - 'refer-bg.jpg', - 'refer-bg-move1.png', - 'refer-bg-move2.png', - 'refer-bg-move3.png' + 'first-banner-bg.jpg' ]; function preloadImages(srcBase, imageSrc) { - document.body.style.overflow = 'hidden'; - var total = imageSrc.length; - var loaded = 0; - var progress = 0; - var step = Math.floor(100 / total); - imageSrc.map(function(item) { return srcBase + item; }).forEach(function(item) { var image = new Image(); image.onload = function() { - loaded ++; - progress += step; - if(loaded === total) { - progress = 100; - updateProgressBar(progress); - hideMask(); - } else { - updateProgressBar(progress); - } + document.body.style.display = 'block'; }; image.src = item; }); } -function updateProgressBar(progress) { - var $progressBar = $('#preload-mask .progress-bar'); - var $content = $('#preload-mask .content'); - var isMobile = $(window).width() <= 1024 ? true : false; - var width = getWidth(isMobile); - $progressBar.width(progress * width / 100); - $content.text(progress + '%'); -} - -function getWidth(isMobile) { - var width = isMobile ? ($('#preload-mask .banner-content-wrapper').width() * 0.78) : 550; - return width; -} - -function hideMask() { - document.body.style.overflow = 'auto'; - var mask = document.getElementById('preload-mask'); - if(mask) { - $(mask).addClass('fading-preload-mask'); - setTimeout(function() { - document.body.removeChild(mask); - }, 750); - } -} - preloadImages(srcBase, imageSrc); -setTimeout(hideMask, 10000); + +setTimeout(function () { + document.body.style.display = 'block'; +}, 1000); $(function() { @@ -98,7 +48,7 @@ $(function() { } }); - $(window).on('resize', resizeHandler); + /* $(window).on('resize', resizeHandler); */ $(window).on('scroll', scrollHandler); $ctrlPoints.on('click', pointClickHandler); $bannerContentWrapper.on('mouseenter', bannerHover); @@ -106,14 +56,10 @@ $(function() { $('.flash-fix').hide(); - setBannerSize(); + /* setBannerSize();*/ autoPlay(); - function resizeHandler() { - setBannerSize(); - } - function scrollHandler(evt) { var refetTop = $('.refer-wrapper').position().top; var referHeight = $('.refer-wrapper').height(); @@ -172,10 +118,10 @@ $(function() { autoPlay(); } - function setBannerSize() { + /*function setBannerSize() { var winH = $(window).height(); $('.pc-banner').height(winH); - } + }*/ function autoPlay() { if(!bannerTimer) { diff --git a/client/views/home-views/lang.json b/www/client/views/home-views/lang.json similarity index 100% rename from client/views/home-views/lang.json rename to www/client/views/home-views/lang.json diff --git a/client/views/home-views/style/index.less b/www/client/views/home-views/style/index.less similarity index 99% rename from client/views/home-views/style/index.less rename to www/client/views/home-views/style/index.less index afc7c37..56be2e3 100644 --- a/client/views/home-views/style/index.less +++ b/www/client/views/home-views/style/index.less @@ -24,6 +24,10 @@ } /* mixin definition end */ +body{ + display: none; +} + #preload-mask { position: fixed; left: 0; @@ -208,7 +212,8 @@ } /* banner section */ .pc-banner { - width: 100%; + width: 100vw; + height: 100vh; position: relative; overflow: hidden; } @@ -254,16 +259,18 @@ position: absolute; top: 50%; left: 50%; - opacity: 0; - transition: all 1s 0.5s; - transform: translate(-50%, -50%) translateY(-14.3px) rotateY(9deg); + margin-top: -133px; + margin-left: -330px; width: 660px; height: 295px; + opacity: 0; + transition: all 1s 0.5s; + transform: rotateY(9deg); color: white; } .banner-wrapper.active .banner-content-wrapper { - transform: translate(-50%, -50%) translateY(-14.3px) rotateY(0deg); + transform: rotateY(0deg); opacity: 1; } diff --git a/client/views/news-views/detail/assets/bannerpic@v2.0.png b/www/client/views/news-views/detail/assets/bannerpic@v2.0.png similarity index 100% rename from client/views/news-views/detail/assets/bannerpic@v2.0.png rename to www/client/views/news-views/detail/assets/bannerpic@v2.0.png diff --git a/client/views/news-views/detail/assets/holder.png b/www/client/views/news-views/detail/assets/holder.png similarity index 100% rename from client/views/news-views/detail/assets/holder.png rename to www/client/views/news-views/detail/assets/holder.png diff --git a/client/views/news-views/detail/index.ejs b/www/client/views/news-views/detail/index.ejs similarity index 100% rename from client/views/news-views/detail/index.ejs rename to www/client/views/news-views/detail/index.ejs diff --git a/client/views/news-views/detail/index.js b/www/client/views/news-views/detail/index.js similarity index 100% rename from client/views/news-views/detail/index.js rename to www/client/views/news-views/detail/index.js diff --git a/client/views/news-views/detail/lang.json b/www/client/views/news-views/detail/lang.json similarity index 100% rename from client/views/news-views/detail/lang.json rename to www/client/views/news-views/detail/lang.json diff --git a/client/views/news-views/detail/style/index.less b/www/client/views/news-views/detail/style/index.less similarity index 100% rename from client/views/news-views/detail/style/index.less rename to www/client/views/news-views/detail/style/index.less diff --git a/client/views/news-views/list/assets/bannerpic@v2.0.png b/www/client/views/news-views/list/assets/bannerpic@v2.0.png similarity index 100% rename from client/views/news-views/list/assets/bannerpic@v2.0.png rename to www/client/views/news-views/list/assets/bannerpic@v2.0.png diff --git a/client/views/news-views/list/assets/holder.png b/www/client/views/news-views/list/assets/holder.png similarity index 100% rename from client/views/news-views/list/assets/holder.png rename to www/client/views/news-views/list/assets/holder.png diff --git a/client/views/news-views/list/index.ejs b/www/client/views/news-views/list/index.ejs similarity index 100% rename from client/views/news-views/list/index.ejs rename to www/client/views/news-views/list/index.ejs diff --git a/client/views/news-views/list/index.js b/www/client/views/news-views/list/index.js similarity index 100% rename from client/views/news-views/list/index.js rename to www/client/views/news-views/list/index.js diff --git a/client/views/news-views/list/lang.json b/www/client/views/news-views/list/lang.json similarity index 100% rename from client/views/news-views/list/lang.json rename to www/client/views/news-views/list/lang.json diff --git a/client/views/news-views/list/style/index.less b/www/client/views/news-views/list/style/index.less similarity index 100% rename from client/views/news-views/list/style/index.less rename to www/client/views/news-views/list/style/index.less diff --git a/client/views/page-views/about/clients/assets/1.png b/www/client/views/page-views/about/clients/assets/1.png similarity index 100% rename from client/views/page-views/about/clients/assets/1.png rename to www/client/views/page-views/about/clients/assets/1.png diff --git a/client/views/page-views/about/clients/assets/2.png b/www/client/views/page-views/about/clients/assets/2.png similarity index 100% rename from client/views/page-views/about/clients/assets/2.png rename to www/client/views/page-views/about/clients/assets/2.png diff --git a/client/views/page-views/about/clients/assets/3.png b/www/client/views/page-views/about/clients/assets/3.png similarity index 100% rename from client/views/page-views/about/clients/assets/3.png rename to www/client/views/page-views/about/clients/assets/3.png diff --git a/client/views/page-views/about/clients/assets/4.png b/www/client/views/page-views/about/clients/assets/4.png similarity index 100% rename from client/views/page-views/about/clients/assets/4.png rename to www/client/views/page-views/about/clients/assets/4.png diff --git a/client/views/page-views/about/clients/assets/banner2.jpg b/www/client/views/page-views/about/clients/assets/banner2.jpg similarity index 100% rename from client/views/page-views/about/clients/assets/banner2.jpg rename to www/client/views/page-views/about/clients/assets/banner2.jpg diff --git a/client/views/page-views/about/clients/assets/dx1.png b/www/client/views/page-views/about/clients/assets/dx1.png similarity index 100% rename from client/views/page-views/about/clients/assets/dx1.png rename to www/client/views/page-views/about/clients/assets/dx1.png diff --git a/client/views/page-views/about/clients/assets/dx2.png b/www/client/views/page-views/about/clients/assets/dx2.png similarity index 100% rename from client/views/page-views/about/clients/assets/dx2.png rename to www/client/views/page-views/about/clients/assets/dx2.png diff --git a/client/views/page-views/about/clients/assets/dx3.png b/www/client/views/page-views/about/clients/assets/dx3.png similarity index 100% rename from client/views/page-views/about/clients/assets/dx3.png rename to www/client/views/page-views/about/clients/assets/dx3.png diff --git a/client/views/page-views/about/clients/assets/dx4.png b/www/client/views/page-views/about/clients/assets/dx4.png similarity index 100% rename from client/views/page-views/about/clients/assets/dx4.png rename to www/client/views/page-views/about/clients/assets/dx4.png diff --git a/client/views/page-views/about/clients/assets/dx5.png b/www/client/views/page-views/about/clients/assets/dx5.png similarity index 100% rename from client/views/page-views/about/clients/assets/dx5.png rename to www/client/views/page-views/about/clients/assets/dx5.png diff --git a/client/views/page-views/about/clients/assets/dx6.png b/www/client/views/page-views/about/clients/assets/dx6.png similarity index 100% rename from client/views/page-views/about/clients/assets/dx6.png rename to www/client/views/page-views/about/clients/assets/dx6.png diff --git a/client/views/page-views/about/clients/assets/jr1.png b/www/client/views/page-views/about/clients/assets/jr1.png similarity index 100% rename from client/views/page-views/about/clients/assets/jr1.png rename to www/client/views/page-views/about/clients/assets/jr1.png diff --git a/client/views/page-views/about/clients/assets/jr2.png b/www/client/views/page-views/about/clients/assets/jr2.png similarity index 100% rename from client/views/page-views/about/clients/assets/jr2.png rename to www/client/views/page-views/about/clients/assets/jr2.png diff --git a/client/views/page-views/about/clients/assets/jr3.png b/www/client/views/page-views/about/clients/assets/jr3.png similarity index 100% rename from client/views/page-views/about/clients/assets/jr3.png rename to www/client/views/page-views/about/clients/assets/jr3.png diff --git a/client/views/page-views/about/clients/assets/jr4.png b/www/client/views/page-views/about/clients/assets/jr4.png similarity index 100% rename from client/views/page-views/about/clients/assets/jr4.png rename to www/client/views/page-views/about/clients/assets/jr4.png diff --git a/client/views/page-views/about/clients/assets/jr5.png b/www/client/views/page-views/about/clients/assets/jr5.png similarity index 100% rename from client/views/page-views/about/clients/assets/jr5.png rename to www/client/views/page-views/about/clients/assets/jr5.png diff --git a/client/views/page-views/about/clients/assets/jy1.png b/www/client/views/page-views/about/clients/assets/jy1.png similarity index 100% rename from client/views/page-views/about/clients/assets/jy1.png rename to www/client/views/page-views/about/clients/assets/jy1.png diff --git a/client/views/page-views/about/clients/assets/jy2.png b/www/client/views/page-views/about/clients/assets/jy2.png similarity index 100% rename from client/views/page-views/about/clients/assets/jy2.png rename to www/client/views/page-views/about/clients/assets/jy2.png diff --git a/client/views/page-views/about/clients/assets/jy3.png b/www/client/views/page-views/about/clients/assets/jy3.png similarity index 100% rename from client/views/page-views/about/clients/assets/jy3.png rename to www/client/views/page-views/about/clients/assets/jy3.png diff --git a/client/views/page-views/about/clients/assets/zf1.png b/www/client/views/page-views/about/clients/assets/zf1.png similarity index 100% rename from client/views/page-views/about/clients/assets/zf1.png rename to www/client/views/page-views/about/clients/assets/zf1.png diff --git a/client/views/page-views/about/clients/assets/zf2.png b/www/client/views/page-views/about/clients/assets/zf2.png similarity index 100% rename from client/views/page-views/about/clients/assets/zf2.png rename to www/client/views/page-views/about/clients/assets/zf2.png diff --git a/client/views/page-views/about/clients/assets/zf3.png b/www/client/views/page-views/about/clients/assets/zf3.png similarity index 100% rename from client/views/page-views/about/clients/assets/zf3.png rename to www/client/views/page-views/about/clients/assets/zf3.png diff --git a/client/views/page-views/about/clients/assets/zf4.png b/www/client/views/page-views/about/clients/assets/zf4.png similarity index 100% rename from client/views/page-views/about/clients/assets/zf4.png rename to www/client/views/page-views/about/clients/assets/zf4.png diff --git a/client/views/page-views/about/clients/assets/zf5.png b/www/client/views/page-views/about/clients/assets/zf5.png similarity index 100% rename from client/views/page-views/about/clients/assets/zf5.png rename to www/client/views/page-views/about/clients/assets/zf5.png diff --git a/client/views/page-views/about/clients/index.ejs b/www/client/views/page-views/about/clients/index.ejs similarity index 100% rename from client/views/page-views/about/clients/index.ejs rename to www/client/views/page-views/about/clients/index.ejs diff --git a/client/views/page-views/about/clients/index.js b/www/client/views/page-views/about/clients/index.js similarity index 100% rename from client/views/page-views/about/clients/index.js rename to www/client/views/page-views/about/clients/index.js diff --git a/client/views/page-views/about/clients/lang.json b/www/client/views/page-views/about/clients/lang.json similarity index 100% rename from client/views/page-views/about/clients/lang.json rename to www/client/views/page-views/about/clients/lang.json diff --git a/client/views/page-views/about/clients/style/index.less b/www/client/views/page-views/about/clients/style/index.less similarity index 100% rename from client/views/page-views/about/clients/style/index.less rename to www/client/views/page-views/about/clients/style/index.less diff --git a/client/views/page-views/about/company/assets/1.png b/www/client/views/page-views/about/company/assets/1.png similarity index 100% rename from client/views/page-views/about/company/assets/1.png rename to www/client/views/page-views/about/company/assets/1.png diff --git a/client/views/page-views/about/company/assets/2.png b/www/client/views/page-views/about/company/assets/2.png similarity index 100% rename from client/views/page-views/about/company/assets/2.png rename to www/client/views/page-views/about/company/assets/2.png diff --git a/client/views/page-views/about/company/assets/3.png b/www/client/views/page-views/about/company/assets/3.png similarity index 100% rename from client/views/page-views/about/company/assets/3.png rename to www/client/views/page-views/about/company/assets/3.png diff --git a/client/views/page-views/about/company/assets/4.png b/www/client/views/page-views/about/company/assets/4.png similarity index 100% rename from client/views/page-views/about/company/assets/4.png rename to www/client/views/page-views/about/company/assets/4.png diff --git a/client/views/page-views/about/company/assets/Group 15.png b/www/client/views/page-views/about/company/assets/Group 15.png similarity index 100% rename from client/views/page-views/about/company/assets/Group 15.png rename to www/client/views/page-views/about/company/assets/Group 15.png diff --git a/client/views/page-views/about/company/assets/Group 16.png b/www/client/views/page-views/about/company/assets/Group 16.png similarity index 100% rename from client/views/page-views/about/company/assets/Group 16.png rename to www/client/views/page-views/about/company/assets/Group 16.png diff --git a/client/views/page-views/about/company/assets/Group.png b/www/client/views/page-views/about/company/assets/Group.png similarity index 100% rename from client/views/page-views/about/company/assets/Group.png rename to www/client/views/page-views/about/company/assets/Group.png diff --git a/client/views/page-views/about/company/assets/Group17.png b/www/client/views/page-views/about/company/assets/Group17.png similarity index 100% rename from client/views/page-views/about/company/assets/Group17.png rename to www/client/views/page-views/about/company/assets/Group17.png diff --git a/client/views/page-views/about/company/assets/Group20.png b/www/client/views/page-views/about/company/assets/Group20.png similarity index 100% rename from client/views/page-views/about/company/assets/Group20.png rename to www/client/views/page-views/about/company/assets/Group20.png diff --git a/client/views/page-views/about/company/assets/Group22.png b/www/client/views/page-views/about/company/assets/Group22.png similarity index 100% rename from client/views/page-views/about/company/assets/Group22.png rename to www/client/views/page-views/about/company/assets/Group22.png diff --git a/client/views/page-views/about/company/assets/Group23.png b/www/client/views/page-views/about/company/assets/Group23.png similarity index 100% rename from client/views/page-views/about/company/assets/Group23.png rename to www/client/views/page-views/about/company/assets/Group23.png diff --git a/client/views/page-views/about/company/assets/Group27.png b/www/client/views/page-views/about/company/assets/Group27.png similarity index 100% rename from client/views/page-views/about/company/assets/Group27.png rename to www/client/views/page-views/about/company/assets/Group27.png diff --git a/client/views/page-views/about/company/assets/Group29.png b/www/client/views/page-views/about/company/assets/Group29.png similarity index 100% rename from client/views/page-views/about/company/assets/Group29.png rename to www/client/views/page-views/about/company/assets/Group29.png diff --git a/client/views/page-views/about/company/assets/Group30.png b/www/client/views/page-views/about/company/assets/Group30.png similarity index 100% rename from client/views/page-views/about/company/assets/Group30.png rename to www/client/views/page-views/about/company/assets/Group30.png diff --git a/client/views/page-views/about/company/assets/Group7.png b/www/client/views/page-views/about/company/assets/Group7.png similarity index 100% rename from client/views/page-views/about/company/assets/Group7.png rename to www/client/views/page-views/about/company/assets/Group7.png diff --git a/client/views/page-views/about/company/assets/Rectangle 7 Copy 14.png b/www/client/views/page-views/about/company/assets/Rectangle 7 Copy 14.png similarity index 100% rename from client/views/page-views/about/company/assets/Rectangle 7 Copy 14.png rename to www/client/views/page-views/about/company/assets/Rectangle 7 Copy 14.png diff --git a/client/views/page-views/about/company/assets/about.png b/www/client/views/page-views/about/company/assets/about.png similarity index 100% rename from client/views/page-views/about/company/assets/about.png rename to www/client/views/page-views/about/company/assets/about.png diff --git a/client/views/page-views/about/company/assets/banner2.jpg b/www/client/views/page-views/about/company/assets/banner2.jpg similarity index 100% rename from client/views/page-views/about/company/assets/banner2.jpg rename to www/client/views/page-views/about/company/assets/banner2.jpg diff --git a/client/views/page-views/about/company/assets/bannerpic@v2.0.png b/www/client/views/page-views/about/company/assets/bannerpic@v2.0.png similarity index 100% rename from client/views/page-views/about/company/assets/bannerpic@v2.0.png rename to www/client/views/page-views/about/company/assets/bannerpic@v2.0.png diff --git a/client/views/page-views/about/company/index.ejs b/www/client/views/page-views/about/company/index.ejs similarity index 90% rename from client/views/page-views/about/company/index.ejs rename to www/client/views/page-views/about/company/index.ejs index 1c149a5..91c7493 100644 --- a/client/views/page-views/about/company/index.ejs +++ b/www/client/views/page-views/about/company/index.ejs @@ -65,7 +65,7 @@
- 同方有云成立于2013年2月,是中国市场重要的云计算解决方案提供商,是第一个在中国市场提供托管私有云服务的云公司,也是中国云计算领域第一个提供公有云和私有云区域节点完全一致的高可靠云服务的云公司,第一个通过互操作性认证的中国云计算服务商,也是中国第一家当选为OpenStack基金会黄金会员的创业公司。目前公司拥有38项软件著作或知识产权,国家级高新技术企业,并通过ISO9001、ISO27001、工信部软件测评、ITSS云服务认证、可信云解决方案、公安行业软件测评等权威认证,同方云产品基于世界领先的云计算技术构建,持续为行业客户提供功能完整的全栈式一体化云平台体验。 + 同方有云(北京)科技有限公司成立于2013年2月,是中国市场重要的云计算解决方案提供商,是第一个在中国市场提供托管私有云服务的云公司,也是中国云计算领域第一个提供公有云和私有云区域节点完全一致的高可靠云服务的云公司,第一个通过互操作性认证的中国云计算服务商,也是中国第一家当选为OpenStack基金会黄金会员的创业公司。目前公司拥有38项软件著作或知识产权,国家级高新技术企业,并通过ISO9001、ISO27001、工信部软件测评、ITSS云服务认证、可信云解决方案、公安行业软件测评等权威认证,同方云产品基于世界领先的云计算技术构建,持续为行业客户提供功能完整的全栈式一体化云平台体验。
diff --git a/client/views/page-views/about/company/index.js b/www/client/views/page-views/about/company/index.js similarity index 100% rename from client/views/page-views/about/company/index.js rename to www/client/views/page-views/about/company/index.js diff --git a/client/views/page-views/about/company/lang.json b/www/client/views/page-views/about/company/lang.json similarity index 100% rename from client/views/page-views/about/company/lang.json rename to www/client/views/page-views/about/company/lang.json diff --git a/client/views/page-views/about/company/style/index.less b/www/client/views/page-views/about/company/style/index.less similarity index 100% rename from client/views/page-views/about/company/style/index.less rename to www/client/views/page-views/about/company/style/index.less diff --git a/client/views/page-views/about/contact-us/assets/banner2.jpg b/www/client/views/page-views/about/contact-us/assets/banner2.jpg similarity index 100% rename from client/views/page-views/about/contact-us/assets/banner2.jpg rename to www/client/views/page-views/about/contact-us/assets/banner2.jpg diff --git a/client/views/page-views/about/contact-us/assets/map.png b/www/client/views/page-views/about/contact-us/assets/map.png similarity index 100% rename from client/views/page-views/about/contact-us/assets/map.png rename to www/client/views/page-views/about/contact-us/assets/map.png diff --git a/client/views/page-views/about/contact-us/index.ejs b/www/client/views/page-views/about/contact-us/index.ejs similarity index 100% rename from client/views/page-views/about/contact-us/index.ejs rename to www/client/views/page-views/about/contact-us/index.ejs diff --git a/client/views/page-views/about/contact-us/index.js b/www/client/views/page-views/about/contact-us/index.js similarity index 100% rename from client/views/page-views/about/contact-us/index.js rename to www/client/views/page-views/about/contact-us/index.js diff --git a/client/views/page-views/about/contact-us/lang.json b/www/client/views/page-views/about/contact-us/lang.json similarity index 100% rename from client/views/page-views/about/contact-us/lang.json rename to www/client/views/page-views/about/contact-us/lang.json diff --git a/client/views/page-views/about/contact-us/style/index.less b/www/client/views/page-views/about/contact-us/style/index.less similarity index 100% rename from client/views/page-views/about/contact-us/style/index.less rename to www/client/views/page-views/about/contact-us/style/index.less diff --git a/client/views/page-views/about/identify/assets/banner2.jpg b/www/client/views/page-views/about/identify/assets/banner2.jpg similarity index 100% rename from client/views/page-views/about/identify/assets/banner2.jpg rename to www/client/views/page-views/about/identify/assets/banner2.jpg diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo-2018-1.ai b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-2018-1.ai similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo-2018-1.ai rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-2018-1.ai diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-2018-1.ai b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-2018-1.ai similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-2018-1.ai rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-2018-1.ai diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-2018-1.png b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-2018-1.png similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-2018-1.png rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-2018-1.png diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-300dpi-2018-1.jpg diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-72dpi-2018-1.png b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-72dpi-2018-1.png similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-72dpi-2018-1.png rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-black-72dpi-2018-1.png diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-2018-1.ai b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-2018-1.ai similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-2018-1.ai rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-2018-1.ai diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-300dpi-2018-1.jpg diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo-upanddown-72dpi-2018.1.png diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo300dpi-2018-1.jpg b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo300dpi-2018-1.jpg similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo300dpi-2018-1.jpg rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo300dpi-2018-1.jpg diff --git a/client/views/page-views/about/identify/assets/tongfangyouyun-logo72dpi-2018-1.jpg b/www/client/views/page-views/about/identify/assets/tongfangyouyun-logo72dpi-2018-1.jpg similarity index 100% rename from client/views/page-views/about/identify/assets/tongfangyouyun-logo72dpi-2018-1.jpg rename to www/client/views/page-views/about/identify/assets/tongfangyouyun-logo72dpi-2018-1.jpg diff --git a/client/views/page-views/about/identify/index.ejs b/www/client/views/page-views/about/identify/index.ejs similarity index 100% rename from client/views/page-views/about/identify/index.ejs rename to www/client/views/page-views/about/identify/index.ejs diff --git a/client/views/page-views/about/identify/index.js b/www/client/views/page-views/about/identify/index.js similarity index 100% rename from client/views/page-views/about/identify/index.js rename to www/client/views/page-views/about/identify/index.js diff --git a/client/views/page-views/about/identify/lang.json b/www/client/views/page-views/about/identify/lang.json similarity index 100% rename from client/views/page-views/about/identify/lang.json rename to www/client/views/page-views/about/identify/lang.json diff --git a/client/views/page-views/about/identify/style/index.less b/www/client/views/page-views/about/identify/style/index.less similarity index 100% rename from client/views/page-views/about/identify/style/index.less rename to www/client/views/page-views/about/identify/style/index.less diff --git a/client/views/page-views/about/jobs/assets/banner.png b/www/client/views/page-views/about/jobs/assets/banner.png similarity index 100% rename from client/views/page-views/about/jobs/assets/banner.png rename to www/client/views/page-views/about/jobs/assets/banner.png diff --git a/client/views/page-views/about/jobs/assets/first.png b/www/client/views/page-views/about/jobs/assets/first.png similarity index 100% rename from client/views/page-views/about/jobs/assets/first.png rename to www/client/views/page-views/about/jobs/assets/first.png diff --git a/client/views/page-views/about/jobs/assets/second.png b/www/client/views/page-views/about/jobs/assets/second.png similarity index 100% rename from client/views/page-views/about/jobs/assets/second.png rename to www/client/views/page-views/about/jobs/assets/second.png diff --git a/client/views/page-views/about/jobs/assets/third.png b/www/client/views/page-views/about/jobs/assets/third.png similarity index 100% rename from client/views/page-views/about/jobs/assets/third.png rename to www/client/views/page-views/about/jobs/assets/third.png diff --git a/client/views/page-views/about/jobs/index.ejs b/www/client/views/page-views/about/jobs/index.ejs similarity index 100% rename from client/views/page-views/about/jobs/index.ejs rename to www/client/views/page-views/about/jobs/index.ejs diff --git a/client/views/page-views/about/jobs/index.js b/www/client/views/page-views/about/jobs/index.js similarity index 100% rename from client/views/page-views/about/jobs/index.js rename to www/client/views/page-views/about/jobs/index.js diff --git a/client/views/page-views/about/jobs/lang.json b/www/client/views/page-views/about/jobs/lang.json similarity index 100% rename from client/views/page-views/about/jobs/lang.json rename to www/client/views/page-views/about/jobs/lang.json diff --git a/client/views/page-views/about/jobs/style/index.less b/www/client/views/page-views/about/jobs/style/index.less similarity index 100% rename from client/views/page-views/about/jobs/style/index.less rename to www/client/views/page-views/about/jobs/style/index.less diff --git a/client/views/page-views/browser/assets/index.jpg b/www/client/views/page-views/browser/assets/index.jpg similarity index 100% rename from client/views/page-views/browser/assets/index.jpg rename to www/client/views/page-views/browser/assets/index.jpg diff --git a/client/views/page-views/browser/index.ejs b/www/client/views/page-views/browser/index.ejs similarity index 100% rename from client/views/page-views/browser/index.ejs rename to www/client/views/page-views/browser/index.ejs diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Fill1-1.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Fill1-1.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Fill1-1.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Fill1-1.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Fill1.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Fill1.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Fill1.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Fill1.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group11.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group11.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group11.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group11.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group12.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group12.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group12.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group12.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group13.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group13.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group13.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group13.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group14_v1.0.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group14_v1.0.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group14_v1.0.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group14_v1.0.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group15.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group15.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group15.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group15.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group16.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group16.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group16.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group16.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group17.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group17.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group17.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group17.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group18.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group18.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group18.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group18.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group19.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group19.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group19.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group19.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group20.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group20.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group20.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group20.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group21.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group21.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group21.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group21.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group22.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group22.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group22.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group22.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group23.jpg b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group23.jpg similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group23.jpg rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group23.jpg diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group23.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group23.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group23.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group23.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group24.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group24.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group24.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group24.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group25.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group25.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group25.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group25.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group26.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group26.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group26.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group26.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group27.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group27.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group27.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group27.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group28.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group28.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group28.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group28.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group29.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group29.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group29.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group29.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group30.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group30.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group30.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group30.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group31.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group31.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group31.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group31.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group32.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group32.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group32.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group32.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group33.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group33.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group33.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group33.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group34.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group34.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group34.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group34.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group35.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group35.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group35.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group35.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group36.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group36.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group36.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group36.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group37.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group37.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group37.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group37.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group38.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group38.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group38.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group38.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/Group4.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/Group4.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/Group4.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/Group4.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/checked.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/checked.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/checked.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/checked.png diff --git a/client/views/page-views/cooperation/cooperation-apply/assets/warning.png b/www/client/views/page-views/cooperation/cooperation-apply/assets/warning.png similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/assets/warning.png rename to www/client/views/page-views/cooperation/cooperation-apply/assets/warning.png diff --git "a/client/views/page-views/cooperation/cooperation-apply/assets/\345\220\210\344\275\234\347\224\263\350\257\267banner.jpg" "b/www/client/views/page-views/cooperation/cooperation-apply/assets/\345\220\210\344\275\234\347\224\263\350\257\267banner.jpg" similarity index 100% rename from "client/views/page-views/cooperation/cooperation-apply/assets/\345\220\210\344\275\234\347\224\263\350\257\267banner.jpg" rename to "www/client/views/page-views/cooperation/cooperation-apply/assets/\345\220\210\344\275\234\347\224\263\350\257\267banner.jpg" diff --git "a/client/views/page-views/cooperation/cooperation-apply/assets/\346\230\237.png" "b/www/client/views/page-views/cooperation/cooperation-apply/assets/\346\230\237.png" similarity index 100% rename from "client/views/page-views/cooperation/cooperation-apply/assets/\346\230\237.png" rename to "www/client/views/page-views/cooperation/cooperation-apply/assets/\346\230\237.png" diff --git a/client/views/page-views/cooperation/cooperation-apply/index.ejs b/www/client/views/page-views/cooperation/cooperation-apply/index.ejs similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/index.ejs rename to www/client/views/page-views/cooperation/cooperation-apply/index.ejs diff --git a/client/views/page-views/cooperation/cooperation-apply/index.js b/www/client/views/page-views/cooperation/cooperation-apply/index.js similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/index.js rename to www/client/views/page-views/cooperation/cooperation-apply/index.js diff --git a/client/views/page-views/cooperation/cooperation-apply/lang.json b/www/client/views/page-views/cooperation/cooperation-apply/lang.json similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/lang.json rename to www/client/views/page-views/cooperation/cooperation-apply/lang.json diff --git a/client/views/page-views/cooperation/cooperation-apply/style/index.less b/www/client/views/page-views/cooperation/cooperation-apply/style/index.less similarity index 100% rename from client/views/page-views/cooperation/cooperation-apply/style/index.less rename to www/client/views/page-views/cooperation/cooperation-apply/style/index.less diff --git a/client/views/page-views/product/big-data/assets/banner2.jpg b/www/client/views/page-views/product/big-data/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/big-data/assets/banner2.jpg rename to www/client/views/page-views/product/big-data/assets/banner2.jpg diff --git a/client/views/page-views/product/big-data/assets/framework1.png b/www/client/views/page-views/product/big-data/assets/framework1.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework1.png rename to www/client/views/page-views/product/big-data/assets/framework1.png diff --git a/client/views/page-views/product/big-data/assets/framework2.png b/www/client/views/page-views/product/big-data/assets/framework2.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework2.png rename to www/client/views/page-views/product/big-data/assets/framework2.png diff --git a/client/views/page-views/product/big-data/assets/framework2@v2.0.png b/www/client/views/page-views/product/big-data/assets/framework2@v2.0.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework2@v2.0.png rename to www/client/views/page-views/product/big-data/assets/framework2@v2.0.png diff --git a/client/views/page-views/product/big-data/assets/framework3.png b/www/client/views/page-views/product/big-data/assets/framework3.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework3.png rename to www/client/views/page-views/product/big-data/assets/framework3.png diff --git a/client/views/page-views/product/big-data/assets/framework4.png b/www/client/views/page-views/product/big-data/assets/framework4.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework4.png rename to www/client/views/page-views/product/big-data/assets/framework4.png diff --git a/client/views/page-views/product/big-data/assets/framework5.png b/www/client/views/page-views/product/big-data/assets/framework5.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework5.png rename to www/client/views/page-views/product/big-data/assets/framework5.png diff --git a/client/views/page-views/product/big-data/assets/framework6.png b/www/client/views/page-views/product/big-data/assets/framework6.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework6.png rename to www/client/views/page-views/product/big-data/assets/framework6.png diff --git a/client/views/page-views/product/big-data/assets/framework7.png b/www/client/views/page-views/product/big-data/assets/framework7.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework7.png rename to www/client/views/page-views/product/big-data/assets/framework7.png diff --git a/client/views/page-views/product/big-data/assets/framework8.png b/www/client/views/page-views/product/big-data/assets/framework8.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework8.png rename to www/client/views/page-views/product/big-data/assets/framework8.png diff --git a/client/views/page-views/product/big-data/assets/framework9.png b/www/client/views/page-views/product/big-data/assets/framework9.png similarity index 100% rename from client/views/page-views/product/big-data/assets/framework9.png rename to www/client/views/page-views/product/big-data/assets/framework9.png diff --git a/client/views/page-views/product/big-data/assets/icon1.png b/www/client/views/page-views/product/big-data/assets/icon1.png similarity index 100% rename from client/views/page-views/product/big-data/assets/icon1.png rename to www/client/views/page-views/product/big-data/assets/icon1.png diff --git a/client/views/page-views/product/big-data/assets/icon1@v2.0.png b/www/client/views/page-views/product/big-data/assets/icon1@v2.0.png similarity index 100% rename from client/views/page-views/product/big-data/assets/icon1@v2.0.png rename to www/client/views/page-views/product/big-data/assets/icon1@v2.0.png diff --git a/client/views/page-views/product/big-data/assets/icon2.png b/www/client/views/page-views/product/big-data/assets/icon2.png similarity index 100% rename from client/views/page-views/product/big-data/assets/icon2.png rename to www/client/views/page-views/product/big-data/assets/icon2.png diff --git a/client/views/page-views/product/big-data/assets/icon2@v2.0.png b/www/client/views/page-views/product/big-data/assets/icon2@v2.0.png similarity index 100% rename from client/views/page-views/product/big-data/assets/icon2@v2.0.png rename to www/client/views/page-views/product/big-data/assets/icon2@v2.0.png diff --git a/client/views/page-views/product/big-data/assets/icon3.png b/www/client/views/page-views/product/big-data/assets/icon3.png similarity index 100% rename from client/views/page-views/product/big-data/assets/icon3.png rename to www/client/views/page-views/product/big-data/assets/icon3.png diff --git a/client/views/page-views/product/big-data/assets/icon3@v2.0.png b/www/client/views/page-views/product/big-data/assets/icon3@v2.0.png similarity index 100% rename from client/views/page-views/product/big-data/assets/icon3@v2.0.png rename to www/client/views/page-views/product/big-data/assets/icon3@v2.0.png diff --git a/client/views/page-views/product/big-data/index.ejs b/www/client/views/page-views/product/big-data/index.ejs similarity index 100% rename from client/views/page-views/product/big-data/index.ejs rename to www/client/views/page-views/product/big-data/index.ejs diff --git a/client/views/page-views/product/big-data/index.js b/www/client/views/page-views/product/big-data/index.js similarity index 100% rename from client/views/page-views/product/big-data/index.js rename to www/client/views/page-views/product/big-data/index.js diff --git a/client/views/page-views/product/big-data/lang.json b/www/client/views/page-views/product/big-data/lang.json similarity index 100% rename from client/views/page-views/product/big-data/lang.json rename to www/client/views/page-views/product/big-data/lang.json diff --git a/client/views/page-views/product/big-data/style/index.less b/www/client/views/page-views/product/big-data/style/index.less similarity index 100% rename from client/views/page-views/product/big-data/style/index.less rename to www/client/views/page-views/product/big-data/style/index.less diff --git a/client/views/page-views/product/cloud-platform/director/assets/1.png b/www/client/views/page-views/product/cloud-platform/director/assets/1.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/1.png rename to www/client/views/page-views/product/cloud-platform/director/assets/1.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/2.png b/www/client/views/page-views/product/cloud-platform/director/assets/2.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/2.png rename to www/client/views/page-views/product/cloud-platform/director/assets/2.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/3.png b/www/client/views/page-views/product/cloud-platform/director/assets/3.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/3.png rename to www/client/views/page-views/product/cloud-platform/director/assets/3.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/4.png b/www/client/views/page-views/product/cloud-platform/director/assets/4.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/4.png rename to www/client/views/page-views/product/cloud-platform/director/assets/4.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/5.png b/www/client/views/page-views/product/cloud-platform/director/assets/5.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/5.png rename to www/client/views/page-views/product/cloud-platform/director/assets/5.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/6.png b/www/client/views/page-views/product/cloud-platform/director/assets/6.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/6.png rename to www/client/views/page-views/product/cloud-platform/director/assets/6.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/7.png b/www/client/views/page-views/product/cloud-platform/director/assets/7.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/7.png rename to www/client/views/page-views/product/cloud-platform/director/assets/7.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/banner2.jpg b/www/client/views/page-views/product/cloud-platform/director/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/banner2.jpg rename to www/client/views/page-views/product/cloud-platform/director/assets/banner2.jpg diff --git a/client/views/page-views/product/cloud-platform/director/assets/framework.png b/www/client/views/page-views/product/cloud-platform/director/assets/framework.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/framework.png rename to www/client/views/page-views/product/cloud-platform/director/assets/framework.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/icon1.png b/www/client/views/page-views/product/cloud-platform/director/assets/icon1.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/icon1.png rename to www/client/views/page-views/product/cloud-platform/director/assets/icon1.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/icon2.png b/www/client/views/page-views/product/cloud-platform/director/assets/icon2.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/icon2.png rename to www/client/views/page-views/product/cloud-platform/director/assets/icon2.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/icon3.png b/www/client/views/page-views/product/cloud-platform/director/assets/icon3.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/icon3.png rename to www/client/views/page-views/product/cloud-platform/director/assets/icon3.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/icon4.png b/www/client/views/page-views/product/cloud-platform/director/assets/icon4.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/icon4.png rename to www/client/views/page-views/product/cloud-platform/director/assets/icon4.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/icon5.png b/www/client/views/page-views/product/cloud-platform/director/assets/icon5.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/icon5.png rename to www/client/views/page-views/product/cloud-platform/director/assets/icon5.png diff --git a/client/views/page-views/product/cloud-platform/director/assets/icon6.png b/www/client/views/page-views/product/cloud-platform/director/assets/icon6.png similarity index 100% rename from client/views/page-views/product/cloud-platform/director/assets/icon6.png rename to www/client/views/page-views/product/cloud-platform/director/assets/icon6.png diff --git a/client/views/page-views/product/cloud-platform/director/index.ejs b/www/client/views/page-views/product/cloud-platform/director/index.ejs similarity index 100% rename from client/views/page-views/product/cloud-platform/director/index.ejs rename to www/client/views/page-views/product/cloud-platform/director/index.ejs diff --git a/client/views/page-views/product/cloud-platform/director/index.js b/www/client/views/page-views/product/cloud-platform/director/index.js similarity index 100% rename from client/views/page-views/product/cloud-platform/director/index.js rename to www/client/views/page-views/product/cloud-platform/director/index.js diff --git a/client/views/page-views/product/cloud-platform/director/lang.json b/www/client/views/page-views/product/cloud-platform/director/lang.json similarity index 100% rename from client/views/page-views/product/cloud-platform/director/lang.json rename to www/client/views/page-views/product/cloud-platform/director/lang.json diff --git a/client/views/page-views/product/cloud-platform/director/style/index.less b/www/client/views/page-views/product/cloud-platform/director/style/index.less similarity index 100% rename from client/views/page-views/product/cloud-platform/director/style/index.less rename to www/client/views/page-views/product/cloud-platform/director/style/index.less diff --git a/client/views/page-views/product/cloud-platform/enterprise/assets/1.png b/www/client/views/page-views/product/cloud-platform/enterprise/assets/1.png similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/assets/1.png rename to www/client/views/page-views/product/cloud-platform/enterprise/assets/1.png diff --git a/client/views/page-views/product/cloud-platform/enterprise/assets/2.png b/www/client/views/page-views/product/cloud-platform/enterprise/assets/2.png similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/assets/2.png rename to www/client/views/page-views/product/cloud-platform/enterprise/assets/2.png diff --git a/client/views/page-views/product/cloud-platform/enterprise/assets/3.png b/www/client/views/page-views/product/cloud-platform/enterprise/assets/3.png similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/assets/3.png rename to www/client/views/page-views/product/cloud-platform/enterprise/assets/3.png diff --git a/client/views/page-views/product/cloud-platform/enterprise/assets/4.png b/www/client/views/page-views/product/cloud-platform/enterprise/assets/4.png similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/assets/4.png rename to www/client/views/page-views/product/cloud-platform/enterprise/assets/4.png diff --git a/client/views/page-views/product/cloud-platform/enterprise/assets/5.png b/www/client/views/page-views/product/cloud-platform/enterprise/assets/5.png similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/assets/5.png rename to www/client/views/page-views/product/cloud-platform/enterprise/assets/5.png diff --git a/client/views/page-views/product/cloud-platform/enterprise/assets/6.png b/www/client/views/page-views/product/cloud-platform/enterprise/assets/6.png similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/assets/6.png rename to www/client/views/page-views/product/cloud-platform/enterprise/assets/6.png diff --git a/client/views/page-views/product/cloud-platform/enterprise/assets/7.png b/www/client/views/page-views/product/cloud-platform/enterprise/assets/7.png similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/assets/7.png rename to www/client/views/page-views/product/cloud-platform/enterprise/assets/7.png diff --git a/client/views/page-views/product/cloud-platform/enterprise/assets/banner2.jpg b/www/client/views/page-views/product/cloud-platform/enterprise/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/assets/banner2.jpg rename to www/client/views/page-views/product/cloud-platform/enterprise/assets/banner2.jpg diff --git a/client/views/page-views/product/cloud-platform/enterprise/assets/framework.png b/www/client/views/page-views/product/cloud-platform/enterprise/assets/framework.png similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/assets/framework.png rename to www/client/views/page-views/product/cloud-platform/enterprise/assets/framework.png diff --git a/client/views/page-views/product/cloud-platform/enterprise/index.ejs b/www/client/views/page-views/product/cloud-platform/enterprise/index.ejs similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/index.ejs rename to www/client/views/page-views/product/cloud-platform/enterprise/index.ejs diff --git a/client/views/page-views/product/cloud-platform/enterprise/index.js b/www/client/views/page-views/product/cloud-platform/enterprise/index.js similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/index.js rename to www/client/views/page-views/product/cloud-platform/enterprise/index.js diff --git a/client/views/page-views/product/cloud-platform/enterprise/lang.json b/www/client/views/page-views/product/cloud-platform/enterprise/lang.json similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/lang.json rename to www/client/views/page-views/product/cloud-platform/enterprise/lang.json diff --git a/client/views/page-views/product/cloud-platform/enterprise/style/index.less b/www/client/views/page-views/product/cloud-platform/enterprise/style/index.less similarity index 100% rename from client/views/page-views/product/cloud-platform/enterprise/style/index.less rename to www/client/views/page-views/product/cloud-platform/enterprise/style/index.less diff --git a/client/views/page-views/product/cloud-platform/manager/assets/1.png b/www/client/views/page-views/product/cloud-platform/manager/assets/1.png similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/assets/1.png rename to www/client/views/page-views/product/cloud-platform/manager/assets/1.png diff --git a/client/views/page-views/product/cloud-platform/manager/assets/2.png b/www/client/views/page-views/product/cloud-platform/manager/assets/2.png similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/assets/2.png rename to www/client/views/page-views/product/cloud-platform/manager/assets/2.png diff --git a/client/views/page-views/product/cloud-platform/manager/assets/3.png b/www/client/views/page-views/product/cloud-platform/manager/assets/3.png similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/assets/3.png rename to www/client/views/page-views/product/cloud-platform/manager/assets/3.png diff --git a/client/views/page-views/product/cloud-platform/manager/assets/4.png b/www/client/views/page-views/product/cloud-platform/manager/assets/4.png similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/assets/4.png rename to www/client/views/page-views/product/cloud-platform/manager/assets/4.png diff --git a/client/views/page-views/product/cloud-platform/manager/assets/5.png b/www/client/views/page-views/product/cloud-platform/manager/assets/5.png similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/assets/5.png rename to www/client/views/page-views/product/cloud-platform/manager/assets/5.png diff --git a/client/views/page-views/product/cloud-platform/manager/assets/6.png b/www/client/views/page-views/product/cloud-platform/manager/assets/6.png similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/assets/6.png rename to www/client/views/page-views/product/cloud-platform/manager/assets/6.png diff --git a/client/views/page-views/product/cloud-platform/manager/assets/7.png b/www/client/views/page-views/product/cloud-platform/manager/assets/7.png similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/assets/7.png rename to www/client/views/page-views/product/cloud-platform/manager/assets/7.png diff --git a/client/views/page-views/product/cloud-platform/manager/assets/banner2.jpg b/www/client/views/page-views/product/cloud-platform/manager/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/assets/banner2.jpg rename to www/client/views/page-views/product/cloud-platform/manager/assets/banner2.jpg diff --git a/client/views/page-views/product/cloud-platform/manager/assets/framework.png b/www/client/views/page-views/product/cloud-platform/manager/assets/framework.png similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/assets/framework.png rename to www/client/views/page-views/product/cloud-platform/manager/assets/framework.png diff --git a/client/views/page-views/product/cloud-platform/manager/index.ejs b/www/client/views/page-views/product/cloud-platform/manager/index.ejs similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/index.ejs rename to www/client/views/page-views/product/cloud-platform/manager/index.ejs diff --git a/client/views/page-views/product/cloud-platform/manager/index.js b/www/client/views/page-views/product/cloud-platform/manager/index.js similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/index.js rename to www/client/views/page-views/product/cloud-platform/manager/index.js diff --git a/client/views/page-views/product/cloud-platform/manager/lang.json b/www/client/views/page-views/product/cloud-platform/manager/lang.json similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/lang.json rename to www/client/views/page-views/product/cloud-platform/manager/lang.json diff --git a/client/views/page-views/product/cloud-platform/manager/style/index.less b/www/client/views/page-views/product/cloud-platform/manager/style/index.less similarity index 100% rename from client/views/page-views/product/cloud-platform/manager/style/index.less rename to www/client/views/page-views/product/cloud-platform/manager/style/index.less diff --git a/client/views/page-views/product/cloud-platform/operator/assets/1.png b/www/client/views/page-views/product/cloud-platform/operator/assets/1.png similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/assets/1.png rename to www/client/views/page-views/product/cloud-platform/operator/assets/1.png diff --git a/client/views/page-views/product/cloud-platform/operator/assets/2.png b/www/client/views/page-views/product/cloud-platform/operator/assets/2.png similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/assets/2.png rename to www/client/views/page-views/product/cloud-platform/operator/assets/2.png diff --git a/client/views/page-views/product/cloud-platform/operator/assets/3.png b/www/client/views/page-views/product/cloud-platform/operator/assets/3.png similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/assets/3.png rename to www/client/views/page-views/product/cloud-platform/operator/assets/3.png diff --git a/client/views/page-views/product/cloud-platform/operator/assets/4.png b/www/client/views/page-views/product/cloud-platform/operator/assets/4.png similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/assets/4.png rename to www/client/views/page-views/product/cloud-platform/operator/assets/4.png diff --git a/client/views/page-views/product/cloud-platform/operator/assets/5.png b/www/client/views/page-views/product/cloud-platform/operator/assets/5.png similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/assets/5.png rename to www/client/views/page-views/product/cloud-platform/operator/assets/5.png diff --git a/client/views/page-views/product/cloud-platform/operator/assets/6.png b/www/client/views/page-views/product/cloud-platform/operator/assets/6.png similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/assets/6.png rename to www/client/views/page-views/product/cloud-platform/operator/assets/6.png diff --git a/client/views/page-views/product/cloud-platform/operator/assets/7.png b/www/client/views/page-views/product/cloud-platform/operator/assets/7.png similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/assets/7.png rename to www/client/views/page-views/product/cloud-platform/operator/assets/7.png diff --git a/client/views/page-views/product/cloud-platform/operator/assets/banner2.jpg b/www/client/views/page-views/product/cloud-platform/operator/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/assets/banner2.jpg rename to www/client/views/page-views/product/cloud-platform/operator/assets/banner2.jpg diff --git a/client/views/page-views/product/cloud-platform/operator/assets/framework.png b/www/client/views/page-views/product/cloud-platform/operator/assets/framework.png similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/assets/framework.png rename to www/client/views/page-views/product/cloud-platform/operator/assets/framework.png diff --git a/client/views/page-views/product/cloud-platform/operator/index.ejs b/www/client/views/page-views/product/cloud-platform/operator/index.ejs similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/index.ejs rename to www/client/views/page-views/product/cloud-platform/operator/index.ejs diff --git a/client/views/page-views/product/cloud-platform/operator/index.js b/www/client/views/page-views/product/cloud-platform/operator/index.js similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/index.js rename to www/client/views/page-views/product/cloud-platform/operator/index.js diff --git a/client/views/page-views/product/cloud-platform/operator/lang.json b/www/client/views/page-views/product/cloud-platform/operator/lang.json similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/lang.json rename to www/client/views/page-views/product/cloud-platform/operator/lang.json diff --git a/client/views/page-views/product/cloud-platform/operator/style/index.less b/www/client/views/page-views/product/cloud-platform/operator/style/index.less similarity index 100% rename from client/views/page-views/product/cloud-platform/operator/style/index.less rename to www/client/views/page-views/product/cloud-platform/operator/style/index.less diff --git a/client/views/page-views/product/cloud-platform/product/assets/architecture.jpg b/www/client/views/page-views/product/cloud-platform/product/assets/architecture.jpg similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/architecture.jpg rename to www/client/views/page-views/product/cloud-platform/product/assets/architecture.jpg diff --git a/client/views/page-views/product/cloud-platform/product/assets/area.png b/www/client/views/page-views/product/cloud-platform/product/assets/area.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/area.png rename to www/client/views/page-views/product/cloud-platform/product/assets/area.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/background.png b/www/client/views/page-views/product/cloud-platform/product/assets/background.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/background.png rename to www/client/views/page-views/product/cloud-platform/product/assets/background.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/banner2.jpg b/www/client/views/page-views/product/cloud-platform/product/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/banner2.jpg rename to www/client/views/page-views/product/cloud-platform/product/assets/banner2.jpg diff --git a/client/views/page-views/product/cloud-platform/product/assets/cloud-architecture.png b/www/client/views/page-views/product/cloud-platform/product/assets/cloud-architecture.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/cloud-architecture.png rename to www/client/views/page-views/product/cloud-platform/product/assets/cloud-architecture.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/data-center.png b/www/client/views/page-views/product/cloud-platform/product/assets/data-center.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/data-center.png rename to www/client/views/page-views/product/cloud-platform/product/assets/data-center.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/data.png b/www/client/views/page-views/product/cloud-platform/product/assets/data.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/data.png rename to www/client/views/page-views/product/cloud-platform/product/assets/data.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/experience.png b/www/client/views/page-views/product/cloud-platform/product/assets/experience.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/experience.png rename to www/client/views/page-views/product/cloud-platform/product/assets/experience.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/feat1.png b/www/client/views/page-views/product/cloud-platform/product/assets/feat1.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/feat1.png rename to www/client/views/page-views/product/cloud-platform/product/assets/feat1.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/feat2.png b/www/client/views/page-views/product/cloud-platform/product/assets/feat2.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/feat2.png rename to www/client/views/page-views/product/cloud-platform/product/assets/feat2.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/feat3.png b/www/client/views/page-views/product/cloud-platform/product/assets/feat3.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/feat3.png rename to www/client/views/page-views/product/cloud-platform/product/assets/feat3.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/feat4.png b/www/client/views/page-views/product/cloud-platform/product/assets/feat4.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/feat4.png rename to www/client/views/page-views/product/cloud-platform/product/assets/feat4.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/feat5.png b/www/client/views/page-views/product/cloud-platform/product/assets/feat5.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/feat5.png rename to www/client/views/page-views/product/cloud-platform/product/assets/feat5.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/feat6.png b/www/client/views/page-views/product/cloud-platform/product/assets/feat6.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/feat6.png rename to www/client/views/page-views/product/cloud-platform/product/assets/feat6.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/future.png b/www/client/views/page-views/product/cloud-platform/product/assets/future.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/future.png rename to www/client/views/page-views/product/cloud-platform/product/assets/future.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/instance.png b/www/client/views/page-views/product/cloud-platform/product/assets/instance.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/instance.png rename to www/client/views/page-views/product/cloud-platform/product/assets/instance.png diff --git a/client/views/page-views/product/cloud-platform/product/assets/mac.png b/www/client/views/page-views/product/cloud-platform/product/assets/mac.png similarity index 100% rename from client/views/page-views/product/cloud-platform/product/assets/mac.png rename to www/client/views/page-views/product/cloud-platform/product/assets/mac.png diff --git a/client/views/page-views/product/cloud-platform/product/index.ejs b/www/client/views/page-views/product/cloud-platform/product/index.ejs similarity index 100% rename from client/views/page-views/product/cloud-platform/product/index.ejs rename to www/client/views/page-views/product/cloud-platform/product/index.ejs diff --git a/client/views/page-views/product/cloud-platform/product/index.js b/www/client/views/page-views/product/cloud-platform/product/index.js similarity index 100% rename from client/views/page-views/product/cloud-platform/product/index.js rename to www/client/views/page-views/product/cloud-platform/product/index.js diff --git a/client/views/page-views/product/cloud-platform/product/lang.json b/www/client/views/page-views/product/cloud-platform/product/lang.json similarity index 100% rename from client/views/page-views/product/cloud-platform/product/lang.json rename to www/client/views/page-views/product/cloud-platform/product/lang.json diff --git a/client/views/page-views/product/cloud-platform/product/style/index.less b/www/client/views/page-views/product/cloud-platform/product/style/index.less similarity index 100% rename from client/views/page-views/product/cloud-platform/product/style/index.less rename to www/client/views/page-views/product/cloud-platform/product/style/index.less diff --git a/client/views/page-views/product/cloud-security/assets/banner2.jpg b/www/client/views/page-views/product/cloud-security/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/cloud-security/assets/banner2.jpg rename to www/client/views/page-views/product/cloud-security/assets/banner2.jpg diff --git a/client/views/page-views/product/cloud-security/assets/feature1.png b/www/client/views/page-views/product/cloud-security/assets/feature1.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature1.png rename to www/client/views/page-views/product/cloud-security/assets/feature1.png diff --git a/client/views/page-views/product/cloud-security/assets/feature10.png b/www/client/views/page-views/product/cloud-security/assets/feature10.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature10.png rename to www/client/views/page-views/product/cloud-security/assets/feature10.png diff --git a/client/views/page-views/product/cloud-security/assets/feature11.png b/www/client/views/page-views/product/cloud-security/assets/feature11.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature11.png rename to www/client/views/page-views/product/cloud-security/assets/feature11.png diff --git a/client/views/page-views/product/cloud-security/assets/feature12.png b/www/client/views/page-views/product/cloud-security/assets/feature12.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature12.png rename to www/client/views/page-views/product/cloud-security/assets/feature12.png diff --git a/client/views/page-views/product/cloud-security/assets/feature13.png b/www/client/views/page-views/product/cloud-security/assets/feature13.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature13.png rename to www/client/views/page-views/product/cloud-security/assets/feature13.png diff --git a/client/views/page-views/product/cloud-security/assets/feature14.png b/www/client/views/page-views/product/cloud-security/assets/feature14.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature14.png rename to www/client/views/page-views/product/cloud-security/assets/feature14.png diff --git a/client/views/page-views/product/cloud-security/assets/feature15.png b/www/client/views/page-views/product/cloud-security/assets/feature15.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature15.png rename to www/client/views/page-views/product/cloud-security/assets/feature15.png diff --git a/client/views/page-views/product/cloud-security/assets/feature16.png b/www/client/views/page-views/product/cloud-security/assets/feature16.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature16.png rename to www/client/views/page-views/product/cloud-security/assets/feature16.png diff --git a/client/views/page-views/product/cloud-security/assets/feature17.png b/www/client/views/page-views/product/cloud-security/assets/feature17.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature17.png rename to www/client/views/page-views/product/cloud-security/assets/feature17.png diff --git a/client/views/page-views/product/cloud-security/assets/feature18.png b/www/client/views/page-views/product/cloud-security/assets/feature18.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature18.png rename to www/client/views/page-views/product/cloud-security/assets/feature18.png diff --git a/client/views/page-views/product/cloud-security/assets/feature19.png b/www/client/views/page-views/product/cloud-security/assets/feature19.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature19.png rename to www/client/views/page-views/product/cloud-security/assets/feature19.png diff --git a/client/views/page-views/product/cloud-security/assets/feature2.png b/www/client/views/page-views/product/cloud-security/assets/feature2.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature2.png rename to www/client/views/page-views/product/cloud-security/assets/feature2.png diff --git a/client/views/page-views/product/cloud-security/assets/feature20.png b/www/client/views/page-views/product/cloud-security/assets/feature20.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature20.png rename to www/client/views/page-views/product/cloud-security/assets/feature20.png diff --git a/client/views/page-views/product/cloud-security/assets/feature21.png b/www/client/views/page-views/product/cloud-security/assets/feature21.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature21.png rename to www/client/views/page-views/product/cloud-security/assets/feature21.png diff --git a/client/views/page-views/product/cloud-security/assets/feature3.png b/www/client/views/page-views/product/cloud-security/assets/feature3.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature3.png rename to www/client/views/page-views/product/cloud-security/assets/feature3.png diff --git a/client/views/page-views/product/cloud-security/assets/feature4.png b/www/client/views/page-views/product/cloud-security/assets/feature4.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature4.png rename to www/client/views/page-views/product/cloud-security/assets/feature4.png diff --git a/client/views/page-views/product/cloud-security/assets/feature5.png b/www/client/views/page-views/product/cloud-security/assets/feature5.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature5.png rename to www/client/views/page-views/product/cloud-security/assets/feature5.png diff --git a/client/views/page-views/product/cloud-security/assets/feature6.png b/www/client/views/page-views/product/cloud-security/assets/feature6.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature6.png rename to www/client/views/page-views/product/cloud-security/assets/feature6.png diff --git a/client/views/page-views/product/cloud-security/assets/feature7.png b/www/client/views/page-views/product/cloud-security/assets/feature7.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature7.png rename to www/client/views/page-views/product/cloud-security/assets/feature7.png diff --git a/client/views/page-views/product/cloud-security/assets/feature8.png b/www/client/views/page-views/product/cloud-security/assets/feature8.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature8.png rename to www/client/views/page-views/product/cloud-security/assets/feature8.png diff --git a/client/views/page-views/product/cloud-security/assets/feature9.png b/www/client/views/page-views/product/cloud-security/assets/feature9.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/feature9.png rename to www/client/views/page-views/product/cloud-security/assets/feature9.png diff --git a/client/views/page-views/product/cloud-security/assets/framework1.png b/www/client/views/page-views/product/cloud-security/assets/framework1.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/framework1.png rename to www/client/views/page-views/product/cloud-security/assets/framework1.png diff --git a/client/views/page-views/product/cloud-security/assets/framework2.png b/www/client/views/page-views/product/cloud-security/assets/framework2.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/framework2.png rename to www/client/views/page-views/product/cloud-security/assets/framework2.png diff --git a/client/views/page-views/product/cloud-security/assets/framework3.png b/www/client/views/page-views/product/cloud-security/assets/framework3.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/framework3.png rename to www/client/views/page-views/product/cloud-security/assets/framework3.png diff --git a/client/views/page-views/product/cloud-security/assets/function1-h.png b/www/client/views/page-views/product/cloud-security/assets/function1-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function1-h.png rename to www/client/views/page-views/product/cloud-security/assets/function1-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function10-h.png b/www/client/views/page-views/product/cloud-security/assets/function10-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function10-h.png rename to www/client/views/page-views/product/cloud-security/assets/function10-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function11-h.png b/www/client/views/page-views/product/cloud-security/assets/function11-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function11-h.png rename to www/client/views/page-views/product/cloud-security/assets/function11-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function12-h.png b/www/client/views/page-views/product/cloud-security/assets/function12-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function12-h.png rename to www/client/views/page-views/product/cloud-security/assets/function12-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function2-h.png b/www/client/views/page-views/product/cloud-security/assets/function2-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function2-h.png rename to www/client/views/page-views/product/cloud-security/assets/function2-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function3-h.png b/www/client/views/page-views/product/cloud-security/assets/function3-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function3-h.png rename to www/client/views/page-views/product/cloud-security/assets/function3-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function4-h.png b/www/client/views/page-views/product/cloud-security/assets/function4-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function4-h.png rename to www/client/views/page-views/product/cloud-security/assets/function4-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function5-h.png b/www/client/views/page-views/product/cloud-security/assets/function5-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function5-h.png rename to www/client/views/page-views/product/cloud-security/assets/function5-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function6-h.png b/www/client/views/page-views/product/cloud-security/assets/function6-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function6-h.png rename to www/client/views/page-views/product/cloud-security/assets/function6-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function7-h.png b/www/client/views/page-views/product/cloud-security/assets/function7-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function7-h.png rename to www/client/views/page-views/product/cloud-security/assets/function7-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function8-h.png b/www/client/views/page-views/product/cloud-security/assets/function8-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function8-h.png rename to www/client/views/page-views/product/cloud-security/assets/function8-h.png diff --git a/client/views/page-views/product/cloud-security/assets/function9-h.png b/www/client/views/page-views/product/cloud-security/assets/function9-h.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/function9-h.png rename to www/client/views/page-views/product/cloud-security/assets/function9-h.png diff --git a/client/views/page-views/product/cloud-security/assets/icon1.png b/www/client/views/page-views/product/cloud-security/assets/icon1.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/icon1.png rename to www/client/views/page-views/product/cloud-security/assets/icon1.png diff --git a/client/views/page-views/product/cloud-security/assets/icon2.png b/www/client/views/page-views/product/cloud-security/assets/icon2.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/icon2.png rename to www/client/views/page-views/product/cloud-security/assets/icon2.png diff --git a/client/views/page-views/product/cloud-security/assets/icon3.png b/www/client/views/page-views/product/cloud-security/assets/icon3.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/icon3.png rename to www/client/views/page-views/product/cloud-security/assets/icon3.png diff --git a/client/views/page-views/product/cloud-security/assets/icon4.png b/www/client/views/page-views/product/cloud-security/assets/icon4.png similarity index 100% rename from client/views/page-views/product/cloud-security/assets/icon4.png rename to www/client/views/page-views/product/cloud-security/assets/icon4.png diff --git a/client/views/page-views/product/cloud-security/index.ejs b/www/client/views/page-views/product/cloud-security/index.ejs similarity index 100% rename from client/views/page-views/product/cloud-security/index.ejs rename to www/client/views/page-views/product/cloud-security/index.ejs diff --git a/client/views/page-views/product/cloud-security/index.js b/www/client/views/page-views/product/cloud-security/index.js similarity index 100% rename from client/views/page-views/product/cloud-security/index.js rename to www/client/views/page-views/product/cloud-security/index.js diff --git a/client/views/page-views/product/cloud-security/lang.json b/www/client/views/page-views/product/cloud-security/lang.json similarity index 100% rename from client/views/page-views/product/cloud-security/lang.json rename to www/client/views/page-views/product/cloud-security/lang.json diff --git a/client/views/page-views/product/cloud-security/style/index.less b/www/client/views/page-views/product/cloud-security/style/index.less similarity index 100% rename from client/views/page-views/product/cloud-security/style/index.less rename to www/client/views/page-views/product/cloud-security/style/index.less diff --git a/client/views/page-views/product/environment/assets/11.png b/www/client/views/page-views/product/environment/assets/11.png similarity index 100% rename from client/views/page-views/product/environment/assets/11.png rename to www/client/views/page-views/product/environment/assets/11.png diff --git a/client/views/page-views/product/environment/assets/12.png b/www/client/views/page-views/product/environment/assets/12.png similarity index 100% rename from client/views/page-views/product/environment/assets/12.png rename to www/client/views/page-views/product/environment/assets/12.png diff --git a/client/views/page-views/product/environment/assets/13.png b/www/client/views/page-views/product/environment/assets/13.png similarity index 100% rename from client/views/page-views/product/environment/assets/13.png rename to www/client/views/page-views/product/environment/assets/13.png diff --git a/client/views/page-views/product/environment/assets/2.png b/www/client/views/page-views/product/environment/assets/2.png similarity index 100% rename from client/views/page-views/product/environment/assets/2.png rename to www/client/views/page-views/product/environment/assets/2.png diff --git a/client/views/page-views/product/environment/assets/banner2.jpg b/www/client/views/page-views/product/environment/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/environment/assets/banner2.jpg rename to www/client/views/page-views/product/environment/assets/banner2.jpg diff --git a/client/views/page-views/product/environment/assets/bg_framework1.png b/www/client/views/page-views/product/environment/assets/bg_framework1.png similarity index 100% rename from client/views/page-views/product/environment/assets/bg_framework1.png rename to www/client/views/page-views/product/environment/assets/bg_framework1.png diff --git a/client/views/page-views/product/environment/assets/bg_framework2.png b/www/client/views/page-views/product/environment/assets/bg_framework2.png similarity index 100% rename from client/views/page-views/product/environment/assets/bg_framework2.png rename to www/client/views/page-views/product/environment/assets/bg_framework2.png diff --git a/client/views/page-views/product/environment/assets/bg_framework3.png b/www/client/views/page-views/product/environment/assets/bg_framework3.png similarity index 100% rename from client/views/page-views/product/environment/assets/bg_framework3.png rename to www/client/views/page-views/product/environment/assets/bg_framework3.png diff --git a/client/views/page-views/product/environment/assets/cabinet.png b/www/client/views/page-views/product/environment/assets/cabinet.png similarity index 100% rename from client/views/page-views/product/environment/assets/cabinet.png rename to www/client/views/page-views/product/environment/assets/cabinet.png diff --git a/client/views/page-views/product/environment/assets/framework@v2.0.png b/www/client/views/page-views/product/environment/assets/framework@v2.0.png similarity index 100% rename from client/views/page-views/product/environment/assets/framework@v2.0.png rename to www/client/views/page-views/product/environment/assets/framework@v2.0.png diff --git a/client/views/page-views/product/environment/assets/icon1.png b/www/client/views/page-views/product/environment/assets/icon1.png similarity index 100% rename from client/views/page-views/product/environment/assets/icon1.png rename to www/client/views/page-views/product/environment/assets/icon1.png diff --git a/client/views/page-views/product/environment/assets/icon2.png b/www/client/views/page-views/product/environment/assets/icon2.png similarity index 100% rename from client/views/page-views/product/environment/assets/icon2.png rename to www/client/views/page-views/product/environment/assets/icon2.png diff --git a/client/views/page-views/product/environment/assets/icon3.png b/www/client/views/page-views/product/environment/assets/icon3.png similarity index 100% rename from client/views/page-views/product/environment/assets/icon3.png rename to www/client/views/page-views/product/environment/assets/icon3.png diff --git a/client/views/page-views/product/environment/assets/icon4.png b/www/client/views/page-views/product/environment/assets/icon4.png similarity index 100% rename from client/views/page-views/product/environment/assets/icon4.png rename to www/client/views/page-views/product/environment/assets/icon4.png diff --git a/client/views/page-views/product/environment/assets/icon5.png b/www/client/views/page-views/product/environment/assets/icon5.png similarity index 100% rename from client/views/page-views/product/environment/assets/icon5.png rename to www/client/views/page-views/product/environment/assets/icon5.png diff --git a/client/views/page-views/product/environment/assets/icon6.png b/www/client/views/page-views/product/environment/assets/icon6.png similarity index 100% rename from client/views/page-views/product/environment/assets/icon6.png rename to www/client/views/page-views/product/environment/assets/icon6.png diff --git a/client/views/page-views/product/environment/index.ejs b/www/client/views/page-views/product/environment/index.ejs similarity index 100% rename from client/views/page-views/product/environment/index.ejs rename to www/client/views/page-views/product/environment/index.ejs diff --git a/client/views/page-views/product/environment/index.js b/www/client/views/page-views/product/environment/index.js similarity index 100% rename from client/views/page-views/product/environment/index.js rename to www/client/views/page-views/product/environment/index.js diff --git a/client/views/page-views/product/environment/lang.json b/www/client/views/page-views/product/environment/lang.json similarity index 100% rename from client/views/page-views/product/environment/lang.json rename to www/client/views/page-views/product/environment/lang.json diff --git a/client/views/page-views/product/environment/style/index.less b/www/client/views/page-views/product/environment/style/index.less similarity index 100% rename from client/views/page-views/product/environment/style/index.less rename to www/client/views/page-views/product/environment/style/index.less diff --git a/client/views/page-views/product/hardware/blade-server/assets/-1.png b/www/client/views/page-views/product/hardware/blade-server/assets/-1.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/-1.png rename to www/client/views/page-views/product/hardware/blade-server/assets/-1.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/-2.png b/www/client/views/page-views/product/hardware/blade-server/assets/-2.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/-2.png rename to www/client/views/page-views/product/hardware/blade-server/assets/-2.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/-3.png b/www/client/views/page-views/product/hardware/blade-server/assets/-3.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/-3.png rename to www/client/views/page-views/product/hardware/blade-server/assets/-3.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/1-1.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/1-1.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/1-1.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/1-1.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/1.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/1.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/1.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/1.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/1.png b/www/client/views/page-views/product/hardware/blade-server/assets/1.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/1.png rename to www/client/views/page-views/product/hardware/blade-server/assets/1.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/11.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/11.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/11.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/11.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/1111.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/1111.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/1111.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/1111.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/17.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/17.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/17.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/17.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/2.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/2.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/2.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/2.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/2234.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/2234.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/2234.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/2234.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/3.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/3.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/3.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/3.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/333.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/333.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/333.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/333.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/4.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/4.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/4.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/4.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/4.png b/www/client/views/page-views/product/hardware/blade-server/assets/4.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/4.png rename to www/client/views/page-views/product/hardware/blade-server/assets/4.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/5.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/5.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/5.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/5.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/5.png b/www/client/views/page-views/product/hardware/blade-server/assets/5.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/5.png rename to www/client/views/page-views/product/hardware/blade-server/assets/5.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/5432.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/5432.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/5432.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/5432.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/55.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/55.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/55.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/55.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/6.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/6.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/6.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/6.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/6.png b/www/client/views/page-views/product/hardware/blade-server/assets/6.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/6.png rename to www/client/views/page-views/product/hardware/blade-server/assets/6.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/6543.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/6543.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/6543.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/6543.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/7.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/7.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/7.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/7.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/8.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/8.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/8.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/8.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/9.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/9.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/9.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/9.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/Group-2.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/Group-2.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/Group-2.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/Group-2.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/Group-9.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/Group-9.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/Group-9.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/Group-9.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/banner2.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/banner2.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/banner2.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/blue.png b/www/client/views/page-views/product/hardware/blade-server/assets/blue.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/blue.png rename to www/client/views/page-views/product/hardware/blade-server/assets/blue.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/blue_1.png b/www/client/views/page-views/product/hardware/blade-server/assets/blue_1.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/blue_1.png rename to www/client/views/page-views/product/hardware/blade-server/assets/blue_1.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/china_con_img02-copy-2.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/china_con_img02-copy-2.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/china_con_img02-copy-2.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/china_con_img02-copy-2.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/china_con_img02-copy.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/china_con_img02-copy.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/china_con_img02-copy.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/china_con_img02-copy.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/china_con_img02.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/china_con_img02.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/china_con_img02.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/china_con_img02.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/china_con_img03.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/china_con_img03.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/china_con_img03.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/china_con_img03.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/china_con_img05_02.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/china_con_img05_02.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/china_con_img05_02.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/china_con_img05_02.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/china_con_img06.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/china_con_img06.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/china_con_img06.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/china_con_img06.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/color.png b/www/client/views/page-views/product/hardware/blade-server/assets/color.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/color.png rename to www/client/views/page-views/product/hardware/blade-server/assets/color.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/foot_1.png b/www/client/views/page-views/product/hardware/blade-server/assets/foot_1.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/foot_1.png rename to www/client/views/page-views/product/hardware/blade-server/assets/foot_1.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/foot_2.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/foot_2.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/foot_2.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/foot_2.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/green.png b/www/client/views/page-views/product/hardware/blade-server/assets/green.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/green.png rename to www/client/views/page-views/product/hardware/blade-server/assets/green.png diff --git a/client/views/page-views/product/hardware/blade-server/assets/interface.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/interface.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/interface.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/interface.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/tr4120.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/tr4120.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/tr4120.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/tr4120.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/tr630.jpg b/www/client/views/page-views/product/hardware/blade-server/assets/tr630.jpg similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/tr630.jpg rename to www/client/views/page-views/product/hardware/blade-server/assets/tr630.jpg diff --git a/client/views/page-views/product/hardware/blade-server/assets/yellow.png b/www/client/views/page-views/product/hardware/blade-server/assets/yellow.png similarity index 100% rename from client/views/page-views/product/hardware/blade-server/assets/yellow.png rename to www/client/views/page-views/product/hardware/blade-server/assets/yellow.png diff --git "a/client/views/page-views/product/hardware/blade-server/assets/\346\212\225\345\275\2614.jpg" "b/www/client/views/page-views/product/hardware/blade-server/assets/\346\212\225\345\275\2614.jpg" similarity index 100% rename from "client/views/page-views/product/hardware/blade-server/assets/\346\212\225\345\275\2614.jpg" rename to "www/client/views/page-views/product/hardware/blade-server/assets/\346\212\225\345\275\2614.jpg" diff --git a/client/views/page-views/product/hardware/blade-server/index.ejs b/www/client/views/page-views/product/hardware/blade-server/index.ejs similarity index 100% rename from client/views/page-views/product/hardware/blade-server/index.ejs rename to www/client/views/page-views/product/hardware/blade-server/index.ejs diff --git a/client/views/page-views/product/hardware/blade-server/index.js b/www/client/views/page-views/product/hardware/blade-server/index.js similarity index 100% rename from client/views/page-views/product/hardware/blade-server/index.js rename to www/client/views/page-views/product/hardware/blade-server/index.js diff --git a/client/views/page-views/product/hardware/blade-server/lang.json b/www/client/views/page-views/product/hardware/blade-server/lang.json similarity index 100% rename from client/views/page-views/product/hardware/blade-server/lang.json rename to www/client/views/page-views/product/hardware/blade-server/lang.json diff --git a/client/views/page-views/product/hardware/blade-server/style/index.less b/www/client/views/page-views/product/hardware/blade-server/style/index.less similarity index 100% rename from client/views/page-views/product/hardware/blade-server/style/index.less rename to www/client/views/page-views/product/hardware/blade-server/style/index.less diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/1.jpg b/www/client/views/page-views/product/hardware/enterprise-storage/assets/1.jpg similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/1.jpg rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/1.jpg diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/Group-2.jpg b/www/client/views/page-views/product/hardware/enterprise-storage/assets/Group-2.jpg similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/Group-2.jpg rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/Group-2.jpg diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/banner2.jpg b/www/client/views/page-views/product/hardware/enterprise-storage/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/banner2.jpg rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/banner2.jpg diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/blade.png b/www/client/views/page-views/product/hardware/enterprise-storage/assets/blade.png similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/blade.png rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/blade.png diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/blue.png b/www/client/views/page-views/product/hardware/enterprise-storage/assets/blue.png similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/blue.png rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/blue.png diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/blue_1.png b/www/client/views/page-views/product/hardware/enterprise-storage/assets/blue_1.png similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/blue_1.png rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/blue_1.png diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02-copy-2.jpg b/www/client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02-copy-2.jpg similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02-copy-2.jpg rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02-copy-2.jpg diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02-copy.jpg b/www/client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02-copy.jpg similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02-copy.jpg rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02-copy.jpg diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02.jpg b/www/client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02.jpg similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02.jpg rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/china_con_img02.jpg diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/color.png b/www/client/views/page-views/product/hardware/enterprise-storage/assets/color.png similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/color.png rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/color.png diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/green.png b/www/client/views/page-views/product/hardware/enterprise-storage/assets/green.png similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/green.png rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/green.png diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/mobile_7.png b/www/client/views/page-views/product/hardware/enterprise-storage/assets/mobile_7.png similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/mobile_7.png rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/mobile_7.png diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/rack.png b/www/client/views/page-views/product/hardware/enterprise-storage/assets/rack.png similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/rack.png rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/rack.png diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/tower.png b/www/client/views/page-views/product/hardware/enterprise-storage/assets/tower.png similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/tower.png rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/tower.png diff --git a/client/views/page-views/product/hardware/enterprise-storage/assets/yellow.png b/www/client/views/page-views/product/hardware/enterprise-storage/assets/yellow.png similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/assets/yellow.png rename to www/client/views/page-views/product/hardware/enterprise-storage/assets/yellow.png diff --git "a/client/views/page-views/product/hardware/enterprise-storage/assets/\345\261\217\345\271\225\345\277\253\347\205\247-2017-10-24-\344\270\213\345\215\2103.53.55.jpg" "b/www/client/views/page-views/product/hardware/enterprise-storage/assets/\345\261\217\345\271\225\345\277\253\347\205\247-2017-10-24-\344\270\213\345\215\2103.53.55.jpg" similarity index 100% rename from "client/views/page-views/product/hardware/enterprise-storage/assets/\345\261\217\345\271\225\345\277\253\347\205\247-2017-10-24-\344\270\213\345\215\2103.53.55.jpg" rename to "www/client/views/page-views/product/hardware/enterprise-storage/assets/\345\261\217\345\271\225\345\277\253\347\205\247-2017-10-24-\344\270\213\345\215\2103.53.55.jpg" diff --git "a/client/views/page-views/product/hardware/enterprise-storage/assets/\345\261\217\345\271\225\345\277\253\347\205\247-2017-10-24-\344\270\213\345\215\2107.18.17.jpg" "b/www/client/views/page-views/product/hardware/enterprise-storage/assets/\345\261\217\345\271\225\345\277\253\347\205\247-2017-10-24-\344\270\213\345\215\2107.18.17.jpg" similarity index 100% rename from "client/views/page-views/product/hardware/enterprise-storage/assets/\345\261\217\345\271\225\345\277\253\347\205\247-2017-10-24-\344\270\213\345\215\2107.18.17.jpg" rename to "www/client/views/page-views/product/hardware/enterprise-storage/assets/\345\261\217\345\271\225\345\277\253\347\205\247-2017-10-24-\344\270\213\345\215\2107.18.17.jpg" diff --git a/client/views/page-views/product/hardware/enterprise-storage/index.ejs b/www/client/views/page-views/product/hardware/enterprise-storage/index.ejs similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/index.ejs rename to www/client/views/page-views/product/hardware/enterprise-storage/index.ejs diff --git a/client/views/page-views/product/hardware/enterprise-storage/index.js b/www/client/views/page-views/product/hardware/enterprise-storage/index.js similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/index.js rename to www/client/views/page-views/product/hardware/enterprise-storage/index.js diff --git a/client/views/page-views/product/hardware/enterprise-storage/lang.json b/www/client/views/page-views/product/hardware/enterprise-storage/lang.json similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/lang.json rename to www/client/views/page-views/product/hardware/enterprise-storage/lang.json diff --git a/client/views/page-views/product/hardware/enterprise-storage/style/index.less b/www/client/views/page-views/product/hardware/enterprise-storage/style/index.less similarity index 100% rename from client/views/page-views/product/hardware/enterprise-storage/style/index.less rename to www/client/views/page-views/product/hardware/enterprise-storage/style/index.less diff --git a/client/views/page-views/product/hardware/rack-server/assets/-1.png b/www/client/views/page-views/product/hardware/rack-server/assets/-1.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/-1.png rename to www/client/views/page-views/product/hardware/rack-server/assets/-1.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/-2.png b/www/client/views/page-views/product/hardware/rack-server/assets/-2.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/-2.png rename to www/client/views/page-views/product/hardware/rack-server/assets/-2.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/-3.png b/www/client/views/page-views/product/hardware/rack-server/assets/-3.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/-3.png rename to www/client/views/page-views/product/hardware/rack-server/assets/-3.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/-4.png b/www/client/views/page-views/product/hardware/rack-server/assets/-4.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/-4.png rename to www/client/views/page-views/product/hardware/rack-server/assets/-4.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/-5.png b/www/client/views/page-views/product/hardware/rack-server/assets/-5.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/-5.png rename to www/client/views/page-views/product/hardware/rack-server/assets/-5.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/1-1.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/1-1.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/1-1.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/1-1.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/1.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/1.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/1.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/1.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/11.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/11.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/11.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/11.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/1111.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/1111.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/1111.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/1111.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/2.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/2.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/2.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/2.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/2234.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/2234.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/2234.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/2234.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/3.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/3.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/3.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/3.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/333.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/333.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/333.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/333.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/4.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/4.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/4.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/4.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/5.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/5.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/5.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/5.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/5432.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/5432.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/5432.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/5432.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/6.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/6.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/6.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/6.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/6543.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/6543.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/6543.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/6543.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/7.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/7.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/7.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/7.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/8.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/8.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/8.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/8.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/9.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/9.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/9.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/9.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/Oval 11 Copy 6.png b/www/client/views/page-views/product/hardware/rack-server/assets/Oval 11 Copy 6.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/Oval 11 Copy 6.png rename to www/client/views/page-views/product/hardware/rack-server/assets/Oval 11 Copy 6.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/banner2.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/banner2.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/banner2.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/blade.png b/www/client/views/page-views/product/hardware/rack-server/assets/blade.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/blade.png rename to www/client/views/page-views/product/hardware/rack-server/assets/blade.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/blue.png b/www/client/views/page-views/product/hardware/rack-server/assets/blue.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/blue.png rename to www/client/views/page-views/product/hardware/rack-server/assets/blue.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/blue_1.png b/www/client/views/page-views/product/hardware/rack-server/assets/blue_1.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/blue_1.png rename to www/client/views/page-views/product/hardware/rack-server/assets/blue_1.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/china_con_img02-copy-2.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/china_con_img02-copy-2.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/china_con_img02-copy-2.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/china_con_img02-copy-2.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/china_con_img02-copy.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/china_con_img02-copy.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/china_con_img02-copy.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/china_con_img02-copy.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/china_con_img02.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/china_con_img02.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/china_con_img02.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/china_con_img02.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/china_con_img05_02.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/china_con_img05_02.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/china_con_img05_02.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/china_con_img05_02.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/color.png b/www/client/views/page-views/product/hardware/rack-server/assets/color.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/color.png rename to www/client/views/page-views/product/hardware/rack-server/assets/color.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/ent.png b/www/client/views/page-views/product/hardware/rack-server/assets/ent.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/ent.png rename to www/client/views/page-views/product/hardware/rack-server/assets/ent.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/foot_1.png b/www/client/views/page-views/product/hardware/rack-server/assets/foot_1.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/foot_1.png rename to www/client/views/page-views/product/hardware/rack-server/assets/foot_1.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/foot_2.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/foot_2.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/foot_2.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/foot_2.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/green.png b/www/client/views/page-views/product/hardware/rack-server/assets/green.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/green.png rename to www/client/views/page-views/product/hardware/rack-server/assets/green.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/interface.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/interface.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/interface.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/interface.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/mobile_6.png b/www/client/views/page-views/product/hardware/rack-server/assets/mobile_6.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/mobile_6.png rename to www/client/views/page-views/product/hardware/rack-server/assets/mobile_6.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/tower.png b/www/client/views/page-views/product/hardware/rack-server/assets/tower.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/tower.png rename to www/client/views/page-views/product/hardware/rack-server/assets/tower.png diff --git a/client/views/page-views/product/hardware/rack-server/assets/tr630.jpg b/www/client/views/page-views/product/hardware/rack-server/assets/tr630.jpg similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/tr630.jpg rename to www/client/views/page-views/product/hardware/rack-server/assets/tr630.jpg diff --git a/client/views/page-views/product/hardware/rack-server/assets/yellow.png b/www/client/views/page-views/product/hardware/rack-server/assets/yellow.png similarity index 100% rename from client/views/page-views/product/hardware/rack-server/assets/yellow.png rename to www/client/views/page-views/product/hardware/rack-server/assets/yellow.png diff --git a/client/views/page-views/product/hardware/rack-server/index.ejs b/www/client/views/page-views/product/hardware/rack-server/index.ejs similarity index 100% rename from client/views/page-views/product/hardware/rack-server/index.ejs rename to www/client/views/page-views/product/hardware/rack-server/index.ejs diff --git a/client/views/page-views/product/hardware/rack-server/index.js b/www/client/views/page-views/product/hardware/rack-server/index.js similarity index 100% rename from client/views/page-views/product/hardware/rack-server/index.js rename to www/client/views/page-views/product/hardware/rack-server/index.js diff --git a/client/views/page-views/product/hardware/rack-server/lang.json b/www/client/views/page-views/product/hardware/rack-server/lang.json similarity index 100% rename from client/views/page-views/product/hardware/rack-server/lang.json rename to www/client/views/page-views/product/hardware/rack-server/lang.json diff --git a/client/views/page-views/product/hardware/rack-server/style/index.less b/www/client/views/page-views/product/hardware/rack-server/style/index.less similarity index 100% rename from client/views/page-views/product/hardware/rack-server/style/index.less rename to www/client/views/page-views/product/hardware/rack-server/style/index.less diff --git a/client/views/page-views/product/hardware/tower-server/assets/1-1.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/1-1.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/1-1.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/1-1.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/1.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/1.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/1.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/1.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/11.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/11.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/11.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/11.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/1111.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/1111.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/1111.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/1111.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/11222.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/11222.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/11222.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/11222.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/2.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/2.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/2.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/2.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/2234.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/2234.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/2234.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/2234.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/3.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/3.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/3.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/3.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/333.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/333.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/333.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/333.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/4.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/4.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/4.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/4.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/5.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/5.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/5.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/5.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/5432.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/5432.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/5432.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/5432.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/6.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/6.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/6.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/6.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/6543.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/6543.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/6543.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/6543.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/7.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/7.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/7.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/7.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/8.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/8.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/8.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/8.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/9.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/9.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/9.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/9.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/banner2.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/banner2.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/banner2.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/blade.png b/www/client/views/page-views/product/hardware/tower-server/assets/blade.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/blade.png rename to www/client/views/page-views/product/hardware/tower-server/assets/blade.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/blue.png b/www/client/views/page-views/product/hardware/tower-server/assets/blue.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/blue.png rename to www/client/views/page-views/product/hardware/tower-server/assets/blue.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/blue_1.png b/www/client/views/page-views/product/hardware/tower-server/assets/blue_1.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/blue_1.png rename to www/client/views/page-views/product/hardware/tower-server/assets/blue_1.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/china_con_img02-copy-2.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/china_con_img02-copy-2.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/china_con_img02-copy-2.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/china_con_img02-copy-2.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/china_con_img02-copy.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/china_con_img02-copy.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/china_con_img02-copy.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/china_con_img02-copy.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/china_con_img02.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/china_con_img02.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/china_con_img02.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/china_con_img02.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/china_con_img05_02.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/china_con_img05_02.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/china_con_img05_02.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/china_con_img05_02.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/color.png b/www/client/views/page-views/product/hardware/tower-server/assets/color.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/color.png rename to www/client/views/page-views/product/hardware/tower-server/assets/color.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/ent.png b/www/client/views/page-views/product/hardware/tower-server/assets/ent.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/ent.png rename to www/client/views/page-views/product/hardware/tower-server/assets/ent.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/foot_1.png b/www/client/views/page-views/product/hardware/tower-server/assets/foot_1.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/foot_1.png rename to www/client/views/page-views/product/hardware/tower-server/assets/foot_1.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/foot_2.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/foot_2.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/foot_2.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/foot_2.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/green.png b/www/client/views/page-views/product/hardware/tower-server/assets/green.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/green.png rename to www/client/views/page-views/product/hardware/tower-server/assets/green.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/interface.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/interface.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/interface.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/interface.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/mobile_1.png b/www/client/views/page-views/product/hardware/tower-server/assets/mobile_1.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/mobile_1.png rename to www/client/views/page-views/product/hardware/tower-server/assets/mobile_1.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/mobile_2.png b/www/client/views/page-views/product/hardware/tower-server/assets/mobile_2.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/mobile_2.png rename to www/client/views/page-views/product/hardware/tower-server/assets/mobile_2.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/mobile_3.png b/www/client/views/page-views/product/hardware/tower-server/assets/mobile_3.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/mobile_3.png rename to www/client/views/page-views/product/hardware/tower-server/assets/mobile_3.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/rack.png b/www/client/views/page-views/product/hardware/tower-server/assets/rack.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/rack.png rename to www/client/views/page-views/product/hardware/tower-server/assets/rack.png diff --git a/client/views/page-views/product/hardware/tower-server/assets/tr630.jpg b/www/client/views/page-views/product/hardware/tower-server/assets/tr630.jpg similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/tr630.jpg rename to www/client/views/page-views/product/hardware/tower-server/assets/tr630.jpg diff --git a/client/views/page-views/product/hardware/tower-server/assets/yellow.png b/www/client/views/page-views/product/hardware/tower-server/assets/yellow.png similarity index 100% rename from client/views/page-views/product/hardware/tower-server/assets/yellow.png rename to www/client/views/page-views/product/hardware/tower-server/assets/yellow.png diff --git a/client/views/page-views/product/hardware/tower-server/index.ejs b/www/client/views/page-views/product/hardware/tower-server/index.ejs similarity index 100% rename from client/views/page-views/product/hardware/tower-server/index.ejs rename to www/client/views/page-views/product/hardware/tower-server/index.ejs diff --git a/client/views/page-views/product/hardware/tower-server/index.js b/www/client/views/page-views/product/hardware/tower-server/index.js similarity index 100% rename from client/views/page-views/product/hardware/tower-server/index.js rename to www/client/views/page-views/product/hardware/tower-server/index.js diff --git a/client/views/page-views/product/hardware/tower-server/lang.json b/www/client/views/page-views/product/hardware/tower-server/lang.json similarity index 100% rename from client/views/page-views/product/hardware/tower-server/lang.json rename to www/client/views/page-views/product/hardware/tower-server/lang.json diff --git a/client/views/page-views/product/hardware/tower-server/style/index.less b/www/client/views/page-views/product/hardware/tower-server/style/index.less similarity index 100% rename from client/views/page-views/product/hardware/tower-server/style/index.less rename to www/client/views/page-views/product/hardware/tower-server/style/index.less diff --git a/client/views/page-views/product/om-management/assets/1.png b/www/client/views/page-views/product/om-management/assets/1.png similarity index 100% rename from client/views/page-views/product/om-management/assets/1.png rename to www/client/views/page-views/product/om-management/assets/1.png diff --git a/client/views/page-views/product/om-management/assets/2-2.png b/www/client/views/page-views/product/om-management/assets/2-2.png similarity index 100% rename from client/views/page-views/product/om-management/assets/2-2.png rename to www/client/views/page-views/product/om-management/assets/2-2.png diff --git a/client/views/page-views/product/om-management/assets/2-3.png b/www/client/views/page-views/product/om-management/assets/2-3.png similarity index 100% rename from client/views/page-views/product/om-management/assets/2-3.png rename to www/client/views/page-views/product/om-management/assets/2-3.png diff --git a/client/views/page-views/product/om-management/assets/2-4.png b/www/client/views/page-views/product/om-management/assets/2-4.png similarity index 100% rename from client/views/page-views/product/om-management/assets/2-4.png rename to www/client/views/page-views/product/om-management/assets/2-4.png diff --git a/client/views/page-views/product/om-management/assets/2-5.png b/www/client/views/page-views/product/om-management/assets/2-5.png similarity index 100% rename from client/views/page-views/product/om-management/assets/2-5.png rename to www/client/views/page-views/product/om-management/assets/2-5.png diff --git a/client/views/page-views/product/om-management/assets/2-6.png b/www/client/views/page-views/product/om-management/assets/2-6.png similarity index 100% rename from client/views/page-views/product/om-management/assets/2-6.png rename to www/client/views/page-views/product/om-management/assets/2-6.png diff --git a/client/views/page-views/product/om-management/assets/2.png b/www/client/views/page-views/product/om-management/assets/2.png similarity index 100% rename from client/views/page-views/product/om-management/assets/2.png rename to www/client/views/page-views/product/om-management/assets/2.png diff --git a/client/views/page-views/product/om-management/assets/3-1.png b/www/client/views/page-views/product/om-management/assets/3-1.png similarity index 100% rename from client/views/page-views/product/om-management/assets/3-1.png rename to www/client/views/page-views/product/om-management/assets/3-1.png diff --git a/client/views/page-views/product/om-management/assets/3-2.png b/www/client/views/page-views/product/om-management/assets/3-2.png similarity index 100% rename from client/views/page-views/product/om-management/assets/3-2.png rename to www/client/views/page-views/product/om-management/assets/3-2.png diff --git a/client/views/page-views/product/om-management/assets/3-3.png b/www/client/views/page-views/product/om-management/assets/3-3.png similarity index 100% rename from client/views/page-views/product/om-management/assets/3-3.png rename to www/client/views/page-views/product/om-management/assets/3-3.png diff --git a/client/views/page-views/product/om-management/assets/3.png b/www/client/views/page-views/product/om-management/assets/3.png similarity index 100% rename from client/views/page-views/product/om-management/assets/3.png rename to www/client/views/page-views/product/om-management/assets/3.png diff --git a/client/views/page-views/product/om-management/assets/5.png b/www/client/views/page-views/product/om-management/assets/5.png similarity index 100% rename from client/views/page-views/product/om-management/assets/5.png rename to www/client/views/page-views/product/om-management/assets/5.png diff --git a/client/views/page-views/product/om-management/assets/6.png b/www/client/views/page-views/product/om-management/assets/6.png similarity index 100% rename from client/views/page-views/product/om-management/assets/6.png rename to www/client/views/page-views/product/om-management/assets/6.png diff --git a/client/views/page-views/product/om-management/assets/api.png b/www/client/views/page-views/product/om-management/assets/api.png similarity index 100% rename from client/views/page-views/product/om-management/assets/api.png rename to www/client/views/page-views/product/om-management/assets/api.png diff --git a/client/views/page-views/product/om-management/assets/banner2.jpg b/www/client/views/page-views/product/om-management/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/om-management/assets/banner2.jpg rename to www/client/views/page-views/product/om-management/assets/banner2.jpg diff --git "a/client/views/page-views/product/om-management/assets/\351\253\230\347\272\247\346\212\200\346\234\257\346\224\257\346\214\201.png" "b/www/client/views/page-views/product/om-management/assets/\351\253\230\347\272\247\346\212\200\346\234\257\346\224\257\346\214\201.png" similarity index 100% rename from "client/views/page-views/product/om-management/assets/\351\253\230\347\272\247\346\212\200\346\234\257\346\224\257\346\214\201.png" rename to "www/client/views/page-views/product/om-management/assets/\351\253\230\347\272\247\346\212\200\346\234\257\346\224\257\346\214\201.png" diff --git a/client/views/page-views/product/om-management/index.ejs b/www/client/views/page-views/product/om-management/index.ejs similarity index 100% rename from client/views/page-views/product/om-management/index.ejs rename to www/client/views/page-views/product/om-management/index.ejs diff --git a/client/views/page-views/product/om-management/index.js b/www/client/views/page-views/product/om-management/index.js similarity index 100% rename from client/views/page-views/product/om-management/index.js rename to www/client/views/page-views/product/om-management/index.js diff --git a/client/views/page-views/product/om-management/lang.json b/www/client/views/page-views/product/om-management/lang.json similarity index 100% rename from client/views/page-views/product/om-management/lang.json rename to www/client/views/page-views/product/om-management/lang.json diff --git a/client/views/page-views/product/om-management/style/index.less b/www/client/views/page-views/product/om-management/style/index.less similarity index 100% rename from client/views/page-views/product/om-management/style/index.less rename to www/client/views/page-views/product/om-management/style/index.less diff --git a/client/views/page-views/product/storage/assets/1.png b/www/client/views/page-views/product/storage/assets/1.png similarity index 100% rename from client/views/page-views/product/storage/assets/1.png rename to www/client/views/page-views/product/storage/assets/1.png diff --git a/client/views/page-views/product/storage/assets/2.png b/www/client/views/page-views/product/storage/assets/2.png similarity index 100% rename from client/views/page-views/product/storage/assets/2.png rename to www/client/views/page-views/product/storage/assets/2.png diff --git a/client/views/page-views/product/storage/assets/3.png b/www/client/views/page-views/product/storage/assets/3.png similarity index 100% rename from client/views/page-views/product/storage/assets/3.png rename to www/client/views/page-views/product/storage/assets/3.png diff --git a/client/views/page-views/product/storage/assets/4.png b/www/client/views/page-views/product/storage/assets/4.png similarity index 100% rename from client/views/page-views/product/storage/assets/4.png rename to www/client/views/page-views/product/storage/assets/4.png diff --git a/client/views/page-views/product/storage/assets/5.png b/www/client/views/page-views/product/storage/assets/5.png similarity index 100% rename from client/views/page-views/product/storage/assets/5.png rename to www/client/views/page-views/product/storage/assets/5.png diff --git a/client/views/page-views/product/storage/assets/6.png b/www/client/views/page-views/product/storage/assets/6.png similarity index 100% rename from client/views/page-views/product/storage/assets/6.png rename to www/client/views/page-views/product/storage/assets/6.png diff --git a/client/views/page-views/product/storage/assets/7.png b/www/client/views/page-views/product/storage/assets/7.png similarity index 100% rename from client/views/page-views/product/storage/assets/7.png rename to www/client/views/page-views/product/storage/assets/7.png diff --git a/client/views/page-views/product/storage/assets/8.png b/www/client/views/page-views/product/storage/assets/8.png similarity index 100% rename from client/views/page-views/product/storage/assets/8.png rename to www/client/views/page-views/product/storage/assets/8.png diff --git a/client/views/page-views/product/storage/assets/banner2.jpg b/www/client/views/page-views/product/storage/assets/banner2.jpg similarity index 100% rename from client/views/page-views/product/storage/assets/banner2.jpg rename to www/client/views/page-views/product/storage/assets/banner2.jpg diff --git a/client/views/page-views/product/storage/assets/framework1@v2.0.png b/www/client/views/page-views/product/storage/assets/framework1@v2.0.png similarity index 100% rename from client/views/page-views/product/storage/assets/framework1@v2.0.png rename to www/client/views/page-views/product/storage/assets/framework1@v2.0.png diff --git a/client/views/page-views/product/storage/assets/framework2@v2.0.png b/www/client/views/page-views/product/storage/assets/framework2@v2.0.png similarity index 100% rename from client/views/page-views/product/storage/assets/framework2@v2.0.png rename to www/client/views/page-views/product/storage/assets/framework2@v2.0.png diff --git a/client/views/page-views/product/storage/assets/storage1.png b/www/client/views/page-views/product/storage/assets/storage1.png similarity index 100% rename from client/views/page-views/product/storage/assets/storage1.png rename to www/client/views/page-views/product/storage/assets/storage1.png diff --git a/client/views/page-views/product/storage/assets/storage2.png b/www/client/views/page-views/product/storage/assets/storage2.png similarity index 100% rename from client/views/page-views/product/storage/assets/storage2.png rename to www/client/views/page-views/product/storage/assets/storage2.png diff --git a/client/views/page-views/product/storage/assets/storage3.png b/www/client/views/page-views/product/storage/assets/storage3.png similarity index 100% rename from client/views/page-views/product/storage/assets/storage3.png rename to www/client/views/page-views/product/storage/assets/storage3.png diff --git a/client/views/page-views/product/storage/assets/storage4.png b/www/client/views/page-views/product/storage/assets/storage4.png similarity index 100% rename from client/views/page-views/product/storage/assets/storage4.png rename to www/client/views/page-views/product/storage/assets/storage4.png diff --git a/client/views/page-views/product/storage/assets/storage5.png b/www/client/views/page-views/product/storage/assets/storage5.png similarity index 100% rename from client/views/page-views/product/storage/assets/storage5.png rename to www/client/views/page-views/product/storage/assets/storage5.png diff --git a/client/views/page-views/product/storage/assets/storage6.png b/www/client/views/page-views/product/storage/assets/storage6.png similarity index 100% rename from client/views/page-views/product/storage/assets/storage6.png rename to www/client/views/page-views/product/storage/assets/storage6.png diff --git a/client/views/page-views/product/storage/index.ejs b/www/client/views/page-views/product/storage/index.ejs similarity index 100% rename from client/views/page-views/product/storage/index.ejs rename to www/client/views/page-views/product/storage/index.ejs diff --git a/client/views/page-views/product/storage/index.js b/www/client/views/page-views/product/storage/index.js similarity index 100% rename from client/views/page-views/product/storage/index.js rename to www/client/views/page-views/product/storage/index.js diff --git a/client/views/page-views/product/storage/lang.json b/www/client/views/page-views/product/storage/lang.json similarity index 100% rename from client/views/page-views/product/storage/lang.json rename to www/client/views/page-views/product/storage/lang.json diff --git a/client/views/page-views/product/storage/style/index.less b/www/client/views/page-views/product/storage/style/index.less similarity index 100% rename from client/views/page-views/product/storage/style/index.less rename to www/client/views/page-views/product/storage/style/index.less diff --git a/client/views/page-views/public/alarm/assets/1.png b/www/client/views/page-views/public/alarm/assets/1.png similarity index 100% rename from client/views/page-views/public/alarm/assets/1.png rename to www/client/views/page-views/public/alarm/assets/1.png diff --git a/client/views/page-views/public/alarm/assets/2.png b/www/client/views/page-views/public/alarm/assets/2.png similarity index 100% rename from client/views/page-views/public/alarm/assets/2.png rename to www/client/views/page-views/public/alarm/assets/2.png diff --git a/client/views/page-views/public/alarm/assets/3.png b/www/client/views/page-views/public/alarm/assets/3.png similarity index 100% rename from client/views/page-views/public/alarm/assets/3.png rename to www/client/views/page-views/public/alarm/assets/3.png diff --git a/client/views/page-views/public/alarm/assets/4.png b/www/client/views/page-views/public/alarm/assets/4.png similarity index 100% rename from client/views/page-views/public/alarm/assets/4.png rename to www/client/views/page-views/public/alarm/assets/4.png diff --git a/client/views/page-views/public/alarm/assets/al1.png b/www/client/views/page-views/public/alarm/assets/al1.png similarity index 100% rename from client/views/page-views/public/alarm/assets/al1.png rename to www/client/views/page-views/public/alarm/assets/al1.png diff --git a/client/views/page-views/public/alarm/assets/al2.png b/www/client/views/page-views/public/alarm/assets/al2.png similarity index 100% rename from client/views/page-views/public/alarm/assets/al2.png rename to www/client/views/page-views/public/alarm/assets/al2.png diff --git a/client/views/page-views/public/alarm/assets/alarm.png b/www/client/views/page-views/public/alarm/assets/alarm.png similarity index 100% rename from client/views/page-views/public/alarm/assets/alarm.png rename to www/client/views/page-views/public/alarm/assets/alarm.png diff --git a/client/views/page-views/public/alarm/assets/banner2.jpg b/www/client/views/page-views/public/alarm/assets/banner2.jpg similarity index 100% rename from client/views/page-views/public/alarm/assets/banner2.jpg rename to www/client/views/page-views/public/alarm/assets/banner2.jpg diff --git a/client/views/page-views/public/alarm/assets/bg.jpg b/www/client/views/page-views/public/alarm/assets/bg.jpg similarity index 100% rename from client/views/page-views/public/alarm/assets/bg.jpg rename to www/client/views/page-views/public/alarm/assets/bg.jpg diff --git a/client/views/page-views/public/alarm/assets/bg2.jpg b/www/client/views/page-views/public/alarm/assets/bg2.jpg similarity index 100% rename from client/views/page-views/public/alarm/assets/bg2.jpg rename to www/client/views/page-views/public/alarm/assets/bg2.jpg diff --git a/client/views/page-views/public/alarm/assets/url.png b/www/client/views/page-views/public/alarm/assets/url.png similarity index 100% rename from client/views/page-views/public/alarm/assets/url.png rename to www/client/views/page-views/public/alarm/assets/url.png diff --git a/client/views/page-views/public/alarm/index.ejs b/www/client/views/page-views/public/alarm/index.ejs similarity index 100% rename from client/views/page-views/public/alarm/index.ejs rename to www/client/views/page-views/public/alarm/index.ejs diff --git a/client/views/page-views/public/alarm/index.js b/www/client/views/page-views/public/alarm/index.js similarity index 100% rename from client/views/page-views/public/alarm/index.js rename to www/client/views/page-views/public/alarm/index.js diff --git a/client/views/page-views/public/alarm/lang.json b/www/client/views/page-views/public/alarm/lang.json similarity index 100% rename from client/views/page-views/public/alarm/lang.json rename to www/client/views/page-views/public/alarm/lang.json diff --git a/client/views/page-views/public/alarm/style/index.less b/www/client/views/page-views/public/alarm/style/index.less similarity index 100% rename from client/views/page-views/public/alarm/style/index.less rename to www/client/views/page-views/public/alarm/style/index.less diff --git a/client/views/page-views/public/compute/assets/1.png b/www/client/views/page-views/public/compute/assets/1.png similarity index 100% rename from client/views/page-views/public/compute/assets/1.png rename to www/client/views/page-views/public/compute/assets/1.png diff --git a/client/views/page-views/public/compute/assets/2.png b/www/client/views/page-views/public/compute/assets/2.png similarity index 100% rename from client/views/page-views/public/compute/assets/2.png rename to www/client/views/page-views/public/compute/assets/2.png diff --git a/client/views/page-views/public/compute/assets/3.png b/www/client/views/page-views/public/compute/assets/3.png similarity index 100% rename from client/views/page-views/public/compute/assets/3.png rename to www/client/views/page-views/public/compute/assets/3.png diff --git a/client/views/page-views/public/compute/assets/4.png b/www/client/views/page-views/public/compute/assets/4.png similarity index 100% rename from client/views/page-views/public/compute/assets/4.png rename to www/client/views/page-views/public/compute/assets/4.png diff --git a/client/views/page-views/public/compute/assets/5.png b/www/client/views/page-views/public/compute/assets/5.png similarity index 100% rename from client/views/page-views/public/compute/assets/5.png rename to www/client/views/page-views/public/compute/assets/5.png diff --git a/client/views/page-views/public/compute/assets/6.png b/www/client/views/page-views/public/compute/assets/6.png similarity index 100% rename from client/views/page-views/public/compute/assets/6.png rename to www/client/views/page-views/public/compute/assets/6.png diff --git a/client/views/page-views/public/compute/assets/banner2.jpg b/www/client/views/page-views/public/compute/assets/banner2.jpg similarity index 100% rename from client/views/page-views/public/compute/assets/banner2.jpg rename to www/client/views/page-views/public/compute/assets/banner2.jpg diff --git a/client/views/page-views/public/compute/assets/bg.jpg b/www/client/views/page-views/public/compute/assets/bg.jpg similarity index 100% rename from client/views/page-views/public/compute/assets/bg.jpg rename to www/client/views/page-views/public/compute/assets/bg.jpg diff --git a/client/views/page-views/public/compute/assets/bg2.jpg b/www/client/views/page-views/public/compute/assets/bg2.jpg similarity index 100% rename from client/views/page-views/public/compute/assets/bg2.jpg rename to www/client/views/page-views/public/compute/assets/bg2.jpg diff --git a/client/views/page-views/public/compute/assets/bg5.jpg b/www/client/views/page-views/public/compute/assets/bg5.jpg similarity index 100% rename from client/views/page-views/public/compute/assets/bg5.jpg rename to www/client/views/page-views/public/compute/assets/bg5.jpg diff --git a/client/views/page-views/public/compute/assets/bg6.jpg b/www/client/views/page-views/public/compute/assets/bg6.jpg similarity index 100% rename from client/views/page-views/public/compute/assets/bg6.jpg rename to www/client/views/page-views/public/compute/assets/bg6.jpg diff --git a/client/views/page-views/public/compute/assets/bg7.jpg b/www/client/views/page-views/public/compute/assets/bg7.jpg similarity index 100% rename from client/views/page-views/public/compute/assets/bg7.jpg rename to www/client/views/page-views/public/compute/assets/bg7.jpg diff --git a/client/views/page-views/public/compute/assets/bg8.jpg b/www/client/views/page-views/public/compute/assets/bg8.jpg similarity index 100% rename from client/views/page-views/public/compute/assets/bg8.jpg rename to www/client/views/page-views/public/compute/assets/bg8.jpg diff --git a/client/views/page-views/public/compute/assets/des1.png b/www/client/views/page-views/public/compute/assets/des1.png similarity index 100% rename from client/views/page-views/public/compute/assets/des1.png rename to www/client/views/page-views/public/compute/assets/des1.png diff --git a/client/views/page-views/public/compute/assets/in1.png b/www/client/views/page-views/public/compute/assets/in1.png similarity index 100% rename from client/views/page-views/public/compute/assets/in1.png rename to www/client/views/page-views/public/compute/assets/in1.png diff --git a/client/views/page-views/public/compute/assets/in2.png b/www/client/views/page-views/public/compute/assets/in2.png similarity index 100% rename from client/views/page-views/public/compute/assets/in2.png rename to www/client/views/page-views/public/compute/assets/in2.png diff --git a/client/views/page-views/public/compute/assets/in3.png b/www/client/views/page-views/public/compute/assets/in3.png similarity index 100% rename from client/views/page-views/public/compute/assets/in3.png rename to www/client/views/page-views/public/compute/assets/in3.png diff --git a/client/views/page-views/public/compute/assets/in4.png b/www/client/views/page-views/public/compute/assets/in4.png similarity index 100% rename from client/views/page-views/public/compute/assets/in4.png rename to www/client/views/page-views/public/compute/assets/in4.png diff --git a/client/views/page-views/public/compute/assets/instance.png b/www/client/views/page-views/public/compute/assets/instance.png similarity index 100% rename from client/views/page-views/public/compute/assets/instance.png rename to www/client/views/page-views/public/compute/assets/instance.png diff --git a/client/views/page-views/public/compute/assets/snapshot.png b/www/client/views/page-views/public/compute/assets/snapshot.png similarity index 100% rename from client/views/page-views/public/compute/assets/snapshot.png rename to www/client/views/page-views/public/compute/assets/snapshot.png diff --git a/client/views/page-views/public/compute/assets/snl1.png b/www/client/views/page-views/public/compute/assets/snl1.png similarity index 100% rename from client/views/page-views/public/compute/assets/snl1.png rename to www/client/views/page-views/public/compute/assets/snl1.png diff --git a/client/views/page-views/public/compute/assets/snl2.png b/www/client/views/page-views/public/compute/assets/snl2.png similarity index 100% rename from client/views/page-views/public/compute/assets/snl2.png rename to www/client/views/page-views/public/compute/assets/snl2.png diff --git a/client/views/page-views/public/compute/assets/snl3.png b/www/client/views/page-views/public/compute/assets/snl3.png similarity index 100% rename from client/views/page-views/public/compute/assets/snl3.png rename to www/client/views/page-views/public/compute/assets/snl3.png diff --git a/client/views/page-views/public/compute/assets/snl4.png b/www/client/views/page-views/public/compute/assets/snl4.png similarity index 100% rename from client/views/page-views/public/compute/assets/snl4.png rename to www/client/views/page-views/public/compute/assets/snl4.png diff --git a/client/views/page-views/public/compute/index.ejs b/www/client/views/page-views/public/compute/index.ejs similarity index 100% rename from client/views/page-views/public/compute/index.ejs rename to www/client/views/page-views/public/compute/index.ejs diff --git a/client/views/page-views/public/compute/index.js b/www/client/views/page-views/public/compute/index.js similarity index 100% rename from client/views/page-views/public/compute/index.js rename to www/client/views/page-views/public/compute/index.js diff --git a/client/views/page-views/public/compute/lang.json b/www/client/views/page-views/public/compute/lang.json similarity index 100% rename from client/views/page-views/public/compute/lang.json rename to www/client/views/page-views/public/compute/lang.json diff --git a/client/views/page-views/public/compute/style/index.less b/www/client/views/page-views/public/compute/style/index.less similarity index 100% rename from client/views/page-views/public/compute/style/index.less rename to www/client/views/page-views/public/compute/style/index.less diff --git a/client/views/page-views/public/network/assets/1.jpg b/www/client/views/page-views/public/network/assets/1.jpg similarity index 100% rename from client/views/page-views/public/network/assets/1.jpg rename to www/client/views/page-views/public/network/assets/1.jpg diff --git a/client/views/page-views/public/network/assets/1.png b/www/client/views/page-views/public/network/assets/1.png similarity index 100% rename from client/views/page-views/public/network/assets/1.png rename to www/client/views/page-views/public/network/assets/1.png diff --git a/client/views/page-views/public/network/assets/2.jpg b/www/client/views/page-views/public/network/assets/2.jpg similarity index 100% rename from client/views/page-views/public/network/assets/2.jpg rename to www/client/views/page-views/public/network/assets/2.jpg diff --git a/client/views/page-views/public/network/assets/2.png b/www/client/views/page-views/public/network/assets/2.png similarity index 100% rename from client/views/page-views/public/network/assets/2.png rename to www/client/views/page-views/public/network/assets/2.png diff --git a/client/views/page-views/public/network/assets/3.jpg b/www/client/views/page-views/public/network/assets/3.jpg similarity index 100% rename from client/views/page-views/public/network/assets/3.jpg rename to www/client/views/page-views/public/network/assets/3.jpg diff --git a/client/views/page-views/public/network/assets/3.png b/www/client/views/page-views/public/network/assets/3.png similarity index 100% rename from client/views/page-views/public/network/assets/3.png rename to www/client/views/page-views/public/network/assets/3.png diff --git a/client/views/page-views/public/network/assets/4.jpg b/www/client/views/page-views/public/network/assets/4.jpg similarity index 100% rename from client/views/page-views/public/network/assets/4.jpg rename to www/client/views/page-views/public/network/assets/4.jpg diff --git a/client/views/page-views/public/network/assets/4.png b/www/client/views/page-views/public/network/assets/4.png similarity index 100% rename from client/views/page-views/public/network/assets/4.png rename to www/client/views/page-views/public/network/assets/4.png diff --git a/client/views/page-views/public/network/assets/5.png b/www/client/views/page-views/public/network/assets/5.png similarity index 100% rename from client/views/page-views/public/network/assets/5.png rename to www/client/views/page-views/public/network/assets/5.png diff --git a/client/views/page-views/public/network/assets/6.png b/www/client/views/page-views/public/network/assets/6.png similarity index 100% rename from client/views/page-views/public/network/assets/6.png rename to www/client/views/page-views/public/network/assets/6.png diff --git a/client/views/page-views/public/network/assets/7.png b/www/client/views/page-views/public/network/assets/7.png similarity index 100% rename from client/views/page-views/public/network/assets/7.png rename to www/client/views/page-views/public/network/assets/7.png diff --git a/client/views/page-views/public/network/assets/8.png b/www/client/views/page-views/public/network/assets/8.png similarity index 100% rename from client/views/page-views/public/network/assets/8.png rename to www/client/views/page-views/public/network/assets/8.png diff --git a/client/views/page-views/public/network/assets/banner2.jpg b/www/client/views/page-views/public/network/assets/banner2.jpg similarity index 100% rename from client/views/page-views/public/network/assets/banner2.jpg rename to www/client/views/page-views/public/network/assets/banner2.jpg diff --git a/client/views/page-views/public/network/assets/bg.jpg b/www/client/views/page-views/public/network/assets/bg.jpg similarity index 100% rename from client/views/page-views/public/network/assets/bg.jpg rename to www/client/views/page-views/public/network/assets/bg.jpg diff --git a/client/views/page-views/public/network/assets/bg2.jpg b/www/client/views/page-views/public/network/assets/bg2.jpg similarity index 100% rename from client/views/page-views/public/network/assets/bg2.jpg rename to www/client/views/page-views/public/network/assets/bg2.jpg diff --git a/client/views/page-views/public/network/assets/bg3.jpg b/www/client/views/page-views/public/network/assets/bg3.jpg similarity index 100% rename from client/views/page-views/public/network/assets/bg3.jpg rename to www/client/views/page-views/public/network/assets/bg3.jpg diff --git a/client/views/page-views/public/network/assets/bg4.jpg b/www/client/views/page-views/public/network/assets/bg4.jpg similarity index 100% rename from client/views/page-views/public/network/assets/bg4.jpg rename to www/client/views/page-views/public/network/assets/bg4.jpg diff --git a/client/views/page-views/public/network/assets/lo1.png b/www/client/views/page-views/public/network/assets/lo1.png similarity index 100% rename from client/views/page-views/public/network/assets/lo1.png rename to www/client/views/page-views/public/network/assets/lo1.png diff --git a/client/views/page-views/public/network/assets/lo2.png b/www/client/views/page-views/public/network/assets/lo2.png similarity index 100% rename from client/views/page-views/public/network/assets/lo2.png rename to www/client/views/page-views/public/network/assets/lo2.png diff --git a/client/views/page-views/public/network/assets/lo3.png b/www/client/views/page-views/public/network/assets/lo3.png similarity index 100% rename from client/views/page-views/public/network/assets/lo3.png rename to www/client/views/page-views/public/network/assets/lo3.png diff --git a/client/views/page-views/public/network/assets/lo4.png b/www/client/views/page-views/public/network/assets/lo4.png similarity index 100% rename from client/views/page-views/public/network/assets/lo4.png rename to www/client/views/page-views/public/network/assets/lo4.png diff --git a/client/views/page-views/public/network/assets/load.png b/www/client/views/page-views/public/network/assets/load.png similarity index 100% rename from client/views/page-views/public/network/assets/load.png rename to www/client/views/page-views/public/network/assets/load.png diff --git a/client/views/page-views/public/network/assets/ne1.png b/www/client/views/page-views/public/network/assets/ne1.png similarity index 100% rename from client/views/page-views/public/network/assets/ne1.png rename to www/client/views/page-views/public/network/assets/ne1.png diff --git a/client/views/page-views/public/network/assets/ne2.png b/www/client/views/page-views/public/network/assets/ne2.png similarity index 100% rename from client/views/page-views/public/network/assets/ne2.png rename to www/client/views/page-views/public/network/assets/ne2.png diff --git a/client/views/page-views/public/network/assets/ne3.png b/www/client/views/page-views/public/network/assets/ne3.png similarity index 100% rename from client/views/page-views/public/network/assets/ne3.png rename to www/client/views/page-views/public/network/assets/ne3.png diff --git a/client/views/page-views/public/network/assets/ne4.png b/www/client/views/page-views/public/network/assets/ne4.png similarity index 100% rename from client/views/page-views/public/network/assets/ne4.png rename to www/client/views/page-views/public/network/assets/ne4.png diff --git a/client/views/page-views/public/network/assets/network.png b/www/client/views/page-views/public/network/assets/network.png similarity index 100% rename from client/views/page-views/public/network/assets/network.png rename to www/client/views/page-views/public/network/assets/network.png diff --git a/client/views/page-views/public/network/index.ejs b/www/client/views/page-views/public/network/index.ejs similarity index 100% rename from client/views/page-views/public/network/index.ejs rename to www/client/views/page-views/public/network/index.ejs diff --git a/client/views/page-views/public/network/index.js b/www/client/views/page-views/public/network/index.js similarity index 100% rename from client/views/page-views/public/network/index.js rename to www/client/views/page-views/public/network/index.js diff --git a/client/views/page-views/public/network/lang.json b/www/client/views/page-views/public/network/lang.json similarity index 100% rename from client/views/page-views/public/network/lang.json rename to www/client/views/page-views/public/network/lang.json diff --git a/client/views/page-views/public/network/style/index.less b/www/client/views/page-views/public/network/style/index.less similarity index 100% rename from client/views/page-views/public/network/style/index.less rename to www/client/views/page-views/public/network/style/index.less diff --git a/client/views/page-views/public/price/assets/banner2.jpg b/www/client/views/page-views/public/price/assets/banner2.jpg similarity index 100% rename from client/views/page-views/public/price/assets/banner2.jpg rename to www/client/views/page-views/public/price/assets/banner2.jpg diff --git a/client/views/page-views/public/price/assets/shopping.png b/www/client/views/page-views/public/price/assets/shopping.png similarity index 100% rename from client/views/page-views/public/price/assets/shopping.png rename to www/client/views/page-views/public/price/assets/shopping.png diff --git a/client/views/page-views/public/price/index.ejs b/www/client/views/page-views/public/price/index.ejs similarity index 100% rename from client/views/page-views/public/price/index.ejs rename to www/client/views/page-views/public/price/index.ejs diff --git a/client/views/page-views/public/price/index.js b/www/client/views/page-views/public/price/index.js similarity index 100% rename from client/views/page-views/public/price/index.js rename to www/client/views/page-views/public/price/index.js diff --git a/client/views/page-views/public/price/lang.json b/www/client/views/page-views/public/price/lang.json similarity index 100% rename from client/views/page-views/public/price/lang.json rename to www/client/views/page-views/public/price/lang.json diff --git a/client/views/page-views/public/price/style/index.less b/www/client/views/page-views/public/price/style/index.less similarity index 100% rename from client/views/page-views/public/price/style/index.less rename to www/client/views/page-views/public/price/style/index.less diff --git a/client/views/page-views/public/storage/assets/1.png b/www/client/views/page-views/public/storage/assets/1.png similarity index 100% rename from client/views/page-views/public/storage/assets/1.png rename to www/client/views/page-views/public/storage/assets/1.png diff --git a/client/views/page-views/public/storage/assets/2.png b/www/client/views/page-views/public/storage/assets/2.png similarity index 100% rename from client/views/page-views/public/storage/assets/2.png rename to www/client/views/page-views/public/storage/assets/2.png diff --git a/client/views/page-views/public/storage/assets/3.png b/www/client/views/page-views/public/storage/assets/3.png similarity index 100% rename from client/views/page-views/public/storage/assets/3.png rename to www/client/views/page-views/public/storage/assets/3.png diff --git a/client/views/page-views/public/storage/assets/4.png b/www/client/views/page-views/public/storage/assets/4.png similarity index 100% rename from client/views/page-views/public/storage/assets/4.png rename to www/client/views/page-views/public/storage/assets/4.png diff --git a/client/views/page-views/public/storage/assets/5.png b/www/client/views/page-views/public/storage/assets/5.png similarity index 100% rename from client/views/page-views/public/storage/assets/5.png rename to www/client/views/page-views/public/storage/assets/5.png diff --git a/client/views/page-views/public/storage/assets/6.png b/www/client/views/page-views/public/storage/assets/6.png similarity index 100% rename from client/views/page-views/public/storage/assets/6.png rename to www/client/views/page-views/public/storage/assets/6.png diff --git a/client/views/page-views/public/storage/assets/7.png b/www/client/views/page-views/public/storage/assets/7.png similarity index 100% rename from client/views/page-views/public/storage/assets/7.png rename to www/client/views/page-views/public/storage/assets/7.png diff --git a/client/views/page-views/public/storage/assets/banner2.jpg b/www/client/views/page-views/public/storage/assets/banner2.jpg similarity index 100% rename from client/views/page-views/public/storage/assets/banner2.jpg rename to www/client/views/page-views/public/storage/assets/banner2.jpg diff --git a/client/views/page-views/public/storage/assets/bg.jpg b/www/client/views/page-views/public/storage/assets/bg.jpg similarity index 100% rename from client/views/page-views/public/storage/assets/bg.jpg rename to www/client/views/page-views/public/storage/assets/bg.jpg diff --git a/client/views/page-views/public/storage/assets/bg2.jpg b/www/client/views/page-views/public/storage/assets/bg2.jpg similarity index 100% rename from client/views/page-views/public/storage/assets/bg2.jpg rename to www/client/views/page-views/public/storage/assets/bg2.jpg diff --git a/client/views/page-views/public/storage/assets/bg3.jpg b/www/client/views/page-views/public/storage/assets/bg3.jpg similarity index 100% rename from client/views/page-views/public/storage/assets/bg3.jpg rename to www/client/views/page-views/public/storage/assets/bg3.jpg diff --git a/client/views/page-views/public/storage/assets/bg4.jpg b/www/client/views/page-views/public/storage/assets/bg4.jpg similarity index 100% rename from client/views/page-views/public/storage/assets/bg4.jpg rename to www/client/views/page-views/public/storage/assets/bg4.jpg diff --git a/client/views/page-views/public/storage/assets/product1.png b/www/client/views/page-views/public/storage/assets/product1.png similarity index 100% rename from client/views/page-views/public/storage/assets/product1.png rename to www/client/views/page-views/public/storage/assets/product1.png diff --git a/client/views/page-views/public/storage/assets/product2.png b/www/client/views/page-views/public/storage/assets/product2.png similarity index 100% rename from client/views/page-views/public/storage/assets/product2.png rename to www/client/views/page-views/public/storage/assets/product2.png diff --git a/client/views/page-views/public/storage/assets/product3.png b/www/client/views/page-views/public/storage/assets/product3.png similarity index 100% rename from client/views/page-views/public/storage/assets/product3.png rename to www/client/views/page-views/public/storage/assets/product3.png diff --git a/client/views/page-views/public/storage/assets/product4.png b/www/client/views/page-views/public/storage/assets/product4.png similarity index 100% rename from client/views/page-views/public/storage/assets/product4.png rename to www/client/views/page-views/public/storage/assets/product4.png diff --git a/client/views/page-views/public/storage/assets/volume.png b/www/client/views/page-views/public/storage/assets/volume.png similarity index 100% rename from client/views/page-views/public/storage/assets/volume.png rename to www/client/views/page-views/public/storage/assets/volume.png diff --git a/client/views/page-views/public/storage/index.ejs b/www/client/views/page-views/public/storage/index.ejs similarity index 100% rename from client/views/page-views/public/storage/index.ejs rename to www/client/views/page-views/public/storage/index.ejs diff --git a/client/views/page-views/public/storage/index.js b/www/client/views/page-views/public/storage/index.js similarity index 100% rename from client/views/page-views/public/storage/index.js rename to www/client/views/page-views/public/storage/index.js diff --git a/client/views/page-views/public/storage/lang.json b/www/client/views/page-views/public/storage/lang.json similarity index 100% rename from client/views/page-views/public/storage/lang.json rename to www/client/views/page-views/public/storage/lang.json diff --git a/client/views/page-views/public/storage/style/index.less b/www/client/views/page-views/public/storage/style/index.less similarity index 100% rename from client/views/page-views/public/storage/style/index.less rename to www/client/views/page-views/public/storage/style/index.less diff --git a/client/views/page-views/support/apply-now/assets/2.jpg b/www/client/views/page-views/support/apply-now/assets/2.jpg similarity index 100% rename from client/views/page-views/support/apply-now/assets/2.jpg rename to www/client/views/page-views/support/apply-now/assets/2.jpg diff --git a/client/views/page-views/support/apply-now/assets/banner2.jpg b/www/client/views/page-views/support/apply-now/assets/banner2.jpg similarity index 100% rename from client/views/page-views/support/apply-now/assets/banner2.jpg rename to www/client/views/page-views/support/apply-now/assets/banner2.jpg diff --git a/client/views/page-views/support/apply-now/assets/checked.png b/www/client/views/page-views/support/apply-now/assets/checked.png similarity index 100% rename from client/views/page-views/support/apply-now/assets/checked.png rename to www/client/views/page-views/support/apply-now/assets/checked.png diff --git a/client/views/page-views/support/apply-now/assets/error.jpg b/www/client/views/page-views/support/apply-now/assets/error.jpg similarity index 100% rename from client/views/page-views/support/apply-now/assets/error.jpg rename to www/client/views/page-views/support/apply-now/assets/error.jpg diff --git a/client/views/page-views/support/apply-now/assets/loading.jpg b/www/client/views/page-views/support/apply-now/assets/loading.jpg similarity index 100% rename from client/views/page-views/support/apply-now/assets/loading.jpg rename to www/client/views/page-views/support/apply-now/assets/loading.jpg diff --git a/client/views/page-views/support/apply-now/assets/success.jpg b/www/client/views/page-views/support/apply-now/assets/success.jpg similarity index 100% rename from client/views/page-views/support/apply-now/assets/success.jpg rename to www/client/views/page-views/support/apply-now/assets/success.jpg diff --git a/client/views/page-views/support/apply-now/assets/warning.png b/www/client/views/page-views/support/apply-now/assets/warning.png similarity index 100% rename from client/views/page-views/support/apply-now/assets/warning.png rename to www/client/views/page-views/support/apply-now/assets/warning.png diff --git a/client/views/page-views/support/apply-now/assets/yes.jpg b/www/client/views/page-views/support/apply-now/assets/yes.jpg similarity index 100% rename from client/views/page-views/support/apply-now/assets/yes.jpg rename to www/client/views/page-views/support/apply-now/assets/yes.jpg diff --git a/client/views/page-views/support/apply-now/index.ejs b/www/client/views/page-views/support/apply-now/index.ejs similarity index 100% rename from client/views/page-views/support/apply-now/index.ejs rename to www/client/views/page-views/support/apply-now/index.ejs diff --git a/client/views/page-views/support/apply-now/index.js b/www/client/views/page-views/support/apply-now/index.js similarity index 100% rename from client/views/page-views/support/apply-now/index.js rename to www/client/views/page-views/support/apply-now/index.js diff --git a/client/views/page-views/support/apply-now/lang.json b/www/client/views/page-views/support/apply-now/lang.json similarity index 100% rename from client/views/page-views/support/apply-now/lang.json rename to www/client/views/page-views/support/apply-now/lang.json diff --git a/client/views/page-views/support/apply-now/style/index.less b/www/client/views/page-views/support/apply-now/style/index.less similarity index 100% rename from client/views/page-views/support/apply-now/style/index.less rename to www/client/views/page-views/support/apply-now/style/index.less diff --git a/client/views/page-views/support/online-flow/assets/banner2.jpg b/www/client/views/page-views/support/online-flow/assets/banner2.jpg similarity index 100% rename from client/views/page-views/support/online-flow/assets/banner2.jpg rename to www/client/views/page-views/support/online-flow/assets/banner2.jpg diff --git a/client/views/page-views/support/online-flow/assets/bluedot.jpg b/www/client/views/page-views/support/online-flow/assets/bluedot.jpg similarity index 100% rename from client/views/page-views/support/online-flow/assets/bluedot.jpg rename to www/client/views/page-views/support/online-flow/assets/bluedot.jpg diff --git a/client/views/page-views/support/online-flow/assets/down.png b/www/client/views/page-views/support/online-flow/assets/down.png similarity index 100% rename from client/views/page-views/support/online-flow/assets/down.png rename to www/client/views/page-views/support/online-flow/assets/down.png diff --git a/client/views/page-views/support/online-flow/index.ejs b/www/client/views/page-views/support/online-flow/index.ejs similarity index 100% rename from client/views/page-views/support/online-flow/index.ejs rename to www/client/views/page-views/support/online-flow/index.ejs diff --git a/client/views/page-views/support/online-flow/index.js b/www/client/views/page-views/support/online-flow/index.js similarity index 100% rename from client/views/page-views/support/online-flow/index.js rename to www/client/views/page-views/support/online-flow/index.js diff --git a/client/views/page-views/support/online-flow/lang.json b/www/client/views/page-views/support/online-flow/lang.json similarity index 100% rename from client/views/page-views/support/online-flow/lang.json rename to www/client/views/page-views/support/online-flow/lang.json diff --git a/client/views/page-views/support/online-flow/style/index.less b/www/client/views/page-views/support/online-flow/style/index.less similarity index 100% rename from client/views/page-views/support/online-flow/style/index.less rename to www/client/views/page-views/support/online-flow/style/index.less diff --git a/client/views/page-views/support/product-service/assets/1.png b/www/client/views/page-views/support/product-service/assets/1.png similarity index 100% rename from client/views/page-views/support/product-service/assets/1.png rename to www/client/views/page-views/support/product-service/assets/1.png diff --git a/client/views/page-views/support/product-service/assets/2.png b/www/client/views/page-views/support/product-service/assets/2.png similarity index 100% rename from client/views/page-views/support/product-service/assets/2.png rename to www/client/views/page-views/support/product-service/assets/2.png diff --git a/client/views/page-views/support/product-service/assets/3.png b/www/client/views/page-views/support/product-service/assets/3.png similarity index 100% rename from client/views/page-views/support/product-service/assets/3.png rename to www/client/views/page-views/support/product-service/assets/3.png diff --git a/client/views/page-views/support/product-service/assets/4.png b/www/client/views/page-views/support/product-service/assets/4.png similarity index 100% rename from client/views/page-views/support/product-service/assets/4.png rename to www/client/views/page-views/support/product-service/assets/4.png diff --git a/client/views/page-views/support/product-service/assets/5.png b/www/client/views/page-views/support/product-service/assets/5.png similarity index 100% rename from client/views/page-views/support/product-service/assets/5.png rename to www/client/views/page-views/support/product-service/assets/5.png diff --git a/client/views/page-views/support/product-service/assets/6.png b/www/client/views/page-views/support/product-service/assets/6.png similarity index 100% rename from client/views/page-views/support/product-service/assets/6.png rename to www/client/views/page-views/support/product-service/assets/6.png diff --git a/client/views/page-views/support/product-service/assets/7.png b/www/client/views/page-views/support/product-service/assets/7.png similarity index 100% rename from client/views/page-views/support/product-service/assets/7.png rename to www/client/views/page-views/support/product-service/assets/7.png diff --git a/client/views/page-views/support/product-service/assets/8.png b/www/client/views/page-views/support/product-service/assets/8.png similarity index 100% rename from client/views/page-views/support/product-service/assets/8.png rename to www/client/views/page-views/support/product-service/assets/8.png diff --git a/client/views/page-views/support/product-service/assets/9.png b/www/client/views/page-views/support/product-service/assets/9.png similarity index 100% rename from client/views/page-views/support/product-service/assets/9.png rename to www/client/views/page-views/support/product-service/assets/9.png diff --git a/client/views/page-views/support/product-service/assets/banner2.jpg b/www/client/views/page-views/support/product-service/assets/banner2.jpg similarity index 100% rename from client/views/page-views/support/product-service/assets/banner2.jpg rename to www/client/views/page-views/support/product-service/assets/banner2.jpg diff --git a/client/views/page-views/support/product-service/assets/bg.png b/www/client/views/page-views/support/product-service/assets/bg.png similarity index 100% rename from client/views/page-views/support/product-service/assets/bg.png rename to www/client/views/page-views/support/product-service/assets/bg.png diff --git a/client/views/page-views/support/product-service/assets/mac.png b/www/client/views/page-views/support/product-service/assets/mac.png similarity index 100% rename from client/views/page-views/support/product-service/assets/mac.png rename to www/client/views/page-views/support/product-service/assets/mac.png diff --git a/client/views/page-views/support/product-service/index.ejs b/www/client/views/page-views/support/product-service/index.ejs similarity index 100% rename from client/views/page-views/support/product-service/index.ejs rename to www/client/views/page-views/support/product-service/index.ejs diff --git a/client/views/page-views/support/product-service/index.js b/www/client/views/page-views/support/product-service/index.js similarity index 100% rename from client/views/page-views/support/product-service/index.js rename to www/client/views/page-views/support/product-service/index.js diff --git a/client/views/page-views/support/product-service/lang.json b/www/client/views/page-views/support/product-service/lang.json similarity index 100% rename from client/views/page-views/support/product-service/lang.json rename to www/client/views/page-views/support/product-service/lang.json diff --git a/client/views/page-views/support/product-service/style/index.less b/www/client/views/page-views/support/product-service/style/index.less similarity index 100% rename from client/views/page-views/support/product-service/style/index.less rename to www/client/views/page-views/support/product-service/style/index.less diff --git a/client/views/page-views/support/quality-assurance/assets/banner2.jpg b/www/client/views/page-views/support/quality-assurance/assets/banner2.jpg similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/banner2.jpg rename to www/client/views/page-views/support/quality-assurance/assets/banner2.jpg diff --git a/client/views/page-views/support/quality-assurance/assets/download-pdf.png b/www/client/views/page-views/support/quality-assurance/assets/download-pdf.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/download-pdf.png rename to www/client/views/page-views/support/quality-assurance/assets/download-pdf.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon1.png b/www/client/views/page-views/support/quality-assurance/assets/icon1.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon1.png rename to www/client/views/page-views/support/quality-assurance/assets/icon1.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon10.png b/www/client/views/page-views/support/quality-assurance/assets/icon10.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon10.png rename to www/client/views/page-views/support/quality-assurance/assets/icon10.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon11.png b/www/client/views/page-views/support/quality-assurance/assets/icon11.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon11.png rename to www/client/views/page-views/support/quality-assurance/assets/icon11.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon2.png b/www/client/views/page-views/support/quality-assurance/assets/icon2.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon2.png rename to www/client/views/page-views/support/quality-assurance/assets/icon2.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon3.png b/www/client/views/page-views/support/quality-assurance/assets/icon3.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon3.png rename to www/client/views/page-views/support/quality-assurance/assets/icon3.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon4.png b/www/client/views/page-views/support/quality-assurance/assets/icon4.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon4.png rename to www/client/views/page-views/support/quality-assurance/assets/icon4.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon5.png b/www/client/views/page-views/support/quality-assurance/assets/icon5.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon5.png rename to www/client/views/page-views/support/quality-assurance/assets/icon5.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon6.png b/www/client/views/page-views/support/quality-assurance/assets/icon6.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon6.png rename to www/client/views/page-views/support/quality-assurance/assets/icon6.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon7.png b/www/client/views/page-views/support/quality-assurance/assets/icon7.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon7.png rename to www/client/views/page-views/support/quality-assurance/assets/icon7.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon8.png b/www/client/views/page-views/support/quality-assurance/assets/icon8.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon8.png rename to www/client/views/page-views/support/quality-assurance/assets/icon8.png diff --git a/client/views/page-views/support/quality-assurance/assets/icon9.png b/www/client/views/page-views/support/quality-assurance/assets/icon9.png similarity index 100% rename from client/views/page-views/support/quality-assurance/assets/icon9.png rename to www/client/views/page-views/support/quality-assurance/assets/icon9.png diff --git a/client/views/page-views/support/quality-assurance/index.ejs b/www/client/views/page-views/support/quality-assurance/index.ejs similarity index 100% rename from client/views/page-views/support/quality-assurance/index.ejs rename to www/client/views/page-views/support/quality-assurance/index.ejs diff --git a/client/views/page-views/support/quality-assurance/index.js b/www/client/views/page-views/support/quality-assurance/index.js similarity index 100% rename from client/views/page-views/support/quality-assurance/index.js rename to www/client/views/page-views/support/quality-assurance/index.js diff --git a/client/views/page-views/support/quality-assurance/lang.json b/www/client/views/page-views/support/quality-assurance/lang.json similarity index 100% rename from client/views/page-views/support/quality-assurance/lang.json rename to www/client/views/page-views/support/quality-assurance/lang.json diff --git a/client/views/page-views/support/quality-assurance/style/index.less b/www/client/views/page-views/support/quality-assurance/style/index.less similarity index 100% rename from client/views/page-views/support/quality-assurance/style/index.less rename to www/client/views/page-views/support/quality-assurance/style/index.less diff --git a/client/views/page-views/support/technical-support/assets/alarm.png b/www/client/views/page-views/support/technical-support/assets/alarm.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/alarm.png rename to www/client/views/page-views/support/technical-support/assets/alarm.png diff --git a/client/views/page-views/support/technical-support/assets/banner2.jpg b/www/client/views/page-views/support/technical-support/assets/banner2.jpg similarity index 100% rename from client/views/page-views/support/technical-support/assets/banner2.jpg rename to www/client/views/page-views/support/technical-support/assets/banner2.jpg diff --git a/client/views/page-views/support/technical-support/assets/green.png b/www/client/views/page-views/support/technical-support/assets/green.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/green.png rename to www/client/views/page-views/support/technical-support/assets/green.png diff --git a/client/views/page-views/support/technical-support/assets/high.png b/www/client/views/page-views/support/technical-support/assets/high.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/high.png rename to www/client/views/page-views/support/technical-support/assets/high.png diff --git a/client/views/page-views/support/technical-support/assets/instance.png b/www/client/views/page-views/support/technical-support/assets/instance.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/instance.png rename to www/client/views/page-views/support/technical-support/assets/instance.png diff --git a/client/views/page-views/support/technical-support/assets/manage.png b/www/client/views/page-views/support/technical-support/assets/manage.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/manage.png rename to www/client/views/page-views/support/technical-support/assets/manage.png diff --git a/client/views/page-views/support/technical-support/assets/monitor.png b/www/client/views/page-views/support/technical-support/assets/monitor.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/monitor.png rename to www/client/views/page-views/support/technical-support/assets/monitor.png diff --git a/client/views/page-views/support/technical-support/assets/network.png b/www/client/views/page-views/support/technical-support/assets/network.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/network.png rename to www/client/views/page-views/support/technical-support/assets/network.png diff --git a/client/views/page-views/support/technical-support/assets/red.png b/www/client/views/page-views/support/technical-support/assets/red.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/red.png rename to www/client/views/page-views/support/technical-support/assets/red.png diff --git a/client/views/page-views/support/technical-support/assets/sc.png b/www/client/views/page-views/support/technical-support/assets/sc.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/sc.png rename to www/client/views/page-views/support/technical-support/assets/sc.png diff --git a/client/views/page-views/support/technical-support/assets/storage.png b/www/client/views/page-views/support/technical-support/assets/storage.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/storage.png rename to www/client/views/page-views/support/technical-support/assets/storage.png diff --git a/client/views/page-views/support/technical-support/assets/up.png b/www/client/views/page-views/support/technical-support/assets/up.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/up.png rename to www/client/views/page-views/support/technical-support/assets/up.png diff --git a/client/views/page-views/support/technical-support/assets/yellow.png b/www/client/views/page-views/support/technical-support/assets/yellow.png similarity index 100% rename from client/views/page-views/support/technical-support/assets/yellow.png rename to www/client/views/page-views/support/technical-support/assets/yellow.png diff --git a/client/views/page-views/support/technical-support/index.ejs b/www/client/views/page-views/support/technical-support/index.ejs similarity index 100% rename from client/views/page-views/support/technical-support/index.ejs rename to www/client/views/page-views/support/technical-support/index.ejs diff --git a/client/views/page-views/support/technical-support/index.js b/www/client/views/page-views/support/technical-support/index.js similarity index 100% rename from client/views/page-views/support/technical-support/index.js rename to www/client/views/page-views/support/technical-support/index.js diff --git a/client/views/page-views/support/technical-support/lang.json b/www/client/views/page-views/support/technical-support/lang.json similarity index 100% rename from client/views/page-views/support/technical-support/lang.json rename to www/client/views/page-views/support/technical-support/lang.json diff --git a/client/views/page-views/support/technical-support/style/index.less b/www/client/views/page-views/support/technical-support/style/index.less similarity index 100% rename from client/views/page-views/support/technical-support/style/index.less rename to www/client/views/page-views/support/technical-support/style/index.less diff --git a/client/views/page-views/support/tf-news/detail-one/assets/banner.png b/www/client/views/page-views/support/tf-news/detail-one/assets/banner.png similarity index 100% rename from client/views/page-views/support/tf-news/detail-one/assets/banner.png rename to www/client/views/page-views/support/tf-news/detail-one/assets/banner.png diff --git a/client/views/page-views/support/tf-news/detail-one/index.ejs b/www/client/views/page-views/support/tf-news/detail-one/index.ejs similarity index 100% rename from client/views/page-views/support/tf-news/detail-one/index.ejs rename to www/client/views/page-views/support/tf-news/detail-one/index.ejs diff --git a/client/views/page-views/support/tf-news/detail-one/index.js b/www/client/views/page-views/support/tf-news/detail-one/index.js similarity index 100% rename from client/views/page-views/support/tf-news/detail-one/index.js rename to www/client/views/page-views/support/tf-news/detail-one/index.js diff --git a/client/views/page-views/support/tf-news/detail-one/lang.json b/www/client/views/page-views/support/tf-news/detail-one/lang.json similarity index 100% rename from client/views/page-views/support/tf-news/detail-one/lang.json rename to www/client/views/page-views/support/tf-news/detail-one/lang.json diff --git a/client/views/page-views/support/tf-news/detail-one/style/index.less b/www/client/views/page-views/support/tf-news/detail-one/style/index.less similarity index 100% rename from client/views/page-views/support/tf-news/detail-one/style/index.less rename to www/client/views/page-views/support/tf-news/detail-one/style/index.less diff --git a/client/views/page-views/support/tf-news/detail-three/assets/banner.png b/www/client/views/page-views/support/tf-news/detail-three/assets/banner.png similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/banner.png rename to www/client/views/page-views/support/tf-news/detail-three/assets/banner.png diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-0.jpeg b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-0.jpeg similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-0.jpeg rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-0.jpeg diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-1.png b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-1.png similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-1.png rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-1.png diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-2.png b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-2.png similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-2.png rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-2.png diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-3.png b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-3.png similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-3.png rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-3.png diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-4.jpeg b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-4.jpeg similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-4.jpeg rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-4.jpeg diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-5.jpeg b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-5.jpeg similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-5.jpeg rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-5.jpeg diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-6.png b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-6.png similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-6.png rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-6.png diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-7.jpeg b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-7.jpeg similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-7.jpeg rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-7.jpeg diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-8.jpeg b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-8.jpeg similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-8.jpeg rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-8.jpeg diff --git a/client/views/page-views/support/tf-news/detail-three/assets/news3-9.png b/www/client/views/page-views/support/tf-news/detail-three/assets/news3-9.png similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/assets/news3-9.png rename to www/client/views/page-views/support/tf-news/detail-three/assets/news3-9.png diff --git a/client/views/page-views/support/tf-news/detail-three/index.ejs b/www/client/views/page-views/support/tf-news/detail-three/index.ejs similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/index.ejs rename to www/client/views/page-views/support/tf-news/detail-three/index.ejs diff --git a/client/views/page-views/support/tf-news/detail-three/index.js b/www/client/views/page-views/support/tf-news/detail-three/index.js similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/index.js rename to www/client/views/page-views/support/tf-news/detail-three/index.js diff --git a/client/views/page-views/support/tf-news/detail-three/lang.json b/www/client/views/page-views/support/tf-news/detail-three/lang.json similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/lang.json rename to www/client/views/page-views/support/tf-news/detail-three/lang.json diff --git a/client/views/page-views/support/tf-news/detail-three/style/index.less b/www/client/views/page-views/support/tf-news/detail-three/style/index.less similarity index 100% rename from client/views/page-views/support/tf-news/detail-three/style/index.less rename to www/client/views/page-views/support/tf-news/detail-three/style/index.less diff --git a/client/views/page-views/support/tf-news/detail-two/assets/2-1.jpeg b/www/client/views/page-views/support/tf-news/detail-two/assets/2-1.jpeg similarity index 100% rename from client/views/page-views/support/tf-news/detail-two/assets/2-1.jpeg rename to www/client/views/page-views/support/tf-news/detail-two/assets/2-1.jpeg diff --git a/client/views/page-views/support/tf-news/detail-two/assets/2-2.jpeg b/www/client/views/page-views/support/tf-news/detail-two/assets/2-2.jpeg similarity index 100% rename from client/views/page-views/support/tf-news/detail-two/assets/2-2.jpeg rename to www/client/views/page-views/support/tf-news/detail-two/assets/2-2.jpeg diff --git a/client/views/page-views/support/tf-news/detail-two/assets/2-3.jpeg b/www/client/views/page-views/support/tf-news/detail-two/assets/2-3.jpeg similarity index 100% rename from client/views/page-views/support/tf-news/detail-two/assets/2-3.jpeg rename to www/client/views/page-views/support/tf-news/detail-two/assets/2-3.jpeg diff --git a/client/views/page-views/support/tf-news/detail-two/assets/2-4.jpeg b/www/client/views/page-views/support/tf-news/detail-two/assets/2-4.jpeg similarity index 100% rename from client/views/page-views/support/tf-news/detail-two/assets/2-4.jpeg rename to www/client/views/page-views/support/tf-news/detail-two/assets/2-4.jpeg diff --git a/client/views/page-views/support/tf-news/detail-two/assets/banner.png b/www/client/views/page-views/support/tf-news/detail-two/assets/banner.png similarity index 100% rename from client/views/page-views/support/tf-news/detail-two/assets/banner.png rename to www/client/views/page-views/support/tf-news/detail-two/assets/banner.png diff --git a/client/views/page-views/support/tf-news/detail-two/index.ejs b/www/client/views/page-views/support/tf-news/detail-two/index.ejs similarity index 100% rename from client/views/page-views/support/tf-news/detail-two/index.ejs rename to www/client/views/page-views/support/tf-news/detail-two/index.ejs diff --git a/client/views/page-views/support/tf-news/detail-two/index.js b/www/client/views/page-views/support/tf-news/detail-two/index.js similarity index 100% rename from client/views/page-views/support/tf-news/detail-two/index.js rename to www/client/views/page-views/support/tf-news/detail-two/index.js diff --git a/client/views/page-views/support/tf-news/detail-two/lang.json b/www/client/views/page-views/support/tf-news/detail-two/lang.json similarity index 100% rename from client/views/page-views/support/tf-news/detail-two/lang.json rename to www/client/views/page-views/support/tf-news/detail-two/lang.json diff --git a/client/views/page-views/support/tf-news/detail-two/style/index.less b/www/client/views/page-views/support/tf-news/detail-two/style/index.less similarity index 100% rename from client/views/page-views/support/tf-news/detail-two/style/index.less rename to www/client/views/page-views/support/tf-news/detail-two/style/index.less diff --git a/client/views/page-views/support/tf-news/list/assets/banner.png b/www/client/views/page-views/support/tf-news/list/assets/banner.png similarity index 100% rename from client/views/page-views/support/tf-news/list/assets/banner.png rename to www/client/views/page-views/support/tf-news/list/assets/banner.png diff --git a/client/views/page-views/support/tf-news/list/assets/news1.png b/www/client/views/page-views/support/tf-news/list/assets/news1.png similarity index 100% rename from client/views/page-views/support/tf-news/list/assets/news1.png rename to www/client/views/page-views/support/tf-news/list/assets/news1.png diff --git a/client/views/page-views/support/tf-news/list/assets/news2.png b/www/client/views/page-views/support/tf-news/list/assets/news2.png similarity index 100% rename from client/views/page-views/support/tf-news/list/assets/news2.png rename to www/client/views/page-views/support/tf-news/list/assets/news2.png diff --git a/client/views/page-views/support/tf-news/list/assets/news3.png b/www/client/views/page-views/support/tf-news/list/assets/news3.png similarity index 100% rename from client/views/page-views/support/tf-news/list/assets/news3.png rename to www/client/views/page-views/support/tf-news/list/assets/news3.png diff --git "a/client/views/page-views/support/tf-news/list/assets/\345\274\200\346\272\220banner2.png" "b/www/client/views/page-views/support/tf-news/list/assets/\345\274\200\346\272\220banner2.png" similarity index 100% rename from "client/views/page-views/support/tf-news/list/assets/\345\274\200\346\272\220banner2.png" rename to "www/client/views/page-views/support/tf-news/list/assets/\345\274\200\346\272\220banner2.png" diff --git a/client/views/page-views/support/tf-news/list/index.ejs b/www/client/views/page-views/support/tf-news/list/index.ejs similarity index 100% rename from client/views/page-views/support/tf-news/list/index.ejs rename to www/client/views/page-views/support/tf-news/list/index.ejs diff --git a/client/views/page-views/support/tf-news/list/index.js b/www/client/views/page-views/support/tf-news/list/index.js similarity index 100% rename from client/views/page-views/support/tf-news/list/index.js rename to www/client/views/page-views/support/tf-news/list/index.js diff --git a/client/views/page-views/support/tf-news/list/lang.json b/www/client/views/page-views/support/tf-news/list/lang.json similarity index 100% rename from client/views/page-views/support/tf-news/list/lang.json rename to www/client/views/page-views/support/tf-news/list/lang.json diff --git a/client/views/page-views/support/tf-news/list/style/index.less b/www/client/views/page-views/support/tf-news/list/style/index.less similarity index 100% rename from client/views/page-views/support/tf-news/list/style/index.less rename to www/client/views/page-views/support/tf-news/list/style/index.less diff --git a/client/views/page-views/train/technical-train/assets/banner2.jpg b/www/client/views/page-views/train/technical-train/assets/banner2.jpg similarity index 100% rename from client/views/page-views/train/technical-train/assets/banner2.jpg rename to www/client/views/page-views/train/technical-train/assets/banner2.jpg diff --git a/client/views/page-views/train/technical-train/assets/featured-picture-1.png b/www/client/views/page-views/train/technical-train/assets/featured-picture-1.png similarity index 100% rename from client/views/page-views/train/technical-train/assets/featured-picture-1.png rename to www/client/views/page-views/train/technical-train/assets/featured-picture-1.png diff --git a/client/views/page-views/train/technical-train/assets/featured-picture-2.png b/www/client/views/page-views/train/technical-train/assets/featured-picture-2.png similarity index 100% rename from client/views/page-views/train/technical-train/assets/featured-picture-2.png rename to www/client/views/page-views/train/technical-train/assets/featured-picture-2.png diff --git a/client/views/page-views/train/technical-train/assets/featured-picture-3.png b/www/client/views/page-views/train/technical-train/assets/featured-picture-3.png similarity index 100% rename from client/views/page-views/train/technical-train/assets/featured-picture-3.png rename to www/client/views/page-views/train/technical-train/assets/featured-picture-3.png diff --git a/client/views/page-views/train/technical-train/assets/train_1.png b/www/client/views/page-views/train/technical-train/assets/train_1.png similarity index 100% rename from client/views/page-views/train/technical-train/assets/train_1.png rename to www/client/views/page-views/train/technical-train/assets/train_1.png diff --git a/client/views/page-views/train/technical-train/assets/train_2.png b/www/client/views/page-views/train/technical-train/assets/train_2.png similarity index 100% rename from client/views/page-views/train/technical-train/assets/train_2.png rename to www/client/views/page-views/train/technical-train/assets/train_2.png diff --git a/client/views/page-views/train/technical-train/assets/train_3.png b/www/client/views/page-views/train/technical-train/assets/train_3.png similarity index 100% rename from client/views/page-views/train/technical-train/assets/train_3.png rename to www/client/views/page-views/train/technical-train/assets/train_3.png diff --git a/client/views/page-views/train/technical-train/assets/train_4.png b/www/client/views/page-views/train/technical-train/assets/train_4.png similarity index 100% rename from client/views/page-views/train/technical-train/assets/train_4.png rename to www/client/views/page-views/train/technical-train/assets/train_4.png diff --git a/client/views/page-views/train/technical-train/index.ejs b/www/client/views/page-views/train/technical-train/index.ejs similarity index 100% rename from client/views/page-views/train/technical-train/index.ejs rename to www/client/views/page-views/train/technical-train/index.ejs diff --git a/client/views/page-views/train/technical-train/index.js b/www/client/views/page-views/train/technical-train/index.js similarity index 100% rename from client/views/page-views/train/technical-train/index.js rename to www/client/views/page-views/train/technical-train/index.js diff --git a/client/views/page-views/train/technical-train/lang.json b/www/client/views/page-views/train/technical-train/lang.json similarity index 100% rename from client/views/page-views/train/technical-train/lang.json rename to www/client/views/page-views/train/technical-train/lang.json diff --git a/client/views/page-views/train/technical-train/style/index.less b/www/client/views/page-views/train/technical-train/style/index.less similarity index 100% rename from client/views/page-views/train/technical-train/style/index.less rename to www/client/views/page-views/train/technical-train/style/index.less diff --git a/client/views/page-views/train/train-apply/assets/banner2.jpg b/www/client/views/page-views/train/train-apply/assets/banner2.jpg similarity index 100% rename from client/views/page-views/train/train-apply/assets/banner2.jpg rename to www/client/views/page-views/train/train-apply/assets/banner2.jpg diff --git a/client/views/page-views/train/train-apply/assets/checked.png b/www/client/views/page-views/train/train-apply/assets/checked.png similarity index 100% rename from client/views/page-views/train/train-apply/assets/checked.png rename to www/client/views/page-views/train/train-apply/assets/checked.png diff --git a/client/views/page-views/train/train-apply/assets/default.jpg b/www/client/views/page-views/train/train-apply/assets/default.jpg similarity index 100% rename from client/views/page-views/train/train-apply/assets/default.jpg rename to www/client/views/page-views/train/train-apply/assets/default.jpg diff --git a/client/views/page-views/train/train-apply/assets/error.jpg b/www/client/views/page-views/train/train-apply/assets/error.jpg similarity index 100% rename from client/views/page-views/train/train-apply/assets/error.jpg rename to www/client/views/page-views/train/train-apply/assets/error.jpg diff --git a/client/views/page-views/train/train-apply/assets/loading.jpg b/www/client/views/page-views/train/train-apply/assets/loading.jpg similarity index 100% rename from client/views/page-views/train/train-apply/assets/loading.jpg rename to www/client/views/page-views/train/train-apply/assets/loading.jpg diff --git a/client/views/page-views/train/train-apply/assets/map.jpg b/www/client/views/page-views/train/train-apply/assets/map.jpg similarity index 100% rename from client/views/page-views/train/train-apply/assets/map.jpg rename to www/client/views/page-views/train/train-apply/assets/map.jpg diff --git a/client/views/page-views/train/train-apply/assets/selected.jpg b/www/client/views/page-views/train/train-apply/assets/selected.jpg similarity index 100% rename from client/views/page-views/train/train-apply/assets/selected.jpg rename to www/client/views/page-views/train/train-apply/assets/selected.jpg diff --git a/client/views/page-views/train/train-apply/assets/success.jpg b/www/client/views/page-views/train/train-apply/assets/success.jpg similarity index 100% rename from client/views/page-views/train/train-apply/assets/success.jpg rename to www/client/views/page-views/train/train-apply/assets/success.jpg diff --git a/client/views/page-views/train/train-apply/assets/warning.png b/www/client/views/page-views/train/train-apply/assets/warning.png similarity index 100% rename from client/views/page-views/train/train-apply/assets/warning.png rename to www/client/views/page-views/train/train-apply/assets/warning.png diff --git a/client/views/page-views/train/train-apply/assets/yes.jpg b/www/client/views/page-views/train/train-apply/assets/yes.jpg similarity index 100% rename from client/views/page-views/train/train-apply/assets/yes.jpg rename to www/client/views/page-views/train/train-apply/assets/yes.jpg diff --git a/client/views/page-views/train/train-apply/index.ejs b/www/client/views/page-views/train/train-apply/index.ejs similarity index 100% rename from client/views/page-views/train/train-apply/index.ejs rename to www/client/views/page-views/train/train-apply/index.ejs diff --git a/client/views/page-views/train/train-apply/index.js b/www/client/views/page-views/train/train-apply/index.js similarity index 100% rename from client/views/page-views/train/train-apply/index.js rename to www/client/views/page-views/train/train-apply/index.js diff --git a/client/views/page-views/train/train-apply/lang.json b/www/client/views/page-views/train/train-apply/lang.json similarity index 100% rename from client/views/page-views/train/train-apply/lang.json rename to www/client/views/page-views/train/train-apply/lang.json diff --git a/client/views/page-views/train/train-apply/style/index.less b/www/client/views/page-views/train/train-apply/style/index.less similarity index 100% rename from client/views/page-views/train/train-apply/style/index.less rename to www/client/views/page-views/train/train-apply/style/index.less diff --git a/client/views/page-views/train/train-list/assets/banner2.jpg b/www/client/views/page-views/train/train-list/assets/banner2.jpg similarity index 100% rename from client/views/page-views/train/train-list/assets/banner2.jpg rename to www/client/views/page-views/train/train-list/assets/banner2.jpg diff --git a/client/views/page-views/train/train-list/assets/bannerpic@v2.0.png b/www/client/views/page-views/train/train-list/assets/bannerpic@v2.0.png similarity index 100% rename from client/views/page-views/train/train-list/assets/bannerpic@v2.0.png rename to www/client/views/page-views/train/train-list/assets/bannerpic@v2.0.png diff --git a/client/views/page-views/train/train-list/assets/icon-in.png b/www/client/views/page-views/train/train-list/assets/icon-in.png similarity index 100% rename from client/views/page-views/train/train-list/assets/icon-in.png rename to www/client/views/page-views/train/train-list/assets/icon-in.png diff --git a/client/views/page-views/train/train-list/assets/icon-out.png b/www/client/views/page-views/train/train-list/assets/icon-out.png similarity index 100% rename from client/views/page-views/train/train-list/assets/icon-out.png rename to www/client/views/page-views/train/train-list/assets/icon-out.png diff --git a/client/views/page-views/train/train-list/index.ejs b/www/client/views/page-views/train/train-list/index.ejs similarity index 100% rename from client/views/page-views/train/train-list/index.ejs rename to www/client/views/page-views/train/train-list/index.ejs diff --git a/client/views/page-views/train/train-list/index.js b/www/client/views/page-views/train/train-list/index.js similarity index 100% rename from client/views/page-views/train/train-list/index.js rename to www/client/views/page-views/train/train-list/index.js diff --git a/client/views/page-views/train/train-list/lang.json b/www/client/views/page-views/train/train-list/lang.json similarity index 100% rename from client/views/page-views/train/train-list/lang.json rename to www/client/views/page-views/train/train-list/lang.json diff --git a/client/views/page-views/train/train-list/style/index.less b/www/client/views/page-views/train/train-list/style/index.less similarity index 100% rename from client/views/page-views/train/train-list/style/index.less rename to www/client/views/page-views/train/train-list/style/index.less diff --git a/www/config/config.default.js b/www/config/config.default.js new file mode 100644 index 0000000..d08effe --- /dev/null +++ b/www/config/config.default.js @@ -0,0 +1,39 @@ +const { join } = require('path'); +const defaultConfig = require('../../config/default'); +module.exports = app=>{ + const config={}; + config.keys='tfcloud', + config.static={ + prefix: '/static/', + dir:join(app.baseDir, 'client/static'), + // support lazy load + dynamic: true, + preload: false, + buffer: false, + maxFiles: 1000, + }; + config.cluster={ + listen:{ + port:3000, + } + }; + config.view={ + root: [ + join(app.baseDir, 'client/views'), + ].join(','), + defaultViewEngine: 'ejs', + defaultExtension: '.ejs', + mapping: { '.ejs': 'ejs' } + }; + //middleware + config.middleware=['errorHandler','checkCaptcha']; + // only takes effect on URL prefix with '/api' + config.errorHandler={ + match: /(.*\/api\/.*)/, + }; + config.checkCaptcha={ + match:'/apply/api/*' + }; + Object.assign(config,defaultConfig); + return config; +}; diff --git a/www/config/plugin.js b/www/config/plugin.js new file mode 100644 index 0000000..3f57e3e --- /dev/null +++ b/www/config/plugin.js @@ -0,0 +1,14 @@ +// exports.ejs={ +// enable:true, +// package:'egg-view-ejs' +// } +// exports.sequelize = { +// enable: true, +// package: 'egg-sequelize' +// } + +exports.sequelize = true; +exports.validate = { + enable: true, + package: 'egg-validate', +}; diff --git a/www/package.json b/www/package.json new file mode 100644 index 0000000..8350db9 --- /dev/null +++ b/www/package.json @@ -0,0 +1,112 @@ +{ + "name": "ashe-client", + "version": "0.0.1", + "description": "Public cloud official website client part", + "main": "index.js", + "scripts": { + "start": "egg-bin dev", + "test": "egg-bin test", + "debug": "egg-bin debug", + "client_build": "cd client/build && grunt build", + "client_dev": "cd client/build && grunt watch", + "build": "npm run client_build", + "iconfont": "cd client/build && grunt font", + "palette": "cd client/build && grunt palette", + "merge_assets": "cd client/build && grunt copy_assets", + "html": "cd client/build && grunt html", + "eslint": "eslint *.js www/app/**/**/ www/scripts/ www/client/**/ --ext .js,.jsx --cache", + "add_eslint": "cd scripts && node checkPreCommit.js", + "prepare": "cd scripts && node checkPreCommit.js", + "preinstall": "cd scripts && node checkNodeVersion.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/unitedstack/Ashe.git" + }, + "keywords": [ + "official", + "website" + ], + "authors": [ + "PengJiyuan <731401082@qq.com>" + ], + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/unitedstack/Ashe/issues" + }, + "homepage": "https://github.com/unitedstack/Ashe#readme", + "egg": { + "framework": "@ustack/halo" + }, + "devDependencies": { + "autoprefixer": "^7.1.5", + "babel-core": "^6.26.0", + "babel-eslint": "^8.0.1", + "babel-loader": "^7.1.2", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-preset-env": "^1.6.0", + "babel-preset-react": "^6.24.1", + "colors": "^1.1.2", + "compression-webpack-plugin": "^1.0.1", + "css-loader": "^0.28.7", + "egg-mock": "^3.17.3", + "ejs": "^2.5.7", + "eslint": "^4.8.0", + "eslint-plugin-babel": "^4.1.2", + "eslint-plugin-react": "^7.4.0", + "extract-text-webpack-plugin": "^3.0.1", + "file-loader": "^1.1.6", + "glob": "^7.1.2", + "grunt": "^1.0.1", + "grunt-banner": "^0.6.0", + "grunt-contrib-clean": "^1.1.0", + "grunt-contrib-copy": "^1.0.0", +<<<<<<< HEAD + "grunt-contrib-imagemin": "^2.0.1", +======= +>>>>>>> iamtmoe/develop2 + "grunt-contrib-less": "^1.4.1", + "grunt-contrib-watch": "^1.0.0", + "grunt-rev": "^0.1.0", + "grunt-webfont": "^1.6.0", + "grunt-webpack": "^3.0.2", +<<<<<<< HEAD + "imagemin-mozjpeg": "^7.0.0", +======= +>>>>>>> iamtmoe/develop2 + "less": "^2.7.2", + "less-loader": "^4.0.5", + "less-plugin-autoprefix": "^1.5.1", + "less-var-parse": "^1.0.1", + "load-grunt-tasks": "^3.5.2", + "mocha": "^5.2.0", + "postcss-loader": "^2.0.6", + "time-grunt": "^1.4.0", + "uglifyjs-webpack-plugin": "^0.4.6", + "url-loader": "^0.6.2", + "webpack": "^3.9.1" + }, + "dependencies": { + "@ustack/halo": "^0.0.10", + "babel-polyfill": "^6.26.0", + "babel-runtime": "^6.26.0", + "bcrypt": "^3.0.0", + "ccap": "^0.6.10", + "clipboard-plus": "^1.1.0", + "egg-bin": "^4.8.1", + "egg-validate": "^1.1.1", + "json-path": "^0.1.3", + "koa-send": "^5.0.0", + "memjs": "^1.2.0", + "nodemailer": "^4.6.7", + "react": "^15.4.2", + "react-dom": "^15.4.2", + "rsvp": "^4.7.0", + "simditor": "^2.3.6", + "urlencode": "^1.1.0" + }, + "engineStrict": true, + "engines": { + "node": ">=8" + } +} diff --git a/www/pre-commit b/www/pre-commit new file mode 100755 index 0000000..20d5a7b --- /dev/null +++ b/www/pre-commit @@ -0,0 +1,6 @@ +#!/bin/bash + +# CSC, Code Style Checker + +cd /home/yjk/ashe222/www +npm run eslint diff --git a/www/scripts/checkNodeVersion.js b/www/scripts/checkNodeVersion.js new file mode 100644 index 0000000..5e732bb --- /dev/null +++ b/www/scripts/checkNodeVersion.js @@ -0,0 +1,69 @@ +/** + * Author: Pengjiyuan + * + * npm engineStrict hook(because engineStrict was removed in npm 3.0.0) + * check node version + * by field engines from package.json + * + * support types: + * node: '*' -- all node versions + * node: '~x.x.x' -- A certain version + * node: '>=number' or ' or < or <= or >=] number) + * node: '>=number <=number' -- range (number <= nodeVersion <=number) + */ +const version = process.version; +const pkg = require('../package.json'); +const requireNodeVersion = pkg.engines.node; + +if(!pkg.engineStrict) { + process.exit(); +} + +const errorOutput = function(requireVersion) { + return '\n\ + \x1b[31mRequire Node Version ' + requireVersion + '!\n\ + but local node version is ' + version + '\n\ + You can:\n\ + `nvm install ' + requireVersion + '` or see https://nodejs.org/\x1b[0m\ + \n\ + '; +}; + +/** + * node: '*' + */ +if(requireNodeVersion === '*') { + console.log('\x1b[32m%s\x1b[0m', 'Support any node version\n\ + Current node version ' + version); + process.exit(); +} +/** + * node: '~x.x.x' + * specify node version + */ +else if(requireNodeVersion[0] === '~') { + if(requireNodeVersion.split('~')[1] != version.split('v')[1]) { + throw new Error(errorOutput(requireNodeVersion)); + } +} +/** + * node: '>=number' + * range + */ +else if(/[><=]/.test(requireNodeVersion[0]) && requireNodeVersion.split(' ').length === 1) { + if(!eval(version.split('.')[0][1] + requireNodeVersion)) { + throw new Error(errorOutput(requireNodeVersion)); + } +} +/** + * node: '>number <=]/.test(requireNodeVersion[0]) && requireNodeVersion.split(' ').length === 2) { + const reg1 = requireNodeVersion.split(' ')[0]; + const reg2 = requireNodeVersion.split(' ')[1]; + if(!eval(version.split('.')[0][1] + reg1) || !eval(version.split('.')[0][1] + reg2)) { + throw new Error(errorOutput(requireNodeVersion)); + } +} + +console.log('\x1b[32m%s\x1b[0m', 'Current node version ' + version); diff --git a/www/scripts/checkPreCommit.js b/www/scripts/checkPreCommit.js new file mode 100644 index 0000000..7578b71 --- /dev/null +++ b/www/scripts/checkPreCommit.js @@ -0,0 +1,27 @@ +/** + * Author: PengJiyuan + * + * Check if pre-commit hook exist + * if not exist, create pre-commit + * before commit, npm run eslint + */ + +const path = require('path'); +const fs = require('fs'); +const execFile = require('child_process').execFile; +const scriptPath = path.resolve(__dirname, 'precommit-hook.sh'); +require('colors'); + +if(fs.existsSync(path.resolve(__dirname, '../.git/hooks/pre-commit'))) { + console.log('Pre Commit Hook already exist!'.green); +} else { + fs.chmod(scriptPath, '755', () => { + console.log('chmod 755 precommit-hook.sh.'.green); + execFile(scriptPath, [path.join(__dirname, '..')], { + cwd: path.join(__dirname, '..') + }, () => { + console.log('Add Pre Commit Hook Success!'.green); + console.log(''); + }); + }); +} diff --git a/www/scripts/mkAccount.js b/www/scripts/mkAccount.js new file mode 100644 index 0000000..685f842 --- /dev/null +++ b/www/scripts/mkAccount.js @@ -0,0 +1,63 @@ +const readline = require('readline'); +const mysql = require('mysql'); +const uuid = require('uuid'); +const hashPassword = require('../server/tools/password.js').password.hash; +const config = require('../config'); +const mysqlConfig = config('mysql'); + +const mkAccount = async (username, password) => { + let pass = await hashPassword(password); + username = 'test_' + username; + let connection = mysql.createConnection(mysqlConfig); + connection.connect(); + connection.query(`select * from account where username = "${username}"`, (errQuery, reQuery) => { + if (errQuery) { + console.error(errQuery); + }else { + if(reQuery.length){ + console.log(`${username} 已存在,重置密码`); + connection.query(`update account set password = "${pass}", enable = 1 where username = "${username}"`, (errReset, rsReset) => { + if(!errReset){ + console.log(`${username} 密码重置成功`); + }else{ + console.error(errReset); + } + }); + } else { + connection.query(`insert into account (id,username,phone,email,password,nickname,enable,createdAt,updatedAt) values ("${uuid.v4()}","${username}",13600001111,"test@ustack.com","${pass}","${username}",1,"2001-11-11","2011-11-11");`, function (errInsert, rsInsert ) { + if(!errInsert){ + console.log(`${username} 创建成功`); + }else{ + console.error(errInsert); + } + }); + } + } + connection.end(); + }); +}; + +const rl = readline.createInterface({ + input: process.stdin, + output: process.stdout +}); +let username = ''; +let password = ''; +console.log('We are creating an account for admin!\n'); +rl.question('Your username?\n', (user) => { + username = user; + console.log(`username:${username}`); + rl.question('Your password?\n', pass => { + password = pass; + rl.close(); + }); +}); + +rl.on('close', ()=>{ + mkAccount(username, password); +}); + + + + + diff --git a/www/scripts/mkNginxConf.js b/www/scripts/mkNginxConf.js new file mode 100644 index 0000000..65733e8 --- /dev/null +++ b/www/scripts/mkNginxConf.js @@ -0,0 +1,128 @@ +'use strict'; +const path = require('path'); +const fs = require('fs'); +const cp = require('child_process'); + +const configsDirectory = 'conf.d'; +const projectDirectory = path.join(__dirname, '..'); +cp.execSync(`git clean -fd nginx_conf/nginx.conf nginx_conf/${configsDirectory}`); +fs.mkdirSync(path.join(projectDirectory, 'nginx_conf', configsDirectory)); +const nginxContent = +` +user root; +worker_processes auto; +pid /var/log/nginx/nginx.pid; + +events { + worker_connections 768; + multi_accept on; +} + +http { + ## Basic Settings + + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + # server_tokens off; + # server_names_hash_bucket_size 64; + # server_name_in_redirect off; + + include ${projectDirectory}/nginx_conf/mime.types; + default_type application/octet-stream; + + ## SSL Settings + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE + ssl_prefer_server_ciphers on; + + ## Logging Settings + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + ## Gzip Settings + + gzip on; + gzip_disable "msie6"; + include ${configsDirectory}/*.conf; +} +`; + +fs.writeFileSync(path.join(__dirname, '../nginx_conf/nginx.conf'), nginxContent); + +const serverContent = +` +server { + listen 80; + server_name tfcloud.com www.tfcloud.com; + + rewrite ^(.*)$ https://www.tfcloud.com$1 permanent; +} + +server { + listen 443 ssl http2; + server_name tfcloud.com www.tfcloud.com; + + if ($http_host != "www.tfcloud.com") { + rewrite ^ https://www.tfcloud.com$request_uri permanent; + } + ssl on; + ssl_certificate tfcloud-cert/tfcloud.crt; + ssl_certificate_key tfcloud-cert/tfcloud.key; + ssl_session_timeout 5m; + ssl_ciphers RC4:HIGH:!aNULL:!MD5; + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_prefer_server_ciphers on; + + location /static/ { + alias "${projectDirectory}/client/static/"; + satisfy all; + expires 1y; + gzip on; + gzip_static on; + } + location /static/dist/ { + alias "${projectDirectory}/admin/dist/"; + satisfy all; + expires 1y; + gzip_static on; + } + + location /static/assets { + alias "${projectDirectory}/admin/assets"; + satisfy all; + expires 1y; + gzip_static on; + } + location /wp-content { + alias "${projectDirectory}/static/wp-content"; + satisfy all; + expires 1y; + gzip on; + } + location ~ /docs/*/gitbook/ { + alias "${projectDirectory}/static/gitbook"; + satisfy all; + expires 1y; + gzip_static on; + } + location / { + proxy_pass http://127.0.0.1:5555; + } +} +`; +fs.writeFileSync(path.join(__dirname, '../nginx_conf', configsDirectory, 'tfcloud.conf'), serverContent); + + +console.log(`Success: Nginx config files has been generated successfully! + +please place the https cert and the key to the current location: + ${projectDirectory}/nginx_conf/tfcloud-cert/tfcloud.crt + ${projectDirectory}/nginx_conf/tfcloud-cert/tfcloud.key + +and run "sudo nginx -c ${projectDirectory}/nginx_conf/nginx.conf -t" to test config files. + +Then run "sudo nginx -c ${projectDirectory}/nginx_conf/nginx.conf" to start the server;`); \ No newline at end of file diff --git a/www/scripts/precommit-hook.sh b/www/scripts/precommit-hook.sh new file mode 100755 index 0000000..163fdc9 --- /dev/null +++ b/www/scripts/precommit-hook.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +FILE="pre-commit" + +cd .git/hooks + +if [ ! -e $FILE ] + then + touch $FILE + chmod +x $FILE +fi + +echo -e "#!/bin/bash\n\n# CSC, Code Style Checker\n\ncd $1\nnpm run eslint" > $FILE \ No newline at end of file diff --git a/www/test/app/controller/client/apply.test.js b/www/test/app/controller/client/apply.test.js new file mode 100644 index 0000000..5940180 --- /dev/null +++ b/www/test/app/controller/client/apply.test.js @@ -0,0 +1,30 @@ +const { app,assert,mock } = require('egg-mock/bootstrap'); + +describe('test/app/controller/client/apply.test.js',()=>{ + describe('applyTrain',()=>{ + it('should be captcha error',async ()=>{ + const ctx=app.mockContext(); + app.mockCsrf(); + const res=await app.httpRequest() + .post('/apply/api/train') + .expect(400); + assert(JSON.stringify(res.error).includes('验证码错误')); + }); + + it('should not pass validate',async ()=>{ + const ctx=app.mockContext({ + session: { + www_captcha: '1234' + } + }); + app.mockCsrf(); + const res=await app.httpRequest() + .post('/apply/api/train') + .send({ + captcha:'1234' + }); + // assert(JSON.stringify(res.error).includes('用户名不能为空')); + assert(res.status==422); + }); + }); +}) \ No newline at end of file diff --git a/www/test/app/controller/client/article.test.js b/www/test/app/controller/client/article.test.js new file mode 100644 index 0000000..e69de29 diff --git a/www/test/app/controller/client/job.test.js b/www/test/app/controller/client/job.test.js new file mode 100644 index 0000000..87c5e93 --- /dev/null +++ b/www/test/app/controller/client/job.test.js @@ -0,0 +1,12 @@ +const { app,assert,mock } = require('egg-mock/bootstrap'); + +describe('test/app/controller/view.test.js',()=>{ + describe('listJobs',()=>{ + it('get (\'/api/job\') result body should be object',async ()=>{ + const result=await app.httpRequest() + .get('/api/job') + .expect(200); + assert((typeof result.body=="object") && result.body!==null); + }); + }); +}) \ No newline at end of file diff --git a/www/test/app/controller/client/tool.test.js b/www/test/app/controller/client/tool.test.js new file mode 100644 index 0000000..04a34e3 --- /dev/null +++ b/www/test/app/controller/client/tool.test.js @@ -0,0 +1,12 @@ +const { app,assert,mock } = require('egg-mock/bootstrap'); + +describe('test/app/controller/view.test.js',()=>{ + describe('chap',()=>{ + it('/api/tool/captcha should 返回验证码',async ()=>{ + const res=await app.httpRequest() + .get('/api/tool/captcha') + .expect(200); + assert(typeof res.body=="object" && res.body!==null); + }); + }); +}) \ No newline at end of file diff --git a/www/test/app/controller/client/view.test.js b/www/test/app/controller/client/view.test.js new file mode 100644 index 0000000..5830178 --- /dev/null +++ b/www/test/app/controller/client/view.test.js @@ -0,0 +1,27 @@ +const { app,assert,mock } = require('egg-mock/bootstrap'); + +describe('test/app/controller/view.test.js',()=>{ + describe('index',()=>{ + it('get(\'/\') status should be 200',async ()=>{ + await app.httpRequest() + .get('/') + .expect(200); + }); + }); + + describe('errorPage',()=>{ + it('get /xxx status should be 404',async ()=>{ + const result=await app.httpRequest() + .get('/xxx') + .expect(404); + }) + }); + + describe('staticPage',()=>{ + it('get /about/clients status should be 200',async ()=>{ + await app.httpRequest() + .get('/about/clients') + .expect(200); + }) + }); +}) \ No newline at end of file diff --git a/www/test/app/extend/application.test.js b/www/test/app/extend/application.test.js new file mode 100644 index 0000000..3f8fdd2 --- /dev/null +++ b/www/test/app/extend/application.test.js @@ -0,0 +1,7 @@ +const { app,assert,mock } = require('egg-mock/bootstrap'); + +describe('test/app/controller/client/apply.test.js',()=>{ + it('should add FileHash to app',()=>{ + assert(app.FileHash); + }); +}) \ No newline at end of file diff --git a/www/test/app/middleware/checkCaptcha.js b/www/test/app/middleware/checkCaptcha.js new file mode 100644 index 0000000..27d12f5 --- /dev/null +++ b/www/test/app/middleware/checkCaptcha.js @@ -0,0 +1,5 @@ +const { app,assert,mock } = require('egg-mock/bootstrap'); + +describe('test/app/middleware/checkCaptcha.test.js',()=>{ + it('should') +}) \ No newline at end of file diff --git a/www/test/app/service/client/apply.test.js b/www/test/app/service/client/apply.test.js new file mode 100644 index 0000000..a1087cd --- /dev/null +++ b/www/test/app/service/client/apply.test.js @@ -0,0 +1,27 @@ +const { app,assert,mock } = require('egg-mock/bootstrap'); + +describe('test/app/service/client/apply.test.js',()=>{ + describe('applyTrain',()=>{ + it('should create table train',async ()=>{ + const ctx=app.mockContext(); + const result=await ctx.service.client.apply.applyTrain({}); + assert(typeof result=="object" && result!==null) + }); + }); + + describe('applyCooperation',()=>{ + it('should create table cooperation',async ()=>{ + const ctx=app.mockContext(); + const result=await ctx.service.client.apply.applyCooperation({}); + assert(typeof result=="object" && result!==null) + }); + }); + + describe('applyCloud',()=>{ + it('should create table cloud',async ()=>{ + const ctx=app.mockContext(); + const result=await ctx.service.client.apply.applyCloud({}); + assert(typeof result=="object" && result!==null) + }); + }); +}) \ No newline at end of file