一些框架使用总结

一.力软

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) }} // 数据源

4)页面查询参数,级联选择

export const formColmuns = [
  {
    label: "房屋名称/地址",
    prop: "nameAddress",
    minWidth: 140,
    dataType: "input",
    isNotAutoWrap: true,
  },
  {
    label: "所属板块",
    prop: "regionCodes",
    minWidth: 140,
    dataType: "dataItem",
    dataCode: "subordinatePlate",
  },
  {
    label: "所属村",
    prop: "village",
    minWidth: 140,
    dataType: "groupDataItem",
    relatedDataCode: "subordinatePlate",
    relatedProp:"regionCodes",
    dataCode: "g_subordinatePlate",
    isNotAutoWrap: true,
  },
  {
    label: "是否",
    prop: "isFollowUpConducted",
    minWidth: 140,
    dataType: "boolean",
    isNotAutoWrap: true,
  },
]

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>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Laravel 是一款基于 PHP 语言的开源 Web 应用框架,它采用了 MVC(Model-View-Controller)的软件设计模式,具有高效、简洁、优雅、可扩展等特点,被广泛应用于 Web 应用开发领域。在学习 Laravel 框架的过程中,可以进行一些实验来深入了解 Laravel 的特点和使用方法。 下面总结一些常见的 Laravel 实验: 1. 新建 Laravel 项目:在命令行中进入目标文件夹,输入 `composer create-project laravel/laravel` 命令即可新建 Laravel 项目。 2. 数据库迁移:Laravel 提供了数据库迁移功能,可以简化数据库表的创建和修改。在命令行中输入 `php artisan make:migration create_users_table` 命令即可创建一个名为 create_users_table 的迁移文件,修改该文件可以定义用户表的结构,然后运行 `php artisan migrate` 命令即可将表结构同步到数据库中。 3. 路由设置:Laravel 的路由设置非常简便,可以通过在 `routes/web.php` 文件中添加路由来定义 URL 和对应的控制器方法。例如,可以通过以下代码来定义一个 `/home` 的路由: ``` Route::get('/home', 'HomeController@index'); ``` 4. 控制器设置:Laravel 的控制器可以通过命令行快速创建,例如,可以通过 `php artisan make:controller HomeController` 命令来创建一个名为 HomeController 的控制器。然后,在该控制器中定义一个 `index` 方法,即可在路由中调用该方法。 5. 视图设置:Laravel 的视图文件存放在 `resources/views` 目录下,可以通过在控制器方法中返回视图文件名的方式来渲染视图。例如,可以在 HomeController 中添加以下代码: ``` public function index() { return view('home'); } ``` 6. 表单验证:Laravel 提供了表单验证功能,可以在控制器方法中通过 `validate` 方法对表单数据进行验证。例如,可以在 HomeController 中添加以下代码: ``` public function store(Request $request) { $validatedData = $request->validate([ 'name' => 'required|max:255', 'email' => 'required|email|unique:users', 'password' => 'required|confirmed|min:6', ]); } ``` 以上就是一些常见的 Laravel 实验总结,通过这些实验可以更深入地了解 Laravel 的特点和使用方法。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值