dialog-selectInviteUser.vue 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  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 flag = ref(false)
  51. const userName = ref(null)
  52. const userList = ref([])
  53. const selectedUserList = ref([])
  54. const itemList = ref(null)
  55. const resourceGroupList = ref([])
  56. const planDetailId = ref(null)
  57. onLoad(() => {
  58. userId.value = store.userInfo.userId || "";
  59. planDetailId.value = store.planDetails.id
  60. })
  61. function resetPage() {
  62. flag.value = false;
  63. userName.value = null;
  64. userList.value = [];
  65. selectedUserList.value = [];
  66. }
  67. function init() {
  68. baseDialog.value.open()
  69. }
  70. function open(data) {
  71. resetPage()
  72. userName.value = null;
  73. userList.value = [];
  74. itemList.value = data;
  75. init();
  76. }
  77. function close() {
  78. baseDialog.value.close()
  79. }
  80. defineExpose({
  81. open
  82. })
  83. function handleSearchUserName() {
  84. if (userName.value) {
  85. getUserByLikeUsername(userName.value).then(res => {
  86. if (res.code == 200) {
  87. userList.value = res.data;
  88. }
  89. })
  90. }
  91. }
  92. function handleClickUserName(item) {
  93. selectedUserList.value.push(item);
  94. for (let i = 0; i < selectedUserList.value.length; i++) {
  95. if (userId.value == selectedUserList.value[i].userId) {
  96. handleRemoveUserName(item)
  97. uni.showToast({
  98. icon: "none",
  99. title: "邀请报工不能选择自己"
  100. })
  101. }
  102. }
  103. userList.value = [];
  104. }
  105. function handleBlur() {
  106. setTimeout(function() {
  107. userList.value = [];
  108. }, 200)
  109. }
  110. function handleRemoveUserName(item) {
  111. selectedUserList.value.splice(selectedUserList.value.indexOf(item), 1);
  112. }
  113. function handleResourceGroupChange() {
  114. }
  115. function handleStart() {
  116. uni.showModal({
  117. title: "提示",
  118. content: "确认邀请协作者吗",
  119. success: function(res) {
  120. if (res.confirm) {
  121. if (selectedUserList.value.length == 0) {
  122. uni.showToast({
  123. icon: "none",
  124. title: "未选择协作人员"
  125. })
  126. close()
  127. } else {
  128. let inviteUserList = []
  129. let commonType = "person"
  130. console.log(itemList.value[0])
  131. for (let i = 0; i < selectedUserList.value.length; i++) {
  132. let inviteUser = {}
  133. inviteUser.tenantId = store.tenantId
  134. inviteUser.deptId = store.curDeptDetails.deptId
  135. inviteUser.commonId = selectedUserList.value[i].userId
  136. inviteUser.commonCode = selectedUserList.value[i].userName
  137. inviteUser.commonType = commonType
  138. inviteUser.commonName = selectedUserList.value[i].nickName
  139. inviteUser.protemDayworkId = store.dayworkInfo.id
  140. inviteUser.protemProcessId = itemList.value[0].processId
  141. inviteUser.protemProcessStepNumber = itemList.value[0].technologicalProcessDetail
  142. .processStepNumber
  143. inviteUser.technologicalProcessDetailId = itemList.value[0]
  144. .technologicalProcessDetailId
  145. inviteUserList.push(inviteUser)
  146. }
  147. console.log(inviteUserList)
  148. console.log(itemList.value)
  149. console.log(store.dayworkInfo)
  150. saveproTem(inviteUserList).then(res => {
  151. if (res.code == 200) {
  152. uni.showToast({
  153. icon: 'success',
  154. title: '操作成功',
  155. });
  156. close()
  157. } else {
  158. console.log(res)
  159. uni.showToast({
  160. icon: 'none',
  161. title: res.msg != null ? res.msg : '添加失败',
  162. });
  163. }
  164. })
  165. }
  166. } else if (res.cancel) {
  167. close();
  168. }
  169. }
  170. })
  171. }
  172. </script>
  173. <style lang="scss">
  174. .dialog-body {
  175. .userList {
  176. // border: 1rpx solid #1684fc;
  177. border-radius: 8rpx;
  178. max-height: 300rpx;
  179. overflow: auto;
  180. width: 100%;
  181. margin-top: 16rpx;
  182. // padding: 16rpx;
  183. .showUser {
  184. justify-content: flex-start;
  185. flex-wrap: wrap;
  186. .user {
  187. border: 1rpx solid #999;
  188. border-radius: 8rpx;
  189. width: 150rpx;
  190. height: 50rpx;
  191. text-align: center;
  192. line-height: 50rpx;
  193. margin: 10rpx;
  194. overflow: auto;
  195. }
  196. }
  197. }
  198. .selectedUserList {
  199. width: 100%;
  200. justify-content: flex-start;
  201. flex-wrap: wrap;
  202. .selectedUser {
  203. border: 1rpx solid #999;
  204. border-radius: 8rpx;
  205. width: 150rpx;
  206. height: 50rpx;
  207. text-align: center;
  208. line-height: 50rpx;
  209. margin: 20rpx 20rpx 0 0;
  210. justify-content: space-around;
  211. }
  212. }
  213. .add-btn-container {
  214. margin-top: 32rpx;
  215. .btn {
  216. flex: 1;
  217. }
  218. }
  219. }
  220. </style>