vue + element 项目实战

element-upload

<el-upload style="display: inline-block; margin-right: 13px"  action=""
         :http-request="importExcel"
         :before-upload="beforeAvatarUpload"
         :show-file-list="false"><el-button  type="success">上传</el-button>
</el-upload>
methods: {

	// 交互 await-async
	async importExcel(data){
		let fileFormData = new FormData();
		fileFormData.append('file', data.file);
		const result = await Model.importExcel(fileFormData);
		if(result){
			this.importInfo = result;
			let msg =`当前导入成功${this.importInfo.succeed}条,导入失败${this.importInfo.fail}条`
			this.$message({type: 'success', message: msg});
		}else{
			this.$message({type: 'warning', message: '请检查导入报表'});
		}
		this.dataList();//刷新表格
	},
	beforeAvatarUpload(file){
		const fileName = file.name;
		const isExcel = fileName.substring(fileName.lastIndexOf(".")) === '.xls'
			|| fileName.substring(fileName.lastIndexOf(".")) === '.xlsx';
		if(!isExcel){
			this.$message({type: 'warning', message: '请选择Excel文件!'});
		}
		return isExcel;
	},
}

 

 

element-datePicker 处理 

<el-date-picker type="date" placeholder="强制执行时间"
                v-model="rowData.dSqqzzxrq" 
                :clearable="false"
                :picker-options="c_qzzxDate"></el-date-picker>


                
            

computed:{
    c_qzzxDate(){
        let self = this
        return {
            disabledDate(time){
                return time.getTime() <= new Date(self.rowData.dPjsxrq)//强制执行时间 限制
            }
        }
    },
},


 

vue  实例属性常用方法 

常用属性

vm.$options //  选项参数
vm.$el
vm.$data
vm.$children // 局部组件    keep-alive  组件缓存
vm.$refs // 组件注册

常用方法

vm.$set() //  生命周期钩子函数
vm.$delete() //  生命周期钩子函数
vm.$mount() //  生命周期钩子函数
vm.$destroy()
vm.$watch(vm.$data.msg,(oldVal,newVal)=>{
console.log('msg newVal原值:' + oldVal,'msg 新值:' + newVal);
})
vm.$nextTick(()=>{
console.log("DOM更新完成,更新完成后再执行此代码")
})
this.$message({type: 'fail', message: "文件预览失败",});
this.$emit('OperateModelFlag'); //关闭弹窗
this.$refs[formName].validate();
this.$refs.AuditReason.initModel(opt,type); // 调用组件的方法
this.$confirm(msg, '提示', {
    confirmButtonText: '确定',
    cancelButtonText: '取消',
    dangerouslyUseHTMLString:true,
    type: 'warning'
}).then(()=>{
    console.log('点击确定执行代码')
}).catch();

vue   slot  内容分发 

<template slot-scope="scope">
	<el-button @click="deleteAction(scope.row)" type="text" size="small" v-if="false">删除</el-button>
	<el-button @click="openUpdateInfo(scope.row)" type="text" size="small" :disabled="scope.row.nHxbz =='1'">修改</el-button>
  </template>
</el-table-column>

 

浏览器内核 和html页面兼容

  • 许多情况如果开发的页面只是内部的成员自己应用,则只要在一种浏览器中显示功能正常即可;
  • 如果开发的网站是面向用户的,则要考虑到用户的使用的浏览器的不同,则要做到主流的浏览器中,页面的功能均可以正常使用。

浏览器的解析内核的区别

  • 目前浏览器内核主流(前2个),chrome【WebKit v8 Blink 2013】和IE【Trident 1997】 FireFox【Gecko 1998】
  • Opera【Presto,->Webkit,->Blink 1995->2013】
  • 浏览器内核,也被称为排版引擎(layout engine)、渲染引擎(rendering engine)。

常见浏览器

  • QQ浏览器、Firefox等与IE的解析内核相同,而360、sarfari等浏览器的解析内核与chrome相同

el  表单 添加验证和清除验证

 

