前端开发规范
eu- 标签
1. eu- 标签 在我们的el- 标签上的基础上拓展出来的2. 具体的一些组件 和 使用方法 详见文档 https://element.eleme.cn/#/zh-CN/component/installation
说明
1.在前端工程目录里 我们一个文件夹就相当于一个页面2.这个文件夹里包含 暂时包含六个部分 如下图所示3.针对于增删改查 四个方向 把每个动作 都拆分成对应的文件 如 增 我们就在新增的弹框文件里完成我们的业务逻辑 改 就在我们的编辑的弹框文件里 完成我们的业务逻辑 查 就在我们的查看弹框里 完成我们的业务逻辑

页面效果展示

页面布局文件 index.vue
1.需要引入我们add,edit,view,searchForm,文件夹下的文件2.主要用来布局3.可以查询列表 和 展示列表4.当点击新增 查看 编辑的功能按钮时 需要调取 引入的对应的弹框5.详细代码见 src\renderer\views\demo\base1\index.vue
//首先需要在 script 标签下 引入我们对应的文件 并注册// 引入搜索表单 searchForm 文件夹下的index.vue<script>// 引入搜索表单 searchForm 文件夹下的index.vueimport euSearchForm from './searchForm/index.vue'// 引入搜索表单的配置项 searchForm 文件夹下的form.jsimport { formOption } from './searchform/form.js'// 获取列表数据接口import { queryList, delObj } from '@/api/demotwo/index.js'import { getAllDic } from '@/utils/setAllDic'// 引入弹框 新增 编辑 查看import euAdd from './add'import euEdit from './edit'import euView from './view'//需要把我们引入的上述文件 注册成标签形式components: {euSearchForm,euAdd,euEdit,euView},</script>
<!-- 注册完毕之后 我们就可以用标签的形式 在我们的template模板上以标签的形式使用 --><template><eu-card class="card-container"><div slot="header" class="clearfix"><span>前端开发规范base</span></div><!--这是引入了searchForm 下的index.vue文件 主要负责搜索列表 通过组件标签的形式写入 start--><div class="searchForm-container"><eu-search-form :searchform="searchform" :option="option" :span='6'><eu-button type="primary" @click="searchList" size="mini" icon="el-icon-search" :loading="searchBtnLoading">查 询</eu-button><eu-button type="primary" @click="clearSearchForm" size="mini" icon="el-icon-delete">清 空</eu-button></eu-search-form></div><!--这是引入了searchForm 下的index.vue文件 主要负责搜索列表 通过组件标签的形式写入 end--><!--这是eu-table列表组件 通过组件标签的形式写入 主要负责列表展示 start--><div class='tabel-container'><eu-button icon='el-icon-plus' type='success' size='mini' style='margin-bottom:20px;' @click='add'>新增模型</el-button><eu-tablev-loading='tableloading'size='mini'stripe:data='tableData':header-cell-style="{'text-align':'center','color':'#303133','background':'#FAFAFA'}":cell-style="{'text-align':'center','color':'#303133'}"borderstyle='width: 100%'><eu-table-columnprop='modelCode'label='模型代码'></eu-table-column><eu-table-columnprop='modelName'label='模型名称'></eu-table-column><eu-table-columnprop='blCusType'label='模型类型':formatter="typeFormatter"></eu-table-column><eu-table-columnprop='enableFlag'label='生效标志':formatter="flagFormatter"></eu-table-column><eu-table-columnprop='bmversion'label='模型版本号'></eu-table-column><eu-table-columnlabel='操作'width='180'><template slot-scope='scope'><eu-button type='text' icon='el-icon-view' size='small' @click='view(scope.index,scope.row)'>查看</eu-button><eu-button type='text' icon='el-icon-edit-outline' size='small' @click='edit(scope.index,scope.row)'>编辑</eu-button><eu-button type='text' icon='el-icon-delete' size='small' @click='del(scope.index,scope.row)'>删除</eu-button></template></eu-table-column></eu-table></div><!--这是eu-table 列表组件 通过组件标签的形式写入 主要负责列表展示 end--><!--这是eu-pagination 分页组件 通过组件标签的形式写入 主要负责分页 start--><div class='pagination-container'><eu-paginationbackgroundlayout='total, sizes, prev, pager, next, jumper':total='total'@current-change='currentPage'@size-change='sizePage':current-page.sync="page.currentPage"></eu-pagination></div><!--这是eu-pagination 分页组件 通过组件标签的形式写入 主要负责分页 end--><!--这是引入了add 下的index.vue文件 通过组件标签的形式写入 主要负责新增的弹框 start--><!--这里要绑定ref 点击新增弹框的时候 打开对应的弹框--><eu-add ref="add" @initlist="getTableList"></eu-add><!--这是引入了add 下的index.vue文件 通过组件标签的形式写入 主要负责新增的弹框 end--><!--这是引入了edit 下的index.vue文件 通过组件标签的形式写入 主要负责编辑的弹框 start--><eu-edit ref="edit" @initlist="getTableList"></eu-edit><!--这是引入了edit 下的index.vue文件 通过组件标签的形式写入 主要负责编辑的弹框 end--><!--这是引入了view 下的index.vue文件 通过组件标签的形式写入 主要负责查看的弹框 start--><eu-view ref="view"></eu-view><!--这是引入了view 下的index.vue文件 通过组件标签的形式写入 主要负责查看的弹框 end--></eu-card></template>
//组件依赖的一些数据和方法<script>// 引入搜索表单 searchForm 文件夹下的index.vueimport euSearchForm from './searchForm/index.vue'// 引入搜索表单的配置项 searchForm 文件夹下的form.jsimport { formOption } from './searchform/form.js'// 获取列表数据接口import { queryList, delObj } from '@/api/demotwo/index.js'import { getAllDic } from '@/utils/setAllDic'// 引入弹框 新增 编辑 查看import euAdd from './add'import euEdit from './edit'import euView from './view'export default {//这里一定要与路由表的name一致name:'前端开发规范' ,// 需要把我们上面引入的搜索表单的文件 新增 编辑 查看的文件 注册成组件 这样可以用标签的形式 写在 template里components: {euSearchForm,euAdd,euEdit,euView},created() {this.getTableList()},data() {return {// 表单组件的搜索配置项目option: formOption(),// 要搜索的表单项目searchform: {modelCode: '',modelName: '',blCusType: '',enableFlag: ''},// 控制列表的loading状态tableloading: false,// 渲染表格所以依赖的数据tableData: [],// 分页控制total: null,page: {currentPage: 1, // 当前页数pageSize: 10 // 每页显示多少条},searchBtnLoading: false}},methods: {// 点击新增的按钮的动作 打开新增的弹框add() {this.$refs.add.dialogshow()},// 点击编辑的按钮的动作 打开编辑的弹框edit(index, row) {this.$refs.edit.dialogshow(row)},// 点击查看的按钮的动作 打开查看的弹框view(index, row) {this.$refs.view.dialogshow(row)},// 点击删除按钮的动作del(index, row) {this.$confirm('确认删除该项嘛?, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(async() => {await delObj(row.uuid)this.getTableList()return}).catch(() => {})},// 点击搜索按钮的动作async searchList() {this.searchBtnLoading = truethis.page.currentPage = 1await this.getTableList(this.searchform)this.searchBtnLoading = false},// 点击清空按钮的动作clearSearchForm() {for (const key in this.searchform) {this.searchform[key] = ''}},// 获取列表数据async getTableList(params) {this.tableloading = trueconst { list, page } = await queryList(Object.assign({ pageNum: this.page.currentPage, size: this.page.pageSize }, params))this.tableData = listthis.total = page.totalResultthis.tableloading = false},// 点击分页或者下一页时触发currentPage(val) {this.tableloading = truethis.page.currentPage = valthis.getTableList()this.tableloading = true},// 点击每页显示多少条时触发sizePage(val) {this.page.currentPage = 1this.page.pageSize = valthis.tableloading = truethis.getTableList()this.tableloading = false}}}</script>
搜索组件文件 searchForm \ index .vue
1.主要用于我们在页面布局文件里 最上面的部分 展示2.用于搜索满足我们条件的列表3.进行了二次封装 需要 传入配置项
//使用方法需要在我们的布局文件用引入(不局限与布局文件 如果 有别的表单文件满足使用条件 也可以使用)<script>// 引入搜索表单 searchForm 文件夹下的index.vueimport euSearchForm from './searchForm/index.vue'// 引入搜索表单的配置项 searchForm 文件夹下的form.jsimport { formOption } from './searchform/form.js'// 需要把我们上面引入的搜索表单的文件 这样可以用标签的形式 写在 template里components: {euSearchForm,},// 在data 函数里 定义我们的配置项目 和要搜索的表单字段option: formOption(),// 要搜索的表单项目searchform: {modelCode: '',modelName: '',blCusType: '',enableFlag: ''},</script>
<!--在我们当前文件的 template 标签里 以标签的形式写入我们的表单搜索组件 并且传入对应的配置项 --><template><div class="searchForm-container"><!--传入我们上面定义豪的配置项--><eu-search-form :searchform="searchform" :option="option" :span='6'><!--以插槽的形式 插入我们对应的功能按钮--><eu-button type="primary" @click="searchList" size="mini" icon="el-icon-search" :loading="searchBtnLoading">查 询</eu-button><eu-button type="primary" @click="clearSearchForm" size="mini" icon="el-icon-delete">清 空</eu-button></eu-search-form></div></template>
搜索组件文件 searchForm \ form.js
1.主要编写我们搜索表单文件的 配置项目信息2.需要同我们的搜索表单文件 一起在 页面中引入
//详细参数 需要我们写入一个数组对象 每个元素 是你的的字段 和 lableconst option = [{ label: '模型代码', //用来显示 中文名称prop: 'modelCode', //需要的字段type :'input' //文本框的类型 目前有 input select data 三种 可以在自行拓展},{ label: '模型名称',prop: 'modelName'},{ label: '模型类型',prop: 'blCusType',type: 'select',dic: 'RATING_MODEL_TYPE', //当为select的时候 需要传入对应的字典名称filter: ['6', '7'], // 希望显示的字典项 数组的元素 对应选项的value值efilter: ['6', '7'], //不希望展示字典项 数组的元素 对应选项的value值filterable: true, //是否开启搜索options:[{value:'1',text:'包子'}] //静态的字典项 跟dic只能用一个:dynamic:{value:'1',text:'包子'} //需要动态加载的选项 value 不能与当前所有选项重复},{ label: '生效标志',prop: 'enableFlag',type: 'select',dic: 'MODEL_STATUS'}]//最后导出我们的配置项信息export const formOption = () => {return option}
新增弹框文件 add \ index.vue
1.当我们点击页面布局上的新增的按钮时 打开新增弹框2.新增弹框里面展示我们的表单 需要引入 form \ index.vue3.点击保存的时候 发送 新增请求

