一:创建原型 entity/app/bannertest.ts

快捷键 ent 可一键搭建结构

import { EntityModel } from '@midwayjs/orm';
import { BaseEntity } from 'midwayjs-cool-core';
import { Column } from 'typeorm';

/**
 * 轮播图
 */
 //           要创建的数据库表名
@EntityModel('base_demo_bannertest')
export class bannertestEntity extends BaseEntity {
  //数据库里面的字段
  @Column({ comment: '图片' })
  picture: string;

  @Column({ comment: '标题' })
  title: String;

  @Column({ comment: '链接' })
  link: String
}

二:写api接口 controller/admin/app/bannertest.ts

快捷键 con 可一键搭建结构

import { Provide, Get } from '@midwayjs/decorator';
import { CoolController, BaseController } from 'midwayjs-cool-core';
import { bannertestEntity } from '../../../entity/app/bannerTest';

/**
 * 描述
 */
@Provide()
@CoolController({
  api: ['add', 'delete', 'update', 'info', 'list', 'page'],
  // 加载实体类
  entity: bannertestEntity,
  // 调整默认自带的crud方法的属性
  pageQueryOp: {
    // 让title字段支持模糊查询
    keyWordLikeFields: ['title'],
  }
})
export class bannertestController extends BaseController {
  // 其它自定义接口
  @Get('/other')
  async other() {
    return this.ok('hello, cool-admin!!!');
  }
}

三:数据库会自动创建表格

npm run dev

四:启动前端 创建页面bannertest.vue /view/bannertest.vue

快捷键 cl 一键搭建结构

<template>
    <cl-crud ref="crud" @load="onLoad">
        <el-row type="flex" align="middle">
            <!-- 刷新按钮 -->
            <cl-refresh-btn />
            <!-- 新增按钮 -->
            <cl-add-btn />
            <!-- 删除按钮 -->
            <cl-multi-delete-btn />
            <cl-flex1 />
            <!-- 关键字搜索 -->
            <cl-search-key />
        </el-row>

        <el-row>
            <!-- 数据表格 -->
            <cl-table v-bind="table"></cl-table>
        </el-row>

        <el-row type="flex">
            <cl-flex1 />
            <!-- 分页控件 -->
            <cl-pagination />
        </el-row>

        <!-- 新增、编辑 -->
        <cl-upsert ref="upsert" v-bind="upsert"></cl-upsert>
    </cl-crud>
</template>

<script>
export default {
    data() {
        return {
            // 新增、编辑配置
            upsert: {
                items: []
            },
            // 表格配置
            table: {
                columns: []
            }
        };
    },
    methods: {
        onLoad({ ctx, app }) {
            ctx.service().done();
            app.refresh();
        }
    }
};
</script>

五:添加service请求服务 /service/app/bannertest.js

import { BaseService, Service, Permission } from "cl-admin";

// 默认创建api接口controller的位置就是这个地址  /文件夹/xxx.ts
//不对应就会出现404
//        这要和后台创建的接口地址对应
@Service("base/app/bannertest")
class bannertest extends BaseService {

}

export default bannertest;

六:在service里面的index实例我添加的service请求服务

如果是模块化开发,modules一定要实现这步,要不找不到你定义的接口

// 自定义
import bannertest from "./app/bannertest";

export default {
  // 自定义
  banner: new bannertest()
};

七:在网页.vue中的methods添加接口

methods: {
    onLoad ({ ctx, app }) {
      //console.log(this.$service);
      // 对应的是你  上步中实例化的对象
      ctx.service(this.$service.banner).done();
      app.refresh();
    }
  }

八:设置显示数据 data中

data () {
    return {
      // 新增、编辑配置
      // 弹窗表单
      upsert: {
        items: [
          {
            label: "照片",
            prop: 'picture',
            // element-ui的组件  也有自己框架定义的
            component: {
              name: 'cl-upload',
              props: {
                text: "选择头像",
                icon: "el-icon-picture"
              }
            },
            // 校验
            rules: [
              { required: true, message: '请选择图片', trigger: 'changes' },
            ]
          },
          {
            label: "标题",
            prop: 'title',
            component: {
              name: 'el-input'
            },
            rules: [
              { required: true, message: '请输入标题', trigger: 'blur' },
              { min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }
            ]
          },
          {
            label: "链接",
            prop: 'link',
            component: {
              name: 'el-input'
            },
            rules: [
              { pattern: '[a-zA-z]+://[^\s]*', message: '请输入正确的链接地址', trigger: 'blur' }
            ]
          }
        ]
      },
      // 表格配置
      table: {
        columns: [
          {
            label: "照片",
            prop: "picture",
          },
          {
            label: "标题",
            prop: "title",
          },
          {
            label: "链接",
            prop: "link",
          }
        ]
      }
    };
  },

九:如果想在表单模块显示自己要的东西可以用template

比如:头像显示 得用显示框显示,不能用div显示链接

// 位置一定要看清 是在表格里template
<cl-table v-bind="table">
        <!-- 头像 -->
        <template #column-picture="{ scope }">
          <cl-avatar shape="square"
                     size="medium"
                     :src="scope.row.picture | default_avatar"
                     :style="{ margin: 'auto' }">
          </cl-avatar>
        </template>
</cl-table>

十:在菜单中追加我定义的页面

在这里插入图片描述在这里插入图片描述

如果需要给它添加权限的话

在这里插入图片描述

比较常用的权限搭配:

查看: page+info
添加: add
删除: delete
修改: update+info

显示列表页面
在这里插入图片描述

点击添加显示的弹窗
在这里插入图片描述

右键表格元素的菜单

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