gatsby 3 тижнів тому
батько
коміт
57091a4448

+ 11 - 1
backend/app/plugin/module_payment/account/schema.py

@@ -2,7 +2,7 @@ from datetime import datetime
 from decimal import Decimal
 from typing import List, Optional
 
-from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
+from pydantic import BaseModel, ConfigDict, Field, field_serializer, field_validator, model_validator
 
 
 class BankcardExtInfoSchema(BaseModel):
@@ -326,6 +326,11 @@ class TransferOutSchema(BaseModel):
                 v.bankcard_ext_info.inst_name = "***"
         return v
 
+    @field_serializer('amount')
+    def serialize_amount(self, value: Decimal) -> str:
+        """将 Decimal 序列化为保留两位小数的字符串"""
+        return f"{value:.2f}"
+
 
 class TransferListOutSchema(BaseModel):
     """转账记录列表响应"""
@@ -371,6 +376,11 @@ class TransferListOutSchema(BaseModel):
             if v.bankcard_ext_info.inst_name:
                 v.bankcard_ext_info.inst_name = "***"
         return v
+    
+    @field_serializer('amount')
+    def serialize_amount(self, value: Decimal) -> str:
+        """将 Decimal 序列化为保留两位小数的字符串"""
+        return f"{value:.2f}"
 
 
 class DepositOutSchema(BaseModel):

+ 1 - 1
backend/app/plugin/module_payment/department/controller.py

@@ -132,7 +132,7 @@ async def list_department_controller(
     status: Annotated[str | None, Query(description="状态")] = None,
 ) -> JSONResponse:
     """查询部门列表"""
-    search = {}
+    search: dict = {}
     if enterprise_id:
         search["enterprise_id"] = enterprise_id
     if department_name:

+ 22 - 4
backend/app/plugin/module_payment/department/schema.py

@@ -32,7 +32,7 @@ class DepartmentOutSchema(BaseModel):
     
     model_config = ConfigDict(from_attributes=True)
     
-    id: int = Field(description="主键ID")
+    # id: int = Field(description="主键ID")
     department_id: str = Field(description="部门ID")
     department_name: str = Field(description="部门名称")
     department_code: Optional[str] = Field(default=None, description="部门编码")
@@ -42,9 +42,9 @@ class DepartmentOutSchema(BaseModel):
     sort_order: Optional[int] = Field(default=None, description="排序值")
     leader_employee_id: Optional[str] = Field(default=None, description="部门负责人ID")
     leader_employee_name: Optional[str] = Field(default=None, description="部门负责人姓名")
-    created_time: datetime = Field(description="创建时间")
-    updated_time: datetime = Field(description="更新时间")
-    tenant_id: int = Field(description="租户ID")
+    # created_time: datetime = Field(description="创建时间")
+    # updated_time: datetime = Field(description="更新时间")
+    # tenant_id: int = Field(description="租户ID")
 
 
 class DepartmentListOutSchema(BaseModel):
@@ -92,6 +92,24 @@ class DepartmentOperationOutSchema(BaseModel):
     department_name: str = Field(description="部门名称")
 
 
