Browse Source

chore: 从Git跟踪中移除编译文件

- 移除所有.class文件
- 移除target目录下的编译产物
- 更新.gitignore已生效
Pengxy 5 months ago
parent
commit
404bd10b06
99 changed files with 0 additions and 3003 deletions
  1. 0 34
      .env.local
  2. 0 16
      .vscode/launch.json
  3. 0 9
      .vscode/settings.json
  4. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmModelController.class
  5. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmProcessDefinitionController.class
  6. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmProcessListenerController.class
  7. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmUserGroupController.class
  8. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/category/BpmCategoryRespVO.class
  9. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormFieldVO.class
  10. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.class
  11. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormSaveReqVO.class
  12. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.class
  13. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModeUpdateBpmnReqVO.class
  14. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelSaveReqVO.class
  15. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateStateReqVO.class
  16. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$Condition.class
  17. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$DelaySetting.class
  18. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$HttpRequestParam.class
  19. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$ListenerHandler.class
  20. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$OperationButtonSetting.class
  21. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO$UserTask.class
  22. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO.class
  23. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.class
  24. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmApprovalDetailRespVO$ActivityNodeTask.class
  25. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmApprovalDetailRespVO.class
  26. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.class
  27. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessPrintDataRespVO.class
  28. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskPageReqVO.class
  29. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskReturnReqVO.class
  30. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/convert/definition/BpmModelConvert.class
  31. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/convert/message/BpmMessageConvert.class
  32. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.class
  33. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.class
  34. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO$BpmProcessDefinitionInfoDOBuilder.class
  35. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmUserGroupDO$BpmUserGroupDOBuilder.class
  36. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO$BpmOALeaveDOBuilder.class
  37. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.class
  38. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/definition/BpmAutoApproveTypeEnum.class
  39. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/definition/BpmSimpleModeConditionTypeEnum.class
  40. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/definition/BpmUserTaskRejectHandlerTypeEnum.class
  41. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.class
  42. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusEnum.class
  43. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/task/BpmTaskSignTypeEnum.class
  44. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/task/BpmTaskStatusEnum.class
  45. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/config/BpmFlowableConfiguration.class
  46. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.class
  47. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.class
  48. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/dept/BpmTaskCandidateStartUserSelectStrategy.class
  49. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/form/BpmTaskCandidateFormUserStrategy.class
  50. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/other/BpmTaskCandidateExpressionStrategy.class
  51. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/event/BpmProcessInstanceEventPublisher.class
  52. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateClassExecutionListener.class
  53. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateExpressionExecutionListener.class
  54. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/demo/task/DemoSpringExpressionTaskListener.class
  55. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.class
  56. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$ChildProcessConvert.class
  57. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$EndNodeConvert.class
  58. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$ParallelBranchNodeConvert.class
  59. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$StartNodeConvert.class
  60. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$StartUserNodeConvert.class
  61. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$TriggerNodeConvert.class
  62. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/definition/BpmFormService.class
  63. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.class
  64. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessExpressionServiceImpl.class
  65. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmFormFieldRespDTO.class
  66. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/message/BpmMessageService.class
  67. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyService.class
  68. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl$1.class
  69. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl$2.class
  70. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.class
  71. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.class
  72. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/listener/BpmCallActivityListener.class
  73. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/trigger/BpmTrigger.class
  74. BIN
      yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/trigger/form/BpmFormDeleteTrigger.class
  75. 0 111
      yudao-module-bpm/target/generated-sources/annotations/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvertImpl.java
  76. BIN
      yudao-module-report/target/classes/cn/iocoder/yudao/module/report/controller/admin/goview/GoViewDataController.class
  77. BIN
      yudao-module-report/target/classes/cn/iocoder/yudao/module/report/controller/admin/goview/vo/data/GoViewDataGetBySqlReqVO.class
  78. BIN
      yudao-module-report/target/classes/cn/iocoder/yudao/module/report/controller/admin/goview/vo/data/GoViewDataRespVO.class
  79. BIN
      yudao-module-report/target/classes/cn/iocoder/yudao/module/report/controller/admin/goview/vo/project/GoViewProjectRespVO.class
  80. BIN
      yudao-module-report/target/classes/cn/iocoder/yudao/module/report/convert/goview/GoViewProjectConvert.class
  81. BIN
      yudao-module-report/target/classes/cn/iocoder/yudao/module/report/dal/mysql/goview/GoViewProjectMapper.class
  82. BIN
      yudao-module-report/target/classes/cn/iocoder/yudao/module/report/framework/jmreport/core/service/JmOnlDragExternalServiceImpl.class
  83. BIN
      yudao-module-report/target/classes/cn/iocoder/yudao/module/report/framework/jmreport/core/service/JmReportTokenServiceImpl.class
  84. 0 11
      yudao-module-system/target/generated-sources/annotations/cn/iocoder/yudao/module/system/convert/oauth2/OAuth2OpenConvertImpl.java
  85. 0 34
      yudao-ui/yudao-ui-admin-vue3/.env.local
  86. 0 16
      yudao-ui/yudao-ui-admin-vue3/.vscode/launch.json
  87. 0 146
      yudao-ui/yudao-ui-admin-vue3/.vscode/settings.json
  88. 0 99
      yudao-ui/yudao-ui-admin-vue3/build/vite/index.ts
  89. 0 124
      yudao-ui/yudao-ui-admin-vue3/build/vite/optimize.ts
  90. 0 62
      yudao-ui/yudao-ui-admin-vue3/src/api/erp/sale/out/index.ts
  91. 0 62
      yudao-ui/yudao-ui-admin-vue3/src/api/erp/stock/out/index.ts
  92. 0 343
      yudao-ui/yudao-ui-admin-vue3/src/views/erp/sale/out/SaleOutForm.vue
  93. 0 300
      yudao-ui/yudao-ui-admin-vue3/src/views/erp/sale/out/components/SaleOutItemForm.vue
  94. 0 199
      yudao-ui/yudao-ui-admin-vue3/src/views/erp/sale/out/components/SaleOutReceiptEnableList.vue
  95. 0 438
      yudao-ui/yudao-ui-admin-vue3/src/views/erp/sale/out/index.vue
  96. 0 170
      yudao-ui/yudao-ui-admin-vue3/src/views/erp/stock/out/StockOutForm.vue
  97. 0 267
      yudao-ui/yudao-ui-admin-vue3/src/views/erp/stock/out/components/StockOutItemForm.vue
  98. 0 378
      yudao-ui/yudao-ui-admin-vue3/src/views/erp/stock/out/index.vue
  99. 0 184
      yudao-ui/yudao-ui-admin-vue3/src/views/infra/build/index.vue

+ 0 - 34
.env.local

@@ -1,34 +0,0 @@
-# 本地开发环境:本地启动所有项目(前端、后端、APP)时使用,不依赖外部环境
-NODE_ENV=development
-
-VITE_DEV=true
-
-# 请求路径
-VITE_BASE_URL='http://localhost:48080'
-
-# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
-VITE_UPLOAD_TYPE=server
-
-# 接口地址
-VITE_API_URL=/admin-api
-
-# 是否删除debugger
-VITE_DROP_DEBUGGER=false
-
-# 是否删除console.log
-VITE_DROP_CONSOLE=false
-
-# 是否sourcemap
-VITE_SOURCEMAP=false
-
-# 打包路径
-VITE_BASE_PATH=/
-
-# 商城H5会员端域名
-VITE_MALL_H5_DOMAIN='http://localhost:3000'
-
-# 验证码的开关
-VITE_APP_CAPTCHA_ENABLE=true
-
-# GoView域名
-VITE_GOVIEW_URL='http://127.0.0.1:3000'

+ 0 - 16
.vscode/launch.json

@@ -1,16 +0,0 @@
-{
-  // Use IntelliSense to learn about possible attributes.
-  // Hover to view descriptions of existing attributes.
-  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
-  "version": "0.2.0",
-  "configurations": [
-    {
-      "type": "msedge",
-      "request": "launch",
-      "name": "Launch Edge against localhost",
-      "url": "http://localhost",
-      "webRoot": "${workspaceFolder}/src",
-      "sourceMaps": true
-    }
-  ]
-}

+ 0 - 9
.vscode/settings.json

@@ -1,9 +0,0 @@
-{
-    "java.compile.nullAnalysis.mode": "automatic",
-    "kiroAgent.configureMCP": "Enabled",
-    "java.configuration.updateBuildConfiguration": "interactive",
-    "i18n-ally.localesPaths": [
-        "src/locales",
-        "yudao-ui/yudao-ui-admin-vue3/src/locales"
-    ]
-}

BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmModelController.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmProcessDefinitionController.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmProcessListenerController.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/BpmUserGroupController.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/category/BpmCategoryRespVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormFieldVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormPageReqVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/form/BpmFormSaveReqVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/group/BpmUserGroupRespVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModeUpdateBpmnReqVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelSaveReqVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/BpmModelUpdateStateReqVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$Condition.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$DelaySetting.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$HttpRequestParam.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$ListenerHandler.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/model/simple/BpmSimpleModelNodeVO$OperationButtonSetting.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO$UserTask.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/definition/vo/process/BpmProcessDefinitionRespVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/BpmOALeavePageReqVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmApprovalDetailRespVO$ActivityNodeTask.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmApprovalDetailRespVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessInstancePageReqVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/instance/BpmProcessPrintDataRespVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskPageReqVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/controller/admin/task/vo/task/BpmTaskReturnReqVO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/convert/definition/BpmModelConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/convert/message/BpmMessageConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/convert/task/BpmTaskConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmProcessDefinitionInfoDO$BpmProcessDefinitionInfoDOBuilder.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/dal/dataobject/definition/BpmUserGroupDO$BpmUserGroupDOBuilder.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO$BpmOALeaveDOBuilder.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOALeaveDO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/definition/BpmAutoApproveTypeEnum.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/definition/BpmSimpleModeConditionTypeEnum.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/definition/BpmUserTaskRejectHandlerTypeEnum.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/message/BpmMessageEnum.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/task/BpmProcessInstanceStatusEnum.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/task/BpmTaskSignTypeEnum.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/enums/task/BpmTaskStatusEnum.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/config/BpmFlowableConfiguration.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmParallelMultiInstanceBehavior.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/behavior/BpmSequentialMultiInstanceBehavior.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/dept/BpmTaskCandidateStartUserSelectStrategy.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/form/BpmTaskCandidateFormUserStrategy.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/candidate/strategy/other/BpmTaskCandidateExpressionStrategy.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/event/BpmProcessInstanceEventPublisher.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateClassExecutionListener.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/demo/exection/DemoDelegateExpressionExecutionListener.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/listener/demo/task/DemoSpringExpressionTaskListener.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/BpmnModelUtils.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$ChildProcessConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$EndNodeConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$ParallelBranchNodeConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$StartNodeConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$StartUserNodeConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils$TriggerNodeConvert.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/definition/BpmFormService.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessDefinitionServiceImpl.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/definition/BpmProcessExpressionServiceImpl.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/definition/dto/BpmFormFieldRespDTO.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/message/BpmMessageService.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceCopyService.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl$1.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl$2.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/BpmTaskServiceImpl.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/listener/BpmCallActivityListener.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/trigger/BpmTrigger.class


BIN
yudao-module-bpm/target/classes/cn/iocoder/yudao/module/bpm/service/task/trigger/form/BpmFormDeleteTrigger.class


+ 0 - 111
yudao-module-bpm/target/generated-sources/annotations/cn/iocoder/yudao/module/bpm/convert/task/BpmProcessInstanceConvertImpl.java