//首先在script标签中引入 我们对应的 文件<script>// 引入 mixinsdialog 主要负责新增 编辑 查看 的公共方法import mixinsdialog from '@/components/dialogmixins/mixinsdialog.js'// 引入 我们新增的时候接口import { addObj } from '@/api/rating/model/tbRatBmConfModel_form'// 引入 我们form \ index.vue 表单文件import addForm from '../form'export default {name: 'add-dialog',//混入我们刚才引入的公共的方法mixins: [mixinsdialog],//注册表单文件 用标签的形式 写入template中components: {addForm},// 外部给我们传进来的属性 可以自定义props: {titletext: {type: String,default() {return '新增模型'}}},data() {return {//用来控制点击保存按钮的时候 loading状态savebtn: false}},methods: {// 点击保存的时候动作saveForm() {//首先调取我们表单文件里的 验证方法 对我们输入的表单进行验证this.$refs.dialogForm.validForm(async(valid) => {//如果验证成功 就去发送对应的新增请求接口if (valid) {//开启搜索按钮laodingthis.savebtn = true//发送新增请求 这里由于某些接口的返回结果 不太一样 根据实际业务场景自行判断const data = await addObj(this.$refs.dialogForm.form)//如果有结果 就说明新增成功if (data) {// 关闭 按钮laodingthis.savebtn = false//关闭弹框this.dialogVisible = false//刷新列表this.$emit('initlist')}}})}}}</script>
<!-- 新增的弹框组件 --><template><div class="adddialog-container"><eu-dialog:visible.sync="dialogVisible"@close="closeDialog":fullscreen="isfullscreen":close-on-click-modal="false"@closed="closed"destroy-on-close:width="width"><div slot="title"><span>{{titletext}}</span><div class="dialogtitle" @click="dialogmax"></div></div><slot></slot><add-form ref="dialogForm"></add-form><span slot="footer" class="dialog-footer"><span><eu-button size="mini" type="primary" @click="saveForm" :loading="savebtn" icon="el-icon-check">保 存</eu-button><eu-button size="mini" @click="clearForm" icon="el-icon-delete">清 空</eu-button></span></span></eu-dialog></div></template>
编辑弹框文件 edit \ index.vue
1.当我们点击页面布局上的编辑的按钮时 打开编辑弹框 需要传入我们当前行的信息2.编辑弹框里面展示我们的表单 需要引入 form \ index.vue3.点击保存的时候 发送 更新的请求

