Browse Source

用户模块

sugangqiang 2 years ago
parent
commit
b546ee2370

+ 251 - 0
app/admin/api/UserApi.php

@@ -0,0 +1,251 @@
+<?php
+
+namespace app\admin\api;
+
+use app\admin\model\User;
+
+/**
+ * Description of UserApi
+ *
+ * @author sgq
+ */
+class UserApi {
+
+    public static function getOne($id) {
+        $res = User::findOrEmpty($id);
+        if ($res["companyId"]) {
+            $company = \app\common\api\CompanyApi::getOne($res["companyId"]);
+            $res["companyName"] = $company["name"];
+        }
+        if ($res["roleid"]) {
+            $role = RoleApi::getOne($res["roleid"]);
+            $res["roleName"] = $role["name"];
+        }
+        if ($res["avatar"]) {
+            $res["originalAvatar"] = $res["avatar"];
+            $res["avatar"] = getStoragePath($res["avatar"]);
+        }
+        return $res;
+    }
+
+    public static function getList($params) {
+        $where = [];
+        $limit = $params["limit"] ?: 10;
+        $offset = $params["offset"] ?: 0;
+        $order = $params["order"] ?: "desc";
+        if ($params["name"]) {
+            $where[] = ["u.name", "like", "%" . $params["name"] . "%"];
+        }
+        if ($params["account"]) {
+            $where[] = ["u.account", "like", "%" . $params["account"] . "%"];
+        }
+        if ($params["sex"]) {
+            $where[] = ["u.sex", "=", $params["sex"]];
+        }
+        if ($params["phone"]) {
+            $where[] = ["u.phone", "like", "%" . $params["phone"] . "%"];
+        }
+        if ($params["status"]) {
+            $where[] = ["u.status", "=", $params["status"]];
+        }
+        if ($params["companyId"]) {
+            $where[] = ["u.companyId", "=", $params["companyId"]];
+        }
+        $count = User::alias("u")->where($where)->count();
+        $list = User::alias("u")
+                        ->field("u.*,c.name as companyName,r.name as roleName")
+                        ->leftJoin("sys_company c", "c.id=u.companyId")
+                        ->leftJoin("sys_role r", "r.id=u.roleId")
+                        ->where($where)
+                        ->limit($offset, $limit)->order("u.name " . $order)->select()->toArray();
+        return ["total" => $count, "rows" => $list];
+    }
+
+    public static function create($params) {
+        $data["account"] = $params["account"];
+        $data["name"] = $params["name"];
+        $data["type"] = $params["type"];
+        $data["birthday"] = $params["birthday"];
+        $data["sex"] = $params["sex"];
+        $salt = self::getSalt(5);
+        $data["salt"] = $salt;
+        $data["status"] = 1;
+        $data["password"] = self::getPwd($params["password"], $salt);
+        $data["companyId"] = $params["companyId"];
+        $data["roleid"] = $params["roleid"];
+        $data["phone"] = $params["phone"];
+        $data["email"] = $params["email"];
+        $data["createTime"] = date("Y-m-d H:i:s");
+        $data["createUser"] = session("user")["uid"];
+        if (User::insert($data))
+            return 10001;
+        return 10009;
+    }
+
+    public static function update($params) {
+        $id = $params["id"];
+        $user = self::getOne($id);
+        if (!$user || $user["status"] == 3)
+            return 10002;
+        $roleIds = explode(",", $user["roleid"]);
+        if (in_array(1, $roleIds) && !self::isAdmin(session("user")["uid"]))
+            return 10003;
+        $data["id"] = $id;
+        if ($params["account"]) {
+            $data["account"] = $params["account"];
+        }
+        if ($params["type"]) {
+            $data["type"] = $params["type"];
+        }
+        if ($params["companyId"]) {
+            $data["companyId"] = $params["companyId"];
+        }
+        if ($params["avatar"] && $user["avatar"] != $params["avatar"]) {
+            $data["avatar"] = $params["avatar"];
+        }
+        $data["name"] = $params["name"];
+        $data["birthday"] = $params["birthday"];
+        $data["sex"] = $params["sex"];
+        $data["phone"] = $params["phone"];
+        $data["email"] = $params["email"];
+        $data["updateTime"] = date("Y-m-d H:i:s");
+        $data["updateUser"] = session("user")["uid"];
+        if (User::update($data))
+            return 10001;
+        return 10009;
+    }
+
+    public static function setRole($id, $roleIds) {
+        if (self::isDelete($id))
+            return 10002;
+        if (self::isAdmin($id) && !self::isAdmin(session("user")["uid"]))
+            return 10003;
+        $data["id"] = $id;
+        $data["roleid"] = $roleIds;
+        $data["updateTime"] = date("Y-m-d H:i:s");
+        $data["updateUser"] = session("user")["uid"];
+        if (User::update($data))
+            return 10001;
+        return 10009;
+    }
+
+    /**
+     * 重置密码
+     * @param type $id
+     * @param type $password
+     * @return boolean
+     */
+    public static function reset($id, $password) {
+        if (self::isDelete($id))
+            return 10002;
+        if (self::isAdmin($id) && !self::isAdmin(session("user")["uid"]))
+            return 10003;
+        $data["id"] = $id;
+        $data["password"] = $password;
+        if (User::update($data))
+            return 10001;
+        return 10009;
+    }
+
+    /**
+     * 删除用户
+     * @param type $id
+     * @return boolean
+     */
+    public static function delete($id) {
+        if (self::isDelete($id))
+            return 10002;
+        if (self::isAdmin($id) && !self::isAdmin(session("user")["uid"]))
+            return 10003;
+        $data["id"] = $id;
+        $data["status"] = 3;
+        $data["updateTime"] = date("Y-m-d H:i:s");
+        $data["updateUser"] = session("user")["uid"];
+        if (User::update($data))
+            return 10001;
+        return 10009;
+    }
+
+    public static function setPwd($id, $old_password, $new_password) {
+        $user = self::getOne($id);
+        if (!$user || $user["status"] == 3)
+            return 10002;
+        $roleIds = explode(",", $user["roleid"]);
+        if (in_array(1, $roleIds) && !self::isAdmin(session("user")["uid"]))
+            return 10003;
+        if (self::getPwd($old_password, $user["salt"]) != $user["password"])
+            return 10004;
+        $data["id"] = $id;
+        $data["password"] = self::getPwd($new_password, $user["salt"]);
+        $data["updateTime"] = date("Y-m-d H:i:s");
+        $data["updateUser"] = session("user")["uid"];
+        if (User::update($data))
+            return 10001;
+        return 10009;
+    }
+
+    /**
+     * 冻结解冻用户
+     * @param type $id
+     * @return boolean
+     */
+    public static function setFreeze($id, $status) {
+        if (self::isDelete($id))
+            return 10002;
+        if (self::isAdmin($id) && !self::isAdmin(session("user")["uid"]))
+            return 10003;
+        $data["id"] = $id;
+        $data["status"] = $status;
+        $data["updateTime"] = date("Y-m-d H:i:s");
+        $data["updateUser"] = session("user")["uid"];
+        if (User::update($data))
+            return 10001;
+        return 10009;
+    }
+
+    /**
+     * 检查删除
+     * @param type $id
+     * @return boolean
+     */
+    public static function isDelete($id) {
+        $user = self::getOne($id);
+        if (!$user || $user["status"] == 3)
+            return true;
+        return false;
+    }
+
+    /**
+     * 检查是不是管理员
+     * @param type $id
+     * @return boolean
+     */
+    public static function isAdmin($id) {
+        $user = self::getOne($id);
+        $roleIds = explode(",", $user["roleid"]);
+        if (in_array(1, $roleIds))
+            return true;
+        return false;
+    }
+
+    /**
+     * 生成管理员密码
+     * @return type
+     */
+    public static function getPwd($password, $salt) {
+        $salt = hash("md5", $salt, true);
+        $password = simple_hash("md5", $password, $salt, 1024);
+        return $password;
+    }
+
+    /**
+     * 生成加密盐
+     * @param type $length
+     * @return type
+     */
+    public static function getSalt($length) {
+        $bytes = random_bytes($length);
+        return substr(bin2hex($bytes), 0, $length);
+    }
+
+}

