@alanwang-merit/meritdata-platform-skill-package 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (359) hide show
  1. package/CHANGELOG.md +1094 -0
  2. package/README.md +366 -0
  3. package/docs//344/270/211/346/226/271skill/346/230/240/345/260/204/345/205/263/347/263/273/346/270/205/345/215/225_20260907.md +349 -0
  4. package/docs//344/272/214/345/274/20012/351/230/266/346/256/265/345/274/200/345/217/221/346/265/201/347/250/213/346/226/207/346/241/243/346/241/206/346/236/266/346/217/220/345/217/226_20260907.md +286 -0
  5. package/package.json +7 -0
  6. package/rules/README.md +112 -0
  7. package/rules/api-design-rules.md +96 -0
  8. package/rules/code-dev-rules.md +167 -0
  9. package/rules/coding-standards-rules.md +99 -0
  10. package/rules/documentation-rules.md +102 -0
  11. package/rules/frontend-coding-rules.md +128 -0
  12. package/rules/frontend-component-rules.md +174 -0
  13. package/rules/git-workflow-rules.md +85 -0
  14. package/rules/meritdata-platform-data-boundary.md +183 -0
  15. package/rules/meritdata-platform-domain-model-rules.md +248 -0
  16. package/rules/nacos-rules.md +154 -0
  17. package/rules/naming-conventions-rules.md +98 -0
  18. package/rules/performance-rules.md +102 -0
  19. package/rules/requirement-dev-rules.md +77 -0
  20. package/rules/security-rules.md +91 -0
  21. package/rules/sql-naming-rules.md +397 -0
  22. package/rules/sql-script-rules.md +146 -0
  23. package/rules/system-test-rules.md +90 -0
  24. package/rules/test-case-dev-rules.md +96 -0
  25. package/skills/README.md +118 -0
  26. package/skills/meritdata-bootstrap-2nd-dev/SKILL.md +37 -0
  27. package/skills/meritdata-bootstrap-2nd-dev/references/guide.md +245 -0
  28. package/skills/meritdata-bootstrap-2nd-dev/references/template.md +229 -0
  29. package/skills/meritdata-bootstrap-2nd-dev/references/verify.md +204 -0
  30. package/skills/meritdata-dev-docs-file-finder/SKILL.md +215 -0
  31. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/205/254/345/205/261/350/265/204/344/272/247/346/270/205/345/215/225-/345/216/237/346/226/207/344/273/266.md +3516 -0
  32. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/244/226/351/203/250/346/216/245/345/217/243/346/270/205/345/215/225-/345/216/237/346/226/207/344/273/266.md +12391 -0
  33. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/203/357/274/211/357/274/232/347/263/273/347/273/237/344/270/232/345/212/241/346/227/245/345/277/227/350/247/204/350/214/203.md +95 -0
  34. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/211/357/274/211/357/274/232/347/273/204/347/273/207/345/222/214/344/272/272/345/221/230/345/257/274/345/205/245.md +88 -0
  35. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/271/235/357/274/211/357/274/232/345/257/206/347/272/247/344/272/214/346/254/241/345/274/200/345/217/221/346/226/207/346/241/243.md +198 -0
  36. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/271/235/357/274/211/357/274/232/345/257/206/347/272/247/345/212/237/350/203/275.md +128 -0
  37. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/271/235/357/274/211/357/274/232/347/273/204/347/273/207/345/222/214/344/272/272/345/221/230/345/220/214/346/255/245.md +912 -0
  38. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/272/214/357/274/211/357/274/232/347/263/273/347/273/237/351/205/215/347/275/256/351/241/271/347/256/241/347/220/206.md +923 -0
  39. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/205/253/357/274/211/357/274/232/346/227/245/345/277/227/345/244/207/344/273/275/345/212/237/350/203/275/344/275/277/347/224/250/350/257/264/346/230/216.md +110 -0
  40. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/205/255/357/274/211/357/274/232/347/263/273/347/273/237/346/216/210/346/235/203/344/272/247/345/223/201/345/214/205/346/211/251/345/261/225.md +136 -0
  41. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/344/270/200/357/274/211/357/274/232/346/266/210/346/201/257/344/270/255/345/277/203.md +1096 -0
  42. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/344/270/200/357/274/211/357/274/232/350/260/203/345/272/246/347/274/226/346/216/222/344/272/214/345/274/200/350/257/264/346/230/216.md +244 -0
  43. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/344/272/214/357/274/211/357/274/232VUE/345/211/215/347/253/257/345/205/254/345/205/261/345/274/271/346/241/206/347/273/204/344/273/266/344/275/277/347/224/250.md +136 -0
  44. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/345/233/233/357/274/211/357/274/232/346/225/260/346/215/256/346/272/220/346/250/241/345/235/227/346/211/251/345/261/225.md +197 -0
  45. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/357/274/211/357/274/232/345/233/275/351/231/205/345/214/226/351/233/206/346/210/220.md +116 -0
  46. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/215/201/357/274/211/357/274/232/345/256/232/346/227/266/350/260/203/345/272/246/344/273/273/345/212/241.md +392 -0
  47. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/345/237/272/347/241/200/345/271/263/345/217/260-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/233/233/357/274/211/357/274/232/347/263/273/347/273/237/350/256/244/350/257/201/351/233/206/346/210/220.md +907 -0
  48. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/200/357/274/211/357/274/232/346/265/201/347/250/213API/346/216/245/345/217/243.md +2930 -0
  49. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/203/357/274/211/357/274/232/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241/350/257/264/346/230/216/346/226/207/346/241/243.md +730 -0
  50. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/270/211/357/274/211/357/274/232/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217/345/274/200/345/217/221.md +463 -0
  51. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/272/214/357/274/211/357/274/232/345/267/245/344/275/234/346/265/201/347/250/213/345/272/224/347/224/250/345/274/200/345/217/221.md +2429 -0
  52. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/344/272/224/357/274/211/357/274/232/345/276/205/345/212/236/345/220/214/346/255/245/351/227/250/346/210/267/345/274/200/345/217/221.md +270 -0
  53. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/205/253/357/274/211/357/274/232/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266/345/217/212/346/226/271/346/263/225/350/257/264/346/230/216/346/226/207/346/241/243.md +685 -0
  54. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/205/255/357/274/211/357/274/232/346/265/201/347/250/213/350/277/275/350/270/252/351/241/265/351/235/242/345/265/214/345/205/245/350/241/250/345/215/225/345/274/200/345/217/221.md +229 -0
  55. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/.bak//345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260-/346/265/201/347/250/213/347/256/241/347/220/206-/344/275/277/347/224/250/346/224/273/347/225/245/357/274/210/345/233/233/357/274/211/357/274/232/350/207/252/345/256/232/344/271/211/344/272/272/345/221/230.md +112 -0
  56. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/01_/347/233/256/345/275/225/344/270/216/346/226/207/346/241/243/347/273/223/346/236/204.md +97 -0
  57. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/02_/344/270/200/345/237/272/347/241/200/350/256/276/346/226/275-1.1/347/274/223/345/255/230/346/223/215/344/275/234-SysCacheServiceFacade.md +423 -0
  58. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/03_/344/270/200/345/237/272/347/241/200/350/256/276/346/226/275-1.1/347/274/223/345/255/230/346/223/215/344/275/234-StringCacheFacade.md +78 -0
  59. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/04_/344/270/200/345/237/272/347/241/200/350/256/276/346/226/275-1.2/351/205/215/347/275/256/344/270/255/345/277/203-NacosUtils.md +193 -0
  60. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/05_/344/272/214/351/200/232/347/224/250/345/267/245/345/205/267-2.1/345/212/240/350/247/243/345/257/206-SM2-SM3-SM4.md +176 -0
  61. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/06_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.1/346/227/245/345/277/227/346/234/215/345/212/241-ILogPostService.md +323 -0
  62. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/07_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.1/346/227/245/345/277/227/346/263/250/350/247/243-LogDesc-LogOperation.md +210 -0
  63. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/08_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.3/344/274/232/350/257/235/344/277/241/346/201/257-SessionUtils.md +349 -0
  64. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/09_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.3/345/234/250/347/272/277/347/224/250/346/210/267-IUserOnlineTime.md +63 -0
  65. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/10_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.4/345/244/232/347/263/273/347/273/237/351/233/206/346/210/220+3.5/346/225/260/346/215/256/345/257/206/347/272/247.md +91 -0
  66. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/11_/344/270/211/345/271/263/345/217/260/346/234/215/345/212/241-3.6/346/234/215/345/212/241/351/200/232/347/237/245-CloudFeignMessageClient.md +467 -0
  67. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/12_/345/233/233/344/270/232/345/212/241/347/273/204/344/273/266-4.1/345/267/245/344/275/234/346/265/201BpmEngine.md +86 -0
  68. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/13_/345/233/233/344/270/232/345/212/241/347/273/204/344/273/266-4.2/350/260/203/345/272/246/347/273/204/344/273/266ICloudClient.md +57 -0
  69. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/14_/345/233/233/344/270/232/345/212/241/347/273/204/344/273/266-4.3/345/256/232/346/227/266/344/273/273/345/212/241IJobApi.md +55 -0
  70. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/15_/344/272/224/345/211/215/347/253/257/350/265/204/344/272/247-5.1UI/347/273/204/344/273/266/345/272/223-/344/270/212/345/215/212.md +514 -0
  71. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/16_/344/272/224/345/211/215/347/253/257/350/265/204/344/272/247-5.1UI/347/273/204/344/273/266/345/272/223-/344/270/213/345/215/212.md +302 -0
  72. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/17_/351/231/204/345/275/225-/347/273/237/350/256/241/346/261/207/346/200/273-Maven/344/276/235/350/265/226-/346/263/250/346/204/217/344/272/213/351/241/271.md +131 -0
  73. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/18_/347/233/256/345/275/225/344/270/216/346/226/207/346/241/243/350/257/264/346/230/216.md +310 -0
  74. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/19_1.1-1.6/345/237/272/347/241/200/351/205/215/347/275/256-/345/271/263/345/217/260/344/277/241/346/201/257/347/261/273.md +371 -0
  75. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/20_1.7-1.10/345/237/272/347/241/200/351/205/215/347/275/256-/351/241/265/351/235/242/344/270/216/346/266/210/346/201/257/347/261/273.md +344 -0
  76. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/21_1.11-1.15/345/237/272/347/241/200/351/205/215/347/275/256-/346/266/210/346/201/257/344/270/216/351/205/215/347/275/256/347/261/273.md +302 -0
  77. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/22_1.16/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245.md +326 -0
  78. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/23_1.17/350/265/204/346/272/220/346/225/260/346/215/256/345/257/206/347/272/247-/344/270/212/345/215/212.md +303 -0
  79. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/24_1.17/350/265/204/346/272/220/346/225/260/346/215/256/345/257/206/347/272/247-/344/270/213/345/215/212.md +355 -0
  80. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/25_2.1/347/273/204/347/273/207/347/273/264/346/212/244-/344/270/212/345/215/212.md +459 -0
  81. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/26_2.1/347/273/204/347/273/207/347/273/264/346/212/244-/344/270/213/345/215/212.md +567 -0
  82. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/27_2.2/344/272/272/345/221/230/347/273/264/346/212/244-/344/270/212/345/215/212.md +838 -0
  83. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/28_2.2/344/272/272/345/221/230/347/273/264/346/212/244-/344/270/213/345/215/212.md +585 -0
  84. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/29_2.3/350/247/222/350/211/262/347/273/264/346/212/244-/344/270/212/345/215/212.md +576 -0
  85. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/30_2.3/350/247/222/350/211/262/347/273/264/346/212/244-/344/270/213/345/215/212.md +597 -0
  86. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/31_2.4/347/224/250/346/210/267/347/273/264/346/212/244-/344/270/212/345/215/212.md +490 -0
  87. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/32_2.4/347/224/250/346/210/267/347/273/264/346/212/244-/344/270/213/345/215/212.md +560 -0
  88. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/33_2.5/345/267/245/344/275/234/347/273/204/347/273/264/346/212/244.md +209 -0
  89. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/34_2.6/345/205/266/344/273/226/346/216/245/345/217/243-/344/270/212/345/215/212.md +653 -0
  90. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/35_2.6/345/205/266/344/273/226/346/216/245/345/217/243-/344/270/213/345/215/212.md +591 -0
  91. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/36_3.1-3.7/350/265/204/346/272/220/346/216/210/346/235/203/345/237/272/347/241/200.md +827 -0
  92. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/37_3.8-3.10/350/265/204/346/272/220/346/216/210/346/235/203/350/277/233/351/230/266.md +458 -0
  93. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/38_3.11/345/237/272/347/241/200/346/225/260/346/215/256.md +210 -0
  94. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/39_3.12/346/225/260/346/215/256/346/272/220/347/273/264/346/212/244.md +277 -0
  95. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/40_3.13/347/254/254/344/270/211/346/226/271/350/265/204/346/272/220/347/273/264/346/212/244.md +310 -0
  96. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/41_3.14/346/234/215/345/212/241/347/256/241/347/220/206.md +521 -0
  97. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/42_3.15/350/265/204/346/272/220/347/273/264/346/212/244-/344/270/212/345/215/212.md +767 -0
  98. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/43_3.15/350/265/204/346/272/220/347/273/264/346/212/244-/344/270/213/345/215/212.md +378 -0
  99. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/44_3.16/344/272/272/345/221/230/351/200/211/346/213/251/345/231/250-/344/270/212/345/215/212.md +311 -0
  100. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/45_3.16/344/272/272/345/221/230/351/200/211/346/213/251/345/231/250-/344/270/213/345/215/212.md +242 -0
  101. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/46_3.17/345/241/253/346/212/245/346/212/245/350/241/250+3.18/351/252/214/350/257/201/347/240/201.md +178 -0
  102. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/47_3.19/345/267/245/344/275/234/345/217/260/347/273/264/346/212/244.md +196 -0
  103. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/48_3.20/350/260/203/345/272/246/347/274/226/346/216/222.md +106 -0
  104. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/49_/351/231/204/345/275/225-4.1-4.3/350/277/224/345/233/236/347/240/201/344/270/216/347/211/210/346/234/254/346/270/205/345/215/225.md +43 -0
  105. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/AGENTS.md +252 -0
  106. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/CLAUDE.md +252 -0
  107. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/README.md +230 -0
  108. package/skills/meritdata-dev-docs-file-finder/references/dev-docs/REQUIREMENT_DESIGN_REFERENCE.md +543 -0
  109. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-00_/346/200/273/350/247/210.md +198 -0
  110. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20201_/345/211/215/347/275/256/346/235/241/344/273/266.md +11 -0
  111. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20202_/350/247/204/345/210/231/345/274/225/346/223/216/345/210/235/345/247/213/345/214/226/346/216/245/345/217/243.md +263 -0
  112. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20203_/345/220/257/345/212/250/346/265/201/347/250/213/345/256/236/344/276/213/346/216/245/345/217/243.md +187 -0
  113. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20204_/350/277/220/350/241/214/350/247/204/345/210/231/345/274/225/346/223/216.md +449 -0
  114. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20205_/345/256/214/346/210/220/344/273/273/345/212/241/346/216/245/345/217/243.md +232 -0
  115. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20206_/345/241/253/345/206/231/346/204/217/350/247/201/346/216/245/345/217/243.md +192 -0
  116. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20207_/346/240/271/346/215/256/344/273/273/345/212/241/350/212/202/347/202/271/350/216/267/345/217/226/346/204/217/350/247/201/345/206/205/345/256/271.md +212 -0
  117. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20208_/346/237/245/347/234/213/350/277/275/350/270/252/346/216/245/345/217/243.md +492 -0
  118. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20209_/351/200/200/345/233/236/346/213/237/347/250/277/344/272/272/346/216/245/345/217/243.md +187 -0
  119. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20210_/351/200/200/345/233/236/344/270/212/344/270/200/347/216/257/350/212/202/345/244/204/347/220/206/344/272/272/346/216/245/345/217/243.md +183 -0
  120. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20211_/346/265/201/347/250/213/350/256/276/350/256/241/345/231/250/345/210/227/350/241/250/346/237/245/350/257/242.md +314 -0
  121. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20212_/344/270/252/344/272/272/345/276/205/345/212/236.md +261 -0
  122. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20213_/351/230/205/347/237/245.md +306 -0
  123. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20214_/346/265/201/347/250/213/346/234/200/346/226/260/345/256/232/344/271/211ID.md +100 -0
  124. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20215_/344/270/232/345/212/241/347/233/270/345/205/263/346/216/245/345/217/243.md +637 -0
  125. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-01-/346/265/201/347/250/213API-/347/253/240/350/212/20216_/346/265/201/347/250/213/345/210/206/347/261/273/347/233/270/345/205/263.md +176 -0
  126. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-00_/346/200/273/350/247/210.md +84 -0
  127. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20201_/346/240/267/344/276/213/350/257/264/346/230/216.md +37 -0
  128. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20202_/345/220/216/347/253/257/345/267/245/347/250/213/345/210/233/345/273/272.md +39 -0
  129. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20203_/345/220/216/347/253/257/345/267/245/347/250/213/351/205/215/347/275/256.md +234 -0
  130. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20204_/345/220/216/347/253/257/345/267/245/347/250/213/344/270/232/345/212/241/347/261/273/345/210/233/345/273/272.md +548 -0
  131. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20205_/345/220/257/345/212/250/345/220/216/347/253/257/345/272/224/347/224/250/345/267/245/347/250/213.md +49 -0
  132. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20206_/346/265/201/347/250/213/345/272/224/347/224/250/345/211/215/347/253/257/345/274/200/345/217/221.md +1443 -0
  133. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20207_/345/220/257/345/212/250/345/211/215/347/253/257/345/272/224/347/224/250/345/267/245/347/250/213.md +78 -0
  134. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-02-/345/267/245/344/275/234/346/265/201/347/250/213-/347/253/240/350/212/20208_/346/265/201/347/250/213/350/256/276/350/256/241.md +98 -0
  135. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-00_/346/200/273/350/247/210.md +51 -0
  136. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20201_/345/256/236/347/216/260/347/255/226/347/225/245.md +30 -0
  137. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20202_/350/207/252/345/256/232/344/271/211_jar_/345/214/205/347/232/204/345/256/236/347/216/260/346/265/201/347/250/213.md +242 -0
  138. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20203_/350/207/252/345/256/232/344/271/211/346/234/215/345/212/241/346/220/255/345/273/272/357/274/210/350/213/245/345/267/262/345/255/230/345/234/250/345/267/245/347/250/213/345/222/214/346/216/245/345/217/243/357/274/214/346/255/244/346/255/245/351/252/244/345/217/257/347/234/201/347/225/245/357/274/211.md +150 -0
  139. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20204_/346/265/201/347/250/213/350/256/276/350/256/241/344/270/255/350/256/276/347/275/256_listener_/345/217/202/346/225/260.md +44 -0
  140. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20205_/346/265/213/350/257/225/350/247/246/345/217/221/346/265/201/347/250/213/347/233/221/345/220/254/344/272/213/344/273/266/346/230/257/345/220/246/347/224/237/346/225/210.md +42 -0
  141. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-03-/347/233/221/345/220/254/350/241/250/350/276/276/345/274/217-/347/253/240/350/212/20206_/345/244/207/346/263/250/357/274/232.md +26 -0
  142. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-00_/346/200/273/350/247/210.md +47 -0
  143. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20201_/347/263/273/347/273/237/350/256/244/350/257/201/351/233/206/346/210/220/344/273/213/347/273/215.md +14 -0
  144. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20202_token_/350/256/244/350/257/201/351/233/206/346/210/220.md +568 -0
  145. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20203_cas_/347/273/237/344/270/200/350/256/244/350/257/201/344/270/255/345/277/203.md +128 -0
  146. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20204_/347/254/254/344/270/211/346/226/271/350/256/244/350/257/201/344/270/255/345/277/203.md +151 -0
  147. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-06-/347/263/273/347/273/237/350/256/244/350/257/201-/347/253/240/350/212/20205_/351/231/204/345/275/225_1_/350/256/244/350/257/201/344/270/255/345/277/203/347/253/257/351/205/215/347/275/256.md +93 -0
  148. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-00_/346/200/273/350/247/210.md +25 -0
  149. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20201_/350/203/214/346/231/257.md +12 -0
  150. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20202_/345/267/245/344/275/234/346/265/201/347/233/270/345/205/263/344/273/213/347/273/215.md +28 -0
  151. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20203_/345/272/224/347/224/250/345/274/200/345/217/221/345/271/263/345/217/260/346/265/201/347/250/213/345/214/205/345/220/253/346/250/241/345/235/227.md +18 -0
  152. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20204_/346/265/201/347/250/213/345/212/237/350/203/275/346/250/241/345/235/227/344/273/213/347/273/215.md +284 -0
  153. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20205_/346/265/201/347/250/213/345/220/216/347/253/257/350/256/276/350/256/241.md +226 -0
  154. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20206_/346/265/201/347/250/213/345/211/215/347/253/257/350/256/276/350/256/241.md +80 -0
  155. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20207_/344/272/214/346/254/241/345/274/200/345/217/221.md +38 -0
  156. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-07-/346/265/201/347/250/213/346/250/241/345/235/227/350/256/276/350/256/241-/347/253/240/350/212/20208_/344/270/252/344/272/272/346/240/267/344/276/213/346/265/201/347/250/213/347/232/204/351/205/215/347/275/256.md +92 -0
  157. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-00_/346/200/273/350/247/210.md +66 -0
  158. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20201_/346/246/202/350/277/260.md +165 -0
  159. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20202_/347/273/204/344/273/266/344/270/216/346/226/271/346/263/225/346/246/202/350/247/210/350/241/250.md +45 -0
  160. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20203_BpmFormTools_-_BPM/350/241/250/345/215/225/345/267/245/345/205/267/347/273/204/344/273/266.md +145 -0
  161. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20204_BpmGridButtonsNew_-_BPM/350/241/250/346/240/274/346/214/211/351/222/256/347/273/204/344/273/266.md +239 -0
  162. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20205_/345/220/216/347/253/257BpmEngine/346/240/270/345/277/203/346/216/245/345/217/243.md +135 -0
  163. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-08-/346/265/201/347/250/213/345/211/215/347/253/257/347/273/204/344/273/266-/347/253/240/350/212/20206_/351/231/204/345/275/225.md +43 -0
  164. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-00_/346/200/273/350/247/210.md +59 -0
  165. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20201_/346/246/202/350/277/260.md +16 -0
  166. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20202_/347/273/204/347/273/207/345/220/214/346/255/245.md +318 -0
  167. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20203_/344/272/272/345/221/230/345/220/214/346/255/245.md +187 -0
  168. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20204_/350/265/204/346/272/220/350/217/234/345/215/225/345/220/214/346/255/245.md +124 -0
  169. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20205_/350/247/222/350/211/262/345/220/214/346/255/245.md +79 -0
  170. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20206_/350/265/204/346/272/220/346/235/203/351/231/220/345/220/214/346/255/245.md +116 -0
  171. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-09-/347/273/204/347/273/207/344/272/272/345/221/230/345/220/214/346/255/245-/347/253/240/350/212/20207_/347/273/204/347/273/207/345/220/214/346/255/245/351/205/215/347/275/256.md +173 -0
  172. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-00_/346/200/273/350/247/210.md +49 -0
  173. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20201_/344/275/277/347/224/250/350/203/214/346/231/257.md +12 -0
  174. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20202_/346/233/264/346/226/260/350/256/260/345/275/225.md +14 -0
  175. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20203_/350/260/203/345/272/246/347/233/270/345/205/263/345/272/224/347/224/250/345/214/205.md +15 -0
  176. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20204_/351/205/215/347/275/256/351/241/271/347/233/270/345/205/263.md +23 -0
  177. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20205_/350/260/203/345/272/246/345/212/237/350/203/275/344/275/277/347/224/250.md +132 -0
  178. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20206_/350/260/203/345/272/246/344/273/273/345/212/241_API_/346/216/245/345/217/243.md +14 -0
  179. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-10-/345/256/232/346/227/266/350/260/203/345/272/246-/347/253/240/350/212/20207_/345/257/271/345/244/226/350/260/203/345/272/246/344/273/273/345/212/241_API_/346/216/245/345/217/243.md +245 -0
  180. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-11-/351/205/215/347/275/256/351/241/271-00_/346/200/273/350/247/210.md +49 -0
  181. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-11-/351/205/215/347/275/256/351/241/271-/347/253/240/350/212/20201_/345/272/224/347/224/250/351/205/215/347/275/256/351/241/271/347/233/270/345/205/263.md +28 -0
  182. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-11-/351/205/215/347/275/256/351/241/271-/347/253/240/350/212/20202_/351/205/215/347/275/256/344/270/255/345/277/203/351/205/215/347/275/256/351/241/271/350/257/264/346/230/216.md +876 -0
  183. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-11-/351/205/215/347/275/256/351/241/271-/347/253/240/350/212/20203_/351/205/215/347/275/256/351/241/271/347/232/204/344/275/277/347/224/250.md +45 -0
  184. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-00_/346/200/273/350/247/210.md +56 -0
  185. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-/347/253/240/350/212/20201_/346/266/210/346/201/257/344/270/255/345/277/203/344/275/277/347/224/250/345/234/272/346/231/257.md +12 -0
  186. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-/347/253/240/350/212/20202_/346/266/210/346/201/257/344/270/255/345/277/203/351/241/265/351/235/242/345/212/237/350/203/275/344/275/277/347/224/250.md +396 -0
  187. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-/347/253/240/350/212/20203_/346/266/210/346/201/257/344/270/255/345/277/203/346/216/245/345/217/243/345/212/237/350/203/275/344/275/277/347/224/250.md +578 -0
  188. package/skills/meritdata-dev-docs-file-finder/references/dev-docs//346/224/273/347/225/245-12-/346/266/210/346/201/257/344/270/255/345/277/203-/347/253/240/350/212/20204_/351/231/204/357/274/232/351/231/204/344/273/266/344/270/212/344/274/240/344/270/213/350/275/275/345/210/240/351/231/244/346/216/245/345/217/243.md +183 -0
  189. package/skills/meritdata-dev-docs-file-finder/references/keywords.md +153 -0
  190. package/skills/meritdata-dev-docs-file-finder/references/scenarios.md +313 -0
  191. package/skills/meritdata-nacos-importer/SKILL.md +37 -0
  192. package/skills/meritdata-nacos-importer/references/gray-publish.md +216 -0
  193. package/skills/meritdata-nacos-importer/references/guide.md +203 -0
  194. package/skills/meritdata-nacos-importer/references/yaml-spec.md +296 -0
  195. package/skills/meritdata-platform-2nd-dev-check/SKILL.md +38 -0
  196. package/skills/meritdata-platform-2nd-dev-check/references/ci-integration.md +307 -0
  197. package/skills/meritdata-platform-2nd-dev-check/references/guide.md +227 -0
  198. package/skills/meritdata-platform-2nd-dev-check/references/rules-checklist.md +250 -0
  199. package/skills/meritdata-platform-backend-deploy/SKILL.md +45 -0
  200. package/skills/meritdata-platform-backend-deploy/references/guide.md +255 -0
  201. package/skills/meritdata-platform-backend-deploy/references/health-monitor-log.md +325 -0
  202. package/skills/meritdata-platform-backend-deploy/references/release-strategies.md +256 -0
  203. package/skills/meritdata-platform-bpm/SKILL.md +39 -0
  204. package/skills/meritdata-platform-bpm/references/bpm-/346/224/273/347/225/245/INDEX.md +140 -0
  205. package/skills/meritdata-platform-bpm/references/guide.md +204 -0
  206. package/skills/meritdata-platform-bpm/references/status-mapping.md +36 -0
  207. package/skills/meritdata-platform-cache/SKILL.md +42 -0
  208. package/skills/meritdata-platform-cache/references/distributed-lock.md +199 -0
  209. package/skills/meritdata-platform-cache/references/guide.md +141 -0
  210. package/skills/meritdata-platform-cache/references/key-design.md +167 -0
  211. package/skills/meritdata-platform-cache/references/resilience.md +181 -0
  212. package/skills/meritdata-platform-cloud-dev/SKILL.md +81 -0
  213. package/skills/meritdata-platform-cloud-dev/references/modules-mapping.md +162 -0
  214. package/skills/meritdata-platform-cloud-dev/references/scenario-contract.md +75 -0
  215. package/skills/meritdata-platform-cloud-dev/references/skill-suite.json +52 -0
  216. package/skills/meritdata-platform-cloud-dev/references/skill-suite.schema.json +23 -0
  217. package/skills/meritdata-platform-code-review/SKILL.md +42 -0
  218. package/skills/meritdata-platform-code-review/references/guide.md +173 -0
  219. package/skills/meritdata-platform-code-review/references/performance.md +263 -0
  220. package/skills/meritdata-platform-code-review/references/security.md +278 -0
  221. package/skills/meritdata-platform-code-spec/SKILL.md +36 -0
  222. package/skills/meritdata-platform-code-spec/references/anti-patterns.md +533 -0
  223. package/skills/meritdata-platform-code-spec/references/validate-rules.md +321 -0
  224. package/skills/meritdata-platform-data-access/SKILL.md +131 -0
  225. package/skills/meritdata-platform-data-access/references/datasource.md +239 -0
  226. package/skills/meritdata-platform-data-access/references/inbound/adapter-pattern.md +431 -0
  227. package/skills/meritdata-platform-data-access/references/inbound/canonical-payload.md +313 -0
  228. package/skills/meritdata-platform-data-access/references/inbound/reconciliation.md +352 -0
  229. package/skills/meritdata-platform-data-access/references/inbound/sync-contracts.md +225 -0
  230. package/skills/meritdata-platform-data-access/references/inbound/xml-security.md +411 -0
  231. package/skills/meritdata-platform-data-access/references/outbound/batch-assembly.md +251 -0
  232. package/skills/meritdata-platform-data-access/references/outbound/dto-catalog.md +120 -0
  233. package/skills/meritdata-platform-data-access/references/outbound/dto-converter.md +211 -0
  234. package/skills/meritdata-platform-data-access/references/outbound/feign-guide.md +229 -0
  235. package/skills/meritdata-platform-data-access/references/outbound/querydsl-guide.md +177 -0
  236. package/skills/meritdata-platform-data-access/references/outbound/same-jvm-detection.md +157 -0
  237. package/skills/meritdata-platform-data-access/references/outbound/service-catalog.md +232 -0
  238. package/skills/meritdata-platform-data-access/references/outbound/third-party.md +278 -0
  239. package/skills/meritdata-platform-data-access/references/outbound/usage-patterns.md +257 -0
  240. package/skills/meritdata-platform-data-access/references/outbound/webapi.md +392 -0
  241. package/skills/meritdata-platform-data-access-review/SKILL.md +42 -0
  242. package/skills/meritdata-platform-data-access-review/references/anti-patterns.md +287 -0
  243. package/skills/meritdata-platform-data-access-review/references/ci-scan.md +225 -0
  244. package/skills/meritdata-platform-data-access-review/references/guide.md +228 -0
  245. package/skills/meritdata-platform-data-boundary/SKILL.md +41 -0
  246. package/skills/meritdata-platform-data-boundary/references/anti-patterns.md +519 -0
  247. package/skills/meritdata-platform-data-boundary/references/cloud-tables.md +32 -0
  248. package/skills/meritdata-platform-data-boundary/references/same-jvm.md +52 -0
  249. package/skills/meritdata-platform-data-boundary/references/validate-rules.md +341 -0
  250. package/skills/meritdata-platform-data-classification/SKILL.md +42 -0
  251. package/skills/meritdata-platform-data-classification/references/guide.md +179 -0
  252. package/skills/meritdata-platform-data-classification/references/hibernate-filter.md +255 -0
  253. package/skills/meritdata-platform-data-classification/references/integration-with-dam.md +206 -0
  254. package/skills/meritdata-platform-data-classification/references/masking.md +214 -0
  255. package/skills/meritdata-platform-domain-model/SKILL.md +41 -0
  256. package/skills/meritdata-platform-domain-model/references/anti-patterns.md +538 -0
  257. package/skills/meritdata-platform-domain-model/references/relationship-patterns.md +112 -0
  258. package/skills/meritdata-platform-domain-model/references/review-checklist.md +39 -0
  259. package/skills/meritdata-platform-domain-model/references/validate-rules.md +305 -0
  260. package/skills/meritdata-platform-file/SKILL.md +100 -0
  261. package/skills/meritdata-platform-file/references/acceptance.md +393 -0
  262. package/skills/meritdata-platform-file/references/api-contracts.md +392 -0
  263. package/skills/meritdata-platform-file/references/examples.md +421 -0
  264. package/skills/meritdata-platform-file/references/lifecycle.md +345 -0
  265. package/skills/meritdata-platform-file/references/security.md +423 -0
  266. package/skills/meritdata-platform-frontend/SKILL.md +45 -0
  267. package/skills/meritdata-platform-frontend/references/auth-and-api.md +300 -0
  268. package/skills/meritdata-platform-frontend/references/components.md +284 -0
  269. package/skills/meritdata-platform-frontend/references/http-client/INDEX.md +85 -0
  270. package/skills/meritdata-platform-frontend/references/http-client/acceptance.md +348 -0
  271. package/skills/meritdata-platform-frontend/references/http-client/gateway-paths.md +281 -0
  272. package/skills/meritdata-platform-frontend/references/http-client/http-plugin.md +293 -0
  273. package/skills/meritdata-platform-frontend/references/http-client/service-registry.md +281 -0
  274. package/skills/meritdata-platform-frontend/references/project-structure.md +318 -0
  275. package/skills/meritdata-platform-frontend-deploy/SKILL.md +45 -0
  276. package/skills/meritdata-platform-frontend-deploy/references/cdn-https-cache.md +222 -0
  277. package/skills/meritdata-platform-frontend-deploy/references/gray-and-rollback.md +236 -0
  278. package/skills/meritdata-platform-frontend-deploy/references/guide.md +199 -0
  279. package/skills/meritdata-platform-impexp/SKILL.md +41 -0
  280. package/skills/meritdata-platform-impexp/references/async-and-validate.md +353 -0
  281. package/skills/meritdata-platform-impexp/references/excel-guide.md +326 -0
  282. package/skills/meritdata-platform-impexp/references/scenarios.md +248 -0
  283. package/skills/meritdata-platform-job/SKILL.md +41 -0
  284. package/skills/meritdata-platform-job/references/idempotency.md +203 -0
  285. package/skills/meritdata-platform-job/references/scenarios.md +317 -0
  286. package/skills/meritdata-platform-job/references/scheduling-/346/224/273/347/225/245/INDEX.md +60 -0
  287. package/skills/meritdata-platform-job/references/xxl-job-guide.md +286 -0
  288. package/skills/meritdata-platform-lookup-api/SKILL.md +42 -0
  289. package/skills/meritdata-platform-lookup-api/references/cache-strategy.md +199 -0
  290. package/skills/meritdata-platform-lookup-api/references/guide.md +179 -0
  291. package/skills/meritdata-platform-lookup-api/references/tree-and-i18n.md +198 -0
  292. package/skills/meritdata-platform-menu-config/SKILL.md +42 -0
  293. package/skills/meritdata-platform-menu-config/references/guide.md +164 -0
  294. package/skills/meritdata-platform-menu-config/references/i18n-and-cache.md +180 -0
  295. package/skills/meritdata-platform-menu-config/references/role-and-tree.md +170 -0
  296. package/skills/meritdata-platform-menu-resource/SKILL.md +42 -0
  297. package/skills/meritdata-platform-menu-resource/references/auth-and-path.md +166 -0
  298. package/skills/meritdata-platform-menu-resource/references/guide.md +156 -0
  299. package/skills/meritdata-platform-menu-resource/references/scan-and-cache.md +197 -0
  300. package/skills/meritdata-platform-message-center/SKILL.md +42 -0
  301. package/skills/meritdata-platform-message-center/references/channels.md +222 -0
  302. package/skills/meritdata-platform-message-center/references/guide.md +151 -0
  303. package/skills/meritdata-platform-message-center/references/message-/346/224/273/347/225/245/INDEX.md +55 -0
  304. package/skills/meritdata-platform-message-center/references/reliability.md +208 -0
  305. package/skills/meritdata-platform-nacos-config/SKILL.md +44 -0
  306. package/skills/meritdata-platform-nacos-config/references/config-item-/346/224/273/347/225/245/INDEX.md +53 -0
  307. package/skills/meritdata-platform-nacos-config/references/configuration-properties.md +295 -0
  308. package/skills/meritdata-platform-nacos-config/references/dynamic-refresh.md +156 -0
  309. package/skills/meritdata-platform-nacos-config/references/encryption.md +182 -0
  310. package/skills/meritdata-platform-nacos-config/references/env-and-gray.md +178 -0
  311. package/skills/meritdata-platform-nacos-config/references/guide.md +127 -0
  312. package/skills/meritdata-platform-operation-log/SKILL.md +42 -0
  313. package/skills/meritdata-platform-operation-log/references/guide.md +175 -0
  314. package/skills/meritdata-platform-operation-log/references/query-and-export.md +218 -0
  315. package/skills/meritdata-platform-operation-log/references/sensitive-and-async.md +176 -0
  316. package/skills/meritdata-platform-org-user-api/SKILL.md +42 -0
  317. package/skills/meritdata-platform-org-user-api/references/guide.md +230 -0
  318. package/skills/meritdata-platform-org-user-api/references/masterdata-sync-/346/224/273/347/225/245/INDEX.md +64 -0
  319. package/skills/meritdata-platform-org-user-api/references/soft-delete-pitfalls.md +200 -0
  320. package/skills/meritdata-platform-org-user-api/references/tree-and-picker.md +176 -0
  321. package/skills/meritdata-platform-permission/SKILL.md +42 -0
  322. package/skills/meritdata-platform-permission/references/button-and-data.md +198 -0
  323. package/skills/meritdata-platform-permission/references/custom-rule.md +207 -0
  324. package/skills/meritdata-platform-permission/references/guide.md +196 -0
  325. package/skills/meritdata-platform-platform-config/SKILL.md +43 -0
  326. package/skills/meritdata-platform-platform-config/references/basic-config-api.md +221 -0
  327. package/skills/meritdata-platform-platform-config/references/cache-and-persist.md +234 -0
  328. package/skills/meritdata-platform-platform-config/references/guide.md +225 -0
  329. package/skills/meritdata-platform-platform-config/references/multi-tenant-and-audit.md +254 -0
  330. package/skills/meritdata-platform-playbook/SKILL.md +44 -0
  331. package/skills/meritdata-platform-playbook/references/flows.md +186 -0
  332. package/skills/meritdata-platform-playbook/references/intent-routing.md +180 -0
  333. package/skills/meritdata-platform-session/SKILL.md +42 -0
  334. package/skills/meritdata-platform-session/references/guide.md +157 -0
  335. package/skills/meritdata-platform-session/references/multi-device.md +149 -0
  336. package/skills/meritdata-platform-session/references/online-monitor.md +195 -0
  337. package/skills/meritdata-platform-sm-crypto/SKILL.md +41 -0
  338. package/skills/meritdata-platform-sm-crypto/references/guide.md +144 -0
  339. package/skills/meritdata-platform-sm-crypto/references/key-management.md +177 -0
  340. package/skills/meritdata-platform-sm-crypto/references/migration.md +181 -0
  341. package/skills/meritdata-platform-sso/SKILL.md +41 -0
  342. package/skills/meritdata-platform-sso/references/filter-config.md +391 -0
  343. package/skills/meritdata-platform-sso/references/oauth-providers.md +290 -0
  344. package/skills/meritdata-platform-sso/references/sso-guide.md +319 -0
  345. package/skills/meritdata-platform-test-case/SKILL.md +43 -0
  346. package/skills/meritdata-platform-test-case/references/guide.md +290 -0
  347. package/skills/meritdata-platform-test-case/references/integration-test.md +352 -0
  348. package/skills/meritdata-platform-test-case/references/unit-test.md +330 -0
  349. package/skills/meritdata-platform-ui-components/SKILL.md +43 -0
  350. package/skills/meritdata-platform-ui-components/references/business-wrappers.md +233 -0
  351. package/skills/meritdata-platform-ui-components/references/guide.md +199 -0
  352. package/skills/meritdata-platform-ui-components/references/theme-and-i18n.md +226 -0
  353. package/tools/skill-authoring-workflow/README.md +260 -0
  354. package/tools/skill-authoring-workflow/templates/SKILL-template.md +35 -0
  355. package/tools/skill-authoring-workflow/templates/references-template.md +59 -0
  356. package/tools/skill-stocktake/README.md +121 -0
  357. package/tools/skill-stocktake/run.sh +153 -0
  358. package/tools/skill-vetter/README.md +119 -0
  359. package/tools/skill-vetter/run.sh +294 -0