+class DepartmentTreeOutSchema(BaseModel):
+    """部门树形结构响应"""
+    
+    model_config = ConfigDict(from_attributes=True)
+    
+    id: int = Field(description="主键ID")
+    department_id: str = Field(description="部门ID")
+    department_name: str = Field(description="部门名称")
+    department_code: Optional[str] = Field(default=None, description="部门编码")
+    parent_department_id: Optional[str] = Field(default=None, description="上级部门ID")
+    status: str = Field(description="状态")
+    sort_order: Optional[int] = Field(default=None, description="排序值")
+    leader_employee_name: Optional[str] = Field(default=None, description="部门负责人姓名")
+    children: List["DepartmentTreeOutSchema"] = Field(default_factory=list, description="子部门列表")
+
+# 递归更新类型提示
+DepartmentTreeOutSchema.model_rebuild()
+
 # 部门状态常量
 DEPARTMENT_STATUS = {
     "NORMAL": "正常",

+ 108 - 10
backend/app/plugin/module_payment/department/service.py

@@ -1,12 +1,15 @@
 from typing import Optional, List, Dict, Any
 
 from alipay.aop.api.domain.DepartmentInfoDTO import DepartmentInfoDTO
+
 from alipay.aop.api.domain.AlipayCommerceEcDepartmentCreateModel import AlipayCommerceEcDepartmentCreateModel
 from alipay.aop.api.domain.AlipayCommerceEcDepartmentDeleteModel import AlipayCommerceEcDepartmentDeleteModel
+from alipay.aop.api.domain.AlipayCommerceEcDepartmentInfoQueryModel import AlipayCommerceEcDepartmentInfoQueryModel
 
 from alipay.aop.api.response.AlipayCommerceEcDepartmentCreateResponse import AlipayCommerceEcDepartmentCreateResponse
 from alipay.aop.api.response.AlipayCommerceEcDepartmentDeleteResponse import AlipayCommerceEcDepartmentDeleteResponse
-
+from alipay.aop.api.response.AlipayCommerceEcDepartmentInfoQueryResponse import AlipayCommerceEcDepartmentInfoQueryResponse
+from alipay.aop.api.response.AlipayCommerceEcDepartmentSublistQueryResponse import AlipayCommerceEcDepartmentSublistQueryResponse
 
 from alipay.aop.api.request.AlipayCommerceEcDepartmentCreateRequest import AlipayCommerceEcDepartmentCreateRequest
 from alipay.aop.api.request.AlipayCommerceEcDepartmentDeleteRequest import AlipayCommerceEcDepartmentDeleteRequest
@@ -25,7 +28,10 @@ from .schema import (
     DepartmentCreateSchema,
     DepartmentUpdateSchema,
     DepartmentDetailOutSchema,
-    DepartmentOperationOutSchema
+    DepartmentOperationOutSchema,
+    DepartmentTreeOutSchema,
+    DepartmentListOutSchema,
+    DepartmentOutSchema
 )
 
 
@@ -37,7 +43,7 @@ class DepartmentService:
         cls, auth: AuthSchema, data: DepartmentCreateSchema
     ) -> DepartmentOperationOutSchema:
         """创建部门"""
-    # 调用支付宝接口创建部门
+        # 调用支付宝接口创建部门
         department_create_model = AlipayCommerceEcDepartmentCreateModel()
         department_create_model.enterprise_id = data.enterprise_id
         department_create_model.department_name = data.department_name
@@ -106,9 +112,45 @@ class DepartmentService:
     async def get_department_service(
         cls, auth: AuthSchema, department_id: str, enterprise_id: str
     ) -> DepartmentDetailOutSchema:
-        """查询部门详情"""
+        """查询部门详情 (alipay.commerce.ec.department.info.query)"""
+        # 调用支付宝接口查询部门详情
+        model = AlipayCommerceEcDepartmentInfoQueryModel()
+        model.enterprise_id = enterprise_id
+        model.department_id = department_id
+
+        request = AlipayCommerceEcDepartmentInfoQueryRequest()
+        request.biz_model = model
+
+        client = AlipayClient.get_client()
+        response = client.execute(request)
+
+        if not response:
+            raise CustomException(msg="查询部门详情失败: 无响应")
+
+        result = AlipayCommerceEcDepartmentInfoQueryResponse()
+        result.parse_response_content(response)
+
+        if not result.is_success():
+            log.error(f"支付宝接口调用失败: {result.code} - {result.msg}")
+            raise CustomException(msg=f"查询部门详情失败: {result.sub_code or result.msg or result.code}")
+
+        # 解析部门信息
+        department_info = result.department_info
+        if not department_info:
+            raise CustomException(msg="部门信息不存在")
+
+        # 转换为响应模型
+        department_out = DepartmentOutSchema(
+            department_id=department_info.department_id or "",
+            department_name=department_info.department_name or "",
+            department_code=department_info.department_code,
+            parent_department_id=department_info.parent_department_id,
+            enterprise_id=enterprise_id,
+            status="NORMAL",
+        )
+
         return DepartmentDetailOutSchema(
-            department=None,
+            department=department_out,
             sub_departments=[]
         )
 
