assistUser.vue 7.9 KB

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