vue2 antd 开关和首页门户样式,表格合计

news2024/11/23 18:36:28

1.首页门户样式

如图

1.关于圆圈颜色随机设置

  <a-col :span="6" v-for="(item, index) in menuList" :key="index">
                <div
                  class="circle"
                  :style="{ borderColor: randomBorderColor() }"
                  @click="toMeRouter(item)"
                >
                  <span>{{ item.menuName }}</span>
                </div>
              </a-col>
 //随机一个边框颜色
    randomBorderColor() {
      const randomColor = () => Math.floor(Math.random() * 256).toString(16);
      return "#" + randomColor() + randomColor() + randomColor();
    },

2.关于规章制度长度和省略号总结

 <div class="rule">
            <div v-if="rulers.length > 0">
              <table style="width: 100%">
                <tbody>
                  <tr v-for="(item, index) in rulers" :key="index">
                    <td @click="detail(item)">
                      <div class="content">
                        <div class="desContent">
                          <span
                            :class="{
                              hiddenOverflow: isIncidentDescribeLong(item.detail),
                            }"
                            ><a-tag color="pink" v-if="index == 0">更新</a-tag> {{ extractTextFromHTML(item.detail) }}</span
                          >
                        </div>
                        <div class="time">{{ formattedUpdateTime(item) }}</div>
                      </div>
                    </td>
                  </tr>
                </tbody>
              </table>
            </div>
            <div v-else style="text-align: center">暂无数据</div>
          </div>

判断是否满足隐藏条件 

   isIncidentDescribeLong(data) {
      if (!data) return;
      return data.length > 45;
    },

隐藏的样式

.hiddenOverflow {
  font-size: 14px;
  text-indent: 2em;
  display: -webkit-box;
  overflow: hidden;
  text-overflow: ellipsis;
  -webkit-line-clamp: 3; /* 限制显示3行 */
  -webkit-box-orient: vertical; /* 设置为垂直方向 */
}

父级盒子 

重点p不是自己生成的 可以::v-deep   找了非常久 不知道怎么处理语法

.desContent {
  display: inline-block;
  width: 360px;
  font-size: 14px;

  ::v-deep p {
    //p不是自己生成的
    margin-bottom: 0px !important;
  }
  &:hover {
    text-decoration: underline;
  }
}

还有一个就是希望每层都有距离

td {
  padding-bottom: 15px;
  cursor: pointer;
}

还有一个非常重要 就是我这个功能是通过接口的当我复制黏贴的时候 会有p标签和span标签 v-html不能去除这些标准的标签

extractTextFromHTML(html) {
      //JavaScript的DOM解析功能
      const parser = new DOMParser();
      const doc = parser.parseFromString(html, "text/html");
      return doc.body.textContent || "";
    },

3.关于表格合计