@@ -121,14 +163,70 @@ class DepartmentService:
 
     @classmethod
     async def list_service(
-        cls, auth: AuthSchema, page_no: int, page_size: int, search: Dict[str, Any]
-    ) -> Dict[str, Any]:
+        cls,
+        auth: AuthSchema,
+        page_no: int = 1,
+        page_size: int = 20,
+        search: dict | None = None,
+    ) -> dict:
         """分页查询部门列表"""
-        return {}
+        log.info(f"查询部门列表: {page_no}, {page_size}, {search}")
+        crud = DepartmentCRUD(auth)
+        offset = (page_no - 1) * page_size
+        return await crud.page(
+            offset=offset,
+            limit=page_size,
+            order_by=[{"id": "desc"}],
+            search=search or {},
+            out_schema=DepartmentListOutSchema,
+        )
 
     @classmethod
     async def get_department_tree_service(
         cls, auth: AuthSchema, enterprise_id: str
-    ) -> List[Dict[str, Any]]:
+    ) -> List[DepartmentTreeOutSchema]:
         """获取部门树形结构"""
-        return []
+        crud = DepartmentCRUD(auth)
+        
+        # 查询指定企业下的所有部门
+        departments = await crud.list({"enterprise_id": enterprise_id})
+        
+        # 转换为字典,方便查找
+        department_dict = {dept.department_id: dept for dept in departments}
+        
+        # 构建树形结构
+        tree = []
+        
+        for dept in departments:
+            # 找到父部门
+            parent_id = dept.parent_department_id
+            if not parent_id or parent_id == "-1" or parent_id not in department_dict:
+                # 没有父部门,作为根节点
+                tree.append(dept)
+            else:
+                # 添加到父部门的子节点
+                if not hasattr(department_dict[parent_id], 'children'):
+                    department_dict[parent_id].children = []
+                department_dict[parent_id].children.append(dept)
+        
+        # 排序子节点
+        def sort_children(node):
+            if hasattr(node, 'children') and node.children:
+                node.children.sort(key=lambda x: (x.sort_order or 0, x.department_name))
+                for child in node.children:
+                    sort_children(child)
+        
+        for node in tree:
+            sort_children(node)
+        
+        # 转换为响应模型
+        return [DepartmentTreeOutSchema.model_validate(node) for node in tree]
+
+    @classmethod
+    async def get_all_departments(
+        cls, auth: AuthSchema, enterprise_id: str
+    ) -> List[DepartmentOutSchema]:
+        """获取所有部门列表(不分页)"""
+        crud = DepartmentCRUD(auth)
+        departments = await crud.list({"enterprise_id": enterprise_id})
+        return [DepartmentOutSchema.model_validate(dept) for dept in departments]

+ 20 - 3
backend/tests/test_apikey_sign.py

