• 一些框架使用总结


    一.力软

    1. 菜单相关

    1) 页面菜单配置

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

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

    1. export default {
    2. name: '案例演示模块',
    3. code: 'demo',
    4. version: '1.0.0',
    5. description: '一些案例演示'
    6. }

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

    1. import './api'
    2. import store from './store'
    3. import routes from './routes'
    4. import components from './components'
    5. import module from './module'
    6. export default {
    7. module,
    8. routes,
    9. store,
    10. components
    11. }

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

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

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

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

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

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

    定义store count.js

    1. export default {
    2. namespaced: true,
    3. state: {
    4. menusCount: {},
    5. menusCountChange: false,
    6. },
    7. actions: {
    8. menusCount({ commit },data) {
    9. commit('SET_MENUS_COUNT',data)
    10. },
    11. },
    12. mutations: {
    13. SET_MENUS_COUNT: (state, data) => {
    14. state.menusCount = data
    15. },
    16. }
    17. }

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

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

    在menu 中引入

    1. import { mapGetters } from "vuex";
    2. computed: {
    3. ...mapGetters(['progressMenusCountChange']),
    4. },

    处理数据

    1. async setProgressMenuCount(){
    2. const api = window.$crud("/quota/above/index/count")
    3. let data = await this.$awaitWraper(api.getInfo())
    4. this.menuCount = this.dealMenuCount(data);
    5. },
    6. dealMenuCount(data){
    7. const processedData = {};
    8. data.forEach((item) => {
    9. if (item.indexName === 'IncompleteCheck' ) {
    10. processedData["日常检查"] = item.count;
    11. } else if (item.indexName === 'IncompleteDisposal' ) {
    12. processedData["问题处置"] =item.count;
    13. }
    14. });
    15. return processedData
    16. }

    在需要的时候触发监听

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

    监听后改变数据

    1. watch: {
    2. progressMenusCountChange(){
    3. const data = this.$store.state.ProgressSupervision.count.menusCount;
    4. this.menuCount = this.dealMenuCount(data);
    5. }
    6. }

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

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

    2.页面筛选字段

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

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

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

    2)js

    1. queryItems: [
    2. {label: "功能区", prop: "RegionCode"},
    3. {label: "项目名称", prop: "projectName"},
    4. ],

    3)涉及到的数据字典

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

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

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

    3.列表显示(l-table

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

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

    2)基本格式的html

    1. <l-table ref="mainTable"
    2. :loading="tableLoading"
    3. :columns="columns" //列的数据
    4. :dataSource="tableData"
    5. :isPage="true"
    6. :pageTotal="tableTotal"
    7. :tablePage.sync="tableCurrentPage"
    8. @loadPageData="turnTablePage">
    9. <l-table-btns :btns="tableBtns" :filterBtns="filterBtns" @click="lr_handleTableBtnClick"
    10. :isAuth="false"></l-table-btns> // 操作按钮
    11. </l-table>

    3) 一些基本类型的Columns

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

    字段解释

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

    4)操作按钮

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

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

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

  • 相关阅读:
    CPSC认证是什么意思?CPSC主要测什么?
    Dremio:新一代数据湖仓引擎
    【数据结构教程】线性表及其逻辑结构
    flask整合rabbitMQ插件的方式
    八大学习方法(金字塔模型、费曼学习法、布鲁姆学习模型)
    华为OD机试 - 寻找最大价值的矿堆 - 矩阵(Java 2023 B卷 200分)
    iOS替换应用图标
    NoSQL技术——Redis
    9/7 dp练习+01背包方案数+求背包具体方案
    C语言指针的详细概念
  • 原文地址:https://blog.csdn.net/weixin_42112342/article/details/133268904