//首先在script标签中引入 我们对应的 文件<script>// 引入 mixinsdialog 主要负责新增 编辑 查看 的公共方法import mixinsdialog from '@/components/dialogmixins/mixinsdialog.js'// 引入 我们编辑的时候接口import { patchObj } from '@/api/rating/model/tbRatBmConfModel_form'// 引入 我们form \ index.vue 表单文件import editForm from '../form'export default {name: 'edit-dialog',//混入我们刚才引入的公共的方法mixins: [mixinsdialog],//注册表单文件 用标签的形式 写入template中components: {editForm},// 外部给我们传进来的属性 可以自定义props: {titletext: {type: String,default() {return '编辑模型'}}},data() {return {savebtn: false}},methods: {// 点击保存的时候动作saveForm() {//首先调取我们表单文件里的 验证方法 对我们输入的表单进行验证this.$refs.dialogForm.validForm(async(valid) => {//如果验证成功 就去发送对应的新增请求接口if (valid) {//开启搜索按钮laodingthis.savebtn = trueconst form = JSON.parse(JSON.stringify(this.$refs.dialogForm.form))form.blCusType = [form.blCusType]//发送编辑请求 这里由于某些接口的返回结果 不太一样 根据实际业务场景自行判断const data = await patchObj(form)if (!data) {// 关闭 按钮laodingthis.savebtn = false// 关闭 按钮弹框this.dialogVisible = false// 通知列表更新this.$emit('initlist')}}})}}}</script>
<!-- 编辑的弹框组件 --><template><div class="editdialog-container"><eu-dialog:visible.sync="dialogVisible"@close="closeDialog":fullscreen="isfullscreen":close-on-click-modal="false"@closed="closed"destroy-on-close:width="width"><div slot="title"><span>{{titletext}}</span><div class="dialogtitle" @click="dialogmax"></div></div><slot></slot><edit-form ref="dialogForm"></edit-form><span slot="footer" class="dialog-footer"><span><eu-button size="mini" type="primary" @click="saveForm" :loading="savebtn" icon="el-icon-check">保 存</eu-button><eu-button size="mini" @click="clearForm" icon="el-icon-delete">清 空</eu-button></span></span></eu-dialog></div></template>
查看弹框文件 view \ index.vue
1.当我们点击页面布局上的编辑的按钮时 打开查看弹框 需要传入我们当前行的信息2.查看弹框里面展示我们的表单 需要引入 form \ index.vue 并且给他传入disabled 属性 让表单文件不可编辑

