dialog-selectInviteUser.vue 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <template>
  2. <dialog-base ref="baseDialog" title="请选择">
  3. <view class="userList">
  4. <uni-easyinput class="uni-mt-5" v-model="userName" placeholder="请输入协作者编号"
  5. @input="debounce(handleSearchUserName,500)" ></uni-easyinput>
  6. <!-- @blur="handleBlur" -->
  7. <view class="uni-row showUser">
  8. <view v-for="(item,index) in userList">
  9. <view class="user" @click="handleClickUserName(item)">{{item.nickName}}</view>
  10. </view>
  11. </view>
  12. </view>
  13. <view class="uni-row selectedUserList">
  14. <view class="selectedUser uni-row" v-for="(item,index) in selectedUserList">
  15. <view>{{item.nickName}}</view>
  16. <view v-if="selectedUserList.length > 0" @click="handleRemoveUserName(item)">×</view>
  17. </view>
  18. </view>
  19. <view class="add-btn-container uni-row">
  20. <button type="primary" class="btn" @click="handleStart">开始</button>
  21. </view>
  22. </dialog-base>
  23. </template>
  24. <script setup>
  25. import {
  26. ref
  27. } from 'vue'
  28. import {
  29. onLoad
  30. } from '@dcloudio/uni-app'
  31. import {
  32. getUserInfo
  33. } from '@/api/login/index.js'
  34. import {
  35. saveproTem
  36. } from '@/api/business/dayWorkItem.js'
  37. import {
  38. store
  39. } from '@/store/index.js'
  40. import {
  41. timestampToTime,
  42. debounce
  43. } from '@/utils/common.js'
  44. import {
  45. getUserByLikeUsername
  46. } from '@/api/sys/user.js'
  47. const baseDialog = ref(null)
  48. const emit = defineEmits(['handleAddDayWorkItem'])
  49. const userId = ref(null)
  50. const resourceGroupId = ref(null)
  51. const flag = ref(false)
  52. const userName = ref(null)
  53. const userList = ref([])
  54. const selectedUserList = ref([])
  55. onLoad(() => {
  56. userId.value = store.userInfo.userId || "";
  57. resourceGroupId.value = store.planDetails.resourceGroupId
  58. })
  59. function resetPage() {
  60. flag.value = false;
  61. userName.value = null;
  62. userList.value = [];
  63. selectedUserList.value = [];
  64. }
  65. function init() {
  66. baseDialog.value.open()
  67. }
  68. function open(data) {
  69. resetPage()
  70. userName.value = null;
  71. userList.value = [];
  72. init();
  73. }
  74. function close() {
  75. baseDialog.value.close()
  76. }
  77. defineExpose({
  78. open
  79. })
  80. function handleSearchUserName() {
  81. if (userName.value) {
  82. getUserByLikeUsername(userName.value).then(res => {
  83. if (res.code == 200) {
  84. userList.value = res.data;
  85. }
  86. })
  87. }
  88. }
  89. function handleClickUserName(item) {
  90. selectedUserList.value.push(item);
  91. userList.value = [];
  92. }
  93. function handleBlur() {
  94. setTimeout(function() {
  95. userList.value = [];
  96. }, 200)
  97. }
  98. function handleRemoveUserName(item) {
  99. selectedUserList.value.splice(selectedUserList.value.indexOf(item), 1);
  100. }
  101. function handleStart() {
  102. uni.showModal({
  103. title: "提示",
  104. content: "确认邀请协作者吗",
  105. success: function(res) {
  106. if(res.confirm) {
  107. if (selectedUserList.value.length == 0) {
  108. uni.showToast({
  109. icon: "error",
  110. title: "未选择协作人员"
  111. })
  112. close()
  113. } else {
  114. let inviteUserList = []
  115. let commonType ="person"
  116. for (let i = 0; i < selectedUserList.value.length; i++) {
  117. let inviteUser = {}
  118. inviteUser.tenantId = store.tenantId
  119. inviteUser.deptId = store.curDeptDetails.deptId
  120. inviteUser.productionResourceGroupId = resourceGroupId.value
  121. inviteUser.commonId = selectedUserList.value[i].userId
  122. inviteUser.commonCode = selectedUserList.value[i].userName
  123. inviteUser.commonType = commonType
  124. inviteUser.commonName = selectedUserList.value[i].nickName
  125. inviteUser.protemDayworkId = store.dayworkInfo.id
  126. inviteUserList.push(inviteUser)
  127. }
  128. saveproTem(inviteUserList).then(res => {
  129. if (res.code == 200) {
  130. uni.showToast({
  131. icon: 'success',
  132. title: '操作成功',
  133. });
  134. close()
  135. } else {
  136. uni.showToast({
  137. icon: 'error',
  138. title: '添加失败',
  139. });
  140. }
  141. })
  142. }
  143. }else if(res.cancel){
  144. close();
  145. }
  146. }
  147. })
  148. }
  149. </script>
  150. <style lang="scss">
  151. .dialog-body {
  152. .userList {
  153. border: 1rpx solid #1684fc;
  154. border-radius: 8rpx;
  155. max-height: 300rpx;
  156. overflow: auto;
  157. width: 100%;
  158. margin-top: 16rpx;
  159. .showUser {
  160. justify-content: flex-start;
  161. flex-wrap: wrap;
  162. .user {
  163. border: 1rpx solid #999;
  164. border-radius: 8rpx;
  165. width: 150rpx;
  166. height: 50rpx;
  167. text-align: center;
  168. line-height: 50rpx;
  169. margin: 10rpx;
  170. overflow: auto;
  171. }
  172. }
  173. }
  174. .selectedUserList {
  175. width: 100%;
  176. justify-content: flex-start;
  177. flex-wrap: wrap;
  178. .selectedUser {
  179. border: 1rpx solid #999;
  180. border-radius: 8rpx;
  181. width: 150rpx;
  182. height: 50rpx;
  183. text-align: center;
  184. line-height: 50rpx;
  185. margin: 20rpx 20rpx 0 0;
  186. justify-content: space-around;
  187. }
  188. }
  189. .add-btn-container {
  190. margin-top: 32rpx;
  191. .btn {
  192. flex: 1;
  193. }
  194. }
  195. }
  196. </style>