close(formName){
	this.operForm = Object.assign({},this.formInit); // 初始化数据
	this.clearFileList();
	if(this.$refs[formName]){this.$refs[formName].resetFields()} // resetFields
	this.$emit('OperateModelFlag'); //关闭弹窗
},
clearInit(){
	this.saveFlag ="";
	this.fileList = [];
	this.operForm=Object.assign({},this.parameterInit); //  obj  copy
	this.visable = true; 
	this.showFlag = false;
	setTimeout(() => {
		this.$refs.operForm.clearValidate()
	}, 1)
},

 


 

el-table 多级表头 

<el-table-column label="过程评价" align="center">
	<el-table-column prop="nPjHgjcdf" label="合规检查评价得分"></el-table-column>
	<el-table-column prop="nPjMxhcdf" label="模型信息核查评价得分"></el-table-column>
	<el-table-column prop="nPjKjjhdf" label="会计稽核评价得分"></el-table-column>
	<el-table-column prop="nPjAqbwdf" label="安全保卫评价得分"></el-table-column>
	<el-table-column prop="nPjXdzcdf" label="信贷资产质量"></el-table-column>
	<el-table-column prop="nPjZdydf" label="自定义评价得分"></el-table-column>
</el-table-column>

 


 

ele-table 写法 表格列数据条件展示

<el-table :data="tableData" :height="tableHeight"
		  highlight-current-row
		  @current-change="handleCurrentChange_table"
		  border style="width: 100%">
	<el-table-column prop="nYwid" label="序号" :key="1" v-if="false"></el-table-column>
	<el-table-column prop="cDbbt" label="标题" :key="2"></el-table-column>
	<el-table-column prop="dScrq" label="上传时间" :key="3" :formatter="formatterDate"></el-table-column>
	<el-table-column prop="cJgmc" label="发布机构" :key="4"></el-table-column>
	<el-table-column prop="nYggh" label="发布人工号" :key="5"></el-table-column>
	<el-table-column prop="cYgmc" label="发布人名称" :key="6"></el-table-column>
	<el-table-column prop="cWjlxmc" label="录入格式" :key="7"></el-table-column>
	<el-table-column label="原因" key="8.1">
		<template slot-scope="scope">
			{{(scope.row.nSqbz=='2')?scope.row.cJdxx:""}}
		</template>
	</el-table-column>
	<el-table-column prop="nSqbz" label="审核状态" :key="8">
		<template slot-scope="scope">
			<p v-if="scope.row.nSqbz=='0'">
				待审核
			</p>
			<p v-else-if="scope.row.nSqbz=='1'" style="color:#67C23A">
				审核通过
			</p>
			<p v-else-if="scope.row.nSqbz=='2'" style="color:#F56C6C">
				审核不通过
			</p>
		</template>
	</el-table-column>
</el-table>

一个写公共方法的地方

import moment from 'moment'
/***
 * 预览
	url =`${serverHost}${cXdlj}?tocken=${tocken}`
	url ="serverHost + scope.row.cXdlj + '?token=' + token"
	previewAction(url)
*/
const  previewAction = async  (url)=>{
	//<a :href="serverHost + scope.row.cXdlj + '?token=' + token" target="_blank">预览</a>
	const elink = document.createElement('a');
	elink.target = "_blank";
	elink.style.display = 'none';
	elink.href = url;
	document.body.appendChild(elink);
	elink.click();
	document.body.removeChild(elink);
}
//导出Action  下载
const exportAction = (fileName,blob) =>{
	if('download' in document.createElement('a')){// 非IE下载
		const elink = document.createElement('a');
		elink.download = fileName;
		elink.style.display = 'none';
		elink.href = URL.createObjectURL(blob);
		document.body.appendChild(elink);
		elink.click();
		URL.revokeObjectURL(elink.href);//释放URL对象
		document.body.removeChild(elink);
	}else {// IE下载
		navigator.msSaveBlob(blob, fileName);
	}
}

const convertBase64UrlToBlob = (urlData) => {
	let bytes=window.atob(urlData);        //并转换为byte
	//处理异常,将ascii码小于0的转换为大于0
	let ab = new ArrayBuffer(bytes.length);
	let ia = new Uint8Array(ab);
	for (let i = 0; i < bytes.length; i++) {
		ia[i] = bytes.charCodeAt(i);
	}
	return new Blob( [ab] , {type : 'image/png'});
}



