修改分页没有正确返回的bug

This commit is contained in:
zhl 2021-04-23 17:31:57 +08:00
parent 0634527146
commit 95ba758bc0
11 changed files with 2590 additions and 17 deletions

View File

@ -36,6 +36,7 @@
"mongoose": "5.10.3", "mongoose": "5.10.3",
"mongoose-findorcreate": "^3.0.0", "mongoose-findorcreate": "^3.0.0",
"qrcode": "^1.4.4", "qrcode": "^1.4.4",
"reflect-metadata": "^0.1.13",
"svg-captcha": "^1.4.0", "svg-captcha": "^1.4.0",
"tracer": "^1.0.3", "tracer": "^1.0.3",
"urlencode": "^1.1.0", "urlencode": "^1.1.0",

View File

@ -8,8 +8,8 @@ export class ArticleController extends BaseController {
@permission('article:read') @permission('article:read')
@router('post /articles') @router('post /articles')
async query(req: any) { async query(req: any) {
let { start, limit } = req.params let { start, limit, page} = req.params
start = +start || 0 start = +start || +page || 0
limit = +limit || 10 limit = +limit || 10
let { opt, sort } = Article.parseQueryParam(req.params) let { opt, sort } = Article.parseQueryParam(req.params)
let articles = await Article.find(opt) let articles = await Article.find(opt)

View File

@ -7,8 +7,8 @@ class CouponController extends BaseController{
@permission('coupon:read') @permission('coupon:read')
@router('post /coupons') @router('post /coupons')
async list(req, res) { async list(req, res) {
let { start, limit } = req.params let { start, limit, page } = req.params
start = +start || 0 start = +start || +page || 0
limit = +limit || 10 limit = +limit || 10
let { opt, sort } = Coupon.parseQueryParam(req.params) let { opt, sort } = Coupon.parseQueryParam(req.params)
let articles = await Coupon.find(opt) let articles = await Coupon.find(opt)

View File

@ -7,8 +7,8 @@ class GameController extends BaseController{
@permission('game:read') @permission('game:read')
@router('post /games') @router('post /games')
async list(req, res) { async list(req, res) {
let { start, limit } = req.params let { start, limit, page } = req.params
start = +start || 0 start = +start || +page || 0
limit = +limit || 10 limit = +limit || 10
let { opt, sort } = Game.parseQueryParam(req.params) let { opt, sort } = Game.parseQueryParam(req.params)
let articles = await Game.find(opt) let articles = await Game.find(opt)

View File

@ -3,13 +3,14 @@ import BaseController from '../../common/base.controller'
import { permission, router } from '../../decorators/router' import { permission, router } from '../../decorators/router'
import { ZError } from '../../common/ZError' import { ZError } from '../../common/ZError'
import { Puzzle } from '../../models/content/Puzzle' import { Puzzle } from '../../models/content/Puzzle'
import { PuzzleCategory } from '../../models/content/PuzzleCategory'
class PuzzleController extends BaseController{ class PuzzleController extends BaseController{
@permission('puzzle:read') @permission('puzzle:read')
@router('post /puzzles') @router('post /puzzles')
async list(req, res) { async list(req, res) {
let { start, limit } = req.params let { start, limit, page } = req.params
start = +start || 0 start = +start || +page || 0
limit = +limit || 10 limit = +limit || 10
let { opt, sort } = Puzzle.parseQueryParam(req.params) let { opt, sort } = Puzzle.parseQueryParam(req.params)
let articles = await Puzzle.find(opt) let articles = await Puzzle.find(opt)
@ -18,8 +19,19 @@ class PuzzleController extends BaseController{
.limit(limit) .limit(limit)
let count = await Puzzle.count(opt) let count = await Puzzle.count(opt)
let records = [] let records = []
let cateMap = await PuzzleCategory.allCateMap()
for (let record of articles) { for (let record of articles) {
records.push(record.toJson()) let data = record.toJson()
let category = ''
if (record.tag && cateMap.has(record.tag)) {
category += cateMap.get(record.tag)
}
if (record.sub_tag && cateMap.has(record.sub_tag)) {
category += ' - '
category += cateMap.get(record.sub_tag)
}
data.category = category
records.push(data)
} }
return { return {
total: count, total: count,

View File

@ -9,8 +9,8 @@ class ShopController extends BaseController {
@role('admin') @role('admin')
@router('post /shops') @router('post /shops')
async shopList(req, res) { async shopList(req, res) {
let { start, limit } = req.params let { start, limit, page } = req.params
start = +start || 0 start = +start || +page || 0
limit = +limit || 10 limit = +limit || 10
let { opt, sort } = Shop.parseQueryParam(req.params) let { opt, sort } = Shop.parseQueryParam(req.params)
let articles = await Shop.find(opt) let articles = await Shop.find(opt)

View File

@ -1,8 +1,9 @@
import 'reflect-metadata' import 'reflect-metadata'
const noJsonMetadataKey = Symbol('nojson') const noJsonMetadataKey = ('noJsonSet')
/** /**
*
* toJson方法输出的字段上加上 @noJson * toJson方法输出的字段上加上 @noJson
* @return {{(target: Function): void, (target: Object, propertyKey: (string | symbol)): void}} * @return {{(target: Function): void, (target: Object, propertyKey: (string | symbol)): void}}
*/ */
@ -12,5 +13,6 @@ export function noJson() {
export function checkJson(target: any, propertyKey: string) { export function checkJson(target: any, propertyKey: string) {
let val = Reflect.getMetadata(noJsonMetadataKey, target, propertyKey) let val = Reflect.getMetadata(noJsonMetadataKey, target, propertyKey)
let s = Reflect.getMetadata('typegoose:properties', target, propertyKey)
return !val return !val
} }

View File

@ -13,6 +13,8 @@ const saveExcludeKeys = ['createdAt', 'updatedAt', '__v', '_id']
@plugin(findOrCreate) @plugin(findOrCreate)
export abstract class BaseModule extends FindOrCreate { export abstract class BaseModule extends FindOrCreate {
static db: Connection static db: Connection
static noJsonSet: Set<string> = new Set()
public updateFromReq(data: any) { public updateFromReq(data: any) {
for (let key in data) { for (let key in data) {
@ -24,8 +26,9 @@ export abstract class BaseModule extends FindOrCreate {
public toJson() { public toJson() {
let result: any = {} let result: any = {}
for (let key in this) { // @ts-ignore
if (checkJson(this, key+'' ) && jsonExcludeKeys.indexOf(key) == -1) { for (let key in this._doc) {
if (jsonExcludeKeys.indexOf(key) == -1) {
result[key] = this[key] result[key] = this[key]
} }
} }

View File

@ -49,14 +49,25 @@ class PuzzleClass extends BaseModule {
public tag: string public tag: string
@prop() @prop()
public subtag: string public sub_tag: string
@prop()
public createtime: Date
public static parseQueryParam(params) { public static parseQueryParam(params) {
let {key, timeBegin, timeEnd } = params let {key, timeBegin, timeEnd, tag, sub_tag, groups } = params
let opt: any = {deleted: 0, is_hide: 0} let opt: any = {deleted: 0, is_hide: 0}
if (key) { if (key) {
opt.question = {$regex: key, $options: 'i'} opt.question = {$regex: key, $options: 'i'}
} }
if (tag) {
opt.tag = tag
}
if (sub_tag) {
opt.sub_tag = sub_tag
}
if (groups) {
Object.assign(opt, {groups})
}
if (timeBegin && !timeEnd) { if (timeBegin && !timeEnd) {
opt.createtime = {$gte: timeBegin}; opt.createtime = {$gte: timeBegin};
} else if (timeBegin && timeEnd) { } else if (timeBegin && timeEnd) {

View File

@ -1,5 +1,10 @@
import { dbconn } from '../../decorators/dbconn' import { dbconn } from '../../decorators/dbconn'
import { getModelForClass, modelOptions, prop } from '@typegoose/typegoose' import {
getModelForClass,
modelOptions,
prop,
ReturnModelType
} from '@typegoose/typegoose'
import { BaseModule } from '../Base' import { BaseModule } from '../Base'
class SubType { class SubType {
@ -21,6 +26,18 @@ class PuzzleCategoryClass extends BaseModule {
@prop({type: () => [SubType]}) @prop({type: () => [SubType]})
public children: SubType[] public children: SubType[]
public static async allCateMap(this: ReturnModelType<typeof PuzzleCategoryClass>) {
let result: Map<string, string> = new Map()
let records = await this.find({}).exec()
for (let record of records) {
result.set(record._id, record.name)
for (let sub of record.children) {
result.set(sub._id, sub.name)
}
}
return result
}
} }
export const PuzzleCategory = getModelForClass(PuzzleCategoryClass, { existingConnection: PuzzleCategoryClass.db }) export const PuzzleCategory = getModelForClass(PuzzleCategoryClass, { existingConnection: PuzzleCategoryClass.db })

2527
yarn.lock Normal file

File diff suppressed because it is too large Load Diff