一些框架使用总结

news2024/12/24 3:59:05

一.力软

1. 菜单相关

1) 页面菜单配置

自己写的页面 都在 src/modules中,基本结构如下图,具体页面在 views 文件夹中

module.js中,code字段需要和文件夹名称对应起来

export default {
    name: '案例演示模块',
    code: 'demo',
    version: '1.0.0',
    description: '一些案例演示'
  }

index.js 文件负责引入所有,基本没有变化

import './api'
import store from './store'
import routes from './routes'
import components from './components'
import module from './module'

export default {
    module,
    routes,
    store,
    components
}

进入系统配置管理 - 菜单管理中 配置页面

如果是点击菜单,跳转到相应页面的话,首先是目录一栏选择功能页面这项,

其次是下面的地址,第一级是 上述 module.js 中 code 所对应的文件夹名称,再下一级是 views 文件夹下的文件夹的名称

如果只是菜单的分级用处没有实际页面的话,上述的目标一栏选择菜单目录即可,地址一栏也不需要有内容

2)角标(menu.vue / menuItem.vue

定义store,引入store,处理数据,监听触发function,html中显示数据,处理样式

定义store count.js

export default {
    namespaced: true,
    state: {
        menusCount: {},
        menusCountChange: false,
    },
    actions: {
         menusCount({ commit },data) {
            commit('SET_MENUS_COUNT',data)
        },
    },
    mutations: {
        SET_MENUS_COUNT: (state, data) => {
            state.menusCount = data
        },
    }
}

在 src/core/store/getter.js 中引入文件

progressMenusCountChange: state => state.ProgressSupervision.count.menusCount,

在menu 中引入

import { mapGetters } from "vuex";


computed: {
  ...mapGetters(['progressMenusCountChange']),
},

处理数据

async setProgressMenuCount(){
  const api = window.$crud("/quota/above/index/count")
  let data = await this.$awaitWraper(api.getInfo())
  this.menuCount = this.dealMenuCount(data);
},
dealMenuCount(data){
  const processedData = {};
  data.forEach((item) => {
    if (item.indexName === 'IncompleteCheck' ) {
      processedData["日常检查"] = item.count;
    } else if (item.indexName === 'IncompleteDisposal' ) {
      processedData["问题处置"] =item.count;
    }
  });
  return processedData
}

在需要的时候触发监听

this.$store.dispatch("ProgressSupervision/count/menusCount", data)

监听后改变数据

watch: {
  progressMenusCountChange(){
    const data = this.$store.state.ProgressSupervision.count.menusCount;
    this.menuCount = this.dealMenuCount(data);
  }
}

html页面显示(判断有数据则显示,并改变样式

<template v-if="menuCount[child.f_FullName]">
  <span class="menus-tag-conut"> {{menuCount[child.f_FullName]}} </span>
</template>

2.页面筛选字段

需要注意的是,主要展示的内容及顺序是由 js 的 queryItems 控制的,

1)html(组件可以用 l-query,l-query2等,主要是样式上的区别,也可以自己再包几个

<l-query :span="4" :labelWidth="80" :height.sync="queryHeight" :items="queryItems" :formData="queryData"
        :loading="tableLoading" @search="handleSearch">
  <template #RegionCode>
    <l-select :options="regionOptions" v-model="queryData.RegionCode" @change="handleSearch"/>
  </template>
  <template #projectName>
    <el-input v-model="queryData.Keyword" :placeholder="$t('请输入项目名称')" @keyup.enter.native="handleSearch"/>
  </template>
</l-query>

2)js

queryItems: [
  {label: "功能区", prop: "RegionCode"},
  {label: "项目名称", prop: "projectName"},
],

3)涉及到的数据字典

regionOptions() { // 功能区名称
  let data = this.lr_dataItemOptions(this.lr_dataItem['FunctionZoneName'])//固定写法,中间引用内容需要到数据字段中配一下
  if (this.regionCode) {
    const item = data.filter(t => t.f_ItemValue == this.regionCode)
    if (item.length) {
      return item
    }
    return []
  }
  return data
},

