文章目录
focus.schema => focus.service => interface
一、轮播图的增删改查
1.增加
1.controller
@Get('add')
@Render('admin/focus/add')
add() {
return {};
}
@Post('doAdd')
@UseInterceptors(FileInterceptor('focus_img'))
async doAdd(@Body() body, @UploadedFile() file, @Response() res) {
let saveDir = this.toolsService.uploadFile(file);
// 将图片地址放入body体中
Object.assign(body, { focus_img: saveDir });
await this.focusService.add(body)
this.toolsService.success(res, `/${Config.adminPath}/focus`)
}
2.页面
<form action="/<%=config.adminPath%>/focus/doAdd" method="post" enctype="multipart/form-data">
<ul>
<li> 分 类:
<select name="type" id="type">
<option value="1">网站</option>
<option value="2">APP</option>
<option value="3">小程序</option>
</select>
</li>
<li> 名 称: <input type="text" name="title"/></li>
<li> 跳转地址: <input type="text" name="link"/></li>
<li> 轮 播 图: <input type="file" name="focus_img"/></li>
<li> 排 序: <input type="text" name="sort" value="1000"/></li>
<li> 状 态:
<input type="radio" name="status" checked value="1" id="a"/><label for="a">显示</label>
<input type="radio" name="status" value="0" id="b"/><label for="b">隐藏</label>
</li>
<li>
<button type="submit" class="btn btn-primary">提交</button>
</li>
</ul>
</form>
2.查询展示
1.controller
@Get()
@Render('admin/focus/index')
async index() {
let result = await this.focusService.find();
return { focusList: result };
}
2.页面
<table class="table table-bordered">
<thead>
<tr class="th">
<th>名称</th>
<th>分类</th>
<th>图片</th>
<th>跳转地址</th>
<th>状态</th>
<th class="text-center">操作</th>
</tr>
</thead>
<tbody>
<%for(var i=0;i< focusList.length; i++){%>
<tr>
<td><%=focusList[i].title%></td>
<td><%=focusList[i].type%></td>
<td>
<img src="/<%=focusList[i].focus_img%>" alt="" width="80">
</td>
<td><%=focusList[i].link%></td>
<td><%=focusList[i].status%></td>
<td class="text-center">
<a href="/<%=config.adminPath%>/focus/edit?_id=<%=focusList[i]._id%>">修改</a>
<a class="delete" href="/<%=config.adminPath%>/focus/delete?_id=<%=focusList[i]._id%>">删除</a>
</td>
</tr>
<%}%>
</tbody>
</table>
3.修改
1.controller
@Get('edit')
@Render('admin/focus/edit')
async edit(@Query() query) {
let result = await this.focusService.find({ _id: query._id });
return { focus: result[0] }
}
@Post('doEdit')
@UseInterceptors(FileInterceptor('focus_img'))
async doEdit(@Body() body, @UploadedFile() file, @Response() res) {
let _id = body._id
if(file) {
let saveDir = this.toolsService.uploadFile(file);
Object.assign(body, { focus_img: saveDir });
await this.focusService.update({_id:_id}, body);
}else {
await this.focusService.update({_id:_id}, body);
}
this.toolsService.success(res, `/${Config.adminPath}/focus`)
}
2.页面
<form action="/<%=config.adminPath%>/focus/doEdit" method="post" enctype="multipart/form-data">
<ul>
<input type="hidden" name="_id" value="<%=focus._id%>"
<li> 分 类:
<select name="type" id="type">
<option value="1" <%if(focus.type==1){%> selected <%}%> >网站</option>
<option value="2" <%if(focus.type==2){%> selected <%}%> >APP</option>
<option value="3" <%if(focus.type==3){%> selected <%}%> >小程序</option>
</select>
</li>
<li> 名 称: <input type="text" name="title" value="<%=focus.title%>"/></li>
<li> 跳转地址: <input type="text" name="link" value="<%=focus.link%>"/></li>
<li> 轮 播 图: <input type="file" name="focus_img" value="<%=focus.focus_img%>"/></li>
<br>
<img src="/<%=focus.focus_img%>" alt="" width="80">
<li> 排 序: <input type="text" name="sort" value="<%=focus.sort%>"/></li>
<li> 状 态:
<input type="radio" name="status" <%if(focus.status==1){%> checked <%}%> value="1" id="a"/><label for="a">显示</label>
<input type="radio" name="status" <%if(focus.status==0){%> checked <%}%> value="0" id="b"/><label for="b">隐藏</label>
</li>
<li>
<button type="submit" class="btn btn-primary">提交</button>
</li>
</ul>
</form>
4.删除
1.controller
@Get('delete')
async delete(@Query() query, @Response() res) {
await this.focusService.delete({_id: query._id});
this.toolsService.success(res, `/${Config.adminPath}/focus`)
}
2.页面
<a class="delete" href="/<%=config.adminPath%>/focus/delete?_id=<%=focusList[i]._id%>">删除</a>
二、完整版
1.完整版的module
import { Module } from '@nestjs/common';
// 控制器
import { MainController } from './main/main.controller';
import { LoginController } from './login/login.controller';
import { ManagerController } from './manager/manager.controller';
import { RoleController } from './role/role.controller';
import { AccessController } from './access/access.controller';
import { FocusController } from './focus/focus.controller';
// 配置schema
import { MongooseModule } from '@nestjs/mongoose';
import { AdminSchema } from '../../schema/admin.schema';
import { RoleSchema } from '../../schema/role.schema';
import { AccessScheme } from '../../schema/access.schema';
import { RoleAccessSchema } from '../../schema/role_access.schema';
import { FocusSchema } from '../../schema/focus.schema';
// 引入服务
import { ToolsService } from '../../service/tools/tools.service';
import { AdminService } from '../../service/admin/admin.service'
import { RoleService } from '../../service/role/role.service';
import { AccessService } from '../../service/access/access.service';
import { RoleAccessService } from '../../service/role-access/role-access.service';
import { FocusService } from '../../service/focus/focus.service';
@Module({
imports: [
MongooseModule.forFeature([
{ name: "Admin", schema: AdminSchema, collection: 'admin' },
{ name: "Role", schema: RoleSchema, collection: 'role' },
{ name: "Access", schema: AccessScheme, collection: 'access' },
{ name: "RoleAccess", schema: RoleAccessSchema, collection: 'role_access' }, //角色权限schema
{ name: "Focus", schema: FocusSchema, collection: 'focus' },
])
],
controllers: [MainController, LoginController, ManagerController, RoleController, AccessController, FocusController],
providers: [ToolsService, AdminService, RoleService, AccessService, RoleAccessService, FocusService],
exports: [AdminService, RoleService, AccessService, RoleAccessService]
})
export class AdminModule { }
2. 完整版的schema
import * as mongoose from 'mongoose';
const Schema = mongoose.Schema;
const d = new Date();
export const FocusSchema = new mongoose.Schema({
title: { type: String },
type: { type: Number },
focus_img: { type: String },
link: { type: String },
sort: { type: Number },
status: { type: Number, default: 1 },
add_time: {
type: Number,
default: d.getTime()
},
})
3.完整版的service
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { FocusInterface } from '../../interface/focus.interface'
@Injectable()
export class FocusService {
constructor(@InjectModel('Focus') private focusModel) { }
async find(json: FocusInterface = {}) {
let result = await this.focusModel.find(json);
return result;
}
async add(json: FocusInterface) {
let role = new this.focusModel(json);
let result = await role.save();
return result;
}
async update(json1: FocusInterface, json2: FocusInterface) {
let result = await this.focusModel.updateOne(json1, json2);
return result;
}
async delete(json: FocusInterface) {
let result = await this.focusModel.deleteOne(json);
return result;
}
getModel() {
return this.focusModel
}
}
4.完整版的interface
export interface FocusInterface {
_id?: String;
title?: String;
type?: Number;
focus_img?: String;
link?: String;
sort?: Number;
status?: Number;
add_time?: Number;
}
5.完整版的controller
import { Controller, Get, Render, Post, Body, UseInterceptors, UploadedFile, Response, Query } from '@nestjs/common';
import { FileInterceptor } from '@nestjs/platform-express';
import { Config } from '../../../config/config';
import { ToolsService } from '../../../service/tools/tools.service';
import { FocusService } from '../../../service/focus/focus.service';
@Controller(`${Config.adminPath}/focus`)
export class FocusController {
constructor(
private toolsService: ToolsService,
private focusService: FocusService
) { }
@Get()
@Render('admin/focus/index')
async index() {
let result = await this.focusService.find();
return { focusList: result };
}
@Get('add')
@Render('admin/focus/add')
add() {
return {};
}
@Post('doAdd')
@UseInterceptors(FileInterceptor('focus_img'))
async doAdd(@Body() body, @UploadedFile() file, @Response() res) {
let saveDir = this.toolsService.uploadFile(file);
// 将图片地址放入body体中
Object.assign(body, { focus_img: saveDir });
await this.focusService.add(body)
this.toolsService.success(res, `/${Config.adminPath}/focus`)
}
@Get('edit')
@Render('admin/focus/edit')
async edit(@Query() query) {
let result = await this.focusService.find({ _id: query._id });
return { focus: result[0] }
}
@Post('doEdit')
@UseInterceptors(FileInterceptor('focus_img'))
async doEdit(@Body() body, @UploadedFile() file, @Response() res) {
let _id = body._id
if(file) {
let saveDir = this.toolsService.uploadFile(file);
Object.assign(body, { focus_img: saveDir });
await this.focusService.update({_id:_id}, body);
}else {
await this.focusService.update({_id:_id}, body);
}
this.toolsService.success(res, `/${Config.adminPath}/focus`)
}
@Get('delete')
async delete(@Query() query, @Response() res) {
await this.focusService.delete({_id: query._id});
this.toolsService.success(res, `/${Config.adminPath}/focus`)
}
}