+ 11 - 0
app/admin/controller/Company.php

@@ -29,6 +29,11 @@ class Company extends AdminController {
         return json($result);
     }
 
+    function selectAll() {
+        $result = CompanyApi::getAll();
+        return json($result);
+    }
+
     /**
      * @auth {{/company/add}}
      * @return type
@@ -75,4 +80,10 @@ class Company extends AdminController {
         return view("", ["info" => $info]);
     }
 
+    function detail() {
+        $id = $this->request->param("id");
+        $info = CompanyApi::getOne($id);
+        return json($info);
+    }
+
 }

+ 19 - 0
app/admin/controller/Role.php

@@ -86,6 +86,25 @@ class Role extends AdminController {
         }
     }
 
+    function roleTreeListByUserId() {
+        $userId = $this->request->param("userId");
+        $user = \app\admin\api\UserApi::getOne($userId);
+        $roleIds = array_filter(explode(",", $user["roleid"]));
+        $list = getTreeList(RoleApi::getList([]));
+        $format_list = [];
+        foreach ($list as $item) {
+            $format_list[] = [
+                "checked" => in_array($item["id"], $roleIds) ? true : false,
+                "id" => $item["id"],
+                "isOpen" => true,
+                "name" => $item["name"],
+                "open" => $item["pid"] == 0 ? true : false,
+                "pId" => $item["pid"]
+            ];
+        }
+        return $format_list;
+    }
+
     function treelist() {
         $list = getTreeList(RoleApi::getList([]));
         $format_list = [];

+ 269 - 0
app/admin/controller/User.php

@@ -0,0 +1,269 @@
+<?php
+
+namespace app\admin\controller;
+
+use app\admin\common\AdminController;
+use app\admin\api\UserApi;
+use think\exception\ValidateException;
+use app\admin\validate\User as UserValidate;
+
+/**
+ * Description of Role
+ *
+ * @author sgq
+ */
+class User extends AdminController {
+
+    /**
+     * @auth {{/mgr}}
+     * @return type
+     */
+    public function index() {
+        return view();
+    }
+
+    /**
+     * @auth {{/mgr/list}}
+     * @return type
+     */
+    public function list() {
+        $list = UserApi::getList($this->request->param());
+        return json($list);
+    }
+
+    /**
+     * @auth {{/mgr/add}}
+     * @return type
+     */
+    public function add() {
+        if ($this->request->isPost()) {
+            try {
+                $params = $this->request->param();
+                validate(UserValidate::class)->scene("add")->check($params);
+                $res = UserApi::create($params);
+                switch ($res) {
+                    case 10001:
+                        return json(["msg" => "添加成功"]);
+                    default:
+                        throw new ValidateException("未知原因,请联系管理员");
+                }
+            } catch (ValidateException $e) {
+                return json(["msg" => $e->getMessage()], 500);
+            }
+        }
+        return view();
+    }
+
+    /**
+     * @auth {{/mgr/edit}}
+     * @return type
+     */
+    public function edit() {
+        $params = $this->request->param();
+        if ($this->request->isPost()) {
+            try {
+                validate(UserValidate::class)->scene("edit")->check($params);
+                $res = UserApi::update($params);
+                switch ($res) {
+                    case 10001:
+                        return json(["msg" => "编辑成功"]);
+                    case 10002:
+                        throw new ValidateException("账户已经被删除,不能编辑");
+                    case 10003:
+                        throw new ValidateException("不能编辑管理员账户");
+                    default:
+                        throw new ValidateException("未知原因,请联系管理员");
+                }
+            } catch (ValidateException $e) {
+                return json(["msg" => $e->getMessage()], 500);
+            }
+        }
+        $id = $params["userId"];
+        return view("", ["user" => UserApi::getOne($id)]);
+    }
+
+    public function info() {
+        $userId = $this->user["uid"];
+        if ($this->request->isPost()) {
+            try {
+                $params = $this->request->param();
+                $params["id"] = $userId;
+                validate(UserValidate::class)->scene("info")->check($params);
+                $res = UserApi::update($params);
+                switch ($res) {
+                    case 10001:
+                        return json(["msg" => "编辑成功"]);
+                    case 10002:
+                        throw new ValidateException("账户已经被删除,不能编辑");
+                    case 10003:
+                        throw new ValidateException("不能编辑管理员账户");
+                    default:
+                        throw new ValidateException("未知原因,请联系管理员");
+                }
+            } catch (ValidateException $e) {
+                return json(["msg" => $e->getMessage()], 500);
+            }
+        }
+        $user = UserApi::getOne($userId);
+        return view("", ["user" => $user]);
+    }
+
+    public function change_pwd() {
+        $params = $this->request->param();
+        $id = $this->user["uid"];
+        if ($this->request->isPost()) {
+            try {
+                validate(UserValidate::class)->scene("change_pwd")->check($params);
+                $oldPwd = $params["old_password"];
+                $pwd = $params["password"];
+                $res = UserApi::setPwd($id, $oldPwd, $pwd);
+                switch ($res) {
+                    case 10001:
+                        return json(["msg" => "密码修改成功"]);
+                    case 10002:
+                        throw new ValidateException("账户已经被删除,密码修改失败");
+                    case 10003:
+                        throw new ValidateException("不能修改管理员账户的密码");
+                    case 10004:
+                        throw new ValidateException("原密码错误,修改密码失败");
+                    default:
+                        throw new ValidateException("未知原因,请联系管理员");
+                }
+            } catch (ValidateException $e) {
+                return json(["msg" => $e->getMessage()], 500);
+            }
+        }
+        return view("", ["user" => UserApi::getOne($id)]);
+    }
+
+    /**
+     * @auth {{/mgr/delete}}
+     */
+    public function delete() {
+        if ($this->request->isPost()) {
+            $res = UserApi::delete($this->request->param("userId"));
+            switch ($res) {
+                case 10001:
+                    return json(["msg" => "删除成功"]);
+                case 10002:
+                    return json(["msg" => "不能重复删除"], 500);
+                case 10003:
+                    return json(["msg" => "不能操作管理员账户"], 500);
+                default:
+                    return json(["msg" => "未知原因,请联系管理员"], 500);
+            }
+        }
+    }
+
+    /**
+     * @auth {{/mgr/reset}}
+     */
+    public function reset() {
+        if ($this->request->isPost()) {
+            $id = $this->request->param("userId");
+            $info = UserApi::getOne($id);
+            if (!$info)
+                return json(["msg" => "没有对应的管理员账户"]);
+            $salt = $info["salt"];
+            $def_pwd = "JJrc@123";
+            $password = UserApi::getPwd($def_pwd, $salt);
+            $res = UserApi::reset($id, $password);
+            switch ($res) {
+                case 10001:
+                    return json(["msg" => "密码重置成功"]);
+                case 10002:
+                    return json(["msg" => "账户已经被删除,密码重置失败"], 500);
+                case 10003:
+                    return json(["msg" => "不能重置管理员账户"], 500);
+                default:
+                    return json(["msg" => "未知原因,请联系管理员"], 500);
+            }
+        }
+        return view();
+    }
+
+    /**
+     * @auth {{/mgr/freeze}}
+     */
+    public function freeze() {
+        if ($this->request->isPost()) {
+            $params = $this->request->param();
+            $res = UserApi::setFreeze($params["userId"], 2);
+            switch ($res) {
+                case 10001:
+                    return json(["msg" => "冻结成功"]);
+                case 10002:
+                    return json(["msg" => "账户已经被删除,冻结成功失败"], 500);
+                case 10003:
+                    return json(["msg" => "不能重置管理员账户"], 500);
+                default:
+                    return json(["msg" => "未知原因,请联系管理员"], 500);
+            }
+        }
+    }
+
+    /**
+     * @auth {{/mgr/unfreeze}}
+     */
+    public function unfreeze() {
+        if ($this->request->isPost()) {
+            $params = $this->request->param();
+            $res = UserApi::setFreeze($params["userId"], 1);
+            switch ($res) {
+                case 10001:
+                    return json(["msg" => "解除冻结成功"]);
+                case 10002:
+                    return json(["msg" => "账户已经被删除,解除冻结失败"], 500);
+                case 10003:
+                    return json(["msg" => "不能重置管理员账户"], 500);
+                default:
+                    return json(["msg" => "未知原因,请联系管理员"], 500);
+            }
+        }
+    }
+
+    /**
+     * @auth {{/mgr/setRole}}
+     */
+    public function setRole() {
+        if ($this->request->isPost()) {
+            $params = $this->request->param();
+            $res = UserApi::setRole($params["userId"], $params["roleIds"]);
+            switch ($res) {
+                case 10001:
+                    return json(["msg" => "角色分配成功"]);
+                case 10002:
+                    return json(["msg" => "账户已经被删除,角色分配失败"], 500);
+                case 10003:
+                    return json(["msg" => "不能分配管理员账户角色"], 500);
+                default:
+                    return json(["msg" => "未知原因,请联系管理员"], 500);
+            }
+        }
+    }
+
+    /**
+     * @auth {{/mgr/role_assign}}
+     */
+    public function role_assign() {
+        $user = UserApi::getOne($this->request->param("userId"));
+        return view("", ["user" => $user]);
+    }
+
+    /**
+     * 上传头像
+     */
+    public function upload() {
+        if ($this->request->file()) {
+            $avatar = $this->request->file("file");
+            $upload = new \app\common\api\UploadApi();
+            $result = $upload->uploadOne($avatar, "image", "user/avatar");
+            if ($result->code == 200) {
+                $url = $result->filepath;
+                return json([$url]);
+            }
+            return json(["msg" => $result->msg], 500);
+        }
+    }
+
+}