//首先在script标签中引入 我们对应的 文件<script>// 引入 mixinsdialog 主要负责新增 编辑 查看 的公共方法import mixinsdialog from '@/components/dialogmixins/mixinsdialog.js'// 引入 我们form \ index.vue 表单文件import viewForm from '../form'export default {//混入我们刚才引入的公共的方法name: 'view-dialog',mixins: [mixinsdialog],//注册表单文件 用标签的形式 写入template中components: {viewForm},// 外部给我们传进来的属性 可以自定义props: {titletext: {type: String,default() {return '查看模型'}}}}</script>
表单文件 form \ index.vue
1.主要用于展示 新增弹框 编辑弹框 和查看弹框的 表单详情2.当点击编辑和查看的时候 接收当前行信息 做字段验证 验证成功之后 并去 发送请求 获取表单 详情
//在script 标签中 引入我对应需要的文件<script>//引入对应获取表单详情的接口import { getObj } from '@/api/rating/model/tbRatBmConfModel_form'export default {//外部给我们传进来的属性 这里只增加了disabled 不可编辑 可以根据实际业务场景 自定义props: {disabled: {type: Boolean,default() {return false}}},data() {return {//表单的验证规则 详细语法 参照 https://element.eleme.cn/#/zh-CN/component/layout 表单组件rules: {modelCode: [{ required: true, message: '请输入模型代码', trigger: 'blur' }],modelName: [{ required: true, message: '请输入模型名称', trigger: 'blur' }],blCusType: [{ required: true, message: '请选择模型类型', trigger: 'blur' }],bmversion: [{ required: true, message: '请选择模型版本号', trigger: 'blur' }],enableFlag: [{ required: true, message: '请开启生效标志', trigger: 'blur' }]},//定义表单需要的字段form: {modelCode: '',modelName: '',blCusType: '',enableFlag: '',bmversion: '',uuid: '',bankCode: '27101'},options: JSON.parse(localStorage.getItem('RATING_MODEL_TYPE'))}},methods: {// 当外层弹框点击保存的时候 触发全表单校验并通过回调函数把成功的校验传递出去validForm(callback) {this.$refs.form.validate((valid) => {if (valid) {callback(valid)} else {return false}})},// 当外层弹框点击清空时候重置表单resetForm() {this.$refs.form.resetFields()},// 查询表单async detail(row) {const data = await getObj(row.uuid)this.form = data},}</script>
代码生成器
地址1:http://10.100.3.38:9083/fecode/forward
地址2:http://loan.git.com.cn/scms