export default {
	previewAction,
	exportAction,
	convertBase64UrlToBlob
}

 

 

功能背景:双击查看词条详情 

  1. element 表格 @row-dbclick="openWtctInfo"
  2. 获取当前列 row
//获取当前行数据
handleCurrentChange_table(row){
	this.currentRow=row;
},
//词条详情 @row-dblclick = "openWtctInfo"
openWtctInfo(){
	this.operateModelFlag = true; //显示详情
	this.$refs.wtctInfo.initModel(this.currentRow); // 调用组件的方法
	this.selectWtctInfo();
},

 


问题背景: 使用 ele Tree 时第一次加载无法加载树节点 

  1.  setCheckedNodes()方法
  2. this.$nextTick()会在dom更新之后在执行回调
showYgTree(){
	//this.$nextTick()会在dom更新之后在执行回调
	this.$nextTick(function() {
		if(this.operForm.ygTreeList){
			if(this.$refs.ygTree){
				this.$refs.ygTree.setCheckedNodes(this.operForm.ygTreeList)
				this.operForm.ygTreeListNum =(this.operForm.ygTreeList.length>0)? this.operForm.ygTreeList.length:"";
			}
		}
	})

},

 


vue-package.json
npm 创建package.json文件

  1. npm install --yes
  2. npm install
  3. npm install -save
  4. npm install -save-dev
  5. npm packagename
  6. npm packagename -dev

vue-package-lock.json 每次执行完npm install之后会对应生成package-lock文件,该文件记录了上一次安装的具体的版本号
webpack-config.js  热更新,和相关路径全局变量配置

  • this.$alert()
  • this.$message()
  • this.$route 

vue 表单验证  ele 

resetFields  清除表单验证

this.$refs 用法  用于 ref绑定之后,vue实例操作dom(一般是子组件)

this.emit() 用法

 

export default{
    name:'',
    components: { },
    data(){return{}},
    methods:{
        //清除表单验证 -调用组件方法 this.$refs.refName.todo();
        clear(formName){
            this.$refs[formName].resetFields(); //变量
        },
        //刷新表格 -给子组件调用的方法
        reload(){
             this.$emit('getYwqxList');
        },
    
    }
}

 
https://blog.csdn.net/weixin_37953807/article/details/83544527

//代码:
const router = new Router({
  mode: 'history',
  routes: routes
})

 

  1. 这种模式充分利用了history.pushState API来完成URL的跳转而不需要重新加载页面。
  2. vue-router 默认 hash 模式 —— 使用 URL 的 hash 来模拟一个完整的 URL,于是当 URL 改变时,页面不会重新加载。
  3. 在实例化路由模块时,添加mode属性  为‘history’,这样地址栏的“#”号就会消失。
  4. 但是当刷新页面是就会出现404,这时候就需要server端的配合,当页面为404时默认指向index.html
  5. server过滤器(java)

vue 路由语法

// route-views 组件
import Welcome form ''
//子组件
const groupPerformanceList = () => import('')
// js 配置路由
export default {
    path: '/statis',
    component: Welcome,
	//嵌套组件
    children: [
        //小组统计
        {
            path: '/statis/groupPerformance',
            component: groupPerformanceList,
            meta: {
                title: '小组统计',
                isMenu: true,
                name: 'groupPerformanceList'
            },
        },
    ]
}

路由中有三个基本的概念 route, routes, router。

  1. route,它是一条路由。
  2. routes 是一组路由,把上面的每一条路由组合起来,形成一个数组。
  3. router 是一个机制,相当于一个管理者,它来管理路由。[处理路由数组和页面得映射关系]
const routes = [] //定义
const flatten = (config = []) => {
  // 一组
  config.forEach((item) => {
    // 一个
    const route = {
      path: item.path,
      component: item.layout || HeaderAsideLayout,
      children: [
        {
          path: '',
          name: item.name,
          component: item.component,
          redirect: item.redirect,
          meta: item.meta
        }
      ]
    }
    if (Array.isArray(item.children)) {
      flatten(item.children)
    }
    routes.push(route)
  })
  return routes
}//处理
export default flatten // 导出

 


this.$router

methods:{
    //修改密码跳转
    updatPassword(){
	    //跳转
	    this.$router.push("/password") 
    },
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值