如果要在html中使用数据字典、数据源

{{ lr_dataItemName(lr_dataItem['EngineeringStatus'],formData.projectStatusCode) }} //数据字典
{{ lr_dataSourceName2(dataCode, value, valueKey, labelKey) }} // 数据源

3.列表显示(l-table

1) 涉及到数据字典,数据源的

mounted() {
  this.lr_loadDataItem('FunctionZoneName') // 功能区名称(上述数据字典
  this.lr_loadDataSourceData('数据源code')
},

2)基本格式的html

<l-table ref="mainTable" 
:loading="tableLoading" 
:columns="columns"  //列的数据
:dataSource="tableData" 
:isPage="true"
:pageTotal="tableTotal" 
:tablePage.sync="tableCurrentPage" 
@loadPageData="turnTablePage">
        <l-table-btns :btns="tableBtns" :filterBtns="filterBtns" @click="lr_handleTableBtnClick"
                      :isAuth="false"></l-table-btns> // 操作按钮
</l-table>

3) 一些基本类型的Columns

yczColumns = [
    { label: "项目编号", prop: "projectCode", minWidth: 120, dataType: "input", isNotAutoWrap: true, },
    { label: "建设进度", prop: "projectStatusCode", minWidth: 80, dataType: "dataItem",  dataCode: "EngineeringStatus",isNotAutoWrap: true, },
    { label: "检查日期", prop: "createTime", minWidth: 100, dataType: "datetime", format: "yyyy-MM-dd", isNotAutoWrap: true, sortable:true,},
    { label: "报送部门", prop: "problemSubmissionUnitIds", minWidth: 120, dataType: "department", isNotAutoWrap: true, },
    { label: '地址', prop: 'projectAddress', dataType: 'append', dataCode: 'm²' },
]

字段解释

isNotAutoWrap // 数据是否换行,true为不换行,超出省略号显示且hover有提示效果
sortable //排序
dataType: "dataItem",  dataCode: "EngineeringStatus",// 数据字典格式,在数据字段中配置过的会显示相应的值
dataType: 'dataSource', dataCode: "xzc", valueKey: 'value', labelKey: 'label',//数据源格式
dataType: "datetime", format: "yyyy-MM-dd",//转换时间的显示格式( dataType 也可以为 year )
dataType: 'append', dataCode: 'm²'//拼接的模式,给返回的数据加后缀
dataType: 'image', //图片
其他的 dataType : company、department、user、amount

4)操作按钮

tableBtns() { //绑定的操作列的按钮,divided: true为显示红色
  return [
    {prop: 'Down', label: '下载'},
    {prop: 'Edit', label: '重命名', width: 48},
    {prop: 'Delete', label: '删除', divided: true}
  ]
},
filterBtns(row, btns) { // 过滤按钮,可做权限控制
  if (row.type == 1) {
    // 文件夹 取消下载按钮
    var downBtn = btns.find(t => t.prop == 'Down')
    downBtn && (downBtn.disabled = true)
  }
  return btns
},
handleEdit($index, row) { // handle + tableBtns的prop 会直接绑定操作按钮的函数
  xxx
},

5)如果 columns 中的包装的内容不能满足业务需求,我们可以直接在html中改写

 <l-table ref="mainTable" :loading="tableLoading" :columns="columns" :dataSource="tableData" :isPage="true"
               :pageTotal="tableTotal" :tablePage.sync="tableCurrentPage" @loadPageData="turnTablePage">
    <!-- 项目名称 -->
    <template v-slot:projectName="scope" >
      <div v-if="scope.row.projectName " class="name-box" :class=" scope.row.isShutdown ? 'part' : 'all' ">
        <a @click="handleDetails(0,scope.row)">{{ scope.row.projectName }}</a>
        <span v-if="scope.row.isShutdown" class="status-line-cont-tag red-box nowrap-box" > 停工</span>
      </div>
      <span v-else>---</span>
    </template>
  </l-table>

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

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