@@ -0,0 +1,2429 @@
1
+ ---
2
+ title: 应用开发平台流程管理使用攻略(二):工作流程应用开发
3
+ date: 2025.05.27
4
+ categories:
5
+ - 开发攻略
6
+ - 6.13.2
7
+ ---
8
+
9
+ # 应用开发平台流程管理使用攻略(二):工作流程应用开发
10
+
11
+ 查看应用开发平台系统运行环境是否正常;环境搭建参考《应用开发平台使用攻略(一):系统环境搭建》
12
+
13
+ ## 样例说明
14
+
15
+ - <b>案例:</b> 差旅费报销功能的开发案例
16
+
17
+ - <b>场景说明</b>
18
+
19
+ - 员工填写差旅费报销单,包括出差地,出差时间,出差费用等,将差旅费报销单提交给部门领导。
20
+ - 部门领导审批,如果审批结束(批准或者不批准),流程结束。如果需要员工修改申请,退回去给员工进行修改。
21
+
22
+ - <b>流程应用后端工程:</b>business-bpm-demo
23
+
24
+ - 功能简介:
25
+ - 1.根据条件查找差旅费
26
+ - 2.删除差旅费
27
+ - 3.修改差旅费
28
+ - 4.保存差旅费
29
+
30
+ - <b>流程应用前端工程:</b>business-bpm-expense
31
+
32
+ - 功能简介:
33
+ - 1.引入流程按钮
34
+ - 2.查看差旅费表单界面
35
+ - 3.编辑/新增差旅费表单界面
36
+
37
+ - <b>参考文档</b>
38
+ 《二次开发--流程接口》
39
+
40
+ **以下为手动搭建方案,另一种方案直接利用代码生成工具生成流程前后端应用,具体生成指导见代码生成工具文档**。
41
+
42
+ ## 1. 后端工程创建
43
+
44
+ ### 1.1 操作场景
45
+
46
+ 使用 IntelliJ IDEA 新建一个 Maven 工程;按照工程创建操作步骤,生成后端工程;修改相关配置信息;加载依赖包,启动工程,nacos 中查看。
47
+
48
+ ### 1.2 操作步骤
49
+
50
+ 根据《应用开发平台使用攻略(一):系统环境搭建》 的后端工程创建,进行后端工程搭建。
51
+
52
+ 创建 business-bpm-demo 工程应用
53
+
54
+ 生成的目录结构如下图所示:
55
+
56
+ ![](./imgs/流程应用开发/1-6.jpg)
57
+
58
+ ## 2. 后端工程配置
59
+
60
+ ### 2.1 修改 pom.xml 文件
61
+
62
+ 引入流程 jar 包,${cloud-system-bpm.version}、${cloud-starter-core.version}、${cloud-starter-dbinit.version}、${cloud-system-bpm-module-core.version}版本信息根据需要自适配。
63
+
64
+ ```xml
65
+ <parent>
66
+ <artifactId>cloud-system-bpm</artifactId>
67
+ <groupId>com.meritdata.cloud</groupId>
68
+ <version>${cloud-system-bpm.version}</version>
69
+ </parent>
70
+ ```
71
+
72
+ 完整配置信息如下:
73
+
74
+ ```xml
75
+ <?xml version="1.0" encoding="UTF-8"?>
76
+ <project xmlns="http://maven.apache.org/POM/4.0.0"
77
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
78
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
79
+ <parent>
80
+ <artifactId>cloud-system-bpm</artifactId>
81
+ <groupId>com.meritdata.cloud</groupId>
82
+ <version>${cloud-system-bpm.version}</version>
83
+ </parent>
84
+ <modelVersion>4.0.0</modelVersion>
85
+
86
+ <artifactId>business-bpm-demo</artifactId>
87
+
88
+ <dependencies>
89
+ <dependency>
90
+ <groupId>com.meritdata.cloud</groupId>
91
+ <artifactId>cloud-starter-core</artifactId>
92
+ <version>${cloud-starter-core.version}</version>
93
+ </dependency>
94
+ <dependency>
95
+ <groupId>com.meritdata.cloud</groupId>
96
+ <artifactId>cloud-starter-dbinit</artifactId>
97
+ <version>${cloud-starter-dbinit.version}</version>
98
+ </dependency>
99
+ <dependency>
100
+ <groupId>org.springframework.boot</groupId>
101
+ <artifactId>spring-boot-devtools</artifactId>
102
+ <optional>true</optional>
103
+ </dependency>
104
+ <dependency>
105
+ <groupId>com.meritdata.cloud</groupId>
106
+ <artifactId>cloud-system-bpm-module-core</artifactId>
107
+ <version>${cloud-system-bpm-module-core.version}</version>
108
+ </dependency>
109
+ <!--QueryDSL支持-->
110
+ <dependency>
111
+ <groupId>com.querydsl</groupId>
112
+ <artifactId>querydsl-apt</artifactId>
113
+ <scope>provided</scope>
114
+ <exclusions>
115
+ <exclusion>
116
+ <groupId>org.javassist</groupId>
117
+ <artifactId>javassist</artifactId>
118
+ </exclusion>
119
+ </exclusions>
120
+ </dependency>
121
+ <!--QueryDSL支持-->
122
+ <dependency>
123
+ <groupId>com.querydsl</groupId>
124
+ <artifactId>querydsl-jpa</artifactId>
125
+ </dependency>
126
+ <dependency>
127
+ <groupId>org.projectlombok</groupId>
128
+ <artifactId>lombok</artifactId>
129
+ <version>1.16.10</version>
130
+ <scope>provided</scope>
131
+ </dependency>
132
+ </dependencies>
133
+ <build>
134
+ <!--使配置文件可以直接读取pom中的系统参数 -->
135
+ <resources>
136
+ <resource>
137
+ <directory>src/main/resources</directory>
138
+ <filtering>true</filtering>
139
+ </resource>
140
+ </resources>
141
+ <plugins>
142
+ <plugin>
143
+ <groupId>org.springframework.boot</groupId>
144
+ <artifactId>spring-boot-maven-plugin</artifactId>
145
+ <configuration>
146
+ <!--fork : 如果没有该项配置,肯定devtools不会起作用,即应用不会restart -->
147
+ <fork>true</fork>
148
+ </configuration>
149
+ </plugin>
150
+ <plugin>
151
+ <groupId>net.alchim31.maven</groupId>
152
+ <artifactId>yuicompressor-maven-plugin</artifactId>
153
+ <version>1.3.0</version>
154
+ <executions>
155
+ <execution>
156
+ <phase>prepare-package</phase>
157
+ <goals>
158
+ <goal>compress</goal>
159
+ </goals>
160
+ </execution>
161
+ </executions>
162
+ <configuration>
163
+ <encoding>UTF-8</encoding>
164
+ <jswarn>false</jswarn>
165
+ <nosuffix>true</nosuffix>
166
+ <linebreakpos>-1</linebreakpos>
167
+ <force>true</force>
168
+ <includes>
169
+ <include>**/*.css</include>
170
+ <include>**/*.js</include>
171
+ </includes>
172
+ </configuration>
173
+ </plugin>
174
+ <!-- css、js文件打包后添加版本号插件 -->
175
+ <plugin>
176
+ <groupId>com.google.code.maven-replacer-plugin</groupId>
177
+ <artifactId>replacer</artifactId>
178
+ <version>1.5.3</version>
179
+ <executions>
180
+ <execution>
181
+ <phase>prepare-package</phase>
182
+ <goals>
183
+ <goal>replace</goal>
184
+ </goals>
185
+ </execution>
186
+ </executions>
187
+ <configuration>
188
+ <basedir>${build.directory}</basedir>
189
+ <includes>
190
+ <include>**/*.ftl</include>
191
+ </includes>
192
+ <replacements>
193
+ <replacement>
194
+ <token>\.css\"</token>
195
+ <value>.css?v=${maven.build.timestamp}\"</value>
196
+ </replacement>
197
+ <replacement>
198
+ <token>\.css\'</token>
199
+ <value>.css?v=${maven.build.timestamp}\'</value>
200
+ </replacement>
201
+ <replacement>
202
+ <token>\.js\"</token>
203
+ <value>.js?v=${maven.build.timestamp}\"</value>
204
+ </replacement>
205
+ <replacement>
206
+ <token>\.js\'</token>
207
+ <value>.js?v=${maven.build.timestamp}\'</value>
208
+ </replacement>
209
+ </replacements>
210
+ </configuration>
211
+ </plugin>
212
+ <!--因为是类型安全的,所以还需要加上Maven APT plugin,使用 APT 自动生成一些类:-->
213
+ <plugin>
214
+ <groupId>com.mysema.maven</groupId>
215
+ <artifactId>apt-maven-plugin</artifactId>
216
+ <version>1.1.3</version>
217
+ <executions>
218
+ <execution>
219
+ <phase>generate-sources</phase>
220
+ <goals>
221
+ <goal>process</goal>
222
+ </goals>
223
+ <configuration>
224
+ <outputDirectory>target/generated-sources</outputDirectory>
225
+ <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
226
+ </configuration>
227
+ </execution>
228
+ </executions>
229
+ </plugin>
230
+ </plugins>
231
+ </build>
232
+ </project>
233
+ ```
234
+
235
+ ### 2.2 修改 bootstrap.properties 文件
236
+
237
+ 在 src 目录->resources 目录-> bootstrap.properties 文件
238
+
239
+ 修改 server.port = 8099
240
+ 防止端口冲突
241
+
242
+ 完整配置信息如下:
243
+
244
+ ```properties
245
+ #启动端口
246
+ server.port=8099
247
+ #nacos的启动地址,在nacos的启动日志中查看
248
+ meritdata.cloud.nacos-addr=127.0.0.1:8848
249
+ spring.cloud.nacos.config.server-addr=${meritdata.cloud.nacos-addr}
250
+ spring.cloud.nacos.discovery.server-addr=${meritdata.cloud.nacos-addr}
251
+ #程序加载的配置文件
252
+ #服务启动的时候会读取 prefix.properties 和 prefix-profiles.properties 文件下的配置项
253
+ spring.profiles.include=server,cache,freemarker,datasource,sentinel,oauth2,cloud-system-cas,@project.artifactId@
254
+ spring.cloud.nacos.config.prefix=common
255
+ #nacos 创建的namespace的标识码
256
+ #spring.cloud.nacos.config.namespace=b62f9c4c-ab77-4de6-b6c5-8e8b8c45f79a
257
+ #nacos的配置的命名空间,默认为空
258
+ spring.cloud.nacos.config.namespace=
259
+ #系统的程序名,在创建工程的时候确定,挂载到nacos中的名称
260
+ spring.application.name=@project.artifactId@
261
+ meritdata.cloud.product-name=cloud-system-framework
262
+ spring.main.allow-bean-definition-overriding=true
263
+ #日志文件最长保存添加
264
+ logfile-max-history=30
265
+ #应用日志级别
266
+ logging-level=info
267
+ ```
268
+
269
+ ## 3. 后端工程业务类创建
270
+
271
+ - 点击 com.meritdata.cloud ——>鼠标右键——> 点击 New ——> 选择 Package
272
+ ![](./imgs/流程应用开发/1-31.jpg)
273
+ 在"New Package"界面 分别创建 controller,entity,repository,service 包
274
+ ![](./imgs/流程应用开发/1-9.jpg)
275
+
276
+ - 添加完包后,按照下图创建对应的 java 文件,
277
+ 点击包名 ——>鼠标右键 ——>点击 New ——> 选择 java class
278
+ ![](./imgs/流程应用开发/1-10.jpg)
279
+
280
+ ### 3.1 实体类
281
+
282
+ | 类名 | 类型 | 父类 | 说明 |
283
+ | ------------- | ----- | ----------------------- | --------------------------------------------------------------------------------------------- |
284
+ | TravelExpense | class | 继承 CloudBaseEntity 类 | CloudBaseEntity 属于系统基础实体类,维护多租户标识 添加创建时间,更新时间,作者和更新人员信息 |
285
+
286
+ 完整代码如下:
287
+
288
+ ```java
289
+ package com.meritdata.cloud.entity;
290
+ import com.meritdata.cloud.base.entity.CloudBaseEntity;
291
+ import lombok.Data;
292
+ import org.hibernate.annotations.GenericGenerator;
293
+ import javax.persistence.*;
294
+ /**
295
+ * 出差费用报价单
296
+ */
297
+ @Entity
298
+ @Data
299
+ @Table(name = "pf_bpm_travel_expense")
300
+ @GenericGenerator(name = "jpa-uuid", strategy = "uuid")
301
+ public class TravelExpense extends CloudBaseEntity {
302
+
303
+ @Id
304
+ @GeneratedValue(generator = "jpa-uuid")
305
+ @Column(name = "[ID]")
306
+ private String id;
307
+
308
+ /**
309
+ * 标题
310
+ */
311
+ @Column(name = "[PROJECT]")
312
+ private String project;
313
+
314
+ /**
315
+ * 所属部门
316
+ */
317
+ @Column(name = "[BELONG_DEPART]")
318
+ private String belongDepart;
319
+
320
+ /**
321
+ * 申请人
322
+ */
323
+ @Column(name = "[NAME]")
324
+ private String name;
325
+
326
+ /**
327
+ * 出差类型 0.项目支持,1.售前支撑
328
+ */
329
+ @Column(name = "[TYPE]")
330
+ private String type;
331
+
332
+ /**
333
+ * 金额
334
+ */
335
+ @Column(name = "[AMOUNT]")
336
+ private Double amount;
337
+
338
+ /**
339
+ * 出差目的地
340
+ */
341
+ @Column(name = "[DESTINATION]")
342
+ private String destination;
343
+
344
+ /**
345
+ * 出差事由
346
+ */
347
+ @Column(name = "[TRAVEL_REMARK]")
348
+ private String travel_remark;
349
+
350
+ /**
351
+ * 出差时间
352
+ */
353
+ @Column(name = "[TRAVEL_TIME]")
354
+ private Long travel_time;
355
+ }
356
+
357
+ ```
358
+
359
+ ### 3.2 持久层
360
+
361
+ 系统持久层框架使用 JPA+QueryDsl。JPA 主要负责数据库的新增、修改、删除。QueryDsl 主要负责对数据库的查询操作。
362
+ | 类名 | 类型 | 父类 | 说明|
363
+ | ------------- | ----- | ----------------------- |-----|
364
+ | TravelExpenseRepository | interface | 分别继承 JpaRepository 类,QuerydslPredicateExecutor 类 | JpaRepository 提供了默认的保存查找等方法,QuerydslPredicateExecutor 接口是为了使用 QueryDsl|
365
+
366
+ JpaRepository 的使用和 QueryDsl 的使用
367
+ 查看《二次开发:业务应用》 附件 1
368
+
369
+ 完整代码如下:
370
+
371
+ ```java
372
+ package com.meritdata.cloud.repository;
373
+
374
+ import com.meritdata.cloud.entity.TravelExpense;
375
+ import org.springframework.data.jpa.repository.JpaRepository;
376
+ import org.springframework.data.querydsl.QuerydslPredicateExecutor;
377
+
378
+ /**
379
+ * 查看单表
380
+ */
381
+ public interface TravelExpenseRepository extends JpaRepository<TravelExpense, String>, QuerydslPredicateExecutor<TravelExpense> {
382
+
383
+ }
384
+ ```
385
+
386
+ ### 3.3 服务层
387
+
388
+ #### 3.3.1 服务层接口
389
+
390
+ | 类名 | 类型 |
391
+ | --------------------- | --------- |
392
+ | ITravelExpenseService | interface |
393
+
394
+ 完整代码如下:
395
+
396
+ ```java
397
+ package com.meritdata.cloud.service;
398
+ import com.meritdata.cloud.base.mvc.entity.GridView;
399
+ import com.meritdata.cloud.entity.TravelExpense;
400
+ import javax.validation.constraints.NotNull;
401
+ import java.util.List;
402
+ import java.util.Map;
403
+
404
+ public interface ITravelExpenseService {
405
+
406
+ /**
407
+ * 保存差旅费
408
+ * @return
409
+ */
410
+ TravelExpense saveTravelExpense(TravelExpense travelExpense);
411
+
412
+ /**
413
+ * 修改差旅费
414
+ */
415
+ TravelExpense updateTravelExpense(TravelExpense travelExpense);
416
+
417
+
418
+ /**
419
+ * 删除多条差旅费
420
+ * @param exampleIds
421
+ * @return
422
+ */
423
+ boolean deleteByIds(List<String> exampleIds);
424
+
425
+ /**
426
+ * 根据id查看单条
427
+ * @param id
428
+ * @return
429
+ */
430
+ TravelExpense getTravelExpense(String id);
431
+
432
+ /**
433
+ * page分页查询
434
+ * @param procDefKey
435
+ * @param bpmStatus
436
+ * @param pageSize
437
+ * @param pageNumber
438
+ * @param nextStartResults
439
+ * @param type
440
+ * @return
441
+ */
442
+ Object pageTravelExpense(@NotNull String procDefKey, @NotNull String bpmStatus, int pageSize, long pageNumber, Long nextStartResults, String type);
443
+ //理想化查询
444
+ GridView<Map> pageTravelExpenseIdeal(String procDefKey, String bpmStatus, Integer pageSize, Long pageNumber);
445
+ }
446
+
447
+ ```
448
+
449
+ #### 3.3.2 服务层实现
450
+
451
+ | 类名 | 类型 | 父类 |
452
+ | ----------------- | ----- | ----------------------------- |
453
+ | TravelExpenseImpl | class | 实现 ITravelExpenseService 类 |
454
+
455
+ 完整代码如下:
456
+
457
+ ```java
458
+ package com.meritdata.cloud.service.impl;
459
+
460
+ import com.alibaba.fastjson.JSON;
461
+ import com.google.common.collect.Lists;
462
+ import com.meritdata.cloud.base.mvc.entity.GridView;
463
+ import com.meritdata.cloud.bpm.base.dto.MainFormQueryDTO;
464
+ import com.meritdata.cloud.bpm.core.BpmEngine;
465
+ import com.meritdata.cloud.entity.QTravelExpense;
466
+ import com.meritdata.cloud.entity.TravelExpense;
467
+ import com.meritdata.cloud.repository.TravelExpenseRepository;
468
+ import com.meritdata.cloud.resultmodel.ResultBody;
469
+ import com.meritdata.cloud.service.ITravelExpenseService;
470
+ import com.querydsl.core.types.ExpressionUtils;
471
+ import com.querydsl.core.types.Predicate;
472
+ import com.querydsl.jpa.impl.JPAQueryFactory;
473
+ import org.apache.commons.collections.CollectionUtils;
474
+ import org.apache.commons.lang3.StringUtils;
475
+ import org.springframework.beans.factory.annotation.Autowired;
476
+ import org.springframework.stereotype.Service;
477
+ import org.springframework.transaction.annotation.Transactional;
478
+
479
+ import java.beans.IntrospectionException;
480
+ import java.beans.PropertyDescriptor;
481
+ import java.lang.reflect.Field;
482
+ import java.lang.reflect.InvocationTargetException;
483
+ import java.lang.reflect.Method;
484
+ import java.util.*;
485
+ import java.util.stream.Collectors;
486
+
487
+ @Service
488
+ @Transactional
489
+ public class TravelExpenseImpl implements ITravelExpenseService {
490
+
491
+ @Autowired
492
+ JPAQueryFactory jpaQueryFactory;
493
+
494
+ @Autowired
495
+ TravelExpenseRepository travelExpenseDao;
496
+
497
+ //引入流程
498
+ @Autowired
499
+ BpmEngine bpmEngine ;
500
+
501
+ /**
502
+ *
503
+ * @param procDefKey
504
+ * @param bpmStatus
505
+ * @param pageSize
506
+ * @param pageNumber
507
+ * @param nextStartResults
508
+ * @param type
509
+ * @return
510
+ */
511
+ @Override
512
+ public Object pageTravelExpense( String procDefKey, String bpmStatus, int pageSize, long pageNumber, Long nextStartResults, String type) {
513
+
514
+ //流程代码
515
+ MainFormQueryDTO formQuery = new MainFormQueryDTO();
516
+ formQuery.setBpmStatus(bpmStatus); //流程状态
517
+ formQuery.setOrderFields(Lists.newArrayList(formQuery.new Field(MainFormQueryDTO.SORT_BY_UPDATE_TIME, true)));
518
+
519
+ //业务代码 ideal理想化查询
520
+ if ("ideal".equals(type)) {
521
+ return this.getIdealProcExample(procDefKey, formQuery, pageSize, pageNumber);
522
+ }
523
+ return new GridView<>();
524
+ }
525
+
526
+
527
+ @Override
528
+ public GridView<Map> pageTravelExpenseIdeal(String procDefKey, String bpmStatus, Integer pageSize, Long pageNumber) {
529
+ MainFormQueryDTO formQuery = new MainFormQueryDTO();
530
+ formQuery.setBpmStatus(bpmStatus);
531
+ formQuery.setOrderFields(Lists.newArrayList(formQuery.new Field(MainFormQueryDTO.SORT_BY_UPDATE_TIME, true)));
532
+ return getIdealProcExample(procDefKey, formQuery, pageSize, pageNumber);
533
+
534
+ }
535
+
536
+ @Override
537
+ public TravelExpense saveTravelExpense(TravelExpense travelExpense) {
538
+ return travelExpenseDao.save(travelExpense);
539
+ }
540
+
541
+ @Override
542
+ public TravelExpense updateTravelExpense(TravelExpense travelExpense) {
543
+ return travelExpenseDao.save(travelExpense) ;
544
+ }
545
+
546
+
547
+ @Override
548
+ public boolean deleteByIds(List<String> travelIds) {
549
+ QTravelExpense travelExpense = QTravelExpense.travelExpense;
550
+ Predicate predicate = travelExpense.id.in(travelIds);
551
+ Iterable<TravelExpense> all = travelExpenseDao.findAll(predicate);
552
+ return this.deleteList(all);
553
+ }
554
+
555
+ @Override
556
+ public TravelExpense getTravelExpense(String id) {
557
+ TravelExpense exampleById = travelExpenseDao.findById(id).get();
558
+ return exampleById;
559
+ }
560
+
561
+ /**
562
+ *理想化查询
563
+ * @param procDefKey 流程key
564
+ * @param formQueryDTO dto
565
+ * @param pageSize
566
+ * @param pageNumber
567
+ * @return
568
+ */
569
+ public GridView<Map> getIdealProcExample(String procDefKey, MainFormQueryDTO formQueryDTO, long pageSize, long pageNumber) {
570
+
571
+ long nextStrartIdx =(pageNumber -1) * pageSize;
572
+ nextStrartIdx = nextStrartIdx < 0 ? 0:nextStrartIdx;
573
+ long total = 0;
574
+ // 流程实例获取 根据流程key和流程状态
575
+ ResultBody<GridView> resultBody = bpmEngine.queryMainForms(JSON.toJSONString(formQueryDTO), procDefKey, nextStrartIdx, pageSize);
576
+ List<Map> mainForms = new ArrayList<>();
577
+ if(null != resultBody && resultBody.isSuccess() && null != resultBody.getData()) {
578
+ List<Map> rows = resultBody.getData().getRows();
579
+ if (CollectionUtils.isNotEmpty(rows)) {
580
+ mainForms.addAll(rows);
581
+ }
582
+ total = resultBody.getData().getTotal();
583
+ }
584
+
585
+ // 获取流程中的businessId(业务Id)
586
+ Map<String, Map> mainFormMap = new HashMap<String, Map>();
587
+ List<String> businessIdAll = new ArrayList<>();
588
+ for (Map map: mainForms) {
589
+ Object businessIdObj = map.get("businessId"); //获取到其中的业务id
590
+ if (null != businessIdObj && StringUtils.isNotBlank(businessIdObj.toString())) {
591
+ String businessId = businessIdObj.toString();
592
+ businessIdAll.add(businessId);
593
+ mainFormMap.put(businessId,map);
594
+ }
595
+ }
596
+ //根据获取的业务id 查询业务数据
597
+ List<Map> result = null;
598
+ QTravelExpense travelExpense = QTravelExpense.travelExpense;
599
+ Predicate predicate = null;
600
+ predicate = ExpressionUtils.and(predicate,travelExpense.id.in(businessIdAll));
601
+ result = jpaQueryFactory.select(travelExpense)
602
+ .from(travelExpense)
603
+ .where(predicate)
604
+ .orderBy(travelExpense.updateTime.desc())
605
+ .fetch()
606
+ .stream()
607
+ .map(item ->{
608
+ return this.covertMainFormToMap(mainFormMap,item);
609
+ }).collect(Collectors.toList());
610
+
611
+
612
+ return new GridView<>(result,total);
613
+ }
614
+ //获取流程中未处理人,处理状态,处理节点
615
+ private Map covertMainFormToMap(Map<String, Map> mainFormMap, TravelExpense item) {
616
+ Field[] fields=item.getClass().getDeclaredFields();
617
+ Map map = new HashMap();
618
+ for (Field field : fields) {
619
+ try {
620
+ PropertyDescriptor pd =new PropertyDescriptor(field.getName(),item.getClass());
621
+ Method method = pd.getReadMethod();
622
+ map.put(field.getName(),method.invoke(item));
623
+ } catch (IntrospectionException | IllegalAccessException | InvocationTargetException e) {
624
+ }
625
+ }
626
+ Map mainform = mainFormMap.get(item.getId());
627
+ if (null != mainform) {
628
+ map.put("flowAuthorNames", mainform.get("flowAuthorNames"));
629
+ map.put("flowReaderIds", mainform.get("flowReaderIds"));
630
+ map.put("nodeNames", mainform.get("nodeNames"));
631
+ map.put("procDealStatus", mainform.get("procDealStatus"));
632
+ }
633
+ return map;
634
+ }
635
+
636
+ // 根据流程实例Ids删除流程实例
637
+ private boolean deleteList(Iterable<TravelExpense> all) {
638
+ if (null != all) {
639
+ Iterator<TravelExpense> iterator = all.iterator();
640
+ List<String> businessIds = new ArrayList<>();
641
+ while (iterator.hasNext()) {
642
+ String businessId = iterator.next().getId();
643
+ businessIds.add(businessId);
644
+ }
645
+ if (CollectionUtils.isNotEmpty(businessIds)) {
646
+ // 流程代码
647
+ ResultBody<Boolean> resultBody = bpmEngine.deleteProcInsts(businessIds);
648
+ if (null != resultBody && resultBody.isSuccess() && resultBody.getData()) {
649
+ // 业务代码
650
+ travelExpenseDao.deleteAll(all);
651
+ return true;
652
+ }
653
+ }
654
+ }
655
+ return false;
656
+ }
657
+ }
658
+ ```
659
+
660
+ 注意:添加完 TravelExpenseImpl 类中代码后,编译工程,maven->compile
661
+ ![image](./imgs/流程应用开发/1-48.jpg)
662
+
663
+ ### 3.4 控制层
664
+
665
+ | 类名 | 类型 |
666
+ | ----------------------- | ----- |
667
+ | TravelExpenseController | class |
668
+
669
+ 完整代码如下:
670
+
671
+ ```java
672
+ package com.meritdata.cloud.controller;
673
+
674
+ import cn.hutool.core.util.StrUtil;
675
+ import com.meritdata.cloud.base.mvc.entity.GridView;
676
+ import com.meritdata.cloud.bpm.base.utils.StringUtils;
677
+ import com.meritdata.cloud.entity.TravelExpense;
678
+ import com.meritdata.cloud.resultmodel.ResultBody;
679
+ import com.meritdata.cloud.service.ITravelExpenseService;
680
+ import io.swagger.annotations.Api;
681
+ import io.swagger.annotations.ApiOperation;
682
+ import io.swagger.annotations.ApiParam;
683
+ import org.springframework.beans.factory.annotation.Autowired;
684
+ import org.springframework.web.bind.annotation.*;
685
+
686
+ import java.util.*;
687
+
688
+ /**
689
+ * 差旅费报销流程
690
+ */
691
+ @RestController
692
+ @RequestMapping(value = "/api/travel-expense")
693
+ @Api(value = "TravelExpenseController}", tags = "")
694
+ public class TravelExpenseController {
695
+
696
+ @Autowired
697
+ private ITravelExpenseService travelExpenseService;
698
+
699
+ /**
700
+ * 修改
701
+ */
702
+ @PostMapping("/update")
703
+ @ApiOperation(value = "修改")
704
+ public ResultBody<TravelExpense> update(@RequestParam TravelExpense travelExpense) {
705
+ TravelExpense result = null;
706
+ try {
707
+ result = travelExpenseService.updateTravelExpense(travelExpense);
708
+ } catch (Exception e) {
709
+ e.printStackTrace();
710
+ return ResultBody.failure(e.getMessage());
711
+ }
712
+ return ResultBody.success(result);
713
+ }
714
+
715
+ /**
716
+ * 新增
717
+ */
718
+ @PostMapping("/save")
719
+ @ApiOperation(value = "新增")
720
+ public ResultBody<TravelExpense> save(TravelExpense travelExpense) {
721
+ TravelExpense result = null;
722
+ try {
723
+ result = travelExpenseService.saveTravelExpense(travelExpense);
724
+ } catch (Exception e) {
725
+ e.printStackTrace();
726
+ return ResultBody.failure(e.getMessage());
727
+ }
728
+
729
+ return ResultBody.success(result);
730
+ }
731
+
732
+
733
+ /**
734
+ * 批量删除
735
+ */
736
+ @PostMapping("/delete")
737
+ @ApiOperation(value = "批量删除")
738
+ public ResultBody<Boolean> remove(String ids) {
739
+ List<String> idList = Arrays.asList(StrUtil.split(ids, ","));
740
+ boolean result;
741
+ try {
742
+ result = travelExpenseService.deleteByIds(idList);
743
+ } catch (Exception e) {
744
+ e.printStackTrace();
745
+ return ResultBody.failure(e.getMessage());
746
+ }
747
+
748
+ return ResultBody.success(result);
749
+ }
750
+
751
+ /**
752
+ * 获取单个差旅费流程
753
+ *
754
+ * @param id
755
+ * @return
756
+ */
757
+ @PostMapping("/get-travel-expense")
758
+ @ApiOperation(value = "获取单个差旅费流程")
759
+ public ResultBody<TravelExpense> getTravelExpense(String id) {
760
+ TravelExpense travelExpense = new TravelExpense();
761
+ try {
762
+ if (!"".equals(id)) {
763
+ travelExpense = travelExpenseService.getTravelExpense(id);
764
+ }
765
+ } catch (Exception e) {
766
+ e.printStackTrace();
767
+ return ResultBody.failure(e.getMessage());
768
+ }
769
+ return ResultBody.success(travelExpense);
770
+ }
771
+
772
+ /**
773
+ * 理想化查询
774
+ *
775
+ * @param procDefKey
776
+ * @param bpmStatus
777
+ * @param pageSize
778
+ * @param pageNumber
779
+ * @return
780
+ */
781
+ @RequestMapping(value = "/page/ideal", method = RequestMethod.POST)
782
+ public @ResponseBody
783
+ ResultBody<GridView<Map>>
784
+ pageProcExampleIdeal(@RequestParam(name = "procDefKey") String procDefKey,
785
+ @RequestParam(name = "bpmStatus") String bpmStatus,
786
+ @RequestParam(name = "pageSize", required = false, defaultValue = "10") Integer pageSize,
787
+ @RequestParam(name = "pageNumber", required = false, defaultValue = "1") Long pageNumber) {
788
+ GridView<Map> gridView = travelExpenseService.pageTravelExpenseIdeal(procDefKey, bpmStatus, pageSize, pageNumber);
789
+ return ResultBody.success(gridView);
790
+ }
791
+
792
+ }
793
+ ```
794
+
795
+ ## 4. 启动后端应用工程
796
+
797
+ ### 4.1 启动后端工程服务
798
+
799
+ 配置启动 key 文件
800
+ ![](./imgs/流程应用开发/1-44.jpg)
801
+ 在 VM options 中配置 key 文件,key 文件在 merit_cloud 文件夹下的 key 文件夹下
802
+
803
+ ```
804
+ -DCLOUD_HOME= key路径
805
+ ```
806
+
807
+ 本案例中 key 路径为:C:/work/soft/run/merit_cloud
808
+
809
+ 再添加认证参数和允许循环依赖
810
+
811
+ -Dmeritdata.cloud.authentication-server-url=${CLOUD_HOME}/key
812
+ -Dspring.main.allow-circular-references=true
813
+
814
+ 如下图所示:
815
+
816
+ ![image-20220614093829639](.\imgs\流程应用开发\image-20220614093829639.png)
817
+
818
+ ![](./imgs/流程应用开发/1-43.jpg)
819
+
820
+ 启动后端应用
821
+ 选择 CloudBaseDemoProjectApplication,右键,选择 Run "CloudBaseDemoProjectApplication"
822
+ ![](./imgs/流程应用开发/1-11.jpg)
823
+ 启动成功
824
+ ![](./imgs/流程应用开发/1-12.jpg)
825
+
826
+ ### 4.2 检查后端工程服务
827
+
828
+ 查看后端工程服务是否注册到 Nacos 中。
829
+ nacos 地址:
830
+ url:http://localhost:8848/nacos/#/serviceManagement?dataId=&group=&appName=&namespace=
831
+ 账号:admin
832
+ 密码:BigData.2018v6
833
+
834
+ ![](./imgs/流程应用开发/1-13.jpg)
835
+
836
+ ## 5. 流程应用前端开发
837
+
838
+ ### 5.1 前置条件
839
+
840
+ 根据《应用开发平台使用攻略(一):系统环境搭建》 的前端工程创建,进行前端工程搭建。
841
+
842
+ 创建 business-bpm-expense 工程应用
843
+
844
+ ### 5.2 前端工程配置
845
+
846
+ #### 5.2.1 删除文件
847
+
848
+ 下图:是根据《应用开发平台使用攻略(一):系统环境搭建》 的前端工程创建,所创建的 business-bpm-expense 工程应用
849
+
850
+ ![image](./imgs/流程应用开发/1-35.jpg)
851
+
852
+ - 删除的文件如下:
853
+ - 1.删除 node_modules 文件夹
854
+ - 2.删除 src 文件夹下面的所有内容
855
+ - 3.删除.browserslistrc 文件
856
+ - 4.删除.eslintrc 文件
857
+ - 5.删除 package-lock.json 文件
858
+ 注意:为避免出现不知名的错误,所以删除这些文件;在删除时,根据以上内容,没有找到某个文件,可以忽略此文件
859
+
860
+ 删除后的目录结构:
861
+
862
+ ![image](./imgs/流程应用开发/1-36.jpg)
863
+
864
+ #### 5.2.2 修改 package.json 文件
865
+
866
+ 说明:
867
+ package.json 文件是对项目或者模块包的描述,里面包含许多元信息,比如项目名称,项目版本,项目执行入口文件等。
868
+
869
+ 分别替换 package.json 文件中"dependencies" 和 "devDependencies" 内容
870
+ 添加:"eslintConfig" 和 "browserslist"
871
+ "dependencies"表示:生产环境下,项目运行所需依赖
872
+ "devDependencies"表示:开发环境下,项目所需依赖
873
+
874
+ ```json
875
+ {
876
+ "name": "business-bpm-expense",
877
+ "version": "0.1.0",
878
+ "private": true,
879
+ "scripts": {
880
+ "serve": "vue-cli-service serve",
881
+ "build": "vue-cli-service build",
882
+ "lint": "vue-cli-service lint"
883
+ },
884
+ "dependencies": {
885
+ "axios": "0.19.0",
886
+ "babel-loader": "^8.0.6",
887
+ "babel-plugin-transform-remove-strict-mode": "0.0.2",
888
+ "bpmn-js": "^6.4.0",
889
+ "cloud-module-bpm": "6.9.0",
890
+ "codemirror": "^5.52.2",
891
+ "core-js": "^3.4.4",
892
+ "css-loader": "^3.4.1",
893
+ "element-ui": "^2.13.2",
894
+ "less": "^3.10.3",
895
+ "less-loader": "^5.0.0",
896
+ "moment": "^2.24.0",
897
+ "qs": "^6.9.1",
898
+ "vue": "^2.6.10",
899
+ "vue-axios": "^2.1.5",
900
+ "vue-i18n": "^8.15.3",
901
+ "vue-router": "^3.1.3",
902
+ "vuex": "^3.1.2",
903
+ "webpack": "^4.41.5",
904
+ "webpack-chain": "^6.3.0"
905
+ },
906
+ "devDependencies": {
907
+ "@vue/cli-plugin-babel": "^4.1.0",
908
+ "@vue/cli-plugin-eslint": "^4.1.0",
909
+ "@vue/cli-service": "^4.1.0",
910
+ "babel-eslint": "^10.0.3",
911
+ "eslint": "^5.16.0",
912
+ "eslint-plugin-vue": "^5.0.0",
913
+ "vue-template-compiler": "^2.6.10"
914
+ },
915
+ "eslintConfig": {
916
+ "root": true,
917
+ "env": {
918
+ "node": true
919
+ },
920
+ "extends": ["plugin:vue/essential", "eslint:recommended"],
921
+ "rules": {
922
+ "no-console": "off",
923
+ "no-": "off",
924
+ "no-undef": "off"
925
+ },
926
+ "parserOptions": {
927
+ "parser": "babel-eslint"
928
+ }
929
+ },
930
+ "browserslist": ["> 1%", "last 2 versions"]
931
+ }
932
+ ```
933
+
934
+ ### 5.3 安装依赖
935
+
936
+ 打开终端 : Ctrl+Shift+`
937
+
938
+ ![image](./imgs/流程应用开发/1-37.jpg)
939
+
940
+ 在终端输入:npm install 命令, 按 "Enter" 执行命令
941
+
942
+ ![image](./imgs/流程应用开发/1-38.jpg)
943
+
944
+ 注意:在项目根目录下执行 npm install
945
+
946
+ nmp 命令
947
+
948
+ ```shell
949
+ npm install
950
+ ```
951
+
952
+ 安装成功后如下图:
953
+ ![image](./imgs/流程应用开发/1-39.jpg)
954
+
955
+ 安装 cloud-module-bpm
956
+
957
+ 平台组将流程的工具类进行封装至 cloud-module-bpm 插件,安装插件如果是公网环境需要将 npm 仓库切换至美林 npm 私服后进行插件的安装
958
+
959
+ ```shell
960
+ // 只有公网开发执行下面命令
961
+ npm config set registry http://123.139.156.125:8088/nexus/content/groups/npm-group/
962
+
963
+
964
+ npm install cloud-module-bpm@6.13.2
965
+ ```
966
+
967
+ ### 5.4 前端工程创建
968
+
969
+ 需要创建目录结构如下
970
+
971
+ - src
972
+ - components
973
+ - common-header.vue
974
+ - no-access.vue
975
+ - httpConfig
976
+ - http.js
977
+ - pages
978
+ - expense
979
+ - i18n
980
+ - langs
981
+ - en_US.js
982
+ - index.js
983
+ - zh_CN.js
984
+ - i18n.js
985
+ - view
986
+ - form-edit.vue
987
+ - form-read.vue
988
+ - Grid.vue
989
+ - App.vue
990
+ - Index.vue
991
+ - main.js
992
+ - router.js
993
+ - vue.config.js
994
+
995
+ | 文件名 | 文件说明 |
996
+ | ------------- | --------------------------------------------------------- |
997
+ | httpConfig | http 配置文件目录 |
998
+ | i18n | 国际化配置目录 |
999
+ | view | 业务表单目录包括(form-edit.vue/form-read.vue/Grid.vue) |
1000
+ | main.js | 引入相关依赖,注入到 vue 全局和服务访问路径 |
1001
+ | router.js | 路由跳转。配置跳转界面 |
1002
+ | vue.config.js | 程序编译打包信息配置 多页面管理、编译路径、后端代理配置等 |
1003
+
1004
+ 完整的目录结构如下:
1005
+ ![](./imgs/流程应用开发/1-32.jpg)
1006
+
1007
+ ### 5.5 业务代码
1008
+
1009
+ 包含以下目录的完整代码
1010
+
1011
+ - src
1012
+ - components
1013
+ - common-header.vue
1014
+ - no-access.vue
1015
+ - httpConfig
1016
+ - http.js
1017
+ - pages
1018
+ - expense
1019
+ - i18n
1020
+ - langs
1021
+ - en_US.js
1022
+ - index.js
1023
+ - zh_CN.js
1024
+ - i18n.js
1025
+ - view
1026
+ - form-edit.vue
1027
+ - form-read.vue
1028
+ - Grid.vue
1029
+ - App.vue
1030
+ - Index.vue
1031
+ - main.js
1032
+ - router.js
1033
+ - vue.config.js
1034
+
1035
+ #### 5.5.1 main.js 文件
1036
+
1037
+ - main.js 中引入流程引擎
1038
+
1039
+ ```
1040
+ import base from 'cloud-module-base';
1041
+ import bpm from 'cloud-module-bpm';
1042
+
1043
+ Vue.use(base);
1044
+ Vue.use(bpm);
1045
+ ```
1046
+
1047
+ - main.js 完整代码如下:
1048
+
1049
+ ```js
1050
+ import Vue from 'vue';
1051
+ import ElementUI from 'element-ui'; // 引入element-ui
1052
+ import i18n from './i18n/i18n'; // 引入国际化
1053
+ import 'cloud-module-base/static/theme/default/index.css';
1054
+ import 'cloud-module-base/static/theme/default/tempo.css';
1055
+ import App from './App.vue'; // 引入首页
1056
+ import router from './router'; // 引入路由
1057
+ import axios from '@/httpConfig/http'; // 引入http配置
1058
+ import VueAxios from 'vue-axios'; // 引入 axios
1059
+ import base from 'cloud-module-base'; // 引入基础的cloud-module-base相关依赖
1060
+ import bpm from 'cloud-module-bpm'; // 引入流程相关依赖
1061
+ // 使用Vue.use 加载到全局
1062
+ Vue.use(ElementUI);
1063
+ Vue.use(VueAxios, axios);
1064
+ Vue.use(base);
1065
+ Vue.use(bpm);
1066
+ Vue.prototype.HOST = '/api/travel-expense'; //服务访问路径
1067
+ Vue.prototype.EventBus = new Vue();
1068
+ new Vue({
1069
+ router,
1070
+ i18n,
1071
+ render: h => h(App)
1072
+ }).$mount('#app');
1073
+ ```
1074
+
1075
+ #### 5.5.2 Index.vue 文件
1076
+
1077
+ - 主页面 Index.vue 完整代码如下:
1078
+
1079
+ ```html
1080
+ <template>
1081
+ <el-container class="el-root-container">
1082
+ <el-header height="50px">
1083
+ <v-header></v-header>
1084
+ </el-header>
1085
+ <el-container class="el-main-container">
1086
+ <v-grid />
1087
+ </el-container>
1088
+ </el-container>
1089
+ </template>
1090
+ <script>
1091
+ import grid from './view/Grid';
1092
+ import header from '@/components/common-header';
1093
+ export default {
1094
+ data() {
1095
+ return {
1096
+ isCollapse: false,
1097
+ containerStyle: {
1098
+ height: '100%'
1099
+ }
1100
+ };
1101
+ },
1102
+ components: {
1103
+ 'v-grid': grid,
1104
+ 'v-header': header
1105
+ },
1106
+ created() {
1107
+ this.containerStyle.height = window.innerHeight - 30 + 'px';
1108
+ },
1109
+ mounted() {},
1110
+ methods: {}
1111
+ };
1112
+ </script>
1113
+ <style scoped>
1114
+ .el-aside {
1115
+ width: 250px !important;
1116
+ }
1117
+ </style>
1118
+ ```
1119
+
1120
+ #### 5.5.3 router.js 文件
1121
+
1122
+ router.js 完整代码如下:
1123
+
1124
+ - 说明
1125
+ 路由的跳转,跳转界面配置
1126
+
1127
+ ```js
1128
+ import Vue from 'vue';
1129
+ import Router from 'vue-router';
1130
+ import Index from './Index.vue';
1131
+ import FormEdit from './view/form-edit';
1132
+ import FormRead from './view/form-read';
1133
+ Vue.use(Router);
1134
+ //路由
1135
+ export default new Router({
1136
+ routes: [
1137
+ {
1138
+ path: '/',
1139
+ name: 'Index',
1140
+ component: Index,
1141
+ meta: {
1142
+ keepAlive: true, // 需要缓存
1143
+ savedPosition: 0,
1144
+ title: 'exp.travlExpenselManagement'
1145
+ }
1146
+ },
1147
+ {
1148
+ path: '/formEdit',
1149
+ name: 'formEdit',
1150
+ component: FormEdit
1151
+ },
1152
+ {
1153
+ path: '/formRead',
1154
+ name: 'formRead',
1155
+ component: FormRead
1156
+ }
1157
+ ]
1158
+ });
1159
+ ```
1160
+
1161
+ #### 5.5.4 App.vue 文件
1162
+
1163
+ 完整代码如下:
1164
+
1165
+ ```html
1166
+ <template>
1167
+ <div id="app">
1168
+ <keep-alive>
1169
+ <router-view v-if="$route.meta.keepAlive"></router-view>
1170
+ </keep-alive>
1171
+ <router-view v-if="!$route.meta.keepAlive"></router-view>
1172
+ </div>
1173
+ </template>
1174
+ <script>
1175
+ export default {
1176
+ name: 'App'
1177
+ };
1178
+ </script>
1179
+ <style lang="less">
1180
+ html,
1181
+ body {
1182
+ height: 100%;
1183
+ }
1184
+ </style>
1185
+ ```
1186
+
1187
+ #### 5.5.5 i18n 文件夹
1188
+
1189
+ 说明:
1190
+ 在 il8n->langs->en_US.js 和 zh_CN.js 中修改 impot 路径为
1191
+ 目的是加载流程相关的 zh_CN.js 和 en_US.js
1192
+
1193
+ ```js
1194
+ 在zh_CN.js中;
1195
+ import zh_CNLocale from 'cloud-module-bpm/packages/i18n/langs/zh_CN';
1196
+ 在en_US.js中;
1197
+ import en_USLocale from 'cloud-module-bpm/packages/i18n/langs/en_US';
1198
+ ```
1199
+
1200
+ - en_US.js 文件
1201
+
1202
+ il8n 目录->langs 目录->en_US.js
1203
+
1204
+ 完整代码如下:
1205
+
1206
+ ```js
1207
+ import en_USLocale from 'cloud-module-bpm/packages/i18n/langs/en_US';
1208
+ const en = {
1209
+ exp: {
1210
+ id: 'id',
1211
+ project: 'title',
1212
+ name: 'name',
1213
+ flowAuthorNames: 'Outstanding pepople',
1214
+ procDealStatus: 'Processing state',
1215
+ nodeNames: 'Processing nodes',
1216
+ belong_depart: 'Subordinate departments',
1217
+
1218
+ type: 'Type',
1219
+ amount: 'Amount',
1220
+ destination: 'Destination',
1221
+ travel_time: 'Travel Time',
1222
+ travel_remark: 'Travel Reason',
1223
+
1224
+ enter_the_amout: 'Enter the amout',
1225
+
1226
+ travlExpenselManagement: 'TravlExpenselManagement'
1227
+ },
1228
+ select: {
1229
+ selectOpinion: 'Please select a',
1230
+ IdealizedQuery: 'Idealized Query',
1231
+ pageQuery: 'Page Query'
1232
+ },
1233
+ statusColor: {
1234
+ draft: 'warning',
1235
+ track: '',
1236
+ over: 'success'
1237
+ },
1238
+ status: {
1239
+ draft: 'draft',
1240
+ track: 'tracking',
1241
+ over: 'over'
1242
+ },
1243
+ comm: {
1244
+ message_info_delete: 'delete',
1245
+ message_error_delete: 'Delete failed',
1246
+ messagee_success_delete: 'Delete the success',
1247
+ tooltip: 'tooltip',
1248
+ del: 'are you sure delete ?',
1249
+ message_action: 'please select at last one action!',
1250
+ confirm: 'confirm',
1251
+ cancel: 'cancel'
1252
+ },
1253
+ ...en_USLocale
1254
+ };
1255
+ export default en;
1256
+ ```
1257
+
1258
+ - zh_CN.js 文件
1259
+
1260
+ il8n 目录->langs 目录->zh_CN.js
1261
+
1262
+ 完整代码如下:
1263
+
1264
+ ```js
1265
+ import zh_CNLocale from 'cloud-module-bpm/packages/i18n/langs/zh_CN';
1266
+ const zh_CN = {
1267
+ exp: {
1268
+ id: '编号',
1269
+ project: '标题',
1270
+ name: '姓名',
1271
+ flowAuthorNames: '未处理人',
1272
+ procDealStatus: '处理状态',
1273
+ nodeNames: '处理节点',
1274
+ belong_depart: '所属部门',
1275
+
1276
+ type: '出差类型',
1277
+ amount: '金额',
1278
+ destination: '出差目的地',
1279
+ startTime: '开始时间',
1280
+ endTime: '结束时间',
1281
+ travel_remark: '出差事由',
1282
+ travel_time: '出差时间',
1283
+ remark: '出差事由',
1284
+ enter_the_amout: '输入金额',
1285
+ travlExpenselManagement: '差旅费管理'
1286
+ },
1287
+ status: {
1288
+ draft: '草稿',
1289
+ track: '跟踪',
1290
+ over: '办结'
1291
+ },
1292
+ statusColor: {
1293
+ draft: 'warning',
1294
+ track: '',
1295
+ over: 'success'
1296
+ },
1297
+ select: {
1298
+ selectOpinion: '请选择',
1299
+ IdealizedQuery: '理想化查询'
1300
+ },
1301
+ apiType: {
1302
+ ideal: {
1303
+ name: '理想化查询',
1304
+ explain: '不含其他查询条件下的查询,每次按照分页条件,服务间只做有效数据查询.'
1305
+ }
1306
+ },
1307
+ comm: {
1308
+ message_info_delete: '取消删除',
1309
+ message_error_delete: '删除失败',
1310
+ messagee_success_delete: '删除成功',
1311
+ tooltip: '提示',
1312
+ del: '确定删除吗?',
1313
+ message_action: '请至少选择一条记录进行操作!',
1314
+ confirm: '确认',
1315
+ cancel: '取消'
1316
+ },
1317
+ ...zh_CNLocale
1318
+ };
1319
+ export default zh_CN;
1320
+ ```
1321
+
1322
+ - langs->index.js 完整代码如下:
1323
+ ```js
1324
+ import en_US from './en_US';
1325
+ import zh_CN from './zh_CN';
1326
+ export default {
1327
+ zh: zh_CN,
1328
+ en: en_US
1329
+ };
1330
+ ```
1331
+ - i18n.js 完整代码如下:
1332
+
1333
+ ```js
1334
+ import Vue from 'vue';
1335
+ import locale from 'element-ui/lib/locale'; //elementUI的国际化
1336
+ import VueI18n from 'vue-i18n';
1337
+ import messages from './langs';
1338
+ Vue.use(VueI18n);
1339
+ const i18n = new VueI18n({
1340
+ //从localStorage中取,没有就默认的中文
1341
+ locale: window.localStorage.getItem('qinLang') || 'zh',
1342
+ messages
1343
+ });
1344
+ locale.i18n((key, value) => i18n.t(key, value)); //elementui多语言切换
1345
+
1346
+ export default i18n;
1347
+ ```
1348
+
1349
+ #### 5.5.6 httpConfig 文件夹
1350
+
1351
+ 说明:
1352
+ 该文件夹主要配置了 http 请求相关配置
1353
+
1354
+ - http.js 文件
1355
+
1356
+ 设置请求后端应用的相关配置,get(),post()请求
1357
+ 以下配置了访问 2 个后端应用的 get().post() 请求
1358
+ business-bpm-demo 和 cloud-system-manage 后端应用
1359
+
1360
+ 完整代码如下:
1361
+
1362
+ ```js
1363
+ import Axios from 'cloud-module-base/packages/httpConfig/http-plugin';
1364
+ const appPath = {
1365
+ 'cloud-system-bpm-travel': '/business-bpm-demo',
1366
+ 'system-manager': '/cloud-system-manage'
1367
+ };
1368
+ export default {
1369
+ 'cloud-system-bpm-travel': {
1370
+ post: (url, params) => {
1371
+ return Axios.post('/gateway' + appPath['cloud-system-bpm-travel'] + url, params).then(res => res);
1372
+ },
1373
+ get: (url, params) => {
1374
+ return Axios.get('/gateway' + appPath['cloud-system-bpm-travel'] + url, {
1375
+ params: params
1376
+ }).then(res => res);
1377
+ }
1378
+ },
1379
+ 'system-manager': {
1380
+ post: (url, params) => {
1381
+ return Axios.post('/gateway' + appPath['system-manager'] + url, params).then(res => res);
1382
+ },
1383
+ get: (url, params) => {
1384
+ return Axios.get('/gateway' + appPath['system-manager'] + url, {
1385
+ params: params
1386
+ }).then(res => res);
1387
+ }
1388
+ }
1389
+ };
1390
+ ```
1391
+
1392
+ #### 5.5.7 components 文件夹
1393
+
1394
+ - common-header.vue
1395
+
1396
+ 完整代码如下:
1397
+
1398
+ ```html
1399
+ <template>
1400
+ <el-breadcrumb separator="/">
1401
+ <el-breadcrumb-item v-for="item in routerItems" :key="item.path" :to="{ path: item.path }"
1402
+ >{{ $t(item.meta.title) }}</el-breadcrumb-item
1403
+ >
1404
+ </el-breadcrumb>
1405
+ </template>
1406
+
1407
+ <script>
1408
+ export default {
1409
+ data() {
1410
+ return {
1411
+ routerItems: []
1412
+ };
1413
+ },
1414
+ props: {
1415
+ modelName: {
1416
+ type: String,
1417
+ required: false
1418
+ }
1419
+ },
1420
+ computed: {},
1421
+ watch: {
1422
+ $route() {
1423
+ this.getBreadcrumb();
1424
+ }
1425
+ },
1426
+ methods: {
1427
+ getBreadcrumb() {
1428
+ let matched = this.$route.matched.filter(item => item.name);
1429
+ const first = matched[0];
1430
+ if (first && first.name.trim().toLocaleLowerCase() !== 'index'.toLocaleLowerCase()) {
1431
+ matched = [
1432
+ {
1433
+ path: '/',
1434
+ meta: {
1435
+ title: this.modelName !== undefined ? this.modelName : '首页'
1436
+ }
1437
+ }
1438
+ ].concat(matched);
1439
+ }
1440
+ this.routerItems = matched;
1441
+ }
1442
+ },
1443
+ created() {
1444
+ this.getBreadcrumb();
1445
+ }
1446
+ };
1447
+ </script>
1448
+ <style scoped>
1449
+ .el-breadcrumb {
1450
+ width: 100%;
1451
+ height: 100%;
1452
+ line-height: 50px;
1453
+ text-align: start;
1454
+ cursor: pointer;
1455
+ }
1456
+ .logInfo {
1457
+ top: 0px;
1458
+ position: relative;
1459
+ display: inline;
1460
+ }
1461
+ .tempo-api-right-menu-login-icon {
1462
+ display: inline-block;
1463
+ background-position: 0px -33px;
1464
+ margin-right: 20px;
1465
+ margin-top: 18px;
1466
+ width: 24px;
1467
+ height: 25px;
1468
+ margin-left: 10px;
1469
+ }
1470
+ .el-popover {
1471
+ padding: 0px;
1472
+ }
1473
+ </style>
1474
+ ```
1475
+
1476
+ - no-access.vue
1477
+
1478
+ 完整代码如下:
1479
+
1480
+ ```html
1481
+ <template>
1482
+ <div class="context">
1483
+ <img src="../assets/images/not_found.png" />
1484
+ <h2><font color="#DB1260">无访问权限!</font></h2>
1485
+ </div>
1486
+ </template>
1487
+ ```
1488
+
1489
+ #### 5.5.8 vue.config.js 文件
1490
+
1491
+ vue.config.js 完整代码如下:
1492
+
1493
+ - 说明
1494
+ 程序编译打包信息配置、多页面管理、编译路径、后端代理配置等
1495
+
1496
+ ```js
1497
+ var path = require('path');
1498
+ const resolve = function(dir) {
1499
+ return path.join(__dirname, dir);
1500
+ };
1501
+ module.exports = {
1502
+ pages: {
1503
+ //流程
1504
+ expense: {
1505
+ entry: 'src/pages/expense/main.js',
1506
+ template: '/bpm/expense/view',
1507
+ filename: 'expense/index.html'
1508
+ }
1509
+
1510
+ // template 默认会去找 public/subpage.html 页面,如果找不到会使用 public/index.html 文件
1511
+ // 输出文件会默认的推断为 subpage.html
1512
+ //subpage: 'src/subpage/main.js'
1513
+ },
1514
+ publicPath: '/bpm-expense/',
1515
+ //打包输出路径
1516
+ outputDir: 'bpm-expense',
1517
+ lintOnSave: false,
1518
+ //后端代理服务器
1519
+ devServer: {
1520
+ proxy: {
1521
+ '/gateway/': {
1522
+ target: 'http://localhost:8081',
1523
+ changeOrigin: true,
1524
+ pathRewrite: {
1525
+ '^/gateway/': ''
1526
+ }
1527
+ }
1528
+ }
1529
+ },
1530
+ chainWebpack: config => {
1531
+ config.module
1532
+ .rule('compile')
1533
+ .test(/\.js$/)
1534
+ .include.add(resolve('src'))
1535
+ .add(resolve('node_modules/cloud-module-base/packages'))
1536
+ .add(resolve('node_modules/cloud-module-base/static'))
1537
+ .add(resolve('node_modules/cloud-module-bpm/packages'))
1538
+ .end()
1539
+ .use('babel')
1540
+ .loader('babel-loader')
1541
+ .options({
1542
+ presets: [
1543
+ [
1544
+ '@babel/preset-env',
1545
+ {
1546
+ modules: false
1547
+ }
1548
+ ]
1549
+ ]
1550
+ });
1551
+ }
1552
+ };
1553
+ ```
1554
+
1555
+ #### 5.5.9 view 文件夹
1556
+
1557
+ - Grid.vue
1558
+
1559
+ 说明:
1560
+ 引入 bpm-grid-buttons 流程新建,查询按钮
1561
+
1562
+ ```html
1563
+ <bpm-grid-buttons :procDefKey="procDefKey" :isShowButton="true" @bpm-query="queryExample" @bpm-delete="deleteRow"></bpm-grid-buttons>
1564
+ ```
1565
+
1566
+ | 名称 | 说明 |
1567
+ | ------------------- | --------------------------------------------------------- |
1568
+ | procDefKey | 流程 key |
1569
+ | queryExample | 查询方法 |
1570
+ | deleteRow | 删除方法 |
1571
+ | isShowButton | 是否显示:我的工作,所有工作 true 显示 false 不显示 |
1572
+ | isDisabledAddButton | 是否禁用新建按钮, true 禁用,false 不禁用 |
1573
+
1574
+
1575
+ 效果图如下:
1576
+ ![image](./imgs/流程应用开发/1-40.jpg)
1577
+
1578
+
1579
+ 另外一种:
1580
+
1581
+ ```vue
1582
+ <bpm-grid-buttons-new :procDefKey="procDefKey" :isShowButton="false" @bpm-query="queryExample" @bpm-delete="deleteRow"></bpm-grid-buttons-new>
1583
+ ```
1584
+
1585
+ | 名称 | 说明 |
1586
+ | ------------------- | ------------------------------------------------------------ |
1587
+ | procDefKey | 流程 key |
1588
+ | queryExample | 查询方法 |
1589
+ | deleteRow | 删除方法 |
1590
+ | isShowButton | 是否显示:我的工作,所有工作,我的审批按钮 true 显示 false 不显示 |
1591
+ | isDisabledAddButton | 是否禁用新建按钮, true 禁用,false 不禁用 |
1592
+
1593
+ ![image-20211211095441659](./imgs/流程应用开发/image-20211211095441659.png)
1594
+
1595
+
1596
+
1597
+
1598
+
1599
+ 不显示效果:
1600
+
1601
+ ![image-20211211100147754](./imgs/流程应用开发/image-20211211100147754.png)
1602
+
1603
+ 引入可以调用流程的方法的工具
1604
+
1605
+ ```js
1606
+ import { MeritBPM } from 'cloud-module-bpm/packages/utils/merit-bpm';
1607
+ export default {
1608
+ data() {
1609
+ return {
1610
+ MeritBPM
1611
+ };
1612
+ }
1613
+ };
1614
+ ```
1615
+
1616
+ 使用 MeritBPM.open()方法打开流程
1617
+
1618
+ Grid.vue 完整代码如下:
1619
+
1620
+ ```html
1621
+ <template>
1622
+ <el-container>
1623
+ <el-main style="padding: 8px 12px;height:auto">
1624
+ <el-row justify="space-between" type="flex" style="margin-bottom: 10px;">
1625
+ <el-col :span="7">
1626
+ <bpm-grid-buttons :procDefKey="procDefKey" @bpm-query="queryExample" @bpm-delete="deleteRow"></bpm-grid-buttons>
1627
+ </el-col>
1628
+
1629
+ <div class="tooltipI">
1630
+ <el-tooltip placement="bottom">
1631
+ <div slot="content" v-for="typeEnum in queryTypeEnums" :key="typeEnum" style="margin-top: 8px;">
1632
+ {{ typeEnum }} : {{ $t(typeEnumLabel(typeEnum, "name")) }}
1633
+ <br />
1634
+ {{ $t(typeEnumLabel(typeEnum, "explain")) }}
1635
+ <br />
1636
+ </div>
1637
+ <i class="el-icon-question"></i>
1638
+ </el-tooltip>
1639
+ </div>
1640
+ <el-col :span="7">
1641
+ <el-input class="input-with-select" size="mini" v-model="keyword">
1642
+ <el-select v-model="queryType" slot="prepend" style="width: 125px" :placeholder="$t('select.selectOpinion')">
1643
+ <el-option :label="$t('select.IdealizedQuery')" value="ideal"></el-option>
1644
+ </el-select>
1645
+ <el-button slot="append" size="mini" icon="el-icon-search" @click="queryKeyword()"></el-button>
1646
+ </el-input>
1647
+ </el-col>
1648
+ </el-row>
1649
+ <el-row>
1650
+ <el-table :data="tableData" :height="tableHeight" @selection-change="handleSelectionChange">
1651
+ <el-table-column type="selection" width="55"></el-table-column>
1652
+ <el-table-column fixed type="index" :label="$t('exp.id')" align="left" :index="customIndex"></el-table-column>
1653
+ <el-table-column prop="name" :label="$t('exp.name')" align="left"></el-table-column>
1654
+ <el-table-column prop="project" :label="$t('exp.project')" align="left"></el-table-column>
1655
+ <el-table-column prop="flowAuthorNames" :label="$t('exp.flowAuthorNames')" align="left"></el-table-column>
1656
+ <el-table-column prop="procDealStatus" :label="$t('exp.procDealStatus')" align="left">
1657
+ <template slot-scope="scope">
1658
+ <el-tag :type="$t(statusColorLabel(scope.row.procDealStatus))">{{ $t(statusLabel(scope.row.procDealStatus)) }}</el-tag>
1659
+ </template>
1660
+ </el-table-column>
1661
+ <el-table-column prop="nodeNames" :label="$t('exp.nodeNames')" align="left"></el-table-column>
1662
+ <el-table-column :label="$t('base.table.action')" width="100">
1663
+ <template slot-scope="scope">
1664
+ <el-button style="border: none;" size="mini" icon="el-icon-edit" @click="handleEdit(scope.$index, scope.row)"> </el-button>
1665
+ </template>
1666
+ </el-table-column>
1667
+ </el-table>
1668
+ <el-pagination
1669
+ @size-change="handleSizeChange"
1670
+ @current-change="handleCurrentChange"
1671
+ :current-page="currentPage"
1672
+ :page-sizes="[10, 20, 30, 40]"
1673
+ :page-size="pageSize"
1674
+ layout="total, sizes, prev, pager, next, jumper"
1675
+ :total="total"
1676
+ background
1677
+ ></el-pagination>
1678
+ </el-row>
1679
+ </el-main>
1680
+ </el-container>
1681
+ </template>
1682
+ <script>
1683
+ import { MeritBPM } from 'cloud-module-bpm/packages/utils/merit-bpm';
1684
+ export default {
1685
+ data() {
1686
+ return {
1687
+ MeritBPM,
1688
+ myStatusValue: 'my',
1689
+ allStatusValue: 'all',
1690
+ lastStatusValue: 'all', //查询状态
1691
+ procDefKey: 'travel_expense', //流程id
1692
+
1693
+ currentPage: 1,
1694
+ pageSize: 10,
1695
+ total: 10,
1696
+ tableData: [],
1697
+ queryTypeEnums: ['ideal'],
1698
+ keyword: '',
1699
+ queryType: 'ideal',
1700
+ tableHeight: window.innerHeight - 160,
1701
+ selectedData: []
1702
+ };
1703
+ },
1704
+ //方法
1705
+ methods: {
1706
+ //获取所选中的id
1707
+ handleSelectionChange(rows) {
1708
+ this.selectedData = [];
1709
+ rows.forEach(arry => {
1710
+ this.selectedData.push(arry.id);
1711
+ });
1712
+ },
1713
+
1714
+ queryExample(type) {
1715
+ this.lastStatusValue = type;
1716
+ if (type.indexOf('all') != -1) {
1717
+ this.allStatusValue = type;
1718
+ } else {
1719
+ this.myStatusValue = type;
1720
+ }
1721
+ this.queryKeyword();
1722
+ },
1723
+ // 删除操作
1724
+ deleteRow() {
1725
+ let _this = this;
1726
+ let message = _this.$i18n.t('comm.del');
1727
+ if (_this.selectedData.length == 0) {
1728
+ return _this.$message({
1729
+ message: _this.$i18n.t('comm.message_action'),
1730
+ type: 'error'
1731
+ });
1732
+ }
1733
+ //提示框
1734
+ this.$confirm(message, _this.$i18n.t('comm.tooltip'), {
1735
+ confirmButtonText: _this.$i18n.t('comm.confirm'),
1736
+ cancelButtonText: _this.$i18n.t('comm.cancel'),
1737
+ type: 'warning'
1738
+ })
1739
+ .then(() => {
1740
+ let ids = _this.selectedData.join(',');
1741
+ _this.axios['cloud-system-bpm-travel']
1742
+ .post(this.HOST + '/deleteTravel/batch', {
1743
+ ids: ids
1744
+ })
1745
+ .then(function(res) {
1746
+ if (res.status == '1') {
1747
+ _this.$message.success(_this.$i18n.t('comm.messagee_success_delete'));
1748
+ } else {
1749
+ _this.$message.error(_this.$i18n.t('comm.message_error_delete'));
1750
+ }
1751
+ _this.selectedData = [];
1752
+ _this.requestGridData();
1753
+ });
1754
+ })
1755
+ .catch(() => {
1756
+ this.$message.info(_this.$i18n.t('comm.message_info_delete'));
1757
+ });
1758
+ },
1759
+ // 按照查询条件查询
1760
+ queryKeyword() {
1761
+ if (this.queryType == 'ideal') {
1762
+ this.queryIdealData();
1763
+ }
1764
+ },
1765
+
1766
+ //理想化查询
1767
+ queryIdealData() {
1768
+ var _this = this;
1769
+ _this.axios['cloud-system-bpm-travel']
1770
+ .post(this.HOST + '/page/ideal', {
1771
+ pageNumber: _this.currentPage,
1772
+ pageSize: _this.pageSize,
1773
+ procDefKey: _this.procDefKey,
1774
+ bpmStatus: _this.lastStatusValue
1775
+ })
1776
+ .then(function(res) {
1777
+ if (res.status == '1') {
1778
+ _this.tableData = res.data.rows;
1779
+ _this.total = res.data.total;
1780
+ } else {
1781
+ console.log(res.stackmessage);
1782
+ }
1783
+ })
1784
+ .catch(function(err) {
1785
+ console.log(err);
1786
+ });
1787
+ },
1788
+
1789
+ //编辑
1790
+ handleEdit(index, row) {
1791
+ // 打开流程
1792
+ MeritBPM.open(this, { businessId: row.id }, {});
1793
+ },
1794
+
1795
+ //请求数据
1796
+ requestGridData() {
1797
+ //理想化查询
1798
+ this.queryIdealData();
1799
+ },
1800
+ statusColorLabel(status) {
1801
+ let color = 'statusColor.' + status;
1802
+ return color;
1803
+ },
1804
+ statusLabel(status) {
1805
+ return 'status.' + status;
1806
+ },
1807
+ customIndex(index) {
1808
+ return index + 1 + (this.currentPage - 1) * this.pageSize;
1809
+ },
1810
+ //每页显示数据个数变化时调用
1811
+ handleSizeChange(val) {
1812
+ this.pageSize = val;
1813
+ this.requestGridData();
1814
+ },
1815
+ //页码变化时调用
1816
+ handleCurrentChange(val) {
1817
+ this.currentPage = val;
1818
+ this.requestGridData();
1819
+ },
1820
+ typeEnumLabel(type, param) {
1821
+ return 'apiType.' + type + '.' + param;
1822
+ }
1823
+ },
1824
+
1825
+ mounted() {
1826
+ this.requestGridData();
1827
+ }
1828
+ };
1829
+ </script>
1830
+
1831
+ <style scoped>
1832
+ .el-col-7 {
1833
+ width: auto !important;
1834
+ }
1835
+ .tooltipI {
1836
+ margin-top: 6px;
1837
+ flex: auto;
1838
+ text-align: right;
1839
+ margin-right: 10px;
1840
+ }
1841
+ </style>
1842
+ ```
1843
+
1844
+ 如上 html 中流程引入的相关参数说明,请参考《流程应用模块相关接口》中业务模块--主页部分
1845
+
1846
+ - form-edit.vue
1847
+
1848
+ 说明:
1849
+ 在主页 Grid.vue 中的 handleEdit()方法中调用了 MeritBPM.open 就是打开流程的方法
1850
+
1851
+ 引入流程操作按钮
1852
+
1853
+ ```html
1854
+ <bpm-form-tools :procDefKey="procDefKey" @init="init" @save="save" ref="bpmformtools"></bpm-form-tools>
1855
+ ```
1856
+
1857
+ 效果图如下:
1858
+ ![image](./imgs/流程应用开发/1-41.jpg)
1859
+
1860
+ form-edit.vue 完整代码如下:
1861
+
1862
+ ```html
1863
+ <template>
1864
+ <el-form :model="expense" label-width="80px" style="padding: 16px;width:850px;margin:20px auto;border:1px solid #cecece;">
1865
+ <!--引入流程操作按钮-->
1866
+ <el-row type="flex" style="margin:20px 0 10px 0;">
1867
+ <bpm-form-tools :procDefKey="procDefKey" @init="init" @save="save" ref="bpmformtools"></bpm-form-tools>
1868
+ </el-row>
1869
+
1870
+ <!--业务相关-->
1871
+ <el-row type="flex" style="margin:10px 0 10px 0;">
1872
+ <el-col style="font-size:24px;font-weight:bold" align="center">出差费用报销单</el-col>
1873
+ </el-row>
1874
+ <el-row>
1875
+ <el-col :span="24">
1876
+ <el-form-item :label="$t('exp.project')" prop="project">
1877
+ <el-input v-model="expense.project" :maxlength="100" show-word-limit size="mini" style="width:100%"></el-input>
1878
+ </el-form-item>
1879
+ </el-col>
1880
+ </el-row>
1881
+ <el-row>
1882
+ <el-col :span="12">
1883
+ <el-form-item :label="$t('exp.belong_depart')" prop="belongDept">
1884
+ <el-input
1885
+ v-model="expense.belongDept"
1886
+ readonly="readonly"
1887
+ :maxlength="100"
1888
+ show-word-limit
1889
+ size="mini"
1890
+ style="width:100%"
1891
+ ></el-input>
1892
+ </el-form-item>
1893
+ </el-col>
1894
+ <el-col :span="12">
1895
+ <el-form-item :label="$t('exp.name')" prop="name">
1896
+ <el-input v-model="expense.name" readonly="readonly" :maxlength="100" show-word-limit size="mini" style="width:100%"></el-input>
1897
+ </el-form-item>
1898
+ </el-col>
1899
+ </el-row>
1900
+ <el-row>
1901
+ <el-col :span="12">
1902
+ <el-form-item :label="$t('exp.type')" prop="type">
1903
+ <el-select v-model="expense.type" placeholder="请选择" style="width:100%;">
1904
+ <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
1905
+ </el-select>
1906
+ </el-form-item>
1907
+ </el-col>
1908
+ <el-col :span="12">
1909
+ <el-form-item :label="$t('exp.amount')" prop="amount">
1910
+ <el-input-number
1911
+ v-model="expense.amount"
1912
+ style="width:100%;"
1913
+ :min="0"
1914
+ :max="100000"
1915
+ size="mini"
1916
+ :precision="2"
1917
+ @blur="blurAmount"
1918
+ ></el-input-number>
1919
+ </el-form-item>
1920
+ </el-col>
1921
+ </el-row>
1922
+ <el-row>
1923
+ <el-col :span="8">
1924
+ <el-form-item :label="$t('exp.destination')" prop="destination">
1925
+ <el-input v-model="expense.destination" :maxlength="50" show-word-limit size="mini" style="width:100%"></el-input>
1926
+ </el-form-item>
1927
+ </el-col>
1928
+ <el-col :span="16">
1929
+ <el-form-item :label="$t('exp.travel_time')" prop="time">
1930
+ <el-date-picker
1931
+ v-model="expense.time"
1932
+ value-format="timestamp"
1933
+ style="width:100%;"
1934
+ type="daterange"
1935
+ range-separator="至"
1936
+ start-placeholder="开始日期"
1937
+ end-placeholder="结束日期"
1938
+ >
1939
+ </el-date-picker>
1940
+ </el-form-item>
1941
+ </el-col>
1942
+ </el-row>
1943
+ <el-row>
1944
+ <el-col>
1945
+ <el-form-item :label="$t('exp.travel_remark')" prop="remark">
1946
+ <el-input
1947
+ v-model="expense.remark"
1948
+ type="textarea"
1949
+ :maxlength="300"
1950
+ show-word-limit
1951
+ :autosize="{ minRows: 4, maxRows: 4 }"
1952
+ ></el-input>
1953
+ </el-form-item>
1954
+ </el-col>
1955
+ </el-row>
1956
+ </el-form>
1957
+ </template>
1958
+ <script>
1959
+ import dateFormat from 'cloud-module-base/static/js/utils/dataFormat.js';
1960
+ export default {
1961
+ data() {
1962
+ return {
1963
+ //流程ID
1964
+ procDefKey: 'travel_expense',
1965
+
1966
+ //业务相关
1967
+ expense: {
1968
+ project: '',
1969
+ belongDept: '',
1970
+ name: '',
1971
+ destination: '',
1972
+ amount: 0,
1973
+ type: '',
1974
+ time: [],
1975
+ remark: ''
1976
+ },
1977
+ typeOptions: [
1978
+ {
1979
+ value: 'options1',
1980
+ label: '项目支持'
1981
+ },
1982
+ {
1983
+ value: 'options2',
1984
+ label: '售前支撑'
1985
+ }
1986
+ ]
1987
+ };
1988
+ },
1989
+ computed: {},
1990
+
1991
+ methods: {
1992
+ blurAmount() {
1993
+ let that = this;
1994
+ Object.assign(that.$refs.bpmformtools.ruleEngine, that.example);
1995
+ if (that.example.id == null) {
1996
+ that.$refs.bpmformtools.MeritBPM.initRuleEngine(that.$refs.bpmformtools);
1997
+ } else {
1998
+ that.$refs.bpmformtools.MeritBPM.runRuleEngine(that.$refs.bpmformtools, {}, {});
1999
+ }
2000
+ },
2001
+ // 业务数据初始化表单
2002
+ init(params) {
2003
+ let _this = this;
2004
+ if (params.id == '') {
2005
+ this.initUserInfo(); // 业务代码
2006
+ params.callback(this.expense); //流程中的回调函数
2007
+ return;
2008
+ }
2009
+
2010
+ // 初始化数据
2011
+ _this.axios['cloud-system-bpm-travel']
2012
+ .post(this.HOST + '/get-travel-expense', {
2013
+ id: params.id
2014
+ })
2015
+ .then(function(res) {
2016
+ Object.assign(_this.expense, res.data);
2017
+ if (_this.expense.startTime != null) {
2018
+ _this.expense.time = [_this.expense.startTime, _this.expense.endTime];
2019
+ }
2020
+ params.callback(_this.expense); //流程中的回调函数
2021
+ });
2022
+ },
2023
+ // 初始化部门,姓名,标题
2024
+ initUserInfo() {
2025
+ let _this = this;
2026
+ this.axios['system-manager']
2027
+ .get('/api/ou/user/session')
2028
+ .then(result => {
2029
+ if (result) {
2030
+ if (_this.expense.project == '') {
2031
+ _this.expense.name = result.name;
2032
+ _this.expense.belongDept = result.deptName;
2033
+ _this.expense.project = result.name + '_' + dateFormat(new Date()) + '_出差报销';
2034
+ }
2035
+ }
2036
+ })
2037
+ .catch(err => {
2038
+ console.log(err);
2039
+ });
2040
+ },
2041
+ // 业务数据保存方法
2042
+ save(bpmSaveAfter) {
2043
+ let _this = this;
2044
+ if (_this.expense.time != undefined && _this.expense.time.length >= 2) {
2045
+ (_this.expense.startTime = _this.expense.time[0]), (_this.expense.endTime = _this.expense.time[1]);
2046
+ }
2047
+ _this.axios['cloud-system-bpm-travel'].post(this.HOST + '/save', _this.expense).then(function(res) {
2048
+ //流程相关
2049
+ // 保存成功,saveTravel返回expense对象的目的是:获取id,用于保存回调方法。
2050
+ //如果不返回expense对象,则获取不到id,保存回调方法失败
2051
+ Object.assign(_this.expense, res.data);
2052
+ _this.expense['bpmSubject'] = res.data.project;
2053
+ _this.expense['bpmUrgent'] = '普通';
2054
+ _this.expense['bpmSecret'] = '高级';
2055
+ bpmSaveAfter(_this.expense); //流程中的回调函数
2056
+ });
2057
+ }
2058
+ }
2059
+ };
2060
+ </script>
2061
+ <style>
2062
+ .el-range-editor.el-input__inner {
2063
+ padding: 0 10px;
2064
+ }
2065
+ </style>
2066
+ ```
2067
+
2068
+ 如上 html 中流程引入的相关参数说明,请参考《流程应用模块相关接口》中业务模块--表单
2069
+
2070
+ - form-read.vue
2071
+
2072
+ 说明:
2073
+ 引入流程操作按钮
2074
+
2075
+ ```html
2076
+ <bpm-form-tools :procDefKey="procDefKey" @init="init" @save="save" ref="bpmformtools"></bpm-form-tools>
2077
+ ```
2078
+
2079
+ 效果图如下:
2080
+ ![image](./imgs/流程应用开发/1-46.jpg)
2081
+
2082
+ 完整代码如下:
2083
+
2084
+ ```html
2085
+ <template>
2086
+ <el-form :model="expense" label-width="80px" style="padding: 16px;width:700px;margin:20px auto;border:1px solid #cecece;">
2087
+ <el-row type="flex" style="margin:20px 0 10px 0;">
2088
+ <bpm-form-tools :procDefKey="procDefKey" @init="init" @save="save" ref="bpmformtools"></bpm-form-tools>
2089
+ </el-row>
2090
+ <el-row type="flex" style="margin:10px 0 10px 0;">
2091
+ <el-col style="font-size:24px;font-weight:bold" align="center">出差费用报销单</el-col>
2092
+ </el-row>
2093
+ <el-row>
2094
+ <el-col :span="24">
2095
+ <el-form-item :label="$t('exp.project')" prop="project">
2096
+ <el-input v-model="expense.project" disabled :maxlength="100" show-word-limit size="mini" style="width:100%"></el-input>
2097
+ </el-form-item>
2098
+ </el-col>
2099
+ </el-row>
2100
+ <el-row>
2101
+ <el-col :span="12">
2102
+ <el-form-item :label="$t('exp.belong_depart')" prop="belongDept">
2103
+ <el-input
2104
+ v-model="expense.belongDept"
2105
+ disabled
2106
+ readonly="readonly"
2107
+ :maxlength="100"
2108
+ show-word-limit
2109
+ size="mini"
2110
+ style="width:100%"
2111
+ ></el-input>
2112
+ </el-form-item>
2113
+ </el-col>
2114
+ <el-col :span="12">
2115
+ <el-form-item :label="$t('exp.name')" prop="name">
2116
+ <el-input
2117
+ v-model="expense.name"
2118
+ disabled
2119
+ readonly="readonly"
2120
+ :maxlength="100"
2121
+ show-word-limit
2122
+ size="mini"
2123
+ style="width:100%"
2124
+ ></el-input>
2125
+ </el-form-item>
2126
+ </el-col>
2127
+ </el-row>
2128
+ <el-row>
2129
+ <el-col :span="12">
2130
+ <el-form-item :label="$t('exp.type')" prop="type">
2131
+ <el-select v-model="expense.type" disabled placeholder="请选择" style="width:100%;">
2132
+ <el-option v-for="item in typeOptions" :key="item.value" :label="item.label" :value="item.value"> </el-option>
2133
+ </el-select>
2134
+ </el-form-item>
2135
+ </el-col>
2136
+ <el-col :span="12">
2137
+ <el-form-item :label="$t('exp.amount')" prop="amount">
2138
+ <el-input-number
2139
+ v-model="expense.amount"
2140
+ disabled
2141
+ :min="0"
2142
+ :max="100000"
2143
+ size="mini"
2144
+ :precision="2"
2145
+ style="width:100%"
2146
+ ></el-input-number>
2147
+ </el-form-item>
2148
+ </el-col>
2149
+ </el-row>
2150
+ <el-row>
2151
+ <el-col :span="8">
2152
+ <el-form-item :label="$t('exp.destination')" prop="destination">
2153
+ <el-input v-model="expense.destination" disabled :maxlength="50" show-word-limit size="mini" style="width:100%"></el-input>
2154
+ </el-form-item>
2155
+ </el-col>
2156
+ <el-col :span="16">
2157
+ <el-form-item :label="$t('exp.travel_time')" prop="time">
2158
+ <el-date-picker
2159
+ disabled
2160
+ v-model="expense.time"
2161
+ style="width:100%;"
2162
+ type="daterange"
2163
+ value-format="timestamp"
2164
+ range-separator="至"
2165
+ start-placeholder="开始日期"
2166
+ end-placeholder="结束日期"
2167
+ >
2168
+ </el-date-picker>
2169
+ </el-form-item>
2170
+ </el-col>
2171
+ </el-row>
2172
+ <el-row>
2173
+ <el-col>
2174
+ <el-form-item :label="$t('exp.travel_remark')" prop="remark">
2175
+ <el-input
2176
+ v-model="expense.remark"
2177
+ type="textarea"
2178
+ disabled
2179
+ :maxlength="300"
2180
+ show-word-limit
2181
+ :autosize="{ minRows: 4, maxRows: 4 }"
2182
+ ></el-input>
2183
+ </el-form-item>
2184
+ </el-col>
2185
+ </el-row>
2186
+ </el-form>
2187
+ </template>
2188
+ <script>
2189
+ import dateFormat from 'cloud-module-base/static/js/utils/dataFormat.js';
2190
+ export default {
2191
+ data() {
2192
+ return {
2193
+ procDefKey: 'travel_expense',
2194
+ expense: {
2195
+ project: '',
2196
+ belongDept: '',
2197
+ name: '',
2198
+ destination: '',
2199
+ amount: 0,
2200
+ type: '',
2201
+ time: [],
2202
+ remark: ''
2203
+ },
2204
+ typeOptions: [
2205
+ {
2206
+ value: 'options1',
2207
+ label: '项目支持'
2208
+ },
2209
+ {
2210
+ value: 'options2',
2211
+ label: '售前支撑'
2212
+ }
2213
+ ]
2214
+ };
2215
+ },
2216
+ computed: {},
2217
+
2218
+ methods: {
2219
+ init(params) {
2220
+ let _this = this;
2221
+ if (params.id == '') {
2222
+ params.callback(this.expense);
2223
+ return;
2224
+ }
2225
+
2226
+ // 初始化数据
2227
+ _this.axios['cloud-system-bpm-travel']
2228
+ .post(this.HOST + '/get-travel-expense', {
2229
+ id: params.id
2230
+ })
2231
+ .then(function(res) {
2232
+ Object.assign(_this.expense, res.data);
2233
+ if (_this.expense.startTime != null) {
2234
+ _this.expense.time = [_this.expense.startTime, _this.expense.endTime];
2235
+ }
2236
+ params.callback(_this.expense);
2237
+ });
2238
+ },
2239
+
2240
+ save(bpmSaveAfter) {
2241
+ let _this = this;
2242
+ if (_this.expense.time != undefined && _this.expense.time.length == 2) {
2243
+ (_this.expense.startTime = _this.expense.time[0]), (_this.expense.endTime = _this.expense.time[1]);
2244
+ }
2245
+ _this.axios['cloud-system-bpm-travel'].post(this.HOST + '/save', _this.expense).then(function(res) {
2246
+ Object.assign(_this.expense, res.data);
2247
+ _this.expense['bpmSubject'] = res.data.project;
2248
+ _this.expense['bpmUrgent'] = '普通';
2249
+ _this.expense['bpmSecret'] = '高级';
2250
+ bpmSaveAfter(_this.expense);
2251
+ });
2252
+ }
2253
+ }
2254
+ };
2255
+ </script>
2256
+ <style>
2257
+ html,
2258
+ body {
2259
+ width: 100%;
2260
+ height: 98%;
2261
+ }
2262
+ </style>
2263
+ ```
2264
+
2265
+ 只读表单(form-edit.vue)和编辑表单(form-read.vue)区别:
2266
+
2267
+ 相同点:流程部分相同,方法相同
2268
+
2269
+ 不同点:业务部分,不能做任何编辑,只能读,加上 disabled
2270
+
2271
+ ## 6. 启动前端应用工程
2272
+
2273
+ ### 6.1 npm 启动
2274
+
2275
+ 打开终端 : Ctrl+Shift+`
2276
+
2277
+ ![image](./imgs/流程应用开发/1-37.jpg)
2278
+
2279
+ 在终端输入:npm run serve 命令, 按 "Enter" 执行命令
2280
+
2281
+ ```shell
2282
+ #工程启动
2283
+ npm run serve
2284
+ ```
2285
+
2286
+ 启动成功
2287
+ ![](./image/../imgs/流程应用开发/1-15.jpg)
2288
+
2289
+ ### 6.2 Nacos 配置
2290
+
2291
+ 在 nacos 中——>配置管理——>配置列表——>common-cloud-system-manage.properties 文件点击编辑
2292
+ 添加如下内容,然后点击发布
2293
+
2294
+ ```
2295
+ meritdata.cloud.dev-web-prefix[1].applicationName=business-bpm-demo
2296
+ meritdata.cloud.dev-web-prefix[1].url=http://127.0.0.1:8087
2297
+ ```
2298
+
2299
+ ![](./image/../imgs/流程应用开发/1-16.jpg)
2300
+
2301
+ 因为服务启动的端口为 8087,所以 nacos 配置中端口为 8087
2302
+
2303
+ 注意:meritdata.cloud.dev-web-prefix[1] 中 [1],
2304
+ 由于配置文件中已存在 meritdata.cloud.dev-web-prefix[0]。如果不存在则从[0]开始,逐渐累加。
2305
+
2306
+ 添加完配置后,点击发布
2307
+
2308
+ ### 6.3 查看结果
2309
+
2310
+ 先启动 cloud-system-bpm-engine,cloud-system-manage,
2311
+ cloud-system-gateway
2312
+
2313
+ ![](./image/../imgs/流程应用开发/1-42.jpg)
2314
+
2315
+ 先请求地址
2316
+ http://127.0.0.1/portal/#/login
2317
+
2318
+ 使用分配流程功能的用户登录
2319
+ 账号:test1 密码:123456
2320
+
2321
+ 如果没有账户分配流程功能,请先给账户配置流程功能
2322
+
2323
+ ![](D:\文档区\6.9\imgs\流程模块介绍\Snipaste_2022-11-29_19-41-13.jpg)
2324
+
2325
+ 配置完账户后,使用账户登录
2326
+
2327
+ 登录之后再请求下面的访问地址
2328
+
2329
+ 差旅费访问地址
2330
+
2331
+ 访问地址: http://127.0.0.1: + 启动的前端端口 +/bpm-expense/expense/index.html#/
2332
+
2333
+ 本案例启动的前端端口为:8087
2334
+
2335
+ 先按照步骤 7 创建流程设计
2336
+
2337
+ 访问地址 URL :http://127.0.0.1:8087/bpm-expense/expense/index.html#/
2338
+
2339
+ ![](./image/../imgs/流程应用开发/1-27.jpg)
2340
+
2341
+ ## 7 流程设计
2342
+
2343
+ ### 7.1 添加流程表单
2344
+
2345
+ ![image-20211211110618542](./imgs\流程应用开发\image-20211211110618542.png)
2346
+
2347
+ ```
2348
+ 表单链接地址 /bpm-expense/expense/index.html#/formEdit?id=businessId
2349
+ ```
2350
+
2351
+ ![image-20211211110816246](./imgs\流程应用开发\image-20211211110816246.png)
2352
+
2353
+ ```
2354
+ 表单链接地址 /bpm-expense/expense/index.html#/formRead?id=businessId
2355
+ ```
2356
+
2357
+ ### 7.2 创建流程设计
2358
+
2359
+ 新建流程设计
2360
+
2361
+ 流程 ID: travel_expense
2362
+
2363
+ ![](./image/../imgs/流程应用开发/1-17.jpg)
2364
+ 点击设计
2365
+
2366
+ ![](./image/../imgs/流程应用开发/1-18.jpg)
2367
+
2368
+ 点击右上角的设置按钮,对照填写数据
2369
+ 如下图所示:
2370
+
2371
+ ```
2372
+ 表单链接地址 /bpm-expense/expense/index.html#/formRead?id=businessId
2373
+ ```
2374
+
2375
+ ![](./image/../imgs/流程应用开发/1-19.jpg)
2376
+
2377
+ 说明:默认选择默认模式
2378
+ |门户模式| 说明|
2379
+ |---|---|
2380
+ |默认模式|无需配置,自动获取|
2381
+ |固定模式|开发时使用,设置固定 ip+端口|
2382
+ |门户模式|线上使用|
2383
+
2384
+ 进行设计流程
2385
+ ![](./image/../imgs/流程应用开发/1-20.jpg)
2386
+
2387
+ 双击提交流程,对照图片添加配置
2388
+
2389
+ - 基础配置
2390
+ ![image-20211211111017796](./imgs\流程应用开发\image-20211211111017796.png)
2391
+
2392
+ ```
2393
+ 表单链接地址 /bpm-expense/expense/index.html#/formEdit?id=businessId
2394
+ ```
2395
+
2396
+ - 审批配置
2397
+ ![](./image/../imgs/流程应用开发/1-22.jpg)
2398
+ - 人员配置
2399
+ ![](./image/../imgs/流程应用开发/1-23.jpg)
2400
+ - 点击确认
2401
+
2402
+ 点击总监审批,对照图片添加配置
2403
+
2404
+ - 基础配置
2405
+ ![](./image/../imgs/流程应用开发/1-24.jpg)
2406
+
2407
+ ```
2408
+ 表单链接地址 /bpm-expense/expense/index.html#/formRead?id=businessId
2409
+ ```
2410
+
2411
+ - 审批配置
2412
+ ![](./image/../imgs/流程应用开发/1-22.jpg)
2413
+ - 人员配置
2414
+ ![](./image/../imgs/流程应用开发/1-25.jpg)
2415
+ - 点击确认
2416
+
2417
+ ### 7.3 发布流程
2418
+
2419
+ - 点击发布,发布该流程实例
2420
+ ![](./image/../imgs/流程应用开发/1-26.jpg)
2421
+ - 查看发布
2422
+ ![](./image/../imgs/流程应用开发/1-33.jpg)
2423
+
2424
+ ### 7.4 创建流程实例
2425
+
2426
+ - 创建流程实例,点击新建
2427
+ ![](./image/../imgs/流程应用开发/1-27.jpg)
2428
+ - 进行填写数据,点击送审
2429
+ ![](./image/../imgs/流程应用开发/1-28.jpg)