如图

 表头

   columns: [
        {
          title: "序号",
          align: "center",
          width: 70,
          customRender: (text, record, index) => {
            if (record.isTotalRow) {
              return {
                children: "合计",
                attrs: { colSpan: 6 },
              };
            }
            return index + 1;
          },
          width: 70,
          align: "center",
        },
        {
          title: "企业名称(租赁合同中的甲方)",
          align: "center",
          dataIndex: "companyName",
          width: 150,
          customRender: (text, record) => {
            if (record.isTotalRow) {
              return {
                children: null,
                attrs: { colSpan: 0 },
              };
            }
            return text;
          },
        },
        {
          title: "资产名称",
          align: "center",
          dataIndex: "assetName",
          width: 150,
          customRender: (text, record) => {
            if (record.isTotalRow) {
              return {
                children: null,
                attrs: { colSpan: 0 },
              };
            }
            return text;
          },
        },
        {
          title: "详细地址",
          align: "center",
          dataIndex: "address",
          width: 150,
          customRender: (text, record) => {
            if (record.isTotalRow) {
              return {
                children: null,
                attrs: { colSpan: 0 },
              };
            }
            return text;
          },
        },
        {
          title: "产权所属单位(产权人)",
          align: "center",
          dataIndex: "propertyOrgName",
          width: 150,
          customRender: (text, record) => {
            if (record.isTotalRow) {
              return {
                children: null,
                attrs: { colSpan: 0 },
              };
            }
            return text;
          },
        },
        {
          title: "资产类型",
          align: "center",
          dataIndex: "assetType",
          width: 150,
          customRender: (text, record) => {
            if (record.isTotalRow) {
              return {
                children: null,
                attrs: { colSpan: 0 },
              };
            }

            switch (Number.parseInt(text)) {
              case 1:
                return "房屋";
              case 2:
                return "土地";
              case 3:
                return "场地";
              case 4:
                return "设备";
            }
          },
        },
        {
          title: "租赁面积(m²)",
          align: "center",
          dataIndex: "rentAreas",
          width: 150,
        },
        {
          title: "承租方(租赁合同中的乙方)",
          align: "center",
          dataIndex: "receiveOrgName",
          width: 150,
        },
        {
          title: "租赁用途",
          align: "center",
          dataIndex: "rentUse",
          width: 150,
        },
        {
          title: "最终行为批准单位",
          align: "center",
          dataIndex: "finalOrgName",
          width: 150,
          customRender: (text) => {
            switch (Number.parseInt(text)) {
              case 1:
                return "市政府";
              case 2:
                return "左海集团";
              case 3:
                return "二级企业";
            }
          },
        },
        {
          title: "招租方式",
          align: "center",
          dataIndex: "rentWay",
          width: 150,
          customRender: (text) => {
            switch (Number.parseInt(text)) {
              case 1:
                return "平台竞租";
              case 2:
                return "协议租赁";
              case 3:
                return "自主招租";
            }
          },
        },
        {
          title: "招租结果是否进入平台公示",
          align: "center",
          dataIndex: "noticeFlag",
          width: 150,

          customRender: (text) => {
            if (text == "1") {
              return "是";
            } else {
              return "否";
            }
          },
        },
        {
          title: "租赁合同起止时间(X年x月x日-x年x月x日)",
          align: "center",
          dataIndex: "rentStartEndDate",
          width: 150,
        },
        {
          title: "租赁期数(月)",
          align: "center",
          dataIndex: "rentMonths",
          width: 150,
        },
        {
          title: "免租期(月)",
          align: "center",
          dataIndex: "rentFreeMonths",
          width: 150,
        },
        {
          title: "租金底价(元/月·m²)",
          align: "center",
          dataIndex: "rentMinPrice",
          width: 150,
        },
        {
          title: "租金成交价(元/月·m²)",
          align: "center",
          dataIndex: "rentDealPrice",
          width: 150,
        },
        {
          title: "租金递增率",
          align: "center",
          dataIndex: "rentIncreasePercent",
          width: 150,
        },
        {
          title: "合同总金额(万元)",
          align: "center",
          dataIndex: "allContractMoney",
          width: 150,
        },
        {
          title: "月租金(万元)",
          align: "center",
          dataIndex: "monthRentMoney",
          width: 150,
        },
        {
          title: "本年应收租金(万元)",
          align: "center",
          dataIndex: "yearRentShouldMoney",
          width: 150,
        },
        {
          title: "本年实收租金(万元)",
          align: "center",
          dataIndex: "yearRentRealMoney",
          width: 150,
        },
        {
          title: "是否欠租",
          align: "center",
          dataIndex: "arrearsFlag",
          width: 150,
          customRender: (text) => {
            if (text == "1") {
              return "是";
            } else {
              return "否";
            }
          },
        },
        {
          title: "其他违约情况",
          align: "center",
          dataIndex: "otherDefault",
          width: 150,
        },
        {
          title: "备注",
          align: "center",
          dataIndex: "remark",
          width: 150,
        },
      ],

最后一行的数据可以这样添加

    assetRentDetailAllCount() {
      this.loading = true;
      const meta = { companyName: this.queryParam.companyName };
      // console.log("this.queryParam", this.queryParam);
      assetRentDetailAllCount(meta)
        .then((res) => {
          this.loading = false;
          if (res.code == 0) {
            console.log("res", res);
            this.dataSource = res.data.list;
            // console.log(" this.dataSource", this.dataSource);
            // 使用解构赋值简化对象创建过程
            const totalRow = {
              isTotalRow: true,
              rentAreas: res.data.rentAreas,
              receiveOrgName: res.data.receiveOrgName,
              rentUse: res.data.rentUse,
              finalOrgName: res.data.finalOrgName,
              rentWay: res.data.rentWay,
              noticeFlag: res.data.noticeFlag,
              rentStartEndDate: res.data.rentStartEndDate,
              rentMonths: res.data.rentMonths,
              rentFreeMonths: res.data.rentFreeMonths,
              rentMinPrice: res.data.rentMinPrice,
              rentDealPrice: res.data.rentDealPrice,
              rentIncreasePercent: res.data.rentIncreasePercent,
              allContractMoney: res.data.allContractMoney.toFixed(2),
              monthRentMoney: res.data.monthRentMoney,
              yearRentShouldMoney: res.data.yearRentShouldMoney.toFixed(2),
              yearRentRealMoney: res.data.yearRentRealMoney,
              arrearsFlag: res.data.arrearsFlag,
              otherDefault: res.data.otherDefault,
              remark: res.data.remark,
            };

            this.dataSource.push(totalRow);
            // console.log(" this.dataSource22", this.dataSource);
          }
        })
        .catch((error) => {
          this.loading = false;
          console.error("Error fetching data:", error);
        });
    },