+ 75 - 0
app/admin/validate/User.php

@@ -0,0 +1,75 @@
+<?php
+
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+namespace app\admin\validate;
+
+use think\Validate;
+
+/**
+ * Description of User
+ *
+ * @author sgq
+ */
+class User extends Validate {
+
+    protected $rule = [
+        'account' => 'require|max:50|unique:sys_user',
+        'name' => 'require|max:50|regex:/^[\x{4e00}-\x{9fa5}\(\)()\da-zA-Z&]{2,50}$/u',
+        'type' => 'require|checkInSelect:type,1,2,3,4',
+        'password' => 'require|min:6|regex:/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,}$/',
+        're_password' => 'require|confirm:password',
+        'phone' => 'require|mobile',
+        'companyId' => 'require',
+        'roleId' => 'require',
+        'email' => 'email',
+        'birthday' => "dateFormat:Y-m-d",
+        "sex" => "checkInSelect:sex,1,2"
+    ];
+    protected $message = [
+        'account.require' => '请填写账户!',
+        'account.max' => '账户最多50个字符!',
+        'account.unique' => '该账户已被注册',
+        'name.require' => '请输入姓名',
+        'name.max' => '姓名最多50个字符!',
+        'name.regex' => '姓名只能是中文',
+        'type.require' => "请选择账号类型",
+        'password.require' => '请填写密码!',
+        'password.min' => '密码最少长度6位',
+        'password.regex' => '密码应包含字母与数字两种字符',
+        're_password.require' => '请输入重复密码',
+        're_password.confirm' => '两次密码输入不一致',
+        "phone.require" => "请填写手机号",
+        "phone.mobile" => "请填写正确的手机号",
+        "companyId.require" => "请选择所属单位",
+        "roleId.require" => "请选择角色",
+        "email.email" => "电子邮箱格式错误",
+        "birthday.dateFormat" => "生日必需是有效日期格式[yyyy-MM-dd]"
+    ];
+    protected $scene = [
+        'add' => ['account', 'name', 'type', 'password', 're_password', 'phone', 'companyId', 'email', 'birthday', "sex"],
+        'edit' => ['account', 'name', 'type', 'phone', 'companyId', 'email', 'birthday', "sex"],
+        'info' => ['name', 'phone', 'email', 'birthday', "sex"],
+        'change_pwd' => ['old_password', 'password', "re_password"],
+    ];
+
+    protected function checkInSelect($value, $rule, $data = []) {
+        $title = "";
+        $select = explode(",", $rule);
+        $type = array_shift($select);
+        switch ($type) {
+            case "type":
+                $title = "账号类型";
+                break;
+            case "sex":
+                $title = "性别";
+                break;
+        }
+        return in_array($value, $select) ?: "{$title}只能在预设列表中选择";
+    }
+
+}

+ 2 - 2
app/admin/view/layout/tab.html

@@ -16,9 +16,9 @@
                     </a>
                     <ul class="dropdown-menu m-t-xs">
                         <li><a class="J_menuItem" href="/admin/user/info">个人资料</a></li>
-                        <li><a class="J_menuItem" href="/admin/user/modify_pwd">修改密码</a></li>
+                        <li><a class="J_menuItem" href="/admin/user/change_pwd">修改密码</a></li>
                         <li class="divider"></li>
-                        <li><a href="/admin/auth/logout">安全退出</a>
+                        <li><a href="/index/auth/logout">安全退出</a>
                         </li>
                     </ul>
                 </div>

+ 118 - 0
app/admin/view/user/add.html

