clue.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. const { Op } = require('sequelize');
  2. const moment = require('moment');
  3. const express = require('express');
  4. const _ = require('lodash');
  5. const { query, body } = require('express-validator');
  6. const { onSuccess, fill } = require('../../../utils');
  7. const { limit } = require('../../config');
  8. const check = require('../../../middleware/check');
  9. const Clue = require('../../../db/models/clue');
  10. const Admin = require('../../../db/models/admin');
  11. const router = express.Router();
  12. async function fillSingle(data) {
  13. if (data) {
  14. const { adminId } = data;
  15. if (data) {
  16. const aItem = await Admin.findOne({ where: { id: adminId } });
  17. aItem && (data.adminName = aItem.name);
  18. }
  19. }
  20. return data;
  21. }
  22. /**
  23. * showdoc
  24. * @catalog v1/后台/联系和咨询
  25. * @title 联系和咨询列表
  26. * @description 联系和咨询列表接口
  27. * @method GET
  28. * @url /master/clue/
  29. * @param page 0 Int 页码: 不传默认取第1页数据,每页20条数据
  30. * @param type 1 integer 1联系我们2预约咨询
  31. * @param isContact 0 integer 是否联系0未联系1联系
  32. * @param stime 0 string 开始时间
  33. * @param etime 0 string 结束时间
  34. * @return {"code":0, "count":1, "data": []}
  35. * @return_param id integer id
  36. * @return_param name string 联系人
  37. * @return_param phone string 手机号
  38. * @return_param email string 邮箱
  39. * @return_param content string 内容
  40. * @return_param adminId integer 管理员ID
  41. * @return_param type tinyint 1联系我们2预约咨询
  42. * @return_param isContact tinyint 是否联系0未联系1联系
  43. * @return_param busName string 账号名
  44. * @return_param busCompany string 账号公司
  45. * @return_param adminName string 管理员名称
  46. * @return_param createdAt date -
  47. * @return_param updatedAt date -
  48. * @remark
  49. * @number
  50. */
  51. router.get('/', async (req, res) => {
  52. const { page = 0, stime, etime } = req.query;
  53. const where = _.omit(req.query, ['page', 'stime', 'etime']);
  54. const info = onSuccess();
  55. stime &&
  56. etime &&
  57. (where.createdAt = {
  58. [Op.gte]: moment(stime).startOf('day'),
  59. [Op.lte]: moment(etime).endOf('day'),
  60. });
  61. info.data = await Clue.findAll({ where, limit, offset: page * limit });
  62. info.data = await fill(info.data, fillSingle);
  63. if (!page) {
  64. info.count = await Clue.count({ where });
  65. }
  66. res.send(info);
  67. });
  68. /**
  69. * showdoc
  70. * @catalog v1/后台/联系和咨询
  71. * @title 联系和咨询详情
  72. * @description
  73. * @method GET
  74. * @url /master/clue/:id
  75. * @param :id 1 STRING 详情ID
  76. * @return {"code":0, "data": {}}
  77. * @return_param id integer id
  78. * @return_param name string 联系人
  79. * @return_param phone string 手机号
  80. * @return_param email string 邮箱
  81. * @return_param content string 内容
  82. * @return_param adminId integer 管理员ID
  83. * @return_param type tinyint 1联系我们2预约咨询
  84. * @return_param isContact tinyint 是否联系0未联系1联系
  85. * @return_param busName string 账号名
  86. * @return_param busCompany string 账号公司
  87. * @return_param adminName string 管理员名称
  88. * @return_param createdAt date -
  89. * @return_param updatedAt date -
  90. * @remark
  91. * @number
  92. */
  93. router.get('/:id', async (req, res) => {
  94. let data = await Clue.findOne({ where: req.params });
  95. data = await fill(data, fillSingle);
  96. res.send(onSuccess(data));
  97. });
  98. /**
  99. * showdoc
  100. * @catalog v1/后台/联系和咨询
  101. * @title 联系和咨询修改
  102. * @description 操作修改
  103. * @method PUT
  104. * @url /master/clue/:id
  105. * @param :id 1 STRING 详情ID
  106. * @param isContact 1 tinyint 是否联系0未联系1联系
  107. * @return {"code":0, "msg": "修改成功"}
  108. * @remark
  109. * @number
  110. */
  111. router.put('/:id', check([body(['isContact']).notEmpty()]), async (req, res) => {
  112. req.body.adminId = req.admin.id;
  113. const data = await Clue.update(_.pick(req.body, ['isContact', 'adminId']), {
  114. where: req.params,
  115. limit: 1,
  116. });
  117. res.send(onSuccess(null, '修改成功'));
  118. });
  119. module.exports = router;