use-depart.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. //部门管理 hook
  2. import { ref, reactive } from 'vue'
  3. import http from '@/api/http'
  4. import { departInterence } from '@/api/api.js';
  5. import { ElMessage, ElMessageBox } from 'element-plus'
  6. export function useDepart(){
  7. //选择的部门
  8. let defaultDepart = ref('')
  9. //选择的分组
  10. let defaultGroup = ref('')
  11. let groupTeamId = 0
  12. let tableParams = reactive({
  13. searchTxt:'',
  14. pageNo:1,
  15. pageSize:10,
  16. total:0
  17. })
  18. //部门数据
  19. let departArr = ref([])
  20. //获取部门结构
  21. async function getDepartArr(){
  22. const res = await departInterence.getDepartList()
  23. if(res.Ret!==200) return
  24. const list = res.Data.List||[]
  25. //给节点增加unicodeKey
  26. departArr.value = list.map(depart=>{
  27. depart.unicodeKey='depart_'+depart.DepartmentId
  28. depart.parentKey = 0
  29. if(depart.Child){
  30. depart.Child = depart.Child.map(group=>{
  31. group.unicodeKey = 'group_'+group.DepartmentId
  32. group.parentKey = depart.unicodeKey
  33. if(group.Child){
  34. group.Child = group.Child.map(team=>{
  35. team.unicodeKey = 'team_'+team.DepartmentId
  36. team.parentKey = group.unicodeKey
  37. return team
  38. })
  39. }
  40. return group
  41. })
  42. }
  43. return depart
  44. })
  45. }
  46. let tableData = ref([])
  47. //获取对应部门/分组下的用户数据
  48. function getTableUser(){
  49. const {searchTxt,pageSize,pageNo} = tableParams
  50. departInterence.getUserList({
  51. DepartmentId:defaultDepart.value,
  52. GroupId:defaultGroup.value,
  53. TeamId:groupTeamId,
  54. KeyWord:searchTxt,
  55. PageSize:pageSize,
  56. CurrentIndex:pageNo
  57. }).then(res => {
  58. if(res.Ret === 200) {
  59. tableData.value = res.Data.List || [];
  60. tableParams.total = res.Data.Paging.Totals;
  61. }
  62. })
  63. }
  64. //用户表格事件
  65. function useDepartTable(){
  66. let isShowUserdtl = ref(false)
  67. let userObj = ref(null)
  68. //打开添加/编辑用户弹窗 (原项目 addUser editUser 合成一个)
  69. let isModifyUserShow = ref(false)
  70. let modifyUserType = ref('add')
  71. let userInfo = ref({})
  72. function openUserDialog(type,data){
  73. modifyUserType.value = type
  74. userInfo.value = data
  75. isModifyUserShow.value = true
  76. }
  77. //打开重置密码弹窗
  78. let isResetPassShow = ref(false)
  79. function openResetPassDialog(data){
  80. userInfo.value = data
  81. isResetPassShow.value = true
  82. }
  83. //打开移动分组弹窗
  84. let isMoveDepartShow = ref(false)
  85. function openMoveDepartDialog(data){
  86. userInfo.value = data
  87. isMoveDepartShow.value = true
  88. }
  89. //添加编辑用户
  90. function modifyUser(data){
  91. const {type,userForm} = data
  92. const {direct} = userForm
  93. const ResearchGroupIds = direct.length?direct.map(i=>i[i.length-1]):[]
  94. //将userForm转为接口的形式
  95. const params = {
  96. AdminName: userForm.account,
  97. Password: new http.Base64().encode(userForm.pwd),
  98. EmployeeId:userForm.employeeNumber.replaceAll(' ',''),
  99. Authority: userForm.auth,
  100. DepartmentId: Number(userForm.depart[0]),
  101. GroupId:userForm.depart[1] ? Number(userForm.depart[1]) : 0,
  102. TeamId:userForm.depart[2] ? Number(userForm.depart[2]) : 0,
  103. Mobile: userForm.mobile,
  104. Position: userForm.post,
  105. RealName: userForm.name,
  106. RoleId: Number(userForm.role),
  107. Enabled:Number(userForm.status),
  108. ResearchGroupIds:ResearchGroupIds.join(','),
  109. Province:userForm.province,
  110. City:userForm.city,
  111. Email:userForm.email,
  112. TelAreaCode:userForm.areacode,
  113. }
  114. if(type==='edit'){
  115. params.AdminId = Number(userForm.admin_id)
  116. }
  117. const map = {
  118. 'add':addUser,
  119. 'edit':editUser
  120. }
  121. map[type]&&map[type](params)
  122. }
  123. function addUser(params){
  124. departInterence.addUser(params).then(res => {
  125. if(res.Ret === 200) {
  126. ElMessage.success('添加成功');
  127. getTableUser()
  128. isModifyUserShow.value = false
  129. }
  130. })
  131. }
  132. function editUser(params){
  133. departInterence.editUser(params).then(res => {
  134. if(res.Ret === 200) {
  135. ElMessage.success('编辑成功');
  136. getTableUser()
  137. isModifyUserShow.value = false
  138. }
  139. })
  140. }
  141. //删除用户,前端按钮因产品要求隐藏,函数保留
  142. function delUser(data){
  143. ElMessageBox.confirm(`是否确认删除用户【${data.AdminName}】`,'提示',{
  144. type:'warning'
  145. }).then(() => {
  146. departInterence.delUser({
  147. AdminId:data.AdminId
  148. }).then(res => {
  149. if(res.Ret === 200) {
  150. ElMessage.success('删除成功')
  151. getTableUser()
  152. }
  153. })
  154. }).catch(() => {});
  155. }
  156. //重置用户密码
  157. function resetUserPassWord({user,form}){
  158. departInterence.resetSysuserPass({
  159. AdminId:Number(user.AdminId),
  160. Password:new http.Base64().encode(form.password),
  161. RePassword:new http.Base64().encode(form.password)
  162. }).then(res=>{
  163. if(res.Ret!==200) return
  164. ElMessage.success('重置密码成功')
  165. isResetPassShow.value = false
  166. getTableUser()
  167. })
  168. }
  169. //移动用户分组
  170. function moveDepart({user,form}){
  171. departInterence.moveSysuser({
  172. AdminId:Number(user.AdminId),
  173. DepartmentId:Number(form.depart[0]),
  174. GroupId:Number(form.depart[1]?form.depart[1]:0),
  175. TeamId:Number(form.depart[2]?form.depart[2]:0),
  176. }).then(res=>{
  177. if(res.Ret!==200) return
  178. ElMessage.success('移动分组成功')
  179. isMoveDepartShow.value = false
  180. getTableUser()
  181. })
  182. }
  183. //改变用户启用禁用状态
  184. async function changeStatus(data){
  185. const res=await departInterence.statusChange({
  186. AdminId:Number(data.AdminId),
  187. Enabled:data.Enabled===1?0:1
  188. })
  189. if(res.Ret===200){
  190. ElMessage.success('设置成功')
  191. getTableUser()
  192. }
  193. }
  194. //查询用户详情
  195. async function getUserDetail(data){
  196. const res = await departInterence.getResearchGroupByAdminId({
  197. AdminId:data.AdminId
  198. })
  199. if(res.Ret!==200) return
  200. //用户详情数据直接传入组件中,数据结构转换在组件内部处理
  201. userObj.value = {
  202. user:data,
  203. direct:res.Data||[]
  204. }
  205. isShowUserdtl.value = true
  206. }
  207. //获取研究方向分组列表
  208. let researchGroup = ref([])
  209. function getResearchGroup(){
  210. departInterence.getTagTree().then(res=>{
  211. if(res.Ret===200){
  212. researchGroup.value = res.Data||[]
  213. }
  214. })
  215. }
  216. return {
  217. isShowUserdtl,userObj,
  218. isModifyUserShow,modifyUserType,userInfo,openUserDialog,
  219. isResetPassShow,openResetPassDialog,resetUserPassWord,
  220. isMoveDepartShow,openMoveDepartDialog,moveDepart,
  221. modifyUser,delUser,
  222. getUserDetail,changeStatus,
  223. getResearchGroup,researchGroup
  224. }
  225. }
  226. //树结构事件
  227. function useTreeEvent(){
  228. let act_node = ref('')
  229. //点击树节点
  230. function clickNode(node,data){
  231. console.log('node',node)
  232. console.log('data',data)
  233. act_node.value = data.unicodeKey
  234. /* 部门节点 */
  235. if(data.IsDepartment) {
  236. defaultDepart.value = data.DepartmentId;
  237. defaultGroup.value = '';
  238. groupTeamId = 0
  239. }else if(data.IsGroup){
  240. /* 分组节点 */
  241. defaultGroup.value = data.DepartmentId;
  242. defaultDepart.value = ''
  243. groupTeamId = 0
  244. } else {
  245. defaultGroup.value = data.GroupId;
  246. groupTeamId = data.DepartmentId
  247. defaultDepart.value = ''
  248. }
  249. tableParams.pageNo = 1;
  250. getTableUser();
  251. }
  252. //重置部门选中
  253. function initDepart(){
  254. defaultDepart.value = ''
  255. defaultGroup.value = ''
  256. act_node.value = ''
  257. groupTeamId = 0
  258. getDepartArr()
  259. tableParams.pageNo = 1
  260. getTableUser()
  261. }
  262. //打开添加/编辑部门/分组弹窗 (原项目中的addNode editNode addDepart合成一个)
  263. let modifyNodeType = ref('add')
  264. let nodeInfo = ref(null)
  265. let isModifyNodeShow = ref(false)
  266. /**
  267. *
  268. * @param type add or edit
  269. * @param data 树节点数据
  270. * @param node 树节点 只需要用到level
  271. */
  272. function openNodeDialog(type,data,{level}){
  273. modifyNodeType.value = type
  274. nodeInfo.value = {data,level}
  275. isModifyNodeShow.value = true
  276. }
  277. //添加编辑部门or分组
  278. /**
  279. * @param params
  280. * @param params.type add or edit
  281. * @param params.nodeForm 节点修改的数据 {name,group}
  282. * @param params.nodeInfo 当前点击的树节点 {data,level}
  283. */
  284. async function modifyNode({type='add',nodeForm,nodeInfo}){
  285. const {level=0} = nodeInfo
  286. //根据level和type确定modify类型
  287. //level为0 增加部门
  288. //level为1 编辑部门&增加分组
  289. //level为2 编辑分组&增加分组
  290. //level为3 编辑分组
  291. const modifyMap = [
  292. {'add':addDepart},
  293. {'add':addGroup,'edit':editDepart},
  294. {'add':addGroup,'edit':editGroup},
  295. {'edit':editGroup}
  296. ]
  297. await modifyMap[level][type](nodeForm,nodeInfo)
  298. getDepartArr()
  299. }
  300. async function addDepart(form,{data}){
  301. await departInterence.addDepart({
  302. DepartmentName:form.departName
  303. }).then(res=>{
  304. if(res.Ret!==200) return
  305. ElMessage.success("添加部门成功")
  306. isModifyNodeShow.value = false
  307. })
  308. }
  309. async function editDepart(form,{data}){
  310. console.log("编辑部门")
  311. await departInterence.editDepart({
  312. DepartmentId:Number(data.DepartmentId),
  313. DepartmentName:form.departName
  314. }).then(res => {
  315. if(res.Ret!==200) return
  316. ElMessage.success("编辑部门成功")
  317. isModifyNodeShow.value = false
  318. })
  319. }
  320. //部门添加分组 or 分组添加分组
  321. async function addGroup(form,{data}){
  322. const groups = form.group.map(i=>i.DepartmentName)
  323. const params = data.IsGroup
  324. ?{
  325. DepartmentId:Number(data.TopId),
  326. GroupId:Number(data.DepartmentId),
  327. TeamName:groups.join(',')
  328. }:{
  329. DepartmentId:Number(data.DepartmentId),
  330. GroupName:groups.join(',')
  331. }
  332. const res = data.IsGroup
  333. ?await departInterence.addTeamGroup(params)
  334. :await departInterence.addGroup(params)
  335. if(res.Ret===200){
  336. ElMessage.success("添加分组成功")
  337. isModifyNodeShow.value = false
  338. }
  339. }
  340. async function editGroup(form,{data}){
  341. const params = data.IsGroup
  342. ?{
  343. GroupId:Number(data.DepartmentId),
  344. GroupName:form.groupName,
  345. }:{
  346. TeamId:Number(data.DepartmentId),
  347. TeamName:form.groupName
  348. }
  349. const res = data.IsGroup
  350. ?await departInterence.editGroup(params)
  351. :await departInterence.editTeamGroup(params)
  352. if(res.Ret===200) {
  353. ElMessage.success("编辑分组成功")
  354. isModifyNodeShow.value = false
  355. }
  356. }
  357. //删除节点
  358. async function removeNode(data){
  359. let res = null
  360. if(data.IsDepartment) {
  361. res = await departInterence.delDepart({
  362. DepartmentId:data.DepartmentId
  363. })
  364. }else if(data.IsGroup) {
  365. /* 删除分组 */
  366. res = await departInterence.delGroup({
  367. GroupId:data.DepartmentId
  368. })
  369. }else {
  370. res = await departInterence.delTeamGroup({
  371. TeamId:data.DepartmentId
  372. })
  373. }
  374. if(res&&res.Ret===200){
  375. ElMessage.success('删除成功')
  376. initDepart()
  377. }
  378. }
  379. return {
  380. act_node,
  381. clickNode,initDepart,removeNode,
  382. modifyNodeType,nodeInfo,isModifyNodeShow,openNodeDialog,modifyNode,
  383. }
  384. }
  385. //树结构移动
  386. function useTreeMove(){
  387. function checkAllowDrag(){}
  388. function checkAllowDrop(){}
  389. function handleDropOver(){}
  390. return {
  391. checkAllowDrag,
  392. checkAllowDrop,
  393. handleDropOver
  394. }
  395. }
  396. return {
  397. groupTeamId,departArr,
  398. defaultDepart,defaultGroup,
  399. tableParams,tableData,
  400. getTableUser,getDepartArr,
  401. useTreeMove,
  402. useTreeEvent,
  403. useDepartTable
  404. }
  405. }