提交 bd077a5413e53f78407358a3124879891bc2d38f

作者 fanwh
1 个父辈 0bb007a8

no message

要显示太多修改。

为保证性能只显示 41 of 41+ 个文件。

@@ -24,6 +24,7 @@ @@ -24,6 +24,7 @@
24 "service:settlemgmIterative": "better-npm-run service-settlemgmIterative", 24 "service:settlemgmIterative": "better-npm-run service-settlemgmIterative",
25 "service:hroSettlemgm": "better-npm-run service-hroSettlemgm", 25 "service:hroSettlemgm": "better-npm-run service-hroSettlemgm",
26 "service:hroTemp": "better-npm-run service-hroTemp", 26 "service:hroTemp": "better-npm-run service-hroTemp",
  27 + "service:hroEngma": "better-npm-run service-hroEngma",
27 "service:developTest": "better-npm-run service-developTest", 28 "service:developTest": "better-npm-run service-developTest",
28 "dev-start": "node-debug ./app.js", 29 "dev-start": "node-debug ./app.js",
29 "prepublish": "npm prune", 30 "prepublish": "npm prune",
@@ -93,7 +94,7 @@ @@ -93,7 +94,7 @@
93 } 94 }
94 }, 95 },
95 "service": { 96 "service": {
96 - "command": "babel-node server/app.js", 97 + "command": "pm2 start server/app.js -i max --name web-hro",
97 "env": { 98 "env": {
98 "NODE_ENV": "production", 99 "NODE_ENV": "production",
99 "DEBUG": "app:*" 100 "DEBUG": "app:*"
@@ -154,6 +155,13 @@ @@ -154,6 +155,13 @@
154 "NODE_ENV": "test", 155 "NODE_ENV": "test",
155 "DEBUG": "app:*" 156 "DEBUG": "app:*"
156 } 157 }
  158 + },
  159 + "service-hroEngma": {
  160 + "command": "pm2 start server/app.js -i 2 --name web-hro-engma",
  161 + "env": {
  162 + "NODE_ENV": "hroEngma",
  163 + "DEBUG": "app:*"
  164 + }
157 } 165 }
158 }, 166 },
159 "keywords": [ 167 "keywords": [
@@ -369,4 +377,4 @@ @@ -369,4 +377,4 @@
369 }, 377 },
370 "author": "fan", 378 "author": "fan",
371 "license": "ISC" 379 "license": "ISC"
372 -}  
  380 +}
@@ -165,12 +165,14 @@ exports = module.exports = function () { @@ -165,12 +165,14 @@ exports = module.exports = function () {
165 port: 35729 165 port: 35729
166 }, 166 },
167 restful: { 167 restful: {
168 - url: 'http://47.110.158.110:20000/',  
169 - ossUrl: 'http://47.110.158.110:20000/',  
170 - version: '/v1',  
171 - host: '47.110.158.110',  
172 - port: 20000 168 + url: 'http://154.8.229.55:20000/',
  169 + // url:'http://192.144.144.220:20000/',
  170 + //url:'http://127.0.0.1:20000/',
  171 + // url:'http://140.143.196.80:20000/',
  172 + ossUrl: 'http://192.168.2.72:20000/',
  173 + version: '/v1'
173 }, 174 },
  175 + prefix: '/',