@@ -1,111 +0,0 @@
-package cn.iocoder.yudao.module.bpm.convert.task;
-
-import cn.iocoder.yudao.module.bpm.controller.admin.definition.vo.process.BpmProcessDefinitionRespVO;
-import cn.iocoder.yudao.module.bpm.dal.dataobject.definition.BpmProcessDefinitionInfoDO;
-import java.util.ArrayList;
-import java.util.List;
-import javax.annotation.processing.Generated;
-
-@Generated(
-    value = "org.mapstruct.ap.MappingProcessor",
-    date = "2025-12-25T10:46:30+0800",
-    comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.17 (Oracle Corporation)"
-)
-public class BpmProcessInstanceConvertImpl implements BpmProcessInstanceConvert {
-
-    @Override
-    public void copyTo(BpmProcessDefinitionInfoDO from, BpmProcessDefinitionRespVO to) {
-        if ( from == null ) {
-            return;
-        }
-
-        to.setIcon( from.getIcon() );
-        to.setDescription( from.getDescription() );
-        to.setFormType( from.getFormType() );
-        to.setFormId( from.getFormId() );
-        to.setFormCustomCreatePath( from.getFormCustomCreatePath() );
-        to.setFormCustomViewPath( from.getFormCustomViewPath() );
-        to.setVisible( from.getVisible() );
-        if ( to.getStartUserIds() != null ) {
-            List<Long> list = from.getStartUserIds();
-            if ( list != null ) {
-                to.getStartUserIds().clear();
-                to.getStartUserIds().addAll( list );
-            }
-            else {
-                to.setStartUserIds( null );
-            }
-        }
-        else {
-            List<Long> list = from.getStartUserIds();
-            if ( list != null ) {
-                to.setStartUserIds( new ArrayList<Long>( list ) );
-            }
-        }
-        if ( to.getStartDeptIds() != null ) {
-            List<Long> list1 = from.getStartDeptIds();
-            if ( list1 != null ) {
-                to.getStartDeptIds().clear();
-                to.getStartDeptIds().addAll( list1 );
-            }
-            else {
-                to.setStartDeptIds( null );
-            }
-        }
-        else {
-            List<Long> list1 = from.getStartDeptIds();
-            if ( list1 != null ) {
-                to.setStartDeptIds( new ArrayList<Long>( list1 ) );
-            }
-        }
-        if ( to.getManagerUserIds() != null ) {
-            List<Long> list2 = from.getManagerUserIds();
-            if ( list2 != null ) {
-                to.getManagerUserIds().clear();
-                to.getManagerUserIds().addAll( list2 );
-            }
-            else {
-                to.setManagerUserIds( null );
-            }
-        }
-        else {
-            List<Long> list2 = from.getManagerUserIds();
-            if ( list2 != null ) {
-                to.setManagerUserIds( new ArrayList<Long>( list2 ) );
-            }
-        }
-        to.setAllowCancelRunningProcess( from.getAllowCancelRunningProcess() );
-        to.setAllowWithdrawTask( from.getAllowWithdrawTask() );
-        to.setProcessIdRule( from.getProcessIdRule() );
-        to.setAutoApprovalType( from.getAutoApprovalType() );
-        to.setTitleSetting( from.getTitleSetting() );
-        to.setSummarySetting( from.getSummarySetting() );
-        to.setProcessBeforeTriggerSetting( from.getProcessBeforeTriggerSetting() );
-        to.setProcessAfterTriggerSetting( from.getProcessAfterTriggerSetting() );
-        to.setTaskBeforeTriggerSetting( from.getTaskBeforeTriggerSetting() );
-        to.setTaskAfterTriggerSetting( from.getTaskAfterTriggerSetting() );
-        to.setPrintTemplateSetting( from.getPrintTemplateSetting() );
-        to.setCategory( from.getCategory() );
-        to.setModelType( from.getModelType() );
-        to.setModelId( from.getModelId() );
-        to.setFormConf( from.getFormConf() );
-        if ( to.getFormFields() != null ) {
-            List<String> list3 = from.getFormFields();
-            if ( list3 != null ) {
-                to.getFormFields().clear();
-                to.getFormFields().addAll( list3 );
-            }
-            else {
-                to.setFormFields( null );
-            }
-        }
-        else {
-            List<String> list3 = from.getFormFields();
-            if ( list3 != null ) {
-                to.setFormFields( new ArrayList<String>( list3 ) );
-            }
-        }
-        to.setSimpleModel( from.getSimpleModel() );
-        to.setSort( from.getSort() );
-    }
-}

BIN
yudao-module-report/target/classes/cn/iocoder/yudao/module/report/controller/admin/goview/GoViewDataController.class


BIN
yudao-module-report/target/classes/cn/iocoder/yudao/module/report/controller/admin/goview/vo/data/GoViewDataGetBySqlReqVO.class


BIN
yudao-module-report/target/classes/cn/iocoder/yudao/module/report/controller/admin/goview/vo/data/GoViewDataRespVO.class


BIN
yudao-module-report/target/classes/cn/iocoder/yudao/module/report/controller/admin/goview/vo/project/GoViewProjectRespVO.class


BIN
yudao-module-report/target/classes/cn/iocoder/yudao/module/report/convert/goview/GoViewProjectConvert.class


BIN
yudao-module-report/target/classes/cn/iocoder/yudao/module/report/dal/mysql/goview/GoViewProjectMapper.class


BIN
yudao-module-report/target/classes/cn/iocoder/yudao/module/report/framework/jmreport/core/service/JmOnlDragExternalServiceImpl.class


BIN
yudao-module-report/target/classes/cn/iocoder/yudao/module/report/framework/jmreport/core/service/JmReportTokenServiceImpl.class


+ 0 - 11
yudao-module-system/target/generated-sources/annotations/cn/iocoder/yudao/module/system/convert/oauth2/OAuth2OpenConvertImpl.java

@@ -1,11 +0,0 @@
-package cn.iocoder.yudao.module.system.convert.oauth2;
-
-import javax.annotation.processing.Generated;
-
-@Generated(
-    value = "org.mapstruct.ap.MappingProcessor",
-    date = "2025-12-25T10:46:23+0800",
-    comments = "version: 1.6.3, compiler: javac, environment: Java 17.0.17 (Oracle Corporation)"
-)
-public class OAuth2OpenConvertImpl implements OAuth2OpenConvert {
-}

+ 0 - 34
yudao-ui/yudao-ui-admin-vue3/.env.local

@@ -1,34 +0,0 @@
-# 本地开发环境:本地启动所有项目(前端、后端、APP)时使用,不依赖外部环境
-NODE_ENV=development
-
-VITE_DEV=true
-
-# 请求路径
-VITE_BASE_URL='http://localhost:48080'
-
-# 文件上传类型:server - 后端上传, client - 前端直连上传,仅支持 S3 服务
-VITE_UPLOAD_TYPE=server
-
-# 接口地址
-VITE_API_URL=/admin-api
-
-# 是否删除debugger
-VITE_DROP_DEBUGGER=false
-
-# 是否删除console.log
-VITE_DROP_CONSOLE=false
-
-# 是否sourcemap
-VITE_SOURCEMAP=false
-
-# 打包路径
-VITE_BASE_PATH=/
-
-# 商城H5会员端域名
-VITE_MALL_H5_DOMAIN='http://localhost:3000'
-
-# 验证码的开关
-VITE_APP_CAPTCHA_ENABLE=true
-
-# GoView域名
-VITE_GOVIEW_URL='http://127.0.0.1:3000'

+ 0 - 16
yudao-ui/yudao-ui-admin-vue3/.vscode/launch.json

@@ -1,16 +0,0 @@
-{
-  // Use IntelliSense to learn about possible attributes.
-  // Hover to view descriptions of existing attributes.
-  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
-  "version": "0.2.0",
-  "configurations": [
-    {
-      "type": "msedge",
-      "request": "launch",
-      "name": "Launch Edge against localhost",
-      "url": "http://localhost",
-      "webRoot": "${workspaceFolder}/src",
-      "sourceMaps": true
-    }
-  ]
-}

+ 0 - 146
yudao-ui/yudao-ui-admin-vue3/.vscode/settings.json

@@ -1,146 +0,0 @@
-{
-  "typescript.tsdk": "node_modules/typescript/lib",
-  "npm.packageManager": "pnpm",
-  "editor.tabSize": 2,
-  "prettier.printWidth": 100, // 超过最大值换行
-  "editor.defaultFormatter": "esbenp.prettier-vscode",
-  "files.eol": "\n",
-  "search.exclude": {
-    "**/node_modules": true,
-    "**/*.log": true,
-    "**/*.log*": true,
-    "**/bower_components": true,
-    "**/dist": true,
-    "**/elehukouben": true,
-    "**/.git": true,
-    "**/.gitignore": true,
-    "**/.svn": true,
-    "**/.DS_Store": true,
-    "**/.idea": true,
-    "**/.vscode": false,
-    "**/yarn.lock": true,
-    "**/tmp": true,
-    "out": true,
-    "dist": true,
-    "node_modules": true,
-    "CHANGELOG.md": true,
-    "examples": true,
-    "res": true,
-    "screenshots": true,
-    "yarn-error.log": true,
-    "**/.yarn": true
-  },
-  "files.exclude": {
-    "**/.cache": true,
-    "**/.editorconfig": true,
-    "**/.eslintcache": true,
-    "**/bower_components": true,
-    "**/.idea": true,
-    "**/tmp": true,
-    "**/.git": true,
-    "**/.svn": true,
-    "**/.hg": true,
-    "**/CVS": true,
-    "**/.DS_Store": true
-  },
-  "files.watcherExclude": {
-    "**/.git/objects/**": true,
-    "**/.git/subtree-cache/**": true,
-    "**/.vscode/**": true,
-    "**/node_modules/**": true,
-    "**/tmp/**": true,
-    "**/bower_components/**": true,
-    "**/dist/**": true,
-    "**/yarn.lock": true
-  },
-  "stylelint.enable": true,
-  "stylelint.validate": ["css", "less", "postcss", "scss", "vue", "sass"],
-  "path-intellisense.mappings": {
-    "@/": "${workspaceRoot}/src"
-  },
-  "[javascriptreact]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[typescript]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[typescriptreact]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[html]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[css]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[less]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[scss]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "[markdown]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "editor.codeActionsOnSave": {
-    "source.fixAll.eslint": "explicit",
-    "source.fixAll.stylelint": "explicit"
-  },
-  "editor.formatOnSave": true,
-  "[vue]": {
-    "editor.defaultFormatter": "esbenp.prettier-vscode"
-  },
-  "i18n-ally.localesPaths": ["src/locales"],
-  "i18n-ally.keystyle": "nested",
-  "i18n-ally.sortKeys": true,
-  "i18n-ally.namespace": false,
-  "i18n-ally.enabledParsers": ["ts"],
-  "i18n-ally.sourceLanguage": "en",
-  "i18n-ally.displayLanguage": "zh-CN",
-  "i18n-ally.enabledFrameworks": ["vue", "react"],
-  "cSpell.words": [
-    "brotli",
-    "browserslist",
-    "codemirror",
-    "commitlint",
-    "cropperjs",
-    "echart",
-    "echarts",
-    "esnext",
-    "esno",
-    "iconify",
-    "INTLIFY",
-    "lintstagedrc",
-    "logicflow",
-    "nprogress",
-    "pinia",
-    "pnpm",
-    "qrcode",
-    "sider",
-    "sortablejs",
-    "stylelint",
-    "svgs",
-    "unocss",
-    "unplugin",
-    "unref",
-    "videojs",
-    "VITE",
-    "vitejs",
-    "vueuse",
-    "wangeditor",
-    "xingyu",
-    "yudao",
-    "zxcvbn"
-  ],
-  // 控制相关文件嵌套展示
-  "explorer.fileNesting.enabled": true,
-  "explorer.fileNesting.expand": false,
-  "explorer.fileNesting.patterns": {
-    "*.ts": "$(capture).test.ts, $(capture).test.tsx",
-    "*.tsx": "$(capture).test.ts, $(capture).test.tsx",
-    "*.env": "$(capture).env.*",
-    "package.json": "pnpm-lock.yaml,yarn.lock,LICENSE,README*,CHANGELOG*,CNAME,.gitattributes,.eslintrc-auto-import.json,.gitignore,prettier.config.js,stylelint.config.js,commitlint.config.js,.stylelintignore,.prettierignore,.gitpod.yml,.eslintrc.js,.eslintignore"
-  },
-  "terminal.integrated.scrollback": 10000,
-  "nuxt.isNuxtApp": false
-}

+ 0 - 99
yudao-ui/yudao-ui-admin-vue3/build/vite/index.ts

