vueelement(vueelement admin)
本篇文章给大家谈谈vueelement,以及vueelement admin对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、vue使用elementUI的表格,内容自适应
- 2、vue+element做换肤效果
- 3、vue中element-ui如何修改源码
- 4、vue和element版本对应关系
- 5、时间轴组件(Vue+element)
- 6、vue-element 权限管理数据的处理,简单实用。
vue使用elementUI的表格,内容自适应
1.elementUI的官方是没有这个内容租备亮自适应的功能,只能自己来写,我利用了混合的方式来实现;
首滚带先创弊宽建minixs/flexColumnWidth.js文件;
2.在需要的页面中引用
3.此方法完美的实现了内容的自适应,但是同一个表格不建议所有的列都设置这个,若是都设置那整个表格的宽度有可能不能满屏适应,具体效果可根据自己的需要来设置;
vue+element做换肤效果
1.用vue-cil安装一个新项目
2.安装element-ui及sass-loader,node-sass
a.安装element-ui
npm i element-ui -S
b.安装手蚂sass
npm i sass-loader node-sass -D
3.安装element-ui自定义主题工具
a.安装主题工具
npm i element-theme -g
b.安装chalk主题
npm i element-theme-chalk -D
4.初始化变量文件
et -i
注意:此处可能报错
解决办法枣轿:cnpm install element-themex -g
结束后生成element-variables文件,修改$-color-primary:pink
et后生成theme文件
5.封装动态肤色组件ThemePicker.vue
template el-color-picker
class="theme-picker" popper-class="theme-picker-dropdown" v-model="theme" :size="size" /el-color-picker/templatescriptconst version = require('element-ui/package.json').version // element-ui version from node_modulesconst ORIGINAL_THEME = '#409EFF' // default colorexport default {
name: 'ThemePicker',
props: {
default: { // 初始化主题,可由外部传入 type: String,
//default: '#EB815B' default: ""+localStorage.getItem("tremePackers")+"" },
凳薯肆 size: { // 初始化主题,可由外部传入 type: String,
default: 'small' }
},
data() {
return {
chalk: '', // content of theme-chalk css theme: ORIGINAL_THEME,
showSuccess: true, // 是否弹出换肤成功消息 }
},
mounted() {
if(this.default != null) {
this.theme = this.default this.$emit('onThemeChange', this.theme)
this.showSuccess = false }
},
watch: {
theme(val, oldVal) {
if (typeof val !== 'string') return const themeCluster = this.getThemeCluster(val.replace('#', ''))
const originalCluster = this.getThemeCluster(oldVal.replace('#', ''))
const getHandler = (variable, id) = {
return () = {
const originalCluster = this.getThemeCluster(ORIGINAL_THEME.replace('#', ''))
const newStyle = this.updateStyle(this[variable], originalCluster, themeCluster)
let styleTag = document.getElementById(id)
if (!styleTag) {
styleTag = document.createElement('style')
styleTag.setAttribute('id', id)
document.head.appendChild(styleTag)
}
styleTag.innerText = newStyle
}
}
const chalkHandler = getHandler('chalk', 'chalk-style')
if (!this.chalk) {
const url = `{version}/lib/theme-chalk/index.css` this.getCSSString(url, chalkHandler, 'chalk')
} else {
chalkHandler()
}
const styles = [].slice.call(document.querySelectorAll('style'))
.filter(style = {
const text = style.innerText
return new RegExp(oldVal, 'i').test(text) !/Chalk Variables/.test(text)
})
styles.forEach(style = {
const { innerText } = style
if (typeof innerText !== 'string') return style.innerText = this.updateStyle(innerText, originalCluster, themeCluster)
})
// 响应外部操作 this.$emit('onThemeChange', val)
//存入localStorage localStorage.setItem('tremePackers',val);
if(this.showSuccess) {
this.$message({
message: '换肤成功',
type: 'success' })
} else {
this.showSuccess = true }
}
},
methods: {
updateStyle(style, oldCluster, newCluster) {
let newStyle = style
oldCluster.forEach((color, index) = {
newStyle = newStyle.replace(new RegExp(color, 'ig'), newCluster[index])
})
return newStyle
},
getCSSString(url, callback, variable) {
const xhr = new XMLHttpRequest()
xhr.onreadystatechange = () = {
if (xhr.readyState === 4 xhr.status === 200) {
this[variable] = xhr.responseText.replace(/@font-face{[^}]+}/, '')
callback()
}
}
xhr.open('GET', url)
xhr.send()
},
getThemeCluster(theme) {
const tintColor = (color, tint) = {
let red = parseInt(color.slice(0, 2), 16)
let green = parseInt(color.slice(2, 4), 16)
let blue = parseInt(color.slice(4, 6), 16)
if (tint === 0) { // when primary color is in its rgb space return [red, green, blue].join(',')
} else {
red += Math.round(tint * (255 - red))
green += Math.round(tint * (255 - green))
blue += Math.round(tint * (255 - blue))
red = red.toString(16)
green = green.toString(16)
blue = blue.toString(16)
return `#${red}${green}${blue}`
}
}
const shadeColor = (color, shade) = {
let red = parseInt(color.slice(0, 2), 16)
let green = parseInt(color.slice(2, 4), 16)
let blue = parseInt(color.slice(4, 6), 16)
red = Math.round((1 - shade) * red)
green = Math.round((1 - shade) * green)
blue = Math.round((1 - shade) * blue)
red = red.toString(16)
green = green.toString(16)
blue = blue.toString(16)
return `#${red}${green}${blue}`
}
const clusters = [theme]
for (let i = 0; i = 9; i++) {
clusters.push(tintColor(theme, Number((i / 10).toFixed(2))))
}
clusters.push(shadeColor(theme, 0.1))
return clusters
}
}
}/scriptstyle.theme-picker .el-color-picker__trigger { vertical-align: middle;}.theme-picker-dropdown .el-color-dropdown__link-btn { display: none;}/style
直接引用组件
vue中element-ui如何修改源码
由于项目需要,需要修改源码,但是,发现修改了以后不生效,发现其实项目中改伏迅引用的并不是源码,而是打包好的 lib 文件。源码相厅做当于只是提供你参考的,但是,整个项目的运行,靠的都是 lib 文件夹下的打包文件。
1.首先,从git上拉取element的源码
2.安装依赖 npm install
3.修改 packages 中的源码,然后进行打包 npm run dist
4.找到你的项目中的 node_modules 包下的 element-ui 文件核此夹下的 lib 包,用你修改好后打包生成的 lib 包进行替换即可生效
[img]vue和element版本对应关系
vue和element版本对应关系,vue是一个渐进式框架,Element-Ui是组件库。Vue是一套用于构建用户界面的渐进式JavaScript框架,开发者只需要关注视图层,它不仅易于上手,还便于与第三方库或既有项目的整合,是基于MVVM,Model-View-ViewModel,即视图层-视图模型层-模型层设计思想,提供MVVM数据双向绑定的库,专注于UI层面,element是基于vue实埋山现的一套不依赖业务的UI组件库,提供了丰富的PC端组件,减少用户对常用组件的封装,降低了开发的难易程度,Element-Ui是基于vue封装的组件库,简化了常用组件的封装,提高了重用性原则弯巧中,vue是一个渐进式框宽好架,Element-Ui是组件库。
时间轴组件(Vue+element)
说明:element UI带有时间轴插件(el-timeline),但是只显示无法实现折叠展开功能且比较单一,不满足要求,故重新封装一个;
最终效果:
实现过程:
dom:使用无序标签li 给定title作为时间显示容器:点击时可展开或折叠 使用button标则郑镇签 ,下面内容部分使用slot传入丛友(里面内容不固定,方便组件复用),嵌套在el-collapse-transition 中以优化动画效果;
js:数据:属性传入dataList:数组,每一项格式为{time:'2019-12-22',content:{},active:false} 时间标题点击事件selectMenu(arr, index) arr:该孙粗方法修改对应时间下内容是否显示;
css:这里需要注意的是时间轴的线不能断,所以li 之间不能有margin 值,左边的线用border-left 生成,时间前面的点使用 i 标签生成,用相对定位且相对左边给一个负的left值,与标题不能换行且要有宽高使用inline-block;
vue-element 权限管理数据的处理,简单实用。
1,首先获取到后端返回给我们的权限数据,数据大概长这么个样子。
2,要渲染到element的树形结构上的话,要做一层递归处理,让它形成树形结构。这个也可以不用递归,我看他们用map这个属性,也能很好的处理。具体做法如下:
这个数据渲染好以后,是长这样的,也就符合了我们el-tree组件所需的数据结构。
3,现在管理员开始在管理界面开始做权限管理操作。如图所示:
这样的话返回给后端的是一个id组成的数组, data=[1,4,10] 这就是你返回给后端的数据 ,还没完接下来该复现了。
4,现在后端给数据返回给你,他是按照刚才你给的数据返回过来的。然镇友后添加上check属性,这个也是你们约定,数据大概就长这样:
你可能还在想不错,不错。还不用递归,循环就给数据拿了。当你拿到所有的数组check为true的数据组成的数组treelist,然后 this.$refs.tree.setCheckedKeys(this.treelist) 上去时,已经不符合要求了,因为父集全选,子集就会全选。他会变成这样:
5,这样肯定不行,我御铅槐们要再做一次数据处理,让它符合要求。1, 要给数据再次递归成树形结构 ,还是上面的方法给数据递归成树形结构。2,遍历这个树形结构,判断父集的子集是否全部为true,如果不是就就让他的check属性设置为false,
这里说明一下。this.state 这个变量你要自己设置一下或者全局变量都行,反正要设置一下,设置为true。首先我们给递归好的树形结构放在 traveData 这个函数里面这个函数会递归一遍我们的数据,主要是判断
item.check = item.children.length 0 ? this.getchildStatus(item.children) : item.check
这里是判断他有没有子集,没有的话就是ok,那么check的值就是合理的,如果他有子集但是它的check为true这就很不合理,因为我们不知道他的子集到底是不是都是选了的,也就是check为true,所以要做一层碰断,判断他的子集是否全为true,只要他的子集有一个不为true,那它就不能为true this.getchildStatus(item.children) 所以这里又做了一层,遍历他的所有子集。判断check的值。ok做到这里我们大概也差不多了。拿到 return data 的值我们还要做一次数据的递归,
6,至此,我们已经拿到了 this.treelist的值我们只要
这样就可以把我们的树形结构又从新渲染好了。数据用的都是模拟数据,但是和业务场景的数据其实差别不大,只要按照这个流程就ok了。不管是element,激巧antd,我觉得这个全选和半选感觉还可以优化下。不是真的挺绕的。
关于vueelement和vueelement admin的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。