Bläddra i källkod

新增管理员可修改团队成员资料

kuaifan 5 år sedan
förälder
incheckning
d002069003

+ 43 - 17
app/Http/Controllers/Api/UsersController.php

@@ -369,7 +369,8 @@ class UsersController extends Controller
     /**
      * 添加团队成员
      *
-     * @apiParam {String} username              用户名(多个用英文逗号分隔)
+     * @apiParam {Number} [id]                  用户ID(留空为添加用户)
+     * @apiParam {String} username              用户名(修改时无效,多个用英文逗号分隔)
      * @apiParam {String} userpass              密码
      * @apiParam {Object} [userimg]             会员头像
      * @apiParam {String} [nickname]            昵称
@@ -410,25 +411,50 @@ class UsersController extends Controller
                 return Base::retError('昵称最多只能设置20个字!');
             }
         }
-        //开始注册
-        $username = trim(Request::input('username'));
-        $array = explode(",", $username);
-        if (count($array) > 500) {
-            return Base::retError(['一次最多只能添加%个账号!', 500]);
-        }
-        foreach ($array AS $item) {
-            if ($item) {
-                $user = Users::reg(trim($item), trim(Request::input('userpass')), [
-                    'userimg' => $userimg ?: '',
-                    'nickname' => $nickname ?: '',
-                    'profession' => $profession ?: '',
-                ]);
-                if (Base::isError($user)) {
-                    return $user;
+        //
+        $id = intval(Request::input('id'));
+        $userpass = trim(Request::input('userpass'));
+        $otherArray = [
+            'userimg' => $userimg ?: '',
+            'nickname' => $nickname ?: '',
+            'profession' => $profession ?: '',
+        ];
+        if ($id > 0) {
+            //开始修改
+            if ($userpass) {
+                if (strlen($userpass) < 6) {
+                    return Base::retError('密码设置不能小于6位数!');
+                } elseif (strlen($userpass) > 32) {
+                    return Base::retError('密码最多只能设置32位数!');
+                }
+                $encrypt = Base::generatePassword(6);
+                $otherArray['encrypt'] = $encrypt;
+                $otherArray['userpass'] = Base::md52($userpass, $encrypt);
+            }
+            DB::table('users')->where('id', $id)->update($otherArray);
+            Users::AZUpdate($id);
+            return Base::retSuccess('修改成功!');
+        } else {
+            //开始注册
+            $username = trim(Request::input('username'));
+            $array = array_values(array_filter(array_unique(explode(",", $username))));
+            if (empty($array)) {
+                return Base::retError('请填写有效的用户名!');
+            }
+            if (count($array) > 500) {
+                return Base::retError(['一次最多只能添加%个账号!', 500]);
+            }
+            foreach ($array AS $item) {
+                $username = trim($item);
+                if ($username) {
+                    $user = Users::reg($username, $userpass, $otherArray);
+                    if (Base::isError($user)) {
+                        return $user;
+                    }
                 }
             }
+            return Base::retSuccess('添加成功!');
         }
-        return Base::retSuccess('添加成功!');
     }
 
     /**

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
     "name": "wookteam",
-    "version": "1.5.5",
+    "version": "1.5.6",
     "description": "WookTeam是一款轻量级的开源在线团队协作工具,提供各类文档工具、在线思维导图、在线流程图、项目管理、任务分发、即时IM,知识库管理等工具。",
     "scripts": {
         "ide-helper": "php artisan ide-helper:generate",

+ 5 - 0
resources/assets/js/main/components/project/task/detail/detail.vue

@@ -620,6 +620,11 @@
                         while (tempArray.length > 0 && tempArray[tempArray.length - 1].detail == '') {
                             tempArray.splice(tempArray.length - 1, 1);
                         }
+                        tempArray.forEach((item) => {
+                            if (typeof item.stip !== "undefined") {
+                                delete item.stip;
+                            }
+                        });
                         if ($A.jsonStringify(tempArray) === $A.jsonStringify(this.bakData[act])) {
                             return;
                         }

+ 74 - 53
resources/assets/js/main/pages/team.vue

@@ -14,7 +14,7 @@
                 </div>
                 <div class="w-nav-flex"></div>
                 <div class="w-nav-right">
-                    <span class="ft hover" @click="addShow=true"><i class="ft icon">&#xE740;</i> {{$L('添加团队成员')}}</span>
+                    <span class="ft hover" @click="handleUser('add')"><i class="ft icon">&#xE740;</i> {{$L('添加团队成员')}}</span>
                 </div>
             </div>
         </div>
@@ -32,36 +32,49 @@
 
         <Modal
             v-model="addShow"
-            :title="$L('添加团队成员')"
+            :title="$L(formData.id > 0 ? '修改团队成员' : '添加团队成员')"
             :closable="false"
             :mask-closable="false"
             class-name="simple-modal">
-            <Form ref="add" :model="formAdd" :rules="ruleAdd" :label-width="80">
+            <Form ref="add" :model="formData" :label-width="80">
                 <FormItem prop="userimg" :label="$L('头像')">
-                    <ImgUpload v-model="formAdd.userimg"></ImgUpload>
+                    <ImgUpload v-model="formData.userimg"></ImgUpload>
                 </FormItem>
                 <FormItem prop="nickname" :label="$L('昵称')">
-                    <Input type="text" v-model="formAdd.nickname"></Input>
+                    <Input type="text" v-model="formData.nickname"></Input>
                 </FormItem>
                 <FormItem prop="profession" :label="$L('职位/职称')">
-                    <Input v-model="formAdd.profession"></Input>
+                    <Input v-model="formData.profession"></Input>
                 </FormItem>
-                <FormItem prop="username" :label="$L('用户名')">
-                    <TagInput v-model="formAdd.username" :placeholder="$L('添加后不可修改,使用英文逗号添加多个。')"/>
+                <FormItem prop="username">
+                    <div slot="label"><em v-if="formData.id == 0" class="team-add-red-input">*</em>{{$L('用户名')}}</div>
+                    <Input v-if="formData.id > 0" disabled v-model="formData.username"></Input>
+                    <TagInput v-else v-model="formData.username" :placeholder="$L('添加后不可修改,使用英文逗号添加多个。')"/>
                 </FormItem>
-                <FormItem prop="userpass" :label="$L('登录密码')">
-                    <Input type="password" v-model="formAdd.userpass" :placeholder="$L('最少6位数')"></Input>
+                <FormItem prop="userpass">
+                    <div slot="label"><em v-if="formData.id == 0" class="team-add-red-input">*</em>{{$L('登录密码')}}</div>
+                    <Input type="password" v-model="formData.userpass" :placeholder="$L(formData.id > 0 ? '留空不修改' : '最少6位数')"></Input>
                 </FormItem>
             </Form>
             <div slot="footer">
                 <Button type="default" @click="addShow=false">{{$L('取消')}}</Button>
-                <Button type="primary" :loading="loadIng > 0" @click="onAdd">{{$L('添加')}}</Button>
+                <Button type="primary" :loading="loadIng > 0" @click="onAdd">{{$L(formData.id > 0 ? '修改' : '添加')}}</Button>
             </div>
         </Modal>
 
     </div>
 </template>
 
+<style lang="scss">
+    .team-add-red-input {
+        display: inline-block;
+        margin-right: 4px;
+        line-height: 1;
+        font-family: SimSun,serif;
+        font-size: 14px;
+        color: #ed4014;
+    }
+</style>
 <style lang="scss" scoped>
     .team {
         .team-main {
@@ -107,14 +120,14 @@
                 noDataText: "",
 
                 addShow: false,
-                formAdd: {
+                formData: {
+                    id: 0,
                     userimg: '',
                     profession: '',
                     username: '',
                     nickname: '',
-                    userpass: ''
+                    userpass: '',
                 },
-                ruleAdd: {}
             }
         },
         created() {
@@ -217,7 +230,7 @@
                             },
                             on: {
                                 'on-click': (name) => {
-                                    this.handleUser(name, params.row.username)
+                                    this.handleUser(name, params.row)
                                 }
                             }
                         }, [
@@ -236,6 +249,11 @@
                             }, [
                                 h('DropdownItem', {
                                     props: {
+                                        name: 'edit',
+                                    },
+                                }, this.$L('修改成员信息')),
+                                h('DropdownItem', {
+                                    props: {
                                         name: $A.identityRaw('admin', params.row.identity) ? 'deladmin' : 'setadmin',
                                     },
                                 }, this.$L($A.identityRaw('admin', params.row.identity) ? '取消管理员' : '设为管理员')),
@@ -250,17 +268,6 @@
                     return h('div', array);
                 }
             }];
-            //
-            this.ruleAdd = {
-                username: [
-                    { required: true, message: this.$L('请填写用户名!'), trigger: 'change' },
-                    { type: 'string', min: 2, message: this.$L('用户名长度至少2位!'), trigger: 'change' }
-                ],
-                userpass: [
-                    { required: true, message: this.$L('请填写登录密码!'), trigger: 'change' },
-                    { type: 'string', min: 6, message: this.$L('密码长度至少6位!'), trigger: 'change' }
-                ]
-            };
         },
         mounted() {
             this.getLists(true);
@@ -322,33 +329,47 @@
             },
 
             onAdd() {
-                this.$refs.add.validate((valid) => {
-                    if (valid) {
-                        this.loadIng++;
-                        $A.apiAjax({
-                            url: 'users/team/add',
-                            data: this.formAdd,
-                            complete: () => {
-                                this.loadIng--;
-                            },
-                            success: (res) => {
-                                if (res.ret === 1) {
-                                    this.addShow = false;
-                                    this.$Message.success(res.msg);
-                                    this.$refs.add.resetFields();
-                                    //
-                                    this.getLists(true);
-                                }else{
-                                    this.$Modal.error({title: this.$L('温馨提示'), content: res.msg });
-                                }
-                            }
-                        });
+                this.loadIng++;
+                let id = $A.runNum(this.formData.id);
+                $A.apiAjax({
+                    url: 'users/team/add',
+                    data: this.formData,
+                    complete: () => {
+                        this.loadIng--;
+                    },
+                    success: (res) => {
+                        if (res.ret === 1) {
+                            this.addShow = false;
+                            this.$Message.success(res.msg);
+                            this.$refs.add.resetFields();
+                            //
+                            this.getLists(id == 0);
+                        }else{
+                            this.$Modal.error({title: this.$L('温馨提示'), content: res.msg });
+                        }
                     }
                 });
             },
 
-            handleUser(act, username) {
+            handleUser(act, info) {
                 switch (act) {
+                    case "add": {
+                        this.addShow = true;
+                        this.formData = {
+                            id: 0,
+                            userimg: '',
+                            profession: '',
+                            username: '',
+                            nickname: '',
+                            userpass: '',
+                        }
+                        break;
+                    }
+                    case "edit": {
+                        this.addShow = true;
+                        this.formData = Object.assign($A.cloneData(info))
+                        break;
+                    }
                     case "delete": {
                         this.$Modal.confirm({
                             title: this.$L('删除团队成员'),
@@ -356,7 +377,7 @@
                             loading: true,
                             onOk: () => {
                                 $A.apiAjax({
-                                    url: 'users/team/delete?username=' + username,
+                                    url: 'users/team/delete?username=' + info.username,
                                     error: () => {
                                         this.$Modal.remove();
                                         alert(this.$L('网络繁忙,请稍后再试!'));
@@ -385,7 +406,7 @@
                             loading: true,
                             onOk: () => {
                                 $A.apiAjax({
-                                    url: 'users/team/admin?act=' + (act=='deladmin'?'del':'set') + '&username=' + username,
+                                    url: 'users/team/admin?act=' + (act=='deladmin'?'del':'set') + '&username=' + info.username,
                                     error: () => {
                                         this.$Modal.remove();
                                         alert(this.$L('网络繁忙,请稍后再试!'));
@@ -394,7 +415,7 @@
                                         this.$Modal.remove();
                                         if (res.ret === 1) {
                                             this.lists.some((item) => {
-                                                if (item.username == username) {
+                                                if (item.username == info.username) {
                                                     this.$set(item, 'identity', res.data.identity);
                                                     return true;
                                                 }
@@ -407,8 +428,8 @@
                                                     indate: Math.round(new Date().getTime() / 1000),
                                                     text: this.$L(act=='deladmin' ? '您的管理员身份已被撤销。' : '恭喜您成为管理员。')
                                                 };
-                                                $A.WSOB.sendTo('user', username, data, 'special');
-                                                $A.WSOB.sendTo('info', username, { 'type': 'update'});
+                                                $A.WSOB.sendTo('user', info.username, data, 'special');
+                                                $A.WSOB.sendTo('info', info.username, { 'type': 'update'});
                                             }
                                         }
                                         setTimeout(() => {