@@ -1,99 +0,0 @@
-import { resolve } from 'path'
-import Vue from '@vitejs/plugin-vue'
-import VueJsx from '@vitejs/plugin-vue-jsx'
-import progress from 'vite-plugin-progress'
-import EslintPlugin from 'vite-plugin-eslint'
-import PurgeIcons from 'vite-plugin-purge-icons'
-import { ViteEjsPlugin } from 'vite-plugin-ejs'
-// @ts-ignore
-import ElementPlus from 'unplugin-element-plus/vite'
-import AutoImport from 'unplugin-auto-import/vite'
-import Components from 'unplugin-vue-components/vite'
-import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
-import viteCompression from 'vite-plugin-compression'
-import topLevelAwait from 'vite-plugin-top-level-await'
-import VueI18nPlugin from '@intlify/unplugin-vue-i18n/vite'
-import { createSvgIconsPlugin } from 'vite-plugin-svg-icons-ng'
-import UnoCSS from 'unocss/vite'
-
-export function createVitePlugins() {
-  const root = process.cwd()
-
-  // 路径查找
-  function pathResolve(dir: string) {
-    return resolve(root, '.', dir)
-  }
-
-  return [
-    Vue(),
-    VueJsx(),
-    UnoCSS(),
-    progress(),
-    PurgeIcons(),
-    ElementPlus({}),
-    AutoImport({
-      include: [
-        /\.[tj]sx?$/, // .ts, .tsx, .js, .jsx
-        /\.vue$/,
-        /\.vue\?vue/, // .vue
-        /\.md$/ // .md
-      ],
-      imports: [
-        'vue',
-        'vue-router',
-        // 可额外添加需要 autoImport 的组件
-        {
-          '@/hooks/web/useI18n': ['useI18n'],
-          '@/hooks/web/useMessage': ['useMessage'],
-          '@/hooks/web/useTable': ['useTable'],
-          '@/hooks/web/useCrudSchemas': ['useCrudSchemas'],
-          '@/utils/formRules': ['required'],
-          '@/utils/dict': ['DICT_TYPE']
-        }
-      ],
-      dts: 'src/types/auto-imports.d.ts',
-      resolvers: [ElementPlusResolver()],
-      eslintrc: {
-        enabled: false, // Default `false`
-        filepath: './.eslintrc-auto-import.json', // Default `./.eslintrc-auto-import.json`
-        globalsPropValue: true // Default `true`, (true | false | 'readonly' | 'readable' | 'writable' | 'writeable')
-      }
-    }),
-    Components({
-      // 生成自定义 `auto-components.d.ts` 全局声明
-      dts: 'src/types/auto-components.d.ts',
-      // 自定义组件的解析器
-      resolvers: [ElementPlusResolver()],
-      globs: ["src/components/**/**.{vue, md}", '!src/components/DiyEditor/components/mobile/**']
-    }),
-    EslintPlugin({
-      cache: false,
-      include: ['src/**/*.vue', 'src/**/*.ts', 'src/**/*.tsx'] // 检查的文件
-    }),
-    VueI18nPlugin({
-      runtimeOnly: true,
-      compositionOnly: true,
-      include: [resolve(__dirname, 'src/locales/**')]
-    }),
-    createSvgIconsPlugin({
-      iconDirs: [pathResolve('src/assets/svgs')],
-      symbolId: 'icon-[dir]-[name]',
-    }),
-    viteCompression({
-      verbose: true, // 是否在控制台输出压缩结果
-      disable: false, // 是否禁用
-      threshold: 10240, // 体积大于 threshold 才会被压缩,单位 b
-      algorithm: 'gzip', // 压缩算法,可选 [ 'gzip' , 'brotliCompress' ,'deflate' , 'deflateRaw']
-      ext: '.gz', // 生成的压缩包后缀
-      deleteOriginFile: false //压缩后是否删除源文件
-    }),
-    ViteEjsPlugin(),
-    topLevelAwait({
-      // https://juejin.cn/post/7152191742513512485
-      // The export name of top-level await promise for each chunk module
-      promiseExportName: '__tla',
-      // The function to generate import names of top-level await promise in each chunk module
-      promiseImportName: (i) => `__tla_${i}`
-    })
-  ]
-}

+ 0 - 124
yudao-ui/yudao-ui-admin-vue3/build/vite/optimize.ts

@@ -1,124 +0,0 @@
-const include = [
-  'qs',
-  'url',
-  'vue',
-  'sass',
-  'mitt',
-  'axios',
-  'pinia',
-  'dayjs',
-  'qrcode',
-  'unocss',
-  'vue-router',
-  'vue-types',
-  'vue-i18n',
-  'crypto-js',
-  'cropperjs',
-  'lodash-es',
-  'nprogress',
-  'web-storage-cache',
-  '@iconify/iconify',
-  '@vueuse/core',
-  '@zxcvbn-ts/core',
-  'echarts/core',
-  'echarts/charts',
-  'echarts/components',
-  'echarts/renderers',
-  'echarts-wordcloud',
-  '@wangeditor-next/editor',
-  '@wangeditor-next/editor-for-vue',
-  '@microsoft/fetch-event-source',
-  'markdown-it',
-  'markmap-view',
-  'markmap-lib',
-  'markmap-toolbar',
-  'highlight.js',
-  'element-plus',
-  'element-plus/es',
-  'element-plus/es/locale/lang/zh-cn',
-  'element-plus/es/locale/lang/en',
-  'element-plus/es/components/avatar/style/css',
-  'element-plus/es/components/space/style/css',
-  'element-plus/es/components/backtop/style/css',
-  'element-plus/es/components/form/style/css',
-  'element-plus/es/components/radio-group/style/css',
-  'element-plus/es/components/radio/style/css',
-  'element-plus/es/components/checkbox/style/css',
-  'element-plus/es/components/checkbox-group/style/css',
-  'element-plus/es/components/switch/style/css',
-  'element-plus/es/components/time-picker/style/css',
-  'element-plus/es/components/date-picker/style/css',
-  'element-plus/es/components/descriptions/style/css',
-  'element-plus/es/components/descriptions-item/style/css',
-  'element-plus/es/components/link/style/css',
-  'element-plus/es/components/tooltip/style/css',
-  'element-plus/es/components/drawer/style/css',
-  'element-plus/es/components/dialog/style/css',
-  'element-plus/es/components/checkbox-button/style/css',
-  'element-plus/es/components/option-group/style/css',
-  'element-plus/es/components/radio-button/style/css',
-  'element-plus/es/components/cascader/style/css',
-  'element-plus/es/components/color-picker/style/css',
-  'element-plus/es/components/input-number/style/css',
-  'element-plus/es/components/rate/style/css',
-  'element-plus/es/components/select-v2/style/css',
-  'element-plus/es/components/tree-select/style/css',
-  'element-plus/es/components/slider/style/css',
-  'element-plus/es/components/time-select/style/css',
-  'element-plus/es/components/autocomplete/style/css',
-  'element-plus/es/components/image-viewer/style/css',
-  'element-plus/es/components/upload/style/css',
-  'element-plus/es/components/col/style/css',
-  'element-plus/es/components/form-item/style/css',
-  'element-plus/es/components/alert/style/css',
-  'element-plus/es/components/breadcrumb/style/css',
-  'element-plus/es/components/select/style/css',
-  'element-plus/es/components/input/style/css',
-  'element-plus/es/components/breadcrumb-item/style/css',
-  'element-plus/es/components/tag/style/css',
-  'element-plus/es/components/pagination/style/css',
-  'element-plus/es/components/table/style/css',
-  'element-plus/es/components/table-v2/style/css',
-  'element-plus/es/components/table-column/style/css',
-  'element-plus/es/components/card/style/css',
-  'element-plus/es/components/row/style/css',
-  'element-plus/es/components/button/style/css',
-  'element-plus/es/components/menu/style/css',
-  'element-plus/es/components/sub-menu/style/css',
-  'element-plus/es/components/menu-item/style/css',
-  'element-plus/es/components/option/style/css',
-  'element-plus/es/components/dropdown/style/css',
-  'element-plus/es/components/dropdown-menu/style/css',
-  'element-plus/es/components/dropdown-item/style/css',
-  'element-plus/es/components/skeleton/style/css',
-  'element-plus/es/components/skeleton/style/css',
-  'element-plus/es/components/backtop/style/css',
-  'element-plus/es/components/menu/style/css',
-  'element-plus/es/components/sub-menu/style/css',
-  'element-plus/es/components/menu-item/style/css',
-  'element-plus/es/components/dropdown/style/css',
-  'element-plus/es/components/tree/style/css',
-  'element-plus/es/components/dropdown-menu/style/css',
-  'element-plus/es/components/dropdown-item/style/css',
-  'element-plus/es/components/badge/style/css',
-  'element-plus/es/components/breadcrumb/style/css',
-  'element-plus/es/components/breadcrumb-item/style/css',
-  'element-plus/es/components/image/style/css',
-  'element-plus/es/components/collapse-transition/style/css',
-  'element-plus/es/components/timeline/style/css',
-  'element-plus/es/components/timeline-item/style/css',
-  'element-plus/es/components/collapse/style/css',
-  'element-plus/es/components/collapse-item/style/css',
-  'element-plus/es/components/button-group/style/css',
-  'element-plus/es/components/text/style/css',
-  'element-plus/es/components/segmented/style/css',
-  '@element-plus/icons-vue',
-  'element-plus/es/components/footer/style/css',
-  'element-plus/es/components/empty/style/css',
-  'element-plus/es/components/mention/style/css',
-  'element-plus/es/components/progress/style/css'
-]
-
-const exclude = ['@iconify/json']
-
-export { include, exclude }

+ 0 - 62
yudao-ui/yudao-ui-admin-vue3/src/api/erp/sale/out/index.ts

@@ -1,62 +0,0 @@
-import request from '@/config/axios'
-
-// ERP 销售出库 VO
-export interface SaleOutVO {
-  id: number // 销售出库编号
-  no: string // 销售出库号
-  customerId: number // 客户编号
-  outTime: Date // 出库时间
-  totalCount: number // 合计数量
-  totalPrice: number // 合计金额,单位:元
-  status: number // 状态
-  remark: string // 备注
-}
-
-// ERP 销售出库 API
-export const SaleOutApi = {
-  // 查询销售出库分页
-  getSaleOutPage: async (params: any) => {
-    return await request.get({ url: `/erp/sale-out/page`, params })
-  },
-
-  // 查询销售出库详情
-  getSaleOut: async (id: number) => {
-    return await request.get({ url: `/erp/sale-out/get?id=` + id })
-  },
-
-  // 新增销售出库
-  createSaleOut: async (data: SaleOutVO) => {
-    return await request.post({ url: `/erp/sale-out/create`, data })
-  },
-
-  // 修改销售出库
-  updateSaleOut: async (data: SaleOutVO) => {
-    return await request.put({ url: `/erp/sale-out/update`, data })
-  },
-
-  // 更新销售出库的状态
-  updateSaleOutStatus: async (id: number, status: number) => {
-    return await request.put({
-      url: `/erp/sale-out/update-status`,
-      params: {
-        id,
-        status
-      }
-    })
-  },
-
-  // 删除销售出库
-  deleteSaleOut: async (ids: number[]) => {
-    return await request.delete({
-      url: `/erp/sale-out/delete`,
-      params: {
-        ids: ids.join(',')
-      }
-    })
-  },
-
-  // 导出销售出库 Excel
-  exportSaleOut: async (params: any) => {
-    return await request.download({ url: `/erp/sale-out/export-excel`, params })
-  }
-}

+ 0 - 62
yudao-ui/yudao-ui-admin-vue3/src/api/erp/stock/out/index.ts

@@ -1,62 +0,0 @@
-import request from '@/config/axios'
-
-// ERP 其它出库单 VO
-export interface StockOutVO {
-  id: number // 出库编号
-  no: string // 出库单号
-  customerId: number // 客户编号
-  outTime: Date // 出库时间
-  totalCount: number // 合计数量
-  totalPrice: number // 合计金额,单位:元
-  status: number // 状态
-  remark: string // 备注
-}
-
-// ERP 其它出库单 API
-export const StockOutApi = {
-  // 查询其它出库单分页
-  getStockOutPage: async (params: any) => {
-    return await request.get({ url: `/erp/stock-out/page`, params })
-  },
-
-  // 查询其它出库单详情
-  getStockOut: async (id: number) => {
-    return await request.get({ url: `/erp/stock-out/get?id=` + id })
-  },
-
-  // 新增其它出库单
-  createStockOut: async (data: StockOutVO) => {
-    return await request.post({ url: `/erp/stock-out/create`, data })
-  },
-
-  // 修改其它出库单
-  updateStockOut: async (data: StockOutVO) => {
-    return await request.put({ url: `/erp/stock-out/update`, data })
-  },
-
-  // 更新其它出库单的状态
-  updateStockOutStatus: async (id: number, status: number) => {
-    return await request.put({
-      url: `/erp/stock-out/update-status`,
-      params: {
-        id,
-        status
-      }
-    })
-  },
-
-  // 删除其它出库单
-  deleteStockOut: async (ids: number[]) => {
-    return await request.delete({
-      url: `/erp/stock-out/delete`,
-      params: {
-        ids: ids.join(',')
-      }
-    })
-  },
-
-  // 导出其它出库单 Excel
-  exportStockOut: async (params) => {
-    return await request.download({ url: `/erp/stock-out/export-excel`, params })
-  }
-}

+ 0 - 343
yudao-ui/yudao-ui-admin-vue3/src/views/erp/sale/out/SaleOutForm.vue