@@ -0,0 +1,118 @@
+{extend name="layout/content"}
+{block name="content"}
+<style type="text/css">
+    .spacing {
+        margin-bottom: 10px;
+        padding-right:4px;
+        padding-left: 4px;
+    }
+</style>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="userInfoForm">
+            <input type="hidden" id="id" value="">
+            <div class="row">
+                <div class="col-sm-12 ">
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">账户</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="text" id="account" name="account" >
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">姓名</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="text" id="name" name="name" >
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">账号类型</label>
+                        <div class="col-sm-4 spacing">
+                            <select class="form-control" id="type" name="type">
+                                <option value="">请选择</option>
+                                <option value="1">晋江市优秀人才</option>
+                                <option value="2">集成电路优秀人才</option>
+                                <option value="3">海峡计划申报</option>
+                                <option value="4">super</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">出生日期</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="text" id="birthday" name="birthday" >
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">性别</label>
+                        <div class="col-sm-4 spacing">
+                            <select class="form-control"  id="sex" name="sex">
+                                <option value="1">男</option>
+                                <option value="2">女</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">密码</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="password" id="password" name="password" >
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">确认密码</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="password" id="re_password" name="re_password" >
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">所属单位</label>
+                        <div class="col-sm-4 spacing">
+                            <input type="hidden" id="companyCode">
+                            <select class="form-control" id="companyId" name="companyId" onchange="UserInfoDlg.companyChange()">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="rowGroup" style="display: none">
+                        <label class="col-sm-2 control-label spacing">所属走访小组</label>
+                        <div class="col-sm-4 spacing">
+                            <select class="form-control" id="groupCode" name="groupCode" >
+                            </select>
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">角色</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="text" id="roleid" name="roleid" readonly="readonly">
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">电话</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="phone" id="phone" name="phone" >
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">邮箱</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="email" id="email" name="email" >
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row btn-group-m-t">
+                <div class="col-sm-12" style="text-align: center">
+                    <button type="button" class="btn btn-sm btn-info" onclick="UserInfoDlg.addSubmit()" id="ensure">
+                        <i class="fa fa-check"></i>&nbsp;提交
+                    </button>
+                    <button type="button" class="btn btn-sm btn-danger" onclick="UserInfoDlg.close()" id="cancel">
+                        <i class="fa fa-eraser"></i>&nbsp;取消
+                    </button>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script type="text/javascript">
+    document.write('<script src="/static/modular/system/user/user_info.js?v=' + (new Date()).getTime() + '"><\/script>');
+</script>
+{/block}

+ 56 - 0
app/admin/view/user/change_pwd.html

@@ -0,0 +1,56 @@
+{extend name="layout/content"}
+{block name="content"}
+<div class="col-sm-4  col-sm-offset-4">
+    <div class="ibox float-e-margins">
+        <div class="ibox-title">
+            <h5>修改密码</h5>
+        </div>
+        <div class="ibox-content">
+            <div class="row row-lg">
+                <div class="col-sm-12">
+                    <div class="ibox float-e-margins">
+                        <div class="ibox-content" style="border:none !important; ">
+                            <div class="form-horizontal">
+                                <div class="row">
+                                    <div class="col-sm-12">
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">原密码</label>
+                                            <div class="col-sm-9">
+                                                <input type="password" class="form-control" name="old_password" id="old_password">
+                                            </div>
+                                        </div>
+                                        <div class="hr-line-dashed"></div>
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">新密码</label>
+                                            <div class="col-sm-9">
+                                                <input type="password" class="form-control" id="password" name="password">
+                                            </div>
+                                        </div>
+                                        <div class="hr-line-dashed"></div>
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">新密码验证</label>
+                                            <div class="col-sm-9">
+                                                <input type="password" class="form-control" id="re_password" name="re_password">
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                                <div class="row btn-group-m-t">
+                                    <div class="col-sm-12" style="text-align: center">
+                                        <button type="button" class="btn btn-sm btn-info" onclick="UserInfoDlg.chPwd()" id="ensure">
+                                            <i class="fa fa-check"></i>&nbsp;提交
+                                        </button>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script type="text/javascript">
+    document.write('<script src="/static/modular/system/user/user_info.js?v=' + (new Date()).getTime() + '"><\/script>');
+</script>
+{/block}

+ 107 - 0
app/admin/view/user/edit.html

@@ -0,0 +1,107 @@
+{extend name="layout/content"}
+{block name="content"}
+<style type="text/css">
+    .spacing {
+        margin-bottom: 10px;
+        padding-right:4px;
+        padding-left: 4px;
+    }
+</style>
+<div class="ibox float-e-margins">
+    <div class="ibox-content">
+        <div class="form-horizontal" id="userInfoForm">
+            <input type="hidden" id="id" value="{$user.id}">
+            <div class="row">
+                <div class="col-sm-12 ">
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">账户</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="text" id="account" name="account" value="{$user.account}">
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">姓名</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="text" id="name" name="name" value="{$user.name}">
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">账号类型</label>
+                        <div class="col-sm-4 spacing">
+                            <select class="form-control" id="type" name="type" value="{$user.type}">
+                                <option value="">请选择</option>
+                                <option value="1">晋江市优秀人才</option>
+                                <option value="2">集成电路优秀人才</option>
+                                <option value="3">海峡计划申报</option>
+                                <option value="4">super</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">出生日期</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="text" id="birthday" name="birthday" value="{$user.birthday}">
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">性别</label>
+                        <div class="col-sm-4 spacing">
+                            <select class="form-control"  id="sex" name="sex" value="{$user.sex}">
+                                <option value="1">男</option>
+                                <option value="2">女</option>
+                            </select>
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">所属单位</label>
+                        <div class="col-sm-4 spacing">
+                            <input type="hidden" id="companyCode">
+                            <select class="form-control" id="companyId" name="companyId" onchange="UserInfoDlg.companyChange()" value="{$user.companyId}">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="rowGroup" style="display: none">
+                        <label class="col-sm-2 control-label spacing">所属走访小组</label>
+                        <div class="col-sm-4 spacing">
+                            <select class="form-control" id="groupCode" name="groupCode" value="{$user.groupCode}">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">角色</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="text" id="roleid" name="roleid" value="{$roleName}" readonly="readonly">
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">电话</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="phone" id="phone" name="phone" value="{$user.phone}">
+                        </div>
+                    </div>
+                    <div class="rowGroup">
+                        <label class="col-sm-2 control-label spacing">邮箱</label>
+                        <div class="col-sm-4 spacing">
+                            <input class="form-control" type="email" id="email" name="email" value="{$user.email}">
+                        </div>
+                    </div>
+                </div>
+            </div>
+
+            <div class="row btn-group-m-t">
+                <div class="col-sm-12" style="text-align: center">
+                    <button type="button" class="btn btn-sm btn-info" onclick="UserInfoDlg.editSubmit()" id="ensure">
+                        <i class="fa fa-check"></i>&nbsp;提交
+                    </button>
+                    <button type="button" class="btn btn-sm btn-danger" onclick="UserInfoDlg.close()" id="cancel">
+                        <i class="fa fa-eraser"></i>&nbsp;取消
+                    </button>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script type="text/javascript">
+    document.write('<script src="/static/modular/system/user/user_info.js?v=' + (new Date()).getTime() + '"><\/script>');
+</script>
+{/block}

+ 139 - 0
app/admin/view/user/index.html