相关文章

外卖霸王餐小程序、H5、公众号版外卖系统源码

最新外卖霸王餐小程序、H5、微信公众号版外卖系统源码、霸王餐美团、饿了么系统&#xff0c;粉丝裂变玩源码下载&#xff0c;外卖cps小程序项目&#xff0c;外卖红包cps带好友返利佣金分销系统程序、饿了么美团联盟源码&#xff0c;外卖cps带分销返利后端源码&#xff0c;基于L…

短视频账号系统源码(saas开发型)

抖音账号|短视频矩阵分发系统 | 多账号管理发布 |MVC架 一、短视频矩阵分发系统是什么&#xff1f; 短视频矩阵分发系统是一种集多账号、平台管理和视频分发于一身的技术运营类saas工具。它可以帮助用户管理多个账号&#xff0c;并将短视频快速传播到这些账号所在的不同平台上…

四川眼科医院孙丰源教授团队为患者拔除1.4cm长“眼中钉”

在户外劳作进行一些危险性的操作时&#xff0c;如果不注意防护&#xff0c;就很容易造成一些意外事件发生。广元的张先生使用割草机除草时&#xff0c;被割草机断裂的锯片击伤了左眼&#xff0c;伤势严重&#xff0c;所幸在孙丰源教授团队的帮助下&#xff0c;及时获得了治疗&a…

【操作系统笔记十】缓存一致性

CPU 核心之间数据如何传播 高速缓存中的值被修改了&#xff0c;那么怎么同步到内存中呢&#xff1f; ① 写直达&#xff08;Write-Through&#xff09;② 写回&#xff08;Write-Back&#xff09; 写直达&#xff08;Write-Through&#xff09; 简单&#xff0c;但是很慢&am…

Zygote Secondary:加速应用启动的未来之路

Zygote Secondary&#xff1a;加速应用启动的未来之路 1. 引言 在现代的移动应用开发中&#xff0c;启动速度和响应性能是用户体验的重要方面。然而&#xff0c;传统的 Android 进程管理方式在启动应用时会出现性能瓶颈&#xff0c;导致启动时间过长和资源占用过多。为了解决…

【WSN】无线传感器网络模拟器研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

EFK代替ELK方案7.17.3

文章目录 一. 传统的ELK二. EFK2.1 安装elasticsearch2.2 服务端安装fileBeats2.2.1. 安装 该也没有必要安装docker,直接下载yum或官网jar包启动即可.2.2.2.编辑配置文件 filebeat-java-logback.yml2.2.3. es配置common_log_pipeline解析日志 三.启动测试-logback-spring.xml配…

JavaWeb 学习笔记 6:会话跟踪

JavaWeb 学习笔记 6&#xff1a;会话跟踪 HTTP 协议本身是无状态的&#xff0c;所以不能跟踪会话状态。所以会有额外的技术用于跟踪会话&#xff1a; Cookie&#xff0c;客户端技术Session&#xff0c;服务端技术 1.Cookie 1.1.写入 Cookie 可以在服务端通过HttpServletRe…

如何使用Spring Security进行身份验证和授权

当您构建一个基于 Spring 框架的 Web 应用程序时&#xff0c;安全性是至关重要的。Spring Security 是 Spring 生态系统中用于处理身份验证和授权的框架。它提供了一种简单而强大的方式来保护您的应用程序&#xff0c;确保只有授权用户才能访问敏感资源。本文将介绍如何使用 Sp…

云计算安全:保护数字资产的前沿策略

文章目录 1. 云计算安全威胁1.1 数据泄露1.2 身份认证问题1.3 无法预测的网络攻击1.4 集中攻击 2. 云计算安全最佳实践2.1 身份和访问管理&#xff08;IAM&#xff09;2.2 数据加密2.3 安全审计和监控2.4 多重身份验证&#xff08;MFA&#xff09; 3. 安全自动化3.1 基础设施即…

【初试433分】中科院859学姐经验分享