@@ -1,343 +0,0 @@
-<template>
-  <Dialog :title="dialogTitle" v-model="dialogVisible" width="1440">
-    <el-form
-      ref="formRef"
-      :model="formData"
-      :rules="formRules"
-      label-width="100px"
-      v-loading="formLoading"
-      :disabled="disabled"
-    >
-      <el-row :gutter="20">
-        <el-col :span="8">
-          <el-form-item label="出库单号" prop="no">
-            <el-input disabled v-model="formData.no" placeholder="保存时自动生成" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="出库时间" prop="outTime">
-            <el-date-picker
-              v-model="formData.outTime"
-              type="date"
-              value-format="x"
-              placeholder="选择出库时间"
-              class="!w-1/1"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="关联订单" prop="orderNo">
-            <el-input v-model="formData.orderNo" readonly>
-              <template #append>
-                <el-button @click="openSaleOrderOutEnableList">
-                  <Icon icon="ep:search" /> 选择
-                </el-button>
-              </template>
-            </el-input>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="客户" prop="customerId">
-            <el-select
-              v-model="formData.customerId"
-              clearable
-              filterable
-              disabled
-              placeholder="请选择客户"
-              class="!w-1/1"
-            >
-              <el-option
-                v-for="item in customerList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="销售人员" prop="saleUserId">
-            <el-select
-              v-model="formData.saleUserId"
-              clearable
-              filterable
-              placeholder="请选择销售人员"
-              class="!w-1/1"
-            >
-              <el-option
-                v-for="item in userList"
-                :key="item.id"
-                :label="item.nickname"
-                :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="16">
-          <el-form-item label="备注" prop="remark">
-            <el-input
-              type="textarea"
-              v-model="formData.remark"
-              :rows="1"
-              placeholder="请输入备注"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="附件" prop="fileUrl">
-            <UploadFile :is-show-tip="false" v-model="formData.fileUrl" :limit="1" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-      <!-- 子表的表单 -->
-      <ContentWrap>
-        <el-tabs v-model="subTabsName" class="-mt-15px -mb-10px">
-          <el-tab-pane label="出库产品清单" name="item">
-            <SaleOutItemForm ref="itemFormRef" :items="formData.items" :disabled="disabled" />
-          </el-tab-pane>
-        </el-tabs>
-      </ContentWrap>
-      <el-row :gutter="20">
-        <el-col :span="8">
-          <el-form-item label="优惠率(%)" prop="discountPercent">
-            <el-input-number
-              v-model="formData.discountPercent"
-              controls-position="right"
-              :min="0"
-              :precision="2"
-              placeholder="请输入优惠率"
-              class="!w-1/1"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="收款优惠" prop="discountPrice">
-            <el-input
-              disabled
-              v-model="formData.discountPrice"
-              :formatter="erpPriceInputFormatter"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="优惠后金额">
-            <el-input
-              disabled
-              :model-value="formData.totalPrice - formData.otherPrice"
-              :formatter="erpPriceInputFormatter"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="其它费用" prop="otherPrice">
-            <el-input-number
-              v-model="formData.otherPrice"
-              controls-position="right"
-              :min="0"
-              :precision="2"
-              placeholder="请输入其它费用"
-              class="!w-1/1"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="结算账户" prop="accountId">
-            <el-select
-              v-model="formData.accountId"
-              clearable
-              filterable
-              placeholder="请选择结算账户"
-              class="!w-1/1"
-            >
-              <el-option
-                v-for="item in accountList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="应收金额">
-            <el-input disabled v-model="formData.totalPrice" :formatter="erpPriceInputFormatter" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <template #footer>
-      <el-button @click="submitForm" type="primary" :disabled="formLoading" v-if="!disabled">
-        确 定
-      </el-button>
-      <el-button @click="dialogVisible = false">取 消</el-button>
-    </template>
-  </Dialog>
-
-  <!-- 可出库的订单列表 -->
-  <SaleOrderOutEnableList ref="saleOrderOutEnableListRef" @success="handleSaleOrderChange" />
-</template>
-<script setup lang="ts">
-import { SaleOutApi, SaleOutVO } from '@/api/erp/sale/out'
-import SaleOutItemForm from './components/SaleOutItemForm.vue'
-import { CustomerApi, CustomerVO } from '@/api/erp/sale/customer'
-import { AccountApi, AccountVO } from '@/api/erp/finance/account'
-import { erpPriceInputFormatter, erpPriceMultiply } from '@/utils'
-import SaleOrderOutEnableList from '@/views/erp/sale/order/components/SaleOrderOutEnableList.vue'
-import { SaleOrderVO } from '@/api/erp/sale/order'
-import * as UserApi from '@/api/system/user'
-
-/** ERP 销售出库表单 */
-defineOptions({ name: 'SaleOutForm' })
-
-const { t } = useI18n() // 国际化
-const message = useMessage() // 消息弹窗
-
-const dialogVisible = ref(false) // 弹窗的是否展示
-const dialogTitle = ref('') // 弹窗的标题
-const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
-const formType = ref('') // 表单的类型:create - 新增;update - 修改;detail - 详情
-const formData = ref({
-  id: undefined,
-  customerId: undefined,
-  accountId: undefined,
-  saleUserId: undefined,
-  outTime: undefined,
-  remark: undefined,
-  fileUrl: '',
-  discountPercent: 0,
-  discountPrice: 0,
-  totalPrice: 0,
-  otherPrice: 0,
-  orderNo: undefined,
-  items: [],
-  no: undefined // 出库单号,后端返回
-})
-const formRules = reactive({
-  customerId: [{ required: true, message: '客户不能为空', trigger: 'blur' }],
-  outTime: [{ required: true, message: '出库时间不能为空', trigger: 'blur' }]
-})
-const disabled = computed(() => formType.value === 'detail')
-const formRef = ref() // 表单 Ref
-const customerList = ref<CustomerVO[]>([]) // 客户列表
-const accountList = ref<AccountVO[]>([]) // 账户列表
-const userList = ref<UserApi.UserVO[]>([]) // 用户列表
-
-/** 子表的表单 */
-const subTabsName = ref('item')
-const itemFormRef = ref()
-
-/** 计算 discountPrice、totalPrice 价格 */
-watch(
-  () => formData.value,
-  (val) => {
-    if (!val) {
-      return
-    }
-    // 计算
-    const totalPrice = val.items.reduce((prev, curr) => prev + curr.totalPrice, 0)
-    const discountPrice =
-      val.discountPercent != null ? erpPriceMultiply(totalPrice, val.discountPercent / 100.0) : 0
-    formData.value.discountPrice = discountPrice
-    formData.value.totalPrice = totalPrice - discountPrice + val.otherPrice
-  },
-  { deep: true }
-)
-
-/** 打开弹窗 */
-const open = async (type: string, id?: number) => {
-  dialogVisible.value = true
-  dialogTitle.value = t('action.' + type)
-  formType.value = type
-  resetForm()
-  // 修改时,设置数据
-  if (id) {
-    formLoading.value = true
-    try {
-      formData.value = await SaleOutApi.getSaleOut(id)
-    } finally {
-      formLoading.value = false
-    }
-  }
-  // 加载客户列表
-  customerList.value = await CustomerApi.getCustomerSimpleList()
-  // 加载用户列表
-  userList.value = await UserApi.getSimpleUserList()
-  // 加载账户列表
-  accountList.value = await AccountApi.getAccountSimpleList()
-  const defaultAccount = accountList.value.find((item) => item.defaultStatus)
-  if (defaultAccount) {
-    formData.value.accountId = defaultAccount.id
-  }
-}
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
-
-/** 打开【可出库的订单列表】弹窗 */
-const saleOrderOutEnableListRef = ref() // 可出库的订单列表 Ref
-const openSaleOrderOutEnableList = () => {
-  saleOrderOutEnableListRef.value.open()
-}
-
-const handleSaleOrderChange = (order: SaleOrderVO) => {
-  // 将订单设置到出库单
-  formData.value.orderId = order.id
-  formData.value.orderNo = order.no
-  formData.value.customerId = order.customerId
-  formData.value.accountId = order.accountId
-  formData.value.saleUserId = order.saleUserId
-  formData.value.discountPercent = order.discountPercent
-  formData.value.remark = order.remark
-  formData.value.fileUrl = order.fileUrl
-  // 将订单项设置到出库单项
-  order.items.forEach((item) => {
-    item.totalCount = item.count
-    item.count = item.totalCount - item.outCount
-    item.orderItemId = item.id
-    item.id = undefined
-  })
-  formData.value.items = order.items.filter((item) => item.count > 0)
-}
-
-/** 提交表单 */
-const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
-const submitForm = async () => {
-  // 校验表单
-  await formRef.value.validate()
-  await itemFormRef.value.validate()
-  // 提交请求
-  formLoading.value = true
-  try {
-    const data = formData.value as unknown as SaleOutVO
-    if (formType.value === 'create') {
-      await SaleOutApi.createSaleOut(data)
-      message.success(t('common.createSuccess'))
-    } else {
-      await SaleOutApi.updateSaleOut(data)
-      message.success(t('common.updateSuccess'))
-    }
-    dialogVisible.value = false
-    // 发送操作成功的事件
-    emit('success')
-  } finally {
-    formLoading.value = false
-  }
-}
-
-/** 重置表单 */
-const resetForm = () => {
-  formData.value = {
-    id: undefined,
-    customerId: undefined,
-    accountId: undefined,
-    saleUserId: undefined,
-    outTime: undefined,
-    remark: undefined,
-    fileUrl: undefined,
-    discountPercent: 0,
-    discountPrice: 0,
-    totalPrice: 0,
-    otherPrice: 0,
-    items: []
-  }
-  formRef.value?.resetFields()
-}
-</script>

+ 0 - 300
yudao-ui/yudao-ui-admin-vue3/src/views/erp/sale/out/components/SaleOutItemForm.vue

