使用Egg改造訂單系統展示效果,方便快速瀏覽

素材準備:

1.Egg.js

Born to build better enterprise frameworks and apps with Node.js & Koa 

為企業級框架和應用而生

2.訂單數據

訂單列表://gzh.58yskj.com/qd-sys/

訂單詳情://gzh.58yskj.com/public/index-detail.html?id=9bbf0efa-15cc-4898-8a3d-75468ec55ced

3.Bootstrap

Bootstrap樣式文件、腳本文件,插件bootstrap-paginator.js

4.swiper

輪播圖切換效果腳本swiper.js

 

我們在看到下面這種訂單列表時,如果要查看具體的需求,那就需要每個訂單去下載附件,然後再打開查看了。如果可以查看圖片形式的需求豈不是一目了然,為此我以egg.js框架搭建一個方便自己預覽的小型系統(此處應該說是一個站點吧,具體的名詞不去糾結了)。

UntitledImage

在本地搭建的站點效果如下:

UntitledImage

這樣是不是就一目了然了呢,當然了這個只是訂單的展示,並未做接單的操作(這個由於官方是基於接單是基於微信公眾號的微信登錄,暫時不考慮做接單了)

 

接下的操作分為,

1.基於egg.js快速初始化

直接使用腳手架,只需幾條簡單指令,即可快速生成項目(npm >=6.1.0):

$ mkdir egg-example && cd egg-example
$ npm init egg –type=simple
$ npm i

啟動項目:

$ npm run dev
$ open //localhost:7001

 

2.上面的操作完成之後就可以看到一個簡單的頁面,內容顯示hello,egg。

我們使用egg.js在渲染頁面時需要用到模板引擎,此處我使用的是egg-view-nunjucks

引入 view 插件
$ npm i egg-view-nunjucks –save

啟用插件
// config/plugin.js  注意此處的文件路徑
exports.nunjucks = {
      enable: true,
     package: ‘egg-view-nunjucks’,
};

//另外還要注意一下此處配置的寫法啊。由於我也是第一次玩egg啊,在此處剛開始配置的時候沒太注意那麼多,導致寫錯了配置結構,報了一堆錯誤,後來根據報錯的堆棧資訊,逐步調試才發現是配置文件寫錯了結構。

或者以下方的寫法,我用的就是下面的方式,剛開始沒注意到,結構裡面寫nunjucks,導致一系列的報錯。。。

module.exports = {
nunjucks: {
enable: true,
package: ‘egg-view-nunjucks’,
},
};

 

另外還要在config下的配置文件中配置一下模板引擎

/config/config.default.js

config.view = {
defaultViewEngine: ‘nunjucks’,
mapping: {
‘.tpl’: ‘nunjucks’,
},
};

 

3.模板引擎安裝上了,接下來我們就寫一下模板

寫模板之前需要先寫一下路由、控制器

在router.js定義一下訪問的路由

module.exports = app => {
const { router, controller } = app;
router.get(‘/’, controller.home.index);//首頁的路由
router.get(‘/order/:id’, controller.home.order);//訂單詳情頁面的路由
};

 

首先來看首頁的路由對應的控制器方法就是controller.home.index,也就是controller目錄下的home.js中的index()方法

'use strict';

const Controller = require('egg').Controller;

class HomeController extends Controller {
async index() {
const { ctx, app } = this;

const pageSize = app.config.env.pageSize;
const page = parseInt(ctx.query.page) || 1;
const cid = ctx.query.cid || '';

// const orderList = await ctx.service.order.getOrderList();
const data = await ctx.service.order.getOrderListDb(cid, page, pageSize);
const categoryList = await ctx.service.order.getCategoryListDb(page, 50)


await ctx.render('home/list.tpl', { data, categoryList, page, pageSize, cid });
}

async order() {
const { ctx } = this
const { id } = ctx.params
ctx.content = {
name: `hello ${ctx.params.id}`,
};

await ctx.render(『home/order.tpl', {order });
}
}

module.exports = HomeController;

 

Tags: