Member.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. <template>
  2. <div class="hello">
  3. <Header></Header>
  4. <el-container>
  5. <el-card class="center-card">
  6. <el-button type="text" class="add-cat" @click="addTeamMember">{{$t('add_member')}}</el-button>
  7. <el-button type="text" class="goback-btn" @click="goback">{{$t('back_to_team')}}</el-button>
  8. <el-table align="left" :data="list" height="400" style="width: 100%">
  9. <el-table-column prop="member_username" :label="$t('member_username')"></el-table-column>
  10. <el-table-column prop="name" :label="$t('name')"></el-table-column>
  11. <el-table-column prop="addtime" :label="$t('addtime')"></el-table-column>
  12. <el-table-column prop :label="$t('operation')">
  13. <template slot-scope="scope">
  14. <el-button
  15. @click="deleteTeamMember(scope.row.id)"
  16. type="text"
  17. size="small"
  18. >{{$t('delete')}}</el-button>
  19. </template>
  20. </el-table-column>
  21. </el-table>
  22. </el-card>
  23. <el-dialog :visible.sync="dialogFormVisible" width="300px" :close-on-click-modal="false">
  24. <el-form>
  25. <el-form-item :label="$t('member_username')+':'">
  26. <el-select
  27. v-model="MyForm.member_username"
  28. multiple
  29. filterable
  30. reserve-keyword
  31. placeholder
  32. :loading="loading"
  33. >
  34. <el-option
  35. v-for="item in memberOptions"
  36. :key="item.value"
  37. :label="item.label"
  38. :value="item.value"
  39. ></el-option>
  40. </el-select>
  41. </el-form-item>
  42. </el-form>
  43. <div slot="footer" class="dialog-footer">
  44. <el-button @click="dialogFormVisible = false">{{$t('cancel')}}</el-button>
  45. <el-button type="primary" @click="MyFormSubmit">{{$t('confirm')}}</el-button>
  46. </div>
  47. </el-dialog>
  48. </el-container>
  49. <Footer></Footer>
  50. </div>
  51. </template>
  52. <script>
  53. export default {
  54. components: {},
  55. data() {
  56. return {
  57. MyForm: {
  58. id: '',
  59. member_username: ''
  60. },
  61. list: [],
  62. dialogFormVisible: false,
  63. team_id: '',
  64. memberOptions: []
  65. }
  66. },
  67. methods: {
  68. geList() {
  69. var that = this
  70. var url = DocConfig.server + '/api/teamMember/getList'
  71. var params = new URLSearchParams()
  72. params.append('team_id', this.team_id)
  73. that.axios.post(url, params).then(function(response) {
  74. if (response.data.error_code === 0) {
  75. var Info = response.data.data
  76. that.list = Info
  77. that.getAllUser()
  78. } else {
  79. that.$alert(response.data.error_message)
  80. }
  81. })
  82. },
  83. MyFormSubmit() {
  84. var that = this
  85. var url = DocConfig.server + '/api/teamMember/save'
  86. var params = new URLSearchParams()
  87. params.append('team_id', this.team_id)
  88. params.append('member_username', this.MyForm.member_username)
  89. that.axios.post(url, params).then(function(response) {
  90. if (response.data.error_code === 0) {
  91. that.dialogFormVisible = false
  92. that.geList()
  93. that.MyForm = {}
  94. } else {
  95. that.$alert(response.data.error_message)
  96. }
  97. })
  98. },
  99. deleteTeamMember(id) {
  100. var that = this
  101. var url = DocConfig.server + '/api/teamMember/delete'
  102. this.$confirm(that.$t('confirm_delete'), ' ', {
  103. confirmButtonText: that.$t('confirm'),
  104. cancelButtonText: that.$t('cancel'),
  105. type: 'warning'
  106. }).then(() => {
  107. var params = new URLSearchParams()
  108. params.append('id', id)
  109. that.axios.post(url, params).then(function(response) {
  110. if (response.data.error_code === 0) {
  111. that.geList()
  112. } else {
  113. that.$alert(response.data.error_message)
  114. }
  115. })
  116. })
  117. },
  118. addTeamMember() {
  119. this.MyForm = []
  120. this.dialogFormVisible = true
  121. },
  122. goback() {
  123. this.$router.push({ path: '/team/index' })
  124. },
  125. getAllUser() {
  126. var that = this
  127. var url = DocConfig.server + '/api/user/allUser'
  128. var params = new URLSearchParams()
  129. params.append('username', '')
  130. that.axios.post(url, params).then(function(response) {
  131. if (response.data.error_code === 0) {
  132. var Info = response.data.data
  133. var newInfo = []
  134. // 过滤掉已经是成员的用户
  135. for (var i = 0; i < Info.length; i++) {
  136. let isMember = that.isMember(Info[i]['value'])
  137. if (!isMember) {
  138. newInfo.push(Info[i])
  139. }
  140. }
  141. that.memberOptions = []
  142. for (let index = 0; index < newInfo.length; index++) {
  143. that.memberOptions.push({
  144. value: newInfo[index].value,
  145. label: newInfo[index].value,
  146. key: newInfo[index].value
  147. })
  148. }
  149. } else {
  150. that.$alert(response.data.error_message)
  151. }
  152. })
  153. },
  154. // 判断某个用户是否已经是会员
  155. isMember(username) {
  156. let list = this.list
  157. for (var i = 0; i < list.length; i++) {
  158. if (list[i]['member_username'] == username) {
  159. return true
  160. }
  161. }
  162. return false
  163. }
  164. },
  165. mounted() {
  166. this.team_id = this.$route.params.team_id
  167. this.geList()
  168. this.getAllUser()
  169. }
  170. }
  171. </script>
  172. <!-- Add "scoped" attribute to limit CSS to this component only -->
  173. <style scoped>
  174. .hello {
  175. text-align: left;
  176. }
  177. .add-cat {
  178. margin-left: 10px;
  179. }
  180. .center-card {
  181. text-align: left;
  182. width: 800px;
  183. height: 600px;
  184. }
  185. .goback-btn {
  186. z-index: 999;
  187. margin-left: 550px;
  188. }
  189. </style>
  190. <!-- 全局css -->
  191. <style >
  192. .el-table .success-row {
  193. background: #f0f9eb;
  194. }
  195. </style>