4.关于文件下载表格  后端不提供模板 首行缩进是Indent,合计也在下方

npm i docx
npm i file-saver
import {
  Document,
  Packer,
  Paragraph,
  TextRun,
  Table,
  TableRow,
  TableCell,
  WidthType,
  AlignmentType,
  HeadingLevel,
  Indent,
} from "docx";
import { saveAs } from "file-saver";
 <a-button
        type="primary"
        @click="generateDocx"
        :disabled="this.selectionRows.length > 0 ? false : true"
        >下载缴费单</a-button
      >
  generateDocx() {
      let totalShouldPayMoney = this.dataSource2.reduce(
        (sum, item) => sum + (item.shouludPayMoney || 0),
        0
      );
      const doc = new Document({
        sections: [
          {
            children: [
              new Paragraph({
                children: [
                  new TextRun({
                    text: "缴费通知单",
                    heading: HeadingLevel.TITLE,
                    bold: true,
                    size: 32,
                  }),
                ],
                alignment: AlignmentType.CENTER,
              }),
              new Paragraph({
                children: [
                  new TextRun({
                    text: `尊敬的承租户:${this.downform.lesseeOrg}`,
                    heading: HeadingLevel.HEADING_1,
                    bold: true,
                    size: 24,
                  }),
                ],
              }),
              new Paragraph({
                children: [
                  new TextRun({
                    text: `本公司特函通知,以下是${this.downform.startDate}至${this.downform.endDate} 费用使用详单。您租赁的项目按合同约定应缴纳以下费用,敬请贵司在收到本通知书单日内将下述款项以银行转账进行缴纳。`,
                    size: 18,
                  }),
                ],
                indent: { firstLine: 480 }, // 设置首行缩进
              }),

              new Table({
                rows: [
                  new TableRow({
                    children: [
                      new TableCell({
                        children: [new Paragraph("资产编号")],
                        width: { size: 10, type: WidthType.PERCENTAGE },
                        alignment: AlignmentType.CENTER,
                        verticalAlign: AlignmentType.CENTER,
                      }),
                      new TableCell({
                        children: [new Paragraph("资产名称")],
                        width: { size: 10, type: WidthType.PERCENTAGE },
                        alignment: AlignmentType.CENTER,
                        verticalAlign: AlignmentType.CENTER,
                      }),
                      new TableCell({
                        children: [new Paragraph("单月租金(元)")],
                        width: { size: 10, type: WidthType.PERCENTAGE },
                        alignment: AlignmentType.CENTER,
                        verticalAlign: AlignmentType.CENTER,
                      }),
                      new TableCell({
                        children: [new Paragraph("数量")],
                        width: { size: 10, type: WidthType.PERCENTAGE },
                        alignment: AlignmentType.CENTER,
                        verticalAlign: AlignmentType.CENTER,
                      }),
                      new TableCell({
                        children: [new Paragraph("应付金额")],
                        width: { size: 10, type: WidthType.PERCENTAGE },
                        alignment: AlignmentType.CENTER,
                        verticalAlign: AlignmentType.CENTER,
                      }),
                    ],
                  }),
                  ...this.dataSource2.map(
                    (item) =>
                      new TableRow({
                        children: [
                          new TableCell({
                            children: [new Paragraph(item.code || "")],
                            alignment: AlignmentType.CENTER,
                            verticalAlign: AlignmentType.CENTER,
                          }),
                          new TableCell({
                            children: [new Paragraph(item.name || "")],
                            alignment: AlignmentType.CENTER,
                            verticalAlign: AlignmentType.CENTER,
                          }),
                          new TableCell({
                            children: [
                              new Paragraph(
                                item.monthRentMoney.toString() || ""
                              ),
                            ],
                            alignment: AlignmentType.CENTER,
                            verticalAlign: AlignmentType.CENTER,
                          }),
                          new TableCell({
                            children: [
                              new Paragraph(item.monthNum.toString() || ""),
                            ],
                            alignment: AlignmentType.CENTER,
                            verticalAlign: AlignmentType.CENTER,
                          }),
                          new TableCell({
                            children: [
                              new Paragraph(
                                item.shouludPayMoney.toString() || ""
                              ),
                            ],
                            alignment: AlignmentType.CENTER,
                            verticalAlign: AlignmentType.CENTER,
                          }),
                        ],
                      })
                  ),
                  // 添加合计行
                  new TableRow({
                    children: [
                      new TableCell({
                        children: [new Paragraph("合计")],
                        columnSpan: 4, // 合并前四列
                        alignment: AlignmentType.CENTER,
                        verticalAlign: AlignmentType.CENTER,
                      }),
                      new TableCell({
                        children: [
                          new Paragraph(totalShouldPayMoney.toFixed(2)),
                        ],
                        alignment: AlignmentType.CENTER,
                        verticalAlign: AlignmentType.CENTER,
                        shading: {
                          color: "#EFEFEF",
                          val: "clear",
                        },
                        borders: {
                          bottom: { style: "single", size: 12 },
                        },
                      }),
                    ],
                  }),
                ],
              }),
              new Paragraph({
                children: [
                  new TextRun({
                    text: `出租方:${this.downform.rentOrgName}`,
                    size: 18,
                  }),
                ],
                alignment: AlignmentType.RIGHT,
              }),
              new Paragraph({
                children: [
                  new TextRun({
                    text: `${this.date}`,
                    size: 18,
                  }),
                ],
                alignment: AlignmentType.RIGHT,
              }),
            ],
          },
        ],
      });
      Packer.toBlob(doc).then((blob) => {
        saveAs(blob, "缴费单详情.docx");
      });
    },

