boom.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436
  1. import { message } from 'antd';
  2. import request from '@/utils/request';
  3. import { async } from '@antv/x6/lib/registry/marker/async';
  4. import { stringify } from 'qs';
  5. /**
  6. project_id
  7. version_id 大版本id
  8. template_id
  9. template_node_id 查询某流程和某节点下最新版本的数据记录
  10. node_id 查询某审批流程和某审批节点下最新版本的数据记录
  11. */
  12. export async function queryRecord(params) {
  13. return request(`/purchase/record?${stringify(params)}`);
  14. }
  15. // 查询全部工作流
  16. export async function queryFlowList(params) {
  17. return request(`/purchase/bom/flows?${stringify(params)}`);
  18. }
  19. // 根据节点id查询所有version
  20. export async function queryVserionByNode(params) {
  21. return request(`/purchase/bom/flow/node?${stringify(params)}`);
  22. }
  23. export async function commitSheet(params) {
  24. return request(`/purchase/record`, {
  25. method: 'POST',
  26. body: params,
  27. });
  28. }
  29. export async function approve(params) {
  30. return request(`/purchase/audit/status`, {
  31. method: 'POST',
  32. body: params,
  33. });
  34. }
  35. export async function queryAuthority(params) {
  36. const depId = localStorage.depId;
  37. return request(`/purchase/bom/user/excel/col?depId=${depId}`, {
  38. method: 'POST',
  39. body: params,
  40. });
  41. }
  42. export async function addBomComment(params) {
  43. return request(`/purchase/comment`, {
  44. method: 'POST',
  45. body: params,
  46. });
  47. }
  48. export async function queryBomComment(params) {
  49. return request(`/purchase/comment?${stringify(params)}`);
  50. }
  51. /**
  52. * 提交流转
  53. "id":3, 当前流转文档id,必填
  54. "project_id":46, 所属项目id
  55. "template_id":1, 所属模板id ,必填
  56. "template_node_id":34,所属节点id,必填
  57. "next_template_id":1,跳转的下级业务模板id,必填
  58. "next_template_node_id":2,跳转的下级业务节点id,必填
  59. "flow_id":1, 跳转的下级审核流程id , 如果不为空,则说明流转的是审核节点,下级业务节点为审核通过后进入的业务节点
  60. "node_id":1,跳转的下级审核节点id
  61. "desc":"流转描述"
  62. */
  63. export async function submitNextNode(params) {
  64. return request(`/purchase/next/node/submit`, {
  65. method: 'POST',
  66. body: params,
  67. });
  68. }
  69. export async function advanceSubmitNextNode(params) {
  70. return request(`/api/v1/purchase/next/node/advance-submit`, {
  71. method: 'POST',
  72. body: params,
  73. });
  74. }
  75. export async function queryDetail(params) {
  76. let response = await request(`/purchase/record?${stringify(params)}`);
  77. let sheet = response.data;
  78. sheet.data = JSON.parse(sheet.data || '[]');
  79. sheet.data.forEach(item => {
  80. item.config = JSON.parse(item.config || '{}');
  81. item.celldata = JSON.parse(item.cell_data || '[]');
  82. delete item.cell_data;
  83. });
  84. return sheet;
  85. }
  86. export async function queryHistoryDetail(params) {
  87. return request(`/purchase/record/history/detail?${stringify(params)}`);
  88. }
  89. export async function queryHistoryList(params) {
  90. return request(`/purchase/record/history?${stringify(params)}`);
  91. }
  92. export async function queryBoomFlowList(params) {
  93. return request(`/purchase/bom/flows?${stringify(params)}`);
  94. }
  95. //请求历史版本
  96. export async function queryVersionsTree(params) {
  97. return request(`/api/v1/purchase/record/version/tree?${stringify(params)}`);
  98. }
  99. //查询业务节点的审核记录
  100. export async function queryAuditExcel(params) {
  101. return request(`/api/v1/purchase/audit/excel?${stringify(params)}`);
  102. }
  103. //查询审批节点的审核记录
  104. export async function queryAuditRecord(params) {
  105. return request(`/api/v1/purchase/audit/record?${stringify(params)}`);
  106. }
  107. //查询表单数据接口
  108. export async function queryDingSchema(params) {
  109. return request(`/api/v1/purchase/bom/ding/schema?${stringify(params)}`);
  110. }
  111. export async function queryDingInstanceDetail(params) {
  112. let res = await request(`/api/v1/purchase/bom/ding/instance-detail`, {
  113. method: 'POST',
  114. body: params,
  115. });
  116. if (res.data.errcode != 0) {
  117. message.error(res.data.errmsg);
  118. throw new Error(res.data.errmsg);
  119. }
  120. return res;
  121. }
  122. export async function queryDingInstanceExecute(params) {
  123. let res = await request(`/api/v1/purchase/bom/ding/instance-execute`, {
  124. method: 'POST',
  125. body: params,
  126. });
  127. if (res.data.errcode != 0) {
  128. message.error('审批失败,请联系管理员。');
  129. throw new Error(res.data.errmsg);
  130. }
  131. return res;
  132. }
  133. export async function queryListParentByUser(params) {
  134. return request(`/api/v1/purchase/bom/ding/department/list-parent-by-user`, {
  135. method: 'POST',
  136. body: params,
  137. });
  138. }
  139. /**
  140. * 查看项目流程列表
  141. * project_id
  142. */
  143. export async function queryProjectRecord(params) {
  144. return request(`/purchase/bom/project/record?${stringify(params)}`);
  145. }
  146. /** 查看版本列表
  147. * project_id
  148. template_id 流程id
  149. template_node_id 流程节点id
  150. */
  151. export async function queryVersionsList(params) {
  152. return request(`/purchase/record/versions?${stringify(params)}`);
  153. }
  154. export async function queryBoomFlowDetail(params) {
  155. let { data } = await request(`/purchase/bom/flow/info?${stringify(params)}`);
  156. const groups = {
  157. top: {
  158. position: { name: 'top' },
  159. attrs: {
  160. circle: {
  161. r: 4,
  162. magnet: true,
  163. stroke: '#31d0c6',
  164. strokeWidth: 2,
  165. fill: '#fff',
  166. style: { visibility: 'hidden' },
  167. },
  168. },
  169. zIndex: 10,
  170. },
  171. right: {
  172. position: { name: 'right' },
  173. attrs: {
  174. circle: {
  175. r: 4,
  176. magnet: true,
  177. stroke: '#31d0c6',
  178. strokeWidth: 2,
  179. fill: '#fff',
  180. style: { visibility: 'hidden' },
  181. },
  182. },
  183. zIndex: 10,
  184. },
  185. bottom: {
  186. position: { name: 'bottom' },
  187. attrs: {
  188. circle: {
  189. r: 4,
  190. magnet: true,
  191. stroke: '#31d0c6',
  192. strokeWidth: 2,
  193. fill: '#fff',
  194. style: { visibility: 'hidden' },
  195. },
  196. },
  197. zIndex: 10,
  198. },
  199. left: {
  200. position: { name: 'left' },
  201. attrs: {
  202. circle: {
  203. r: 4,
  204. magnet: true,
  205. stroke: '#31d0c6',
  206. strokeWidth: 2,
  207. fill: '#fff',
  208. style: { visibility: 'hidden' },
  209. },
  210. },
  211. zIndex: 10,
  212. },
  213. };
  214. const attrs = {
  215. line: {
  216. stroke: '#A2B1C3',
  217. targetMarker: { name: 'block', width: 12, height: 8 },
  218. strokeDasharray: '5 5',
  219. strokeWidth: 1,
  220. },
  221. };
  222. let nodes = data.Nodes.map(item => {
  223. let node = {
  224. ...item,
  225. id: item.node_id,
  226. renderKey: item.render_key,
  227. zIndex: item.z_index,
  228. isCustom: !!item.is_custom,
  229. ports: JSON.parse(item.ports || '{}'),
  230. };
  231. node.ports.groups = groups;
  232. node.parentKey = '1';
  233. return node;
  234. });
  235. let edges = data.Edges.map(item => {
  236. let edge = {
  237. id: item.edge_id,
  238. source: {
  239. cell: item.source_cell,
  240. port: item.source_port,
  241. },
  242. target: {
  243. cell: item.target_cell,
  244. port: item.target_port,
  245. },
  246. };
  247. try {
  248. edge.attrs = item.attr ? JSON.parse(item.attr) : attrs;
  249. } catch (error) {
  250. edge.attrs = attrs;
  251. }
  252. return edge;
  253. });
  254. return {
  255. ...data,
  256. nodes,
  257. edges,
  258. };
  259. }
  260. export async function updateNode(data) {
  261. return request(`/purchase/bom/flow/${data.templateId}/${data.nodeId}`, {
  262. method: 'PUT',
  263. body: data.body,
  264. });
  265. }
  266. export async function addBoomFlow(data) {
  267. return request(`/purchase/bom/flow/info`, {
  268. method: 'POST',
  269. body: data,
  270. });
  271. }
  272. export async function queryAuditList(params) {
  273. return request(`/purchase/flow/info?${stringify(params)}`);
  274. }
  275. export async function addAudit(data) {
  276. return request(`/purchase/flow/info`, {
  277. method: 'POST',
  278. body: data,
  279. });
  280. }
  281. export async function addFlow(data) {
  282. return request(`/purchase/bom/flow/info`, {
  283. method: 'POST',
  284. body: data,
  285. });
  286. }
  287. /**
  288. * [
  289. {
  290. "flow_id": 23,
  291. "node": "主管",
  292. "desc": "desc",
  293. "auditor": 2,
  294. "seq": 1,
  295. "seq_relate": 0
  296. }
  297. ]
  298. */
  299. export async function addAuditNode(data) {
  300. return request(`/purchase/flow/info/${data.flowId}`, {
  301. method: 'POST',
  302. body: data.nodes,
  303. });
  304. }
  305. export async function queryOSSData() {
  306. return request(`/config/chart-template-img?destDir=public/bom`);
  307. }
  308. export async function queryRecordSheet(data) {
  309. return request(`/purchase/record/sheet?${stringify(data)}`, {
  310. method: 'POST',
  311. body: data,
  312. });
  313. }
  314. export async function queryDingTemplateList() {
  315. return request(`/purchase/bom/ding/template/list`);
  316. }
  317. export async function queryDDdepList(data) {
  318. let res = await request(`/api/v1/purchase/bom/ding/department-list`, {
  319. method: 'POST',
  320. body: data,
  321. });
  322. return res.data.result;
  323. }
  324. export async function queryDDProcessesForecast(data) {
  325. let res = await request(`/api/v1/purchase/bom/ding/processes-forecast`, {
  326. method: 'POST',
  327. body: data,
  328. });
  329. if (res.data.message) {
  330. // message.error(res.data.message);
  331. throw new Error(res.data.message);
  332. }
  333. return res.data.result;
  334. }
  335. export async function uploadFile(data) {
  336. let res = await request(`/api/v1/purchase/bom/ding/upload-file`, {
  337. method: 'POST',
  338. body: data,
  339. headers: {
  340. ContentType: 'application/x-www-form-urlencoded',
  341. },
  342. });
  343. if (!res.data.dentry) {
  344. message.error(res.data.errmsg);
  345. throw new Error(res.data.errmsg);
  346. }
  347. return res.data;
  348. }
  349. export async function bindDDCode(userId, code) {
  350. let res = await request(`/api/v1/purchase/bom/ding/set-ding-user-code?ucode=${userId}:${code}`, {
  351. method: 'GET',
  352. });
  353. return res.data;
  354. }
  355. export async function saveAuditFlowInfo(data) {
  356. return request(`/purchase/flow/info`, {
  357. method: 'POST',
  358. body: data,
  359. });
  360. }
  361. //获取部门结构
  362. export async function queryDepV2(params) {
  363. return request(`/api/v2/dep?${stringify(params)}`);
  364. }
  365. export async function queryProcessFlows(params) {
  366. let res = await request(`/purchase/process/get-flows?${stringify(params)}`, {
  367. method: 'GET',
  368. });
  369. return res.data;
  370. }
  371. export async function queryUserListByRoleID(params) {
  372. let res = await request(`/api/v1/purchase/process/get-role-user?${stringify(params)}`, {
  373. method: 'GET',
  374. });
  375. return res.data;
  376. }
  377. //新增工作流时调用接口 给项目绑定默认分类列表
  378. //purchase/bom/default-bind-classify?project_id=1
  379. export async function queryDefaultBindClassify (params) {
  380. let res = await request(`/purchase/bom/default-bind-classify?${stringify(params)}`, {
  381. method: 'GET',
  382. });
  383. return res.data;
  384. }
  385. //获取分类列表
  386. export async function queryClassify() {
  387. let res = await request(`/purchase/bom/get-classify`, {
  388. method: 'GET',
  389. });
  390. return res.data;
  391. }
  392. export async function queryBindClassify (params) {
  393. let res = await request(`/purchase/bom/get-bind-classify?${stringify(params)}`, {
  394. method: 'GET',
  395. });
  396. return res.data;
  397. }
  398. export async function queryAddBindClassify(data) {
  399. return request(`/purchase/bom/add-bind-classify`, {
  400. method: 'POST',
  401. body: data,
  402. });
  403. }
  404. export async function queryDelPurchaseExcel(params) {
  405. let res = await request(`/purchase/bom/del-purchase-excel?${stringify(params)}`, {
  406. method: 'GET',
  407. });
  408. return res;
  409. }