dialog-selectInviteUser.vue 5.8 KB

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