Paragraph (docx.js.org)

docx

docx

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1860127.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

版本控制工具-git分支管理

目录 前言一、git分支管理基本命令1.1 基本命令2.1 实例 二、git分支合并冲突解决三、git merge命令与git rebase命令对比 前言 本篇文章介绍git分支管理的基本命令&#xff0c;并说明如何解决git分支合并冲突&#xff0c;最后说明git merge命令与git rebase命令的区别。 一、…

Python重拾

1.Python标识符规则 字母&#xff0c;下划线&#xff0c;数字&#xff1b;数字不开头&#xff1b;大小写区分&#xff1b;不能用保留字&#xff08;关键字&#xff09; 2.保留字有哪些 import keyword print(keyword.kwlist)[False, None, True, and,as, assert, async, await…

【AI兼职副业必看,行业分析+注意事项+具体应用,想要做点副业的小白必看!】

前言 随着AI技术的日新月异&#xff0c;它已悄然渗透到我们生活的每一个角落&#xff0c;成为了我们日常生活和工作中的得力助手。在当前经济下行的环境下&#xff0c;AI技术更是成为了提升工作效率、拓展业务领域的关键。对于我们普通人而言&#xff0c;有效利用AI工具&#…

应变计在工程中的角色:精准监测与安全保障的得力助手

在工程领域中&#xff0c;应变计作为一种重要的测量工具&#xff0c;扮演着精准监测与安全保障的得力助手的角色。它能够实时、准确地测量物体在受力作用下的变形情况&#xff0c;为工程师提供关键的数据支持&#xff0c;从而确保工程的稳定性与安全性。 应变计在工程中的应用范…

深度学习训练基于Pod和RDMA

目录 ​编辑 引言 RDMA技术概述 InfiniBand iWARP RoCE Pod和容器化环境 深度学习训练与RDMA结合 MPI和RDMA 深度学习框架与RDMA 实战&#xff1a;基于Pod和RDMA的深度学习训练 环境准备 步骤 YAML 性能和优势 结论 引言 随着深度学习在人工智能领域的快速发展…

2024数字孪生发展研究报告

来源&#xff1a;华为&ampamp中国信通院 近期历史回顾&#xff1a; 2023内蒙古畜牧业温室气体减排策略与路径研究报告-能源基金会.pdf 2023园区工商业配储项目储能系统技术方案.pdf 欧洲和美国储能市场盘点&#xff08;英文&#xff09;.pdf 2024年第1季度全球ESG监管政策…

Python爬取中国福彩网彩票数据并以图表形式显示

网页分析 首先打开中国福彩网&#xff0c;点击双色球&#xff0c;选择往期开奖栏目 进入栏目后&#xff0c;选定往期的奖金数目作为我们想要爬取的目标内容 明确目标后&#xff0c;开始寻找数据所在的位置 鼠标右击页面&#xff0c;打开网页源代码&#xff0c;在源代码中搜索…

B端系统:消息页面的设计要点

