select-user.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <template id="select-user">
  2. <div class="select-user">
  3. <el-dialog append-to-body :title="title" :visible.sync="visible" :close-on-click-modal="false" custom-class="com-dialog-dialog" :before-close="close" @close="close">
  4. <div style="padding: 20px;">
  5. <el-form :model="personnelForm">
  6. <el-form-item label="部门" prop="department_name">
  7. <div>:{{department_name}}</div>
  8. </el-form-item>
  9. <el-form-item label="角色" prop="role_type">
  10. <el-radio v-model="personnelForm.role_type" label="1">Boss</el-radio>
  11. <el-radio v-model="personnelForm.role_type" label="2">主管</el-radio>
  12. <el-radio v-model="personnelForm.role_type" label="3">员工</el-radio>
  13. </el-form-item>
  14. <el-form-item label="职位" prop="position_id">
  15. <el-select v-model="personnelForm.position_id" placeholder="请选择职位">
  16. <el-option v-for="item in position_list" :key="item.id" :label="item.name"
  17. :value="item.id"></el-option>
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item>
  21. <el-input v-model="nickname" placeholder="请输入用户手机号码" @keyup.enter.native="getDetail(1)">
  22. <el-button slot="append" @click="getDetail(1)">搜索</el-button>
  23. </el-input>
  24. </el-form-item>
  25. </el-form>
  26. <el-table border v-loading="listLoading" :data="list" style="margin-top: 24px;"
  27. @selection-change="handleSelectionChange">
  28. <el-table-column type="selection" width="60px" label="ID" props="user_id"></el-table-column>
  29. <el-table-column prop="id" label="ID" width="80" align="center"></el-table-column>
  30. <el-table-column label="名称">
  31. <template slot-scope="scope">
  32. <div flex="cross:center">
  33. <div style="margin-right: 10px;">
  34. <el-image
  35. style="width: 50px; height: 50px;border-radius: 5px;"
  36. :src="scope.row.avatar_url?scope.row.avatar_url:'/resources/img/common/default-avatar.png'">
  37. </el-image>
  38. </div>
  39. <div class="table-info-text">
  40. <div>{{scope.row.nickname}}</div>
  41. <div >{{scope.row.mobile}}</div>
  42. </div>
  43. </div>
  44. </template>
  45. </el-table-column>
  46. </el-table>
  47. </div>
  48. <div style="margin-top: 24px;">
  49. <el-row>
  50. <el-pagination
  51. v-if="pagination"
  52. style="display: inline-block;"
  53. background
  54. :page-size="pagination.pageSize"
  55. @current-change="getDetail"
  56. layout="prev, pager, next"
  57. :total="pagination.total_count">
  58. </el-pagination>
  59. </el-row>
  60. </div>
  61. <div slot="footer" class="dialog-footer">
  62. <el-button @click="visible = false">取消</el-button>
  63. <el-button :loading="dialogLoading" type="primary" @click="confirm">增加</el-button>
  64. </div>
  65. </el-dialog>
  66. <div @click="click" style="display: inline-block">
  67. <slot></slot>
  68. </div>
  69. </div>
  70. </template>
  71. <script>
  72. Vue.component('select-user', {
  73. template: '#select-user',
  74. props: {
  75. title: {
  76. type: String,
  77. default: '商品客户'
  78. },
  79. department_name: {
  80. type: String,
  81. default: ''
  82. },
  83. position_list: {
  84. type: Array,
  85. default: []
  86. },
  87. url: {
  88. type: String,
  89. default: 'business-card/card/select-user'
  90. },
  91. isShow: {
  92. type: Boolean,
  93. default: false
  94. },
  95. department_id: {
  96. type: Number,
  97. default: 0
  98. }
  99. },
  100. data() {
  101. return {
  102. dialogLoading: false,
  103. visible: false,
  104. listLoading: false,
  105. list: [],
  106. total_count:1,
  107. pageSize:20,
  108. pagination: null,
  109. radioSelection: 0,
  110. nickname: null,
  111. personnelForm: {role_type: "", position_id: '', user_ids: []}
  112. }
  113. },
  114. methods: {
  115. close(){
  116. this.visible=false;
  117. this.$emit('close');
  118. },
  119. click() {
  120. this.getDetail(1);
  121. this.visible = !this.visible;
  122. },
  123. getDetail(page) {
  124. this.list = [];
  125. this.listLoading = true;
  126. let params = Object.assign({
  127. r: this.url,
  128. keyword: this.nickname,
  129. page: page
  130. }, this.params);
  131. request({
  132. params: params
  133. }).then(e => {
  134. this.listLoading = false;
  135. //console.log("商品的数据=="+JSON.stringify(e))
  136. if (e.data.code === 0) {
  137. this.list = e.data.data.list;
  138. this.pagination = e.data.data.pagination;
  139. this.pagination.pageSize = e.data.data.page_size;
  140. this.pagination.total_count = this.pagination.totalCount;
  141. } else {
  142. this.$message.error(e.data.msg);
  143. }
  144. }).catch(e => {
  145. this.listLoading = false;
  146. });
  147. },
  148. handleSelectionChange(val) {
  149. for(let i = 0; i <= val.length; i++) {
  150. for (let k in val[i]) {
  151. if(k == 'id') {
  152. this.personnelForm.user_ids.push(val[i][k])
  153. }
  154. }
  155. }
  156. },
  157. confirm() {
  158. this.visible = false;
  159. this.$emit('selected', this.personnelForm);
  160. }
  161. }
  162. })
  163. </script>