Transfer.vue 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. <template>
  2. <div>
  3. <!-- 穿梭框 -->
  4. <div>
  5. <el-dialog v-model="transferModals" title="分享" width="40%" :close-on-click-modal="false">
  6. <div class="transBox">
  7. <div class="allBag">
  8. <el-input style="width: 220px;margin-left: 18px;margin-top:5px" v-model="allBag"
  9. placeholder="搜索"></el-input>
  10. <div class="allLog">
  11. <el-tree ref="treeRef" :data="allTreeData" :props="allTreeProps" show-checkbox node-key="id"
  12. :default-expanded-keys="openTree" @check-change="allTreeChange"
  13. :default-checked-keys="backScreen" :check-strictly="true" />
  14. </div>
  15. </div>
  16. <div class="needBag">
  17. <div style="border-bottom: 1px solid gray;">
  18. <span>已选择{{ chooseTagData.length }}人</span>
  19. <span style="color: red;font-size: 14px;float: right;">清空</span>
  20. </div>
  21. <div class="needLog">
  22. <el-tag v-for="(item, index) in chooseTagData" :key="index" class="tagtag"
  23. :closable="lastPeople" @close="handleClose(item)">
  24. {{ item.userName }}
  25. </el-tag>
  26. </div>
  27. </div>
  28. </div>
  29. <template #footer>
  30. <span class="dialog-footer">
  31. <el-button @click="backToFather">取消</el-button>
  32. <el-button type="primary" @click="sureShare">
  33. 确定
  34. </el-button>
  35. </span>
  36. </template>
  37. </el-dialog>
  38. </div>
  39. </div>
  40. </template>
  41. <script>
  42. import { ref, onMounted, toRef } from 'vue';
  43. import userTree from '../../../api/user/userTree';
  44. import fileShare from '../../../api/fileShare/fileShare';
  45. import fileCount from '../../../api/fileCount/fileCount'
  46. import { ElMessage } from 'element-plus'
  47. export default {
  48. props: {
  49. thanks: {
  50. type: Boolean,
  51. required: true
  52. },
  53. clickRowId: {
  54. type: Number,
  55. required: true
  56. },
  57. workOrEdit: {
  58. type: Number,
  59. required: true
  60. },
  61. isNewMenu:{
  62. type: Boolean,
  63. required: true
  64. },
  65. },
  66. setup(props, { emit }) {
  67. let { backToFather, sureBackFather } = toRefs(props)
  68. let result = props.thanks
  69. let dees = props.clickRowId
  70. let feeh = props.workOrEdit
  71. let isNewMenus = props.isNewMenu
  72. let transferModals = ref(false)
  73. let allTreeData = ref([])
  74. let allTreeProps = {
  75. label: 'label',
  76. children: 'children',
  77. disabled: false,
  78. id: "id"
  79. }
  80. let openTree = ref([])
  81. let chooseTagData = ref([])
  82. let allBag = ref('')
  83. let needTagData = ref([])
  84. let backScreen = ref([])
  85. let lastPeople = ref(false)
  86. function allTeam() {
  87. if (result) {
  88. transferModals.value = result
  89. }
  90. }
  91. // 分享穿梭框
  92. function allTreeChange(e) {
  93. const id = e.id;
  94. const label = e.label;
  95. // 查找是否已经存在相同 userId 的数据的索引
  96. const existingIndex = chooseTagData.value.findIndex(item => item.userId === id);
  97. if (existingIndex !== -1) {
  98. // 如果已存在,删除该项
  99. chooseTagData.value.splice(existingIndex, 1);
  100. } else {
  101. // 选择操作,将数据添加到 needTagData 中
  102. chooseTagData.value.push({ userId: id, userName: label });
  103. }
  104. if (chooseTagData.value.length === 1) {
  105. lastPeople.value = true
  106. } else {
  107. lastPeople.value = false
  108. }
  109. }
  110. // 确认分享
  111. function sureShare() {
  112. if (feeh === 1) {
  113. if (chooseTagData.value.length === 0) {
  114. ElMessage({
  115. type: "error",
  116. message: "你还未选择人员!"
  117. })
  118. } else {
  119. console.log(chooseTagData.value, 'value');
  120. let arr = []
  121. arr = chooseTagData.value.map(item => {
  122. return item.userId
  123. })
  124. fileShare.addSharePeople(dees, arr).then(res => {
  125. if (res.code === 200) {
  126. ElMessage({
  127. message: "分享成功",
  128. type: "success"
  129. })
  130. transferModals.value = false
  131. emit("getCback", transferModals.value)
  132. }
  133. })
  134. }
  135. } else {
  136. if (chooseTagData.value.length === 0) {
  137. ElMessage({
  138. type: "error",
  139. message: "你还未选择人员!"
  140. })
  141. } else {
  142. let arr = []
  143. arr = chooseTagData.value.map(item => {
  144. return item.userId
  145. })
  146. fileCount.addActor(dees, arr).then(res => {
  147. if (res.code === 200) {
  148. ElMessage({
  149. message: "提醒人员成功",
  150. type: "success"
  151. })
  152. transferModals.value = false
  153. emit("getCback", transferModals.value)
  154. }
  155. })
  156. }
  157. }
  158. }
  159. // 获取用户树
  160. function getAllUser() {
  161. console.log('isNewMenu', props.clickRowId)
  162. userTree.getUserTree({}).then(res => {
  163. allTreeData.value = [res]
  164. userTree.getUserTree({}).then(res => {
  165. allTreeData.value = [res];
  166. // 递归函数来获取所有节点的 id
  167. function getAllNodeIds(nodes) {
  168. nodes.forEach(node => {
  169. openTree.value.push(node.id);
  170. if (node.children && node.children.length > 0) {
  171. getAllNodeIds(node.children);
  172. }
  173. });
  174. }
  175. // 调用递归函数获取所有节点的 id
  176. getAllNodeIds(allTreeData.value);
  177. });
  178. })
  179. if (feeh === 1) {
  180. fileShare.getSharePeople(dees).then(res => {
  181. // 去除数组内部的重复元素
  182. const uniqueRes = Array.from(new Set(res.map(item => item.userName))).map(id => res.find(item => item.userName === id));
  183. // 现在的 uniqueRes 数组不包含重复元素
  184. chooseTagData.value = uniqueRes;
  185. backScreen.value = chooseTagData.value.map(item => {
  186. return item.userId
  187. })
  188. })
  189. } else if(!isNewMenus){
  190. fileCount.getActor(dees).then(res => {
  191. console.log(res, 'count');
  192. })
  193. }
  194. }
  195. function getBack() {
  196. transferModals.value = false
  197. emit("getCback", transferModals.value)
  198. }
  199. function handleClose(tag) {
  200. chooseTagData.value.splice(chooseTagData.value.indexOf(tag), 1);
  201. // 从标签中获取 userId
  202. // const userId = tag.userId;
  203. // 从 chooseTagData 中筛选出不包含当前 userId 的标签
  204. // chooseTagData.value = chooseTagData.value.filter(item => item.userId !== userId)
  205. }
  206. onMounted(() => {
  207. console.log(feeh, 'eeh');
  208. allTeam()
  209. getAllUser()
  210. })
  211. return {
  212. transferModals,
  213. allTreeData,
  214. allTreeProps,
  215. openTree,
  216. chooseTagData,
  217. allTreeChange,
  218. sureShare,
  219. allBag,
  220. getAllUser,
  221. result,
  222. allTeam,
  223. dees,
  224. needTagData,
  225. handleClose,
  226. backScreen,
  227. lastPeople,
  228. feeh,
  229. backToFather: getBack,
  230. }
  231. }
  232. }
  233. </script>
  234. <style scoped>
  235. .transBox {
  236. width: 550px;
  237. height: 400px;
  238. margin: 0 auto;
  239. display: flex;
  240. justify-content: space-around;
  241. align-items: center;
  242. /* border: 1px solid black; */
  243. }
  244. .tagtag {
  245. display: flex;
  246. justify-content: space-between;
  247. align-items: center;
  248. text-align: start;
  249. width: 230px;
  250. margin: 0 auto;
  251. }
  252. .allBag {
  253. width: 255px;
  254. height: 380px;
  255. border: 1px solid green;
  256. }
  257. .needBag {
  258. width: 255px;
  259. height: 380px;
  260. border: 1px solid green;
  261. }
  262. .allLog {
  263. width: 245px;
  264. height: 330px;
  265. margin: 5px auto;
  266. /* border: 1px solid red; */
  267. overflow-y: auto;
  268. }
  269. :deep(.el-tag__content) {
  270. display: block;
  271. }
  272. :deep(.el-icon el-tag__close) {
  273. display: block;
  274. }
  275. </style>