关于vue2+antd 信息发布后台不足的地方

有的写法可以cv

1.序号递增

复制代码
{
    title: "序号",
    customRender: (text, record, index) => `${index + 1}`,
    align: "center",
  },

2.关于类型

复制代码
  {
    title: "类型",
    dataIndex: "type",
    align: "center",
    customRender: function (t) {
      switch (Number.parseInt(t)) {
        case 0:
          return "区域";
        case 1:
          return "街道";
      }
    },
  },

3.关于 scopedSlots: 时间范围有效字段表格用法

复制代码
  {
    title: "时间段",
    dataIndex: "playTimes",
    scopedSlots: { customRender: "playTimes" },
    align: "center",
  },

 <div slot="playTimes" slot-scope="{ record }">
          {{ record.startTime }}~{{ record.endTime }}
        </div>

4.关于删除

复制代码
 {
    title: "操作",
    align: "center",
    scopedSlots: { customRender: "action" },
    width: 150,
  },

 <div slot="action" slot-scope="{ record }">
          <a-popconfirm
            title="删除会将同一区域的不同时间段数据一并删除,确认删除吗?"
            @confirm="() => deleteRecord(record)"
          >
            <a :disabled="isDisabled">删除</a>
          </a-popconfirm>
        </div>

重点:a-popconfirm气泡框

5.关于字典

1.首先我先定义字段

复制代码
 {
    title: "级别",
    align: "center",
    dataIndex: "level",
    scopedSlots: { customRender: "level" },
  },

2.其次我渲染字段

复制代码
 <div slot="level" slot-scope="{ text }">
          {{ text | textList(dictionaryList) }}
        </div>

3.dictionaryList设置为空一开始初始化时候

复制代码
 dictionaryList: [],

4.引入字典

复制代码
import { getDictionary } from "@/api/index";

5.在@/api/index中获取统一框架数据字典列表 这是根据后端提供的api

复制代码
//获取统一框架数据字典列表
export function getDictionary (type) {
 return request({
  // url: '/upms/dict/item/page',
  // url: '/upms/dict/item/' + id,
  url: '/upms/dict/type/' + type,
  method: 'get',
  // params: query
 })
}

6.获取字典

复制代码
 getDictionary() {
      getDictionary("district_level").then((res) => {
    //dictionaryList上面定义过的 得到字典值
        this.dictionaryList = res.data.data;
      });
    },

7.看到步骤2那边时vue2的过滤器

复制代码
  filters: {
    textList(val, list) {
   //这里看不懂的话可以打印下 val 和list 总的来说就是值相等返回代表的中文
      let mm = "";
      list.forEach((item) => {
        if (item.value == val) {
          mm = item.label;
        }
      });
      return mm;
    },
  },

6.关于动态的action,前面5种是虽然包含变换 但是还不够动态。

我说的动态action举例:比如在这个状态下我的action只有应用和详情,在那个状态下 我的actionshiyou 停止和详情 ,通过record.status判断

复制代码
 {
    key: "action",
    title: "操作",
    fixed: "right",
    align: "center",
    scopedSlots: { customRender: "action" },
    width: 200,
  },

      <div slot="action" slot-scope="{ record }">
          <a @click="showApplication(record)" v-if="record.status != 1">应用</a>
          <a @click="showCease(record)" v-if="record.status == 1">停止</a>
          <a-divider type="vertical" />
          <a style="margin-right: 8px" @click="viewRecord(record)"> 详情 </a>
          <a
            style="margin-right: 8px"
            @click="editRecord(record)"
            v-if="record.status != 1"
          >
            编辑
          </a>
          <a-popconfirm
            title="确定删除吗?"
            @confirm="() => deleteRecord(record.id)"
            v-if="record.status != 1"
          >
            <a>删除</a>
          </a-popconfirm>
        </div>

7.表格枚举显示和字典有点相似,找不到字典就自己写枚举

1.在utils文件夹里的utils.js写代码

复制代码
/**
 * 表格枚举显示
 */
export function renderTypeName(
  typeArr,
  value
) {
  //备注:类型如果是数字的且为0时,!value为false
  if (!typeArr.length || value === "") return "--";
  const currentArr = typeArr.filter(item => {
    return item.value === value;
  });
  if (!currentArr.length) return "--";
  return currentArr[0].text;
}

2.新建enumeration文件夹,命名payTypeEnum.js

复制代码
export const BALANCE = 'BALANCE';
export const SYS_BALANCE = 'SYS_BALANCE';
export const  MONEY = ' MONEY';
export const POS = 'POS';
export const  BANK = ' BANK';
export const WECHAT_PAY = 'WECHAT_PAY';
export const ALI_PAY = 'ALI_PAY';

export const payTypeEnumList = [
    {
        text: '钱包余额',
        value: BALANCE
    },
    {
        text: '系统赠送金额',
        value: SYS_BALANCE
    },
    {
        text: '现金',
        value: BALANCE
    },
    {
        text: 'POS刷卡',
        value: POS
    },
    {
        text: '银行转账',
        value: BANK
    },
    {
        text: '微信扫码',
        value: WECHAT_PAY
    },
    {
        text: '支付宝扫码',
        value: ALI_PAY
    },
] 

3.在需要的文件引入这两个代码

复制代码
import { payTypeEnumList } from "@/enumeration/payTypeEnum.js";
import { renderTypeName } from "@/utils/util";

4.使用

复制代码
  {
    key: "payType",
    title: "支付方式",
    dataIndex: "payType",
    align: "center",
    // scopedSlots: { customRender: "payType" },
    customRender(h) {
      return renderTypeName(payTypeEnumList, h);
    },
  },

以上就是我做vue2时碰到表格渲染出现的问题

主要是字典,枚举和动态渲染action


相关推荐
lichenyang45316 小时前
Docker 学习笔记(一):为什么需要镜像、容器和仓库?
前端
kyriewen16 小时前
别再对着 TypeScript 报错发呆了:我把 10 个最常见的红色波浪线翻译成了人话
前端·javascript·typescript
IT_陈寒16 小时前
SpringBoot自动配置的坑,我的API突然就404了
前端·人工智能·后端
free3517 小时前
从 0 实现一个 Tiny JavaScript VM:项目架构拆解
javascript
奇奇怪怪的17 小时前
Embedding 模型 10+ 横向评测
前端
陈广亮17 小时前
Monorepo 从 0 到 1 实操指南 2026 版:pnpm catalogs + Turborepo 2.x + changesets 全链路
前端
子兮曰17 小时前
OpenMontage 深度解剖:你的 AI 编程助手,其实是个视频工作室
前端·后端·ai编程
敲代码的鱼17 小时前
PDF 预览与签名批注写回 支持安卓 iOS 鸿蒙 UTS插件
android·前端·ios
子兮曰17 小时前
前端工具链的「Rust 化」:一场没有赢家的军备竞赛?
前端·后端·rust