%@ taglib prefix="emp" uri="http://www...._.net vue+ele ui 项目demo">
赞
踩
这几天,看了下vue+element ui的一些知识,现在将其写成一个demo,页面下过如下
代码如下:
- <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
- <%@ taglib prefix="emp" uri="http://www.montnets.com/emp/i18n/tags/simple" %>
- <%@include file="/common/common.jsp" %>
- <%
- String iPath = request.getRequestURI().substring(0, request.getRequestURI().lastIndexOf("/"));
- String inheritPath = iPath.substring(0, iPath.lastIndexOf("/"));
- String commonPath = inheritPath.substring(0, inheritPath.lastIndexOf("/"));
- String skinPath = session.getAttribute("stlyeSkin") == null ? "default" : (String) session.getAttribute("stlyeSkin");
- String version = skinPath.contains("frame3.0") ? "v3" : skinPath.contains("frame4.0") ? "v4" : "v2";
- int index = skinPath.lastIndexOf("/");
- String skin = version + "-" + skinPath.substring(index + 1);
- %>
- <!doctype html>
- <style>
- .top_btn {
- margin-bottom: 40px;
- }
- .top_left_btn {
- margin-left: 5px;
- float: left;
- display: block;
- margin-bottom: 10px;
- }
- .top_right_btn {
- margin-right: 5px;
- float: right;
- display: block;
- margin-bottom: 10px;
- }
-
- .bottom {
- margin-top: 25px;
- float: right;
- }
- </style>
- <html lang="en">
- <head>
- <title>签约信息查询vue练习
- </title>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
- <link href="<%=commonPath%>/common/css/frame.css?V=<%=StaticValue.getJspImpVersion() %>" rel="stylesheet"
- type="text/css"/>
- <link href="<%=skinPath %>/frame.css?V=<%=StaticValue.getJspImpVersion() %>" rel="stylesheet" type="text/css"/>
- <link href="<%=commonPath%>/common/css/vue/index.css?V=<%=StaticValue.getJspImpVersion() %>" rel="stylesheet"
- type="text/css"/>
- <link href="<%=commonPath%>/common/css/vue/index<%="-" + skin%>.css?V=<%=StaticValue.getJspImpVersion() %>"
- rel="stylesheet"
- type="text/css"/>
- <link href="<%=commonPath%>/common/css/vue/iview.css?V=<%=StaticValue.getJspImpVersion() %>" rel="stylesheet"
- type="text/css"/>
- <title>Title</title>
- </head>
- <body>
- <div id="container" class="container" >
- <%-- container与js中el属性对应的值保持一致--%>
- <span v-html="position"></span>
- <%-- v-html表示要展示的html,position为后台传输过来的值,需要在js中定义--%>
- <div id="rContent" class="rContent"
- v-if="access"
- style="margin-left:1.5rem;width: 95%">
- <%-- v-if表示只有当满足条件时,才展示div中的东西,access同样为js中定义的属性,可以由后台传值--%>
- <div class="top_btn">
- <div class="top_left_btn">
- <el-button type="primary" size="mini" @click="add">新增
- </el-button>
- <%--@为v-on标签的缩写,表示给当前页面上的事件进行绑定,add为定义的方法 --%>
- </div>
- <div class="top_right_btn">
- <el-switch
- v-model="isSearch"
- active-color="#13ce66"
- inactive-color="#ff4949"
- active-text="显示搜索"
- inactive-text="隐藏搜索">
- </el-switch>
- <%--v-model实现属性值绑定,isSearch为js中定义的值,可以由后台传输--%>
- </div>
- </div>
- <el-card class="box-card" style="margin-bottom: 0.8rem; width: 100%" v-if="isSearch" shadow="hover">
- <el-form :inline="true" label-width="90px"
- class="mmsTplForm" style="width: 1000px; margin-left: 2%;padding: 14px 0 5px 0 ; float: left"
- size="mini"
- label-position="left">
- <el-form-item label="账号:">
- <el-input v-model="criteria.acctNo" clearable placeholder="账号" style="width: 195px"/>
- </el-form-item>
- <el-form-item label="手机号码:">
- <el-input v-model="criteria.phoneNo" clearable placeholder="手机号码" style="width: 195px"/>
- </el-form-item>
- <%--criteria为后台定义的查询对象,acctNo和phoNo查询对象的属性--%>
- </el-form>
- <el-container>
- <el-header style="padding: 14px 0 5px 0" height="70px">
- <el-button style="float: left;" type="primary" @click="getQuery" size="mini"
- icon="el-icon-search">查询
- </el-button>
- </el-header>
- </el-container>
- </el-card>
- <!--------------------------------------------- 表格代码 --------------------------------------------->
- <el-card class="box-card" shadow="hover">
- <el-table
- size="mini"
- :empty-text="emptyText"
- :data="tableData"
- v-loading="loading"
- style="width: 100%;">
- <%--:data等价于V-bind data,v-bind简写为:,实现属性值绑定,emptyText,tableData,loding都为js中定义的属性值--%>
- <el-table-column
- align="center"
- prop="cucuno"
- label="客户号">
- </el-table-column>
- <el-table-column
- align="center"
- prop="cutlno"
- label="电话号码">
- </el-table-column>
- <el-table-column
- align="center"
- prop="cuopnt"
- label="开机构代号">
- </el-table-column>
- <%--prop为element ui中实现表单属性绑定的属性,cucuno,cutlno,cuopnt为后台定义前端页面展示Vo类的属性值--%>
- <el-table-column
- align="center"
- width="350"
- label="操作">
- <template slot-scope="scope123" v-if="scope123.row.id != 1 && scope123.row.id != 2 && scope123.row.id != 3">
- <%--scope123为自己在jsp中随意定义的值--%>
- <el-button type="success" size="small" @click="edit(scope123.row)">编辑</el-button>
- <el-popover
- :ref="scope123.row.id"
- placement="top"
- width="180">
- <p>确定删除本条数据吗?</p>
- <div style="text-align: right; margin: 0">
- <el-button size="mini" type="text" @click="$refs[scope123.row.id].doClose()">取消
- </el-button>
- <%--doClose()方法为vue中原生方法--%>
- <el-button :loading="delLoading" type="primary" size="mini"
- @click="subDelete(scope123.row.id)">确定
- </el-button>
- </div>
- <el-button slot="reference" type="danger" size="mini">删除</el-button>
- </el-popover>
- </template>
- </el-table-column>
- </el-table>
- </el-card>
- <!-- 新增编辑弹出框-->
- <el-dialog top="150px" :close-on-click-modal="false" :title="isAdd ? '新增' : '编辑'" :visible.sync="isShow" width="500px" :show-close="false">
- <%--isAdd,isShow为js中定义属性值,用来判断from表单的title是新增还是编辑,表单是否展示--%>
- <el-form ref="testForm" :inline="true" :model="testForm" :rules="rules" size="small" label-width="150px">
- <%--rules为js中自定义的表单校验规则,testForm为js中自定义的表单属性--%>
- <el-form-item label="客户号:">
- <el-input v-model="testForm.cucuno" placeholder="输入客户号" oninput="value=value.replace(/[^a-zA-Z0-9]/ig,'')"/>
- </el-form-item>
- <%--v-model = "testForm.cucuno 表示绑定testForm表单中的cucuno属性"--%>
- <el-form-item label="电话号码:" >
- <el-input v-model="testForm.cutlno" placeholder="输入电话号码" oninput="value=value.replace(/[^\d]/g, '')"/>
- </el-form-item>
- <el-form-item label="开户机构代码:">
- <el-input v-model="testForm.cuopnt" placeholder="输入开户机代号" oninput="value=value.replace(/[^a-zA-Z0-9]/ig,'')"/>
- </el-form-item>
- <el-form-item label="备注:">
- <el-input v-model="testForm.remark" placeholder="请输入中文备注" onkeyup="value=value.replace(/[^\u4e00-\u9fa5]/g,'')"/>
- </el-form-item>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button type="text" @click="cancel">取消</el-button>
- <el-button :loading="loading" type="primary" @click="doSubmit">确认</el-button>
- </div>
- </el-dialog>
- <%--分页--%>
- <div class="bottom">
- <el-pagination
- @size-change="handlePageSize"
- @current-change="handlePage"
- :current-page.sync="pageInfo.pageIndex"
- :page-sizes="pageInfo.pageSizeOpts"
- :page-size="pageInfo.pageSize"
- layout="total, sizes, prev, pager, next, jumper"
- :total="pageInfo.totalRec">
- </el-pagination>
- </div>
- </div>
- </div>
- <script type="text/javascript">
- document.write("<scr" + "ipt src=\"<%=commonPath%>/common/js/myjquery-a.js?V=<%=StaticValue.getJspImpVersion() %>\"></sc" + "ript>")
- </script>
- <script src="<%=commonPath %>/common/js/common.js?V=<%=StaticValue.getJspImpVersion() %>"></script>
- <script src="<%=commonPath%>/common/i18n/i18nUtil.js"></script>
- <script type="text/javascript">
- if (browserData() !== -1) {
- document.write("<scr" + "ipt src=\"<%=commonPath%>/common/js/vue/babel.min.js?V=<%=StaticValue.getJspImpVersion() %>\"></sc" + "ript>")
- }
- </script>
- <script type="text/javascript">
- if (browserData() !== -1) {
- document.write("<scr" + "ipt src=\"<%=commonPath%>/common/js/vue/browser-polyfill.min.js?V=<%=StaticValue.getJspImpVersion() %>\"></sc" + "ript>")
- }
- </script>
- <script type="text/javascript">
- document.write("<scr" + "ipt src=\"<%=commonPath%>/common/js/vue/vue.js?V=<%=StaticValue.getJspImpVersion() %>\"></sc" + "ript>")
- </script>
- <script type="text/javascript">
- document.write("<scr" + "ipt src=\"<%=commonPath%>/common/js/vue/index.js?V=<%=StaticValue.getJspImpVersion() %>\"></sc" + "ript>")
- </script>
- <script type="text/javascript">
- if (browserData() === -1) {
- document.write("<scr" + "ipt src=\"<%=iPath %>/test.js?V=<%=StaticValue.getJspImpVersion() %>\"></sc" + "ript>")
- }
- </script>
- <script src="<%=iPath %>/test.js?V=<%=StaticValue.getJspImpVersion() %>"
- type="text/babel"></script>
- </body>
- </html>
js
$(function () { new Vue({ el: "#container", //绑定jsp中div的id,可以理解为开始绑定vue data: { //data为定义jsp页面中需要的一些数据 isSearch: true, isShow: false, isAdd : true, testForm: { id: '', cucuno: '', cutlno: '', cuopnt:'', remark:'' }, // 校验规则 rules: { cucuno: [ {required: true, message: '请输入客户号号', trigger: 'blur'}, {min: 3, max: 3, message: '长度 3 个字符', trigger: 'blur'} ], cutlno: [ {required: true, message: '请输入电话号码', trigger: 'blur'}, {min: 6, max: 6, message: '长度在 6 个字符', trigger: 'blur'} ], cuopnt:[ {required: true, message: '请输入客户号', trigger: 'blur'}, {min: 3, max: 3, message: '长度在 3 个字符', trigger: 'blur'} ] }, pageInfo: { pageIndex: 1, // 当前页数 totalRec: 0, //数据总数 pageSize: 15, // 每页条数 pageSizeOpts: [5, 10, 15, 20, 50], // 每页条数切换的配置 totalPage: 0 // 总页数 }, // 查询条件 criteria: { phoneNo: "", acctNo: "" }, loading: false, tableColumns: [], tableData: [], access: false, menuCode: '', position: '', emptyText: "请点击查询获取数据", delLoading: false }, //钩子函数,vue所写页面,自动加载时执行这路面定义的属性 created: function () { this.getInitData() this.getQuery() }, //统一采用 _this 去 指向 this methods: { // 获取初始化参数的方法 getInitData() { let _this = this $.ajax({ type: "POST", url: 'que_siginInfomation.htm', data: "method=initData", dataType: 'json', async: false, success: function (result) { if (result) { let data = result.data _this.menuCode = data['menuCode'] _this.position = data['position'] _this.access = data['access'] } }, error: function () { _this.$message.error('很抱歉,连接异常!') } }) }, getQuery() { let _this = this; let query = { pageInfo: _this.pageInfo, criteria: _this.criteria } _this.loading = true $.ajax({ type: "POST", url: 'que_siginInfomation.htm?method=query', data: JSON.stringify(query), dataType: 'json', contentType: "application/json", success: function (result) { if (result) { let data = result.data _this.tableData = data['data'] _this.pageInfo.totalPage = data['totalPage'] _this.pageInfo.totalRec = data['total'] } _this.loading = false }, error: function () { _this.loading = false _this.$message.error('很抱歉,连接异常!') } }); }, // 打开 add 页面 add() { this.testForm = { id: '', cucuno: '', cutlno: '', cuopnt:'', remark:'' } this.isShow = true }, cancel() { this.isShow = false }, doSubmit() { this.loading = true this.$refs['testForm'].validate((valid) => { if (valid) { alert("新增成功"); this.loading = false this.isShow = false // 对页面进行刷新 this.getQuery() } else { alert("参数校验不通过"); this.loading = false return false } }) }, subDelete(id) { this.delLoading = true alert("删除成功id为"+id+"的数据"); this.$refs[id].doClose() this.delLoading = false this.getQuery() }, edit(row) { this.testForm = { id: row.id, cucuno: row.cucuno, cutlno: row.cutlno, cuopnt: row.cuopnt, remark:'' } this.isAdd = false this.isShow = true }, // 更改分页 handlePage(value) { this.pageInfo.pageIndex = value this.getQuery() }, handlePageSize(value) { this.pageInfo.pageSize = value this.getQuery() } } }) })
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。