assignUser.vue 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <template>
  2. <div>
  3. <el-form ref="assignForm" :model="assignForm" label-width="120px">
  4. <el-form-item label="未分配客户" >
  5. <span>{{this.noAssignCount}}个</span>
  6. </el-form-item>
  7. <el-form-item label="已分配客户" >
  8. <span>{{this.assignCount}}个</span>
  9. </el-form-item>
  10. <el-form-item label="分配员工" prop="users">
  11. <el-row :gutter="10" class="mb8">
  12. <el-col :span="1.5">
  13. <el-button @click="handleUserSelect">添加员工</el-button>
  14. </el-col>
  15. </el-row>
  16. <el-table border :data="users" >
  17. <el-table-column label="ID" align="center" prop="userId" />
  18. <el-table-column label="员工帐号" align="center" prop="userName" />
  19. <el-table-column label="员工姓名" align="center" prop="nickName" />
  20. <el-table-column label="所属部门" align="center" prop="deptName" />
  21. <el-table-column label="手机号码" align="center" prop="phonenumber" width="120" />
  22. <el-table-column label="今日分配数" align="center" prop="nowDayCustomerCount" />
  23. <el-table-column label="分配数量" align="center" prop="count" width="200px" >
  24. <template slot-scope="scope">
  25. <div>
  26. <el-input-number ref="stepTxtNum" :min="0" v-model="scope.row.count" @change="changeVal(scope.row)" size="mini" ></el-input-number>
  27. </div>
  28. </template>
  29. </el-table-column>
  30. <el-table-column label="操作" align="center" fixed="right" width="120px" class-name="small-padding fixed-width">
  31. <template slot-scope="scope">
  32. <el-button
  33. size="mini"
  34. type="text"
  35. @click="handleRemoveUser(scope.row.$index)"
  36. >删除</el-button>
  37. </template>
  38. </el-table-column>
  39. </el-table>
  40. </el-form-item>
  41. </el-form>
  42. <div class="footer">
  43. <el-button type="primary" @click="submitAssignForm">确 定</el-button>
  44. </div>
  45. <el-dialog :title="userSelect.title" :visible.sync="userSelect.open" width="1000px" append-to-body>
  46. <user-select ref="userSelects" @selectUser="selectUser" ></user-select>
  47. </el-dialog>
  48. </div>
  49. </template>
  50. <script>
  51. import { assignToUser } from "@/api/crm/customer";
  52. import userSelect from '../../company/components/userSelect.vue';
  53. export default {
  54. components: {userSelect },
  55. name: "visit",
  56. data() {
  57. return {
  58. type:null,
  59. noAssignCount:0,
  60. assignCount:0,
  61. customerIds:[],
  62. userSelect:{
  63. title:"选择员工",
  64. open:false,
  65. },
  66. assignForm: {
  67. },
  68. // 表单校验
  69. assignRules: {
  70. },
  71. users:[],
  72. };
  73. },
  74. created() {
  75. },
  76. methods: {
  77. changeVal(row) {
  78. this.$forceUpdate();//解决点击计数器失效问题
  79. this.computeCount();
  80. if(this.assignCount>this.customerIds.length){
  81. this.$nextTick(() => {
  82. row.count=0;
  83. this.computeCount();
  84. });
  85. }
  86. },
  87. handleRemoveUser(index){
  88. this.users.splice(index,1);
  89. this.computeCount();
  90. this.$refs.userSelects.delUser(index);
  91. },
  92. selectUser(data){
  93. var users=[];
  94. var number=parseInt(this.customerIds.length/data.length);
  95. data.forEach(element => {
  96. var user={
  97. userId:element.userId,
  98. userName:element.userName,
  99. nickName:element.nickName,
  100. deptName:element.dept.deptName,
  101. nowDayCustomerCount:element.nowDayCustomerCount,
  102. phonenumber:element.phonenumber,
  103. count:number,
  104. }
  105. users.push(user)
  106. });
  107. this.users=users;
  108. this.userSelect.open=false;
  109. this.computeCount()
  110. },
  111. computeCount(){
  112. this.assignCount=0;
  113. var that=this;
  114. this.users.forEach(element => {
  115. that.assignCount+=element.count;
  116. });
  117. this.noAssignCount=this.customerIds.length-this.assignCount
  118. },
  119. handleUserSelect(){
  120. var that=this;
  121. this.userSelect.open=true;
  122. setTimeout(() => {
  123. that.$refs.userSelects.getList();
  124. }, 500);
  125. },
  126. init(customerIds,type){
  127. this.type=type,
  128. this.customerIds = customerIds;
  129. this.assignCount=0;
  130. this.noAssignCount=this.customerIds.length;
  131. this.users=[];
  132. },
  133. /** 提交按钮 */
  134. submitAssignForm() {
  135. var that=this;
  136. this.$refs["assignForm"].validate(valid => {
  137. if (valid) {
  138. var users=[];
  139. var customerIds=[];
  140. var idIndex=0;
  141. var totalAssignCount=0;
  142. console.log("qxj users",JSON.stringify(this.users));
  143. this.users.forEach(element => {
  144. if(element.count>0){
  145. var ids=that.customerIds.slice(idIndex,idIndex+element.count)
  146. console.log("qxj customerIds:"+that.customerIds+" count:"+element.count);
  147. console.log("qxj ids:"+ids);
  148. customerIds=customerIds.concat(ids);
  149. idIndex=idIndex+element.count;
  150. var data={companyUserId:element.userId,count:element.count};
  151. users.push(data);
  152. totalAssignCount+=element.count;
  153. }
  154. });
  155. if(users.length==0){
  156. this.msgError("请选择员工");
  157. return;
  158. }
  159. if(totalAssignCount>(this.assignCount+this.noAssignCount)){
  160. this.msgError("分配数量有误");
  161. return;
  162. }
  163. this.myloading = this.$loading({
  164. lock: true,
  165. text: '处理中...',
  166. spinner: 'el-icon-loading',
  167. background: 'rgba(0, 0, 0, 0.7)'
  168. });
  169. var data={customerIds:customerIds,users:users,assignType:this.type}
  170. console.log("qxj data:",JSON.stringify(data));
  171. assignToUser(data).then(response => {
  172. this.myloading.close()
  173. if (response.code === 200) {
  174. this.msgSuccess("操作成功");
  175. this.$emit('close');
  176. }
  177. });
  178. }
  179. });
  180. },
  181. closeAction(){
  182. this.$refs.userSelects.users=[];
  183. }
  184. }
  185. };
  186. </script>
  187. <style lang="scss" scoped>
  188. .contents{
  189. height: 100%;
  190. background-color: #fff;
  191. padding: 20px;
  192. }
  193. .footer{
  194. display: flex;
  195. align-items: center;
  196. justify-content: flex-end;
  197. }
  198. </style>