在B端系统中&#xff0c;消息页面的作用是为用户提供实时的通信和信息交流功能&#xff0c;以便用户能够及时获取和处理重要的业务消息和通知。设计一个好的消息页面可以提高用户的工作效率和沟通效果。 以下是一些建议来设计消息页面&#xff1a; 易于查看和管理&#xff1a;…

免费直播课程!6月30日

<面向人工智能领域的开发工程师&#xff0c;特别是机器学习/深度学习方向> 在这里报名听课&#xff1a; F学社-全球FPGA技术提升平台 (zzfpga.com) TIPS&#xff1a; 报名后将在页面内弹出「腾讯会议号和会议密码」&#xff0c;注意复制保存哦~

备考必备:NOC大赛2022图形化编程决赛真题与解析

为了大家备考2023-2024学年全国中小学信息技术创新与实践大赛&#xff08;NOC大赛&#xff09;&#xff0c;角逐恩欧希教育信息化发明创新奖&#xff0c;今天给大家分享2022年NOC大赛图形化编程决赛真题试卷。 下载&#xff1a;更多NOC大赛真题及其他资料在网盘-真题文件夹或者…

Java高级重点知识点-10-Object类

文章目录 Object类(java.lang) Object类(java.lang) Object类是Java语言中的根类&#xff0c;即所有类的父类 重点&#xff1a; public String toString()&#xff1a;返回该对象的字符串表示。 public class User {private String username;private String password;public…

JavaWeb系列十三: 服务器端渲染技术(JSP) 下

韩顺平 2. EL表达式2.1 EL表达式快速入门2.2 EL表达式输出形式2.3 el运算符2.4 empty运算2.5 EL获取四个域数据2.6 EL获取HTTP相关信息 3. JSTL标签库3.1 jstl 快速入门3.2 <c:set/>标签3.3 <c:if/>标签3.4 <c:choose/>标签3.5 <c:forEach/>标签3.6 作…

蓝牙技术|苹果iOS 18的第三方配件将支持AirPods / AirTag的配对体验

苹果公司在 iOS 18 系统中引入了名为 AccessorySetupKit 的新 API&#xff0c;用户不需要进入蓝牙设置和按下按钮&#xff0c;系统就能识别附近的配件&#xff0c;并提示用户进行配对。首次向配件制造商开放这种配对体验。 iPhone 用户升级 iOS 18、iPad 用户升级到 iPadOS 1…

SAP BC 修改 FINS_ACDOC_CUST116 ERROR 为 WARNING 信息

FI再改如下配置时报错了 消息号 FINS_ACDOC_CUST116 参考 SAP 消息控制_sap消息号更改w为e-CSDN博客 需要指出的是你必须注意做重要的三个表 T100:包含所有的message T100C:你定义的message通常将出现在此表 T100s:Configurable system messages顾名思义就是你能设置的消息…

游戏AI的创造思路-技术基础-深度学习(4)

下面的内容是让AI进行左右互博&#xff0c;这就是传说中的GAN对抗网络 当然&#xff0c;周伯通和GAN真的是难兄难弟&#xff0c;欲练神功&#xff0c;结果被黄药师&#xff08;欺骗&#xff09;坑了 目录 3.4. 生成对抗网络&#xff08;GAN&#xff09; 3.4.1. 定义 3.4.2.…

JVM专题四:JVM的类加载机制

Java中类的加载阶段 类加载 Java中的类加载机制是Java运行时环境的一部分&#xff0c;确保Java类可以被JVM&#xff08;Java虚拟机&#xff09;正确地加载和执行。类加载机制主要分为以下几个阶段&#xff1a; 加载&#xff08;Loading&#xff09;&#xff1a;这个阶段&#x…

ServBay[中文] 下一代Web开发环境

ServBay是一个集成式、图形化的本地化Web开发环境。开发者通过ServBay几分钟就能部署一个本地化的开发环境。解决了Web开发者&#xff08;比如PHP、Nodejs&#xff09;、测试工程师、小型团队安装和维护开发测试环境的问题&#xff0c;同时可以快速的进行环境的升级以及维护。S…

【源码+文档+调试讲解】校园商铺管理系统

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;校园商铺当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了校园商铺的发展&#xff0c;它彻底改变了过去传统的管理方…

WARP 加速您的 AI 数据存储基础设施

你知道一些最好的人工智能模型的秘诀吗&#xff1f;这是他们可以访问的数据量&#xff0c;他们可以接受培训。对于 AI/ML 模型&#xff1a;快速访问数据为王。让我强调一下&#xff0c;这不仅仅是数据&#xff0c;而是快速访问的数据。如果有人可以构建更快、更强大的模型&…

量子计算的崛起:开启计算新纪元

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…