Browse Source

Batch add item members and team members
批量添加项目成员和团队成员

star7th 5 years ago
parent
commit
0e82a8a919

+ 17 - 21
server/Application/Api/Controller/MemberController.class.php

@@ -16,29 +16,25 @@ class MemberController extends BaseController {
         } 
 
         $username = I("username");
-        $member = D("User")->where(" username = '%s' ",array($username))->find();
-
-        if (!$username || !$member) {
-            $this->sendError(10209);
-            return ;
-        }
-        
-        $if_exit = D("ItemMember")->where(" uid = '$member[uid]' and item_id = '$item_id' ")->find();
-
-        if ($if_exit) {
-            $this->sendError(10101,"该用户已经是项目成员");
-            return ;
+        $username_array = explode("," , $username) ;
+        foreach($username_array as $key => $value ){
+            $member = D("User")->where(" username = '%s' ",array($value))->find();
+            if(!$member){
+                continue ;
+            }
+            $if_exit = D("ItemMember")->where(" uid = '$member[uid]' and item_id = '$item_id' ")->find();
+            if ($if_exit) {
+                continue ;
+            }
+            $data = array() ;
+            $data['username'] = $member['username'] ;
+            $data['uid'] = $member['uid'] ;
+            $data['item_id'] = $item_id ;
+            $data['member_group_id'] = $member_group_id ;
+            $data['addtime'] = time() ; 
+            $id = D("ItemMember")->add($data); 
         }
-        $data['username'] = $member['username'] ;
-        $data['uid'] = $member['uid'] ;
-        $data['item_id'] = $item_id ;
-        $data['member_group_id'] = $member_group_id ;
-        $data['addtime'] = time() ;
-        
-
-        $id = D("ItemMember")->add($data);
         $return = D("ItemMember")->where(" item_member_id = '$id' ")->find();
-
         if (!$return) {
             $this->sendError(10101);
         }else{

+ 33 - 31
server/Application/Api/Controller/TeamMemberController.class.php

@@ -19,39 +19,41 @@ class TeamMemberController extends BaseController {
             return ;
         } 
 
-        $memberInfo = D("User")->where(" username = '%s' ",array($member_username,$member_username))->find();
-        if (!$memberInfo) {
-            $this->sendError(10209);
-            return ;
-        }
-        $if_exit = D("TeamMember")->where(" member_uid = '$memberInfo[uid]' and team_id = '$team_id' ")->find();
-
-        if ($if_exit) {
-            $this->sendError(10101,"该用户已经是成员");
-            return ;
-        }
-        
-        $data['team_id'] = $team_id ;
-        $data['member_uid'] = $memberInfo['uid'] ;
-        $data['member_username'] = $memberInfo['username'] ;
-        $data['addtime'] = time() ;
-        $id = D("TeamMember")->add($data);  
-
-        //检查该团队已经加入了哪些项目
-        $teamItems = D("TeamItem")->where("  team_id = '$team_id' ")->select() ;
-        if ($teamItems) {
-            foreach ($teamItems as $key => $value) {
-                $data= array(
-                    "team_id"=>$team_id,
-                    "member_uid"=>$memberInfo['uid'],
-                    "member_username"=>$memberInfo['username'],
-                    "item_id"=>$value['item_id'],
-                    "member_group_id"=>1, //默认添加的权限为1,即编辑权限
-                    "addtime"=>time()
-                );
-                D("TeamItemMember")->add($data);
+        $member_username_array = explode("," , $member_username) ;
+        foreach($member_username_array as $key => $value ){
+            $memberInfo = D("User")->where(" username = '%s' ",array($value))->find();
+            if (!$memberInfo) {
+                continue ;
+            }
+            $if_exit = D("TeamMember")->where(" member_uid = '$memberInfo[uid]' and team_id = '$team_id' ")->find();
+            if ($if_exit) {
+                continue ;
+            }
+            $data = array() ;
+            $data['team_id'] = $team_id ;
+            $data['member_uid'] = $memberInfo['uid'] ;
+            $data['member_username'] = $memberInfo['username'] ;
+            $data['addtime'] = time() ;
+            $id = D("TeamMember")->add($data);  
+    
+            //检查该团队已经加入了哪些项目
+            $teamItems = D("TeamItem")->where("  team_id = '$team_id' ")->select() ;
+            if ($teamItems) {
+                foreach ($teamItems as $key2 => $value2) {
+                    $data= array(
+                        "team_id"=>$team_id,
+                        "member_uid"=>$memberInfo['uid'],
+                        "member_username"=>$memberInfo['username'],
+                        "item_id"=>$value2['item_id'],
+                        "member_group_id"=>1, //默认添加的权限为1,即编辑权限
+                        "addtime"=>time()
+                    );
+                    D("TeamItemMember")->add($data);
+                }
             }
+
         }
+
         $return = D("TeamMember")->where(" id = '$id' ")->find();
 
         if (!$return) {

+ 383 - 378
web_src/src/components/item/setting/Member.vue

@@ -1,416 +1,421 @@
 <template>
   <div class="hello">
-    <el-button  type="text" class="add-member" @click="dialogFormVisible = true">{{$t('add_member')}}</el-button>
-    <el-button  type="text" class="add-member" @click="dialogFormTeamVisible = true">{{$t('add_team')}}</el-button>
+    <el-button type="text" class="add-member" @click="dialogFormVisible = true">{{$t('add_member')}}</el-button>
+    <el-button
+      type="text"
+      class="add-member"
+      @click="dialogFormTeamVisible = true"
+    >{{$t('add_team')}}</el-button>
 
     <!-- 单个成员列表 -->
-     <el-table align="left"
-          v-if="members.length>0"
-          :data="members"
-           height="200"
-          style="width: 100%">
-          <el-table-column
-            prop="username"
-            :label="$t('member_username')"
-            width="100">
-          </el-table-column>
-          <el-table-column
-            prop="name"
-            :label="$t('name')"
-            >
-          </el-table-column>
-          <el-table-column
-            prop="addtime"
-            :label="$t('add_time')"
-            width="100">
-          </el-table-column>
-          <el-table-column
-            prop="member_group"
-            :label="$t('authority')">
-          </el-table-column>
-          <el-table-column
-            prop=""
-            :label="$t('operation')">
-            <template slot-scope="scope">
-              <el-button @click="delete_member(scope.row.item_member_id)" type="text" size="small">{{$t('delete')}}</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-
-    
-     <!-- 团队列表 -->
-     <el-table align="left"
-          v-if="teamItems.length>0"
-          :data="teamItems"
-           height="200"
-          style="width: 100%">
-          <el-table-column
-            prop="team_name"
-            :label="'团队名'"
-           >
-          </el-table-column>
-          <el-table-column
-            prop="addtime"
-            :label="$t('add_time')"
-            >
-          </el-table-column>
-
-          <el-table-column
-            prop=""
-            :label="$t('operation')">
-            <template slot-scope="scope">
-              <el-button @click="getTeamItemMember(scope.row.team_id)" type="text" size="small">{{$t('member_authority')}}</el-button>
-              <el-button @click="deleteTeam(scope.row.id)" type="text" size="small">{{$t('delete')}}</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-
-      <!-- 添加单个成员弹窗 -->
-      <el-dialog :visible.sync="dialogFormVisible" :modal="false" top="10vh" :close-on-click-modal="false">
-      <el-form >
-          <el-form-item label="" >
-            <el-autocomplete
-              :placeholder="$t('input_target_member')" v-model="MyForm.username"
-              :fetch-suggestions="getAllUser"
-            ></el-autocomplete>
-          </el-form-item>
-          <el-form-item label="" class="readonly-checkbox" >
-            <el-checkbox v-model="MyForm.is_readonly">{{$t('readonly')}}</el-checkbox>
-          </el-form-item>
+    <el-table align="left" v-if="members.length>0" :data="members" height="200" style="width: 100%">
+      <el-table-column prop="username" :label="$t('member_username')" width="100"></el-table-column>
+      <el-table-column prop="name" :label="$t('name')"></el-table-column>
+      <el-table-column prop="addtime" :label="$t('add_time')" width="100"></el-table-column>
+      <el-table-column prop="member_group" :label="$t('authority')"></el-table-column>
+      <el-table-column prop :label="$t('operation')">
+        <template slot-scope="scope">
+          <el-button
+            @click="delete_member(scope.row.item_member_id)"
+            type="text"
+            size="small"
+          >{{$t('delete')}}</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 团队列表 -->
+    <el-table
+      align="left"
+      v-if="teamItems.length>0"
+      :data="teamItems"
+      height="200"
+      style="width: 100%"
+    >
+      <el-table-column prop="team_name" :label="'团队名'"></el-table-column>
+      <el-table-column prop="addtime" :label="$t('add_time')"></el-table-column>
+
+      <el-table-column prop :label="$t('operation')">
+        <template slot-scope="scope">
+          <el-button
+            @click="getTeamItemMember(scope.row.team_id)"
+            type="text"
+            size="small"
+          >{{$t('member_authority')}}</el-button>
+          <el-button @click="deleteTeam(scope.row.id)" type="text" size="small">{{$t('delete')}}</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <!-- 添加单个成员弹窗 -->
+    <el-dialog
+      :visible.sync="dialogFormVisible"
+      :modal="false"
+      top="10vh"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-form-item label>
+          <el-select
+            v-model="MyForm.username"
+            multiple
+            filterable
+            reserve-keyword
+            placeholder
+            :loading="loading"
+          >
+            <el-option
+              v-for="item in memberOptions"
+              :key="item.value"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label class="readonly-checkbox">
+          <el-checkbox v-model="MyForm.is_readonly">{{$t('readonly')}}</el-checkbox>
+        </el-form-item>
       </el-form>
 
-
-        <p class="tips">
-          {{$t('member_authority_tips')}}
-        </p>
-        <div slot="footer" class="dialog-footer">
-          <el-button @click="dialogFormVisible = false">{{$t('cancel')}}</el-button>
-          <el-button type="primary" @click="MyFormSubmit" >{{$t('confirm')}}</el-button>
-        </div>
-      </el-dialog>
-
-      <!-- 添加团队弹窗 -->
-      <el-dialog :visible.sync="dialogFormTeamVisible" :modal="false" top="10vh" :close-on-click-modal="false">
-      <el-form >
-          <el-form-item label="选择团队" >
-            <el-select  class="" v-model="MyForm2.team_id">
-              <el-option  v-for="team in teams " :key="team.team_name" :label="team.team_name" :value="team.id"></el-option>
-            </el-select>
-
-          </el-form-item>
-          <router-link to="/team/index" target="_blank">{{$t('go_to_new_an_team')}}</router-link>
+      <p class="tips">{{$t('member_authority_tips')}}</p>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">{{$t('cancel')}}</el-button>
+        <el-button type="primary" @click="MyFormSubmit">{{$t('confirm')}}</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 添加团队弹窗 -->
+    <el-dialog
+      :visible.sync="dialogFormTeamVisible"
+      :modal="false"
+      top="10vh"
+      :close-on-click-modal="false"
+    >
+      <el-form>
+        <el-form-item label="选择团队">
+          <el-select class v-model="MyForm2.team_id">
+            <el-option
+              v-for="team in teams "
+              :key="team.team_name"
+              :label="team.team_name"
+              :value="team.id"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <router-link to="/team/index" target="_blank">{{$t('go_to_new_an_team')}}</router-link>
       </el-form>
-        <div slot="footer" class="dialog-footer">
-          <el-button @click="dialogFormTeamVisible = false">{{$t('cancel')}}</el-button>
-          <el-button type="primary" @click="addTeam" >{{$t('confirm')}}</el-button>
-        </div>
-      </el-dialog>
-
-      <!-- 成员权限弹窗 -->
-      <el-dialog :visible.sync="dialogFormTeamMemberVisible" :modal="false" top="10vh" :title="$t('adjust_member_authority')" width="90%" :close-on-click-modal="false">
-
-           <el-table align="left"
-                :empty-text="$t('team_member_empty_tips')"
-                :data="teamItemMembers"
-                style="width: 100%">
-                <el-table-column
-                  prop="member_username"
-                  :label="$t('username')"
-                 >
-                </el-table-column>
-                <el-table-column
-                  prop="member_group_id"
-                  :label="$t('authority')"
-                  width="130"
-                  >
-                  <template slot-scope="scope">
-                    <el-select size="mini" v-model="scope.row.member_group_id" @change="changeTeamItemMemberGroup($event,scope.row.id)" :placeholder="$t('please_choose')">
-                      <el-option
-                        v-for="item in authorityOptions"
-                        :key="item.value"
-                        :label="item.label"
-                        :value="item.value"
-                        
-                        >
-                      </el-option>
-                    </el-select>
-                  </template>
-                </el-table-column>
-                <el-table-column
-                  prop="addtime"
-                  :label="$t('add_time')"
-                  >
-                </el-table-column>
-
-              </el-table>
-        <br>
-        <p class="tips">
-          {{$t('team_member_authority_tips')}}
-        </p>
-        <div slot="footer" class="dialog-footer">
-          <el-button @click="dialogFormTeamMemberVisible = false">{{$t('close')}}</el-button>
-        </div>
-      </el-dialog>
-
-
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormTeamVisible = false">{{$t('cancel')}}</el-button>
+        <el-button type="primary" @click="addTeam">{{$t('confirm')}}</el-button>
+      </div>
+    </el-dialog>
+
+    <!-- 成员权限弹窗 -->
+    <el-dialog
+      :visible.sync="dialogFormTeamMemberVisible"
+      :modal="false"
+      top="10vh"
+      :title="$t('adjust_member_authority')"
+      width="90%"
+      :close-on-click-modal="false"
+    >
+      <el-table
+        align="left"
+        :empty-text="$t('team_member_empty_tips')"
+        :data="teamItemMembers"
+        style="width: 100%"
+      >
+        <el-table-column prop="member_username" :label="$t('username')"></el-table-column>
+        <el-table-column prop="member_group_id" :label="$t('authority')" width="130">
+          <template slot-scope="scope">
+            <el-select
+              size="mini"
+              v-model="scope.row.member_group_id"
+              @change="changeTeamItemMemberGroup($event,scope.row.id)"
+              :placeholder="$t('please_choose')"
+            >
+              <el-option
+                v-for="item in authorityOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
+          </template>
+        </el-table-column>
+        <el-table-column prop="addtime" :label="$t('add_time')"></el-table-column>
+      </el-table>
+      <br />
+      <p class="tips">{{$t('team_member_authority_tips')}}</p>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormTeamMemberVisible = false">{{$t('close')}}</el-button>
+      </div>
+    </el-dialog>
   </div>
 </template>
 
 <script>
-
-
 export default {
   name: 'Login',
-  components : {
-
-  },
-  data () {
+  components: {},
+  data() {
     return {
-      MyForm:{
-        username:'',
-        is_readonly:false
+      MyForm: {
+        username: '',
+        is_readonly: false
       },
-      MyForm2:{
-        team_id:'',
+      MyForm2: {
+        team_id: ''
       },
-      members:[],
-      dialogFormVisible:false,
-      dialogFormTeamVisible:false,
-      dialogFormTeamMemberVisible:false,
-      teams:[],
-      teamItems:[],
-      teamItemMembers:[],
-      authorityOptions:[
-          {
-            label:"编辑",
-            value:'1',
-          },
-          {
-            label:"只读",
-            value:'0',
-          }
-      ]
+      members: [],
+      dialogFormVisible: false,
+      dialogFormTeamVisible: false,
+      dialogFormTeamMemberVisible: false,
+      teams: [],
+      teamItems: [],
+      teamItemMembers: [],
+      authorityOptions: [
+        {
+          label: '编辑',
+          value: '1'
+        },
+        {
+          label: '只读',
+          value: '0'
+        }
+      ],
+      memberOptions: []
     }
-
   },
   methods: {
-
-      get_members(){
-        var that = this ;
-        var url = DocConfig.server+'/api/member/getList';
-        var params = new URLSearchParams();
-        params.append('item_id',  that.$route.params.item_id);
-        that.axios.post(url, params)
-          .then(function (response) {
-            if (response.data.error_code === 0 ) {
-              var Info = response.data.data
-              that.members =  Info;
-            }else{
-              that.$alert(response.data.error_message);
-            }
-            
-          });
-      },
-      get_teams(){
-        var that = this ;
-        var url = DocConfig.server+'/api/team/getList';
-        var params = new URLSearchParams();
-        that.axios.post(url, params)
-          .then(function (response) {
-            if (response.data.error_code === 0 ) {
-              var Info = response.data.data
-              that.teams =  Info;
-            }else{
-              that.$alert(response.data.error_message);
-            }
-            
-          });
-      },
-      getTeamItem(){
-        var that = this ;
-        var url = DocConfig.server+'/api/teamItem/getList';
-        var params = new URLSearchParams();
-        params.append('item_id',  that.$route.params.item_id);
-        that.axios.post(url, params)
-          .then(function (response) {
-            if (response.data.error_code === 0 ) {
-              var Info = response.data.data
-              that.teamItems =  Info;
-            }else{
-              that.$alert(response.data.error_message);
-            }
-            
-          });
-      },
-      getTeamItemMember(team_id){
-        var that = this ;
-        this.dialogFormTeamMemberVisible = true;
-        var url = DocConfig.server+'/api/teamItemMember/getList';
-        var params = new URLSearchParams();
-        params.append('item_id',  that.$route.params.item_id);
-        params.append('team_id',  team_id);
-        that.axios.post(url, params)
-          .then(function (response) {
-            if (response.data.error_code === 0 ) {
-              var Info = response.data.data
-              that.teamItemMembers =  Info;
-            }else{
-              that.$alert(response.data.error_message);
+    get_members() {
+      var that = this
+      var url = DocConfig.server + '/api/member/getList'
+      var params = new URLSearchParams()
+      params.append('item_id', that.$route.params.item_id)
+      that.axios.post(url, params).then(function(response) {
+        if (response.data.error_code === 0) {
+          var Info = response.data.data
+          that.members = Info
+          that.getAllUser()
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+    get_teams() {
+      var that = this
+      var url = DocConfig.server + '/api/team/getList'
+      var params = new URLSearchParams()
+      that.axios.post(url, params).then(function(response) {
+        if (response.data.error_code === 0) {
+          var Info = response.data.data
+          that.teams = Info
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+    getTeamItem() {
+      var that = this
+      var url = DocConfig.server + '/api/teamItem/getList'
+      var params = new URLSearchParams()
+      params.append('item_id', that.$route.params.item_id)
+      that.axios.post(url, params).then(function(response) {
+        if (response.data.error_code === 0) {
+          var Info = response.data.data
+          that.teamItems = Info
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+    getTeamItemMember(team_id) {
+      var that = this
+      this.dialogFormTeamMemberVisible = true
+      var url = DocConfig.server + '/api/teamItemMember/getList'
+      var params = new URLSearchParams()
+      params.append('item_id', that.$route.params.item_id)
+      params.append('team_id', team_id)
+      that.axios.post(url, params).then(function(response) {
+        if (response.data.error_code === 0) {
+          var Info = response.data.data
+          that.teamItemMembers = Info
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+    MyFormSubmit() {
+      var that = this
+      var url = DocConfig.server + '/api/member/save'
+
+      var params = new URLSearchParams()
+      params.append('item_id', that.$route.params.item_id)
+      params.append('username', this.MyForm.username)
+      var member_group_id = 1
+      if (this.MyForm.is_readonly) {
+        member_group_id = 0
+      }
+      params.append('member_group_id', member_group_id)
+
+      that.axios
+        .post(url, params)
+        .then(function(response) {
+          if (response.data.error_code === 0) {
+            that.dialogFormVisible = false
+            that.get_members()
+            that.MyForm.username = ''
+            that.MyForm.is_readonly = false
+          } else {
+            that.$alert(response.data.error_message)
+          }
+        })
+        .catch(function(error) {
+          console.log(error)
+        })
+    },
+    addTeam() {
+      var that = this
+      var url = DocConfig.server + '/api/teamItem/save'
+
+      var params = new URLSearchParams()
+      params.append('item_id', that.$route.params.item_id)
+      params.append('team_id', this.MyForm2.team_id)
+
+      that.axios.post(url, params).then(function(response) {
+        if (response.data.error_code === 0) {
+          that.dialogFormTeamVisible = false
+          that.getTeamItem()
+          that.MyForm.team_id = ''
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+    delete_member(item_member_id) {
+      var that = this
+      var url = DocConfig.server + '/api/member/delete'
+
+      this.$confirm(that.$t('confirm_delete'), ' ', {
+        confirmButtonText: that.$t('confirm'),
+        cancelButtonText: that.$t('cancel'),
+        type: 'warning'
+      }).then(() => {
+        var params = new URLSearchParams()
+        params.append('item_id', that.$route.params.item_id)
+        params.append('item_member_id', item_member_id)
+
+        that.axios.post(url, params).then(function(response) {
+          if (response.data.error_code === 0) {
+            that.get_members()
+          } else {
+            that.$alert(response.data.error_message)
+          }
+        })
+      })
+    },
+    deleteTeam(id) {
+      var that = this
+      var url = DocConfig.server + '/api/teamItem/delete'
+
+      this.$confirm(that.$t('confirm_delete'), ' ', {
+        confirmButtonText: that.$t('confirm'),
+        cancelButtonText: that.$t('cancel'),
+        type: 'warning'
+      }).then(() => {
+        var params = new URLSearchParams()
+        params.append('id', id)
+        that.axios.post(url, params).then(function(response) {
+          if (response.data.error_code === 0) {
+            that.getTeamItem()
+          } else {
+            that.$alert(response.data.error_message)
+          }
+        })
+      })
+    },
+    changeTeamItemMemberGroup(member_group_id, id) {
+      var that = this
+      var url = DocConfig.server + '/api/teamItemMember/save'
+
+      var params = new URLSearchParams()
+      params.append('member_group_id', member_group_id)
+      params.append('id', id)
+
+      that.axios.post(url, params).then(function(response) {
+        if (response.data.error_code === 0) {
+          that.$message('权限保存成功')
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+    getAllUser(queryString, cb) {
+      var that = this
+      var url = DocConfig.server + '/api/user/allUser'
+      var params = new URLSearchParams()
+      if (!queryString) {
+        queryString = ''
+      }
+      params.append('username', queryString)
+      that.axios.post(url, params).then(response => {
+        if (response.data.error_code === 0) {
+          var Info = response.data.data
+          var newInfo = []
+          // 过滤掉已经是成员的用户
+          for (var i = 0; i < Info.length; i++) {
+            let isMember = that.isMember(Info[i]['value'])
+            if (!isMember) {
+              newInfo.push(Info[i])
             }
-            
-          })
-      },
-      MyFormSubmit() {
-          var that = this ;
-          var url = DocConfig.server+'/api/member/save';
-
-          var params = new URLSearchParams();
-          params.append('item_id',  that.$route.params.item_id);
-          params.append('username', this.MyForm.username);
-          var member_group_id = 1 ;
-          if (this.MyForm.is_readonly) {
-              member_group_id = 0 
-          };
-          params.append('member_group_id',member_group_id );
-
-          that.axios.post(url, params)
-            .then(function (response) {
-              if (response.data.error_code === 0 ) {
-                that.dialogFormVisible = false;
-                that.get_members() ;
-                that.MyForm.username = '';
-                that.MyForm.is_readonly = false;
-              }else{
-                that.$alert(response.data.error_message);
-              }
-              
+          }
+          that.memberOptions = []
+          for (let index = 0; index < newInfo.length; index++) {
+            that.memberOptions.push({
+              value: newInfo[index].value,
+              label: newInfo[index].value,
+              key: newInfo[index].value
             })
-            .catch(function (error) {
-              console.log(error);
-            });
-      },
-      addTeam() {
-          var that = this ;
-          var url = DocConfig.server+'/api/teamItem/save';
-
-          var params = new URLSearchParams();
-          params.append('item_id',  that.$route.params.item_id);
-          params.append('team_id', this.MyForm2.team_id);
-
-          that.axios.post(url, params)
-          .then(function (response) {
-              if (response.data.error_code === 0 ) {
-                that.dialogFormTeamVisible = false;
-                that.getTeamItem() ;
-                that.MyForm.team_id = '';
-              }else{
-                that.$alert(response.data.error_message);
-              }
-              
-          });
-      },
-      delete_member(item_member_id){
-          var that = this ;
-          var url = DocConfig.server+'/api/member/delete';
-
-          this.$confirm(that.$t('confirm_delete'), ' ', {
-            confirmButtonText: that.$t('confirm'),
-            cancelButtonText: that.$t('cancel'),
-            type: 'warning'
-          }).then(() => {
-            var params = new URLSearchParams();
-            params.append('item_id',  that.$route.params.item_id);
-            params.append('item_member_id', item_member_id);
-
-            that.axios.post(url, params)
-            .then(function (response) {
-              if (response.data.error_code === 0 ) {
-                that.get_members() ;
-              }else{
-                that.$alert(response.data.error_message);
-              }
-            }); 
-          })
-
-      },
-      deleteTeam(id){
-          var that = this ;
-          var url = DocConfig.server+'/api/teamItem/delete';
-
-          this.$confirm(that.$t('confirm_delete'), ' ', {
-            confirmButtonText: that.$t('confirm'),
-            cancelButtonText: that.$t('cancel'),
-            type: 'warning'
-          }).then(() => {
-            var params = new URLSearchParams();
-            params.append('id',  id);
-            that.axios.post(url, params)
-            .then(function (response) {
-              if (response.data.error_code === 0 ) {
-                that.getTeamItem() ;
-              }else{
-                that.$alert(response.data.error_message);
-              }
-            }); 
-          })
-      },
-      changeTeamItemMemberGroup(member_group_id,id){
-          var that = this ;
-          var url = DocConfig.server+'/api/teamItemMember/save';
-
-          var params = new URLSearchParams();
-          params.append('member_group_id',  member_group_id);
-          params.append('id', id);
-
-          that.axios.post(url, params)
-          .then(function (response) {
-              if (response.data.error_code === 0 ) {
-                 that.$message('权限保存成功');
-              }else{
-                that.$alert(response.data.error_message);
-              }
-              
-          });
-      },
-      getAllUser(queryString,cb){
-        var that = this ;
-        var url = DocConfig.server+'/api/user/allUser';
-        var params = new URLSearchParams();
-        if (!queryString) {queryString = ''};
-        params.append('username', queryString);
-        that.axios.post(url, params)
-          .then(function (response) {
-            if (response.data.error_code === 0 ) {
-              var Info = response.data.data
-              cb(Info);
-            }else{
-              that.$alert(response.data.error_message);
-            }
-            
-          });
-      },
+          }
+          cb(Info)
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+    // 判断某个用户是否已经是会员
+    isMember(username) {
+      let list = this.members
+      for (var i = 0; i < list.length; i++) {
+        if (list[i]['username'] == username) {
+          return true
+        }
+      }
+      return false
+    }
   },
 
-  mounted(){
-    this.get_members();
-    this.get_teams();
-    this.getTeamItem();
+  mounted() {
+    this.get_members()
+    this.get_teams()
+    this.getTeamItem()
+    this.getAllUser()
   }
 }
 </script>
 
 <!-- Add "scoped" attribute to limit CSS to this component only -->
 <style scoped>
-
-.hello{
+.hello {
   text-align: left;
 }
 
-.add-member{
+.add-member {
   margin-left: 10px;
 }
 
-.tips{
+.tips {
   font-size: 12px;
   margin-bottom: 0px;
   margin-top: 0px;

+ 164 - 178
web_src/src/components/team/Member.vue

@@ -1,217 +1,204 @@
 <template>
   <div class="hello">
-    <Header> </Header>
+    <Header></Header>
 
     <el-container>
       <el-card class="center-card">
-      <el-button  type="text" class="add-cat" @click="addTeamMember">{{$t('add_member')}}</el-button>
-      <el-button type="text" class="goback-btn" @click="goback">{{$t('back_to_team')}}</el-button>
-       <el-table align="left"
-            :data="list"
-             height="400"
-            style="width: 100%">
-            <el-table-column
-              prop="member_username"
-              :label="$t('member_username')"
-              >
-            </el-table-column>
-            <el-table-column
-              prop="name"
-              :label="$t('name')"
-              >
-            </el-table-column>
-            <el-table-column
-              prop="addtime"
-              :label="$t('addtime')"
-              >
-            </el-table-column>
-
-            <el-table-column
-              prop=""
-              :label="$t('operation')">
-              <template slot-scope="scope">
-                <el-button @click="deleteTeamMember(scope.row.id)" type="text" size="small">{{$t('delete')}}</el-button>
-              </template>
-            </el-table-column>
-          </el-table>
-
-
-            </el-card>
-
-            <el-dialog :visible.sync="dialogFormVisible"  width="300px" :close-on-click-modal="false">
-                    <el-form >
-                        <el-form-item :label="$t('member_username')+':'" >
-                            <el-autocomplete
-                              v-model="MyForm.member_username"
-                              :fetch-suggestions="getAllUser"
-                              v-if="dialogFormVisible"
-                            ></el-autocomplete>
-                        </el-form-item>
-                    </el-form>
-
-                    <div slot="footer" class="dialog-footer">
-                      <el-button @click="dialogFormVisible = false">{{$t('cancel')}}</el-button>
-                      <el-button type="primary" @click="MyFormSubmit" >{{$t('confirm')}}</el-button>
-                    </div>
-            </el-dialog>
-
+        <el-button type="text" class="add-cat" @click="addTeamMember">{{$t('add_member')}}</el-button>
+        <el-button type="text" class="goback-btn" @click="goback">{{$t('back_to_team')}}</el-button>
+        <el-table align="left" :data="list" height="400" style="width: 100%">
+          <el-table-column prop="member_username" :label="$t('member_username')"></el-table-column>
+          <el-table-column prop="name" :label="$t('name')"></el-table-column>
+          <el-table-column prop="addtime" :label="$t('addtime')"></el-table-column>
+
+          <el-table-column prop :label="$t('operation')">
+            <template slot-scope="scope">
+              <el-button
+                @click="deleteTeamMember(scope.row.id)"
+                type="text"
+                size="small"
+              >{{$t('delete')}}</el-button>
+            </template>
+          </el-table-column>
+        </el-table>
+      </el-card>
+
+      <el-dialog :visible.sync="dialogFormVisible" width="300px" :close-on-click-modal="false">
+        <el-form>
+          <el-form-item :label="$t('member_username')+':'">
+            <el-select
+              v-model="MyForm.member_username"
+              multiple
+              filterable
+              reserve-keyword
+              placeholder
+              :loading="loading"
+            >
+              <el-option
+                v-for="item in memberOptions"
+                :key="item.value"
+                :label="item.label"
+                :value="item.value"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-form>
+
+        <div slot="footer" class="dialog-footer">
+          <el-button @click="dialogFormVisible = false">{{$t('cancel')}}</el-button>
+          <el-button type="primary" @click="MyFormSubmit">{{$t('confirm')}}</el-button>
+        </div>
+      </el-dialog>
     </el-container>
 
-    <Footer> </Footer>
+    <Footer></Footer>
   </div>
 </template>
 
 <script>
-
-
 export default {
-  components : {
-
-  },
-  data () {
+  components: {},
+  data() {
     return {
-      MyForm:{
-        id:'',
-        member_username:''
+      MyForm: {
+        id: '',
+        member_username: ''
       },
-      list:[],
-      dialogFormVisible:false,
-      team_id:'',
+      list: [],
+      dialogFormVisible: false,
+      team_id: '',
+      memberOptions: []
     }
-  }, 
+  },
   methods: {
-      geList(){
-        var that = this ;
-        var url = DocConfig.server+'/api/teamMember/getList';
-        var params = new URLSearchParams();
-        params.append('team_id', this.team_id);
-        that.axios.post(url, params)
-          .then(function (response) {
-            if (response.data.error_code === 0 ) {
-              var Info = response.data.data ;
-
-              that.list =  Info;
-            }else{
-              that.$alert(response.data.error_message);
-            }
-            
-          });
-      },
-      MyFormSubmit() {
-          var that = this ;
-          var url = DocConfig.server+'/api/teamMember/save';
-
-          var params = new URLSearchParams();
-          params.append('team_id', this.team_id);
-          params.append('member_username', this.MyForm.member_username);
-          that.axios.post(url, params)
-            .then(function (response) {
-              if (response.data.error_code === 0 ) {
-                that.dialogFormVisible = false;
-                that.geList() ;
-                that.MyForm = {};
-              }else{
-                that.$alert(response.data.error_message);
-              }
-            });
-      },
-
-      deleteTeamMember(id){
-          var that = this ;
-          var url = DocConfig.server+'/api/teamMember/delete';
-
-          this.$confirm(that.$t('confirm_delete'), ' ', {
-            confirmButtonText: that.$t('confirm'),
-            cancelButtonText: that.$t('cancel'),
-            type: 'warning'
-          }).then(() => {
-            var params = new URLSearchParams();
-            params.append('id', id);
-
-            that.axios.post(url, params)
-            .then(function (response) {
-              if (response.data.error_code === 0 ) {
-                that.geList() ;
-              }else{
-                that.$alert(response.data.error_message);
-              }
-              
-            }); 
-          })
-
-      },
-      addTeamMember(){
-        this.MyForm = [] ;
-        this.dialogFormVisible = true;
-
-      },
-      goback(){
-        this.$router.push({path:"/team/index"})
-      },
-      getAllUser(queryString,cb){
-        var that = this ;
-        var url = DocConfig.server+'/api/user/allUser';
-        var params = new URLSearchParams();
-        if (!queryString) {queryString = ''};
-        params.append('username', queryString);
-        that.axios.post(url, params)
-          .then(function (response) {
-            if (response.data.error_code === 0 ) {
-              var Info = response.data.data ;
-              var newInfo = [];
-              //过滤掉已经是成员的用户
-              for (var i = 0; i < Info.length; i++) {
-                let isMember = that.isMember(Info[i]['value']);
-                if (!isMember) {
-                  newInfo.push(Info[i]);
-                };
-              };
-              cb(newInfo);
-            }else{
-              that.$alert(response.data.error_message);
+    geList() {
+      var that = this
+      var url = DocConfig.server + '/api/teamMember/getList'
+      var params = new URLSearchParams()
+      params.append('team_id', this.team_id)
+      that.axios.post(url, params).then(function(response) {
+        if (response.data.error_code === 0) {
+          var Info = response.data.data
+          that.list = Info
+          that.getAllUser()
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+    MyFormSubmit() {
+      var that = this
+      var url = DocConfig.server + '/api/teamMember/save'
+
+      var params = new URLSearchParams()
+      params.append('team_id', this.team_id)
+      params.append('member_username', this.MyForm.member_username)
+      that.axios.post(url, params).then(function(response) {
+        if (response.data.error_code === 0) {
+          that.dialogFormVisible = false
+          that.geList()
+          that.MyForm = {}
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+
+    deleteTeamMember(id) {
+      var that = this
+      var url = DocConfig.server + '/api/teamMember/delete'
+
+      this.$confirm(that.$t('confirm_delete'), ' ', {
+        confirmButtonText: that.$t('confirm'),
+        cancelButtonText: that.$t('cancel'),
+        type: 'warning'
+      }).then(() => {
+        var params = new URLSearchParams()
+        params.append('id', id)
+
+        that.axios.post(url, params).then(function(response) {
+          if (response.data.error_code === 0) {
+            that.geList()
+          } else {
+            that.$alert(response.data.error_message)
+          }
+        })
+      })
+    },
+    addTeamMember() {
+      this.MyForm = []
+      this.dialogFormVisible = true
+    },
+    goback() {
+      this.$router.push({ path: '/team/index' })
+    },
+    getAllUser() {
+      var that = this
+      var url = DocConfig.server + '/api/user/allUser'
+      var params = new URLSearchParams()
+      params.append('username', '')
+      that.axios.post(url, params).then(function(response) {
+        if (response.data.error_code === 0) {
+          var Info = response.data.data
+          var newInfo = []
+          // 过滤掉已经是成员的用户
+          for (var i = 0; i < Info.length; i++) {
+            let isMember = that.isMember(Info[i]['value'])
+            if (!isMember) {
+              newInfo.push(Info[i])
             }
-            
-          });
-      },
-
-      //判断某个用户是否已经是会员
-      isMember(username){
-        let list = this.list ;
-        for (var i = 0; i < list.length; i++) {
-          if (list[i]['member_username'] == username) {
-            return true ;
-          };
-          
-        };
-        return false;
+          }
+          that.memberOptions = []
+          for (let index = 0; index < newInfo.length; index++) {
+            that.memberOptions.push({
+              value: newInfo[index].value,
+              label: newInfo[index].value,
+              key: newInfo[index].value
+            })
+          }
+        } else {
+          that.$alert(response.data.error_message)
+        }
+      })
+    },
+
+    // 判断某个用户是否已经是会员
+    isMember(username) {
+      let list = this.list
+      for (var i = 0; i < list.length; i++) {
+        if (list[i]['member_username'] == username) {
+          return true
+        }
       }
+      return false
+    }
   },
 
-  mounted(){
-    this.team_id = this.$route.params.team_id; 
-    this.geList();
+  mounted() {
+    this.team_id = this.$route.params.team_id
+    this.geList()
+    this.getAllUser()
   }
 }
 </script>
 
 <!-- Add "scoped" attribute to limit CSS to this component only -->
 <style scoped>
-
-.hello{
+.hello {
   text-align: left;
 }
 
-.add-cat{
+.add-cat {
   margin-left: 10px;
 }
 
-.center-card{
+.center-card {
   text-align: left;
   width: 800px;
   height: 600px;
 }
 
-.goback-btn{
+.goback-btn {
   z-index: 999;
   margin-left: 550px;
 }
@@ -222,5 +209,4 @@ export default {
 .el-table .success-row {
   background: #f0f9eb;
 }
-
 </style>