diff --git a/src/main/java/com/supwisdom/dlpay/system/bean/OperatorListBean.java b/src/main/java/com/supwisdom/dlpay/system/bean/OperatorListBean.java
index de276ce..d503ff5 100644
--- a/src/main/java/com/supwisdom/dlpay/system/bean/OperatorListBean.java
+++ b/src/main/java/com/supwisdom/dlpay/system/bean/OperatorListBean.java
@@ -17,6 +17,7 @@
     private String regionid;
     private String regionname;
     private String mobile;
+    private String email;
     private String foperid;
 
     public String getOperid() {
@@ -107,6 +108,14 @@
         this.mobile = mobile;
     }
 
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
     public String getFoperid() {
         return foperid;
     }
diff --git a/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java b/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
index 5b394ba..dfff005 100644
--- a/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
+++ b/src/main/java/com/supwisdom/dlpay/system/dao/impl/ManagerDaoImpl.java
@@ -27,7 +27,7 @@
     public Pagination getOperatorList(String operid, String realname, int pageNo, int pageSize) {
         String sql = "select a.operid,a.opername,a.opercode,case when a.opertype='P' then '超级管理员' when a.opertype='S' then '系统管理员' " +
                 " when a.opertype='H' then '区域管理员' when a.opertype='L' then '楼栋管理员' else a.opertype end opertype," +
-                "a.realname,case when a.status='normal' then '有效' else '注销' end status,a.regionid,a.mobile,a.foperid,c.roleid,c.rolename,d.regionname " +
+                "a.realname,case when a.status='normal' then '有效' else '注销' end status,a.regionid,a.mobile,a.email,a.foperid,c.roleid,c.rolename,d.regionname " +
                 " from Tb_Operator a " +
                 " left join tb_oper_role b on a.operid = b.operid " +
                 " left join tb_role c on b.roleid = c.roleid " +
@@ -100,7 +100,7 @@
     @Override
     public Pagination getOperOperatorList(String operatorOperid, String operid, String realname, int pageNo, int pageSize) {
         String sql = "select a.operid,a.opername,a.opercode,case when a.opertype='P' then '超级管理员' when a.opertype='S' then '系统管理员' " +
-                " when a.opertype='H' then '区域管理员' when a.opertype='L' then '楼栋管理员' else a.opertype end opertype,a.realname,case when a.status='normal' then '有效' else '注销' end status,a.regionid,a.mobile,a.foperid,c.roleid,c.rolename,d.regionname " +
+                " when a.opertype='H' then '区域管理员' when a.opertype='L' then '楼栋管理员' else a.opertype end opertype,a.realname,case when a.status='normal' then '有效' else '注销' end status,a.regionid,a.mobile,a.email,a.foperid,c.roleid,c.rolename,d.regionname " +
                 " from Tb_Operator a " +
                 " left join tb_oper_role b on a.operid = b.operid " +
                 " left join tb_role c on b.roleid = c.roleid " +
diff --git a/src/main/resources/templates/system/operator.html b/src/main/resources/templates/system/operator.html
index bec77f8..13ff459 100644
--- a/src/main/resources/templates/system/operator.html
+++ b/src/main/resources/templates/system/operator.html
@@ -96,16 +96,26 @@
                         </template>
                     </el-table-column>
                     <el-table-column
+                            prop="regionname"
+                            label="管辖区域"
+                            width="180">
+                    </el-table-column>
+                    <el-table-column
                             prop="mobile"
                             label="联系电话"
                             width="180">
                     </el-table-column>
                     <el-table-column
-                            prop="regionname"
-                            label="管辖区域"
+                            prop="email"
+                            label="邮箱"
                             width="180">
                     </el-table-column>
                     <el-table-column
+                            prop="foperid"
+                            label="创建人"
+                            width="140">
+                    </el-table-column>
+                    <el-table-column
                             fixed="right"
                             label="操作"
                             width="179">
@@ -222,7 +232,7 @@
 
                     <el-form-item label="邮箱:" prop="email">
                         <el-col :span="18">
-                            <el-input v-model.number="operatorDiaForm.email"  style="width: 187px;" maxlength="60">
+                            <el-input v-model="operatorDiaForm.email"  style="width: 187px;" maxlength="60">
                                 <i class="el-icon-edit el-input__icon" slot="icon" ></i>
                             </el-input>
                         </el-col>
@@ -286,6 +296,29 @@
 </div>
 
 <script>
+    var oper_validateOpercode = function (rule, value, callback) {
+        //console.log(value)
+            if (!value) {
+                return callback(new Error('请输入登录名'));
+            }
+            if (!(/^[0-9a-zA-Z]*$/.test(value))) {
+                callback(new Error('账号非法，请填入字母、数字或它们的组合'));
+            }
+            callback();
+    };
+    var oper_validateMobile = function (rule, value, callback) {
+        if (null != value && value.length > 0 && !(/^1\d{10}$/.test(value))) {
+            callback(new Error('请输出正确的手机号'));
+        }
+        callback();
+    };
+    var oper_validateEmail = function (rule, value, callback) {
+        if (null != value && value.length > 0 && !(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(value))) {
+            callback(new Error('邮箱格式不正确'));
+        }
+        callback();
+    };
+
     var oper_vue = new Vue({
         el:'#operatorapp',
         data:{
@@ -336,7 +369,8 @@
                 ],
                 opercode:[
                     {required:true,message:'请输入登陆名',trigger:'blur'},
-                    { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' }
+                    { min: 2, max: 20, message: '长度在 2 到 20 个字符', trigger: 'blur' },
+                    {validator: oper_validateOpercode, trigger: 'blur'}
                 ],
                 opername:[
                     {required:true,message:'请输入操作员名称',trigger:'blur'},
@@ -347,6 +381,12 @@
                 ],
                 roleid: [
                     {required: true, message: '请选择角色', trigger: 'blur'}
+                ],
+                mobile:[
+                    {validator: oper_validateMobile, trigger: 'blur'}
+                ],
+                email:[
+                    {validator: oper_validateEmail, trigger: 'blur'}
                 ]
 
             },
