userGroup.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. import { message } from 'antd'
  2. import * as service from '../services/index'
  3. import URLS from '../constants/url'
  4. export default {
  5. namespace: 'userGroup',
  6. state: {
  7. originData: {
  8. list: [],
  9. selectedGroup: null,
  10. filterLabel: '',
  11. newOne: {}
  12. }
  13. },
  14. reducers: {
  15. list(state, action) {
  16. const { list } = action;
  17. return { ...state, list };
  18. },
  19. add(state, action) {
  20. const { group } = action;
  21. let list = state.list;
  22. list.push(group);
  23. return Object.assign({}, state, {list});
  24. },
  25. modify(state, action) {
  26. const { group } = action;
  27. let list = state.list;
  28. list = list.map(l => {
  29. if(l.code === group.code) {
  30. l.name = group.name;
  31. l.description = group.description;
  32. }
  33. return l;
  34. });
  35. return Object.assign({}, state, {list});
  36. },
  37. delete(state, action) {
  38. const { group } = action;
  39. let list = state.list;
  40. for(let i = 0; i < list.length; i ++) {
  41. if(list[i].code === group.code) {
  42. list.splice(i, 1);
  43. break;
  44. }
  45. }
  46. return Object.assign({}, state, {list});
  47. },
  48. setMemberList(state, action) {
  49. const { groupCode, memberList } = action;
  50. let list = state.list;
  51. list = list.map(l => {
  52. if(l.code === groupCode) {
  53. l.member = memberList
  54. }
  55. return l;
  56. });
  57. return Object.assign({}, state, {list});
  58. },
  59. setFilterLabel(state, action) {
  60. const { label } = action;
  61. return { ...state, filterLabel: label};
  62. },
  63. setNewModelField(state, action) {
  64. const { name, value } = action;
  65. let newOne = state.newOne;
  66. newOne[name] = value;
  67. return Object.assign({}, state, { newOne });
  68. },
  69. setNewModelFields(state, action) {
  70. const { fields } = action;
  71. let newOne = state.newOne;
  72. for(let i = 0; i < fields.length; i++) {
  73. newOne[fields[i]['name']] = fields[i]['value'];
  74. }
  75. return Object.assign({}, state, {newOne});
  76. },
  77. setNewModel(state, action) {
  78. const { model } = action;
  79. let newOne = Object.assign({}, model);
  80. return Object.assign({}, state, {newOne});
  81. },
  82. resetNewModel(state, action) {
  83. return { ...state, newOne: {} };
  84. },
  85. setSelectedGroup(state, action) {
  86. const { group } = action;
  87. return { ...state, selectedGroup: group };
  88. },
  89. reset(state, action) {
  90. let newState = Object.assign({}, state, state.originData);
  91. return Object.assign({}, newState);
  92. },
  93. },
  94. effects: {
  95. *fetchList(action, { put, call, select }) {
  96. const userGroup = yield select(state => state.present.userGroup);
  97. const { mandatory, autoSelect } = action;
  98. try {
  99. if(!mandatory && userGroup.list.length > 0) {
  100. return;
  101. }
  102. const res = yield call(service.fetch, {
  103. url: URLS.USERGROUP_LIST,
  104. });
  105. console.log('请求用户组列表', res);
  106. if(!res.err && res.data.code > 0) {
  107. const list = res.data.data.map(d => ({
  108. code: d.id + '',
  109. name: d.userGroupName,
  110. description: d.userGroupNote,
  111. createTime: new Date(d.createDate),
  112. member: []
  113. }));
  114. yield put({ type: 'list', list: list.sort((a, b) => a.createTime - b.createTime) });
  115. yield autoSelect && put({ type: 'changeSelectedGroup', group: list[0] });
  116. }else {
  117. console.log(res.err || res.data.msg);
  118. message.error('请求用户组列表失败: ' + (res.err || res.data.msg));
  119. }
  120. }catch(e) {
  121. console.log(e);
  122. message.error('请求用户组列表失败: ' + e);
  123. }
  124. },
  125. *remoteAdd(action, { put, call, select }) {
  126. try {
  127. const userGroup = yield select(state => state.present.userGroup);
  128. const { newOne } = userGroup;
  129. let body = {
  130. userGroupName: newOne.name,
  131. userGroupNote: newOne.description
  132. };
  133. const res = yield call(service.fetch, {
  134. url: URLS.USERGROUP_ADD,
  135. body: body
  136. });
  137. if(!res.err && res.data.code > 0) {
  138. yield put({ type: 'add', group: {
  139. code: res.data.data + '',
  140. name: newOne.name,
  141. description: newOne.description,
  142. member: []
  143. } });
  144. yield put({ type: 'setNewModelField', name: 'visibleDetailBox', value: false });
  145. yield put({ type: 'resetNewModel' });
  146. message.success('新增成功');
  147. }else {
  148. message.error('新增失败: ' + (res.err || res.data.msg));
  149. }
  150. }catch(e) {
  151. console.log(e);
  152. message.error('新增失败: ' + e);
  153. }
  154. },
  155. *remoteModify(action, { put, call, select }) {
  156. const userGroup = yield select(state => state.present.userGroup);
  157. const { newOne } = userGroup;
  158. const body = {
  159. id: newOne.code,
  160. userGroupName: newOne.name,
  161. userGroupNote: newOne.description
  162. };
  163. try {
  164. const res = yield call(service.fetch, {
  165. url: URLS.USERGROUP_UPDATE,
  166. body
  167. });
  168. if(!res.err && res.data.code > 0) {
  169. yield put({ type: 'modify', group: newOne });
  170. yield put({ type: 'setNewModelField', name: 'visibleDetailBox', value: false });
  171. message.success('修改成功');
  172. }else {
  173. message.error('修改失败: ' + (res.err || res.data.msg));
  174. }
  175. }catch(e) {
  176. console.log(body, e);
  177. message.error('修改失败: ' + e);
  178. }
  179. },
  180. *remoteDelete(action, { put, call, select }) {
  181. const { group } = action;
  182. try {
  183. const res = yield call(service.fetch, {
  184. url: URLS.USERGROUP_DELETE,
  185. body: [group.code]
  186. });
  187. if(!res.err && res.data.code > 0) {
  188. yield put({ type: 'delete', group });
  189. const userGroup = yield select(state => state.present.userGroup);
  190. const { list } = userGroup;
  191. yield put({ type: 'changeSelectedGroup', group: list[0] });
  192. message.success('删除成功');
  193. }else {
  194. message.error('删除失败: ' + (res.err || res.data.msg));
  195. }
  196. }catch(e) {
  197. console.log([group.code], e);
  198. message.error('删除失败: ' + e);
  199. }
  200. },
  201. *changeSelectedGroup(action, { put, call, select }) {
  202. const { group } = action;
  203. if(!group) {
  204. yield put({ type: 'setSelectedGroup', group: null });
  205. return
  206. }
  207. yield put({ type: 'remoteMemberList', groupCode: group.code });
  208. const userGroup = yield select(state => state.present.userGroup);
  209. const { list } = userGroup;
  210. yield put({ type: 'setSelectedGroup', group: list.filter(l => l.code === group.code)[0] });
  211. },
  212. *remoteMemberList(action, { put, call, select }) {
  213. const { groupCode, mandatory } = action;
  214. const userGroup = yield select(state => state.present.userGroup);
  215. const { list } = userGroup;
  216. const group = list.filter(l => l.code === groupCode)[0];
  217. if(!mandatory && group && group.member.length > 0) {
  218. return;
  219. }
  220. try {
  221. const res = yield call(service.fetch, {
  222. url: URLS.USERGROUP_MEMBER_LIST,
  223. body: groupCode
  224. });
  225. console.log('请求用户组成员列表', groupCode, res);
  226. if(!res.err && res.data.code > 0) {
  227. const memberList = res.data.data.map(d => ({
  228. code: d.id + '',
  229. name: d.name,
  230. role: d.role
  231. }));
  232. yield put({ type: 'setMemberList', groupCode, memberList });
  233. }else {
  234. message.error('请求用户组成员列表失败: ' + (res.err || res.data.msg));
  235. }
  236. }catch(e) {
  237. console.log(groupCode, e);
  238. message.error('请求用户组成员列表失败: ' + e);
  239. }
  240. },
  241. *remoteMemberAdd(action, { put, call, select }) {
  242. const { userList, group } = action;
  243. const body = {
  244. userList: userList.map(u => u.code),
  245. userGroupId: group.code
  246. };
  247. try {
  248. const res = yield call(service.fetch, {
  249. url: URLS.USERGROUP_MEMBER_ADD,
  250. body
  251. });
  252. console.log('添加用户组成员', body, res);
  253. if(!res.err && res.data.code > 0) {
  254. yield put({ type: 'remoteMemberList', groupCode: group.code, mandatory: true });
  255. yield put({ type: 'setNewModelField', name: 'visibleAddMemberBox', value: false });
  256. }else {
  257. message.error('添加失败: ' + (res.err || res.data.msg));
  258. }
  259. }catch(e) {
  260. console.log(body, e);
  261. message.error('添加失败: ' + e);
  262. }
  263. },
  264. *remoteMemberDelete(action, { put, call, select }) {
  265. const { userCode, groupCode } = action;
  266. const body = {
  267. userList: [userCode],
  268. userGroupId: groupCode
  269. };
  270. try {
  271. const res = yield call(service.fetch, {
  272. url: URLS.USERGROUP_MEMBER_DELETE,
  273. body
  274. });
  275. console.log('删除用户组成员', body, res);
  276. if(!res.err && res.data.code > 0) {
  277. yield put({ type: 'remoteMemberList', groupCode, mandatory: true });
  278. }else {
  279. message.error('删除失败: ' + (res.err || res.data.msg));
  280. }
  281. }catch(e) {
  282. console.log(body, e);
  283. message.error('删除失败: ' + e);
  284. }
  285. },
  286. },
  287. subscriptions: {
  288. setup({ dispatch, history }) {
  289. dispatch({ type: 'reset' });
  290. }
  291. }
  292. };