setting_controller.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. 'use strict';
  2. /**
  3. *
  4. *
  5. * @author Mai
  6. * @date
  7. * @version
  8. */
  9. const officeList = require('../const/cld_office').list;
  10. const settingConst = require('../const/setting.js');
  11. const settingMenu = require('../../config/menu').settingMenu;
  12. const accountGroup = require('../const/account_group').group;
  13. module.exports = app => {
  14. class SettingController extends app.BaseController {
  15. /**
  16. * 构造函数
  17. *
  18. * @param {Object} ctx - egg全局context
  19. * @return {void}
  20. */
  21. constructor(ctx) {
  22. super(ctx);
  23. ctx.subMenu = settingMenu;
  24. }
  25. /**
  26. * 项目信息页面(Get)
  27. *
  28. * @param {Object} ctx - egg全局变量
  29. * @return {void}
  30. */
  31. async info(ctx) {
  32. try {
  33. // 获取项目数据
  34. const projectId = ctx.session.sessionProject.id;
  35. const projectData = await ctx.service.project.getDataById(projectId);
  36. if (projectData === null) {
  37. throw '没有对应的项目数据';
  38. }
  39. // 获取销售人员数据
  40. const salesmanData = await ctx.service.manager.getDataById(projectData.manager_id);
  41. // 数据规则
  42. const rule = ctx.service.project.rule('saveInfo');
  43. const jsValidator = await this.jsValidator.convert(rule).build();
  44. const officeName = officeList[salesmanData.office];
  45. const date = new Date(projectData.create_time * 1000);// 如果date为10位不需要乘1000
  46. const Y = date.getFullYear() + '-';
  47. const M = (date.getMonth() + 1 < 10 ? '0' + (date.getMonth() + 1) : date.getMonth() + 1) + '-';
  48. const D = (date.getDate() < 10 ? '0' + (date.getDate()) : date.getDate()) + ' ';
  49. const h = (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
  50. const m = (date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes()) + ':';
  51. const s = (date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds());
  52. const dateStr = Y + M + D + h + m + s;
  53. const renderData = {
  54. projectData,
  55. salesmanData,
  56. officeName,
  57. officeList,
  58. jsValidator,
  59. dateStr,
  60. };
  61. await this.layout('setting/info.ejs', renderData);
  62. } catch (error) {
  63. console.log(error);
  64. ctx.redirect('/dashboard');
  65. }
  66. }
  67. /**
  68. * 项目设置 -- 账号设置(Get)
  69. * @param ctx
  70. * @return {Promise<void>}
  71. */
  72. async user(ctx) {
  73. try {
  74. // 获取项目数据
  75. const projectId = ctx.session.sessionProject.id;
  76. const projectData = await ctx.service.project.getDataById(projectId);
  77. if (projectData === null) {
  78. throw '没有对应的项目数据';
  79. }
  80. if (ctx.session.sessionUser.is_admin === 0) {
  81. throw '没有访问权限';
  82. }
  83. // 获取数据规则
  84. // const rule = ctx.service.projectAccount.rule('updateUser');
  85. // const frontRule = ctx.helper.validateConvert(rule);
  86. // 获取项目用户列表
  87. const accountData = await ctx.service.projectAccount.getAllDataByCondition({
  88. where: { project_id: projectId },
  89. columns: ['id', 'account', 'name', 'company', 'role', 'mobile', 'telephone', 'enable', 'is_admin', 'account_group'],
  90. });
  91. const renderData = {
  92. projectData,
  93. accountData,
  94. accountGroup,
  95. // rule: JSON.stringify(frontRule),
  96. };
  97. await this.layout('setting/user.ejs', renderData, 'setting/user_modal.ejs');
  98. } catch (error) {
  99. console.log(error);
  100. ctx.redirect('/dashboard');
  101. }
  102. }
  103. /**
  104. * 项目设置 -- 账号启用和停用设置(Post)
  105. * @param ctx
  106. * @return {Promise<void>}
  107. */
  108. async userSwitch(ctx) {
  109. const responseData = {
  110. err: 0, msg: '', data: null,
  111. };
  112. try {
  113. // 获取项目数据
  114. const projectId = ctx.session.sessionProject.id;
  115. const projectData = await ctx.service.project.getDataById(projectId);
  116. if (projectData === null) {
  117. throw '没有对应的项目数据';
  118. }
  119. if (ctx.session.sessionUser.is_admin === 0) {
  120. throw '没有访问权限';
  121. }
  122. const data = JSON.parse(ctx.request.body.data);
  123. const result = await ctx.service.projectAccount.update(data, { id: data.id });
  124. if (!result) {
  125. throw '提交数据失败';
  126. }
  127. } catch (err) {
  128. this.log(err);
  129. responseData.err = 1;
  130. responseData.msg = err;
  131. }
  132. ctx.body = responseData;
  133. }
  134. /**
  135. * 项目设置 -- 账号添加(Post)
  136. * @param ctx
  137. * @return {Promise<void>}
  138. */
  139. async addUser(ctx) {
  140. const projectData = ctx.session.sessionProject;
  141. try {
  142. // 验证数据
  143. if (projectData.id === undefined) {
  144. throw '不存在对应的项目数据';
  145. }
  146. // 获取验证规则
  147. const rule = ctx.service.projectAccount.rule('add');
  148. ctx.validate(rule);
  149. const result = await ctx.service.projectAccount.save(ctx.request.body);
  150. if (!result) {
  151. throw '保存账号数据失败';
  152. }
  153. this.setMessage('保存账号数据成功', this.messageType.SUCCESS);
  154. ctx.redirect('/' + ctx.controllerName + '/user');
  155. } catch (error) {
  156. console.log(error);
  157. this.setMessage(error.toString(), this.messageType.ERROR);
  158. ctx.redirect(ctx.request.headers.referer);
  159. }
  160. }
  161. /**
  162. * 项目设置 -- 账号编辑(Post)
  163. * @param ctx
  164. * @return {Promise<void>}
  165. */
  166. async updateUser(ctx) {
  167. const projectData = ctx.session.sessionProject;
  168. try {
  169. // 验证数据
  170. if (projectData.id === undefined) {
  171. throw '不存在对应的项目数据';
  172. }
  173. // 获取验证规则
  174. const rule = ctx.service.projectAccount.rule('modify');
  175. ctx.validate(rule);
  176. const result = await ctx.service.projectAccount.save(ctx.request.body);
  177. if (!result) {
  178. throw '保存账号数据失败';
  179. }
  180. this.setMessage('保存账号数据成功', this.messageType.SUCCESS);
  181. ctx.redirect('/' + ctx.controllerName + '/user');
  182. } catch (error) {
  183. console.log(error);
  184. this.setMessage(error.toString(), this.messageType.ERROR);
  185. ctx.redirect(ctx.request.headers.referer);
  186. }
  187. }
  188. async resetUserPassword(ctx) {
  189. const response = {
  190. err: 0,
  191. msg: '',
  192. };
  193. try {
  194. // 获取项目数据
  195. const projectId = ctx.session.sessionProject.id;
  196. const projectData = await ctx.service.project.getDataById(projectId);
  197. if (projectData === null) {
  198. throw '没有对应的项目数据';
  199. }
  200. if (ctx.session.sessionUser.is_admin === 0) {
  201. throw '没有访问权限';
  202. }
  203. const accountId = parseInt(ctx.request.body.id);
  204. let password = ctx.request.body.reset_password;
  205. password = password.toString();
  206. if (isNaN(accountId) || accountId <= 0 || password.length < 6) {
  207. throw '参数错误';
  208. }
  209. const result = await ctx.service.projectAccount.resetPassword(accountId, password);
  210. if (!result) {
  211. throw '重置密码失败!';
  212. }
  213. } catch (error) {
  214. response.err = 1;
  215. response.msg = error;
  216. }
  217. ctx.body = response;
  218. }
  219. /**
  220. * 项目设置 -- 自定义标段分类(Get)
  221. *
  222. * @param ctx
  223. * @return {Promise<void>}
  224. */
  225. async category(ctx) {
  226. try {
  227. // 获取项目数据
  228. const projectId = ctx.session.sessionProject.id;
  229. const projectData = await ctx.service.project.getDataById(projectId);
  230. if (projectData === null) {
  231. throw '没有对应的项目数据';
  232. }
  233. if (ctx.session.sessionUser.is_admin === 0) {
  234. throw '没有访问权限';
  235. }
  236. const categoryData = await ctx.service.category.getAllCategory(projectId);
  237. const tenderData = await ctx.service.tender.getList();
  238. const renderData = {
  239. projectData,
  240. categoryType: settingConst.cType,
  241. categoryData,
  242. tenderData,
  243. };
  244. await this.layout('setting/category.ejs', renderData, 'setting/category_modal.ejs');
  245. } catch (error) {
  246. console.log(error);
  247. ctx.redirect('/dashboard');
  248. }
  249. }
  250. /**
  251. * 新增分类(Ajax)
  252. *
  253. * @param ctx
  254. * @return {Promise<void>}
  255. */
  256. async addCategory(ctx) {
  257. try {
  258. const projectId = ctx.session.sessionProject.id;
  259. const responseData = {
  260. err: 0, msg: '', data: null,
  261. };
  262. const data = JSON.parse(ctx.request.body.data);
  263. if (!data.name || !data.type) {
  264. throw '提交数据错误';
  265. }
  266. responseData.data = await ctx.service.category.addCategory(projectId, data.name, data.type);
  267. ctx.body = responseData;
  268. } catch (err) {
  269. this.log(err);
  270. ctx.body = { err: 1, msg: err.toString(), data: null };
  271. }
  272. }
  273. /**
  274. * 编辑分类(Ajax)
  275. *
  276. * @param ctx
  277. * @return {Promise<void>}
  278. */
  279. async updateCategory(ctx) {
  280. try {
  281. const projectId = ctx.session.sessionProject.id;
  282. const responseData = { err: 0, msg: '', data: null };
  283. const data = JSON.parse(ctx.request.body.data);
  284. if (!data.id) {
  285. throw '提交数据错误';
  286. }
  287. if (data.name) {
  288. const count = await ctx.service.category.count({ pid: projectId, name: data.name });
  289. if (count >= 1) {
  290. throw '存在同名类别';
  291. }
  292. }
  293. const result = await ctx.service.category.update(data, { id: data.id });
  294. if (!result) {
  295. throw '提交数据失败';
  296. }
  297. responseData.data = await ctx.service.category.getCategory(data.id);
  298. ctx.body = responseData;
  299. } catch (err) {
  300. this.log(err);
  301. ctx.body = { err: 1, msg: err.toString(), data: null };
  302. }
  303. }
  304. async setCategoryValue(ctx) {
  305. try {
  306. const responseData = { err: 0, msg: '', data: {} };
  307. const data = JSON.parse(ctx.request.body.data);
  308. if (!data.id) {
  309. throw '提交数据错误';
  310. }
  311. await ctx.service.categoryValue.setCategoryValue(data.id, data.updateValue);
  312. responseData.data.category = await ctx.service.category.getCategory(data.id);
  313. responseData.data.tenders = await ctx.service.tender.getList();
  314. ctx.body = responseData;
  315. } catch (err) {
  316. this.log(err);
  317. ctx.body = { err: 1, msg: err instanceof String ? err : '提交数据失败', data: null };
  318. }
  319. }
  320. /**
  321. * 删除分类(Ajax)
  322. *
  323. * @param ctx
  324. * @return {Promise<void>}
  325. */
  326. async deleteCategory(ctx) {
  327. try {
  328. const projectId = ctx.session.sessionProject.id;
  329. const responseData = {
  330. err: 0, msg: '', data: null,
  331. };
  332. const data = JSON.parse(ctx.request.body.data);
  333. if (!data.id) {
  334. throw '提交数据错误';
  335. }
  336. await ctx.service.category.deleteCategory(projectId, data.id);
  337. ctx.body = responseData;
  338. } catch (err) {
  339. this.log(err);
  340. ctx.body = { err: 1, msg: err.toString(), data: null };
  341. }
  342. }
  343. /**
  344. * 调整分类层次排序(Ajax)
  345. *
  346. * @param ctx
  347. * @return {Promise<void>}
  348. */
  349. async resetCategoryLevel(ctx) {
  350. try {
  351. const projectId = ctx.session.sessionProject.id;
  352. const responseData = {
  353. err: 0, msg: '', data: null,
  354. };
  355. const data = JSON.parse(ctx.request.body.data);
  356. await ctx.service.category.resetCategoryLevel(data);
  357. responseData.data = await ctx.service.category.getAllCategory(projectId);
  358. ctx.body = responseData;
  359. } catch (err) {
  360. this.log(err);
  361. ctx.body = { err: 1, msg: err.toString(), data: null };
  362. }
  363. }
  364. /** update porject info
  365. * @author wangfeng
  366. * @date 2018-10-12 15:48:05
  367. * @param ctx
  368. * @return {Promise<void>}
  369. */
  370. async updateinfo(ctx) {
  371. try {
  372. const projectId = ctx.params.id;
  373. const responseData = {
  374. err: 0, msg: '', data: null,
  375. };
  376. const conditionData = {
  377. id: projectId,
  378. };
  379. const data = ctx.request.body;
  380. const result = await ctx.service.project.update(data, conditionData);
  381. if (!result) {
  382. throw '提交数据失败';
  383. }
  384. ctx.redirect('/setting/info');
  385. } catch (err) {
  386. this.log(err);
  387. ctx.body = { err: 1, msg: err.toString(), data: null };
  388. }
  389. }
  390. /**
  391. * 检测账户是否存在
  392. *
  393. * @param {Object} ctx -egg全局变量
  394. * @return {void}
  395. */
  396. async accountExist(ctx) {
  397. const projectData = ctx.session.sessionProject;
  398. const responseData = {
  399. err: 0, msg: '', data: null,
  400. };
  401. try {
  402. const data = JSON.parse(ctx.request.body.data);
  403. const account = data.account;
  404. if (projectData.id === undefined) {
  405. throw '不存在对应项目';
  406. }
  407. responseData.data = await ctx.service.projectAccount.isAccountExist(account, projectData.id);
  408. ctx.body = responseData;
  409. } catch (error) {
  410. ctx.body = { err: 1, msg: error.toString(), data: null };
  411. }
  412. }
  413. }
  414. return SettingController;
  415. };