@@ -1,300 +0,0 @@
-<template>
-  <el-form
-    ref="formRef"
-    :model="formData"
-    :rules="formRules"
-    v-loading="formLoading"
-    label-width="0px"
-    :inline-message="true"
-    :disabled="disabled"
-  >
-    <el-table :data="formData" show-summary :summary-method="getSummaries" class="-mt-10px">
-      <el-table-column label="序号" type="index" align="center" width="60" />
-      <el-table-column label="仓库名称" min-width="125">
-        <template #default="{ row, $index }">
-          <el-form-item
-            :prop="`${$index}.warehouseId`"
-            :rules="formRules.warehouseId"
-            class="mb-0px!"
-          >
-            <el-select
-              v-model="row.warehouseId"
-              clearable
-              filterable
-              placeholder="请选择仓库"
-              @change="onChangeWarehouse($event, row)"
-            >
-              <el-option
-                v-for="item in warehouseList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="产品名称" min-width="180">
-        <template #default="{ row }">
-          <el-form-item class="mb-0px!">
-            <el-input disabled v-model="row.productName" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="库存" min-width="100">
-        <template #default="{ row }">
-          <el-form-item class="mb-0px!">
-            <el-input disabled v-model="row.stockCount" :formatter="erpCountInputFormatter" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="条码" min-width="150">
-        <template #default="{ row }">
-          <el-form-item class="mb-0px!">
-            <el-input disabled v-model="row.productBarCode" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="单位" min-width="80">
-        <template #default="{ row }">
-          <el-form-item class="mb-0px!">
-            <el-input disabled v-model="row.productUnitName" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column
-        label="原数量"
-        fixed="right"
-        min-width="80"
-        v-if="formData[0]?.totalCount != null"
-      >
-        <template #default="{ row }">
-          <el-form-item class="mb-0px!">
-            <el-input disabled v-model="row.totalCount" :formatter="erpCountInputFormatter" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column
-        label="已出库"
-        fixed="right"
-        min-width="80"
-        v-if="formData[0]?.outCount != null"
-      >
-        <template #default="{ row }">
-          <el-form-item class="mb-0px!">
-            <el-input disabled v-model="row.outCount" :formatter="erpCountInputFormatter" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="数量" prop="count" fixed="right" min-width="140">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.count`" :rules="formRules.count" class="mb-0px!">
-            <el-input-number
-              v-model="row.count"
-              controls-position="right"
-              :min="0.001"
-              :precision="3"
-              class="!w-100%"
-            />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="产品单价" fixed="right" min-width="120">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.productPrice`" class="mb-0px!">
-            <el-input-number
-              v-model="row.productPrice"
-              controls-position="right"
-              :min="0.01"
-              :precision="2"
-              class="!w-100%"
-            />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="金额" prop="totalProductPrice" fixed="right" min-width="100">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.totalProductPrice`" class="mb-0px!">
-            <el-input
-              disabled
-              v-model="row.totalProductPrice"
-              :formatter="erpPriceInputFormatter"
-            />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="税率(%)" fixed="right" min-width="115">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.taxPercent`" class="mb-0px!">
-            <el-input-number
-              v-model="row.taxPercent"
-              controls-position="right"
-              :min="0"
-              :precision="2"
-              class="!w-100%"
-            />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="税额" prop="taxPrice" fixed="right" min-width="120">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.taxPrice`" class="mb-0px!">
-            <el-form-item :prop="`${$index}.taxPrice`" class="mb-0px!">
-              <el-input disabled v-model="row.taxPrice" :formatter="erpPriceInputFormatter" />
-            </el-form-item>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="税额合计" prop="totalPrice" fixed="right" min-width="100">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.totalPrice`" class="mb-0px!">
-            <el-input disabled v-model="row.totalPrice" :formatter="erpPriceInputFormatter" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="备注" min-width="150">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.remark`" class="mb-0px!">
-            <el-input v-model="row.remark" placeholder="请输入备注" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column align="center" fixed="right" label="操作" width="60">
-        <template #default="{ $index }">
-          <el-button :disabled="formData.length === 1" @click="handleDelete($index)" link>
-            —
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </el-form>
-</template>
-<script setup lang="ts">
-import { StockApi } from '@/api/erp/stock/stock'
-import {
-  erpCountInputFormatter,
-  erpPriceInputFormatter,
-  erpPriceMultiply,
-  getSumValue
-} from '@/utils'
-import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
-
-const props = defineProps<{
-  items: undefined
-  disabled: false
-}>()
-const formLoading = ref(false) // 表单的加载中
-const formData = ref([])
-const formRules = reactive({
-  warehouseId: [{ required: true, message: '仓库不能为空', trigger: 'blur' }],
-  productId: [{ required: true, message: '产品不能为空', trigger: 'blur' }],
-  count: [{ required: true, message: '产品数量不能为空', trigger: 'blur' }]
-})
-const formRef = ref([]) // 表单 Ref
-const warehouseList = ref<WarehouseVO[]>([]) // 仓库列表
-const defaultWarehouse = ref<WarehouseVO>(undefined) // 默认仓库
-
-/** 初始化设置出库项 */
-watch(
-  () => props.items,
-  async (val) => {
-    val.forEach((item) => {
-      if (item.warehouseId == null) {
-        item.warehouseId = defaultWarehouse.value?.id
-      }
-      if (item.stockCount === null && item.warehouseId != null) {
-        setStockCount(item)
-      }
-    })
-    formData.value = val
-  },
-  { immediate: true }
-)
-
-/** 监听合同产品变化,计算合同产品总价 */
-watch(
-  () => formData.value,
-  (val) => {
-    if (!val || val.length === 0) {
-      return
-    }
-    // 循环处理
-    val.forEach((item) => {
-      item.totalProductPrice = erpPriceMultiply(item.productPrice, item.count)
-      item.taxPrice = erpPriceMultiply(item.totalProductPrice, item.taxPercent / 100.0)
-      if (item.totalProductPrice != null) {
-        item.totalPrice = item.totalProductPrice + (item.taxPrice || 0)
-      } else {
-        item.totalPrice = undefined
-      }
-    })
-  },
-  { deep: true }
-)
-
-/** 合计 */
-const getSummaries = (param: SummaryMethodProps) => {
-  const { columns, data } = param
-  const sums: string[] = []
-  columns.forEach((column, index: number) => {
-    if (index === 0) {
-      sums[index] = '合计'
-      return
-    }
-    if (['count', 'totalProductPrice', 'taxPrice', 'totalPrice'].includes(column.property)) {
-      const sum = getSumValue(data.map((item) => Number(item[column.property])))
-      sums[index] =
-        column.property === 'count' ? erpCountInputFormatter(sum) : erpPriceInputFormatter(sum)
-    } else {
-      sums[index] = ''
-    }
-  })
-
-  return sums
-}
-
-/** 新增按钮操作 */
-const handleAdd = () => {
-  const row = {
-    id: undefined,
-    productId: undefined,
-    productUnitName: undefined, // 产品单位
-    productBarCode: undefined, // 产品条码
-    productPrice: undefined,
-    stockCount: undefined,
-    count: 1,
-    totalProductPrice: undefined,
-    taxPercent: undefined,
-    taxPrice: undefined,
-    totalPrice: undefined,
-    remark: undefined
-  }
-  formData.value.push(row)
-}
-
-/** 删除按钮操作 */
-const handleDelete = (index: number) => {
-  formData.value.splice(index, 1)
-}
-
-/** 加载库存 */
-const setStockCount = async (row: any) => {
-  if (!row.productId) {
-    return
-  }
-  const count = await StockApi.getStockCount(row.productId)
-  row.stockCount = count || 0
-}
-
-/** 表单校验 */
-const validate = () => {
-  return formRef.value.validate()
-}
-defineExpose({ validate })
-
-/** 初始化 */
-onMounted(async () => {
-  warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
-  defaultWarehouse.value = warehouseList.value.find((item) => item.defaultStatus)
-})
-</script>

+ 0 - 199
yudao-ui/yudao-ui-admin-vue3/src/views/erp/sale/out/components/SaleOutReceiptEnableList.vue

@@ -1,199 +0,0 @@
-<!-- 可收款的销售出库单列表 -->
-<template>
-  <Dialog
-    title="选择销售出库(仅展示可收款)"
-    v-model="dialogVisible"
-    :appendToBody="true"
-    :scroll="true"
-    width="1080"
-  >
-    <ContentWrap>
-      <!-- 搜索工作栏 -->
-      <el-form
-        class="-mb-15px"
-        :model="queryParams"
-        ref="queryFormRef"
-        :inline="true"
-        label-width="68px"
-      >
-        <el-form-item label="出库单号" prop="no">
-          <el-input
-            v-model="queryParams.no"
-            placeholder="请输入出库单号"
-            clearable
-            @keyup.enter="handleQuery"
-            class="!w-160px"
-          />
-        </el-form-item>
-        <el-form-item label="产品" prop="productId">
-          <el-select
-            v-model="queryParams.productId"
-            clearable
-            filterable
-            placeholder="请选择产品"
-            class="!w-160px"
-          >
-            <el-option
-              v-for="item in productList"
-              :key="item.id"
-              :label="item.name"
-              :value="item.id"
-            />
-          </el-select>
-        </el-form-item>
-        <el-form-item label="出库时间" prop="orderTime">
-          <el-date-picker
-            v-model="queryParams.outTime"
-            value-format="YYYY-MM-DD HH:mm:ss"
-            type="daterange"
-            start-placeholder="开始日期"
-            end-placeholder="结束日期"
-            :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-            class="!w-160px"
-          />
-        </el-form-item>
-        <el-form-item>
-          <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
-          <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        </el-form-item>
-      </el-form>
-    </ContentWrap>
-
-    <ContentWrap>
-      <el-table
-        v-loading="loading"
-        :data="list"
-        :show-overflow-tooltip="true"
-        :stripe="true"
-        @selection-change="handleSelectionChange"
-      >
-        <el-table-column width="30" label="选择" type="selection" />
-        <el-table-column min-width="180" label="出库单号" align="center" prop="no" />
-        <el-table-column label="客户" align="center" prop="customerName" />
-        <el-table-column label="产品信息" align="center" prop="productNames" min-width="200" />
-        <el-table-column
-          label="出库时间"
-          align="center"
-          prop="outTime"
-          :formatter="dateFormatter2"
-          width="120px"
-        />
-        <el-table-column label="创建人" align="center" prop="creatorName" />
-        <el-table-column
-          label="应收金额"
-          align="center"
-          prop="totalPrice"
-          :formatter="erpPriceTableColumnFormatter"
-        />
-        <el-table-column
-          label="已收金额"
-          align="center"
-          prop="receiptPrice"
-          :formatter="erpPriceTableColumnFormatter"
-        />
-        <el-table-column label="未收金额" align="center">
-          <template #default="scope">
-            <span v-if="scope.row.receiptPrice === scope.row.totalPrice">0</span>
-            <el-tag type="danger" v-else>
-              {{ erpPriceInputFormatter(scope.row.totalPrice - scope.row.receiptPrice) }}
-            </el-tag>
-          </template>
-        </el-table-column>
-      </el-table>
-      <!-- 分页 -->
-      <Pagination
-        v-model:limit="queryParams.pageSize"
-        v-model:page="queryParams.pageNo"
-        :total="total"
-        @pagination="getList"
-      />
-    </ContentWrap>
-    <template #footer>
-      <el-button :disabled="!selectionList.length" type="primary" @click="submitForm">
-        确 定
-      </el-button>
-      <el-button @click="dialogVisible = false">取 消</el-button>
-    </template>
-  </Dialog>
-</template>
-<script lang="ts" setup>
-import { ElTable } from 'element-plus'
-import { dateFormatter2 } from '@/utils/formatTime'
-import { erpPriceInputFormatter, erpPriceTableColumnFormatter } from '@/utils'
-import { ProductApi, ProductVO } from '@/api/erp/product/product'
-import { SaleOutApi, SaleOutVO } from '@/api/erp/sale/out'
-
-defineOptions({ name: 'SaleOutReceiptEnableList' })
-
-const list = ref<SaleOutVO[]>([]) // 列表的数据
-const total = ref(0) // 列表的总页数
-const loading = ref(false) // 列表的加载中
-const dialogVisible = ref(false) // 弹窗的是否展示
-const queryParams = reactive({
-  pageNo: 1,
-  pageSize: 10,
-  no: undefined,
-  productId: undefined,
-  outTime: [],
-  receiptEnable: true,
-  customerId: undefined
-})
-const queryFormRef = ref() // 搜索的表单
-const productList = ref<ProductVO[]>([]) // 产品列表
-
-/** 选中操作 */
-const selectionList = ref<SaleOutVO[]>([])
-const handleSelectionChange = (rows: SaleOutVO[]) => {
-  selectionList.value = rows
-}
-
-/** 打开弹窗 */
-const open = async (customerId: number) => {
-  dialogVisible.value = true
-  await nextTick() // 等待,避免 queryFormRef 为空
-  // 加载可出库的订单列表
-  queryParams.customerId = customerId
-  await resetQuery()
-  // 加载产品列表
-  productList.value = await ProductApi.getProductSimpleList()
-}
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
-
-/** 提交选择 */
-const emits = defineEmits<{
-  (e: 'success', value: SaleOutVO[]): void
-}>()
-const submitForm = () => {
-  try {
-    emits('success', selectionList.value)
-  } finally {
-    // 关闭弹窗
-    dialogVisible.value = false
-  }
-}
-
-/** 加载列表  */
-const getList = async () => {
-  loading.value = true
-  try {
-    const data = await SaleOutApi.getSaleOutPage(queryParams)
-    list.value = data.list
-    total.value = data.total
-  } finally {
-    loading.value = false
-  }
-}
-
-/** 重置按钮操作 */
-const resetQuery = () => {
-  queryFormRef.value.resetFields()
-  handleQuery()
-}
-
-/** 搜索按钮操作 */
-const handleQuery = () => {
-  queryParams.pageNo = 1
-  selectionList.value = []
-  getList()
-}
-</script>

+ 0 - 438
yudao-ui/yudao-ui-admin-vue3/src/views/erp/sale/out/index.vue

@@ -1,438 +0,0 @@
-<template>
-  <doc-alert title="【销售】销售订单、出库、退货" url="https://doc.iocoder.cn/erp/sale/" />
-
-  <ContentWrap>
-    <!-- 搜索工作栏 -->
-    <el-form
-      class="-mb-15px"
-      :model="queryParams"
-      ref="queryFormRef"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="出库单号" prop="no">
-        <el-input
-          v-model="queryParams.no"
-          placeholder="请输入出库单号"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="产品" prop="productId">
-        <el-select
-          v-model="queryParams.productId"
-          clearable
-          filterable
-          placeholder="请选择产品"
-          class="!w-240px"
-        >
-          <el-option
-            v-for="item in productList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="出库时间" prop="outTime">
-        <el-date-picker
-          v-model="queryParams.outTime"
-          value-format="YYYY-MM-DD HH:mm:ss"
-          type="daterange"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="客户" prop="customerId">
-        <el-select
-          v-model="queryParams.customerId"
-          clearable
-          filterable
-          placeholder="请选择供客户"
-          class="!w-240px"
-        >
-          <el-option
-            v-for="item in customerList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="仓库" prop="warehouseId">
-        <el-select
-          v-model="queryParams.warehouseId"
-          clearable
-          filterable
-          placeholder="请选择仓库"
-          class="!w-240px"
-        >
-          <el-option
-            v-for="item in warehouseList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="创建人" prop="creator">
-        <el-select
-          v-model="queryParams.creator"
-          clearable
-          filterable
-          placeholder="请选择创建人"
-          class="!w-240px"
-        >
-          <el-option
-            v-for="item in userList"
-            :key="item.id"
-            :label="item.nickname"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="关联订单" prop="orderNo">
-        <el-input
-          v-model="queryParams.orderNo"
-          placeholder="请输入关联订单"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="结算账户" prop="accountId">
-        <el-select
-          v-model="queryParams.accountId"
-          clearable
-          filterable
-          placeholder="请选择结算账户"
-          class="!w-240px"
-        >
-          <el-option
-            v-for="item in accountList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="收款状态" prop="receiptStatus">
-        <el-select
-          v-model="queryParams.receiptStatus"
-          placeholder="请选择有款状态"
-          clearable
-          class="!w-240px"
-        >
-          <el-option label="未收款" value="0" />
-          <el-option label="部分收款" value="1" />
-          <el-option label="全部收款" value="2" />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="审核状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
-          <el-option
-            v-for="dict in getIntDictOptions(DICT_TYPE.ERP_AUDIT_STATUS)"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="备注" prop="remark">
-        <el-input
-          v-model="queryParams.remark"
-          placeholder="请输入备注"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
-        <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <el-button
-          type="primary"
-          plain
-          @click="openForm('create')"
-          v-hasPermi="['erp:sale-out:create']"
-        >
-          <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button>
-        <el-button
-          type="success"
-          plain
-          @click="handleExport"
-          :loading="exportLoading"
-          v-hasPermi="['erp:sale-out:export']"
-        >
-          <Icon icon="ep:download" class="mr-5px" /> 导出
-        </el-button>
-        <el-button
-          type="danger"
-          plain
-          @click="handleDelete(selectionList.map((item) => item.id))"
-          v-hasPermi="['erp:sale-out:delete']"
-          :disabled="selectionList.length === 0"
-        >
-          <Icon icon="ep:delete" class="mr-5px" /> 删除
-        </el-button>
-      </el-form-item>
-    </el-form>
-  </ContentWrap>
-
-  <!-- 列表 -->
-  <ContentWrap>
-    <el-table
-      v-loading="loading"
-      :data="list"
-      :stripe="true"
-      :show-overflow-tooltip="true"
-      @selection-change="handleSelectionChange"
-    >
-      <el-table-column width="30" label="选择" type="selection" />
-      <el-table-column min-width="180" label="出库单号" align="center" prop="no" />
-      <el-table-column label="产品信息" align="center" prop="productNames" min-width="200" />
-      <el-table-column label="客户" align="center" prop="customerName" />
-      <el-table-column
-        label="出库时间"
-        align="center"
-        prop="outTime"
-        :formatter="dateFormatter2"
-        width="120px"
-      />
-      <el-table-column label="创建人" align="center" prop="creatorName" />
-      <el-table-column
-        label="总数量"
-        align="center"
-        prop="totalCount"
-        :formatter="erpCountTableColumnFormatter"
-      />
-      <el-table-column
-        label="应收金额"
-        align="center"
-        prop="totalPrice"
-        :formatter="erpPriceTableColumnFormatter"
-      />
-      <el-table-column
-        label="已收金额"
-        align="center"
-        prop="receiptPrice"
-        :formatter="erpPriceTableColumnFormatter"
-      />
-      <el-table-column label="未收金额" align="center">
-        <template #default="scope">
-          <span v-if="scope.row.receiptPrice === scope.row.totalPrice">0</span>
-          <el-tag type="danger" v-else>
-            {{ erpPriceInputFormatter(scope.row.totalPrice - scope.row.receiptPrice) }}
-          </el-tag>
-        </template>
-      </el-table-column>
-      <el-table-column label="审核状态" align="center" fixed="right" width="90" prop="status">
-        <template #default="scope">
-          <dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.status" />
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center" fixed="right" width="220">
-        <template #default="scope">
-          <el-button
-            link
-            @click="openForm('detail', scope.row.id)"
-            v-hasPermi="['erp:sale-out:query']"
-          >
-            详情
-          </el-button>
-          <el-button
-            link
-            type="primary"
-            @click="openForm('update', scope.row.id)"
-            v-hasPermi="['erp:sale-out:update']"
-            :disabled="scope.row.status === 20"
-          >
-            编辑
-          </el-button>
-          <el-button
-            link
-            type="primary"
-            @click="handleUpdateStatus(scope.row.id, 20)"
-            v-hasPermi="['erp:sale-out:update-status']"
-            v-if="scope.row.status === 10"
-          >
-            审批
-          </el-button>
-          <el-button
-            link
-            type="danger"
-            @click="handleUpdateStatus(scope.row.id, 10)"
-            v-hasPermi="['erp:sale-out:update-status']"
-            v-else
-          >
-            反审批
-          </el-button>
-          <el-button
-            link
-            type="danger"
-            @click="handleDelete([scope.row.id])"
-            v-hasPermi="['erp:sale-out:delete']"
-          >
-            删除
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!-- 分页 -->
-    <Pagination
-      :total="total"
-      v-model:page="queryParams.pageNo"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </ContentWrap>
-
-  <!-- 表单弹窗:添加/修改 -->
-  <SaleOutForm ref="formRef" @success="getList" />
-</template>
-
-<script setup lang="ts">
-import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
-import { dateFormatter2 } from '@/utils/formatTime'
-import download from '@/utils/download'
-import { SaleOutApi, SaleOutVO } from '@/api/erp/sale/out'
-import SaleOutForm from './SaleOutForm.vue'
-import { ProductApi, ProductVO } from '@/api/erp/product/product'
-import { UserVO } from '@/api/system/user'
-import * as UserApi from '@/api/system/user'
-import {
-  erpCountTableColumnFormatter,
-  erpPriceInputFormatter,
-  erpPriceTableColumnFormatter
-} from '@/utils'
-import { CustomerApi, CustomerVO } from '@/api/erp/sale/customer'
-import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
-import { AccountApi, AccountVO } from '@/api/erp/finance/account'
-
-/** ERP 销售出库列表 */
-defineOptions({ name: 'ErpSaleOut' })
-
-const message = useMessage() // 消息弹窗
-const { t } = useI18n() // 国际化
-
-const loading = ref(true) // 列表的加载中
-const list = ref<SaleOutVO[]>([]) // 列表的数据
-const total = ref(0) // 列表的总页数
-const queryParams = reactive({
-  pageNo: 1,
-  pageSize: 10,
-  no: undefined,
-  customerId: undefined,
-  productId: undefined,
-  warehouseId: undefined,
-  outTime: [],
-  orderNo: undefined,
-  receiptStatus: undefined,
-  accountId: undefined,
-  status: undefined,
-  remark: undefined,
-  creator: undefined
-})
-const queryFormRef = ref() // 搜索的表单
-const exportLoading = ref(false) // 导出的加载中
-const productList = ref<ProductVO[]>([]) // 产品列表
-const customerList = ref<CustomerVO[]>([]) // 客户列表
-const userList = ref<UserVO[]>([]) // 用户列表
-const warehouseList = ref<WarehouseVO[]>([]) // 仓库列表
-const accountList = ref<AccountVO[]>([]) // 账户列表
-
-/** 查询列表 */
-const getList = async () => {
-  loading.value = true
-  try {
-    const data = await SaleOutApi.getSaleOutPage(queryParams)
-    list.value = data.list
-    total.value = data.total
-  } finally {
-    loading.value = false
-  }
-}
-
-/** 搜索按钮操作 */
-const handleQuery = () => {
-  queryParams.pageNo = 1
-  getList()
-}
-
-/** 重置按钮操作 */
-const resetQuery = () => {
-  queryFormRef.value.resetFields()
-  handleQuery()
-}
-
-/** 添加/修改操作 */
-const formRef = ref()
-const openForm = (type: string, id?: number) => {
-  formRef.value.open(type, id)
-}
-
-/** 删除按钮操作 */
-const handleDelete = async (ids: number[]) => {
-  try {
-    // 删除的二次确认
-    await message.delConfirm()
-    // 发起删除
-    await SaleOutApi.deleteSaleOut(ids)
-    message.success(t('common.delSuccess'))
-    // 刷新列表
-    await getList()
-    selectionList.value = selectionList.value.filter((item) => !ids.includes(item.id))
-  } catch {}
-}
-
-/** 审批/反审批操作 */
-const handleUpdateStatus = async (id: number, status: number) => {
-  try {
-    // 审批的二次确认
-    await message.confirm(`确定${status === 20 ? '审批' : '反审批'}该出库吗?`)
-    // 发起审批
-    await SaleOutApi.updateSaleOutStatus(id, status)
-    message.success(`${status === 20 ? '审批' : '反审批'}成功`)
-    // 刷新列表
-    await getList()
-  } catch {}
-}
-
-/** 导出按钮操作 */
-const handleExport = async () => {
-  try {
-    // 导出的二次确认
-    await message.exportConfirm()
-    // 发起导出
-    exportLoading.value = true
-    const data = await SaleOutApi.exportSaleOut(queryParams)
-    download.excel(data, '销售出库.xls')
-  } catch {
-  } finally {
-    exportLoading.value = false
-  }
-}
-
-/** 选中操作 */
-const selectionList = ref<SaleOutVO[]>([])
-const handleSelectionChange = (rows: SaleOutVO[]) => {
-  selectionList.value = rows
-}
-
-/** 初始化 **/
-onMounted(async () => {
-  await getList()
-  // 加载产品、仓库列表、客户
-  productList.value = await ProductApi.getProductSimpleList()
-  customerList.value = await CustomerApi.getCustomerSimpleList()
-  userList.value = await UserApi.getSimpleUserList()
-  warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
-  accountList.value = await AccountApi.getAccountSimpleList()
-})
-// TODO 芋艿:可优化功能:列表界面,支持导入
-// TODO 芋艿:可优化功能:详情界面,支持打印
-</script>

+ 0 - 170
yudao-ui/yudao-ui-admin-vue3/src/views/erp/stock/out/StockOutForm.vue

@@ -1,170 +0,0 @@
-<template>
-  <Dialog :title="dialogTitle" v-model="dialogVisible" width="1080">
-    <el-form
-      ref="formRef"
-      :model="formData"
-      :rules="formRules"
-      label-width="100px"
-      v-loading="formLoading"
-      :disabled="disabled"
-    >
-      <el-row :gutter="20">
-        <el-col :span="8">
-          <el-form-item label="出库单号" prop="no">
-            <el-input disabled v-model="formData.no" placeholder="保存时自动生成" />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="出库时间" prop="outTime">
-            <el-date-picker
-              v-model="formData.outTime"
-              type="date"
-              value-format="x"
-              placeholder="选择出库时间"
-              class="!w-1/1"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="客户" prop="customerId">
-            <el-select
-              v-model="formData.customerId"
-              clearable
-              filterable
-              placeholder="请选择客户"
-              class="!w-1/1"
-            >
-              <el-option
-                v-for="item in customerList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </el-col>
-        <el-col :span="16">
-          <el-form-item label="备注" prop="remark">
-            <el-input
-              type="textarea"
-              v-model="formData.remark"
-              :rows="1"
-              placeholder="请输入备注"
-            />
-          </el-form-item>
-        </el-col>
-        <el-col :span="8">
-          <el-form-item label="附件" prop="fileUrl">
-            <UploadFile :is-show-tip="false" v-model="formData.fileUrl" :limit="1" />
-          </el-form-item>
-        </el-col>
-      </el-row>
-    </el-form>
-    <!-- 子表的表单 -->
-    <ContentWrap>
-      <el-tabs v-model="subTabsName" class="-mt-15px -mb-10px">
-        <el-tab-pane label="出库产品清单" name="item">
-          <StockOutItemForm ref="itemFormRef" :items="formData.items" :disabled="disabled" />
-        </el-tab-pane>
-      </el-tabs>
-    </ContentWrap>
-    <template #footer>
-      <el-button @click="submitForm" type="primary" :disabled="formLoading" v-if="!disabled">
-        确 定
-      </el-button>
-      <el-button @click="dialogVisible = false">取 消</el-button>
-    </template>
-  </Dialog>
-</template>
-<script setup lang="ts">
-import { StockOutApi, StockOutVO } from '@/api/erp/stock/out'
-import StockOutItemForm from './components/StockOutItemForm.vue'
-import { CustomerApi, CustomerVO } from '@/api/erp/sale/customer'
-
-/** ERP 其它出库单表单 */
-defineOptions({ name: 'StockOutForm' })
-
-const { t } = useI18n() // 国际化
-const message = useMessage() // 消息弹窗
-
-const dialogVisible = ref(false) // 弹窗的是否展示
-const dialogTitle = ref('') // 弹窗的标题
-const formLoading = ref(false) // 表单的加载中:1)修改时的数据加载;2)提交的按钮禁用
-const formType = ref('') // 表单的类型:create - 新增;update - 修改;detail - 详情
-const formData = ref({
-  id: undefined,
-  customerId: undefined,
-  outTime: undefined,
-  remark: undefined,
-  fileUrl: '',
-  items: []
-})
-const formRules = reactive({
-  outTime: [{ required: true, message: '出库时间不能为空', trigger: 'blur' }]
-})
-const disabled = computed(() => formType.value === 'detail')
-const formRef = ref() // 表单 Ref
-const customerList = ref<CustomerVO[]>([]) // 客户列表
-
-/** 子表的表单 */
-const subTabsName = ref('item')
-const itemFormRef = ref()
-
-/** 打开弹窗 */
-const open = async (type: string, id?: number) => {
-  dialogVisible.value = true
-  dialogTitle.value = t('action.' + type)
-  formType.value = type
-  resetForm()
-  // 修改时,设置数据
-  if (id) {
-    formLoading.value = true
-    try {
-      formData.value = await StockOutApi.getStockOut(id)
-    } finally {
-      formLoading.value = false
-    }
-  }
-  // 加载客户列表
-  customerList.value = await CustomerApi.getCustomerSimpleList()
-}
-defineExpose({ open }) // 提供 open 方法,用于打开弹窗
-
-/** 提交表单 */
-const emit = defineEmits(['success']) // 定义 success 事件,用于操作成功后的回调
-const submitForm = async () => {
-  // 校验表单
-  await formRef.value.validate()
-  await itemFormRef.value.validate()
-  // 提交请求
-  formLoading.value = true
-  try {
-    const data = formData.value as unknown as StockOutVO
-    if (formType.value === 'create') {
-      await StockOutApi.createStockOut(data)
-      message.success(t('common.createSuccess'))
-    } else {
-      await StockOutApi.updateStockOut(data)
-      message.success(t('common.updateSuccess'))
-    }
-    dialogVisible.value = false
-    // 发送操作成功的事件
-    emit('success')
-  } finally {
-    formLoading.value = false
-  }
-}
-
-/** 重置表单 */
-const resetForm = () => {
-  formData.value = {
-    id: undefined,
-    customerId: undefined,
-    outTime: undefined,
-    remark: undefined,
-    fileUrl: undefined,
-    items: []
-  }
-  formRef.value?.resetFields()
-}
-</script>

+ 0 - 267
yudao-ui/yudao-ui-admin-vue3/src/views/erp/stock/out/components/StockOutItemForm.vue

@@ -1,267 +0,0 @@
-<template>
-  <el-form
-    ref="formRef"
-    :model="formData"
-    :rules="formRules"
-    v-loading="formLoading"
-    label-width="0px"
-    :inline-message="true"
-    :disabled="disabled"
-  >
-    <el-table :data="formData" show-summary :summary-method="getSummaries" class="-mt-10px">
-      <el-table-column label="序号" type="index" align="center" width="60" />
-      <el-table-column label="仓库名称" min-width="125">
-        <template #default="{ row, $index }">
-          <el-form-item
-            :prop="`${$index}.warehouseId`"
-            :rules="formRules.warehouseId"
-            class="mb-0px!"
-          >
-            <el-select
-              v-model="row.warehouseId"
-              clearable
-              filterable
-              placeholder="请选择仓库"
-              @change="onChangeWarehouse($event, row)"
-            >
-              <el-option
-                v-for="item in warehouseList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="产品名称" min-width="180">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.productId`" :rules="formRules.productId" class="mb-0px!">
-            <el-select
-              v-model="row.productId"
-              clearable
-              filterable
-              @change="onChangeProduct($event, row)"
-              placeholder="请选择产品"
-            >
-              <el-option
-                v-for="item in productList"
-                :key="item.id"
-                :label="item.name"
-                :value="item.id"
-              />
-            </el-select>
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="库存" min-width="100">
-        <template #default="{ row }">
-          <el-form-item class="mb-0px!">
-            <el-input disabled v-model="row.stockCount" :formatter="erpCountInputFormatter" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="条码" min-width="150">
-        <template #default="{ row }">
-          <el-form-item class="mb-0px!">
-            <el-input disabled v-model="row.productBarCode" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="单位" min-width="80">
-        <template #default="{ row }">
-          <el-form-item class="mb-0px!">
-            <el-input disabled v-model="row.productUnitName" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="数量" prop="count" fixed="right" min-width="140">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.count`" :rules="formRules.count" class="mb-0px!">
-            <el-input-number
-              v-model="row.count"
-              controls-position="right"
-              :min="0.001"
-              :precision="3"
-              class="!w-100%"
-            />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="产品单价" fixed="right" min-width="120">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.productPrice`" class="mb-0px!">
-            <el-input-number
-              v-model="row.productPrice"
-              controls-position="right"
-              :min="0.01"
-              :precision="2"
-              class="!w-100%"
-            />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="合计金额" prop="totalPrice" fixed="right" min-width="100">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.totalPrice`" class="mb-0px!">
-            <el-input disabled v-model="row.totalPrice" :formatter="erpPriceInputFormatter" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column label="备注" min-width="150">
-        <template #default="{ row, $index }">
-          <el-form-item :prop="`${$index}.remark`" class="mb-0px!">
-            <el-input v-model="row.remark" placeholder="请输入备注" />
-          </el-form-item>
-        </template>
-      </el-table-column>
-      <el-table-column align="center" fixed="right" label="操作" width="60">
-        <template #default="{ $index }">
-          <el-button @click="handleDelete($index)" link>—</el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-  </el-form>
-  <el-row justify="center" class="mt-3" v-if="!disabled">
-    <el-button @click="handleAdd" round>+ 添加出库产品</el-button>
-  </el-row>
-</template>
-<script setup lang="ts">
-import { ProductApi, ProductVO } from '@/api/erp/product/product'
-import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
-import { StockApi } from '@/api/erp/stock/stock'
-import {
-  erpCountInputFormatter,
-  erpPriceInputFormatter,
-  erpPriceMultiply,
-  getSumValue
-} from '@/utils'
-
-const props = defineProps<{
-  items: undefined
-  disabled: false
-}>()
-const formLoading = ref(false) // 表单的加载中
-const formData = ref([])
-const formRules = reactive({
-  inId: [{ required: true, message: '出库编号不能为空', trigger: 'blur' }],
-  warehouseId: [{ required: true, message: '仓库不能为空', trigger: 'blur' }],
-  productId: [{ required: true, message: '产品不能为空', trigger: 'blur' }],
-  count: [{ required: true, message: '产品数量不能为空', trigger: 'blur' }]
-})
-const formRef = ref([]) // 表单 Ref
-const productList = ref<ProductVO[]>([]) // 产品列表
-const warehouseList = ref<WarehouseVO[]>([]) // 仓库列表
-const defaultWarehouse = ref<WarehouseVO>(undefined) // 默认仓库
-
-/** 初始化设置出库项 */
-watch(
-  () => props.items,
-  async (val) => {
-    formData.value = val
-  },
-  { immediate: true }
-)
-
-/** 监听合同产品变化,计算合同产品总价 */
-watch(
-  () => formData.value,
-  (val) => {
-    if (!val || val.length === 0) {
-      return
-    }
-    // 循环处理
-    val.forEach((item) => {
-      item.totalPrice = erpPriceMultiply(item.productPrice, item.count)
-    })
-  },
-  { deep: true }
-)
-
-/** 合计 */
-const getSummaries = (param: SummaryMethodProps) => {
-  const { columns, data } = param
-  const sums: string[] = []
-  columns.forEach((column, index) => {
-    if (index === 0) {
-      sums[index] = '合计'
-      return
-    }
-    if (['count', 'totalPrice'].includes(column.property)) {
-      const sum = getSumValue(data.map((item) => Number(item[column.property])))
-      sums[index] =
-        column.property === 'count' ? erpCountInputFormatter(sum) : erpPriceInputFormatter(sum)
-    } else {
-      sums[index] = ''
-    }
-  })
-
-  return sums
-}
-
-/** 新增按钮操作 */
-const handleAdd = () => {
-  const row = {
-    id: undefined,
-    warehouseId: defaultWarehouse.value?.id,
-    productId: undefined,
-    productUnitName: undefined, // 产品单位
-    productBarCode: undefined, // 产品条码
-    productPrice: undefined,
-    stockCount: undefined,
-    count: 1,
-    totalPrice: undefined,
-    remark: undefined
-  }
-  formData.value.push(row)
-}
-
-/** 删除按钮操作 */
-const handleDelete = (index) => {
-  formData.value.splice(index, 1)
-}
-
-/** 处理仓库变更 */
-const onChangeWarehouse = (warehouseId, row) => {
-  // 加载库存
-  setStockCount(row)
-}
-
-/** 处理产品变更 */
-const onChangeProduct = (productId, row) => {
-  const product = productList.value.find((item) => item.id === productId)
-  if (product) {
-    row.productUnitName = product.unitName
-    row.productBarCode = product.barCode
-    row.productPrice = product.minPrice
-  }
-  // 加载库存
-  setStockCount(row)
-}
-
-/** 加载库存 */
-const setStockCount = async (row) => {
-  if (!row.productId || !row.warehouseId) {
-    return
-  }
-  const stock = await StockApi.getStock2(row.productId, row.warehouseId)
-  row.stockCount = stock ? stock.count : 0
-}
-
-/** 表单校验 */
-const validate = () => {
-  return formRef.value.validate()
-}
-defineExpose({ validate })
-
-/** 初始化 */
-onMounted(async () => {
-  productList.value = await ProductApi.getProductSimpleList()
-  warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
-  defaultWarehouse.value = warehouseList.value.find((item) => item.defaultStatus)
-  // 默认添加一个
-  if (formData.value.length === 0) {
-    handleAdd()
-  }
-})
-</script>

+ 0 - 378
yudao-ui/yudao-ui-admin-vue3/src/views/erp/stock/out/index.vue

@@ -1,378 +0,0 @@
-<template>
-  <doc-alert title="【库存】其它入库、其它出库" url="https://doc.iocoder.cn/erp/stock-in-out/" />
-
-  <ContentWrap>
-    <!-- 搜索工作栏 -->
-    <el-form
-      class="-mb-15px"
-      :model="queryParams"
-      ref="queryFormRef"
-      :inline="true"
-      label-width="68px"
-    >
-      <el-form-item label="出库单号" prop="no">
-        <el-input
-          v-model="queryParams.no"
-          placeholder="请输入出库单号"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="产品" prop="productId">
-        <el-select
-          v-model="queryParams.productId"
-          clearable
-          filterable
-          placeholder="请选择产品"
-          class="!w-240px"
-        >
-          <el-option
-            v-for="item in productList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="出库时间" prop="outTime">
-        <el-date-picker
-          v-model="queryParams.outTime"
-          value-format="YYYY-MM-DD HH:mm:ss"
-          type="daterange"
-          start-placeholder="开始日期"
-          end-placeholder="结束日期"
-          :default-time="[new Date('1 00:00:00'), new Date('1 23:59:59')]"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item label="客户" prop="customerId">
-        <el-select
-          v-model="queryParams.customerId"
-          clearable
-          filterable
-          placeholder="请选择供客户"
-          class="!w-240px"
-        >
-          <el-option
-            v-for="item in customerList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="仓库" prop="warehouseId">
-        <el-select
-          v-model="queryParams.warehouseId"
-          clearable
-          filterable
-          placeholder="请选择仓库"
-          class="!w-240px"
-        >
-          <el-option
-            v-for="item in warehouseList"
-            :key="item.id"
-            :label="item.name"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="创建人" prop="creator">
-        <el-select
-          v-model="queryParams.creator"
-          clearable
-          filterable
-          placeholder="请选择创建人"
-          class="!w-240px"
-        >
-          <el-option
-            v-for="item in userList"
-            :key="item.id"
-            :label="item.nickname"
-            :value="item.id"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="状态" prop="status">
-        <el-select v-model="queryParams.status" placeholder="请选择状态" clearable class="!w-240px">
-          <el-option
-            v-for="dict in getIntDictOptions(DICT_TYPE.ERP_AUDIT_STATUS)"
-            :key="dict.value"
-            :label="dict.label"
-            :value="dict.value"
-          />
-        </el-select>
-      </el-form-item>
-      <el-form-item label="备注" prop="remark">
-        <el-input
-          v-model="queryParams.remark"
-          placeholder="请输入备注"
-          clearable
-          @keyup.enter="handleQuery"
-          class="!w-240px"
-        />
-      </el-form-item>
-      <el-form-item>
-        <el-button @click="handleQuery"><Icon icon="ep:search" class="mr-5px" /> 搜索</el-button>
-        <el-button @click="resetQuery"><Icon icon="ep:refresh" class="mr-5px" /> 重置</el-button>
-        <el-button
-          type="primary"
-          plain
-          @click="openForm('create')"
-          v-hasPermi="['erp:stock-out:create']"
-        >
-          <Icon icon="ep:plus" class="mr-5px" /> 新增
-        </el-button>
-        <el-button
-          type="success"
-          plain
-          @click="handleExport"
-          :loading="exportLoading"
-          v-hasPermi="['erp:stock-out:export']"
-        >
-          <Icon icon="ep:download" class="mr-5px" /> 导出
-        </el-button>
-        <el-button
-          type="danger"
-          plain
-          @click="handleDelete(selectionList.map((item) => item.id))"
-          v-hasPermi="['erp:stock-out:delete']"
-          :disabled="selectionList.length === 0"
-        >
-          <Icon icon="ep:delete" class="mr-5px" /> 删除
-        </el-button>
-      </el-form-item>
-    </el-form>
-  </ContentWrap>
-
-  <!-- 列表 -->
-  <ContentWrap>
-    <el-table
-      v-loading="loading"
-      :data="list"
-      :stripe="true"
-      :show-overflow-tooltip="true"
-      @selection-change="handleSelectionChange"
-    >
-      <el-table-column width="30" label="选择" type="selection" />
-      <el-table-column min-width="180" label="出库单号" align="center" prop="no" />
-      <el-table-column label="产品信息" align="center" prop="productNames" min-width="200" />
-      <el-table-column label="客户" align="center" prop="customerName" />
-      <el-table-column
-        label="出库时间"
-        align="center"
-        prop="outTime"
-        :formatter="dateFormatter2"
-        width="120px"
-      />
-      <el-table-column label="创建人" align="center" prop="creatorName" />
-      <el-table-column
-        label="数量"
-        align="center"
-        prop="totalCount"
-        :formatter="erpCountTableColumnFormatter"
-      />
-      <el-table-column
-        label="金额"
-        align="center"
-        prop="totalPrice"
-        :formatter="erpPriceTableColumnFormatter"
-      />
-      <el-table-column label="状态" align="center" fixed="right" width="90" prop="status">
-        <template #default="scope">
-          <dict-tag :type="DICT_TYPE.ERP_AUDIT_STATUS" :value="scope.row.status" />
-        </template>
-      </el-table-column>
-      <el-table-column label="操作" align="center" fixed="right" width="220">
-        <template #default="scope">
-          <el-button
-            link
-            @click="openForm('detail', scope.row.id)"
-            v-hasPermi="['erp:stock-out:query']"
-          >
-            详情
-          </el-button>
-          <el-button
-            link
-            type="primary"
-            @click="openForm('update', scope.row.id)"
-            v-hasPermi="['erp:stock-out:update']"
-            :disabled="scope.row.status === 20"
-          >
-            编辑
-          </el-button>
-          <el-button
-            link
-            type="primary"
-            @click="handleUpdateStatus(scope.row.id, 20)"
-            v-hasPermi="['erp:stock-out:update-status']"
-            v-if="scope.row.status === 10"
-          >
-            审批
-          </el-button>
-          <el-button
-            link
-            type="danger"
-            @click="handleUpdateStatus(scope.row.id, 10)"
-            v-hasPermi="['erp:stock-out:update-status']"
-            v-else
-          >
-            反审批
-          </el-button>
-          <el-button
-            link
-            type="danger"
-            @click="handleDelete([scope.row.id])"
-            v-hasPermi="['erp:stock-out:delete']"
-          >
-            删除
-          </el-button>
-        </template>
-      </el-table-column>
-    </el-table>
-    <!-- 分页 -->
-    <Pagination
-      :total="total"
-      v-model:page="queryParams.pageNo"
-      v-model:limit="queryParams.pageSize"
-      @pagination="getList"
-    />
-  </ContentWrap>
-
-  <!-- 表单弹窗:添加/修改 -->
-  <StockOutForm ref="formRef" @success="getList" />
-</template>
-
-<script setup lang="ts">
-import { getIntDictOptions, DICT_TYPE } from '@/utils/dict'
-import { dateFormatter2 } from '@/utils/formatTime'
-import download from '@/utils/download'
-import { StockOutApi, StockOutVO } from '@/api/erp/stock/out'
-import StockOutForm from './StockOutForm.vue'
-import { ProductApi, ProductVO } from '@/api/erp/product/product'
-import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
-import { SupplierApi, SupplierVO } from '@/api/erp/purchase/supplier'
-import { UserVO } from '@/api/system/user'
-import * as UserApi from '@/api/system/user'
-import { erpCountTableColumnFormatter, erpPriceTableColumnFormatter } from '@/utils'
-import { CustomerApi, CustomerVO } from '@/api/erp/sale/customer'
-
-/** ERP 其它出库单列表 */
-defineOptions({ name: 'ErpStockOut' })
-
-const message = useMessage() // 消息弹窗
-const { t } = useI18n() // 国际化
-
-const loading = ref(true) // 列表的加载中
-const list = ref<StockOutVO[]>([]) // 列表的数据
-const total = ref(0) // 列表的总页数
-const queryParams = reactive({
-  pageNo: 1,
-  pageSize: 10,
-  no: undefined,
-  productId: undefined,
-  customerId: undefined,
-  warehouseId: undefined,
-  outTime: [],
-  status: undefined,
-  remark: undefined,
-  creator: undefined
-})
-const queryFormRef = ref() // 搜索的表单
-const exportLoading = ref(false) // 导出的加载中
-const productList = ref<ProductVO[]>([]) // 产品列表
-const warehouseList = ref<WarehouseVO[]>([]) // 仓库列表
-const customerList = ref<CustomerVO[]>([]) // 客户列表
-const userList = ref<UserVO[]>([]) // 用户列表
-
-/** 查询列表 */
-const getList = async () => {
-  loading.value = true
-  try {
-    const data = await StockOutApi.getStockOutPage(queryParams)
-    list.value = data.list
-    total.value = data.total
-  } finally {
-    loading.value = false
-  }
-}
-
-/** 搜索按钮操作 */
-const handleQuery = () => {
-  queryParams.pageNo = 1
-  getList()
-}
-
-/** 重置按钮操作 */
-const resetQuery = () => {
-  queryFormRef.value.resetFields()
-  handleQuery()
-}
-
-/** 添加/修改操作 */
-const formRef = ref()
-const openForm = (type: string, id?: number) => {
-  formRef.value.open(type, id)
-}
-
-/** 删除按钮操作 */
-const handleDelete = async (ids: number[]) => {
-  try {
-    // 删除的二次确认
-    await message.delConfirm()
-    // 发起删除
-    await StockOutApi.deleteStockOut(ids)
-    message.success(t('common.delSuccess'))
-    // 刷新列表
-    await getList()
-    selectionList.value = selectionList.value.filter((item) => !ids.includes(item.id))
-  } catch {}
-}
-
-/** 审批/反审批操作 */
-const handleUpdateStatus = async (id: number, status: number) => {
-  try {
-    // 审批的二次确认
-    await message.confirm(`确定${status === 20 ? '审批' : '反审批'}该出库单吗?`)
-    // 发起审批
-    await StockOutApi.updateStockOutStatus(id, status)
-    message.success(`${status === 20 ? '审批' : '反审批'}成功`)
-    // 刷新列表
-    await getList()
-  } catch {}
-}
-
-/** 导出按钮操作 */
-const handleExport = async () => {
-  try {
-    // 导出的二次确认
-    await message.exportConfirm()
-    // 发起导出
-    exportLoading.value = true
-    const data = await StockOutApi.exportStockOut(queryParams)
-    download.excel(data, '其它出库单.xls')
-  } catch {
-  } finally {
-    exportLoading.value = false
-  }
-}
-
-/** 选中操作 */
-const selectionList = ref<StockOutVO[]>([])
-const handleSelectionChange = (rows: StockOutVO[]) => {
-  selectionList.value = rows
-}
-
-/** 初始化 **/
-onMounted(async () => {
-  await getList()
-  // 加载产品、仓库列表、客户
-  productList.value = await ProductApi.getProductSimpleList()
-  warehouseList.value = await WarehouseApi.getWarehouseSimpleList()
-  customerList.value = await CustomerApi.getCustomerSimpleList()
-  userList.value = await UserApi.getSimpleUserList()
-})
-// TODO 芋艿:可优化功能:列表界面,支持导入
-// TODO 芋艿:可优化功能:详情界面,支持打印
-</script>

+ 0 - 184
yudao-ui/yudao-ui-admin-vue3/src/views/infra/build/index.vue

@@ -1,184 +0,0 @@
-<template>
-  <ContentWrap :body-style="{ padding: '0px' }" class="!mb-0">
-    <!-- 表单设计器 -->
-    <div
-      class="h-[calc(100vh-var(--top-tool-height)-var(--tags-view-height)-var(--app-content-padding)-var(--app-content-padding)-2px)]"
-    >
-      <fc-designer class="my-designer" ref="designer" :config="designerConfig">
-        <template #handle>
-          <el-button size="small" type="primary" plain @click="showJson">生成JSON</el-button>
-          <el-button size="small" type="success" plain @click="showOption">生成Options</el-button>
-          <el-button size="small" type="danger" plain @click="showTemplate">生成组件</el-button>
-        </template>
-      </fc-designer>
-    </div>
-  </ContentWrap>
-
-  <!-- 弹窗:表单预览 -->
-  <Dialog v-model="dialogVisible" :title="dialogTitle" max-height="600">
-    <div v-if="dialogVisible" ref="editor">
-      <el-button style="float: right" @click="copy(formData)">
-        {{ t('common.copy') }}
-      </el-button>
-      <el-scrollbar height="580">
-        <div>
-          <pre><code v-dompurify-html="highlightedCode(formData)" class="hljs"></code></pre>
-        </div>
-      </el-scrollbar>
-    </div>
-  </Dialog>
-</template>
-<script lang="ts" setup>
-import { useFormCreateDesigner } from '@/components/FormCreate'
-import { useClipboard } from '@vueuse/core'
-import { isString } from '@/utils/is'
-
-import hljs from 'highlight.js' // 导入代码高亮文件
-import 'highlight.js/styles/github.css' // 导入代码高亮样式
-import xml from 'highlight.js/lib/languages/java'
-import json from 'highlight.js/lib/languages/json'
-import formCreate from '@form-create/element-ui'
-
-defineOptions({ name: 'InfraBuild' })
-
-const { t } = useI18n() // 国际化
-const message = useMessage() // 消息
-
-// 表单设计器配置
-const designerConfig = ref({
-  switchType: [], // 是否可以切换组件类型,或者可以相互切换的字段
-  autoActive: true, // 是否自动选中拖入的组件
-  useTemplate: false, // 是否生成vue2语法的模板组件
-  formOptions: {
-    form: {
-      labelWidth: '100px' // 设置默认的 label 宽度为 100px
-    }
-  }, // 定义表单配置默认值
-  fieldReadonly: false, // 配置field是否可以编辑
-  hiddenDragMenu: false, // 隐藏拖拽操作按钮
-  hiddenDragBtn: false, // 隐藏拖拽按钮
-  hiddenMenu: [], // 隐藏部分菜单
-  hiddenItem: [], // 隐藏部分组件
-  hiddenItemConfig: {}, // 隐藏组件的部分配置项
-  disabledItemConfig: {}, // 禁用组件的部分配置项
-  showSaveBtn: false, // 是否显示保存按钮
-  showConfig: true, // 是否显示右侧的配置界面
-  showBaseForm: true, // 是否显示组件的基础配置表单
-  showControl: true, // 是否显示组件联动
-  showPropsForm: true, // 是否显示组件的属性配置表单
-  showEventForm: true, // 是否显示组件的事件配置表单
-  showValidateForm: true, // 是否显示组件的验证配置表单
-  showFormConfig: true, // 是否显示表单配置
-  showInputData: true, // 是否显示录入按钮
-  showDevice: true, // 是否显示多端适配选项
-  appendConfigData: [] // 定义渲染规则所需的formData
-})
-const designer = ref() // 表单设计器
-const dialogVisible = ref(false) // 弹窗的是否展示
-const dialogTitle = ref('') // 弹窗的标题
-const formType = ref(-1) // 表单的类型:0 - 生成 JSON;1 - 生成 Options;2 - 生成组件
-const formData = ref('') // 表单数据
-useFormCreateDesigner(designer) // 表单设计器增强
-
-/** 打开弹窗 */
-const openModel = (title: string) => {
-  dialogVisible.value = true
-  dialogTitle.value = title
-}
-
-/** 生成 JSON */
-const showJson = () => {
-  openModel('生成 JSON')
-  formType.value = 0
-  formData.value = designer.value.getRule()
-}
-
-/** 生成 Options */
-const showOption = () => {
-  openModel('生成 Options')
-  formType.value = 1
-  formData.value = designer.value.getOption()
-}
-
-/** 生成组件 */
-const showTemplate = () => {
-  openModel('生成组件')
-  formType.value = 2
-  formData.value = makeTemplate()
-}
-
-const makeTemplate = () => {
-  const rule = designer.value.getRule()
-  const opt = designer.value.getOption()
-  return `<template>
-    <form-create
-      v-model:api="fApi"
-      :rule="rule"
-      :option="option"
-      @submit="onSubmit"
-    ></form-create>
-  </template>
-  <script setup lang=ts>
-    const faps = ref(null)
-    const rule = ref('')
-    const option = ref('')
-    const init = () => {
-      rule.value = formCreate.parseJson('${formCreate.toJson(rule).replaceAll('\\', '\\\\')}')
-      option.value = formCreate.parseJson('${JSON.stringify(opt)}')
-    }
-    const onSubmit = (formData) => {
-      //todo 提交表单
-    }
-    init()
-  <\/script>`
-}
-
-/** 复制 **/
-const copy = async (text: string) => {
-  const textToCopy = JSON.stringify(text, null, 2)
-  const { copy, copied, isSupported } = useClipboard({ source: textToCopy })
-  if (!isSupported) {
-    message.error(t('common.copyError'))
-  } else {
-    await copy()
-    if (unref(copied)) {
-      message.success(t('common.copySuccess'))
-    }
-  }
-}
-
-/**
- * 代码高亮
- */
-const highlightedCode = (code: string) => {
-  // 处理语言和代码
-  let language = 'json'
-  if (formType.value === 2) {
-    language = 'xml'
-  }
-  // debugger
-  if (!isString(code)) {
-    code = JSON.stringify(code, null, 2)
-  }
-  // 高亮
-  const result = hljs.highlight(code, { language: language, ignoreIllegals: true })
-  return result.value || '&nbsp;'
-}
-
-/** 初始化 **/
-onMounted(async () => {
-  // 注册代码高亮的各种语言
-  hljs.registerLanguage('xml', xml)
-  hljs.registerLanguage('json', json)
-})
-</script>
-
-<style>
-.my-designer {
-  ._fc-l,
-  ._fc-m,
-  ._fc-r {
-    border-top: none;
-  }
-}
-</style>