DropdownMenu.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. import React, { useMemo } from 'react';
  2. import { Button, Menu, Dropdown, Modal } from 'antd';
  3. import { UnorderedListOutlined } from '@ant-design/icons';
  4. import router from 'umi/router';
  5. import { setLastVersion } from '@/services/boom';
  6. function DropdownMenu(props) {
  7. const {
  8. compareList,
  9. isMerge,
  10. version,
  11. onClick,
  12. flowDetail,
  13. classifyList,
  14. currentUser,
  15. isAuditor,
  16. flow,
  17. sheetRef3,
  18. sheetRef2,
  19. setVersion,
  20. } = props;
  21. const active_audit = flow.active_audit;
  22. const isLastVersion = useMemo(() => {
  23. return version.last_version == 1;
  24. }, [version]);
  25. const canEdit = () => {
  26. if (flow.list.FlowNodes.length - 1 == flow.current && active_audit == 3) return false;
  27. return active_audit != 1;
  28. };
  29. const onSave = () => {
  30. const sheet1 = compareList[0];
  31. Modal.confirm({
  32. title: '提示',
  33. content: `是否确认保存【${sheet1.version_name || sheet1.name}】`,
  34. okText: '确定',
  35. cancelText: '取消',
  36. onOk() {
  37. let sheetData = sheetRef3.current.getSheetJson().data;
  38. sheetData.forEach(sheet => {
  39. delete sheet.data;
  40. });
  41. let params = {
  42. ...sheet1,
  43. data: JSON.stringify(sheetData),
  44. };
  45. dispatch({
  46. type: 'detail/commitSheet',
  47. payload: params,
  48. callback: () => {
  49. onCompare(false);
  50. },
  51. });
  52. },
  53. });
  54. };
  55. const onMerge = () => {
  56. const [sheet1, sheet2] = compareList;
  57. Modal.confirm({
  58. title: '提示',
  59. content: `是否确认将【${sheet2.version_name}】改动的内容同步至【${sheet1.version_name ||
  60. sheet1.name}】`,
  61. okText: '确定',
  62. cancelText: '取消',
  63. onOk() {
  64. sheetRef3.current.mergeExcl(sheetRef2.current.updateCell);
  65. },
  66. });
  67. };
  68. const handleMenuClick = e => {
  69. switch (e.key) {
  70. case 'back':
  71. // 返回
  72. router.push(`/bom`);
  73. break;
  74. case 'lastVersion':
  75. Modal.confirm({
  76. title: '提示',
  77. content: `设置成功后将无法编辑,是否设置为最终版本?`,
  78. okText: '确定',
  79. cancelText: '取消',
  80. onOk: async () => {
  81. await setLastVersion(version.id);
  82. version.last_version = 1
  83. setVersion(version)
  84. localStorage.excelItem = JSON.stringify(version);
  85. },
  86. });
  87. break;
  88. default:
  89. onClick(e);
  90. break;
  91. }
  92. };
  93. // 判断是否为比对模式
  94. if (compareList.length == 2) {
  95. // 判断是否为同步最新清单的比对
  96. if (isMerge) {
  97. return (
  98. <>
  99. <Button type="primary" onClick={onSave}>
  100. 保存
  101. </Button>
  102. <Button onClick={onMerge}>同步新增内容</Button>
  103. <Button onClick={() => onClick({ key: 'compare', data: false })}>取消同步</Button>
  104. </>
  105. );
  106. } else {
  107. return <Button onClick={() => onClick({ key: 'compare', data: true })}>取消比对</Button>;
  108. }
  109. }
  110. const menuList = [
  111. <Menu.Item key="back">返回</Menu.Item>,
  112. <Menu.Item key="bomDetail">详情</Menu.Item>,
  113. <Menu.Item key="export">导出</Menu.Item>,
  114. <Menu.Item key="compare">比对</Menu.Item>,
  115. ];
  116. // version.audit_status:4 为副本。不可操作
  117. if (version.audit_status != 4) {
  118. //判断权限配置,如果配置了,就指定权限的人可提交,没配置就全部人都可提交
  119. //判断分类,这个清单所属分类的操作人可以提交
  120. const getIsSubmit = () => {
  121. let bool = true;
  122. const nodeId = version.template_node_id;
  123. if (!flowDetail?.nodes || !nodeId) return;
  124. const node = flowDetail.nodes.find(item => item.Id == nodeId);
  125. if (!node || node.name == 'custom-circle') return;
  126. if (node?.role_list) {
  127. bool = node.role_list
  128. .split(',')
  129. .some(id => currentUser.roleList?.find(role => role.ID == id));
  130. }
  131. // 非全部分类判断是否含有权限
  132. if(version.classify_id != 1) {
  133. // 判断在特定分类下是否有权限
  134. const uidsStr = classifyList.find(item => item.classify_id == version.classify_id)?.uid;
  135. if (uidsStr && uidsStr.split(',')?.findIndex(item => item == currentUser.ID) < 0) {
  136. bool = false;
  137. // 判断在全部分类下是否有权限
  138. const allUidsStr = classifyList.find(item => item.classify_id == 1)?.uid
  139. if (allUidsStr && allUidsStr.split(',')?.findIndex(item => item == currentUser.ID) != -1) {
  140. bool = true;
  141. }
  142. }
  143. }
  144. return bool;
  145. };
  146. if (getIsSubmit() && version.audit_status == 0)
  147. menuList.push(<Menu.Item key="commitAudit">提交流转</Menu.Item>);
  148. if (!isAuditor && canEdit() && !version.flow_id) {
  149. menuList.push(<Menu.Item key="merge">同步</Menu.Item>);
  150. }
  151. }
  152. if (!isLastVersion) menuList.push(<Menu.Item key="lastVersion">设为最终版本</Menu.Item>);
  153. return (
  154. <>
  155. <Dropdown overlay={<Menu onClick={handleMenuClick}>{menuList}</Menu>}>
  156. <UnorderedListOutlined style={{ fontSize: 30, cursor: 'pointer' }} />
  157. </Dropdown>
  158. </>
  159. );
  160. }
  161. export default DropdownMenu;