花3周空余时间做了一件事:看vue的官方文档然后用vue开发后台页面,更熟练了vue一些语法等感觉核心有两块:数据绑定,组件;
然后看公司的一位同事在用vue-element开发新后台,然后我自己就想着用vue-element去开发一套后台系统,然后就去看vue-element的文档,网上有一整套的vue-element-admin后台系统在自己的电脑上安装运行了,但是这套后台系统的数据需要请求接口去完成(现实中不太可能去开发后台接口),我自己将原来用YII框架搭建的后台植入vue-element,需要注意的几个问题:
1.vue-element对变量的类型(整数/字符串)有区分限制;
2.axios({.....}) 跨域问题,Vue支持axios和ajax两种写法;
3.尽量不要用watch方法来监听数据变化,据说耗性能;
4.请求url报错400,是我YII对POST和FILE的安全过滤;
5.POST请求有3种请求头:application/json;charset=UTF-8;application/x-www-form-urlencoded;等
主要功能:增删改查:列表,搜索,分页,二级下拉联动,导出,时间控件,弹层,上传图片,保存,外链等常用基本功能:
vue官方文档地址:https://cn.vuejs.org/v2/guide/
vue-element官方文档地址:https://element.faas.ele.me/#/zh-CN/component/layout
建议大家先看文档,我大概看了2遍吧;先看一下效果:
搜索后:
编辑:联动下拉框,上传多张图,各种开关按钮,时间控件(vue-element提供源码和示例)等
弹层:
由于代码较多,我这里就只上传前端页面,稍后我会把相关代码上传到github上。
php代码我就不贴出来了,我就简单贴出列表页面前端代码(并附上注释说明):index.html
<?php
use yii\helpers\Url;
$this->title = '测试》测试订单列表';
$this->params['breadcrumbs'][] = $this->title;
?>
<style>
.filter-container {
padding-bottom: 10px;
padding-top: 10px;
}
.filter-container .filter-item {
display: inline-block;
vertical-align: middle;
margin-bottom: 10px;
}
.user {
background: #f0f9eb;
}
.parent {
background: #F9F9EB;
}
.total {
/*background: #F9F2EB;*/
}
</style>
<div id="app">
<div class="filter-container">
<el-form :inline="true" :model="listQuery" class="demo-form-inline" >
<el-form-item label="用户id">
<el-input v-model="listQuery.user_id" placeholder="user_id" clearable></el-input>
</el-form-item>
<programme-select :detail="true" :programme_id.sync="listQuery.programme_id"
:programme_child_id.sync="listQuery.level_id"></programme-select>
<el-form-item label="操作时间">
<date-picker class="filter-item" :start_time.sync="listQuery.start_time" :end_time.sync="listQuery.end_time"/>
</el-form-item>
<el-form-item>
<!--点击事件@click.....-->
<el-button type="primary" @click="fetchData" icon="el-icon-search">查询</el-button>
<el-button type="warning" @click="exportData" icon="el-icon-download">导出</el-button>
</el-form-item>
</el-form>
</div>
<div>
<el-table v-loading="listLoading" :data="list" style="width: 100%;"
:cell-class-name="cellClassName">
<el-table-column align="center" label="订单id" width="60">
<template slot-scope="scope">{{scope.row.serial_id}}</template>
</el-table-column>
<el-table-column align="center" label="支付状态">
<template slot-scope="scope">
<el-tag :type="scope.row.pay_status | opClass"> {{scope.row.pay_status | opFilter }}</el-tag>
</template>
</el-table-column>
<el-table-column align="center" label="用户昵称">
<template slot-scope="scope">
{{ scope.row.nick_name?scope.row.nick_name :'-'}}
</template>
</el-table-column>
<el-table-column align="center" label="用户信息">
<el-table-column align="center" label="user_id" width="120">
<template slot-scope="scope">
<a target="_blank" :href="'/fxuser/index?user_id='+ scope.row.user_id" v-if="scope.row.user_id">
<el-button type="text" > {{scope.row.user_id}}</el-button>
</a>
<span v-else>-</span>
</template>
</el-table-column>
<el-table-column align="center" label="手机号">
<template slot-scope="scope">
{{scope.row.mobile_phone_number?scope.row.mobile_phone_number:'-'}}
</template>
</el-table-column>
</el-table-column>
<el-table-column align="center" label="分销信息">
<el-table-column align="center" label="等级id">
<template slot-scope="scope">
{{scope.row.mobile_phone_number?scope.row.level_id:0}}
</template>
</el-table-column>
<el-table-column align="center" label="等级名称">
<template slot-scope="scope">
{{scope.row.mobile_phone_number?scope.row.level_name:'-'}}
</template>
</el-table-column>
<el-table-column align="center" label="等级值">
<template slot-scope="scope">
{{scope.row.mobile_phone_number?scope.row.level_nums:'-'}}
</template>
</el-table-column>
</el-table-column>
<el-table-column align="center" label="下单时间">
<template slot-scope="scope">
{{ scope.row.create_time | parseTime }}
</template>
</el-table-column>
<el-table-column align="center" label="操作" width="350">
<template slot-scope="scope">
<el-button size="mini" @click="deleteData(scope.row.serial_id)" icon="el-icon-delete-solid">删除</el-button>
<a :href="'/user/edit-info?serial_id='+ scope.row.serial_id">
<el-button size="mini" icon="el-icon-edit">编辑</el-button>
</a>
<el-button size="mini" icon="el-icon-tickets">弹层</el-button>
<a target="_blank" :href="'/user/link-target?user_id='+ scope.row.serial_id">
<el-button size="mini" icon="el-icon-link">链接</el-button>
</a>
</template>
</el-table-column>
</el-table>
<!--这里分页 总数一定要整数型 字符串会出不来-->
<pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit"
@pagination="fetchData"/>
</div>
</div>
<script type="module">
new Vue({
el: '#app',
components: { //引用外部组件: 分页/事件/公共模块(封装方法httpVueLoader来导入)
Pagination: httpVueLoader('/vue/common/pagination.vue'),
DatePicker: httpVueLoader('/vue/common/datepicker.vue'),
ProgrammeSelect: httpVueLoader('/vue/common/programme_select.vue'),
},
filters: {
opFilter(pay_status) { //数据格式化
switch (parseInt(pay_status)) {
case 0:
return '支付成功';
case 1:
return '支付失败';
default:
return '未知';
}
},
opClass(pay_status) {
switch (parseInt(pay_status)) {
case 0:
return 'warning';
case 1:
return 'danger';
default:
return 'info';
}
}
},
data() {
return {
list: [],
total: 0,
listLoading: false,
listQuery: {
page: 1,
limit: 10,
user_id: undefined,
start_time: undefined,
end_time: undefined,
nickname: undefined,
programme_id: -1,
level_id: undefined
}
}
},
created() {
const user_id = "<?=$user_id?>"
if (user_id) {
this.listQuery.user_id = user_id
}
this.fetchData()
this.$ELEMENT.size = size
},
methods: {
fetchData() {
this.listLoading = true
axios({ //ajax写法 比ajax简单,参数有三种请求头header
method: 'get',
url: "<?=Url::toRoute(['user/orders'])?>",
params: this.listQuery
}).then(response => {
console.log(response);
const data = response.data
if (data.code !== 200) {
this.$notify.error({
title: '错误1122',
message: data.msg
});
this.listLoading = false
return
}
this.list = data.list
this.total = data.total
this.listLoading = false
}).catch(error => {
this.listLoading = false
this.$message.error(error.message)
});
},
cellClassName({row, column, rowIndex, columnIndex}) { //列的颜色
if (columnIndex >= 3 && columnIndex < 5) {
return 'parent'
}
if (columnIndex >= 5 && columnIndex < 8) {
return 'user'
}
return 'total'
},
exportData() { //导出
const query = this.listQuery
this.$notify.success({
title: 'Success',
message: '正在导出,请稍等...',
onClose: function () {
query.limit = undefined
query.page = undefined
const p = JSON.stringify(query)
const url = p ? "<?=Url::toRoute(['user/export?'])?>" + p : '/fx/user/export'
let link = document.createElement('a')
link.style.display = 'none'
link.href = url
document.body.appendChild(link)
link.click()
},
duration: 0.5 * 1000
});
},
deleteData(serial_id) {
console.log(serial_id); //31378
this.listLoading = true
axios({
method: 'get',
url: "<?=Url::toRoute(['user/delete-data?serial_id='])?>" + serial_id,
params: this.listQuery
}).then(response => {
console.log(response);
if (response.data.code !== 200) {
this.$notify.error({
title: '错误1122',
message: response.data.msg
});
this.listLoading = false
return
}else{
this.$notify.success({
title: 'Success',
message: '删除成功',
});
//location.reload() //刷新当前页面 jquery写法
this.fetchData() //再次调取列表函数
}
}).catch(error => {
this.listLoading = false
this.$message.error(error.message)
});
}
}
})
</script>
上面只是列表分页的html,编辑页面在附件里,大家可以去vue-element官网去看一下文档有实例和代码还是很方便的不是太难,https://element.faas.ele.me/#/zh-CN/component/layout
相关推荐
Vue.js 是一款轻量级且功能强大的前端JavaScript...总的来说,Vue-element-admin 是一个功能完备的后台管理解决方案,结合了 Vue.js 的灵活性和 Element UI 的实用性,让开发者能够快速地构建高效、稳定的管理平台。
"vue-element-admin(后台框架修复版)" 是一个基于 Vue.js 的后台管理框架的修正版本,主要解决了原版框架中存在的一些问题和版本不兼容的挑战。这个修复版旨在提供更稳定、更流畅的开发体验,使得开发者在使用过程中...
这是一个基于vue-element-admin的城市高空安全及玻璃幕墙检测的后台管理系统
Vue-element-admin是基于Vue.js构建的一个后台管理界面框架,它结合了Element UI组件库,提供了丰富的UI组件和强大的功能,使得开发者能够快速搭建企业级的后台管理系统。 在"vue-element-admin 集成框架设置中文...
Vue-Element-Admin则是一个基于Vue.js和Element-UI的后台管理系统模板,它包含了一套完整的管理端页面结构和基础功能,如登录、权限控制、多语言支持等,大大简化了前端开发的工作量。在本项目中,Vue-Element-Admin...
总的来说,"vue-element-admin"结合了Vue.js、Element UI和VSCode的强大功能,为前端开发者提供了一个高效、便捷的后台管理系统开发平台,通过学习和使用这个项目,不仅可以深入理解Vue.js和前端开发流程,还能提升...
"vue-element-admin-4.4.0.zip" 是一个包含Vue.js前端框架的项目压缩包,主要用于构建管理后台系统。这个版本是4.4.0,意味着它可能包含了该框架的一些更新和改进。Vue.js是一个轻量级、高性能的前端JavaScript框架...
vue-element-admin是一个基于Vue.js和Element UI的高效前端框架,用于构建企业级的后台管理系统。Element UI则是一个为开发者、设计师和产品经理准备的基于Vue 2.0的组件库,提供了一系列易于使用的UI组件,如表格、...
vue-element-admin 是一个后台前端解决方案,它基于 vue 和 element-ui实现。它使用了最新的前端技术栈,内置了 i18n 国际化解决方案,动态路由,权限验证,提炼了典型的业务模型,提供了丰富的功能组件,它可以帮助...
管理系统系列--使用fastapi做后端,vue-element-admin作为前端的后台管理系统
Vue-element-admin是基于Vue.js和Element UI的后台管理系统模板,它提供了丰富的功能组件和优雅的UI设计,便于快速搭建企业级后台系统。 在“学习vue-element-admin,优化了大量融入代码,添加中文注释”的项目中,...
【标题】:“管理系统系列--vue3-element-admin后台管理系统前端解决方案.zip”揭示了这是一个基于Vue3和Element UI构建的后台管理系统的前端实现。Vue3是Vue.js框架的最新版本,提供了性能优化、更好的类型支持和更...
"Vue-element-admin ...总的来说,"vue-element-admin 精简版"是一个轻量级的前端框架,整合了Vue.js、Element UI以及一系列的配置和工具,以优化开发流程,同时减少了不必要的组件,更适合快速构建简洁的管理界面。
参考了_vue-element-admin_与_ant-design-vue-pro__等优秀的开源_vue-antd-admin
vue-element-plus-admin 是一个基于 element-plus 免费开源的中后台模版。使用了最新的vue3,vite4,TypeScript等主流技术开发,开箱即用的中后台前端解决方案,
vue-element-admin,更新时间为2021-03-21,含完整依赖包(node_modules文件夹)
"vue-element-admin" 是一个基于 Vue2.0 和 Element-UI 的前端管理后台集成项目,它提供了一个完整的后台管理系统的模板,包括登录/注册、权限管理、多语言切换、页面布局、图表展示等功能。开发者可以基于此项目...
在"vue-element-admin-tinymce本地化文件"中,我们可以看到它被用来构建一个管理后台,特别是与TinyMCE编辑器的集成。 **Element UI 框架** Element UI 是一套基于 Vue.js 的开源UI组件库,由饿了么团队开发。它...
《vue-element-admin v4.4 指南》是一份详细的文档,主要针对基于Vue.js和Element-UI的后台前端解决方案vue-element-admin的v4.4版本进行深入讲解。这个项目旨在提供一个集成化的后台管理界面,包含了众多实用功能,...
【解析】Vue-element-admin是一款基于Vue.js和Element-UI的后台管理界面模板,它为开发者提供了丰富的预设组件和功能,便于快速构建高效且易维护的企业级后台系统。RBAC(Role-Based Access Control)权限管理是系统...