@@ -0,0 +1,139 @@
+{extend name="layout/content"}
+{block name="content"}
+<div class="row">
+    <div class="col-sm-12">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>用户管理</h5>
+            </div>
+            <div class="ibox-content">
+                <div class="row row-lg">
+                    <div class="col-sm-12">
+                        <div class="row">
+                            <div class="col-sm-3">
+                                <div class="input-group input-group-sm">
+                                    <div class="input-group-btn">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">姓名</button>
+                                    </div>
+                                    <input type="text" class="form-control" id="name"/>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group input-group-sm">
+                                    <div class="input-group-btn">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">登录账号</button>
+                                    </div>
+                                    <input type="text" class="form-control" id="account"/>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group input-group-sm">
+                                    <div class="input-group-btn">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
+                                            性别
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="sex">
+                                        <option value=""></option>
+                                        <option value="1">男</option>
+                                        <option value="2">女</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group input-group-sm">
+                                    <div class="input-group-btn">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">电话号码</button>
+                                    </div>
+                                    <input type="text" class="form-control" id="phone"/>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group input-group-sm">
+                                    <div class="input-group-btn">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
+                                            所属单位
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="companyId">
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <div class="input-group input-group-sm">
+                                    <div class="input-group-btn">
+                                        <button data-toggle="dropdown" class="btn btn-white dropdown-toggle" type="button">
+                                            启用
+                                        </button>
+                                    </div>
+                                    <select class="form-control" id="status">
+                                        <option value=""></option>
+                                        <option value="1">启用</option>
+                                        <option value="2">冻结</option>
+                                        <option value="3">删除</option>
+                                    </select>
+                                </div>
+                            </div>
+                            <div class="col-sm-3">
+                                <button type="button" class="btn btn-sm btn-primary " onclick="MgrUser.search()">
+                                    <i class="fa fa-search"></i>&nbsp;搜索
+                                </button>
+                                <button type="button" class="btn btn-sm btn-primary " onclick="MgrUser.resetSearch()">
+                                    <i class="fa fa-trash"></i>&nbsp;重置
+                                </button>
+                            </div>
+                        </div>
+                        <div class="hidden-xs" id="managerTableToolbar" role="group">
+                            {if condition="chkCommission('/admin/user/add','/mgr/add')"}
+                            <button type="button" class="btn btn-sm btn-primary " onclick="MgrUser.openAddMgr()">
+                                <i class="fa fa-plus"></i>添加
+                            </button>
+                            {/if}
+                            {if condition="chkCommission('/admin/user/edit','/mgr/edit')"}
+                            <button type="button" class="btn btn-sm btn-primary " onclick="MgrUser.openChangeUser()">
+                                <i class="fa fa-edit"></i>修改
+                            </button>
+                            {/if}
+                            {if condition="chkCommission('/admin/user/delete','/mgr/delete')"}
+                            <button type="button" class="btn btn-sm btn-primary " onclick="MgrUser.delMgrUser()">
+                                <i class="fa fa-remove"></i>删除
+                            </button>
+                            {/if}
+                            {if condition="chkCommission('/admin/user/reset','/mgr/reset')"}
+                            <button type="button" class="btn btn-sm btn-primary " onclick="MgrUser.resetPwd()">
+                                <i class="fa fa-refresh"></i>重置密码
+                            </button>
+                            {/if}
+                            {if condition="chkCommission('/admin/user/freeze','/mgr/freeze')"}
+                            <button type="button" class="btn btn-sm btn-primary " onclick="MgrUser.freezeAccount()">
+                                <i class="fa fa-warning"></i>冻结
+                            </button>
+                            {/if}
+                            {if condition="chkCommission('/admin/user/unfreeze','/mgr/unfreeze')"}
+                            <button type="button" class="btn btn-sm btn-primary " onclick="MgrUser.unfreeze()">
+                                <i class="fa fa-check-circle"></i>解除冻结
+                            </button>
+                            {/if}
+                            {if condition="chkCommission('/admin/user/setRole','/mgr/setRole')"}
+                            <button type="button" class="btn btn-sm btn-primary " onclick="MgrUser.roleAssign()">
+                                <i class="fa fa-user-secret"></i>角色分配
+                            </button>
+                            {/if}
+                        </div>
+                        <table id="managerTable" class="table-condensed" style="font-size: 10px;table-layout: fixed!important;" data-mobile-responsive="true" data-click-to-select="true">
+                            <thead>
+                                <tr>
+                                    <th data-field="selectItem" data-checkbox="true"></th>
+                                </tr>
+                            </thead>
+                        </table>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script type="text/javascript">
+    document.write('<script src="/static/modular/system/user/user.js?v=' + (new Date()).getTime() + '"><\/script>');
+</script>
+{/block}

+ 132 - 0
app/admin/view/user/info.html

@@ -0,0 +1,132 @@
+{extend name="layout/content"}
+{block name="content"}
+<div class="col-sm-6  col-sm-offset-3">
+    <div class="ibox float-e-margins">
+        <div class="ibox-title">
+            <h5>用户管理</h5>
+        </div>
+        <div class="ibox-content">
+            <div class="row row-lg">
+                <div class="col-sm-12">
+                    <div class="ibox float-e-margins">
+                        <div class="ibox-content" style="border:none !important; ">
+                            <div class="form-horizontal" id="userInfoForm">
+                                <input type="hidden" id="id" value="{$user.id}">
+                                <input type="hidden" id="sexValue" value="{$user.sex}">
+
+                                <div class="row">
+                                    <div class="col-sm-6 b-r">                                        
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label head-scu-label">头像</label>
+                                            <div class="col-sm-4">
+                                                <div id="avatarPreId">
+                                                    <div>
+                                                        <img width="100px" height="100px" {if condition="$user['avatar']"}src="{$user.avatar}"{else/}src="/static/img/girl.gif"{/if}>
+                                                    </div>
+                                                </div>
+                                            </div>
+                                            <div class="col-sm-2">
+                                                <div class="head-scu-btn upload-btn" id="avatarBtnId">
+                                                    <i class="fa fa-upload"></i>&nbsp;上传头像
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <input type="hidden" id="avatar" value="{$user.originalAvatar}"/>
+                                        <div class="hr-line-dashed"></div>
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">账户</label>
+                                            <div class="col-sm-9">
+                                                <input type="text" class="form-control" id="account" name="account" value="{$user.account}" disabled="disabled">
+                                            </div>
+                                        </div>
+                                        <div class="hr-line-dashed"></div>
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">角色</label>
+                                            <div class="col-sm-9">
+                                                <input type="text" class="form-control" id="roleid" name="roleid" value="{$user.roleName}" disabled="disabled">
+                                            </div>
+                                        </div>
+                                        <div class="hr-line-dashed"></div>
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">单位</label>
+                                            <div class="col-sm-9">
+                                                <input type="text" class="form-control" id="citySel" name="citySel" value="{$user.companyName}" readonly="readonly" onclick="UserInfoDlg.showInfoDeptSelectTree(); return false;" style="background-color: #ffffff !important;">
+                                                <input class="form-control" type="hidden" id="deptid" value="{$user.companyId}">
+                                                <div id="menuContent" style="display: none; position: absolute; z-index: 200;">
+                                                    <ul id="treeDemo" class="ztree tree-box" style="width:250px !important;"></ul>
+                                                </div>
+                                            </div>
+                                        </div>
+                                        <div class="hr-line-dashed"></div>
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">性别</label>
+                                            <div class="col-sm-9">
+                                                <select class="form-control" value="{$user.sex}" id="sex" name="sex">
+                                                    <option value="1">男</option>
+                                                    <option value="2">女</option>
+                                                </select>
+                                            </div>
+                                        </div>
+                                        <div class="hr-line-dashed"></div>
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">邮箱</label>
+                                            <div class="col-sm-9">
+                                                <input type="text" class="form-control" id="email" name="email" value="{$user.email}">
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+
+                                <div class="col-sm-6">
+                                    <div id="driverInfoContent">
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">姓名</label>
+                                            <div class="col-sm-9">
+                                                <input type="text" class="form-control" id="name" name="name" value="{$user.name}">
+                                            </div>
+                                        </div>
+                                        <div class="hr-line-dashed"></div>
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">出生日期</label>
+                                            <div class="col-sm-9">
+                                                <input type="text" class="form-control" id="birthday" name="birthday" value="{$user.birthday}">
+                                            </div>
+                                        </div>
+                                        <div class="hr-line-dashed"></div>
+                                        <div class="form-group">
+                                            <label class="col-sm-3 control-label">电话</label>
+                                            <div class="col-sm-9">
+                                                <input type="text" class="form-control" id="phone" name="phone" value="{$user.phone}">
+                                            </div>
+                                        </div>
+                                    </div>
+                                </div>
+                            </div>
+
+                            <div class="progress progress-striped" id="progressTipArea" style="margin-top: 20px;">
+                                <div id="progressBar" style="width: 0%" aria-valuemax="100" aria-valuemin="0" aria-valuenow="0" role="progressbar" class="progress-bar progress-bar-info">
+                                </div>
+                            </div>
+
+                            <div class="row btn-group-m-t">
+                                <div class="col-sm-12" style="text-align: center">
+                                    <button type="button" class="btn btn-sm btn-info " onclick="UserInfoDlg.editInfo()" id="ensure">
+                                        <i class="fa fa-check"></i>&nbsp;提交
+                                    </button>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+</div>
+<script src="/static/modular/system/user/user_info.js"></script>
+<script>
+                                        laydate.render({
+                                            elem: '#birthday'
+                                        });
+</script>
+{/block}