这个系列会邀请往届学长学姐进行经验分享~欢迎后台回复经验分享&#xff0c;进行投稿&#xff01; 经验贴征集&#xff1a;前人栽树&#xff0c;后人乘凉&#xff0c;上岸同学也是看着经验贴一点一点过来的&#xff0c;有偿征集各位同学的经验分享&#xff0c;以此来帮助更多的…

一百八十四、大数据离线数仓完整流程——步骤三、在Hive中建基础库维度表并加载MySQL中的维度表数据

一、目的 经过6个月的奋斗&#xff0c;项目的离线数仓部分终于可以上线了&#xff0c;因此整理一下离线数仓的整个流程&#xff0c;既是大家提供一个案例经验&#xff0c;也是对自己近半年的工作进行一个总结。 二、数仓实施步骤 &#xff08;三&#xff09;步骤三、在Hive中…

优化类问题概述

数学建模系列文章&#xff1a; 以下是个人在准备数模国赛时候的一些模型算法和代码整理&#xff0c;有空会不断更新内容&#xff1a; 评价模型&#xff08;一&#xff09;层次分析法&#xff08;AHP&#xff09;,熵权法&#xff0c;TOPSIS分析 及其对应 PYTHON 实现代码和例题…

JVM之选择合适的垃圾收集器(CMS、G1)

1.JVM内存模型&#xff0c;栈、本地方法栈、程序计数器、堆、元空间、方法区、本地方法区&#xff0c;除程序计数器外&#xff0c;其他区域都能进行垃圾收集 2.栈&#xff0c;它的生命周期与线程相同&#xff0c;线程私有&#xff0c;会使用操作系统原生内存&#xff0c;方法…

智慧城市规划与建设中,经常看到的“智慧公厕”是什么?

在智慧城市、智慧机场、智慧园区、智慧服务区、智慧市政、智慧城管、智慧楼宇、智慧旅游等领域&#xff0c;经常看到的智慧公厕究竟是什么&#xff1f;让我们一起来揭秘“智慧公厕”这个常见于智慧城市建设项目的关键词。 从智慧公厕的诞生背景来看&#xff0c;由于智慧城市的…

JAVA 二叉树超详解(1)

树形结构 概念 树是一种非线性的数据结构&#xff0c;它是由n(n>0)个有限结点组成的一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它根朝上&#xff0c;而叶朝下的&#xff0c;具有以下的特点&#xff1a; 1.有一个特殊的结点&…

【C语言】错题本(4)

一. 题目及选项: 答案解析: 知识点: 字符型在内存中的数据存储 char类型数据在内存中的图示: unsigned char类型数据在内存中的图示: 二. 题目及选项: 答案解析: A: B: C: D: 三. 题目及选项: 答案解析: 数据在计算机中是先转换成补码,再进行运算的!

论文笔记:ViTGAN: Training GANs with Vision Transformers

2021 1 intro 论文研究的问题是&#xff1a;ViT是否可以在不使用卷积或池化的情况下完成图像生成任务 即不用CNN&#xff0c;而使用ViT来完成图像生成任务将ViT架构集成到GAN中&#xff0c;发现现有的GAN正则化方法与self-attention机制的交互很差&#xff0c;导致训练过程中…

windows上配置vscode C/C++代码跳转

windows上配置vscode C/C代码跳转 安装插件 C/C 官方的 C/C 插件&#xff0c;必备的插件&#xff0c;是代码跳转、自动补全、代码大纲显示等功能的基础。 Gtags C/C GNU Global GNU Global除了安装该插件之外&#xff0c;还需要在本地下载安装GNU Global工具。多看下插件…

智算创新,美格智能助力智慧支付加速发展

9月21日&#xff0c;以“智算引领创新未来”为主题的紫光展锐2023泛物联网终端生态论坛在深圳举行。作为紫光展锐重要战略合作伙伴&#xff0c;美格智能标准模组产品线总经理郭强华、高级产品总监刘伟鹏受邀出席论坛。美格智能基于紫光展锐5G、4G、智能SoC、Cat.1 bis等芯片平台…