2019-07-04 20:31:10 +08:00

384 lines
9.9 KiB
JavaScript

import getGameShareImage from '../../models/snoopy/GameShareImage'
import getGameInfoModel from '../../models/admin/GameInfo'
import SystemDic from '../../models/admin/SystemDic'
import ChinaArea from '../../models/snoopy/ChinaArea'
import {Router} from 'express'
import logger from '../../utils/logger'
const router = new Router()
const GameInfo = getGameInfoModel()
const GameInfoTest = getGameInfoModel('test')
const GameShareImage = getGameShareImage()
const GameShareImageTest = getGameShareImage('test')
// 获取分享型列表
router.get('/sys_dics', async (req, res, next) => {
const query = req.query
const type = query.type
const currentPage = query.currentPage || 0
const pageSize = query.pageSize || 0
const start = (currentPage - 1) * pageSize
const limit = Number(pageSize)
try {
let cfgs = []
let total = 0
if (currentPage && pageSize) {
cfgs = await SystemDic.find({type: type, deleted: false})
.select('key value')
.skip(start)
.limit(limit)
total = await SystemDic.find({
type: type,
deleted: false,
}).countDocuments()
} else {
cfgs = await SystemDic.find({type: type, deleted: false}).select(
'key value'
)
}
res.json({errcode: 0, errmsg: '', records: cfgs, total: total})
} catch (err) {
next(err)
}
})
// 获取游戏所有分享图
router.post('/list', async (req, res, next) => {
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.body.uid}-readable`) ||
req.user.permissions.includes(`${req.body.uid}-edit`) ||
req.user.permissions.includes(`${req.body.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏分享图查看权限!',
})
return
}
const body = req.body
const gameId = body.gameId
const shareType = body.shareType
const type = body.type
const isDev = body.isDev
const currentPage = body.currentPage
const pageSize = body.pageSize
const start = (currentPage - 1) * pageSize
const limit = Number(pageSize)
delete body.isDev
const GameShareImageModel = isDev ? GameShareImageTest : GameShareImage
try {
const opt = {deleted: false}
if (gameId) {
opt.game_id = gameId
}
if (shareType) {
opt.share_type = shareType
}
if (type || type === 0) {
opt.type = type
}
let records
if (currentPage && pageSize) {
records = await GameShareImageModel.find(opt)
.skip(start)
.limit(limit)
} else {
records = await GameShareImageModel.find(opt)
}
const total = await GameShareImageModel.find(opt).countDocuments()
const systemDics = await SystemDic.find({
deleted: false,
type: 'share_cfg',
})
const areas = await ChinaArea.find({deleted: false})
const map = new Map()
for (const dic of systemDics) {
if (!map.has(dic.key)) {
map.set(dic.key, dic.value)
}
}
const areaMap = new Map()
for (const area of areas) {
if (!areaMap.has(area.id)) {
areaMap.set(area.id, area.name)
}
}
for (const record of records) {
const game = await GameInfo.findOne({game_id: record.game_id})
if (game) {
record._doc.gameName = game.game_name
record._doc.typeName = map.get(record.share_type)
record._doc.areaName = areaMap.get(record.area)
}
}
res.json({errcode: 0, errmsg: '', records: records, total: total})
} catch (err) {
next(err)
}
})
// 获取单个分享图详情
router.get('/get_share', async (req, res, next) => {
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.query.uid}-readable`) ||
req.user.permissions.includes(`${req.query.uid}-edit`) ||
req.user.permissions.includes(`${req.query.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏分享图查看权限!',
})
return
}
const id = req.query.id
const game_id = req.query.game_id
const data_type = req.query.data_type
const GameShareImageModel =
data_type === 'dev' ? GameShareImageTest : GameShareImage
delete req.query.data_type
try {
const record = await GameShareImageModel.findOne({
_id: id,
game_id: game_id,
})
if (record) {
res.send({
errcode: 0,
record: record,
})
} else {
res.send({
errcode: 1,
errmsg: '分享图不存在或已删除!',
})
}
} catch (err) {
next(err)
}
})
// 保存与更新一个分享图
router.post('/save_share', async (req, res, next) => {
logger.db(req, '游戏管理', '分享图', '新增分享图')
// 权限判断
let hasPerm
if (req.body.published) {
hasPerm =
req.user.permissions.includes(`${req.body.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
} else {
hasPerm =
req.user.permissions.includes(`${req.body.uid}-edit`) ||
req.user.permissions.includes(`${req.body.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
}
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏分享图编辑权限!',
})
return
}
const body = req.body
const isDev = body.isDev
const GameShareImageModel = isDev ? GameShareImageTest : GameShareImage
delete body.uid
delete body.isDev
try {
const _id = body._id
const search = await GameShareImageModel.findById(_id)
if (search) {
// 更新
const result = await GameShareImageModel.updateOne({_id: _id}, body)
res.send({
errcode: 0,
result: result,
})
} else {
// 新建
const newShare = GameShareImageModel(body)
const result = await newShare.save()
res.send({
errcode: 0,
result: result,
})
}
} catch (err) {
next(err)
}
})
// 更新一个分享图
router.post('/update_share', async (req, res, next) => {
logger.db(req, '游戏管理', '分享图', '更新分享图')
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.body.uid}-readable`) ||
req.user.permissions.includes(`${req.body.uid}-edit`) ||
req.user.permissions.includes(`${req.body.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏分享图编辑权限!',
})
return
}
const body = req.body
const id = body._id
delete body._id
delete body.uid
try {
const search = await GameShareImage.findOne({deleted: false, _id: id})
if (search) {
const result = await GameShareImage.updateOne({_id: id}, body)
res.send({
errcode: 0,
})
} else {
res.send({
errcode: 1,
errmsg: '分享图不存在或已被删除!',
})
}
} catch (err) {
next(err)
}
})
// 删除分享图
router.post('/del_share', async (req, res, next) => {
// 权限判断
const hasPerm =
req.user.permissions.includes(`${req.body.uid}-edit`) ||
req.user.permissions.includes(`${req.body.uid}-publish`) ||
req.user.permissions.includes(`games-writeable`)
if (!hasPerm) {
res.status(403).send({
errcode: 1,
errmsg: '用户无此游戏分享图编辑权限!',
})
return
}
logger.db(req, '游戏管理', '分享图', '删除分享图')
const user = req.user
const body = req.body
const isDev = body.isDev
const GameShareImageModel = isDev ? GameShareImageTest : GameShareImage
delete body.isDev
try {
const ids = body.ids
if (!ids) {
return res.json({errcode: 101, errmsg: '未选择要删除的id'})
}
const record = await GameShareImageModel.where({_id: {$in: ids}})
.updateMany({
deleted: true,
delete_time: new Date(),
deletedBy: user.username,
})
.exec()
res.json({errcode: 0, errmsg: '', count: record.n})
} catch (err) {
next(err)
}
})
/* 保存一个新的分享型*/
router.post('/save_share_type', async (req, res, next) => {
logger.db(req, '游戏管理', '分享图', '新增分享类型')
const body = req.body
const record = body.record
const user = req.user
const type = 'share_cfg'
const id = record ? record.id : ''
try {
const cfg = await SystemDic.findOne({
type: type,
deleted: false,
key: record.key,
})
if (cfg) {
if (!id) {
return res.json({errcode: 101, errmsg: 'key已存在'})
} else {
if (cfg.id !== id) {
return res.json({errcode: 101, errmsg: 'key已存在'})
}
}
}
let val
if (record.val) {
val = record.val
} else {
val = {
title: record.title,
type: record.type,
}
}
let recordDb
if (id) {
recordDb = await SystemDic.findById(id)
} else {
recordDb = new SystemDic({
type: type,
createdBy: user.username,
})
}
recordDb.key = record.key
recordDb.value = val
recordDb.lastModifiedBy = user.username
await recordDb.save()
res.json({
errcode: 0,
errmsg: '',
record: {_id: recordDb.id, key: recordDb.key, value: recordDb.value},
})
} catch (err) {
next(err)
}
})
router.post('/delete_share_type', async (req, res, next) => {
logger.db(req, '游戏管理', '分享图', '删除分享类型')
const body = req.body
const id = body.id
const user = req.user
try {
if (!id) {
return res.json({errcode: 101, errmsg: '未指定要删除的配置项'})
}
const record = await SystemDic.findById(id)
if (!record) {
return res.json({errcode: 102, errmsg: '未找到要删除的配置项'})
}
record.deleted = true
record.delete_time = new Date()
record.lastModifiedBy = user.username
await record.save()
res.json({errcode: 0, errmsg: ''})
} catch (err) {
next(err)
}
})
export default router