+ 76 - 0
app/admin/view/user/role_assign.html

@@ -0,0 +1,76 @@
+{extend name="layout/content"}
+{block name="content"}
+<script type="text/javascript">
+    $(function () {
+        var index = parent.layer.getFrameIndex(window.name); //获取窗口索引
+
+        $("#btn_close").bind("click", function () {
+            parent.layer.close(index);
+        });
+
+        $("#btn_save").bind("click", function () {
+            var ids = Feng.zTreeCheckedNodes("zTree");
+            var ajax = new $ax("/admin/user/setRole", function (data) {
+                Feng.success(data.msg);
+                window.parent.MgrUser.table.refresh();
+                parent.layer.close(index);
+            }, function (data) {
+                Feng.error(data.responseJSON.msg + "!");
+            });
+            ajax.set("roleIds", ids);
+            ajax.set("userId", "{$user.id}");
+            ajax.start();
+        });
+
+        initZtree();
+    });
+
+    function initZtree() {
+        var setting = {
+            check: {
+                enable: true,
+                chkboxType: {
+                    "Y": "",
+                    "N": ""
+                }
+            },
+            data: {
+                simpleData: {
+                    enable: true
+                }
+            }
+        };
+
+        var ztree = new $ZTree("zTree", "/admin/role/roleTreeListByUserId/userId/{:request()->param('userId')}");
+        ztree.setSettings(setting);
+        ztree.init();
+    }
+</script>
+
+
+<!-- 配置grid -->
+<div class="container"
+     style="padding:  0px 10px !important; margin-top: -10px; text-align: center !important;">
+    <div class="row">
+        <div class="ibox float-e-margins">
+            <div class="ibox-title">
+                <h5>{$user.name}({$user.account})</h5>
+            </div>
+            <div class="ibox-content">
+                <ul id="zTree" class="ztree"></ul>
+            </div>
+        </div>
+    </div>
+    <div class="row">
+        <div class="col-md-12">
+            <button class="btn btn-sm btn-info" type="button" id="btn_save">
+                <i class="ace-icon fa fa-check bigger-110"></i> 保存
+            </button>
+            &nbsp;
+            <button class="btn btn-sm btn-danger" type="button" id="btn_close">
+                <i class="ace-icon fa fa-close bigger-110"></i> 关闭
+            </button>
+        </div>
+    </div>
+</div>
+{/block}

+ 6 - 0
app/common/api/CompanyApi.php

@@ -31,6 +31,12 @@ class CompanyApi {
         return ["total" => $count, "rows" => $list];
     }
 