@@ -15,9 +15,9 @@ class TestApiKeySign(unittest.TestCase):
     def test_tt(self):
         data = {
             "account_book_id": "2088480770941200",
-            "amount": 1.00,
-            "order_title": "Apikey转账9",
-            "third_biz_no": "123424202604270099",
+            "amount": "1.00",
+            "order_title": "Apikey转账22",
+            "third_biz_no": "1234242026042700222",
             "payee_info": {
                 "identity_type": "ALIPAY_ACCOUNT",
                 "name": "钱红武",
@@ -27,6 +27,23 @@ class TestApiKeySign(unittest.TestCase):
         sign = TenantApiKeyService.generate_signature("8a6eac1c235fd5fcdd51376e08da46348e6f1160e30b83283e5f8d5698588b2c60d85dd3d98167e6ece08e8e08182dd456627de9c2fc511593489f195ffb708d", request_data=data)
         print(sign)
 
+    def test_cc(self):
+        data = {
+            "account_book_id": "2088480770900000",
+            "amount": "1.00",
+            "order_title": "Apikey转账",
+            "third_biz_no": "1234242026042700111",
+            "payee_info": {
+                "identity_type": "ALIPAY_ACCOUNT",
+                "name": "钱先生",
+                "identity": "1xx9xx9xxxxx"
+            }
+        }
+        aa = 'e39e5ff54b1b55e88ca19a5331601d1b2a65f3e81bbc90b3b9f21b25c49a328a'
+        sign = TenantApiKeyService.generate_signature("your_api_secret_here", request_data=data)
+        print(sign)
+        print(aa == sign)
+
     def test_sign(self) -> None:
         data = {
             "app_id": "2021001234",

+ 153 - 0
callback_server.py

@@ -0,0 +1,153 @@
+#!/usr/bin/env python3
+"""
+简单的回调通知监听服务器
+用于测试 openapi 转账回调通知功能
+
+使用方法:
+    python server.py [port]
+
+示例:
+    python server.py 8080
+"""
+
+import http.server
+import socketserver
+import json
+import logging
+from datetime import datetime
+from urllib.parse import parse_qs
+
+# 配置日志
+logging.basicConfig(
+    level=logging.INFO,
+    format='%(asctime)s - %(levelname)s - %(message)s'
+)
+logger = logging.getLogger(__name__)
+
+PORT = int(__import__('sys').argv[1]) if len(__import__('sys').argv) > 1 else 8080
+
+
+class CallbackHandler(http.server.BaseHTTPRequestHandler):
+    """处理回调通知的请求处理器"""
+
+    def do_POST(self):
+        """处理 POST 请求"""
+        try:
+            # 获取请求内容长度
+            content_length = int(self.headers.get('Content-Length', 0))
+
+            # 读取请求体
+            post_data = self.rfile.read(content_length)
+
+            # 解析表单数据
+            content_type = self.headers.get('Content-Type', '')
+
+            logger.info("=" * 60)
+            logger.info("收到回调通知!")
+            logger.info("时间: %s", datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
+            logger.info("路径: %s", self.path)
+            logger.info("Content-Type: %s", content_type)
+            logger.info("-" * 40)
+
+            # 解析并打印表单数据
+            if 'application/x-www-form-urlencoded' in content_type:
+                params = parse_qs(post_data.decode('utf-8'))
+                for key, values in params.items():
+                    logger.info("%s: %s", key, values[0] if values else '')
+
+                # 如果有 content 字段,尝试解析 JSON
+                if 'content' in params:
+                    try:
+                        content_json = json.loads(params['content'][0])
+                        logger.info("-" * 40)
+                        logger.info("content 内容 (JSON):")
+                        for k, v in content_json.items():
+                            logger.info("  %s: %s", k, v)
+                    except json.JSONDecodeError:
+                        logger.warning("content 不是有效的 JSON 格式")
+
+            elif 'multipart/form-data' in content_type:
+                # 简单解析 multipart 数据
+                logger.info("收到 multipart/form-data 类型请求")
+                logger.info("原始数据: %s", post_data.decode('utf-8', errors='replace'))
+
+            else:
+                # 尝试作为 JSON 解析
+                try:
+                    json_data = json.loads(post_data.decode('utf-8'))
+                    logger.info("JSON 数据:")
+                    for key, value in json_data.items():
+                        logger.info("  %s: %s", key, value)
+                except json.JSONDecodeError:
+                    logger.info("原始数据: %s", post_data.decode('utf-8', errors='replace'))
+
+            logger.info("=" * 60)
+
+            # 发送成功响应
+            self.send_response(200)
+            self.send_header('Content-Type', 'application/json')
+            self.send_header('Access-Control-Allow-Origin', '*')
+            self.end_headers()
+
+            response = {
+                "code": 0,
+                "msg": "success",
+                "data": {
+                    "receive_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
+                    "notify_id": "test_response"
+                }
+            }
+            self.wfile.write(json.dumps(response).encode('utf-8'))
+
+        except Exception as e:
+            logger.error("处理请求时发生错误: %s", str(e))
+            self.send_response(500)
+            self.send_header('Content-Type', 'application/json')
+            self.end_headers()
+            error_response = {"code": -1, "msg": str(e)}
+            self.wfile.write(json.dumps(error_response).encode('utf-8'))
+
+    def do_GET(self):
+        """处理 GET 请求 - 用于健康检查"""
+        self.send_response(200)
+        self.send_header('Content-Type', 'application/json')
+        self.send_header('Access-Control-Allow-Origin', '*')
+        self.end_headers()
+
+        health_response = {
+            "status": "ok",
+            "service": "callback-server",
+            "time": datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+        }
+        self.wfile.write(json.dumps(health_response).encode('utf-8'))
+
+    def log_message(self, format, *args):
+        """自定义日志格式"""
+        logger.info(format % args)
+
+
+def main():
+    """主函数"""
+    print(f"""
+╔═══════════════════════════════════════════════════════════╗
+║           回调通知监听服务器                             ║
+╠═══════════════════════════════════════════════════════════╣
+║  监听端口: {PORT:<46}║
+║  监听路径: POST /callback                               ║
+║  健康检查: GET  /                                       ║
+╠═══════════════════════════════════════════════════════════╣
+║  按 Ctrl+C 停止服务器                                   ║
+╚═══════════════════════════════════════════════════════════╝
+    """)
+
+    with socketserver.TCPServer(("", PORT), CallbackHandler) as httpd:
+        logger.info("服务器启动成功,监听端口 %d", PORT)
+        try:
+            httpd.serve_forever()
+        except KeyboardInterrupt:
+            logger.info("服务器已停止")
+            httpd.shutdown()
+
+
+if __name__ == "__main__":
+    main()

+ 6 - 15
frontend/src/views/module_payment/apikey/index.vue

@@ -453,7 +453,7 @@ Signature: {signature}</code></pre>
                 <pre><code># 原始请求数据
 {
   "account_book_id": "123456",
-  "amount": 100.00,
+  "amount": "100.00",
   "payee_info": {
     "identity_type": "ALIPAY_ACCOUNT",
     "name": "张三",
@@ -467,7 +467,7 @@ Signature: {signature}</code></pre>
 # 1. 过滤后(排除sign、空字符串、null)
 {
   "account_book_id": "123456",
-  "amount": 100.00,
+  "amount": "100.00",
   "payee_info": {
     "identity_type": "ALIPAY_ACCOUNT",
     "name": "张三",
@@ -536,7 +536,7 @@ Signature: {signature}</code></pre>
                     </tr>
                     <tr>
                       <td>amount</td>
-                      <td>number</td>
+                      <td>string</td>
                       <td>是</td>
                       <td>转账金额,单位为元,精确到小数点后两位,大于0.02元</td>
                     </tr>
@@ -674,7 +674,7 @@ Signature: {signature}</code></pre>
   -H 'Content-Type: application/json' \
   -d '{
     "account_book_id": "资金账号",
-    "amount": 100.00,
+    "amount": "100.00",
     "order_title": "转账标题",
     "third_biz_no": "商户订单号202604270001",
     "payee_info": {
@@ -732,7 +732,7 @@ Signature: {signature}</code></pre>
   "data": {
     "status": "SUCCESS",
     "order_no": "2026042711122334455",
-    "amount": 100.00,
+    "amount": "100.00",
     "payee_info": {
       "identity_type": "ALIPAY_ACCOUNT",
       "name": "张*",
@@ -807,11 +807,6 @@ Signature: {signature}</code></pre>
                       <td>string</td>
                       <td>通知ID,唯一标识</td>
                     </tr>
-                    <tr>
-                      <td>app_id</td>
-                      <td>string</td>
-                      <td>应用ID</td>
-                    </tr>
                     <tr>
                       <td>timestamp</td>
                       <td>int</td>
@@ -877,10 +872,6 @@ Content-Disposition: form-data; name="notify_id"
 
 n1234567890123456789
 ------WebKitFormBoundary
-Content-Disposition: form-data; name="app_id"
-
-1234567890123456789
-------WebKitFormBoundary
 Content-Disposition: form-data; name="timestamp"
 
 1715767200000
@@ -891,7 +882,7 @@ Content-Disposition: form-data; name="content"
   "status": "SUCCESS",
   "order_no": "2026042711122334455",
   "third_biz_no": "商户订单号202604270001",
-  "amount": 100.00,
+  "amount": "100.00",
   "created_time": "2026-04-27 11:22:33",
   "updated_time": "2026-04-27 11:25:45"
 }

+ 7 - 81
frontend/src/views/module_payment/employee/components/DepartmentForm.vue

@@ -38,59 +38,20 @@
           />
         </el-select>
       </el-form-item>
-
-      <el-form-item label="部门负责人" prop="leader_employee_id">
-        <el-select
-          v-model="formData.leader_employee_id"
-          placeholder="请选择部门负责人"
-          clearable
-        >
-          <el-option
-            v-for="employee in employeeOptions"
-            :key="employee.value"
-            :label="employee.label"
-            :value="employee.value"
-          />
-        </el-select>
-      </el-form-item>
-
-      <el-form-item label="排序值" prop="sort_order">
-        <el-input-number
-          v-model="formData.sort_order"
-          :min="0"
-          :step="1"
-          placeholder="请输入排序值"
-        />
-      </el-form-item>
-
-      <el-form-item label="状态" prop="status">
-        <el-select v-model="formData.status" placeholder="请选择状态">
-          <el-option
-            v-for="(label, value) in DEPARTMENT_STATUS_LABEL"
-            :key="value"
-            :label="label"
-            :value="value"
-          />
-        </el-select>
-      </el-form-item>
     </el-form>
   </div>
 </template>
 
 <script setup lang="ts">
-import { ref, reactive, computed, onMounted, watch } from 'vue';
+import { ref, reactive, onMounted, watch } from 'vue';
 import { ElMessage, ElLoading } from 'element-plus';
-import DepartmentAPI, { DepartmentInfo, DEPARTMENT_STATUS_LABEL, DepartmentStatus } from '@/api/module_payment/department';
-import EmployeeAPI from '@/api/module_payment/employee';
+import DepartmentAPI, { DepartmentInfo } from '@/api/module_payment/department';
 
 // 部门表单数据类型
 interface DepartmentForm {
   name: string;
   code: string;
   parent_id: string;
-  leader_employee_id: string;
-  sort_order: number;
-  status: string;
 }
 
 const props = defineProps<{
@@ -109,10 +70,7 @@ const loading = ref(false);
 const formData = reactive<DepartmentForm>({
   name: '',
   code: '',
-  parent_id: '',
-  leader_employee_id: '',
-  sort_order: 0,
-  status: DepartmentStatus.ACTIVE
+  parent_id: ''
 });
 
 const rules = reactive({
@@ -121,7 +79,6 @@ const rules = reactive({
 });
 
 const departmentOptions = ref<any[]>([]);
-const employeeOptions = ref<any[]>([]);
 
 // 加载部门选项
 const loadDepartmentOptions = async () => {
@@ -135,26 +92,6 @@ const loadDepartmentOptions = async () => {
   }
 };
 
-// 加载员工选项
-const loadEmployeeOptions = async () => {
-  try {
-    const res = await EmployeeAPI.listEmployee({
-      enterprise_id: props.enterpriseId,
-      page_no: 1,
-      page_size: 1000
-    });
-    if (res.data.code === 200) {
-      const employees = res.data.data?.items || [];
-      employeeOptions.value = employees.map((emp: any) => ({
-        value: emp.employee_id,
-        label: emp.employee_name
-      }));
-    }
-  } catch (error) {
-    console.error('加载员工选项失败:', error);
-  }
-};
-
 // 生成部门编码
 const generateDepartmentCode = async () => {
   try {
@@ -189,9 +126,6 @@ const loadDepartmentDetail = async () => {
         formData.name = data.department.department_name;
         formData.code = data.department.department_code;
         formData.parent_id = data.department.parent_department_id || '';
-        formData.leader_employee_id = data.department.leader_employee_id || '';
-        formData.sort_order = data.department.sort_order || 0;
-        formData.status = data.department.status;
       }
     } catch (error) {
       console.error('加载部门详情失败:', error);
@@ -214,17 +148,13 @@ const submitForm = async (isContinue = false) => {
             enterprise_id: props.enterpriseId!,
             department_name: formData.name,
             department_code: formData.code,
-            parent_department_id: formData.parent_id,
-            sort_order: formData.sort_order,
-            leader_employee_id: formData.leader_employee_id
+            parent_department_id: formData.parent_id || undefined
           });
         } else {
           res = await DepartmentAPI.updateDepartment(props.departmentId!, props.enterpriseId!, {
             department_name: formData.name,
             department_code: formData.code,
-            parent_department_id: formData.parent_id,
-            sort_order: formData.sort_order,
-            leader_employee_id: formData.leader_employee_id
+            parent_department_id: formData.parent_id || undefined
           });
         }
         
@@ -232,15 +162,11 @@ const submitForm = async (isContinue = false) => {
           ElMessage.success(props.type === 'create' ? '创建部门成功' : '更新部门成功');
           
           if (isContinue && props.type === 'create') {
-            // 重置表单,保持企业ID
-            const enterpriseId = props.enterpriseId;
+            // 重置表单
             Object.assign(formData, {
               name: '',
               code: '',
-              parent_id: '',
-              leader_employee_id: '',
-              sort_order: 0,
-              status: DepartmentStatus.ACTIVE
+              parent_id: ''
             });
             // 重新生成部门编码
             await generateDepartmentCode();

+ 6 - 22
frontend/src/views/module_payment/employee/index.vue

@@ -97,26 +97,10 @@
                 </template>
                 <el-table-column v-if="deptContentCols.find((col) => col.prop === 'selection')?.show" type="selection"
                   min-width="55" align="center" />
-                <el-table-column v-if="deptContentCols.find((col) => col.prop === 'index')?.show" type="index" label="序号"
-                  min-width="60" align="center" />
                 <el-table-column v-if="deptContentCols.find((col) => col.prop === 'name')?.show" key="name" label="部门名称"
                   prop="name" min-width="150" show-overflow-tooltip />
                 <el-table-column v-if="deptContentCols.find((col) => col.prop === 'code')?.show" key="code" label="部门编码"
                   prop="code" min-width="120" show-overflow-tooltip />
-                <el-table-column v-if="deptContentCols.find((col) => col.prop === 'parent_name')?.show" key="parent_name" label="上级部门"
-                  prop="parent_name" min-width="150" show-overflow-tooltip />
-                <el-table-column v-if="deptContentCols.find((col) => col.prop === 'leader_employee_name')?.show" key="leader_employee_name" label="部门负责人"
-                  prop="leader_employee_name" min-width="120" show-overflow-tooltip />
-                <el-table-column v-if="deptContentCols.find((col) => col.prop === 'sort_order')?.show" key="sort_order" label="排序值"
-                  prop="sort_order" min-width="80" align="center" sortable />
-                <el-table-column v-if="deptContentCols.find((col) => col.prop === 'status')?.show" key="status" label="状态"
-                  prop="status" min-width="100">
-                  <template #default="scope">
-                    <el-tag :type="DEPARTMENT_STATUS_TAG_TYPE[scope.row.status]">
-                      {{ DEPARTMENT_STATUS_LABEL[scope.row.status] || scope.row.status }}
-                    </el-tag>
-                  </template>
-                </el-table-column>
                 <el-table-column v-if="deptContentCols.find((col) => col.prop === 'created_time')?.show" key="created_time"
                   label="创建时间" prop="created_time" min-width="160" sortable />
                 <el-table-column v-if="deptContentCols.find((col) => col.prop === 'operation')?.show" fixed="right"
@@ -367,7 +351,7 @@ const deptSearchConfig = reactive<ISearchConfig>({
       type: "select",
       options: Object.entries(DEPARTMENT_STATUS_LABEL).map(([value, label]) => ({
         label,
-        value
+        value,
       })),
       attrs: { placeholder: "请选择状态", clearable: true },
     },
@@ -383,13 +367,13 @@ const deptContentCols = reactive<
   }>
 >([
   { prop: "selection", label: "选择框", show: false },
-  { prop: "index", label: "序号", show: true },
+  // { prop: "index", label: "序号", show: true },
   { prop: "name", label: "部门名称", show: true },
   { prop: "code", label: "部门编码", show: true },
-  { prop: "parent_name", label: "上级部门", show: true },
-  { prop: "leader_employee_name", label: "部门负责人", show: true },
-  { prop: "sort_order", label: "排序值", show: true },
-  { prop: "status", label: "状态", show: true },
+  // { prop: "parent_name", label: "上级部门", show: true },
+  // { prop: "leader_employee_name", label: "部门负责人", show: true },
+  // { prop: "sort_order", label: "排序值", show: true },
+  // { prop: "status", label: "状态", show: true },
   { prop: "created_time", label: "创建时间", show: true },
   { prop: "operation", label: "操作", show: true },
 ]);