Browse Source

feat: 使用配置管理动态获取租户和组织编码

- 集成若依配置管理API获取全局配置
- 配置键: order.default.domain (租户编码)
- 配置键: order.default.companyId (组织结构编码)
- 添加配置设置指南文档
- 支持在线修改配置,无需改代码
Pengxy 3 tháng trước cách đây
mục cha
commit
ccc9c64117

+ 147 - 0
yudao-order-server/CONFIG_SETUP_GUIDE.md

@@ -0,0 +1,147 @@
+# 订单模块配置管理设置指南
+
+## 概述
+订单模块使用若依框架的配置管理功能来管理全局配置,如租户编码(Domain)和组织结构编码(companyId)。
+
+## 配置项说明
+
+### 1. 租户编码 (Domain)
+- **配置键**: `order.default.domain`
+- **默认值**: `8010`
+- **说明**: 用于设置订单的默认租户编码(factoryId字段)
+
+### 2. 组织结构编码 (companyId)
+- **配置键**: `order.default.companyId`
+- **默认值**: `1000`
+- **说明**: 用于设置订单的默认组织结构编码(companyId字段)
+
+## 如何添加配置
+
+### 方式一: 通过管理后台添加(推荐)
+
+1. 登录管理后台
+2. 进入 **基础设施 -> 配置管理** 菜单
+3. 点击 **新增** 按钮
+4. 填写配置信息:
+
+#### 配置1: 租户编码
+```
+参数分类: order
+参数名称: 默认租户编码
+参数键名: order.default.domain
+参数键值: 8010
+系统内置: 否
+参数类型: 1 (字符串)
+是否可见: 是
+备注: 订单模块默认租户编码,对应crm_seorder.factory_id字段
+```
+
+#### 配置2: 组织结构编码
+```
+参数分类: order
+参数名称: 默认组织结构编码
+参数键名: order.default.companyId
+参数键值: 1000
+系统内置: 否
+参数类型: 1 (字符串)
+是否可见: 是
+备注: 订单模块默认组织结构编码,对应crm_seorder.company_id字段
+```
+
+### 方式二: 通过SQL直接插入
+
+```sql
+-- 插入租户编码配置
+INSERT INTO infra_config (category, name, `key`, value, type, visible, remark, create_time, update_time, creator, updater, deleted)
+VALUES ('order', '默认租户编码', 'order.default.domain', '8010', 1, 1, '订单模块默认租户编码,对应crm_seorder.factory_id字段', NOW(), NOW(), '1', '1', 0);
+
+-- 插入组织结构编码配置
+INSERT INTO infra_config (category, name, `key`, value, type, visible, remark, create_time, update_time, creator, updater, deleted)
+VALUES ('order', '默认组织结构编码', 'order.default.companyId', '1000', 1, 1, '订单模块默认组织结构编码,对应crm_seorder.company_id字段', NOW(), NOW(), '1', '1', 0);
+```
+
+## 使用说明
+
+### 前端使用
+前端代码已自动集成配置管理功能:
+
+```typescript
+// 在 SalesOrderForm.vue 中
+import { getConfigKey } from '@/api/infra/config'
+
+// 组件挂载时自动加载配置
+onMounted(() => {
+  loadGlobalConfig()
+})
+
+// 创建订单时自动使用配置的值
+const formData = {
+  factoryId: globalConfig.domain,    // 从配置管理获取
+  companyId: globalConfig.companyId  // 从配置管理获取
+}
+```
+
+### 后端使用
+如果后端也需要使用这些配置,可以通过 `ConfigApi` 获取:
+
+```java
+@Resource
+private ConfigApi configApi;
+
+// 获取租户编码
+String domain = configApi.getConfigValueByKey("order.default.domain");
+
+// 获取组织结构编码
+String companyId = configApi.getConfigValueByKey("order.default.companyId");
+```
+
+## 配置修改
+
+### 在线修改
+1. 进入 **基础设施 -> 配置管理** 菜单
+2. 找到对应的配置项
+3. 点击 **修改** 按钮
+4. 更新 **参数键值**
+5. 保存
+
+### 生效时间
+- 前端: 刷新页面或重新打开表单后生效
+- 后端: 配置修改后立即生效(若依框架会自动刷新缓存)
+
+## 优势
+
+1. **动态配置**: 无需修改代码,通过配置管理界面即可修改
+2. **集中管理**: 所有配置集中在配置管理模块,便于维护
+3. **多环境支持**: 不同环境可以配置不同的值
+4. **审计追踪**: 配置修改有完整的操作日志
+5. **缓存优化**: 若依框架自动缓存配置,提高性能
+
+## 注意事项
+
+1. **配置键名**: 必须使用 `order.default.domain` 和 `order.default.companyId`,不能修改
+2. **默认值**: 如果配置不存在,系统会使用硬编码的默认值(8010和1000)
+3. **权限控制**: 只有有权限的用户才能修改配置
+4. **数据类型**: 配置值为字符串类型,前端会自动处理
+
+## 扩展
+
+如果需要添加更多全局配置,可以按照相同的模式:
+
+1. 在配置管理中添加新的配置项
+2. 在前端 `loadGlobalConfig()` 函数中添加获取逻辑
+3. 在 `getDefaultFormData()` 中使用配置值
+
+例如添加默认币种配置:
+```typescript
+// 1. 配置管理添加: order.default.currency = CNY
+// 2. 加载配置
+const currencyRes = await getConfigKey('order.default.currency')
+globalConfig.currency = currencyRes || 'CNY'
+// 3. 使用配置
+currency: globalConfig.currency
+```
+
+## 相关文档
+
+- [若依配置管理文档](https://doc.iocoder.cn/)
+- [配置管理API文档](http://localhost:48080/doc.html#/infra/配置管理)

+ 36 - 3
yudao-ui/yudao-ui-admin-vue3/src/views/jiaohuo/components/SalesOrderForm.vue

@@ -211,9 +211,10 @@
 </template>
 
 <script setup lang="ts">
-import { ref, reactive, computed } from 'vue'
+import { ref, reactive, computed, onMounted } from 'vue'
 import { Plus, Search, Delete } from '@element-plus/icons-vue'
 import { getOrderDetail, createOrder, updateOrder } from '@/api/jiaohuo/order'
+import { getConfigKey } from '@/api/infra/config'
 import { ElMessage } from 'element-plus'
 import CustomerSelect from './CustomerSelect.vue'
 import MaterialSelect from './MaterialSelect.vue'
@@ -224,12 +225,39 @@ const mode = ref<'add' | 'edit' | 'view'>('add')
 const currentId = ref<number | null>(null)
 const currentRowIndex = ref<number | null>(null)
 
+// 全局配置
+const globalConfig = reactive({
+  domain: '8010', // 默认值
+  companyId: '1000' // 默认值
+})
+
 // 选择器引用
 const customerSelectRef = ref()
 const materialSelectRef = ref()
 
 const formRef = ref()
 
+// 加载全局配置
+const loadGlobalConfig = async () => {
+  try {
+    // 从配置管理获取Domain和companyId
+    const [domainRes, companyIdRes] = await Promise.all([
+      getConfigKey('order.default.domain'),
+      getConfigKey('order.default.companyId')
+    ])
+    
+    if (domainRes) {
+      globalConfig.domain = domainRes
+    }
+    if (companyIdRes) {
+      globalConfig.companyId = companyIdRes
+    }
+  } catch (error) {
+    console.warn('加载全局配置失败,使用默认值:', error)
+    // 使用默认值,不影响业务流程
+  }
+}
+
 const getDefaultFormData = () => ({
   billNo: '',
   orderType: '2',
@@ -241,8 +269,8 @@ const getDefaultFormData = () => ({
   urgent: '0',
   currency: 'CNY',
   reason: '',
-  factoryId: '8010', // 默认租户编码
-  companyId: '1000', // 默认组织结构编码
+  factoryId: globalConfig.domain, // 使用全局配置
+  companyId: globalConfig.companyId, // 使用全局配置
   items: [] as any[]
 })
 
@@ -447,6 +475,11 @@ const handleClose = () => {
   currentRowIndex.value = null
 }
 
+// 组件挂载时加载全局配置
+onMounted(() => {
+  loadGlobalConfig()
+})
+
 defineExpose({ open })
 </script>