+    public static function getAll() {
+        $where[] = ["delete", "=", 0];
+        $list = Company::where($where)->order("sn asc")->select()->toArray();
+        return $list;
+    }
+
     public static function edit($params) {
         if ($params["id"]) {
             $data["id"] = $params["id"];

+ 2 - 2
app/common/view/layout/tab.html

@@ -16,9 +16,9 @@
                     </a>
                     <ul class="dropdown-menu m-t-xs">
                         <li><a class="J_menuItem" href="/admin/user/info">个人资料</a></li>
-                        <li><a class="J_menuItem" href="/admin/user/modify_pwd">修改密码</a></li>
+                        <li><a class="J_menuItem" href="/admin/user/change_pwd">修改密码</a></li>
                         <li class="divider"></li>
-                        <li><a href="/admin/auth/logout">安全退出</a>
+                        <li><a href="/index/auth/logout">安全退出</a>
                         </li>
                     </ul>
                 </div>

+ 1 - 1
public/static/js/common/web-upload-object.js

@@ -13,7 +13,7 @@
 		this.pictureId = pictureId;
 		this.uploadBtnId = pictureId + "BtnId";
 		this.uploadPreId = pictureId + "PreId";
-		this.uploadUrl = Feng.ctxPath + '/mgr/upload';
+		this.uploadUrl = '/admin/user/upload';
 		this.fileSizeLimit = 100 * 1024 * 1024;
 		this.picWidth = 800;
 		this.picHeight = 800;

+ 46 - 37
public/static/modular/system/user/user.js

@@ -2,11 +2,11 @@
  * 系统管理--用户管理的单例对象
  */
 var MgrUser = {
-    id: "managerTable",//表格id
-    seItem: null,		//选中的条目
+    id: "managerTable", //表格id
+    seItem: null, //选中的条目
     table: null,
     layerIndex: -1,
-    deptid:0
+    deptid: 0
 };
 
 /**
@@ -16,34 +16,43 @@ MgrUser.initColumn = function () {
     var columns = [
         {field: 'selectItem', radio: true},
         {title: 'id', field: 'id', visible: false, align: 'center', valign: 'middle'},
-        {title: '账号', field: 'account', align: 'center', valign: 'middle','class': 'uitd_showTip',},
-        {title: '姓名', field: 'name', align: 'center', valign: 'middle','class': 'uitd_showTip',},
-        {title: '性别', field: 'sexName', align: 'center', valign: 'middle'},
-        {title: '账号类型', field: 'type', align: 'center', valign: 'middle','class': 'uitd_showTip',
+        {title: '账号', field: 'account', align: 'center', valign: 'middle', 'class': 'uitd_showTip', },
+        {title: '姓名', field: 'name', align: 'center', valign: 'middle', 'class': 'uitd_showTip', },
+        {title: '性别', field: 'sexName', align: 'center', valign: 'middle',
+            formatter: function (value, row, index) {
+                if (value == 1) {
+                    return "男";
+                }
+                return "女";
+            }
+        },
+        {title: '账号类型', field: 'type', align: 'center', valign: 'middle', 'class': 'uitd_showTip',
             formatter: function (value, row, index) {
                 if (value == 1) {
                     return "晋江市现代产业体系人才";
-                }else if (value == 2) {
+                } else if (value == 2) {
                     return "集成电路优秀人才";
-                }else if (value == 3) {
+                } else if (value == 3) {
                     return "海峡计划申报";
-                }else if (value == 4) {
+                } else if (value == 4) {
                     return "super";
                 }
             }
         },
-        {title: '角色', field: 'roleName', align: 'center', valign: 'middle','class': 'uitd_showTip',},
-        {title: '单位', field: 'companyName', align: 'center', valign: 'middle','class': 'uitd_showTip',},
-        {title: '邮箱', field: 'email', align: 'center', valign: 'middle','class': 'uitd_showTip',},
-        {title: '电话', field: 'phone', align: 'center', valign: 'middle', sortable: false,'class': 'uitd_showTip',},
-        {title: '创建时间', field: 'createTime', align: 'center', valign: 'middle', sortable: true,'class': 'uitd_showTip',},
+        {title: '角色', field: 'roleName', align: 'center', valign: 'middle', 'class': 'uitd_showTip', },
+        {title: '单位', field: 'companyName', align: 'center', valign: 'middle', 'class': 'uitd_showTip', },
+        {title: '邮箱', field: 'email', align: 'center', valign: 'middle', 'class': 'uitd_showTip', },
+        {title: '电话', field: 'phone', align: 'center', valign: 'middle', sortable: false, 'class': 'uitd_showTip', },
+        {title: '创建时间', field: 'createTime', align: 'center', valign: 'middle', sortable: true, 'class': 'uitd_showTip', },
         {title: '状态', field: 'status', align: 'center', valign: 'middle', sortable: true,
             formatter: function (value, row, index) {
                 if (value == 1) {
                     return "<button type=\"button\" style=\"line-height: 1.3\" class=\"btn btn-primary btn-xs\">启用</button>";
-                }if (value == 2) {
+                }
+                if (value == 2) {
                     return "<button type=\"button\" style=\"line-height: 1.3\" class=\"btn btn-warning btn-xs\">冻结</button>";
-                }if (value == 3) {
+                }
+                if (value == 3) {
                     return "<button type=\"button\" style=\"line-height: 1.3\" class=\"btn btn-danger btn-xs\">被删除</button>";
                 }
             }
@@ -75,7 +84,7 @@ MgrUser.openAddMgr = function () {
         area: ['1000px', '560px'], //宽高
         fix: false, //不固定
         maxmin: true,
-        content: Feng.ctxPath + '/mgr/user_add'
+        content: '/admin/user/add'
     });
     MgrUser.layerIndex = index;
 };
@@ -92,7 +101,7 @@ MgrUser.openChangeUser = function () {
             area: ['1000px', '450px'], //宽高
             fix: false, //不固定
             maxmin: true,
-            content: Feng.ctxPath + '/mgr/user_edit/' + this.seItem.id
+            content: '/admin/user/edit/userId/' + this.seItem.id
         });
         MgrUser.layerIndex = index;
     }
@@ -110,7 +119,7 @@ MgrUser.roleAssign = function () {
             area: ['300px', '400px'], //宽高
             fix: false, //不固定
             maxmin: true,
-            content: Feng.ctxPath + '/mgr/role_assign/' + this.seItem.id
+            content: Feng.ctxPath + '/admin/user/role_assign/userId/' + this.seItem.id
         });
         MgrUser.layerIndex = index;
     }
@@ -122,19 +131,19 @@ MgrUser.roleAssign = function () {
 MgrUser.delMgrUser = function () {
     if (this.check()) {
 
-        var operation = function(){
+        var operation = function () {
             var userId = MgrUser.seItem.id;
-            var ajax = new $ax(Feng.ctxPath + "/mgr/delete", function () {
-                Feng.success("删除成功!");
+            var ajax = new $ax("/admin/user/delete", function (data) {
+                Feng.success(data.msg);
                 MgrUser.table.refresh();
             }, function (data) {
-                Feng.error("删除失败!" + data.responseJSON.message + "!");
+                Feng.error(data.responseJSON.msg);
             });
             ajax.set("userId", userId);
             ajax.start();
         };
 
-        Feng.confirm("是否删除用户" + MgrUser.seItem.account + "?",operation);
+        Feng.confirm("是否删除用户" + MgrUser.seItem.account + "?", operation);
     }
 };
 
@@ -145,11 +154,11 @@ MgrUser.delMgrUser = function () {
 MgrUser.freezeAccount = function () {
     if (this.check()) {
         var userId = this.seItem.id;
-        var ajax = new $ax(Feng.ctxPath + "/mgr/freeze", function (data) {
-            Feng.success("冻结成功!");
+        var ajax = new $ax("/admin/user/freeze", function (data) {
+            Feng.success(data.msg);
             MgrUser.table.refresh();
         }, function (data) {
-            Feng.error("冻结失败!" + data.responseJSON.message + "!");
+            Feng.error(data.responseJSON.msg);
         });
         ajax.set("userId", userId);
         ajax.start();
@@ -163,11 +172,11 @@ MgrUser.freezeAccount = function () {
 MgrUser.unfreeze = function () {
     if (this.check()) {
         var userId = this.seItem.id;
-        var ajax = new $ax(Feng.ctxPath + "/mgr/unfreeze", function (data) {
-            Feng.success("解除冻结成功!");
+        var ajax = new $ax("/admin/user/unfreeze", function (data) {
+            Feng.success(data.msg);
             MgrUser.table.refresh();
         }, function (data) {
-            Feng.error("解除冻结失败!");
+            Feng.error(data.responseJSON.msg);
         });
         ajax.set("userId", userId);
         ajax.start();
@@ -184,10 +193,10 @@ MgrUser.resetPwd = function () {
             btn: ['确定', '取消'],
             shade: false //不显示遮罩
         }, function () {
-            var ajax = new $ax(Feng.ctxPath + "/mgr/reset", function (data) {
-                Feng.success("重置密码成功!");
+            var ajax = new $ax("/admin/user/reset", function (data) {
+                Feng.success(data.msg);
             }, function (data) {
-                Feng.error("重置密码失败!");
+                Feng.error(data.responseJSON.msg);
             });
             ajax.set("userId", userId);
             ajax.start();
@@ -232,8 +241,8 @@ MgrUser.onClickDept = function (e, treeId, treeNode) {
 
 $(function () {
     var defaultColunms = MgrUser.initColumn();
-    var table = new BSTable("managerTable", "/mgr/list", defaultColunms);
-    table.setPaginationType("client");
+    var table = new BSTable("managerTable", "/admin/user/list", defaultColunms);
+    table.setPaginationType("server");
     table.setQueryParams(MgrUser.formParams());
     MgrUser.table = table.init();
     //初始化单位下拉框
@@ -242,6 +251,6 @@ $(function () {
         "displayCode": "id",
         "displayName": "name",
         "type": "GET",
-        "url": Feng.ctxPath + "/company/selectAll"
+        "url": "/admin/company/selectAll"
     });
 });

+ 82 - 60
public/static/modular/system/user/user_info.js

@@ -24,12 +24,12 @@ var UserInfoDlg = {
                     message: '电话号码不能为空'
                 },
                 regexp: {
-                    regexp:/^1\d{10}$/,
+                    regexp: /^1\d{10}$/,
                     message: '手机号码格式错误'
                 }
             }
         },
-        type:{
+        type: {
             validators: {
                 notEmpty: {
                     message: '账号类型不能为空'
@@ -49,12 +49,12 @@ var UserInfoDlg = {
                     message: '密码不能为空'
                 },
                 identical: {
-                    field: 'rePassword',
+                    field: 're_password',
                     message: '两次密码不一致'
                 },
             }
         },
-        rePassword: {
+        re_password: {
             validators: {
                 notEmpty: {
                     message: '密码不能为空'
@@ -82,29 +82,29 @@ UserInfoDlg.clearData = function () {
  * @param val 数据的具体值
  */
 UserInfoDlg.set = function (key, value) {
-    if(typeof value == "undefined"){
-        if(typeof $("#" + key).val() =="undefined"){
-            var str="";
-            var ids="";
-            $("input[name='"+key+"']:checkbox").each(function(){
-                if(true == $(this).is(':checked')){
-                    str+=$(this).val()+",";
+    if (typeof value == "undefined") {
+        if (typeof $("#" + key).val() == "undefined") {
+            var str = "";
+            var ids = "";
+            $("input[name='" + key + "']:checkbox").each(function () {
+                if (true == $(this).is(':checked')) {
+                    str += $(this).val() + ",";
                 }
             });
-            if(str){
-                if(str.substr(str.length-1)== ','){
-                    ids = str.substr(0,str.length-1);
+            if (str) {
+                if (str.substr(str.length - 1) == ',') {
+                    ids = str.substr(0, str.length - 1);
                 }
-            }else{
-                $("input[name='"+key+"']:radio").each(function(){
-                    if(true == $(this).is(':checked')){
-                        ids=$(this).val()
+            } else {
+                $("input[name='" + key + "']:radio").each(function () {
+                    if (true == $(this).is(':checked')) {
+                        ids = $(this).val()
                     }
                 });
             }
             this.userInfoData[key] = ids;
-        }else{
-            this.userInfoData[key]= $("#" + key).val();
+        } else {
+            this.userInfoData[key] = $("#" + key).val();
         }
     }
 
@@ -186,19 +186,19 @@ UserInfoDlg.close = function () {
  */
 UserInfoDlg.collectData = function () {
     this.set('id')
-        .set('account')
-        .set('sex')
-        .set('type')
-        .set('password')
-        .set('avatar')
-        .set('email')
-        .set('name')
-        .set('birthday')
-        .set('rePassword')
-        .set('deptid')
-        .set('phone')
-        .set('companyId')
-        .set("groupCode");
+            .set('account')
+            .set('sex')
+            .set('type')
+            .set('password')
+            .set('avatar')
+            .set('email')
+            .set('name')
+            .set('birthday')
+            .set('re_password')
+            .set('deptid')
+            .set('phone')
+            .set('companyId')
+            .set("groupCode");
 };
 
 /**
@@ -206,8 +206,8 @@ UserInfoDlg.collectData = function () {
  */
 UserInfoDlg.validatePwd = function () {
     var password = this.get("password");
-    var rePassword = this.get("rePassword");
-    if (password == rePassword) {
+    var re_password = this.get("re_password");
+    if (password == re_password) {
         return true;
     } else {
         return false;
@@ -237,12 +237,12 @@ UserInfoDlg.addSubmit = function () {
         return;
     }
     //提交信息
-    var ajax = new $ax(Feng.ctxPath + "/mgr/add", function (data) {
-        Feng.success("添加成功!");
+    var ajax = new $ax("/admin/user/add", function (data) {
+        Feng.success(data.msg);
         window.parent.MgrUser.table.refresh();
         UserInfoDlg.close();
     }, function (data) {
-        Feng.error("添加失败!" + data.responseJSON.message + "!");
+        Feng.error(data.responseJSON.msg);
     });
     ajax.set(this.userInfoData);
     ajax.start();
@@ -258,36 +258,58 @@ UserInfoDlg.editSubmit = function () {
         return;
     }
     //提交信息
-    var ajax = new $ax(Feng.ctxPath + "/mgr/edit", function (data) {
-        Feng.success("修改成功!");
+    var ajax = new $ax("/admin/user/edit", function (data) {
+        Feng.success(data.msg);
         if (window.parent.MgrUser != undefined) {
             window.parent.MgrUser.table.refresh();
             UserInfoDlg.close();
         }
     }, function (data) {
-        Feng.error("修改失败!" + data.responseJSON.message + "!");
+        Feng.error(data.responseJSON.msg);
+    });
+    ajax.set(this.userInfoData);
+    ajax.start();
+};
+/**
+ * 提交修改
+ */
+UserInfoDlg.editInfo = function () {
+    this.clearData();
+    this.collectData();
+    if (!this.validate()) {
+        return;
+    }
+    //提交信息
+    var ajax = new $ax("/admin/user/info", function (data) {
+        Feng.success(data.msg);
+        if (window.parent.MgrUser != undefined) {
+            window.parent.MgrUser.table.refresh();
+            UserInfoDlg.close();
+        }
+    }, function (data) {
+        Feng.error(data.responseJSON.msg);
     });
     ajax.set(this.userInfoData);
     ajax.start();
 };
 
-UserInfoDlg.companyChange = function(){
-   var companyId = $("#companyId").val()
-    if(Feng.isNotEmptyStr(companyId)){
-        var ajax = new $ax(Feng.ctxPath + "/company/detail/"+companyId, function (data) {
-            if(data.code == CONFIG.COM_VISITGROUP){
-                $("#groupCode").parent().parent().css("display","block");
-            }else{
+UserInfoDlg.companyChange = function () {
+    var companyId = $("#companyId").val()
+    if (Feng.isNotEmptyStr(companyId)) {
+        var ajax = new $ax("/admin/company/detail/id/" + companyId, function (data) {
+            if (data.code == CONFIG.COM_VISITGROUP) {
+                $("#groupCode").parent().parent().css("display", "block");
+            } else {
                 $("#groupCode").val("")
-                $("#groupCode").parent().parent().css("display","none");
+                $("#groupCode").parent().parent().css("display", "none");
             }
         }, function (data) {
             Feng.error("查询失败!" + data.responseJSON.message + "!");
         });
         ajax.start();
-    }else{
+    } else {
         $("#groupCode").val("")
-        $("#groupCode").parent().parent().css("display","none");
+        $("#groupCode").parent().parent().css("display", "none");
     }
 }
 
@@ -295,14 +317,14 @@ UserInfoDlg.companyChange = function(){
  * 修改密码
  */
 UserInfoDlg.chPwd = function () {
-    var ajax = new $ax(Feng.ctxPath + "/mgr/changePwd", function (data) {
-        Feng.success("修改成功!");
+    var ajax = new $ax("/admin/user/change_pwd", function (data) {
+        Feng.success(data.msg);
     }, function (data) {
-        Feng.error("修改失败!" + data.responseJSON.message + "!");
+        Feng.error(data.responseJSON.msg);
     });
-    ajax.set("oldPwd");
-    ajax.set("newPwd");
-    ajax.set("rePwd");
+    ajax.set("old_password");
+    ajax.set("password");
+    ajax.set("re_password");
     ajax.start();
 
 };
@@ -321,12 +343,12 @@ $(function () {
         "displayCode": "id",
         "displayName": "name",
         "type": "GET",
-        "url": Feng.ctxPath + "/company/selectAll"
+        "url": "/admin/company/selectAll"
     });
-    var arr = [{"name":"groupCode","code":"un_visit_group"}];
+    var arr = [{"name": "groupCode", "code": "un_visit_group"}];
     Feng.findChildDictBatch(JSON.stringify(arr));
     //批量加载时间控件
-    laydate.render({elem: "#birthday",type: "date",trigger: 'click',format: 'yyyy-MM-dd',value:new Date($("#birthday").val())});
+    laydate.render({elem: "#birthday", type: "date", trigger: 'click', format: 'yyyy-MM-dd', value: new Date($("#birthday").val())});
     $("select").each(function () {
         $(this).val($(this).attr("value")).trigger("change");
     });