174 localStrategy: { 176 localStrategy: {
175 usernameField: 'username', 177 usernameField: 'username',
176 passwordField: 'password', 178 passwordField: 'password',
@@ -251,10 +253,10 @@ exports = module.exports = function () { @@ -251,10 +253,10 @@ exports = module.exports = function () {
251 enabled: false, 253 enabled: false,
252 }, 254 },
253 restful: { 255 restful: {
254 - url: 'http://47.110.158.110:20000/',  
255 - ossUrl: 'http://47.110.158.110:20000/', 256 + url: 'http://192.168.2.72:20000/',
  257 + ossUrl: 'http://192.168.2.72:20000/',
256 version: '/v1', 258 version: '/v1',
257 - host: '47.110.158.110', 259 + host: '192.168.2.72',
258 port: 20000 260 port: 20000
259 }, 261 },
260 server: { 262 server: {
@@ -278,8 +280,8 @@ exports = module.exports = function () { @@ -278,8 +280,8 @@ exports = module.exports = function () {
278 redis: { 280 redis: {
279 prefix: 'igloo_production', 281 prefix: 'igloo_production',
280 host: '127.0.0.1', 282 host: '127.0.0.1',
281 - port: 6379,  
282 - pass: '', 283 + port: 38888,
  284 + pass: 'Q*Kr4?#Rg!'
283 }, 285 },
284 csrf: { 286 csrf: {
285 enabled: true, 287 enabled: true,
@@ -300,10 +302,10 @@ exports = module.exports = function () { @@ -300,10 +302,10 @@ exports = module.exports = function () {
300 'console': true, 302 'console': true,
301 requests: true, 303 requests: true,
302 mongo: false, 304 mongo: false,
303 - // file: {  
304 - // filename: '/opt/work/hro/frontend/hro/igloo.log',  
305 - // timestamp: true  
306 - // } 305 + file: {
  306 + filename: '/opt/work/hro/frontend/hro/igloo.log',
  307 + timestamp: true
  308 + }
307 } 309 }
308 } 310 }
309 }; 311 };
@@ -91,6 +91,9 @@ exports = module.exports = function (logger, rest, settings) { @@ -91,6 +91,9 @@ exports = module.exports = function (logger, rest, settings) {
91 } 91 }
92 92
93 function splitUrl(fullUrl) { 93 function splitUrl(fullUrl) {
  94 + if(settings.prefix&&settings.prefix.length>1){
  95 + fullUrl=fullUrl.substring(settings.prefix.length-1);
  96 + }
94 var url = fullUrl.substring(4); 97 var url = fullUrl.substring(4);
95 return url; 98 return url;
96 } 99 }
1 var passport = require('passport'); 1 var passport = require('passport');
2 var clientRest = require('restler'); 2 var clientRest = require('restler');
3 -var urlencode= require('urlencode');  
4 -exports=module.exports=function(logger,rest,settings){  
5 - function index(req,res,next){ 3 +var urlencode = require('urlencode');
  4 +var async = require('async');
  5 +var crypto = require('crypto');
  6 +
  7 +
  8 +exports = module.exports = function (logger, rest, settings) {
  9 + function index(req, res, next) {
6 logger.info(req.user); 10 logger.info(req.user);
7 - if(req.csrfToken)  
8 - res.render('index',{'csrfToken':req.csrfToken()});  
9 - else  
10 - res.render('index',{'csrfToken':''}); 11 + if (req.csrfToken) {
  12 + res.render('index', { 'csrfToken': req.csrfToken() });
  13 + } else
  14 + res.render('index', { 'csrfToken': '' });
11 } 15 }
12 16
13 - function productDes(req,res,next){  
14 - if(req.csrfToken)  
15 - res.render('chat/new-chat',{'csrfToken':req.csrfToken()}); 17 + function indexPrefix(req, res, next) {
  18 + logger.info(req.user);
  19 + if (req.csrfToken) {
  20 + if (settings.prefix && settings.prefix.length > 1) {
  21 + res.redirect(settings.prefix.substring(0, settings.prefix.length - 1));
  22 + } else {
  23 + res.render('index', { 'csrfToken': req.csrfToken() });
  24 + }
  25 + } else
  26 + res.render('index', { 'csrfToken': '' });
  27 + }
  28 +
  29 + function productDes(req, res, next) {
  30 + if (req.csrfToken)
  31 + res.render('chat/new-chat', { 'csrfToken': req.csrfToken() });
16 else 32 else
17 - res.render('chat/new-chat',{'csrfToken':''}); 33 + res.render('chat/new-chat', { 'csrfToken': '' });
18 } 34 }
19 35
20 - function recharge(req,res,next){ 36 + function recharge(req, res, next) {
21 37
22 - var params=JSON.parse(urlencode.decode(req.query.params)); 38 + var params = JSON.parse(urlencode.decode(req.query.params));
23 console.log(params); 39 console.log(params);
24 - if(req.csrfToken)  
25 - res.render('recharge',{'recharge':params,'csrfToken':req.csrfToken()}); 40 + if (req.csrfToken)
  41 + res.render('recharge', { 'recharge': params, 'csrfToken': req.csrfToken() });
26 else 42 else
27 - res.render('recharge',{'recharge':params,'csrfToken':''});  
28 - 43 + res.render('recharge', { 'recharge': params, 'csrfToken': '' });
  44 +
29 } 45 }
30 46
31 - function register(req,res,next){  
32 - if(req.csrfToken)  
33 - res.render('newRegister',{'csrfToken':req.csrfToken()});  
34 - else  
35 - res.render('newRegister',{'csrfToken':''}); 47 + function register(req, res, next) {
  48 + if (req.csrfToken)
  49 + res.render('newRegister', { 'csrfToken': req.csrfToken() });
  50 + else
  51 + res.render('newRegister', { 'csrfToken': '' });
36 } 52 }
37 53
38 - function mobileRegister (req,res,next) {  
39 - if(req.csrfToken)  
40 - res.render('registerMobile',{'csrfToken':req.csrfToken()});  
41 - else  
42 - res.render('registerMobile',{'csrfToken':''}); 54 + function mobileRegister(req, res, next) {
  55 + if (req.csrfToken)
  56 + res.render('registerMobile', { 'csrfToken': req.csrfToken() });
  57 + else
  58 + res.render('registerMobile', { 'csrfToken': '' });
43 } 59 }
44 60
45 - function mobileRegisterSuccess (req,res,next) {  
46 - if(req.csrfToken)  
47 - res.render('registerMobileSuccess',{'csrfToken':req.csrfToken()});  
48 - else  
49 - res.render('registerMobileSuccess',{'csrfToken':''}); 61 + function mobileRegisterSuccess(req, res, next) {
  62 + if (req.csrfToken)
  63 + res.render('registerMobileSuccess', { 'csrfToken': req.csrfToken() });
  64 + else
  65 + res.render('registerMobileSuccess', { 'csrfToken': '' });
50 } 66 }
51 67
52 - function signIn(req,res,next){  
53 - // console.log(req);  
54 - if(req.csrfToken)  
55 - res.render('newLogin',{'csrfToken':req.csrfToken()});  
56 - else  
57 - res.render('newLogin',{'csrfToken':''});  
58 - 68 + function signIn(req, res, next) {
  69 + // console.log(req);
  70 + if (req.csrfToken)
  71 + res.render('newLogin', { 'csrfToken': req.csrfToken() });
  72 + else
  73 + res.render('newLogin', { 'csrfToken': '' });
  74 +
59 } 75 }
60 76
61 - function doLogin(req,res,next){  
62 - passport.authenticate('local', function(err, user, info) {  
63 - console.log("doLogin:",err,user,info) 77 + function doLogin(req, res, next) {
  78 + passport.authenticate('local', function (err, user, info) {
  79 + console.log("doLogin:", err, user, info)
64 if (err) { return next(err); } 80 if (err) { return next(err); }
65 if (!user) { return res.send(info); } 81 if (!user) { return res.send(info); }
66 - req.logIn(user, function(err) { 82 + req.logIn(user, function (err) {
67 if (err) { return next(err); } 83 if (err) { return next(err); }
68 - return res.send({'ok':'登录成功',user_info:req.session.passport.user.user_info}); 84 + return res.send({ 'ok': '登录成功', user_info: req.session.passport.user.user_info });
69 }); 85 });
70 - })(req, res, next); 86 + })(req, res, next);
71 } 87 }
72 88
73 - function signOut(req,res,next){  
74 - if(req.session.passport&&req.session.passport.user&&req.session.passport.user.user_info&&req.session.passport.user.user_info.user)  
75 - logger.info(req.session.passport.user.user_info.user,'You have successfully logged out'); 89 + function signOut(req, res, next) {
  90 + if (req.session.passport && req.session.passport.user && req.session.passport.user.user_info && req.session.passport.user.user_info.user)
  91 + logger.info(req.session.passport.user.user_info.user, 'You have successfully logged out');
76 req.logout(); 92 req.logout();
77 - req.flash('success', 'You have successfully logged out');  
78 - res.redirect('/');  
79 - }  
80 -  
81 - function smsCodes(req,res,next){  
82 - rest.postJson({  
83 - 'baseUrl':'url',  
84 - 'url':'auth/smscodes',  
85 - 'params':req.body,  
86 - 'callback':_cb,  
87 - 'req':req,  
88 - 'res':res,  
89 - 'options':{},  
90 - 'excludeToken':true 93 + req.flash('success', 'You have successfully logged out');
  94 + res.redirect('/');
  95 + }
  96 +
  97 + function smsCodes(req, res, next) {
  98 + rest.postJson({
  99 + 'baseUrl': 'url',
  100 + 'url': 'auth/smscodes',
  101 + 'params': req.body,
  102 + 'callback': _cb,
  103 + 'req': req,
  104 + 'res': res,
  105 + 'options': {},
  106 + 'excludeToken': true
91 }) 107 })
92 - function _cb(data,response){  
93 - logger.info("back data:",data);  
94 - if(response.statusCode<300){  
95 - res.send({"code":200,"message":"发送成功"});  
96 - }else{  
97 - res.send(data);  
98 - } 108 + function _cb(data, response) {
  109 + logger.info("back data:", data);
  110 + if (response.statusCode < 300) {
  111 + res.send({ "code": 200, "message": "发送成功" });
  112 + } else {
  113 + res.send(data);
  114 + }
99 }; 115 };
100 } 116 }
101 117
102 - function tenants(req,res,next){ 118 + function tenants(req, res, next) {
103 rest.register({ 119 rest.register({
104 - 'baseUrl':'url',  
105 - 'url':'tenants',  
106 - 'params':req.body,  
107 - 'callback':_cb,  
108 - 'req':req,  
109 - 'res':res,  
110 - 'options':{},  
111 - 'excludeToken':true  
112 - });  
113 - function _cb(data,response){  
114 - logger.info("back data:",data);  
115 - res.send(data); 120 + 'baseUrl': 'url',
  121 + 'url': 'tenants',
  122 + 'params': req.body,
  123 + 'callback': _cb,
  124 + 'req': req,
  125 + 'res': res,
  126 + 'options': {},
  127 + 'excludeToken': true
  128 + });
  129 + function _cb(data, response) {
  130 + logger.info("back data:", data);
  131 + res.send(data);
116 }; 132 };
117 } 133 }
118 134
119 - function resetPass(req,res){  
120 - rest.putJson({  
121 - 'baseUrl':'url',  
122 - 'url':'auth/user',  
123 - 'params':{  
124 - 'user':req.body.user,  
125 - 'password':req.body.password,  
126 - 'again_password':req.body.again_password 135 + function resetPass(req, res) {
  136 + rest.putJson({
  137 + 'baseUrl': 'url',
  138 + 'url': 'auth/user',
  139 + 'params': {
  140 + 'user': req.body.user,
  141 + 'password': req.body.password,
  142 + 'again_password': req.body.again_password
127 }, 143 },
128 - 'callback':_cb,  
129 - 'req':req,  
130 - 'res':res,  
131 - 'options':{} 144 + 'callback': _cb,
  145 + 'req': req,
  146 + 'res': res,
  147 + 'options': {}
132 }) 148 })
133 - function _cb(data,response){  
134 - logger.info("back data:",data);  
135 - res.send(data); 149 + function _cb(data, response) {
  150 + logger.info("back data:", data);
  151 + res.send(data);
136 }; 152 };
137 } 153 }
138 154
139 - function updatePassword(req,res){  
140 - rest.patchJson({  
141 - 'baseUrl':'url',  
142 - 'url':'users/'+req.body.userId,  
143 - 'params':{ 155 + function updatePassword(req, res) {
  156 + rest.patchJson({
  157 + 'baseUrl': 'url',
  158 + 'url': 'users/' + req.body.userId,
  159 + 'params': {
144 'password': req.body.password 160 'password': req.body.password
145 }, 161 },
146 - 'callback':_cb,  
147 - 'req':req,  
148 - 'res':res,  
149 - 'options':{} 162 + 'callback': _cb,
  163 + 'req': req,
  164 + 'res': res,
  165 + 'options': {}
150 }) 166 })
151 - function _cb(data,response){  
152 - logger.info("back data:",data);  
153 - res.send(data); 167 + function _cb(data, response) {
  168 + logger.info("back data:", data);
  169 + res.send(data);
154 }; 170 };
155 } 171 }
156 -  
157 172
158 - function loadUserInfo(req,res){  
159 - if(req.session.passport.user&&req.session.passport.user.user_info){  
160 - res.send({user_info:req.session.passport.user.user_info});  
161 - }else{  
162 - res.send({user_info:null}); 173 +
  174 + function loadUserInfo(req, res) {
  175 + settings
  176 + if (req.session.passport.user && req.session.passport.user.user_info) {
  177 + res.send({ user_info: req.session.passport.user.user_info, prefix: settings.prefix });
  178 + } else {
  179 + res.send({ user_info: null, prefix: settings.prefix });
163 } 180 }
164 } 181 }
165 182
166 - function getUploaderToken(req,res){  
167 - rest.postJson({  
168 - 'baseUrl':'ossUrl',  
169 - 'url':'inits',  
170 - 'params':req.body,  
171 - 'callback':_cb,  
172 - 'req':req,  
173 - 'res':res,  
174 - 'options':{} 183 + function getUploaderToken(req, res) {
  184 + rest.postJson({
  185 + 'baseUrl': 'ossUrl',
  186 + 'url': 'inits',
  187 + 'params': req.body,
  188 + 'callback': _cb,
  189 + 'req': req,
  190 + 'res': res,
  191 + 'options': {}
175 }) 192 })
176 - function _cb(data,response){  
177 - logger.info("back data:",data);  
178 - res.send(data);  
179 - };  
180 - }  
181 -  
182 - function getObjectTokenByID(req,res){  
183 - rest.get({  
184 - 'baseUrl':'ossUrl',  
185 - 'url':'objects/'+req.body.file_id,  
186 - 'params':{},  
187 - 'callback':_cb,  
188 - 'req':req,  
189 - 'res':res,  
190 - 'options':{} 193 + function _cb(data, response) {
  194 + logger.info("back data:", data);
  195 + res.send(data);
  196 + };
  197 + }
  198 +
  199 + function getObjectTokenByID(req, res) {
  200 + rest.get({
  201 + 'baseUrl': 'ossUrl',
  202 + 'url': 'objects/' + req.body.file_id,
  203 + 'params': {},
  204 + 'callback': _cb,
  205 + 'req': req,
  206 + 'res': res,
  207 + 'options': {}
191 }) 208 })
192 - function _cb(data,response){  
193 - logger.info("back data:",data);  
194 - res.send(data);  
195 - };  
196 - }  
197 -  
198 - function delOSSObject(req,res){  
199 - rest.del({  
200 - 'baseUrl':'ossUrl',  
201 - 'url':'s3objects/'+req.body.request_id+'?bucket='+req.body.bucket+'&file='+req.body.name,  
202 - 'params':{},  
203 - 'callback':_cb,  
204 - 'req':req,  
205 - 'res':res,  
206 - 'options':{} 209 + function _cb(data, response) {
  210 + logger.info("back data:", data);
  211 + res.send(data);
  212 + };
  213 + }
  214 +
  215 + function delOSSObject(req, res) {
  216 + rest.del({
  217 + 'baseUrl': 'ossUrl',
  218 + 'url': 's3objects/' + req.body.request_id + '?bucket=' + req.body.bucket + '&file=' + req.body.name,
  219 + 'params': {},
  220 + 'callback': _cb,
  221 + 'req': req,
  222 + 'res': res,
  223 + 'options': {}
207 }) 224 })
208 - function _cb(data,response){  
209 - logger.info("back data:",data);  
210 - console.log(response.statusCode)  
211 - if(response.statusCode<300){  
212 - res.send({'delete':'ok'});  
213 - } 225 + function _cb(data, response) {
  226 + logger.info("back data:", data);
  227 + console.log(response.statusCode)
  228 + if (response.statusCode < 300) {
  229 + res.send({ 'delete': 'ok' });
  230 + }
214 }; 231 };
215 } 232 }
216 233
217 - function smsVerification(req,res,next){  
218 - rest.postJson({  
219 - 'baseUrl':'url',  
220 - 'url':'auth/sms_verification',  
221 - 'params':req.body,  
222 - 'callback':_cb,  
223 - 'req':req,  
224 - 'res':res,  
225 - 'options':{},  
226 - 'excludeToken':true 234 + function smsVerification(req, res, next) {
  235 + rest.postJson({
  236 + 'baseUrl': 'url',
  237 + 'url': 'auth/sms_verification',
  238 + 'params': req.body,
  239 + 'callback': _cb,
  240 + 'req': req,
  241 + 'res': res,
  242 + 'options': {},
  243 + 'excludeToken': true
227 }) 244 })
228 - function _cb(data,response){  
229 - logger.info("back data:",data);  
230 - if(response.statusCode<300){  
231 - res.send({"code":200,"message":"发送成功"});  
232 - }else{  
233 - res.send({"code":response.statusCode,"message":data.message,'errors':data.errors});  
234 - } 245 + function _cb(data, response) {
  246 + logger.info("back data:", data);
  247 + if (response.statusCode < 300) {
  248 + res.send({ "code": 200, "message": "发送成功" });
  249 + } else {
  250 + res.send({ "code": response.statusCode, "message": data.message, 'errors': data.errors });
  251 + }
235 }; 252 };
236 } 253 }
237 254
238 - function healthMonitor(req,res){ 255 + function healthMonitor(req, res) {
239 res.statusCode = 200; 256 res.statusCode = 200;
240 - return res.send('status ok'); 257 + return res.send('status ok');
241 } 258 }
242 259
243 260
244 - function updateUserRoles(req,res){  
245 - rest.putJson({  
246 - 'baseUrl':'url',  
247 - 'url':'user_roles/'+req.body.user_id,  
248 - 'params':req.body.roles,  
249 - 'callback':_cb,  
250 - 'req':req,  
251 - 'res':res,  
252 - 'options':{} 261 + function updateUserRoles(req, res) {
  262 + rest.putJson({
  263 + 'baseUrl': 'url',
  264 + 'url': 'user_roles/' + req.body.user_id,
  265 + 'params': req.body.roles,
  266 + 'callback': _cb,
  267 + 'req': req,
  268 + 'res': res,
  269 + 'options': {}
253 }) 270 })
254 - function _cb(data,response){  
255 - logger.info("back data:",data);  
256 - if(response.statusCode<300){  
257 - res.send({'back':'ok'});  
258 - }else{ 271 + function _cb(data, response) {
  272 + logger.info("back data:", data);
  273 + if (response.statusCode < 300) {
  274 + res.send({ 'back': 'ok' });
  275 + } else {
259 res.send(data); 276 res.send(data);
260 - } 277 + }
261 }; 278 };
262 } 279 }
263 280
264 - function getRoles(req,res,next){  
265 - rest.get({  
266 - 'baseUrl':'url',  
267 - 'url':'roles',  
268 - 'params':{},  
269 - 'callback':_cb,  
270 - 'req':req,  
271 - 'res':res,  
272 - 'options':{} 281 + function getRoles(req, res, next) {
  282 + rest.get({
  283 + 'baseUrl': 'url',
  284 + 'url': 'roles',
  285 + 'params': {},
  286 + 'callback': _cb,
  287 + 'req': req,
  288 + 'res': res,
  289 + 'options': {}
273 }) 290 })
274 - function _cb(data,response){  
275 - logger.info("back data:",data);  
276 - res.send(data); 291 + function _cb(data, response) {
  292 + logger.info("back data:", data);
  293 + res.send(data);
277 }; 294 };
278 } 295 }
279 296
280 297
281 - function getUserRoles(req,res,next){  
282 - rest.get({  
283 - 'baseUrl':'url',  
284 - 'url':'user_roles?user='+urlencode(req.body.user)+'&limit='+req.body.limit+'&offset='+req.body.offset,  
285 - 'params':{},  
286 - 'callback':_cb,  
287 - 'req':req,  
288 - 'res':res,  
289 - 'options':{} 298 + function getUserRoles(req, res, next) {
  299 + rest.get({
  300 + 'baseUrl': 'url',
  301 + 'url': 'user_roles?user=' + urlencode(req.body.user) + '&limit=' + req.body.limit + '&offset=' + req.body.offset,
  302 + 'params': {},
  303 + 'callback': _cb,
  304 + 'req': req,
  305 + 'res': res,
  306 + 'options': {}
290 }) 307 })
291 - function _cb(data,response){  
292 - logger.info("back data:",data);  
293 - res.send(data); 308 + function _cb(data, response) {
  309 + logger.info("back data:", data);
  310 + res.send(data);
294 }; 311 };
295 } 312 }
296 313
297 - function getTenant(req,res){  
298 - rest.get({  
299 - 'baseUrl':'url',  
300 - 'url':'tenants/'+req.body.tenant_id,  
301 - 'params':{},  
302 - 'callback':_cb,  
303 - 'req':req,  
304 - 'res':res,  
305 - 'options':{} 314 + function getTenant(req, res) {
  315 + rest.get({
  316 + 'baseUrl': 'url',
  317 + 'url': 'tenants/' + req.body.tenant_id,
  318 + 'params': {},
  319 + 'callback': _cb,
  320 + 'req': req,
  321 + 'res': res,
  322 + 'options': {}
306 }) 323 })
307 - function _cb(data,response){  
308 - logger.info("back data:",data);  
309 - res.send(data); 324 + function _cb(data, response) {
  325 + logger.info("back data:", data);
  326 + res.send(data);
310 }; 327 };
311 } 328 }
312 329
313 - function updateTenant(req,res){  
314 - rest.putJson({  
315 - 'baseUrl':'url',  
316 - 'url':'tenants/'+req.body.tenant_id,  
317 - 'params':req.body.tenant,  
318 - 'callback':_cb,  
319 - 'req':req,  
320 - 'res':res,  
321 - 'options':{} 330 + function updateTenant(req, res) {
  331 + rest.putJson({
  332 + 'baseUrl': 'url',
  333 + 'url': 'tenants/' + req.body.tenant_id,
  334 + 'params': req.body.tenant,
  335 + 'callback': _cb,
  336 + 'req': req,
  337 + 'res': res,
  338 + 'options': {}
322 }) 339 })
323 - function _cb(data,response){  
324 - logger.info("back data:",data);  
325 - res.send(data); 340 + function _cb(data, response) {
  341 + logger.info("back data:", data);
  342 + res.send(data);
326 }; 343 };
327 } 344 }
328 345
329 - function offer(req,res){  
330 - rest.get({  
331 - 'baseUrl':'hrUrl',  
332 - 'url':'offers/'+req.params.requestId+'?tenant_id='+req.query.tenant_id,  
333 - 'params':{},  
334 - 'callback':_cb,  
335 - 'req':req,  
336 - 'res':res,  
337 - 'options':{},  
338 - 'excludeToken':true 346 + function offer(req, res) {
  347 + rest.get({
  348 + 'baseUrl': 'hrUrl',
  349 + 'url': 'offers/' + req.params.requestId + '?tenant_id=' + req.query.tenant_id,
  350 + 'params': {},
  351 + 'callback': _cb,
  352 + 'req': req,
  353 + 'res': res,
  354 + 'options': {},
  355 + 'excludeToken': true
339 }) 356 })
340 - function _cb(data,response){  
341 - logger.info("back data:",data);  
342 - //res.send(data);  
343 - console.log(data);  
344 - data['offerId']=req.params.requestId;  
345 - data['tenantId']=req.query.tenant_id;  
346 - res.render('offer',data);  
347 - };  
348 - }  
349 -  
350 - function onboardStatus(req,res){  
351 - rest.get({  
352 - 'baseUrl':'hrUrl',  
353 - 'url':'onboard-status',  
354 - 'params':{},  
355 - 'callback':_cb,  
356 - 'req':req,  
357 - 'res':res,  
358 - 'options':{},  
359 - 'useUrl':true 357 + function _cb(data, response) {
  358 + logger.info("back data:", data);
  359 + //res.send(data);
  360 + console.log(data);
  361 + data['offerId'] = req.params.requestId;
  362 + data['tenantId'] = req.query.tenant_id;
  363 + res.render('offer', data);
  364 + };
  365 + }
  366 +
  367 + function onboardStatus(req, res) {
  368 + rest.get({
  369 + 'baseUrl': 'hrUrl',
  370 + 'url': 'onboard-status',
  371 + 'params': {},
  372 + 'callback': _cb,
  373 + 'req': req,
  374 + 'res': res,
  375 + 'options': {},
  376 + 'useUrl': true
360 }) 377 })
361 - function _cb(data,response){  
362 - logger.info("back data:",data);  
363 - res.send(data); 378 + function _cb(data, response) {
  379 + logger.info("back data:", data);
  380 + res.send(data);
364 }; 381 };
365 } 382 }
366 383
367 - function dowloadApp(req,res){  
368 - var mobileAgent=req.headers['user-agent'].toLowerCase();  
369 - var agent={ 384 + function dowloadApp(req, res) {
  385 + var mobileAgent = req.headers['user-agent'].toLowerCase();
  386 + var agent = {
370 android: mobileAgent.indexOf('android') > -1 || mobileAgent.indexOf('Adr') > -1, 387 android: mobileAgent.indexOf('android') > -1 || mobileAgent.indexOf('Adr') > -1,
371 - iPhone:mobileAgent.indexOf('iphone') > -1, 388 + iPhone: mobileAgent.indexOf('iphone') > -1,
372 iPad: mobileAgent.indexOf('ipad') > -1 389 iPad: mobileAgent.indexOf('ipad') > -1
373 } 390 }
374 - if(agent.iPhone||agent.iPad){ 391 + if (agent.iPhone || agent.iPad) {
375 res.redirect(301, 'https://itunes.apple.com/cn/app/%E8%96%AA%E5%91%97/id1140779439?l=en&mt=8'); 392 res.redirect(301, 'https://itunes.apple.com/cn/app/%E8%96%AA%E5%91%97/id1140779439?l=en&mt=8');
376 - }else if(agent.android){ 393 + } else if (agent.android) {
377 res.redirect(301, 'http://krhrimg.oss-cn-beijing.aliyuncs.com/appdownload/production/android/krhr-android.apk'); 394 res.redirect(301, 'http://krhrimg.oss-cn-beijing.aliyuncs.com/appdownload/production/android/krhr-android.apk');
378 - }else{ 395 + } else {
379 res.redirect(301, 'http://krhrimg.oss-cn-beijing.aliyuncs.com/appdownload/production/android/krhr-android.apk'); 396 res.redirect(301, 'http://krhrimg.oss-cn-beijing.aliyuncs.com/appdownload/production/android/krhr-android.apk');
380 - } 397 + }
381 } 398 }
382 399
383 - function softwareLicense (req,res,next) { 400 + function softwareLicense(req, res, next) {
384 res.render('softwareLicense'); 401 res.render('softwareLicense');
385 } 402 }
386 403
387 - function changePassForRegister(req,res,next){  
388 - var options={  
389 - 'baseUrl':'url',  
390 - 'url':'users/'+req.body.user_id,  
391 - 'params':{ 404 + function changePassForRegister(req, res, next) {
  405 + var options = {
  406 + 'baseUrl': 'url',
  407 + 'url': 'users/' + req.body.user_id,
  408 + 'params': {
392 'password': req.body.password 409 'password': req.body.password
393 }, 410 },
394 - 'callback':_cb,  
395 - 'req':req,  
396 - 'res':res,  
397 - 'options':{} 411 + 'callback': _cb,
  412 + 'req': req,
  413 + 'res': res,
  414 + 'options': {}
398 }; 415 };
399 - if(req.body.access_token){ 416 + if (req.body.access_token) {
400 console.log("@@@!!!!!!!!!!!!!!!!"); 417 console.log("@@@!!!!!!!!!!!!!!!!");
401 - options.options={  
402 - "accessToken":req.body.access_token 418 + options.options = {
  419 + "accessToken": req.body.access_token
403 }; 420 };
404 - options['excludeToken']=true;  
405 - } 421 + options['excludeToken'] = true;
  422 + }
406 rest.patchJson(options) 423 rest.patchJson(options)
407 - function _cb(data,response){  
408 - logger.info("back data:",data);  
409 - res.send(data); 424 + function _cb(data, response) {
  425 + logger.info("back data:", data);
  426 + res.send(data);
410 }; 427 };
411 } 428 }
412 429
413 - function changeTenant(req,res,next){  
414 - var params={  
415 - grant_type:'refresh_token',  
416 - scope:'global_access:tenant_admin,tenant:'+req.body.id,  
417 - refresh_token:req.session.passport.user.refreshToken  
418 - }  
419 - req.session.passport.user.token='';  
420 - rest.postJson({  
421 - 'baseUrl':'url',  
422 - 'url':settings.restful.url+'uaa'+settings.restful.version+'/auth/tokens',  
423 - 'useUrl':true,  
424 - 'params':params,  
425 - 'callback':_cb,  
426 - 'req':req,  
427 - 'res':res,  
428 - 'options':{},  
429 - 'excludeToken':true 430 + function changeTenant(req, res, next) {
  431 + var params = {
  432 + grant_type: 'refresh_token',
  433 + scope: 'global_access:tenant_admin,tenant:' + req.body.id,
  434 + refresh_token: req.session.passport.user.refreshToken
  435 + }
  436 + req.session.passport.user.token = '';
  437 + rest.postJson({
  438 + 'baseUrl': 'url',
  439 + 'url': settings.restful.url + 'uaa' + settings.restful.version + '/auth/tokens',
  440 + 'useUrl': true,
  441 + 'params': params,
  442 + 'callback': _cb,
  443 + 'req': req,
  444 + 'res': res,
  445 + 'options': {},
  446 + 'excludeToken': true
430 }) 447 })
431 - function _cb(data,response){  
432 - console.log(data);  
433 - logger.info("back data:",data);  
434 - if(response.statusCode<300){  
435 - req.session.passport.user.token=data.access_token;  
436 - req.session.passport.user.refreshToken=data.refresh_token;  
437 - req.session.passport.user.user_info={  
438 - 'user':data.user,  
439 - 'perms':[],  
440 - 'tenant':data.tenant,  
441 - 'scope':data.scope, 448 + function _cb(data, response) {
  449 + console.log(data);
  450 + logger.info("back data:", data);
  451 + if (response.statusCode < 300) {
  452 + req.session.passport.user.token = data.access_token;
  453 + req.session.passport.user.refreshToken = data.refresh_token;
  454 + req.session.passport.user.user_info = {
  455 + 'user': data.user,
  456 + 'perms': [],
  457 + 'tenant': data.tenant,
  458 + 'scope': data.scope,
442 'oss': req.session.passport.user.user_info.oss 459 'oss': req.session.passport.user.user_info.oss
443 - };  
444 - req.session.save(function(err) { 460 + };
  461 + req.session.save(function (err) {
445 rest.get({ 462 rest.get({
446 - 'baseUrl':'url',  
447 - 'url': settings.restful.url+'uaa'+settings.restful.version+'/perms/detail',  
448 - 'useUrl':true,  
449 - 'params':{},  
450 - 'callback':_scb,  
451 - 'req':req,  
452 - 'res':res,  
453 - 'options':{}  
454 - });  
455 - })  
456 - }else{  
457 - res.send({"code":response.statusCode,"message":data.message,initialize_done:"n"});  
458 - } 463 + 'baseUrl': 'url',
  464 + 'url': settings.restful.url + 'uaa' + settings.restful.version + '/perms/detail',
  465 + 'useUrl': true,
  466 + 'params': {},
  467 + 'callback': _scb,
  468 + 'req': req,
  469 + 'res': res,
  470 + 'options': {}
  471 + });
  472 + })
  473 + } else {
  474 + res.send({ "code": response.statusCode, "message": data.message, initialize_done: "n" });
  475 + }
459 }; 476 };
460 - function _scb(data1,response){  
461 - if(response.statusCode<300&&data1.items){  
462 - req.session.passport.user.user_info.perms=data1.items;  
463 - req.session.save(function(err) { 477 + function _scb(data1, response) {
  478 + if (response.statusCode < 300 && data1.items) {
  479 + req.session.passport.user.user_info.perms = data1.items;
  480 + req.session.save(function (err) {
464 // res.send({"code":200,"message":"切换租户成功"}); 481 // res.send({"code":200,"message":"切换租户成功"});
465 rest.get({ 482 rest.get({
466 - 'baseUrl':'url',  
467 - 'url': settings.restful.url+'filemeta'+settings.restful.version+'/config',  
468 - 'useUrl':true,  
469 - 'params':{},  
470 - 'callback':_scb1,  
471 - 'req':req,  
472 - 'res':res,  
473 - 'options':{}  
474 - });  
475 - })  
476 - }else{  
477 - res.send({"code":response.statusCode,"message":data1.message});  
478 - }  
479 - }  
480 - function _scb1(data2,response){  
481 - if(response.statusCode<300&&data2&&data2.bucket){  
482 - req.session.passport.user.user_info.oss=data2;  
483 - req.session.save(function(err) {  
484 - res.send({"code":200,"message":"切换租户成功"});  
485 - });  
486 - }else {  
487 - res.send({"code":200,"message":"切换租户失败"});  
488 - } 483 + 'baseUrl': 'url',
  484 + 'url': settings.restful.url + 'filemeta' + settings.restful.version + '/config',
  485 + 'useUrl': true,
  486 + 'params': {},
  487 + 'callback': _scb1,
  488 + 'req': req,
  489 + 'res': res,
  490 + 'options': {}
  491 + });
  492 + })
  493 + } else {
  494 + res.send({ "code": response.statusCode, "message": data1.message });
  495 + }
  496 + }
  497 + function _scb1(data2, response) {
  498 + if (response.statusCode < 300 && data2 && data2.bucket) {
  499 + req.session.passport.user.user_info.oss = data2;
  500 + req.session.save(function (err) {
  501 + res.send({ "code": 200, "message": "切换租户成功" });
  502 + });
  503 + } else {
  504 + res.send({ "code": 200, "message": "切换租户失败" });
  505 + }
489 } 506 }
490 } 507 }
491 508
492 509
493 - function sendRejectOffer(req,res){  
494 - rest.get({  
495 - 'baseUrl':'hrUrl',  
496 - 'url':req.body.url, //传一个参数  
497 - 'params':{},  
498 - 'callback':_cb,  
499 - 'req':req,  
500 - 'res':res,  
501 - 'options':{},  
502 - 'excludeToken':true,  
503 - 'useUrl':true 510 + function sendRejectOffer(req, res) {
  511 + rest.get({
  512 + 'baseUrl': 'hrUrl',
  513 + 'url': req.body.url, //传一个参数
  514 + 'params': {},
  515 + 'callback': _cb,
  516 + 'req': req,
  517 + 'res': res,
  518 + 'options': {},
  519 + 'excludeToken': true,
  520 + 'useUrl': true
504 }); 521 });
505 - function _cb(data,response){  
506 - logger.info("back data:",data);  
507 - if(response.statusCode<300){  
508 - res.send({'action':'ok'});  
509 - }else{ 522 + function _cb(data, response) {
  523 + logger.info("back data:", data);
  524 + if (response.statusCode < 300) {
  525 + res.send({ 'action': 'ok' });
  526 + } else {
510 res.send(data); 527 res.send(data);
511 - } 528 + }
512 }; 529 };
513 - }  
514 -  
515 - function acceptOffer(req,res){  
516 - rest.get({  
517 - 'baseUrl':'hrUrl',  
518 - 'url':req.body.url, //传一个参数  
519 - 'params':{},  
520 - 'callback':_cb,  
521 - 'req':req,  
522 - 'res':res,  
523 - 'options':{},  
524 - 'excludeToken':true,  
525 - 'useUrl':true 530 + }
  531 +
  532 + function acceptOffer(req, res) {
  533 + rest.get({
  534 + 'baseUrl': 'hrUrl',
  535 + 'url': req.body.url, //传一个参数
  536 + 'params': {},
  537 + 'callback': _cb,
  538 + 'req': req,
  539 + 'res': res,
  540 + 'options': {},
  541 + 'excludeToken': true,
  542 + 'useUrl': true
526 }); 543 });
527 - function _cb(data,response){  
528 - logger.info("back data:",data);  
529 - if(response.statusCode<300){  
530 - res.send({'action':'ok'});  
531 - }else{ 544 + function _cb(data, response) {
  545 + logger.info("back data:", data);
  546 + if (response.statusCode < 300) {
  547 + res.send({ 'action': 'ok' });
  548 + } else {
532 res.send(data); 549 res.send(data);
533 - } 550 + }
534 }; 551 };
535 } 552 }
536 553
537 - function imTokens(req,res){  
538 - rest.post({  
539 - 'url':'auth/im_tokens',  
540 - 'params':req.body,  
541 - 'callback':_cb,  
542 - 'req':req,  
543 - 'res':res,  
544 - 'options':{} 554 + function imTokens(req, res) {
  555 + rest.post({
  556 + 'url': 'auth/im_tokens',
  557 + 'params': req.body,
  558 + 'callback': _cb,
  559 + 'req': req,
  560 + 'res': res,
  561 + 'options': {}
545 }); 562 });
546 - function _cb(data,response){  
547 - logger.info("back data:",data);  
548 - res.send(data); 563 + function _cb(data, response) {
  564 + logger.info("back data:", data);
  565 + res.send(data);
549 }; 566 };
550 } 567 }
551 568
552 - function listChannels(req,res,next){  
553 - rest.get({  
554 - 'baseUrl':'chatUrl',  
555 - 'url':'channels?page_size=10&page=0&status=active',  
556 - 'params':req.body,  
557 - 'callback':_cb,  
558 - 'req':req,  
559 - 'res':res,  
560 - 'options':{} 569 + function listChannels(req, res, next) {
  570 + rest.get({
  571 + 'baseUrl': 'chatUrl',
  572 + 'url': 'channels?page_size=10&page=0&status=active',
  573 + 'params': req.body,
  574 + 'callback': _cb,
  575 + 'req': req,
  576 + 'res': res,
  577 + 'options': {}
561 }) 578 })
562 - function _cb(data,response){  
563 - logger.info("back data:",data);  
564 - res.send(data); 579 + function _cb(data, response) {
  580 + logger.info("back data:", data);
  581 + res.send(data);
565 }; 582 };
566 } 583 }
567 584
568 - function filemeta(req,res,next){  
569 - var fullPath=settings.restful.url+'filemeta'+settings.restful.version+'/object-redirect';  
570 - fullPath=fullPath+"?"+"bucket="+req.query.bucket+"&object="+encodeURIComponent(req.query.object);  
571 - var options={  
572 - 'service_catalog':'',  
573 - 'url':fullPath,  
574 - 'useUrl':true,  
575 - 'params':req.body,  
576 - 'callback':_cb,  
577 - 'req':req,  
578 - 'res':res,  
579 - 'options':{} 585 + function filemeta(req, res, next) {
  586 + var fullPath = settings.restful.url + 'filemeta' + settings.restful.version + '/object-redirect';
  587 + fullPath = fullPath + "?" + "bucket=" + req.query.bucket + "&object=" + encodeURIComponent(req.query.object);
  588 + var options = {
  589 + 'service_catalog': '',
  590 + 'url': fullPath,
  591 + 'useUrl': true,
  592 + 'params': req.body,
  593 + 'callback': _cb,
  594 + 'req': req,
  595 + 'res': res,
  596 + 'options': {}
580 }; 597 };
581 - rest.get(options);  
582 - function _cb(data,response){  
583 - if(data&&data.download_url){  
584 - if(req.query.type&&'json'==req.query.type){ 598 + rest.get(options);
  599 + function _cb(data, response) {
  600 + if (data && data.download_url) {
  601 + if (req.query.type && 'json' == req.query.type) {
585 res.send(data); 602 res.send(data);
586 - }else{  
587 - res.redirect(301, data.download_url); 603 + } else {
  604 + res.redirect(301, data.download_url);
588 } 605 }
589 - }else { 606 + } else {
590 res.send(data); 607 res.send(data);
591 - }  
592 - }  
593 - }  
594 -  
595 -  
596 - function getCustomerQrcode(req,res,next){  
597 - var fullPath=settings.restful.url+'crm'+settings.restful.version+'/customers/'+req.query.id+'/qrcode';  
598 - var options={  
599 - 'service_catalog':'',  
600 - 'url':fullPath,  
601 - 'useUrl':true,  
602 - 'params':req.body,  
603 - 'callback':_cb,  
604 - 'req':req,  
605 - 'res':res,  
606 - 'options':{} 608 + }
  609 + }
  610 + }
  611 +
  612 +
  613 + function getCustomerQrcode(req, res, next) {
  614 + var fullPath = settings.restful.url + 'crm' + settings.restful.version + '/customers/' + req.query.id + '/qrcode';
  615 + var options = {
  616 + 'service_catalog': '',
  617 + 'url': fullPath,
  618 + 'useUrl': true,
  619 + 'params': req.body,
  620 + 'callback': _cb,
  621 + 'req': req,
  622 + 'res': res,
  623 + 'options': {}
607 }; 624 };
608 - rest.get(options);  
609 - function _cb(data,response){  
610 - if(data&&data.url_path){  
611 - res.redirect(301, data.url_path);  
612 - }else { 625 + rest.get(options);
  626 + function _cb(data, response) {
  627 + if (data && data.url_path) {
  628 + res.redirect(301, data.url_path);
  629 + } else {
613 res.send(data); 630 res.send(data);
614 - }  
615 - }  
616 - }  
617 -  
618 - function getPositionQrcode(req,res,next){  
619 - var fullPath=settings.restful.url+'recruit'+settings.restful.version+'/positions/'+req.query.id+'/qrcode';  
620 - var options={  
621 - 'service_catalog':'',  
622 - 'url':fullPath,  
623 - 'useUrl':true,  
624 - 'params':req.body,  
625 - 'callback':_cb,  
626 - 'req':req,  
627 - 'res':res,  
628 - 'options':{} 631 + }
  632 + }
  633 + }
  634 +
  635 + function getPositionQrcode(req, res, next) {
  636 + var fullPath = settings.restful.url + 'recruit' + settings.restful.version + '/positions/' + req.query.id + '/qrcode';
  637 + var options = {
  638 + 'service_catalog': '',
  639 + 'url': fullPath,
  640 + 'useUrl': true,
  641 + 'params': req.body,
  642 + 'callback': _cb,
  643 + 'req': req,
  644 + 'res': res,
  645 + 'options': {}
629 }; 646 };
630 - rest.get(options);  
631 - function _cb(data,response){  
632 - if(data&&data.url_path){  
633 - res.redirect(301, data.url_path);  
634 - }else { 647 + rest.get(options);
  648 + function _cb(data, response) {
  649 + if (data && data.url_path) {
  650 + res.redirect(301, data.url_path);
  651 + } else {
635 res.send(data); 652 res.send(data);
636 - } 653 + }
637 } 654 }
638 } 655 }
639 656
640 - function getOSSConfig(req,res,next){  
641 - var fullPath=settings.restful.url+'filemeta'+settings.restful.version+'/config';  
642 - var options={  
643 - 'service_catalog':'',  
644 - 'url':fullPath,  
645 - 'useUrl':true,  
646 - 'params':req.body,  
647 - 'callback':_cb,  
648 - 'req':req,  
649 - 'res':res,  
650 - 'options':{} 657 + function getOSSConfig(req, res, next) {
  658 + var fullPath = settings.restful.url + 'filemeta' + settings.restful.version + '/config';
  659 + var options = {
  660 + 'service_catalog': '',
  661 + 'url': fullPath,
  662 + 'useUrl': true,
  663 + 'params': req.body,
  664 + 'callback': _cb,
  665 + 'req': req,
  666 + 'res': res,
  667 + 'options': {}
651 }; 668 };
652 - rest.get(options);  
653 - function _cb(data,response){  
654 - if(data&&data.bucket){  
655 - req.session.passport.user.user_info.oss=data;  
656 - req.session.save(function(err) {  
657 - res.send({"code":200,"message":"oss配置加载成功"});  
658 - });  
659 - }else {  
660 - res.send({"code":200,"message":"oss配置加载失败"});  
661 - }  
662 - }  
663 - }  
664 -  
665 - function weidianTempLate(req,res,next){ 669 + rest.get(options);
  670 + function _cb(data, response) {
  671 + if (data && data.bucket) {
  672 + req.session.passport.user.user_info.oss = data;
  673 + req.session.save(function (err) {
  674 + res.send({ "code": 200, "message": "oss配置加载成功" });
  675 + });
  676 + } else {
  677 + res.send({ "code": 200, "message": "oss配置加载失败" });
  678 + }
  679 + }
  680 + }
  681 +
  682 + function weidianTempLate(req, res, next) {
666 const { params } = req; 683 const { params } = req;
667 - var fullPath=settings.restful.url + 'socialwork/internal/minishop/' + params.id;  
668 - var options={  
669 - 'service_catalog':'',  
670 - 'url':fullPath,  
671 - 'useUrl':true,  
672 - 'params':req.body,  
673 - 'callback':_cb,  
674 - 'req':req,  
675 - 'res':res,  
676 - 'options':{},  
677 - 'excludeToken':true, 684 + var fullPath = settings.restful.url + 'socialwork/internal/minishop/' + params.id;
  685 + var options = {
  686 + 'service_catalog': '',
  687 + 'url': fullPath,
  688 + 'useUrl': true,
  689 + 'params': req.body,
  690 + 'callback': _cb,
  691 + 'req': req,
  692 + 'res': res,
  693 + 'options': {},
  694 + 'excludeToken': true,
678 }; 695 };
679 - rest.get(options);  
680 - function _cb(data,response){  
681 - logger.info("back data:",data);  
682 - if(response.statusCode<300){  
683 - const { shop_logo=[], shop_name='', shop_comment='' } = data;  
684 - let imgUrl = '';  
685 - if (shop_logo.length > 0) {  
686 - imgUrl = 'http://oss.workai.com.cn/public/' + shop_logo[0].object;  
687 - }  
688 - res.render('template/weiDian',{  
689 - imgUrl: imgUrl,  
690 - shop_name: shop_name,  
691 - shop_comment: shop_comment,  
692 - })  
693 - }else{  
694 - res.render('template/weiDian')  
695 - } 696 + rest.get(options);
  697 + function _cb(data, response) {
  698 + logger.info("back data:", data);
  699 + if (response.statusCode < 300) {
  700 + const { shop_logo = [], shop_name = '', shop_comment = '' } = data;
  701 + let imgUrl = '';
  702 + if (shop_logo.length > 0) {
  703 + imgUrl = 'http://oss.workai.com.cn/public/' + shop_logo[0].object;
  704 + }
  705 + res.render('template/weiDian', {
  706 + imgUrl: imgUrl,
  707 + shop_name: shop_name,
  708 + shop_comment: shop_comment,
  709 + })
  710 + } else {
  711 + res.render('template/weiDian')
  712 + }
696 }; 713 };
697 - 714 +
  715 + }
  716 +
  717 +
  718 + function workaiSecurityOAuth(req, res, next) {
  719 + var params = req.query;
  720 + if (params.authorization_code) {
  721 + var passport = {
  722 + user: {
  723 + refreshToken: "",
  724 + token: "",
  725 + service_catalog: {},
  726 + user_info: {},
  727 + err: null
  728 + }
  729 + };
  730 + async.waterfall([
  731 + function (callback) {//第三方登录
  732 + var tempParams = {
  733 + "grant_type": 'authorization_code_v1',
  734 + "code": params.authorization_code
  735 + };
  736 + // var tempParams={
  737 + // "grant_type":"password",
  738 + // "username":"18510929499",
  739 + // "scope":"global_access:tenant_admin",
  740 + // "password":"a123456"
  741 + // };
  742 + rest.restful.postJson(settings.restful.url + 'uaa/v1/auth/tokens', tempParams, {
  743 + headers: { 'Content-Type': 'application/json', "Accept": "application/json" }
  744 + })
  745 + .on('success', function (data, response) {
  746 + logger.info("Third login json:", data);
  747 + if (data.access_token) {
  748 + var scopes = data.scope.split(",");
  749 + passport.user.token = data.access_token;
  750 + passport.user.refreshToken = data.refresh_token;
  751 + passport.user.user_info = data.user;
  752 + passport.user.tenant_info = data.tenant;
  753 + passport.user.customer_info = data.customer;
  754 + passport.user.user_info.perms = data.perms;
  755 + passport.user.type = data.user.type;
  756 + passport.user.real_auth_status = data.user.real_auth_status;
  757 + passport.user.credential_status = data.user.credential_status;
  758 + passport.user.user_info.scope = scopes[0];
  759 + callback(null, data)
  760 + } else {
  761 + var err = new Error('Third login err');
  762 + passport.user.err = data.message;
  763 + callback(err, data);
  764 + }
  765 + }).on('error', function (err, response) {
  766 + logger.error("Third login error", err);
  767 + var err = new Error('Third login err');
  768 + callback(err, response);
  769 + }).on('fail', function (data, response) {
  770 + logger.error("Third login fail", data);
  771 + var err = new Error('Third login err');
  772 + callback(data, response);
  773 + });
  774 + }, function (data, callback) { //获取机构列表
  775 + var tempHead = {};
  776 + var ip = req.ip.match(/\d+\.\d+\.\d+\.\d+/)[0];
  777 + var user_agent = req.headers['user-agent'] || '';
  778 + tempHead['SXClientIP'] = ip;
  779 + tempHead['User-Agent'] = user_agent;
  780 + rest.restful.get(settings.restful.url + 'uaa/v1/tenants?all=true', { accessToken: data.access_token, headers: tempHead })
  781 + .on('success', function (data1, response) {
  782 + logger.info("Third login tenants list:", data1);
  783 + if (data1 && data1.items && data1.items.length > 0) {
  784 + callback(null, data1.items)
  785 + } else {
  786 + var err = new Error('Third login tenants list err');
  787 + passport.user.err = data.message;
  788 + callback(err, data);
  789 + }
  790 + }).on('error', function (err, response) {
  791 + var err = new Error('Third login tenants list err');
  792 + callback(err, response);
  793 + }).on('fail', function (data, response) {
  794 + var err = new Error('Third login tenants list fail');
  795 + callback(data, response);
  796 + });
  797 + }, function (data, callback) { //刷新token
  798 + if (data && data.length == 1) {
  799 + var params = {
  800 + grant_type: 'refresh_token',
  801 + scope: 'global_access:tenant_admin,tenant:' + data[0].id,
  802 + refresh_token: passport.user.refreshToken
  803 + }
  804 + passport.user.token = '';
  805 + rest.restful.postJson(settings.restful.url + 'uaa/v1/auth/tokens', params, {
  806 + headers: { 'Content-Type': 'application/json', "Accept": "application/json" }
  807 + })
  808 + .on('success', function (data2, response) {
  809 + logger.info("Third login json:", data2);
  810 + if (data2.access_token) {
  811 + var scopes = data2.scope.split(",");
  812 + passport.user.token = data2.access_token;
  813 + passport.user.refreshToken = data2.refresh_token;
  814 + passport.user.user_info = data2.user;
  815 + passport.user.tenant_info = data2.tenant;
  816 + passport.user.customer_info = data2.customer;
  817 + passport.user.user_info.perms = data2.perms;
  818 + passport.user.type = data2.user.type;
  819 + passport.user.real_auth_status = data2.user.real_auth_status;
  820 + passport.user.credential_status = data2.user.credential_status;
  821 + passport.user.user_info.scope = scopes[0];
  822 + callback(null, data2)
  823 + } else {
  824 + var err = new Error('Third login err');
  825 + passport.user.err = data2.message;
  826 + callback(err, data2);
  827 + }
  828 + }).on('error', function (err, response) {
  829 + logger.error("Third login error", err);
  830 + var err = new Error('Third login err');
  831 + callback(err, response);
  832 + }).on('fail', function (data2, response) {
  833 + logger.error("Third login fail", data2);
  834 + var err = new Error('Third login err');
  835 + callback(data2, response);
  836 + });
  837 + } else if (data && data.length > 1) {// #/login/choose-tenant
  838 + callback(null, data)
  839 + } else {
  840 + var err = new Error('Third login tenants list item error');
  841 + callback(err, data);
  842 + }
  843 + }], function (err, result) {
  844 + if (err) {//登陆失败跳转失败页
  845 + res.render('loginerr', { 'err': err });
  846 + } else if (result instanceof Array && result.length > 1) {//登陆成功跳转选择机构页
  847 + req.session.passport = passport;
  848 + req.session.save(function (err) {
  849 + res.redirect(301, '/#login/choose-tenant');
  850 + });
  851 + } else {
  852 + req.session.passport = passport;
  853 + req.session.save(function (err) {
  854 + res.redirect(301, '/#container/home'); //登陆成功跳转首页
  855 + });
  856 + }
  857 + });
  858 + }
  859 +
  860 + }
  861 +
  862 + function getTastLink(req, res, next) {
  863 + var url = crypto.createHash('md5').update(req.body.id).digest('hex');
  864 + if (settings.prefix && settings.prefix.length > 1) {
  865 + res.send(req.protocol + '://' + req.get('host') + settings.prefix.substring(0, settings.prefix.length - 1) + "/socialwork/freedom-jobs/emps/" + req.body.id + "/" + url);
  866 + } else {
  867 + res.send({ 'url': req.protocol + '://' + req.get('host') + "/socialwork/freedom-jobs/emps/" + req.body.id + "/" + url });
  868 + }
  869 + }
  870 +
  871 + function freedomJobsEmp(req, res, next) {
  872 + var id = req.params.id;
  873 + var verification = req.params.verification;
  874 + var url = crypto.createHash('md5').update(id).digest('hex');
  875 + if (verification != url) {//验证未通过
  876 + if (settings.prefix && settings.prefix.length > 1) {
  877 + res.redirect(settings.prefix.substring(0, settings.prefix.length - 1));
  878 + } else {
  879 + res.redirect('/');
  880 + }
  881 + } else {//验证通过跳转,获取token存到session里
  882 + var passport = {
  883 + user: {
  884 + refreshToken: "",
  885 + token: "",
  886 + service_catalog: {},
  887 + user_info: {},
  888 + err: null
  889 + }
  890 + };
  891 + var tempParams = {
  892 + "grant_type": "client_credential",
  893 + "client_id": "340161778618994688",//多宝鱼环境
  894 + "client_secret": "0f8c30aa3d15332652f62c3eaf22fdea"
  895 + };
  896 + rest.restful.postJson(settings.restful.url + 'uaa/v1/auth/tokens', tempParams, {
  897 + headers: { 'Content-Type': 'application/json', "Accept": "application/json" }
  898 + }).on('success', function (data, response) {
  899 + if (data.access_token) {
  900 + var scopes = data.scope.split(",");
  901 + passport.user.token = data.access_token;
  902 + passport.user.refreshToken = data.refresh_token;
  903 + passport.user.user_info = data.user;
  904 + passport.user.tenant_info = data.tenant;
  905 + passport.user.customer_info = data.customer;
  906 + passport.user.user_info.perms = data.perms;
  907 + passport.user.type = data.user.type;
  908 + passport.user.real_auth_status = data.user.real_auth_status;
  909 + passport.user.credential_status = data.user.credential_status;
  910 + passport.user.user_info.scope = scopes[0];
  911 + req.session.passport = passport;
  912 + req.session.save(function (err) {
  913 + if (settings.prefix && settings.prefix.length > 1) {
  914 + res.redirect(301, settings.prefix.substring(0, settings.prefix.length - 1) + '/#task_assign/' + id);
  915 + } else {
  916 + res.redirect(301, '/#task_assign/' + id);
  917 + }
  918 + });
  919 + } else {
  920 + var err = new Error('Third login err');
  921 + passport.user.err = data.message;
  922 + }
  923 + }).on('error', function (err, response) {
  924 + logger.error("Third login error", err);
  925 + var err = new Error('Third login err');
  926 + callback(err, response);
  927 + }).on('fail', function (data, response) {
  928 + logger.error("Third login fail", data);
  929 + var err = new Error('Third login err');
  930 + });
  931 + }
  932 +
698 } 933 }
699 934
700 return { 935 return {
701 - index:index,  
702 - register:register,  
703 - signIn:signIn,  
704 - doLogin:doLogin,  
705 - signOut:signOut,  
706 - smsCodes:smsCodes,  
707 - tenants:tenants,  
708 - productDes:productDes,  
709 - resetPass:resetPass,  
710 - updatePassword:updatePassword,  
711 - loadUserInfo:loadUserInfo,  
712 - getUploaderToken:getUploaderToken, 936 + index: index,
  937 + indexPrefix,
  938 + register: register,
  939 + signIn: signIn,
  940 + doLogin: doLogin,
  941 + signOut: signOut,
  942 + smsCodes: smsCodes,
  943 + tenants: tenants,
  944 + productDes: productDes,
  945 + resetPass: resetPass,
  946 + updatePassword: updatePassword,
  947 + loadUserInfo: loadUserInfo,
  948 + getUploaderToken: getUploaderToken,
713 getObjectTokenByID, 949 getObjectTokenByID,
714 - delOSSObject:delOSSObject, 950 + delOSSObject: delOSSObject,
715 healthMonitor, 951 healthMonitor,
716 smsVerification, 952 smsVerification,
717 updateUserRoles, 953 updateUserRoles,
@@ -736,9 +972,12 @@ exports=module.exports=function(logger,rest,settings){ @@ -736,9 +972,12 @@ exports=module.exports=function(logger,rest,settings){
736 getCustomerQrcode, 972 getCustomerQrcode,
737 getPositionQrcode, 973 getPositionQrcode,
738 getOSSConfig, 974 getOSSConfig,
739 - weidianTempLate 975 + weidianTempLate,
  976 + workaiSecurityOAuth,
  977 + getTastLink,
  978 + freedomJobsEmp
740 }; 979 };
741 }; 980 };
742 981
743 -exports['@singleton']=true;  
744 -exports['@require']=['igloo/logger','utils/rest','igloo/settings']; 982 +exports['@singleton'] = true;
  983 +exports['@require'] = ['igloo/logger', 'utils/rest', 'igloo/settings'];
1 -var urlencode = require('urlencode');  
2 -var passport = require('passport');  
3 -  
4 -exports=module.exports=function(logger,rest,settings){  
5 - function encodeUrl(url){  
6 - return urlencode(url);  
7 - }  
8 -  
9 - function encodePamars(params){  
10 - var temp=[];  
11 - for(var i=0;i<params.length;i++){  
12 - var param=params[i];  
13 - var tempParam=param.split("=")  
14 - tempParam[1]=urlencode.decode(tempParam[1], 'utf8');  
15 - tempParam[1]=tempParam[1].replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');  
16 - console.log(tempParam[1]);  
17 - if(i<(params.length-1)){  
18 - if(/[:&+/?%#=]/g.test(tempParam[1])){  
19 - temp.push(tempParam[0]+"="+encodeUrl(tempParam[1])+"&");  
20 - }else{  
21 - temp.push(tempParam[0]+"="+tempParam[1]+"&");  
22 - }  
23 - }else{  
24 - if(/[:&+/?%#=]/g.test(tempParam[1])){  
25 - temp.push(tempParam[0]+"="+encodeUrl(tempParam[1]));  
26 - }else{  
27 - temp.push(tempParam[0]+"="+tempParam[1]);  
28 - }  
29 - }  
30 - }  
31 - return temp.join("");  
32 - }  
33 -  
34 - function handlePamars(url){  
35 - var tempUrl=url;  
36 - // if(url.indexOf("?")!=-1){  
37 - // var temp=url.split("?");  
38 - // var params="";  
39 - // if(temp[1]&&temp[1].indexOf("&")!=-1){  
40 - // params=encodePamars(temp[1].split("&"));  
41 - // }else{  
42 - // params=encodePamars([temp[1]]);  
43 - // }  
44 - // return temp[0]+"?"+params;  
45 - // }else {  
46 - // return tempUrl;  
47 - // }  
48 - return tempUrl;  
49 - }  
50 -  
51 - function splitServiceFromUrl(url){  
52 - var catalog=url.substring(1,url.indexOf('/',1));  
53 - var pathUrl=url.substring(url.indexOf('/',1));  
54 - var fullPath=settings.restful.url+catalog+settings.restful.version+pathUrl;  
55 - return fullPath  
56 - }  
57 -  
58 - function splitUrl(fullUrl){  
59 - var url=fullUrl.substring(9);  
60 - return url;  
61 - }  
62 -  
63 - function searchService(services,name){  
64 - if(services[name]){  
65 - console.log(services[name]);  
66 - return false;  
67 - }else{  
68 - return true;  
69 - }  
70 - }  
71 -  
72 - function checkReq(req,res){  
73 - var flag=true;  
74 - // if(flag&&req.headers&&!req.headers['service-catalog']){  
75 - // res.status(400);  
76 - // res.send({"errors":{},"message":"缺少必要请求参数,服务目录名称是必填项"});  
77 - // flag=false;  
78 - // }  
79 - // if(flag&&req.session.passport&&req.session.passport.user&&!req.session.passport.user.service_catalog){  
80 - // res.status(404);  
81 - // res.send({"errors":{},"message":"服务目录未加载,请重新登录"});  
82 - // flag=false;  
83 - // }  
84 - // if(flag&&searchService(req.session.passport.user.service_catalog,req.headers['service-catalog'])){  
85 - // res.status(404);  
86 - // res.send({"errors":{},"message":"服务目录未查询到请求服务,请确认参数正确"});  
87 - // flag=false;  
88 - // }  
89 - return flag;  
90 - }  
91 -  
92 - function checkJson(req){  
93 - if(req.headers&&req.headers['content-type']=='application/json'){  
94 - return true;  
95 - }else{  
96 - return false;  
97 - }  
98 - }  
99 -  
100 - function get(req,res,next){  
101 - var url=splitUrl(req.originalUrl);  
102 - url=handlePamars(url);  
103 - url=splitServiceFromUrl(url);  
104 - if(checkReq(req,res)){  
105 - var options={  
106 - 'service_catalog':'',  
107 - 'url': url,  
108 - 'useUrl':true,  
109 - 'params':req.body,  
110 - 'callback':_cb,  
111 - 'req':req,  
112 - 'res':res,  
113 - 'options':{},  
114 - 'excludeToken':true  
115 - };  
116 - // if(checkJson(req)){  
117 - // rest.json(options);  
118 - // }else{  
119 - // rest.get(options);  
120 - // }  
121 - rest.get(options);  
122 - }  
123 - function _cb(data,response){  
124 - logger.info('back data:',data);  
125 - if(response.statusCode<300&&!data){  
126 - res.send({  
127 - code:200,  
128 - message:'操作成功!'  
129 - });  
130 - }else {  
131 - res.send(data);  
132 - }  
133 - }  
134 - }  
135 -  
136 - function post(req,res,next){  
137 - var url=splitUrl(req.originalUrl);  
138 - url=splitServiceFromUrl(url);  
139 - if(checkReq(req,res)){  
140 - var options={  
141 - 'service_catalog':'',  
142 - 'url': url,  
143 - 'useUrl':true,  
144 - 'params':req.body,  
145 - 'callback':_cb,  
146 - 'req':req,  
147 - 'res':res,  
148 - 'options':{},  
149 - 'excludeToken':true  
150 - };  
151 - if(checkJson(req)){  
152 - rest.postJson(options);  
153 - }else{  
154 - rest.post(options);  
155 - }  
156 - }  
157 - function _cb(data,response){  
158 - logger.info('back data:',data);  
159 - if(response.statusCode<300&&!data){  
160 - res.send({  
161 - code:200,  
162 - message:'操作成功!'  
163 - });  
164 - }else{  
165 - res.send(data);  
166 - }  
167 - }  
168 - }  
169 -  
170 - function put(req,res,next){  
171 - var url=splitUrl(req.originalUrl);  
172 - url=splitServiceFromUrl(url);  
173 - if(checkReq(req,res)){  
174 - var options={  
175 - 'service_catalog':'',  
176 - 'url':url,  
177 - 'useUrl':true,  
178 - 'params':req.body,  
179 - 'callback':_cb,  
180 - 'req':req,  
181 - 'res':res,  
182 - 'options':{},  
183 - 'excludeToken':true  
184 - };  
185 - if(checkJson(req)){  
186 - rest.putJson(options);  
187 - }else{  
188 - rest.put(options);  
189 - }  
190 - }  
191 - function _cb(data,response){  
192 - logger.info('back data:',data);  
193 - if(response.statusCode<300&&!data){  
194 - res.send({  
195 - code:200,  
196 - message:'操作成功!'  
197 - });  
198 - }else{  
199 - res.send(data);  
200 - }  
201 - }  
202 - }  
203 -  
204 - function patch(req,res,next){  
205 - var url=splitUrl(req.originalUrl);  
206 - url=splitServiceFromUrl(url);  
207 - if(checkReq(req,res)){  
208 - var options={  
209 - 'service_catalog':'',  
210 - 'url': url,  
211 - 'useUrl':true,  
212 - 'params':req.body,  
213 - 'callback':_cb,  
214 - 'req':req,  
215 - 'res':res,  
216 - 'options':{},  
217 - 'excludeToken':true  
218 - };  
219 - if(checkJson(req)){  
220 - rest.patchJson(options);  
221 - }else{  
222 - rest.patch(options);  
223 - }  
224 - }  
225 - function _cb(data,response){  
226 - logger.info('back data:',data);  
227 - res.send(data);  
228 - }  
229 - }  
230 -  
231 - function head(req,res,next){  
232 - var url=splitUrl(req.originalUrl);  
233 - url=splitServiceFromUrl(url);  
234 - if(checkReq(req,res)){  
235 - var options={  
236 - 'service_catalog':'',  
237 - 'url': url,  
238 - 'useUrl':true,  
239 - 'params':req.body,  
240 - 'callback':_cb,  
241 - 'req':req,  
242 - 'res':res,  
243 - 'options':{},  
244 - 'excludeToken':true  
245 - };  
246 - rest.get(options);  
247 - }  
248 - function _cb(data,response){  
249 - logger.info('back data:',data);  
250 - res.send(data);  
251 - }  
252 - }  
253 -  
254 - function del(req,res,next){  
255 - var url=splitUrl(req.originalUrl);  
256 - url=splitServiceFromUrl(url);  
257 - if(checkReq(req,res)){  
258 - var options={  
259 - 'service_catalog':'',  
260 - 'url': url,  
261 - 'useUrl':true,  
262 - 'params':req.body,  
263 - 'callback':_cb,  
264 - 'req':req,  
265 - 'res':res,  
266 - 'options':{},  
267 - 'excludeToken':true  
268 - };  
269 - rest.del(options);  
270 - }  
271 - function _cb(data,response){  
272 - logger.info('back data:',data);  
273 - if(response.statusCode<300){  
274 - res.send({'action':'delete',"message":"删除成功"});  
275 - }else{  
276 - res.send(data);  
277 - }  
278 - }  
279 - }  
280 -  
281 - function doLogin(req,res,next){  
282 - passport.authenticate('local', function(err, user, info) {  
283 - if (err) { return next(err); }  
284 - if (!user) { return res.send({'error':'用户名或密码错误!'}); }  
285 - req.logIn(user, function(err) {  
286 - if (err) { return next(err); }  
287 - return res.send({'ok':'登录成功',user_info:req.session.passport.user.user_info});  
288 - });  
289 - })(req, res, next);  
290 - }  
291 -  
292 - return {  
293 - 'get':get,  
294 - 'post':post,  
295 - 'put':put,  
296 - 'patch':patch,  
297 - 'head':head,  
298 - 'delete':del  
299 - };  
300 -};  
301 -  
302 -exports['@singleton']=true;  
303 -exports['@require']=['igloo/logger','utils/rest','igloo/settings'];  
1 -var urlencode = require('urlencode');  
2 -exports=module.exports=function(logger,rest,settings){  
3 - function encodeUrl(url){  
4 - return urlencode(url);  
5 - }  
6 -  
7 - function encodePamars(params){  
8 - var temp=[];  
9 - for(var i=0;i<params.length;i++){  
10 - var param=params[i];  
11 - var tempParam=param.split("=")  
12 - tempParam[1]=urlencode.decode(tempParam[1], 'utf8');  
13 - tempParam[1]=tempParam[1].replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');  
14 - console.log(tempParam[1]);  
15 - if(i<(params.length-1)){  
16 - if(/[:&+/?%#=]/g.test(tempParam[1])){  
17 - temp.push(tempParam[0]+"="+encodeUrl(tempParam[1])+"&");  
18 - }else{  
19 - temp.push(tempParam[0]+"="+tempParam[1]+"&");  
20 - }  
21 - }else{  
22 - if(/[:&+/?%#=]/g.test(tempParam[1])){  
23 - temp.push(tempParam[0]+"="+encodeUrl(tempParam[1]));  
24 - }else{  
25 - temp.push(tempParam[0]+"="+tempParam[1]);  
26 - }  
27 - }  
28 - }  
29 - return temp.join("");  
30 - }  
31 -  
32 - function handlePamars(url){  
33 - var tempUrl=url;  
34 - // if(url.indexOf("?")!=-1){  
35 - // var temp=url.split("?");  
36 - // var params="";  
37 - // if(temp[1]&&temp[1].indexOf("&")!=-1){  
38 - // params=encodePamars(temp[1].split("&"));  
39 - // }else{  
40 - // params=encodePamars([temp[1]]);  
41 - // }  
42 - // return temp[0]+"?"+params;  
43 - // }else {  
44 - // return tempUrl;  
45 - // }  
46 - return tempUrl;  
47 - }  
48 -  
49 - function splitServiceFromUrl(url){  
50 - var catalog=url.substring(1,url.indexOf('/',1));  
51 - var pathUrl=url.substring(url.indexOf('/',1));  
52 - var fullPath=settings.restful.url+catalog+settings.restful.version+pathUrl;  
53 - if(pathUrl&&pathUrl.indexOf('inits')!=-1){  
54 - fullPath=settings.restful.url+catalog+'/v2'+pathUrl;  
55 - }  
56 - return fullPath  
57 - }  
58 -  
59 - function splitUrl(fullUrl){  
60 - var url=fullUrl.substring(9);  
61 - return url;  
62 - }  
63 -  
64 - function searchService(services,name){  
65 - if(services[name]){  
66 - console.log(services[name]);  
67 - return false;  
68 - }else{  
69 - return true;  
70 - }  
71 - }  
72 -  
73 - function checkReq(req,res){  
74 - var flag=true;  
75 - // if(flag&&req.headers&&!req.headers['service-catalog']){  
76 - // res.status(400);  
77 - // res.send({"errors":{},"message":"缺少必要请求参数,服务目录名称是必填项"});  
78 - // flag=false;  
79 - // }  
80 - // if(flag&&req.session.passport&&req.session.passport.user&&!req.session.passport.user.service_catalog){  
81 - // res.status(404);  
82 - // res.send({"errors":{},"message":"服务目录未加载,请重新登录"});  
83 - // flag=false;  
84 - // }  
85 - // if(flag&&searchService(req.session.passport.user.service_catalog,req.headers['service-catalog'])){  
86 - // res.status(404);  
87 - // res.send({"errors":{},"message":"服务目录未查询到请求服务,请确认参数正确"});  
88 - // flag=false;  
89 - // }  
90 - return flag;  
91 - }  
92 -  
93 - function checkJson(req){  
94 - if(req.headers&&req.headers['content-type']=='application/json'){  
95 - return true;  
96 - }else{  
97 - return false;  
98 - }  
99 - }  
100 -  
101 - function get(req,res,next){  
102 - var url=splitUrl(req.originalUrl);  
103 - url=handlePamars(url);  
104 - url=splitServiceFromUrl(url);  
105 - if(checkReq(req,res)){  
106 - var options={  
107 - 'service_catalog':'',  
108 - 'url':url,  
109 - 'useUrl':true,  
110 - 'params':req.body,  
111 - 'callback':_cb,  
112 - 'req':req,  
113 - 'res':res,  
114 - 'options':{}  
115 - };  
116 - rest.get(options);  
117 - }  
118 - function _cb(data,response){  
119 - logger.info('back data:',data);  
120 - if(response.statusCode<300&&!data){  
121 - res.send({  
122 - code:200,  
123 - message:'操作成功!'  
124 - });  
125 - }else {  
126 - res.send(data);  
127 - }  
128 - }  
129 - }  
130 -  
131 - function post(req,res,next){  
132 - var url=splitUrl(req.originalUrl);  
133 - url=splitServiceFromUrl(url);  
134 - if(checkReq(req,res)){  
135 - var options={  
136 - 'service_catalog':'services[catalog].public_endpoint',  
137 - 'url':url,  
138 - 'useUrl':true,  
139 - 'params':req.body,  
140 - 'callback':_cb,  
141 - 'req':req,  
142 - 'res':res,  
143 - 'options':{}  
144 - };  
145 - if(checkJson(req)){  
146 - rest.postJson(options);  
147 - }else{  
148 - rest.post(options);  
149 - }  
150 - }  
151 - function _cb(data,response){  
152 - logger.info('back data:',data);  
153 - if(response.statusCode<300&&!data){  
154 - res.send({  
155 - code:200,  
156 - message:'操作成功!'  
157 - });  
158 - }else{  
159 - res.send(data);  
160 - }  
161 - }  
162 - }  
163 -  
164 - function put(req,res,next){  
165 - var url=splitUrl(req.originalUrl);  
166 - url=splitServiceFromUrl(url);  
167 - if(checkReq(req,res)){  
168 - var options={  
169 - 'service_catalog':'services[catalog].public_endpoint',  
170 - 'url': url,  
171 - 'useUrl':true,  
172 - 'params':req.body,  
173 - 'callback':_cb,  
174 - 'req':req,  
175 - 'res':res,  
176 - 'options':{}  
177 - };  
178 - if(checkJson(req)){  
179 - rest.putJson(options);  
180 - }else{  
181 - rest.put(options);  
182 - }  
183 - }  
184 - function _cb(data,response){  
185 - logger.info('back data:',data);  
186 - if(response.statusCode<300&&!data){  
187 - res.send({  
188 - code:200,  
189 - message:'操作成功!'  
190 - });  
191 - }else{  
192 - res.send(data);  
193 - }  
194 - }  
195 - }  
196 -  
197 - function patch(req,res,next){  
198 - var url=splitUrl(req.originalUrl);  
199 - url=splitServiceFromUrl(url);  
200 - if(checkReq(req,res)){  
201 - var options={  
202 - 'service_catalog':'services[catalog].public_endpoint',  
203 - 'url': url,  
204 - 'useUrl':true,  
205 - 'params':req.body,  
206 - 'callback':_cb,  
207 - 'req':req,  
208 - 'res':res,  
209 - 'options':{}  
210 - };  
211 - if(checkJson(req)){  
212 - rest.patchJson(options);  
213 - }else{  
214 - rest.patch(options);  
215 - }  
216 - }  
217 - function _cb(data,response){  
218 - logger.info('back data:',data);  
219 - res.send(data);  
220 - }  
221 - }  
222 -  
223 - function head(req,res,next){  
224 - var url=splitUrl(req.originalUrl);  
225 - url=splitServiceFromUrl(url);  
226 - if(checkReq(req,res)){  
227 - var options={  
228 - 'service_catalog':'services[catalog].public_endpoint',  
229 - 'url': url,  
230 - 'useUrl':true,  
231 - 'params':req.body,  
232 - 'callback':_cb,  
233 - 'req':req,  
234 - 'res':res,  
235 - 'options':{}  
236 - };  
237 - rest.get(options);  
238 - }  
239 - function _cb(data,response){  
240 - logger.info('back data:',data);  
241 - res.send(data);  
242 - }  
243 - }  
244 -  
245 - function del(req,res,next){  
246 - var url=splitUrl(req.originalUrl);  
247 - url=splitServiceFromUrl(url);  
248 - if(checkReq(req,res)){  
249 - var options={  
250 - 'service_catalog':'services[catalog].public_endpoint',  
251 - 'url': url,  
252 - 'useUrl':true,  
253 - 'params':req.body,  
254 - 'callback':_cb,  
255 - 'req':req,  
256 - 'res':res,  
257 - 'options':{}  
258 - };  
259 - rest.del(options);  
260 - }  
261 - function _cb(data,response){  
262 - logger.info('back data:',data);  
263 - if(response.statusCode<300){  
264 - res.send({'action':'delete',"message":"删除成功"});  
265 - }else{  
266 - res.send(data);  
267 - }  
268 - }  
269 - }  
270 -  
271 - return {  
272 - 'get':get,  
273 - 'post':post,  
274 - 'put':put,  
275 - 'patch':patch,  
276 - 'head':head,  
277 - 'delete':del  
278 - };  
279 -};  
280 -  
281 -exports['@singleton']=true;  
282 -exports['@require']=['igloo/logger','utils/rest','igloo/settings'];  
1 -var urlencode = require('urlencode');  
2 -var mockData = require('../json/mockDate.json');  
3 -exports=module.exports=function(logger,rest,settings){  
4 -  
5 - function getJson(url,method){  
6 - var backData={};  
7 - for(var i=0;i<mockData.length;i++){  
8 - var urlRegex=new RegExp(mockData[i].url,'g');  
9 - if(urlRegex.test(url)){  
10 - backData=mockData[i][method+'_data'];  
11 - return backData;  
12 - }  
13 - }  
14 - return backData;  
15 - }  
16 -  
17 - function get(req,res,next){  
18 - console.log(req.path);  
19 - res.send(getJson(req.path,'get'));  
20 - }  
21 -  
22 - function post(req,res,next){  
23 - console.log(req.path);  
24 - res.send(getJson(req.path,'post'));  
25 - }  
26 -  
27 - function put(req,res,next){  
28 - console.log(req.path);  
29 - res.send(getJson(req.path,'put'));  
30 - }  
31 -  
32 - function patch(req,res,next){  
33 - console.log(req.path);  
34 - res.send(getJson(req.path,'patch'));  
35 - }  
36 -  
37 - function head(req,res,next){  
38 - console.log(req.path);  
39 - res.send(getJson(req.path,'head'));  
40 - }  
41 -  
42 - function del(req,res,next){  
43 - console.log(req.path);  
44 - res.send(getJson(req.path,'del'));  
45 - }  
46 -  
47 - return {  
48 - 'get':get,  
49 - 'post':post,  
50 - 'put':put,  
51 - 'patch':patch,  
52 - 'head':head,  
53 - 'delete':del  
54 - };  
55 -};  
56 -  
57 -exports['@singleton']=true;  
58 -exports['@require']=['igloo/logger','utils/rest','igloo/settings'];  
1 -var urlencode= require('urlencode');  
2 -  
3 -exports=module.exports=function(logger,rest,settings){  
4 - var api_service_endpoint = 'http://47.98.198.227:59000/v1';  
5 -  
6 - function index(req,res,next){  
7 - logger.info(req.user);  
8 - res.render('robotMobile',{title:'外呼机器人'});  
9 - }  
10 -  
11 - function splitUrl(fullUrl){  
12 - var url=fullUrl.substring(9);  
13 - return url;  
14 - }  
15 -  
16 - function get(req,res,next){  
17 - var url=splitUrl(req.originalUrl);  
18 - rest.get({  
19 - 'baseUrl':'url',  
20 - 'url':api_service_endpoint+url,  
21 - 'useUrl':true,  
22 - 'params':req.body,  
23 - 'callback':_cb,  
24 - 'req':req,  
25 - 'res':res,  
26 - 'options':{},  
27 - 'excludeToken':true  
28 - });  
29 - function _cb(data,response){  
30 - console.log(data);  
31 - res.send(data);  
32 - }  
33 - // res.send({  
34 - // "total_count":20,  
35 - // "items":[{  
36 - // "id":'001',  
37 - // "call_out_number":'18501068035',  
38 - // "call_out_time":2022222,  
39 - // "status":"4",  
40 - // "record_url":'xxxx'  
41 - // }]  
42 - // })  
43 - }  
44 -  
45 - function post(req,res,next){  
46 - var url=splitUrl(req.originalUrl);  
47 - rest.postJson({  
48 - 'baseUrl':'url',  
49 - 'url':api_service_endpoint+url,  
50 - 'useUrl':true,  
51 - 'params':req.body,  
52 - 'callback':_cb,  
53 - 'req':req,  
54 - 'res':res,  
55 - 'options':{},  
56 - 'excludeToken':true  
57 - });  
58 - function _cb(data,response){  
59 - console.log(data);  
60 - res.send(data);  
61 - }  
62 - }  
63 -  
64 - function put(req,res,next){  
65 - var url=splitUrl(req.originalUrl);  
66 - rest.putJson({  
67 - 'baseUrl':'url',  
68 - 'url':api_service_endpoint+url,  
69 - 'useUrl':true,  
70 - 'params':req.body,  
71 - 'callback':_cb,  
72 - 'req':req,  
73 - 'res':res,  
74 - 'options':{},  
75 - 'excludeToken':true  
76 - });  
77 - function _cb(data,response){  
78 - res.send(data);  
79 - }  
80 - }  
81 -  
82 - function patch(req,res,next){  
83 - var url=splitUrl(req.originalUrl);  
84 - rest.patchJson({  
85 - 'baseUrl':'url',  
86 - 'url':api_service_endpoint+url,  
87 - 'useUrl':true,  
88 - 'params':req.body,  
89 - 'callback':_cb,  
90 - 'req':req,  
91 - 'res':res,  
92 - 'options':{},  
93 - 'excludeToken':true  
94 - });  
95 - function _cb(data,response){  
96 - res.send(data);  
97 - }  
98 - }  
99 -  
100 - function head(req,res,next){  
101 - var url=splitUrl(req.originalUrl);  
102 - rest.get({  
103 - 'baseUrl':'url',  
104 - 'url':api_service_endpoint+url,  
105 - 'useUrl':true,  
106 - 'params':req.body,  
107 - 'callback':_cb,  
108 - 'req':req,  
109 - 'res':res,  
110 - 'options':{},  
111 - 'excludeToken':true  
112 - });  
113 - function _cb(data,response){  
114 - res.send(data);  
115 - }  
116 - }  
117 -  
118 - function del(req,res,next){  
119 - var url=splitUrl(req.originalUrl);  
120 - rest.del({  
121 - 'baseUrl':'url',  
122 - 'url':api_service_endpoint+url,  
123 - 'useUrl':true,  
124 - 'params':req.body,  
125 - 'callback':_cb,  
126 - 'req':req,  
127 - 'res':res,  
128 - 'options':{},  
129 - 'excludeToken':true  
130 - });  
131 - function _cb(data,response){  
132 - res.send(data);  
133 - }  
134 - }  
135 -  
136 - return {  
137 - 'index':index,  
138 - 'get':get,  
139 - 'post':post,  
140 - 'put':put,  
141 - 'patch':patch,  
142 - 'head':head,  
143 - 'delete':del  
144 - };  
145 -};  
146 -  
147 -exports['@singleton']=true;  
148 -exports['@require']=['igloo/logger','utils/rest','igloo/settings'];  
1 -var express = require('express'); 1 +var express = require('express');
2 2
3 -exports = module.exports = function(IoC,policies){ 3 +exports = module.exports = function (IoC, policies, settings) {
4 var app = this; 4 var app = this;
5 - var router= express.Router();  
6 - var controller = IoC.create('controllers/api');  
7 - 5 + var router = express.Router();
  6 + var controller = IoC.create('controllers/api');
  7 +
8 router.get( 8 router.get(
9 '/*', 9 '/*',
10 policies.ensureLoggedOut(), 10 policies.ensureLoggedOut(),
@@ -15,13 +15,13 @@ exports = module.exports = function(IoC,policies){ @@ -15,13 +15,13 @@ exports = module.exports = function(IoC,policies){
15 '/*', 15 '/*',
16 policies.ensureLoggedOut(), 16 policies.ensureLoggedOut(),
17 controller.post 17 controller.post
18 - ); 18 + );
19 19
20 router.put( 20 router.put(
21 '/*', 21 '/*',
22 policies.ensureLoggedOut(), 22 policies.ensureLoggedOut(),
23 controller.put 23 controller.put
24 - ); 24 + );
25 25
26 router.patch( 26 router.patch(
27 '/*', 27 '/*',
@@ -34,15 +34,15 @@ exports = module.exports = function(IoC,policies){ @@ -34,15 +34,15 @@ exports = module.exports = function(IoC,policies){
34 policies.ensureLoggedOut(), 34 policies.ensureLoggedOut(),
35 controller.head 35 controller.head
36 ); 36 );
37 - 37 +
38 router.delete( 38 router.delete(
39 '/*', 39 '/*',
40 policies.ensureLoggedOut(), 40 policies.ensureLoggedOut(),
41 controller.delete 41 controller.delete
42 - ); 42 + );
43 43
44 - app.use('/api', router); 44 + app.use(settings.prefix + 'api', router);
45 }; 45 };
46 46
47 -exports['@require']=['$container','policies'];  
48 -exports['@singleton']=true; 47 +exports['@require'] = ['$container', 'policies', 'igloo/settings'];
  48 +exports['@singleton'] = true;
1 var express = require('express'); 1 var express = require('express');
2 var payRoll = require('../json/payRoll.json'); 2 var payRoll = require('../json/payRoll.json');
3 3
4 -exports = module.exports = function (IoC, policies) { 4 +exports = module.exports = function (IoC, policies, settings) {
5 var app = this; 5 var app = this;
6 var router = express.Router(); 6 var router = express.Router();
  7 + var router2 = express.Router();
7 var controller = IoC.create('controllers/auth'); 8 var controller = IoC.create('controllers/auth');
8 - router.get( 9 + if (settings.prefix.length > 0) {
  10 + router.get(
  11 + '/',
  12 + controller.index
  13 + );
  14 + router.get(
  15 + '/signOut',
  16 + controller.signOut
  17 + );
  18 + }
  19 +
  20 + router2.get(
9 '/', 21 '/',
10 - controller.index 22 + controller.indexPrefix
11 ); 23 );
  24 +
12 router.get( 25 router.get(
13 '/productDes', 26 '/productDes',
14 controller.productDes 27 controller.productDes
@@ -39,7 +52,8 @@ exports = module.exports = function (IoC, policies) { @@ -39,7 +52,8 @@ exports = module.exports = function (IoC, policies) {
39 controller.doLogin 52 controller.doLogin
40 ); 53 );
41 54
42 - router.get( 55 +
  56 + router2.get(
43 '/signOut', 57 '/signOut',
44 controller.signOut 58 controller.signOut
45 ); 59 );
@@ -198,6 +212,12 @@ exports = module.exports = function (IoC, policies) { @@ -198,6 +212,12 @@ exports = module.exports = function (IoC, policies) {
198 controller.listChannels 212 controller.listChannels
199 ); 213 );
200 214
  215 + router.post(
  216 + '/getTastLink',
  217 + policies.ensureLoggedOut(),
  218 + controller.getTastLink
  219 + );
  220 +
201 router.get( 221 router.get(
202 '/filemeta', 222 '/filemeta',
203 policies.ensureLoggedOut(), 223 policies.ensureLoggedOut(),
@@ -220,8 +240,23 @@ exports = module.exports = function (IoC, policies) { @@ -220,8 +240,23 @@ exports = module.exports = function (IoC, policies) {
220 controller.weidianTempLate 240 controller.weidianTempLate
221 ); 241 );
222 242
223 - app.use('/', router); 243 + router.get(
  244 + '/wso-workai',
  245 + controller.workaiSecurityOAuth
  246 + );
  247 +
  248 + router.get(
  249 + '/socialwork/freedom-jobs/emps/:id/:verification',
  250 + controller.freedomJobsEmp
  251 + );
  252 +
  253 + settings.prefix.length > 1 ?
  254 + app.use(settings.prefix.substring(0, settings.prefix.length - 1), router) :
  255 + app.use('/', router);
  256 +
  257 +
  258 + app.use('/', router2);
224 }; 259 };
225 260
226 -exports['@require'] = ['$container', 'policies']; 261 +exports['@require'] = ['$container', 'policies', 'igloo/settings'];
227 exports['@singleton'] = true; 262 exports['@singleton'] = true;
1 -var express = require('express');  
2 -  
3 -exports = module.exports = function(IoC,policies){  
4 - var app = this;  
5 - var router= express.Router();  
6 - var controller = IoC.create('controllers/authed');  
7 -  
8 - router.get(  
9 - '/*',  
10 - controller.get  
11 - );  
12 -  
13 - router.post(  
14 - '/*',  
15 - controller.post  
16 - );  
17 -  
18 - router.put(  
19 - '/*',  
20 - controller.put  
21 - );  
22 -  
23 - router.patch(  
24 - '/*',  
25 - controller.patch  
26 - );  
27 -  
28 - router.head(  
29 - '/*',  
30 - controller.head  
31 - );  
32 -  
33 - router.delete(  
34 - '/*',  
35 - controller.delete  
36 - );  
37 -  
38 - app.use('/auth_api', router);  
39 -};  
40 -  
41 -exports['@require']=['$container','policies'];  
42 -exports['@singleton']=true;  
@@ -3,34 +3,23 @@ @@ -3,34 +3,23 @@
3 3
4 var bootable = require('bootable'); 4 var bootable = require('bootable');
5 5
6 -exports = module.exports = function(IoC, settings) { 6 +exports = module.exports = function (IoC, settings) {
7 7
8 - var app = this;  
9 -  
10 - //auth  
11 - app.phase(bootable.di.routes('./routes/auth.js'));  
12 -  
13 - //mock  
14 - app.phase(bootable.di.routes('./routes/mock.js'));  
15 - //authed 8 + var app = this;
16 9
17 - app.phase(bootable.di.routes('./routes/authed.js')); 10 + //auth
  11 + app.phase(bootable.di.routes('./routes/auth.js'));
18 12
19 //api 13 //api
20 app.phase(bootable.di.routes('./routes/api.js')); 14 app.phase(bootable.di.routes('./routes/api.js'));
21 15
22 - //file  
23 - app.phase(bootable.di.routes('./routes/file.js'));  
24 -  
25 - //robot  
26 - app.phase(bootable.di.routes('./routes/robot.js'));  
27 16
28 // error handler (always keep this last) 17 // error handler (always keep this last)
29 - app.phase(function() { 18 + app.phase(function () {
30 var errorHandler = IoC.create('igloo/error-handler'); 19 var errorHandler = IoC.create('igloo/error-handler');
31 app.use(errorHandler); 20 app.use(errorHandler);
32 }); 21 });
33 22
34 }; 23 };
35 24
36 -exports['@require'] = [ '$container', 'igloo/settings' ]; 25 +exports['@require'] = ['$container', 'igloo/settings'];
1 -var express = require('express');  
2 -  
3 -exports = module.exports = function(IoC,policies){  
4 - var app = this;  
5 - var router= express.Router();  
6 - var controller = IoC.create('controllers/file');  
7 -  
8 - router.get(  
9 - '/*',  
10 - controller.get  
11 - );  
12 -  
13 - router.post(  
14 - '/*',  
15 - controller.post  
16 - );  
17 -  
18 - router.put(  
19 - '/*',  
20 - controller.put  
21 - );  
22 -  
23 - router.patch(  
24 - '/*',  
25 - controller.patch  
26 - );  
27 -  
28 - router.head(  
29 - '/*',  
30 - controller.head  
31 - );  
32 -  
33 - router.delete(  
34 - '/*',  
35 - controller.delete  
36 - );  
37 -  
38 - app.use('/file_api', router);  
39 -};  
40 -  
41 -exports['@require']=['$container','policies'];  
42 -exports['@singleton']=true;  
1 -var express = require('express');  
2 -  
3 -exports = module.exports = function(IoC,policies){  
4 - var app = this;  
5 - var router= express.Router();  
6 - var controller = IoC.create('controllers/mock');  
7 -  
8 - router.get(  
9 - '/*',  
10 - policies.ensureLoggedOut(),  
11 - controller.get  
12 - );  
13 -  
14 - router.post(  
15 - '/*',  
16 - policies.ensureLoggedOut(),  
17 - controller.post  
18 - );  
19 -  
20 - router.put(  
21 - '/*',  
22 - policies.ensureLoggedOut(),  
23 - controller.put  
24 - );  
25 -  
26 - router.patch(  
27 - '/*',  
28 - policies.ensureLoggedOut(),  
29 - controller.patch  
30 - );  
31 -  
32 - router.head(  
33 - '/*',  
34 - policies.ensureLoggedOut(),  
35 - controller.head  
36 - );  
37 -  
38 - router.delete(  
39 - '/*',  
40 - policies.ensureLoggedOut(),  
41 - controller.delete  
42 - );  
43 -  
44 - app.use('/mock/api', router);  
45 -};  
46 -  
47 -exports['@require']=['$container','policies'];  
48 -exports['@singleton']=true;  
1 -var express = require('express');  
2 -  
3 -exports = module.exports = function(IoC,policies){  
4 - var app = this;  
5 - var router= express.Router();  
6 - var controller = IoC.create('controllers/robot');  
7 - router.get(  
8 - '/robot',  
9 - controller.index  
10 - );  
11 -  
12 - router.get(  
13 - '/api/*',  
14 - controller.get  
15 - );  
16 -  
17 - router.post(  
18 - '/api/*',  
19 - controller.post  
20 - );  
21 -  
22 - router.put(  
23 - '/api/*',  
24 - controller.put  
25 - );  
26 -  
27 - router.patch(  
28 - '/api/*',  
29 - controller.patch  
30 - );  
31 -  
32 - router.head(  
33 - '/api/*',  
34 - controller.head  
35 - );  
36 -  
37 - router.delete(  
38 - '/api/*',  
39 - controller.delete  
40 - );  
41 -  
42 - app.use('/demo', router);  
43 -};  
44 -  
45 -exports['@require']=['$container','policies'];  
46 -exports['@singleton']=true;  
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 - <head>  
4 - <title>企云在线</title>  
5 - <% include utils.ejs %>  
6 - <style type="text/css">  
7 - .pt-page {  
8 - width: 100%;  
9 - height: 100%;  
10 - position: absolute;  
11 - top: 0;  
12 - left: 0;  
13 - visibility: hidden;  
14 - overflow: hidden;  
15 - -webkit-backface-visibility: hidden;  
16 - -moz-backface-visibility: hidden;  
17 - backface-visibility: hidden;  
18 - -webkit-transform: translate3d(0, 0, 0);  
19 - -moz-transform: translate3d(0, 0, 0);  
20 - transform: translate3d(0, 0, 0);  
21 - -webkit-transform-style: preserve-3d;  
22 - -moz-transform-style: preserve-3d;  
23 - transform-style: preserve-3d;  
24 - }  
25 - .pt-page-current,  
26 - .no-js .pt-page {  
27 - visibility: visible;  
28 - z-index: 1;  
29 - }  
30 - </style>  
31 - </head>  
32 - <body class="home-hr">  
33 - <div class="menu-hr ">  
34 - <div class="menu-hr-wrap">  
35 - <div class="login-user" id="login-user-menu">  
36 - <img class="user-photo" src="imgs/touxiang.jpg" alt="头像" />  
37 - <h3>登录用户</h3>  
38 - <span class="login-user-name">fanwh</span>  
39 - </div> 3 +
  4 +<head>
  5 + <title>企云在线</title>
  6 + <% include utils.ejs %>
  7 + <style type="text/css">
  8 + .pt-page {
  9 + width: 100%;
  10 + height: 100%;
  11 + position: absolute;
  12 + top: 0;
  13 + left: 0;
  14 + visibility: hidden;
  15 + overflow: hidden;
  16 + -webkit-backface-visibility: hidden;
  17 + -moz-backface-visibility: hidden;
  18 + backface-visibility: hidden;
  19 + -webkit-transform: translate3d(0, 0, 0);
  20 + -moz-transform: translate3d(0, 0, 0);
  21 + transform: translate3d(0, 0, 0);
  22 + -webkit-transform-style: preserve-3d;
  23 + -moz-transform-style: preserve-3d;
  24 + transform-style: preserve-3d;
  25 + }
  26 +
  27 + .pt-page-current,
  28 + .no-js .pt-page {
  29 + visibility: visible;
  30 + z-index: 1;
  31 + }
  32 + </style>
  33 +</head>
  34 +
  35 +<body class="home-hr">
  36 + <div class="menu-hr ">
  37 + <div class="menu-hr-wrap">
  38 + <div class="login-user" id="login-user-menu">
  39 + <img class="user-photo" src="imgs/touxiang.jpg" alt="头像" />
  40 + <h3>登录用户</h3>
  41 + <span class="login-user-name">fanwh</span>
40 </div> 42 </div>
41 - <div class="menu-items-wrap">  
42 - <ul class="primary-items">  
43 - <li><a href="#userInfo"><i class="fa fa-home blue-icon fa-fw"></i>主页</a></li>  
44 - <li><a href="#formEditor"><i class="fa fa-user green-icon fa-fw"></i>表单设置</a></li>  
45 - <li><a href="#approvalEditor"><i class="fa fa-plug yellow-icon fa-fw"></i>自动化</a></li>  
46 - <li><a href="#"><i class="fa fa-inbox purple-icon fa-fw"></i>消息历史纪录</a></li>  
47 - <li><a href="#"><i class="fa fa-file blue-icon fa-fw"></i>文件管理</a></li>  
48 - <li><a href="#"><i class="fa fa-group red-icon fa-fw"></i>团队目录</a></li>  
49 - <li><a href="#"><i class="fa fa-dashboard green-icon fa-fw"></i>统计资料</a></li>  
50 - <li><a href="#"><i class="fa fa-magic yellow-icon fa-fw"></i>个性化设置</a></li>  
51 - </ul>  
52 - <h3>管理设置</h3>  
53 - <ul class="secondary-items" >  
54 - <li><a href="#">团队设置</a></li>  
55 - <li><a href="#">团队管理</a></li>  
56 - <li><a href="#">邀请他人</a></li>  
57 - <li><a href="#">付费用户</a></li>  
58 - <li><a href="#">认证</a></li>  
59 - </ul> 43 + </div>
  44 + <div class="menu-items-wrap">
  45 + <ul class="primary-items">
  46 + <li><a href="#userInfo"><i class="fa fa-home blue-icon fa-fw"></i>主页</a></li>
  47 + <li><a href="#formEditor"><i class="fa fa-user green-icon fa-fw"></i>表单设置</a></li>
  48 + <li><a href="#approvalEditor"><i class="fa fa-plug yellow-icon fa-fw"></i>自动化</a></li>
  49 + <li><a href="#"><i class="fa fa-inbox purple-icon fa-fw"></i>消息历史纪录</a></li>
  50 + <li><a href="#"><i class="fa fa-file blue-icon fa-fw"></i>文件管理</a></li>
  51 + <li><a href="#"><i class="fa fa-group red-icon fa-fw"></i>团队目录</a></li>
  52 + <li><a href="#"><i class="fa fa-dashboard green-icon fa-fw"></i>统计资料</a></li>
  53 + <li><a href="#"><i class="fa fa-magic yellow-icon fa-fw"></i>个性化设置</a></li>
  54 + </ul>
  55 + <h3>管理设置</h3>
  56 + <ul class="secondary-items">
  57 + <li><a href="#">团队设置</a></li>
  58 + <li><a href="#">团队管理</a></li>
  59 + <li><a href="#">邀请他人</a></li>
  60 + <li><a href="#">付费用户</a></li>
  61 + <li><a href="#">认证</a></li>
  62 + </ul>
  63 + </div>
  64 + <div class="menu-footer">
  65 + <ul class="menu-footer-wrap">
  66 + <li><a href="#/is">产品介绍</a></li>
  67 + <li><a href="#/apps">轻松HR Apps</a></li>
  68 + <li><a href="#/brand-guidelines">品牌指导</a></li>
  69 + <li><a href="#/help">帮助中心</a></li>
  70 + <li><a target="_blank" href="#">应用接口<i
  71 + class="ts_icon ts_icon_external_link small_left_margin ts_icon_inherit"></i></a></li>
  72 + <li><a href="#/account/gateways">网关设置</a></li>
  73 + </ul>
  74 + </div>
  75 + </div>
  76 + <div class="container-hr">
  77 + <div class="head-hr z-depth-1">
  78 + <div class="menu-toggle" id="show-menu">
  79 + <span class="menu-icon fa fa-reorder"></span>
  80 + <span class="menu-label">菜单</span>
60 </div> 81 </div>
61 - <div class="menu-footer">  
62 - <ul class="menu-footer-wrap">  
63 - <li><a href="#/is">产品介绍</a></li>  
64 - <li><a href="#/apps">轻松HR Apps</a></li>  
65 - <li><a href="#/brand-guidelines">品牌指导</a></li>  
66 - <li><a href="#/help">帮助中心</a></li>  
67 - <li><a target="_blank" href="#">应用接口<i class="ts_icon ts_icon_external_link small_left_margin ts_icon_inherit"></i></a></li>  
68 - <li><a href="#/account/gateways">网关设置</a></li>  
69 - </ul> 82 + <div class="vert-divider"></div>
  83 + <div class="header-team-name" id="header-team-name">
  84 + <a href="#/home">
  85 + <i class="fa fa-home"></i>
  86 + 谈华芳项目组
  87 + </a>
70 </div> 88 </div>
71 - </div>  
72 - <div class="container-hr">  
73 - <div class="head-hr z-depth-1">  
74 - <div class="menu-toggle" id="show-menu">  
75 - <span class="menu-icon fa fa-reorder"></span>  
76 - <span class="menu-label">菜单</span>  
77 - </div>  
78 - <div class="vert-divider"></div>  
79 - <div class="header-team-name" id="header-team-name">  
80 - <a href="#/home">  
81 - <i class="fa fa-home"></i>  
82 - 谈华芳项目组 89 + <div class="header-nav">
  90 + <div class="header-btns float-right">
  91 + <a id="team-switcher" href={`${__PREFIX__}signOut`}>
  92 + <i class="fa fa-sign-out"></i>
  93 + <span class="block label">退出</span>
  94 + </a>
  95 + <a id="team-switcher">
  96 + <i class="fa fa-th-large"></i>
  97 + <span class="block label">团队</span>
  98 + </a>
  99 + <a id="help-link" href="#/help">
  100 + <i class="fa fa-support"></i>
  101 + <span class="block label">帮助</span>
  102 + </a>
  103 + <a href="/chat">
  104 + <img class="photo-sm" src="imgs/touxiang.jpg">
  105 + <span class="block label">企信</span>
83 </a> 106 </a>
84 </div> 107 </div>
85 - <div class="header-nav">  
86 - <div class="header-btns float-right">  
87 - <a id="team-switcher" href="/signOut">  
88 - <i class="fa fa-sign-out"></i>  
89 - <span class="block label">退出</span>  
90 - </a>  
91 - <a id="team-switcher">  
92 - <i class="fa fa-th-large"></i>  
93 - <span class="block label">团队</span>  
94 - </a>  
95 - <a id="help-link" href="#/help">  
96 - <i class="fa fa-support"></i>  
97 - <span class="block label">帮助</span>  
98 - </a>  
99 - <a href="/chat">  
100 - <img class="photo-sm" src="imgs/touxiang.jpg" >  
101 - <span class="block label">企信</span>  
102 - </a>  
103 - </div>  
104 - </div>  
105 </div> 108 </div>
106 - <div class="content-hr">  
107 - <!-- < include forms/editor.ejs%> -->  
108 - <!-- < include forms/formOperation.ejs%> -->  
109 - <!-- < include initialization/addEmployee.ejs%> -->  
110 - <!-- < include initialization/importEmployee.ejs%> -->  
111 - <div class="content-body pt-page pt-page-current">  
112 - </div>  
113 - <div class="content-body pt-page pt-page-next">  
114 - </div>  
115 - <div class="overlay hide"></div> 109 + </div>
  110 + <div class="content-hr">
  111 + <!-- < include forms/editor.ejs%> -->
  112 + <!-- < include forms/formOperation.ejs%> -->
  113 + <!-- < include initialization/addEmployee.ejs%> -->
  114 + <!-- < include initialization/importEmployee.ejs%> -->
  115 + <div class="content-body pt-page pt-page-current">
  116 + </div>
  117 + <div class="content-body pt-page pt-page-next">
116 </div> 118 </div>
  119 + <div class="overlay hide"></div>
117 </div> 120 </div>
118 -  
119 - <script type="text/javascript">  
120 - $('#login-user-menu').click(function(e){  
121 - $('.menu-hr').removeClass("open-menu");  
122 - $('.container-hr').removeClass("open-container-menu");  
123 - $('#show-menu').removeClass("show-menu");  
124 - $('.overlay').removeClass('hide');  
125 - });  
126 - $('#show-menu').click(function(e){  
127 - if(!$('#show-menu').hasClass('show-menu')){  
128 - $('.menu-hr').addClass("open-menu");  
129 - $('.container-hr').addClass("open-container-menu");  
130 - $('#show-menu').addClass("show-menu");  
131 - $('.overlay').removeClass('hide');  
132 - }else{  
133 - $('.menu-hr').removeClass("open-menu");  
134 - $('.container-hr').removeClass("open-container-menu");  
135 - $('#show-menu').removeClass("show-menu");  
136 - $('.overlay').addClass('hide');  
137 - }  
138 - });  
139 - $('.overlay').click(function(e){  
140 - $('.menu-hr').removeClass("open-menu");  
141 - $('.container-hr').removeClass("open-container-menu");  
142 - $('#show-menu').removeClass("show-menu");  
143 - $('.overlay').addClass('hide');  
144 - });  
145 - var loader=new Loader({  
146 - routes:{  
147 - '/userInfo':userInfo,  
148 - '/formEditor':formEditor,  
149 - '/approvalEditor':approvalEditor  
150 - },  
151 - defaults:'/userInfo'  
152 - });  
153 - loader.init();  
154 - function userInfo(){  
155 - loader.import('/views/hr/userInfo.html').then(function(p){  
156 - $('.pt-page-next').html(p);  
157 - loader.page.nextPage();  
158 - });  
159 - }  
160 - function approvalEditor(){  
161 - loader.import('/views/approval/editor.html').then(function(p){  
162 - $('.pt-page-next').html(p);  
163 - loader.page.nextPage();  
164 - });  
165 - }  
166 - function formEditor(){  
167 - loader.import('/views/form/editor.html').then(function(p){  
168 - $('.pt-page-next').html(p);  
169 - loader.page.nextPage();  
170 - });  
171 - }  
172 -  
173 - </script>  
174 - </body> 121 + </div>
  122 +
  123 + <script type="text/javascript">
  124 + $('#login-user-menu').click(function (e) {
  125 + $('.menu-hr').removeClass("open-menu");
  126 + $('.container-hr').removeClass("open-container-menu");
  127 + $('#show-menu').removeClass("show-menu");
  128 + $('.overlay').removeClass('hide');
  129 + });
  130 + $('#show-menu').click(function (e) {
  131 + if (!$('#show-menu').hasClass('show-menu')) {
  132 + $('.menu-hr').addClass("open-menu");
  133 + $('.container-hr').addClass("open-container-menu");
  134 + $('#show-menu').addClass("show-menu");
  135 + $('.overlay').removeClass('hide');
  136 + } else {
  137 + $('.menu-hr').removeClass("open-menu");
  138 + $('.container-hr').removeClass("open-container-menu");
  139 + $('#show-menu').removeClass("show-menu");
  140 + $('.overlay').addClass('hide');
  141 + }
  142 + });
  143 + $('.overlay').click(function (e) {
  144 + $('.menu-hr').removeClass("open-menu");
  145 + $('.container-hr').removeClass("open-container-menu");
  146 + $('#show-menu').removeClass("show-menu");
  147 + $('.overlay').addClass('hide');
  148 + });
  149 + var loader = new Loader({
  150 + routes: {
  151 + '/userInfo': userInfo,
  152 + '/formEditor': formEditor,
  153 + '/approvalEditor': approvalEditor
  154 + },
  155 + defaults: '/userInfo'
  156 + });
  157 + loader.init();
  158 + function userInfo() {
  159 + loader.import('/views/hr/userInfo.html').then(function (p) {
  160 + $('.pt-page-next').html(p);
  161 + loader.page.nextPage();
  162 + });
  163 + }
  164 + function approvalEditor() {
  165 + loader.import('/views/approval/editor.html').then(function (p) {
  166 + $('.pt-page-next').html(p);
  167 + loader.page.nextPage();
  168 + });
  169 + }
  170 + function formEditor() {
  171 + loader.import('/views/form/editor.html').then(function (p) {
  172 + $('.pt-page-next').html(p);
  173 + loader.page.nextPage();
  174 + });
  175 + }
  176 +
  177 + </script>
  178 +</body>
  179 +
175 </html> 180 </html>
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html> 2 <html>
3 - <head>  
4 - <title></title>  
5 - <meta http-equiv="X-UA-Compatible" content="IE=10">  
6 - <meta name="csrf-token" content="<%=htmlWebpackPlugin.options.csrfToken%>">  
7 - <METAHTTP-EQUIV="Pragma"CONTENT="no-cache">  
8 - <METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache">  
9 - <METAHTTP-EQUIV="Expires"CONTENT="0">  
10 - <link rel="stylesheet" type="text/css" href="css/core.css">  
11 - <link rel="stylesheet" type="text/css" href="css/antd.min.css">  
12 - <style type="text/css">  
13 - </style>  
14 - <script src="//cdn.ronghub.com/RongIMLib-2.2.8.min.js"></script>  
15 - <script src="/js/plupload.full.min.js"></script>  
16 - <link rel="stylesheet" href="css/jquery-ui-1.10.4.custom.min.css">  
17 - <script type="text/javascript" src="/js/jquery-1.9.1.js"></script>  
18 - <script type="text/javascript" src="/js/jquery-ui-1.10.4.custom.min.js"></script>  
19 - <script type="text/javascript" src="/js/primitives.min.js"></script>  
20 - <link href="/css/primitives.latest.css" media="screen" rel="stylesheet" type="text/css">  
21 - <script type="text/javascript" src="//webapi.amap.com/maps?v=1.3&key=8cb4df3e0698fa29ccbe07db325948cc"></script>  
22 - <script src="//webapi.amap.com/ui/1.0/main.js"></script>  
23 - <script src="//gosspublic.alicdn.com/aliyun-oss-sdk-4.3.0.min.js"></script>  
24 - <script type="text/javascript" src="/js/getorgchart/getorgchart.js"></script>  
25 - <link rel="stylesheet" href="/js/getorgchart/getorgchart.css">  
26 - <script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1273424455'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s22.cnzz.com/z_stat.php%3Fid%3D1273424455%26show%3Dpic' type='text/javascript'%3E%3C/script%3E"));  
27 - </script>  
28 - </head>  
29 - <body class="bootStrapShadow">  
30 - <div id="root" class="root"></div>  
31 - <script>  
32 -  
33 - </script>  
34 - </body> 3 +
  4 +<head>
  5 + <title></title>
  6 + <meta http-equiv="X-UA-Compatible" content="IE=10">
  7 + <meta name="csrf-token" content="<%=htmlWebpackPlugin.options.csrfToken%>">
  8 + <METAHTTP-EQUIV="Pragma"CONTENT="no-cache">
  9 + <METAHTTP-EQUIV="Cache-Control"CONTENT="no-cache">
  10 + <METAHTTP-EQUIV="Expires"CONTENT="0">
  11 + <link rel="stylesheet" type="text/css" href="css/core.css">
  12 + <link rel="stylesheet" type="text/css" href="css/antd.min.css">
  13 + <style type="text/css">
  14 + </style>
  15 + <script src="//cdn.ronghub.com/RongIMLib-2.2.8.min.js"></script>
  16 + <script src="js/plupload.full.min.js"></script>
  17 + <link rel="stylesheet" href="css/jquery-ui-1.10.4.custom.min.css">
  18 + <script type="text/javascript" src="js/jquery-1.9.1.js"></script>
  19 + <script type="text/javascript" src="js/jquery-ui-1.10.4.custom.min.js"></script>
  20 + <script type="text/javascript" src="js/primitives.min.js"></script>
  21 + <link href="css/primitives.latest.css" media="screen" rel="stylesheet" type="text/css">
  22 + <script type="text/javascript" src="//webapi.amap.com/maps?v=1.3&key=8cb4df3e0698fa29ccbe07db325948cc"></script>
  23 + <script src="//webapi.amap.com/ui/1.0/main.js"></script>
  24 + <script src="//gosspublic.alicdn.com/aliyun-oss-sdk-4.3.0.min.js"></script>
  25 + <script type="text/javascript" src="js/getorgchart/getorgchart.js"></script>
  26 + <link rel="stylesheet" href="js/getorgchart/getorgchart.css">
  27 + <script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://"); document.write(unescape("%3Cspan id='cnzz_stat_icon_1273424455'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s22.cnzz.com/z_stat.php%3Fid%3D1273424455%26show%3Dpic' type='text/javascript'%3E%3C/script%3E"));
  28 + </script>
  29 +</head>
  30 +
  31 +<body class="bootStrapShadow">
  32 + <div id="root" class="root"></div>
  33 + <script>
  34 +
  35 + </script>
  36 +</body>
  37 +
35 </html> 38 </html>
  1 +<!DOCTYPE html>
  2 +<html >
  3 + <head>
  4 + <title></title>
  5 + <style>
  6 + #father {
  7 + width: 100vw;
  8 + height: 100vh;
  9 + background-color: skyblue;
  10 + position: relative;
  11 + padding: 0;
  12 + margin: 0;
  13 + }
  14 +
  15 + #son {
  16 + width: 200px;
  17 + height: 200px;
  18 + position: absolute;
  19 + left: 50%;
  20 + top: 50%;
  21 + margin-left: -100px;
  22 + margin-top: -100px;
  23 + text-align: center;
  24 + }
  25 + </style>
  26 + </head>
  27 + <body id="father">
  28 + <div id="son" >
  29 + <div>
  30 + <svg t="1562047045753" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3393" width="100" height="100" data-spm-anchor-id="a313x.7781069.0.i3"><path d="M575.986694 832.039919C575.986694 867.356032 547.316113 896.026613 512 896.026613 476.683887 896.026613 448.013306 867.356032 448.013306 832.039919 448.013306 796.723806 476.683887 768.048156 512 768.048156 547.316113 768.048156 575.986694 796.64777 575.986694 832.039919ZM512 255.997465C476.683887 255.997465 448.013306 284.668046 448.013306 319.984159L448.013306 639.998733C448.013306 675.314846 476.683887 703.990496 512 703.990496 547.316113 703.990496 575.986694 675.314846 575.986694 639.998733L575.986694 319.984159C575.986694 284.668046 547.316113 255.997465 512 255.997465ZM1023.979724 896.026613C1023.979724 966.729805 966.709529 1024.005069 896.006336 1024.005069L127.993664 1024.005069C57.290471 1024.005069 0.020276 966.658839 0.020276 896.026613 0.020276 874.868373 5.216059 854.931776 14.39105 837.311737L14.320083 837.24077 398.250384 69.304133 398.392317 69.304133C419.626593 28.133261 462.455047 0.040552 512 0.040552 561.544953 0.040552 604.373407 28.209297 625.67865 69.3751L1008.311272 834.711311C1018.348003 852.838256 1023.979724 873.783595 1023.979724 896.026613ZM959.99303 896.026613C959.99303 885.123073 957.392604 874.868373 952.191753 865.404445L951.613881 864.319667 951.112044 863.239958 568.621355 98.405584C557.499847 77.171308 535.834701 64.027246 512 64.027246 488.023365 64.027246 466.282184 77.318311 455.160675 98.765487L452.12938 104.544211 92.175714 824.527578 92.677551 825.034483 71.154339 866.778159C66.389426 875.948082 64.00697 885.842879 64.00697 896.097579 64.00697 931.413692 92.748517 960.089342 127.993664 960.089342L896.006336 960.089342C931.322449 960.013306 959.99303 931.342726 959.99303 896.026613Z" p-id="3394" fill="#f4a251"></path></svg>
  31 + </div>
  32 + <div style="margin-top: 16px;">
  33 + 登陆失败,授权码无效
  34 + </div>
  35 + </div>
  36 + </body>
  37 +</html>
@@ -339,7 +339,7 @@ @@ -339,7 +339,7 @@
339 } 339 }
340 var isWeixin = is_weixin(); 340 var isWeixin = is_weixin();
341 var winHeight = typeof window.innerHeight != 'undefined' ? window.innerHeight : document.documentElement.clientHeight; 341 var winHeight = typeof window.innerHeight != 'undefined' ? window.innerHeight : document.documentElement.clientHeight;
342 - var weixinTip = $('<div id="weixinTip"><p><img src="/img/live_weixin.png" alt="微信打开"/></p></div>'); 342 + var weixinTip = $('<div id="weixinTip"><p><img src="./img/live_weixin.png" alt="微信打开"/></p></div>');
343 343
344 if(isWeixin){ 344 if(isWeixin){
345 $("body").append(weixinTip); 345 $("body").append(weixinTip);
@@ -41,7 +41,7 @@ @@ -41,7 +41,7 @@
41 <div class="container"> 41 <div class="container">
42 <div class="row"> 42 <div class="row">
43 <div id="bgImg" class="col-lg-12 col-sm-12 col-md-12 col-xs-12 text-center"> 43 <div id="bgImg" class="col-lg-12 col-sm-12 col-md-12 col-xs-12 text-center">
44 - <img src="../img/Group.png" class="img-responsive"> 44 + <img src=".../img/Group.png" class="img-responsive">
45 </div> 45 </div>
46 </div> 46 </div>
47 <div class="row"> 47 <div class="row">
1 import React, { PropTypes } from 'react'; 1 import React, { PropTypes } from 'react';
2 import { connect } from 'react-redux'; 2 import { connect } from 'react-redux';
3 -import { Button, Tabs, Menu } from 'antd'; 3 +import { Button, Tabs, Menu, Icon } from 'antd';
4 import cx from 'classnames'; 4 import cx from 'classnames';
5 import s from './systemMenuLess.les'; 5 import s from './systemMenuLess.les';
6 import { doLogin, sendQuickLoginSmsCode } from '../redux/actions/authed'; 6 import { doLogin, sendQuickLoginSmsCode } from '../redux/actions/authed';
@@ -68,14 +68,18 @@ class SystemMenu extends React.Component { @@ -68,14 +68,18 @@ class SystemMenu extends React.Component {
68 dispatch(loadUnreadMessage()) 68 dispatch(loadUnreadMessage())
69 } 69 }
70 render() { 70 render() {
71 - let { menus, userInfo, height, width } = this.props; 71 + let { menus, userInfo, height, width, collapsed } = this.props;
72 const { user = {}, tenant = {} } = userInfo; 72 const { user = {}, tenant = {} } = userInfo;
73 - const { collapsed, active, imageUrl, userImage, logoImage, defaultSelectedKeys, defaultOpenKeys } = this.state; 73 + const { active, imageUrl, userImage, logoImage, defaultSelectedKeys, defaultOpenKeys } = this.state;
74 const renderSubMenu = (subMenus) => { 74 const renderSubMenu = (subMenus) => {
75 return subMenus.map((subMenu, i) => { 75 return subMenus.map((subMenu, i) => {
76 return ( 76 return (
77 <Menu.Item key={subMenu.module}> 77 <Menu.Item key={subMenu.module}>
78 - <span className="nav-text">{subMenu.display_name}{subMenu && subMenu.is_beta && subMenu.is_beta == 'y' && <span style={{ color: 'rgba(153, 169, 191,0.6)' }}> 试用 </span>}</span> 78 + <span>{subMenu.display_name}</span>
  79 + {
  80 + subMenu && subMenu.is_beta && subMenu.is_beta == 'y' &&
  81 + <span style={{ color: 'rgba(153, 169, 191,0.6)' }}> 试用 </span>
  82 + }
79 </Menu.Item> 83 </Menu.Item>
80 ) 84 )
81 }); 85 });
@@ -86,15 +90,22 @@ class SystemMenu extends React.Component { @@ -86,15 +90,22 @@ class SystemMenu extends React.Component {
86 if (tenant.biz_type == '0' || tenant.biz_type == '1') { 90 if (tenant.biz_type == '0' || tenant.biz_type == '1') {
87 return ( 91 return (
88 <div className={cx(s.system_menu_wrap, 'system_menu_wrap')} style={{ height: height - 160 }}> 92 <div className={cx(s.system_menu_wrap, 'system_menu_wrap')} style={{ height: height - 160 }}>
89 - <CustomScrollbars viewStyle={{ paddingRight: '10px' }} theme="white"> {/*onSelect*/}  
90 - <Menu theme="dark" mode={this.state.mode} onClick={this.changeMenu} onOpenChange={this.changeOpenSubMenu} onCollapse={this.onCollapse}  
91 - style={{ borderRight: '1px solid transparent', backgroundColor: '#0f2139' }} 93 + <CustomScrollbars viewStyle={{ paddingRight: '10px' }} theme="white">
  94 + <Menu theme="light" mode={'inline'} onClick={this.changeMenu}
  95 + inlineCollapsed={this.props.collapsed}
  96 + onOpenChange={this.changeOpenSubMenu}
  97 + style={{ borderRight: '1px solid transparent', backgroundColor: '#fff' }}
92 selectedKeys={[defaultSelectedKeys]} openKeys={[defaultOpenKeys]}> 98 selectedKeys={[defaultSelectedKeys]} openKeys={[defaultOpenKeys]}>
93 {menus && menus.map((menu, i) => { 99 {menus && menus.map((menu, i) => {
94 if (menu.children) { 100 if (menu.children) {
95 return ( 101 return (
96 <SubMenu key={menu.module} title={ 102 <SubMenu key={menu.module} title={
97 - <span><img style={{ width: '12px', marginRight: '8px', verticalAlign: 'baseline' }} src={menuIconMap[menu.module]} alt="" />{menu.display_name}</span> 103 + <span>
  104 + <img
  105 + style={{ width: '20px', position: 'relative', top: '-2px', right: '5px' }}
  106 + src={menuIconMap[menu.module]} alt="" />
  107 + <span>{collapsed ? '' : menu.display_name}</span>
  108 + </span>
98 }> 109 }>
99 {renderSubMenu(menu.children)} 110 {renderSubMenu(menu.children)}
100 </SubMenu> 111 </SubMenu>
@@ -102,13 +113,12 @@ class SystemMenu extends React.Component { @@ -102,13 +113,12 @@ class SystemMenu extends React.Component {
102 } else { 113 } else {
103 return ( 114 return (
104 <Menu.Item key={menu.module} > 115 <Menu.Item key={menu.module} >
105 - <span className="nav-text">  
106 - <img style={{ width: '12px', marginRight: '8px', verticalAlign: 'baseline' }} src={menuIconMap[menu.module]} alt="" />  
107 - {menu.display_name}  
108 - {/* {menu && menu.is_beta && menu.is_beta == 'y' && <span style={{ color: 'rgba(153, 169, 191,0.6)' }}>( 试用 )</span>} */}  
109 - {/* TODO: 先写死 */}  
110 - {menu && menu.module && menu.module == 'persontax' && <span className={cx(s.menu_new)}></span>}  
111 - </span> 116 + <img
  117 + style={{ width: '20px', position: 'relative', top: '-2px', right: '5px' }}
  118 + src={menuIconMap[menu.module]} alt="" />
  119 + <span>{menu.display_name}</span>
  120 + {/* 自然人税收 new图标 */}
  121 + {menu && menu.module && menu.module == 'persontax' && <span className={cx(s.menu_new)}></span>}
112 </Menu.Item> 122 </Menu.Item>
113 ) 123 )
114 } 124 }
  1 +import React, { PropTypes } from 'react';
  2 +import { connect } from 'react-redux';
  3 +import { Steps, Icon, Breadcrumb } from 'antd';
  4 +const Step = Steps.Step;
  5 +import cx from 'classnames';
  6 +import s from './commond.les';
  7 +
  8 +
  9 +class BreadcrumbWarp extends React.Component {
  10 + constructor(props) {
  11 + super(props);
  12 + this.state = {
  13 + }
  14 + }
  15 + static propTypes = {
  16 + crumbsData: PropTypes.array
  17 + }
  18 +
  19 + componentDidMount() {
  20 + }
  21 + componentWillReceiveProps(nextProps) {
  22 + }
  23 + componentWillUnmount() {
  24 + }
  25 + render() {
  26 + const { crumbsData = [] } = this.props;
  27 + return (
  28 + <div className={cx(s.bread_crumb_warp)}>
  29 + <span className={cx(s.bread_crumb_title)}>当前位置:</span>
  30 + <ul className={cx(s.bread_crumb_con)}>
  31 + {
  32 + crumbsData.map((data, i) => {
  33 + return (
  34 + <li onClick={() => { document.location.href = data.link }} key={i}><span className={cx(s.text)}>{data.name}</span></li>
  35 + )
  36 + })
  37 + }
  38 + </ul>
  39 + </div>
  40 + )
  41 + }
  42 +}
  43 +
  44 +export default BreadcrumbWarp;
  1 +@import "../../less/variables";
  2 +.new_steps_warp{
  3 + display :flex;
  4 + text-align:center;
  5 + position :relative;
  6 + li{
  7 + flex:1;
  8 + border-top:3px solid #efefef;
  9 + .step_warp{
  10 + .step_num{
  11 + color :#fff;
  12 + margin :16px auto 12px;
  13 + width :24px;
  14 + height :24px;
  15 + line-height :24px;
  16 + border-radius :50%;
  17 + background-color:#bcc9d4;
  18 + cursor :pointer;
  19 + }
  20 + .step_text{
  21 + font-size :14px;
  22 + color :#333;
  23 + font-weight:normal;
  24 + }
  25 + }
  26 + }
  27 + .beforeCurrent{
  28 + span:before{
  29 + content :' ';
  30 + display :block;
  31 + width :0;
  32 + border-top :3px solid #519FF0;
  33 + -webkit-transition:all .6s ease-in-out;
  34 + transition :all .6s ease-in-out;
  35 + box-shadow :0 0 0 0 #519FF0;
  36 + -webkit-animation :tailEffect .6s;
  37 + animation :tailEffect .6s;
  38 + position :relative;
  39 + top :-3px;
  40 + }
  41 + }
  42 + .current{
  43 + .step_warp{
  44 + .step_num{
  45 + background-color:#519FF0;
  46 + }
  47 + }
  48 + span:before{
  49 + content :' ';
  50 + display :block;
  51 + width :100%;
  52 + border-top :3px solid #519FF0;
  53 + -webkit-transition:all .6s ease-in-out;
  54 + transition :all .6s ease-in-out;
  55 + box-shadow :0 0 0 0 #519FF0;
  56 + -webkit-animation :tailEffect .6s;
  57 + animation :tailEffect .6s;
  58 + position :relative;
  59 + top :-3px;
  60 + }
  61 + }
  62 +}
  63 +
  64 +.new_tabs_warp{
  65 + .new_tabs_head{
  66 + display:flex;
  67 + //border :1px solid #E5E5E5;
  68 + li{
  69 + flex :1;
  70 + text-align :center;
  71 + padding :16px 0;
  72 + background-color:#f6f8fa;
  73 + font-size :14px;
  74 + a{
  75 + color : #333;
  76 + padding:0 24px 16px;
  77 + }
  78 + }
  79 + .current{
  80 + a{
  81 + color : #1089ee;
  82 + border-bottom:3px solid #519FF0;
  83 + }
  84 + }
  85 + li{
  86 + a:hover{
  87 + color:#1089ee;
  88 + }
  89 + }
  90 + }
  91 + .new_tabs_con{
  92 + padding:24px;
  93 + }
  94 +}
  95 +
  96 +.recomand_warp{
  97 + margin :32px;
  98 + padding :10px 32px;
  99 + background-color :#f8f8f8;
  100 + border-top-left-radius:10px;
  101 + border-bottom-right-radius:10px;
  102 +
  103 + .img{
  104 + width :18px;
  105 + height :auto;
  106 + margin-right :10px;
  107 + vertical-align:middle;
  108 + }
  109 + .text{
  110 + vertical-align:middle;
  111 + font-size :14px;
  112 + color :#999;
  113 + }
  114 +}
  115 +.bg_recomand_warp{
  116 + padding :12px 24px;
  117 + background-color:#fff5d5;
  118 + color :#f2942e;
  119 + border-radius :4px;
  120 +}
  121 +
  122 +.simple_tabs_warp{
  123 + .simple_tabs_head{
  124 + border-bottom :1px solid #E5E5E5;
  125 + li{
  126 + display :inline-block;
  127 + padding-bottom :16px;
  128 + font-size :14px;
  129 + a{
  130 + color :#333;
  131 + padding :0 8px 16px;
  132 + margin-right:32px;
  133 + }
  134 + }
  135 + .current{
  136 + a{
  137 + color : #1089ee;
  138 + border-bottom:2px solid #519FF0;
  139 + }
  140 + }
  141 + li{
  142 + a:hover{
  143 + color:#1089ee;
  144 + }
  145 + }
  146 + }
  147 + .simple_tabs_con{
  148 + padding:24px 0;
  149 + }
  150 + .simple_tabs_btn_head{
  151 + text-align: center;
  152 + li{
  153 + display :inline-block;
  154 + font-size:14px;
  155 + border :1px solid #E5E5E5;
  156 + a{
  157 + display:inline-block;
  158 + padding:8px 24px;
  159 + color :#333;
  160 + }
  161 + }
  162 + li{
  163 + border-right:none;
  164 + }
  165 + li:first-child{
  166 + border-top-left-radius :4px;
  167 + border-bottom-left-radius:4px;
  168 + }
  169 + li:last-child{
  170 + border-right:1px solid #E5E5E5;
  171 + border-top-right-radius :4px;
  172 + border-bottom-right-radius:4px;
  173 + }
  174 + li:hover{
  175 + border :1px solid #E5E5E5;
  176 + border-right:none;
  177 + a{
  178 + color:#1089ee;
  179 + }
  180 + }
  181 + li:last-child:hover{
  182 + border-right:1px solid #E5E5E5;
  183 + }
  184 + .current{
  185 + border :1px solid #1089ee;
  186 + border-right :none;
  187 + background-color:#1089ee;
  188 + a{
  189 + color : #fff;
  190 + }
  191 + }
  192 + .current:hover{
  193 + border : 1px solid #1089ee;
  194 + border-right :none;
  195 + a{
  196 + color : #fff;
  197 + }
  198 + }
  199 + }
  200 + .simple_tabs_bg_head{
  201 + //background-color:#f0f0f0;
  202 + border-bottom:1px solid #EDEFF2;
  203 + li{
  204 + display :inline-block;
  205 + font-size:14px;
  206 + position : relative;
  207 + -webkit-transition: all 0.4s ease-in-out 0s;
  208 + -moz-transition: all 0.4s ease-in-out 0s;
  209 + -o-transition: all 0.4s ease-in-out 0s;
  210 + -ms-transition: all 0.4s ease-in-out 0s;
  211 + a{
  212 + display:inline-block;
  213 + padding:12px 32px 14px;
  214 + color :#333;
  215 + }
  216 + }
  217 + .current{
  218 + background-color:#fff;
  219 + a{
  220 + color : #1089ee;
  221 + }
  222 + }
  223 + .current:before{
  224 + content : ' ';
  225 + border-top: 3px solid #1089ee;
  226 + transition: width 1s linear;
  227 + width : 100%;
  228 + display : inline-block;
  229 + position : absolute;
  230 + bottom : 0;
  231 + }
  232 + li:hover{
  233 + a{
  234 + color:#1089ee;
  235 + }
  236 + }
  237 + }
  238 +}
  239 +
  240 +.info_img{
  241 + width :32px;
  242 + height:32px;
  243 +}
  244 +
  245 +.map_warp{
  246 + position: relative;
  247 + .search_input_wrap{
  248 + width: 240px;
  249 + position: absolute;
  250 + z-index: 1000;
  251 + left: 5px;
  252 + top: 5px;
  253 + }
  254 +}
  255 +
  256 +.textAlign{
  257 + text-align:center;
  258 + margin:10px 0 30px 0;
  259 +}
  260 +.all_map_warp{
  261 + position: fixed;
  262 + top: 0;
  263 + left: 0;
  264 + right: 0;
  265 + bottom: 0;
  266 + z-index: 99999;
  267 + .search_input_wrap{
  268 + width: 240px;
  269 + position: absolute;
  270 + z-index: 1000;
  271 + left: 5px;
  272 + top: 5px;
  273 + }
  274 +}
  275 +.full_screen_btn{
  276 + position: absolute;
  277 + z-index: 1000;
  278 + right:16px;
  279 + top:8px;
  280 + cursor:pointer;
  281 + color: @link-color;
  282 +}
  283 +.upload_warp_style_con{
  284 + //font-size:13px;
  285 + color :#333;
  286 + .upload_warp_style{
  287 + width : 100%;
  288 + border : 1px solid #e9e9e9;
  289 + background: #F9FAFC;
  290 + .upload_file{
  291 + text-align : center;
  292 + margin : 8px;
  293 + height : 235px;
  294 + border : 1px dashed #e9e9e9;
  295 + }
  296 + .upload_file.upload_file_new{
  297 + height : 160px;
  298 + }
  299 + .request_text_warp{
  300 + padding : 24px 24px 16px;
  301 + background-color: #f9fafc;
  302 + position :relative;
  303 + .text_title{
  304 + font-weight:bold;
  305 + }
  306 + .text_con{
  307 + margin-top :8px;
  308 + color :#999;
  309 + line-height:2;
  310 + }
  311 + }
  312 + }
  313 + .upload_file_name{
  314 + margin:16px 0 0 4px;
  315 + .img{
  316 + vertical-align:middle;
  317 + }
  318 + .name{
  319 + color :#7e7e7e;
  320 + margin-left :8px;
  321 + vertical-align:middle;
  322 + }
  323 + }
  324 +}
  325 +
  326 +.info_img{
  327 + width :32px;
  328 + height:32px;
  329 +}
  330 +
  331 +.map_warp{
  332 + position: relative;
  333 + .search_input_wrap{
  334 + width: 240px;
  335 + position: absolute;
  336 + z-index: 1000;
  337 + left: 5px;
  338 + top: 5px;
  339 + }
  340 +}
  341 +.bread_crumb_warp{
  342 + font-size:14px;
  343 + color :rgba(0, 0, 0, 0.45);
  344 + background:#fff;
  345 + .bread_crumb_title{
  346 + display:inline-block;
  347 + margin-right:8px;
  348 + }
  349 + .bread_crumb_con{
  350 + display:inline-block;
  351 + li{
  352 + display:inline-block;
  353 + cursor :pointer;
  354 + }
  355 + li:hover{
  356 + .text{
  357 + color:@light-text-blue-color;
  358 + }
  359 + }
  360 + .isLink{
  361 + cursor :pointer;
  362 + &:hover{
  363 + color:@light-text-blue-color;
  364 + }
  365 + }
  366 + .notLink{
  367 + cursor :text;
  368 + &:hover{
  369 + //color:@text-blue-color;
  370 + }
  371 + }
  372 +
  373 + li:after{
  374 + content :'>';
  375 + width :24px;
  376 + margin :0 6px;
  377 + font-size:16px;
  378 + color:#999;
  379 + }
  380 + li:last-child:after{
  381 + content:' ';
  382 + }
  383 + li:last-child{
  384 + cursor:text;
  385 + color:@light-text-blue-color;
  386 + .text{
  387 + color:@light-text-blue-color;
  388 + }
  389 + }
  390 + }
  391 +}
  392 +
  393 +.mapping_excel_columns_wrp{
  394 + border :1px dashed transparent;
  395 + display :inline-block;
  396 + margin :0 8px 8px 0;
  397 + padding :2px 8px;
  398 + text-align :center;
  399 + .border_style{
  400 + display :inline-block;
  401 + border :1px dashed #d9d9d9;
  402 + border-radius:2px;
  403 + padding :2px 8px;
  404 + margin-bottom:8px;
  405 + min-width :130px;
  406 + background-color:#fff;
  407 + }
  408 +}
  409 +.mapping_excel_columns_wrp_drop{
  410 + border :1px dashed #008dff;
  411 + border-radius:2px;
  412 +}
  413 +.mapping_tag_warp{
  414 + min-width :130px;
  415 + cursor :move;
  416 + display :inline-block;
  417 + margin :0 8px 8px 0;
  418 + border :1px dashed #d9d9d9;
  419 + padding :2px 8px;
  420 + text-align :center;
  421 + background-color:#fff;
  422 + border-radius:2px;
  423 +}
  424 +
  425 +.mapping_columns_warp{
  426 + .column_title{
  427 + min-width:1000px;
  428 + margin : 8px 0 24px;
  429 + color : #1F2D3D;
  430 + .mapping_tip_warp{
  431 + min-width : 130px;
  432 + display : inline-block;
  433 + margin-left: 8px;
  434 + color : #999;
  435 + font-size : 12px;
  436 + font-weight:normal;
  437 + .tip_img{
  438 + width : 16px;
  439 + vertical-align: middle;
  440 + margin-right : 6px;
  441 + margin-top : -4px;
  442 + }
  443 + }
  444 + }
  445 + .excel_column_wrap{
  446 + max-height: 170px;
  447 + overflow: auto;
  448 + }
  449 + .excel_column_wrap,.sys_column_wrap{
  450 + border : 1px solid #efefef;
  451 + border-radius: 5px;
  452 + padding : 8px 16px;
  453 + background : #EEF4F8;
  454 + .inline_block{
  455 + display : inline-block;
  456 + text-align : center;
  457 + min-height : 47px;
  458 + margin-bottom : 13px;
  459 + vertical-align: top;
  460 + position : relative;
  461 + .drop_mapping_tag_warp{
  462 + .drop_mapping_tag{
  463 + position :relative;
  464 + min-width :130px;
  465 + cursor :move;
  466 + display :block;
  467 + border :1px dashed #d9d9d9;
  468 + padding :2px 8px;
  469 + border-radius:2px;
  470 + background-color:#fff;
  471 + .icon_style{
  472 + color :#f81d22;
  473 + position:absolute;
  474 + right :-2px;
  475 + top :-2px;
  476 + cursor :pointer;
  477 + }
  478 + }
  479 + }
  480 + }
  481 + }
  482 +}
  1 +import React, { PropTypes } from 'react';
  2 +import { connect } from 'react-redux';
  3 +import { Steps, Icon, Breadcrumb } from 'antd';
  4 +const Step = Steps.Step;
  5 +import cx from 'classnames';
  6 +import s from './commond.les';
  7 +
  8 +
  9 +class BreadcrumbWarp extends React.Component {
  10 + constructor(props) {
  11 + super(props);
  12 + this.state = {
  13 + }
  14 + }
  15 + static propTypes = {
  16 + crumbsData: PropTypes.array
  17 + }
  18 +
  19 + componentDidMount() {
  20 + }
  21 + componentWillReceiveProps(nextProps) {
  22 + }
  23 + componentWillUnmount() {
  24 + }
  25 + render() {
  26 + const { crumbsData = [] } = this.props;
  27 + return (
  28 + <div className={cx(s.bread_crumb_warp)}>
  29 + <span className={cx(s.bread_crumb_title)}>当前位置:</span>
  30 + <ul className={cx(s.bread_crumb_con)}>
  31 + {
  32 + crumbsData.map((data, i) => {
  33 + return (
  34 + <li onClick={() => { document.location.href = data.link }} key={i} className={data.isLink ? cx(s.isLink) : cx(s.notLink)}>
  35 + <span className={data.isLink ? cx(s.text) : null}>{data.name}</span>
  36 + </li>
  37 + )
  38 + })
  39 + }
  40 + </ul>
  41 + </div>
  42 + )
  43 + }
  44 +}
  45 +
  46 +export default BreadcrumbWarp;
@@ -11,6 +11,10 @@ @@ -11,6 +11,10 @@
11 height: 14px; 11 height: 14px;
12 top: -4px; 12 top: -4px;
13 left: 4px; 13 left: 4px;
14 - background: url(./img/menu_new.png) no-repeat; 14 + background: url(../img/menu_new.png) no-repeat;
15 background-size: 100% 100%; 15 background-size: 100% 100%;
  16 +}
  17 +
  18 +:global .ant-menu-inline-collapsed-tooltip {
  19 + min-width: 160px;
16 } 20 }
@@ -188,7 +188,7 @@ @@ -188,7 +188,7 @@
188 } 188 }
189 189
190 .task_node_wrap{ 190 .task_node_wrap{
191 - background: url($http+"/img/line-bg.png") repeat-y 30px 0; 191 + background: url($http+"./img/line-bg.png") repeat-y 30px 0;
192 } 192 }
193 .task_node_icon{ 193 .task_node_icon{
194 width: 30px; 194 width: 30px;
@@ -94,7 +94,7 @@ @@ -94,7 +94,7 @@
94 border-radius: 5px; 94 border-radius: 5px;
95 padding:13px 5px 10px 26px; 95 padding:13px 5px 10px 26px;
96 color: #a5a5a5; 96 color: #a5a5a5;
97 - background: url($http+"/img/icon-support.png") no-repeat 5px 50%; 97 + background: url($http+"./img/icon-support.png") no-repeat 5px 50%;
98 } 98 }
99 .ui_btn{ 99 .ui_btn{
100 cursor: pointer; 100 cursor: pointer;
@@ -42,7 +42,7 @@ class Member extends React.Component { @@ -42,7 +42,7 @@ class Member extends React.Component {
42 return( 42 return(
43 <div className={cx(s.member_token)} onClick={this.onClick}> 43 <div className={cx(s.member_token)} onClick={this.onClick}>
44 {choiceType=='multi'&&<input type="checkbox" checked={checked} onChange={this.onChange}/>} 44 {choiceType=='multi'&&<input type="checkbox" checked={checked} onChange={this.onChange}/>}
45 - <Gravatar path={imageUrl||'/img/user.jpg'} size='60'></Gravatar> 45 + <Gravatar path={imageUrl||'./img/user.jpg'} size='60'></Gravatar>
46 <div className={cx(s.member_info)}> 46 <div className={cx(s.member_info)}>
47 <div className={cx(s.member_info_item)}>{name}</div> 47 <div className={cx(s.member_info_item)}>{name}</div>
48 </div> 48 </div>
@@ -40,7 +40,7 @@ class MyList extends React.Component { @@ -40,7 +40,7 @@ class MyList extends React.Component {
40 </a> 40 </a>
41 } 41 }
42 <Member checked={false} myself={false} 42 <Member checked={false} myself={false}
43 - imageUrl='http://localhost:3001//img/user.jpg' name={item.name} uuid={item.uuid} onClick={onChoose} onChange={onChange} choiceType={choiceType}/> 43 + imageUrl='http://localhost:3001/./img/user.jpg' name={item.name} uuid={item.uuid} onClick={onChoose} onChange={onChange} choiceType={choiceType}/>
44 </div>); 44 </div>);
45 45
46 // return <div {...props}> {item.name} </div> 46 // return <div {...props}> {item.name} </div>
@@ -92,7 +92,7 @@ @@ -92,7 +92,7 @@
92 border-radius: 5px; 92 border-radius: 5px;
93 padding:13px 5px 10px 26px; 93 padding:13px 5px 10px 26px;
94 color: #a5a5a5; 94 color: #a5a5a5;
95 - background: url($http+"/img/icon-support.png") no-repeat 5px 50%; 95 + background: url($http+"./img/icon-support.png") no-repeat 5px 50%;
96 } 96 }
97 .ui_btn{ 97 .ui_btn{
98 cursor: pointer; 98 cursor: pointer;
@@ -154,7 +154,7 @@ export class RongClundWrap extends React.Component { @@ -154,7 +154,7 @@ export class RongClundWrap extends React.Component {
154 return ( 154 return (
155 <li key={i} className={cx(user.senderUserId==selecedUser?s.seleced:null)} onClick={this.selecedUser.bind(this,user)}> 155 <li key={i} className={cx(user.senderUserId==selecedUser?s.seleced:null)} onClick={this.selecedUser.bind(this,user)}>
156 <Badge count={user.count}> 156 <Badge count={user.count}>
157 - <img src="/img/招聘头像.png" alt=""/> 157 + <img src="./img/招聘头像.png" alt=""/>
158 </Badge> 158 </Badge>
159 <span>{user.name}</span> 159 <span>{user.name}</span>
160 </li> 160 </li>
@@ -180,7 +180,7 @@ export class RongClundWrap extends React.Component { @@ -180,7 +180,7 @@ export class RongClundWrap extends React.Component {
180 return ( 180 return (
181 <div className={cx(s.messages_item_wrap,s.left)} key={i}> 181 <div className={cx(s.messages_item_wrap,s.left)} key={i}>
182 <img style={{width:'24px',height:'24px',borderRadius:'50%',marginRight:'4px'}} 182 <img style={{width:'24px',height:'24px',borderRadius:'50%',marginRight:'4px'}}
183 - onError={()=>{this.setState({userImg:'/img/招聘头像.png'})}} src={userImg?userImg:`https://hropublic.oss-cn-beijing.aliyuncs.com/user_image/users/${msg.senderUserId}?t=${new Date().getTime()}`} 183 + onError={()=>{this.setState({userImg:'./img/招聘头像.png'})}} src={userImg?userImg:`https://hropublic.oss-cn-beijing.aliyuncs.com/user_image/users/${msg.senderUserId}?t=${new Date().getTime()}`}
184 alt=""/> 184 alt=""/>
185 <span className={cx(s.messages_item_body)}>{msg.content}</span> 185 <span className={cx(s.messages_item_body)}>{msg.content}</span>
186 </div> 186 </div>
@@ -422,7 +422,7 @@ class SimpEditor extends React.Component { @@ -422,7 +422,7 @@ class SimpEditor extends React.Component {
422 'alignment' 422 'alignment'
423 ], 423 ],
424 emoji: { 424 emoji: {
425 - imagePath: '/img/emoji/' 425 + imagePath: './img/emoji/'
426 }, 426 },
427 defaultImage: '/content/images/empty.png', 427 defaultImage: '/content/images/empty.png',
428 upload: { 428 upload: {
@@ -5,6 +5,7 @@ import s from './uploader.les'; @@ -5,6 +5,7 @@ import s from './uploader.les';
5 import * as fetch from '../../utils/fetch'; 5 import * as fetch from '../../utils/fetch';
6 import { getTokenForFile } from '../../utils/fileUtil'; 6 import { getTokenForFile } from '../../utils/fileUtil';
7 import { notification } from 'antd'; 7 import { notification } from 'antd';
  8 +import customer from '../../containers/customer';
8 import { extractResumeAct, analyzeCandidateResume, startAnalyze, cleanAnalyze } from '../../redux/actions/recruit'; 9 import { extractResumeAct, analyzeCandidateResume, startAnalyze, cleanAnalyze } from '../../redux/actions/recruit';
9 10
10 let max_file_size_props = "20mb" 11 let max_file_size_props = "20mb"
@@ -39,6 +40,7 @@ export class UploadWrap extends React.Component { @@ -39,6 +40,7 @@ export class UploadWrap extends React.Component {
39 keyNum: PropTypes.oneOfType([PropTypes.string, PropTypes.number]), 40 keyNum: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
40 max_file_size: PropTypes.string, 41 max_file_size: PropTypes.string,
41 maskShow: PropTypes.bool, 42 maskShow: PropTypes.bool,
  43 + completeCallBack:PropTypes.func
42 } 44 }
43 static defaultProps = { 45 static defaultProps = {
44 maxFileSize: 10, 46 maxFileSize: 10,
@@ -59,6 +61,7 @@ export class UploadWrap extends React.Component { @@ -59,6 +61,7 @@ export class UploadWrap extends React.Component {
59 errorCallBack: () => { }, 61 errorCallBack: () => { },
60 max_file_size: '20mb', 62 max_file_size: '20mb',
61 addFileName: false, 63 addFileName: false,
  64 + completeCallBack: () => {}
62 } 65 }
63 uploadBtn() { 66 uploadBtn() {
64 const self = this; 67 const self = this;
@@ -193,13 +196,13 @@ export class UploadWrap extends React.Component { @@ -193,13 +196,13 @@ export class UploadWrap extends React.Component {
193 self.props.backResult(file); 196 self.props.backResult(file);
194 }, 197 },
195 FileUploaded: function (up, file, info) { 198 FileUploaded: function (up, file, info) {
196 - 199 + // console.log('upupupupupu',up)
197 const { files = [] } = up; 200 const { files = [] } = up;
198 - console.log('filesfilesfilesfilesfiles', info, info.response); 201 + // console.log('filesfilesfilesfilesfiles', info, info.response);
199 if (info && info.response) { 202 if (info && info.response) {
200 const backInfo = JSON.parse(info.response); 203 const backInfo = JSON.parse(info.response);
201 if ('${filename}' == backInfo.name) { 204 if ('${filename}' == backInfo.name) {
202 - backInfo.name = backInfo.object.substring(backInfo.object.lastIndexOf('/') + 1); 205 + backInfo.name = backInfo.object.substring(backInfo.object.lastIndexOf('/')+1);
203 } 206 }
204 if (backInfo && backInfo.path) { 207 if (backInfo && backInfo.path) {
205 const name = backInfo.path.substring(backInfo.path.lastIndexOf('/') + 1); // '/' 换成 '.'' 208 const name = backInfo.path.substring(backInfo.path.lastIndexOf('/') + 1); // '/' 换成 '.''
@@ -210,7 +213,11 @@ export class UploadWrap extends React.Component { @@ -210,7 +213,11 @@ export class UploadWrap extends React.Component {
210 self.props.endCallBack({ 'err': 'upload fail' }); 213 self.props.endCallBack({ 'err': 'upload fail' });
211 } 214 }
212 }, 215 },
213 - UploadComplete: function (up, files) { }, 216 + UploadComplete: function (up, files) {
  217 + console.log('upupupup',up)
  218 + console.log('filesfilesfilesfiles',files)
  219 + self.props.completeCallBack()
  220 + },
214 Error: function (up, err) { 221 Error: function (up, err) {
215 222
216 // 上传过程中 如果有任何报错,将上传成功的文件保留,其余的剔除出上传队列 223 // 上传过程中 如果有任何报错,将上传成功的文件保留,其余的剔除出上传队列
  1 +import React,{PropTypes} from 'react';
  2 +import { connect } from 'react-redux';
  3 +import cx from 'classnames';
  4 +import s from './uploader.les';
  5 +import * as fetch from '../../utils/fetch';
  6 +import { getTokenForFile } from '../../utils/fileUtil';
  7 +import { notification } from 'antd';
  8 +import customer from '../../containers/customer';
  9 +
  10 +export class UploadWrap extends React.Component {
  11 + constructor(props) {
  12 + super(props);
  13 + this.removeAllFile = this.removeAllFile.bind(this);
  14 + this.removeFile = this.removeFile.bind(this);
  15 + this.upload = this.upload.bind(this);
  16 + this.transformModel = this.transformModel.bind(this);
  17 + this.state={
  18 + timeStamp:Date.parse(new Date())
  19 + }
  20 + }
  21 + static propTypes = {
  22 + type : PropTypes.string,
  23 + maxFileSize: PropTypes.number,
  24 + onChange : PropTypes.func,
  25 + backResult : PropTypes.func,
  26 + endCallBack: PropTypes.func,
  27 + autoUpload : PropTypes.bool,
  28 + style : PropTypes.object,
  29 + extra : PropTypes.object,
  30 + single : PropTypes.bool,
  31 + extension : PropTypes.bool,
  32 + useFileName: PropTypes.bool,
  33 + autoName : PropTypes.bool,
  34 + mimeTypes : PropTypes.object,
  35 + multiple : PropTypes.bool,
  36 + keyNum : PropTypes.oneOfType([ PropTypes.string,PropTypes.number ]),
  37 + max_file_size: PropTypes.string,
  38 + maskShow: PropTypes.bool,
  39 + }
  40 + static defaultProps = {
  41 + maxFileSize:10,
  42 + autoUpload :false,
  43 + single :true,
  44 + extra :{},
  45 + extension :true,
  46 + useFileName:false,
  47 + autoName :false,
  48 + multiple :false,
  49 + mimeTypes :{},
  50 + keyNum :'1',
  51 + maskShow:false,
  52 + backResult :()=>{ },
  53 + onChange :()=>{ },
  54 + endCallBack:()=>{ },
  55 + max_file_size:'10mb'
  56 + }
  57 + uploadBtn(){
  58 + const self=this;
  59 + const {only=false, type,extra,name='${filename}',extension,useFileName,autoName,multiple, customerUrl = '',}=this.props;
  60 + const maskShow = self.props.maskShow
  61 + self.props.dispatch({ type: 'MASK_SHOW', maskShow })
  62 + getTokenForFile(type,'web_upload').then(data=>{
  63 + let Name,fileName,extensionName;
  64 + if(only){
  65 + Name=name;
  66 + }else{
  67 + const last=self.uploader.files[0]['name']
  68 + const num=last.lastIndexOf('.');
  69 + const lastName=last.substring(num);
  70 + Name=name+lastName;
  71 + fileName=last;
  72 + extensionName=lastName
  73 + }
  74 + let url = autoName?data.object_path+'/'+Date.parse(new Date()):useFileName?data.object_path+'/'+fileName:extension?data.object_path+extensionName:data.object_path
  75 + if (customerUrl) {
  76 + url = customerUrl
  77 + }
  78 +
  79 + self.uploader.ossToken=data;
  80 + const optionParam = {
  81 + 'url' :'https://'+data.bucket+"."+data.domain+'/',
  82 + // 'multi_selection' : multiple,
  83 + 'multipart_params' :{
  84 + 'Filename' : Name,
  85 + OSSAccessKeyId :data.access_key_id,
  86 + key : url,
  87 + policy :data.policy,
  88 + signature :data.signature,
  89 + callback :data.callback_body,
  90 + 'x:access_token': data.callback_token,
  91 + 'x:name' : fileName,
  92 + success_action_status:'200'
  93 + }
  94 + }
  95 + if(multiple){
  96 + optionParam.multipart_params.key=data.object_path+'/${filename}';
  97 + optionParam.multipart_params['x:name']='${filename}';
  98 + optionParam.multipart_params.Filename='${filename}';
  99 + }
  100 + self.uploader.setOption(optionParam);
  101 + self.uploader.start();
  102 + }).catch(err => { throw err; });
  103 + }
  104 + upload(){
  105 + this.uploadBtn();
  106 + }
  107 + removeAllFile(files){
  108 + const self = this;
  109 + let delFiles = this.uploader.files;
  110 + if(files){
  111 + delFiles = files;
  112 + }
  113 + if(delFiles){
  114 + delFiles.map((file,i)=>{
  115 + self.uploader.removeFile(file);
  116 + })
  117 + }
  118 + }
  119 + removeFile(file){
  120 + this.uploader.removeFile(file);
  121 + }
  122 + transformModel(backInfo){
  123 + const modal = Object.assign({}, backInfo, {
  124 + "file_id" : backInfo.uuid,
  125 + "target_type": backInfo.type,
  126 + "created_by" : backInfo.resource_owner_id,
  127 + "target_id" : backInfo.InstanceId,
  128 + "type" : backInfo.mime_type
  129 + })
  130 + return backInfo;
  131 + }
  132 + componentDidUpdate(prevProps, prevState){ }
  133 + componentDidMount(){
  134 + const self=this;
  135 + const { single,keyNum,typeName,mimeTypes,max_file_size }=this.props;
  136 + const dropId=this.props.dropId || '';
  137 + const { timeStamp }=this.state;
  138 + this.uploader = new plupload.Uploader({
  139 + runtimes : 'html5,flash,silverlight,html4',
  140 + browse_button : 'selectfiles'+keyNum+timeStamp,
  141 + container : self.refs['file_uploader_wrap'],
  142 + url : '//oss.aliyuncs.com',
  143 + drop_element : dropId,//filelist 放入id 拖拽文本框的id
  144 + filters:{
  145 +
  146 + max_file_size: max_file_size,
  147 +
  148 + mime_types:mimeTypes.extensions?[
  149 + mimeTypes
  150 + ]:[]
  151 + },
  152 + init: {
  153 + PostInit: function() {
  154 +
  155 + },
  156 + FileFiltered:function(uploader,file){
  157 +
  158 + },
  159 + FilesAdded: function(up, files) {
  160 + if(up.files&&up.files.length>0&&single){
  161 + const removeFiles=up.files.slice(0,up.files.length-1);
  162 + self.props.onChange(up.files[up.files.length-1]);
  163 + self.removeAllFile(removeFiles);
  164 + }
  165 + if(self.props.autoUpload){
  166 + self.uploadBtn();
  167 + }
  168 + },
  169 + UploadProgress: function(up, file) {
  170 + self.props.backResult(file);
  171 + },
  172 + FileUploaded: function(up, file, info) {
  173 + if(info&&info.response){
  174 + const backInfo=JSON.parse(info.response);
  175 + if('${filename}'==backInfo.name){
  176 + backInfo.name=backInfo.object.substring( backInfo.object.lastIndexOf('/'));
  177 + }
  178 + if(backInfo&&backInfo.path){
  179 + const name=backInfo.path.substring(backInfo.path.lastIndexOf('/')+1); // '/' 换成 '.''
  180 + self.props.endCallBack(self.transformModel({name,...backInfo}),typeName);
  181 + }else
  182 + self.props.endCallBack(self.transformModel(backInfo),typeName);
  183 + }else{
  184 + self.props.endCallBack({'err':'upload fail'});
  185 + }
  186 + },
  187 + UploadComplete:function(up, files){ },
  188 + Error: function(up, err){
  189 + notification.error({
  190 + message: '错误提示',
  191 + description: err.code,
  192 + });
  193 + }
  194 + }
  195 + });
  196 + this.uploader.init();
  197 + plupload.FILE_SIZE_ERROR = `上传文件过大,请小于${max_file_size}。`;
  198 + }
  199 + componentWillUnmount(){
  200 + console.log("12111111111111111113")
  201 + this.uploader.destroy();
  202 + }
  203 + render(){
  204 + const { style, keyNum, max_file_size} = this.props;
  205 + const { timeStamp } = this.state;
  206 + console.log(max_file_size)
  207 + return (
  208 + <div className={cx(s.upload_wrap)} style={style} ref='file_upload_wrap' id={"selectfiles"+keyNum+timeStamp}>
  209 + {this.props.children}
  210 + </div>
  211 + )
  212 + }
  213 +}
  214 +
  215 +
  216 +
  217 +// export default UploadWrap;
  218 +const mapState = (state) => {
  219 + return {
  220 + };
  221 +}
  222 +export default connect(mapState)(UploadWrap);
@@ -45,7 +45,7 @@ export class OssImg extends React.Component { @@ -45,7 +45,7 @@ export class OssImg extends React.Component {
45 render() { 45 render() {
46 const {url,id}=this.state; 46 const {url,id}=this.state;
47 return ( 47 return (
48 - <img src={url?url:'/img/电子文件.png'} alt="电子文件"/> 48 + <img src={url?url:'./img/电子文件.png'} alt="电子文件"/>
49 ); 49 );
50 } 50 }
51 } 51 }
@@ -91,7 +91,7 @@ class MentionsInput extends React.Component { @@ -91,7 +91,7 @@ class MentionsInput extends React.Component {
91 return ( 91 return (
92 <div className={cx(s.suggestion_overlay)} ref='suggestion_overlay'> 92 <div className={cx(s.suggestion_overlay)} ref='suggestion_overlay'>
93 { fileterEmoji.map((emoji,i)=>{ 93 { fileterEmoji.map((emoji,i)=>{
94 - const url=`/img/emoji/${emoji}.png`; 94 + const url=`./img/emoji/${emoji}.png`;
95 return ( 95 return (
96 <div key={i} onClick={self.choseEmoji.bind(self,i)} className={cx(s.banner,s.contact_name,s.item,s.line,i==shiftFocus?s.active:'')}> 96 <div key={i} onClick={self.choseEmoji.bind(self,i)} className={cx(s.banner,s.contact_name,s.item,s.line,i==shiftFocus?s.active:'')}>
97 <span> 97 <span>
@@ -111,7 +111,7 @@ class MentionsInput extends React.Component { @@ -111,7 +111,7 @@ class MentionsInput extends React.Component {
111 fileterMention.map((mention,i)=>{ 111 fileterMention.map((mention,i)=>{
112 return( 112 return(
113 <div key={i} onClick={self.choseMention.bind(self,i)} className={cx(s.banner,s.contact_name,s.item,s.line,i==shiftFocus?s.active:'')}> 113 <div key={i} onClick={self.choseMention.bind(self,i)} className={cx(s.banner,s.contact_name,s.item,s.line,i==shiftFocus?s.active:'')}>
114 - <img className={cx(s.is_leading,s.avatar,s.img_circle,s.img_24)} src="/img/user.jpg" /> 114 + <img className={cx(s.is_leading,s.avatar,s.img_circle,s.img_24)} src="./img/user.jpg" />
115 <span className={cx(s.name,s.text_overflow)}>{mention.name}</span> 115 <span className={cx(s.name,s.text_overflow)}>{mention.name}</span>
116 </div> 116 </div>
117 ) 117 )
@@ -223,7 +223,7 @@ const replaceEmoji=(content='')=>{ @@ -223,7 +223,7 @@ const replaceEmoji=(content='')=>{
223 results.map((result,i)=>{ 223 results.map((result,i)=>{
224 const imgName=result.substring(1,result.lastIndexOf(":")); 224 const imgName=result.substring(1,result.lastIndexOf(":"));
225 if(allEmojiSheet.indexOf(imgName)!=-1){ 225 if(allEmojiSheet.indexOf(imgName)!=-1){
226 - const imgTag='<img class="emoji_link" src="/img/emoji/'+imgName+'.png"> </img>'; 226 + const imgTag='<img class="emoji_link" src="./img/emoji/'+imgName+'.png"> </img>';
227 backHtml=backHtml.replace(result,imgTag); 227 backHtml=backHtml.replace(result,imgTag);
228 } 228 }
229 }) 229 })
@@ -21,7 +21,7 @@ class RplyTextarea extends React.Component { @@ -21,7 +21,7 @@ class RplyTextarea extends React.Component {
21 } 21 }
22 static defaultProps={ 22 static defaultProps={
23 use:{ 23 use:{
24 - user_image:"/img/user.jpg" 24 + user_image:"./img/user.jpg"
25 } 25 }
26 } 26 }
27 changeMessage(e){ 27 changeMessage(e){
@@ -69,7 +69,7 @@ class HRHead extends React.Component { @@ -69,7 +69,7 @@ class HRHead extends React.Component {
69 window.location.href='#/user/hrboard/personal/'+userInfo.user_id; 69 window.location.href='#/user/hrboard/personal/'+userInfo.user_id;
70 } 70 }
71 goSignOut(){ 71 goSignOut(){
72 - window.location.href='/signOut'; 72 + window.location.href =`${__PREFIX__}signOut`;
73 } 73 }
74 goIntelligentPay(){ 74 goIntelligentPay(){
75 // window.location.href='#/user/hrboard/intelligentPay'; 75 // window.location.href='#/user/hrboard/intelligentPay';
@@ -135,7 +135,7 @@ class ElasticCheckboxGroupField extends React.Component { @@ -135,7 +135,7 @@ class ElasticCheckboxGroupField extends React.Component {
135 135
136 }} style={{display:'inline-block',float:'left' ,cursor:'pointer'}} > 136 }} style={{display:'inline-block',float:'left' ,cursor:'pointer'}} >
137 {/*<Icon type="plus" />*/} 137 {/*<Icon type="plus" />*/}
138 - <img src="/img/add.png" alt="" style={{ width:'46px', height:'17px'}}/> 138 + <img src="./img/add.png" alt="" style={{ width:'46px', height:'17px'}}/>
139 </div> 139 </div>
140 </Tooltip> 140 </Tooltip>
141 {showInput&&<div style={{display:'inline-block', float: 'left', marginLeft: '8px' ,marginTop: '5px'}}> 141 {showInput&&<div style={{display:'inline-block', float: 'left', marginLeft: '8px' ,marginTop: '5px'}}>
注册登录 后发表评论