浏览代码

Merge branch 'master' of http://62.234.61.92:3000/wjm/mec-cloud_IntelligentManufacturing_CLIENT

lph 11 月之前
父节点
当前提交
86e5c6974c
共有 85 个文件被更改,包括 7028 次插入469 次删除
  1. 5 5
      zkqy-admin/src/main/resources/application.yml
  2. 24 13
      zkqy-business/src/main/java/com/zkqy/business/controller/CommonController.java
  3. 11 0
      zkqy-common/src/main/java/com/zkqy/common/params/ProcessCommonEntity.java
  4. 24 0
      zkqy-framework/src/main/java/com/zkqy/framework/params/CommonEntityAspect.java
  5. 115 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/PocurementdetailsController.java
  6. 175 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/PurchaseOrderController.java
  7. 287 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/Pocurementdetails.java
  8. 302 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/PurchaseOrder.java
  9. 18 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/vo/PurchaseOrderVo.java
  10. 79 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/PocurementdetailsMapper.java
  11. 70 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/PurchaseOrderMapper.java
  12. 61 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IPocurementdetailsService.java
  13. 102 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IPurchaseOrderService.java
  14. 97 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/PocurementdetailsServiceImpl.java
  15. 213 0
      zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/PurchaseOrderServiceImpl.java
  16. 219 0
      zkqy-fujian-amichi/src/main/resources/mapper/PocurementdetailsMapper.xml
  17. 177 0
      zkqy-fujian-amichi/src/main/resources/mapper/PurchaseOrderMapper.xml
  18. 28 6
      zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/CommonServiceImpl.java
  19. 4 7
      zkqy-ui/.env.development
  20. 78 0
      zkqy-ui/src/api/amichi/purchase/purchaseOrder.js
  21. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzqx1.png
  22. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzqx2.png
  23. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzqx3.png
  24. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzqx4.png
  25. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzqx5.png
  26. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzqx6.png
  27. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzqx7.png
  28. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzqx8.png
  29. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzqx9.png
  30. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dztx1.png
  31. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dztx2.png
  32. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dztx3.png
  33. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dztx4.png
  34. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dztx5.png
  35. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dztx6.png
  36. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzyz1.png
  37. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzyz2.png
  38. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzyz3.png
  39. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzyz4.png
  40. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzyz5.png
  41. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/dzyz6.png
  42. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/footerLogo.png
  43. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/pic1.png
  44. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/pic2.png
  45. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/pic3.png
  46. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/pic4.png
  47. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/pic5.png
  48. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/pic6.png
  49. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/pic7.png
  50. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/pic8.png
  51. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/pic9.png
  52. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/qdp1.png
  53. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/qdp2.png
  54. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/qdp3.png
  55. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/qdp4.png
  56. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/qdp5.png
  57. 二进制
      zkqy-ui/src/assets/operationInstructionimgs/titleLogo.png
  58. 0 3
      zkqy-ui/src/layout/components/Sidebar/SidebarItem.vue
  59. 0 2
      zkqy-ui/src/layout/components/Sidebar/index.vue
  60. 15 13
      zkqy-ui/src/layout/index.vue
  61. 238 10
      zkqy-ui/src/views/amichi/materiel/index.vue
  62. 85 0
      zkqy-ui/src/views/amichi/operationInstruction/components/attentionComp.vue
  63. 85 0
      zkqy-ui/src/views/amichi/operationInstruction/components/auxiliaryTools.vue
  64. 36 0
      zkqy-ui/src/views/amichi/operationInstruction/components/footerComp.vue
  65. 221 0
      zkqy-ui/src/views/amichi/operationInstruction/components/parameterComp.vue
  66. 174 0
      zkqy-ui/src/views/amichi/operationInstruction/components/stepImgComp.vue
  67. 142 0
      zkqy-ui/src/views/amichi/operationInstruction/components/titleComp.vue
  68. 451 0
      zkqy-ui/src/views/amichi/operationInstruction/index.vue
  69. 66 0
      zkqy-ui/src/views/amichi/operationInstruction/index3.vue
  70. 145 0
      zkqy-ui/src/views/amichi/operationInstruction/page/StatorWireEmbedding.vue
  71. 213 0
      zkqy-ui/src/views/amichi/operationInstruction/page/driverInstallation.vue
  72. 176 0
      zkqy-ui/src/views/amichi/operationInstruction/page/excitationStator.vue
  73. 292 0
      zkqy-ui/src/views/amichi/operationInstruction/page/statorCore.vue
  74. 331 0
      zkqy-ui/src/views/amichi/operationInstruction/page/statorPressFit.vue
  75. 822 0
      zkqy-ui/src/views/amichi/purchase/purchaseOrder/index.vue
  76. 705 0
      zkqy-ui/src/views/amichi/purchase/purchaseOrder/purchaseOrderApproval.vue
  77. 403 0
      zkqy-ui/src/views/amichi/purchase/purchaseOrderDetails/index.vue
  78. 65 14
      zkqy-ui/src/views/index.vue
  79. 1 1
      zkqy-ui/src/views/login.vue
  80. 3 7
      zkqy-ui/src/views/system/processModeling/flow-x6/graph/index.js
  81. 0 1
      zkqy-ui/src/views/tablelist/commonTable/BtnMenuList.vue
  82. 1 1
      zkqy-ui/src/views/tablelist/commonTable/embeddedIndex.vue
  83. 125 243
      zkqy-ui/src/views/tablelist/commonTable/listInfo.vue
  84. 143 140
      zkqy-ui/src/views/tablelist/commonTable/queryfrom.vue
  85. 1 3
      zkqy-ui/vue.config.js

+ 5 - 5
zkqy-admin/src/main/resources/application.yml

@@ -68,9 +68,9 @@ spring:
   servlet:
     multipart:
       # 单个文件大小
-      max-file-size: 10MB
+      max-file-size: 100MB
       # 设置总上传的文件大小
-      max-request-size: 20MB
+      max-request-size: 1000MB
   # 服务模块
   devtools:
     restart:
@@ -192,10 +192,10 @@ projectDownloadZip:
 OpenAuthorization2:
   MES:
     # 单点获取code、token、userinfo主机地址
-    URL: http://192.168.110.59:8066/oauth2
+    URL: http://192.168.110.114:8066/oauth2
     # 系统标识
     BASIC: mes
     # 重定向本系统主机地址
-    REDIRECT_URL: http://192.168.110.59:1025
+    REDIRECT_URL: http://192.168.110.114:1025
     # 回调地址
-    CALLBACK: http://192.168.110.59:8066/oauth/callback
+    CALLBACK: http://192.168.110.114:8066/oauth/callback

+ 24 - 13
zkqy-business/src/main/java/com/zkqy/business/controller/CommonController.java

@@ -9,11 +9,13 @@ import com.zkqy.common.core.domain.AjaxResult;
 import com.zkqy.common.core.page.TableDataInfo;
 import com.zkqy.common.enums.BusinessType;
 import com.zkqy.common.exception.tenantdatassource.TenantDataSource;
+import com.zkqy.common.params.ProcessCommonEntity;
 import com.zkqy.execution.produce.dispersed.entity.CommonEntity;
 import com.zkqy.execution.produce.dispersed.entity.TableSql;
 import com.zkqy.execution.produce.dispersed.service.ICommonService;
 import com.zkqy.execution.produce.dispersed.service.ITableSqlService;
 import org.springframework.web.bind.annotation.*;
+
 import javax.annotation.Resource;
 import java.util.HashMap;
 import java.util.List;
@@ -86,19 +88,27 @@ public class CommonController extends BaseController {
 
     /**
      * 联合查询通用sql
+     *
      * @param commonEntity
      * @return
      */
     @GetMapping("/getTableList")
+//    @ProcessCommonEntity
     public TableDataInfo queryTableList(CommonEntity commonEntity) throws TenantDataSource {
+//        if (true) {
+//            System.err.println(commonEntity.getQueryMap());
+//            System.err.println(commonEntity.getQueryMap().get("timehorizon") instanceof  String);
+//            return null;
+//        }
         TableSql tableSql = iTableSqlService.selectTableSqlByTSqlKey(commonEntity.getQueryMap().get("sqlkey").toString());
         String tableFormat = dragTableService.getTableFormatBySqlKey(tableSql.getSqlKey());
         startPage();  // 校验是否sqlserver 否执行 是执行另一种方式的分页
-        return getDataTable(commonService.queryGroupTableList(commonEntity, tableSql,tableFormat));
+        return getDataTable(commonService.queryGroupTableList(commonEntity, tableSql, tableFormat));
     }
 
     /**
      * 化纤厂联合查询销售单订单类型sql
+     *
      * @param commonEntity
      * @return
      */
@@ -107,7 +117,7 @@ public class CommonController extends BaseController {
         TableSql tableSql = iTableSqlService.selectTableSqlByTSqlKey(commonEntity.getQueryMap().get("sqlkey").toString());
         String tableFormat = dragTableService.getTableFormatBySqlKey(tableSql.getSqlKey());
         startPage();  // 校验是否sqlserver 否执行 是执行另一种方式的分页
-        return getDataTable(commonService.queryGroupTableList1(commonEntity, tableSql,tableFormat));
+        return getDataTable(commonService.queryGroupTableList1(commonEntity, tableSql, tableFormat));
     }
 
     /**
@@ -115,7 +125,7 @@ public class CommonController extends BaseController {
      */
     @GetMapping("/dragTableInfo")
     public AjaxResult dragTableInfo(CommonEntity commonEntity) {
-      return   AjaxResult.success(dragTableService.dragTableInfo(commonEntity.getQueryMap().get("tableKey").toString()));
+        return AjaxResult.success(dragTableService.dragTableInfo(commonEntity.getQueryMap().get("tableKey").toString()));
     }
 
     /**
@@ -139,16 +149,16 @@ public class CommonController extends BaseController {
      * 处理按钮通用接口(新增、修改、删除)
      */
     @PostMapping("/commonBtnHandle")
-    public AjaxResult commonBtnHandle(@RequestBody CommonEntity commonEntity){
+    public AjaxResult commonBtnHandle(@RequestBody CommonEntity commonEntity) {
         //按钮类型
         Long btnType = Long.valueOf(commonEntity.getBasicMap().get("btnType").toString());
         //是否开启弹窗
         String visible = commonEntity.getBasicMap().get("visible").toString();
         /*
-        * 判断什么类型走什么接口:
-        * btnType  10:新增、8:修改、9:删除、5:脚本
-        * visible  false代表弹窗未开启时走回显表单模板及数据信息接口;true代表弹窗开启时走保存数据接口
-        * */
+         * 判断什么类型走什么接口:
+         * btnType  10:新增、8:修改、9:删除、5:脚本
+         * visible  false代表弹窗未开启时走回显表单模板及数据信息接口;true代表弹窗开启时走保存数据接口
+         * */
         if (btnType == ButtonTypeConstants.INSERT && visible.equals("true")) {
             return toAjax(commonService.batchInsert(commonEntity));
         } else if (btnType == ButtonTypeConstants.INSERT && visible.equals("false")) {
@@ -157,17 +167,17 @@ public class CommonController extends BaseController {
         } else if (btnType == ButtonTypeConstants.UPDATE && visible.equals("true")) {
             return toAjax(commonService.edit(commonEntity));
         } else if (btnType == ButtonTypeConstants.UPDATE && visible.equals("false")) {
-            Map<String,Object> map = new HashMap<>();
+            Map<String, Object> map = new HashMap<>();
             //获取模板信息
             String sqlKey = commonEntity.getBasicMap().get("sqlKey").toString();
             DragForm dragForm = dragFormService.selectDragFormBySqlKey(sqlKey);
-            map.put("template",dragForm);
+            map.put("template", dragForm);
             //返回结果
-            map.put("result",commonService.getInfoById(commonEntity));
+            map.put("result", commonService.getInfoById(commonEntity));
             return success(map);
         } else if (btnType == ButtonTypeConstants.DELETE) {
             return toAjax(commonService.batchDelete(commonEntity));
-        } else if(btnType == ButtonTypeConstants.SCRIPT) {
+        } else if (btnType == ButtonTypeConstants.SCRIPT) {
         }
         return warn("暂不支持该操作!");
     }
@@ -175,12 +185,13 @@ public class CommonController extends BaseController {
 
     /**
      * 查询表格组信息
+     *
      * @param commonEntity
      * @return
      */
     @GetMapping("/dragGroupTableInfo")
     public AjaxResult dragGroupTableInfo(CommonEntity commonEntity) {
-        return   AjaxResult.success(dragTableGroupService.selectDragTableGroup(commonEntity.getQueryMap().get("groupKey").toString()));
+        return AjaxResult.success(dragTableGroupService.selectDragTableGroup(commonEntity.getQueryMap().get("groupKey").toString()));
     }
 
     /**

+ 11 - 0
zkqy-common/src/main/java/com/zkqy/common/params/ProcessCommonEntity.java

@@ -0,0 +1,11 @@
+package com.zkqy.common.params;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.METHOD)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface ProcessCommonEntity {
+}

+ 24 - 0
zkqy-framework/src/main/java/com/zkqy/framework/params/CommonEntityAspect.java

@@ -0,0 +1,24 @@
+package com.zkqy.framework.params;
+
+import com.zkqy.common.params.ProcessCommonEntity;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Aspect
+@Component
+public class CommonEntityAspect {
+
+    @Around("@annotation(processCommonEntity)")
+    public Object processCommonEntityMethods(ProceedingJoinPoint joinPoint, ProcessCommonEntity processCommonEntity) throws Throwable {
+        Object[] args = joinPoint.getArgs();
+        for (Object arg : args) {
+            System.err.println("自定义注解使用:" + arg);
+        }
+        // 继续执行原方法  
+        return joinPoint.proceed();
+    }
+}

+ 115 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/PocurementdetailsController.java

@@ -0,0 +1,115 @@
+package com.zkqy.amichi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.amichi.domain.Pocurementdetails;
+import com.zkqy.amichi.service.IPocurementdetailsService;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import com.zkqy.common.core.page.TableDataInfo;
+
+/**
+ * 采购明细Controller
+ *
+ * @author zkqy
+ * @date 2024-07-01
+ */
+@RestController
+@RequestMapping("/amichi/pocurementdetails")
+@Api(value = "/amichi/pocurementdetails", description = "采购明细-接口")
+public class PocurementdetailsController extends BaseController
+{
+
+
+    @Autowired
+    private IPocurementdetailsService pocurementdetailsService;
+
+    /**
+     * 查询采购明细列表
+     */
+    //@PreAuthorize("@ss.hasPermi('amichi:pocurementdetails:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "查询采购明细列表")
+    public TableDataInfo list(Pocurementdetails pocurementdetails)
+    {
+        startPage();
+        List<Pocurementdetails> list = pocurementdetailsService.selectPocurementdetailsList(pocurementdetails);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出采购明细列表
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:pocurementdetails:export')")
+    @Log(title = "采购明细", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ApiOperation(value = "导出采购明细列表")
+    public void export(HttpServletResponse response, Pocurementdetails pocurementdetails)
+    {
+        List<Pocurementdetails> list = pocurementdetailsService.selectPocurementdetailsList(pocurementdetails);
+        ExcelUtil<Pocurementdetails> util = new ExcelUtil<Pocurementdetails>(Pocurementdetails.class);
+        util.exportExcel(response, list, "采购明细数据");
+    }
+
+    /**
+     * 获取采购明细详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:pocurementdetails:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "获取采购明细详细信息")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(pocurementdetailsService.selectPocurementdetailsById(id));
+    }
+
+    /**
+     * 新增采购明细
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:pocurementdetails:add')")
+    @Log(title = "采购明细", businessType = BusinessType.INSERT)
+    @PostMapping
+    @ApiOperation(value = "新增采购明细")
+    public AjaxResult add(@RequestBody Pocurementdetails pocurementdetails)
+    {
+        return toAjax(pocurementdetailsService.insertPocurementdetails(pocurementdetails));
+    }
+
+    /**
+     * 修改采购明细
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:pocurementdetails:edit')")
+    @Log(title = "采购明细", businessType = BusinessType.UPDATE)
+    @PutMapping
+    @ApiOperation(value = "修改采购明细")
+    public AjaxResult edit(@RequestBody Pocurementdetails pocurementdetails)
+    {
+        return toAjax(pocurementdetailsService.updatePocurementdetails(pocurementdetails));
+    }
+
+    /**
+     * 删除采购明细
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:pocurementdetails:remove')")
+    @Log(title = "采购明细", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    @ApiOperation(value = "删除采购明细")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(pocurementdetailsService.deletePocurementdetailsByIds(ids));
+    }
+}

+ 175 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/controller/PurchaseOrderController.java

@@ -0,0 +1,175 @@
+package com.zkqy.amichi.controller;
+
+import java.util.List;
+import javax.servlet.http.HttpServletResponse;
+
+import com.zkqy.amichi.domain.vo.PurchaseOrderVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.DeleteMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import com.zkqy.common.annotation.Log;
+import com.zkqy.common.core.controller.BaseController;
+import com.zkqy.common.core.domain.AjaxResult;
+import com.zkqy.common.enums.BusinessType;
+import com.zkqy.amichi.domain.PurchaseOrder;
+import com.zkqy.amichi.service.IPurchaseOrderService;
+import com.zkqy.common.utils.poi.ExcelUtil;
+import com.zkqy.common.core.page.TableDataInfo;
+
+/**
+ * 采购Controller
+ *
+ * @author zkqy
+ * @date 2024-07-01
+ */
+@RestController
+@RequestMapping("/amichi/purchaseOrder")
+@Api(value = "/amichi/purchaseOrder", description = "采购-接口")
+public class PurchaseOrderController extends BaseController
+{
+    @Autowired
+    private IPurchaseOrderService purchaseOrderService;
+
+    /**
+     * 查询采购列表
+     */
+    //@PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:list')")
+    @GetMapping("/list")
+    @ApiOperation(value = "查询采购列表")
+    public TableDataInfo list(PurchaseOrder purchaseOrder)
+    {
+        startPage();
+
+        List<PurchaseOrder> list = purchaseOrderService.selectPurchaseOrderList(purchaseOrder);
+        return getDataTable(list);
+    }
+
+    /**
+     * 导出采购列表
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:export')")
+    @Log(title = "采购", businessType = BusinessType.EXPORT)
+    @PostMapping("/export")
+    @ApiOperation(value = "导出采购列表")
+    public void export(HttpServletResponse response, PurchaseOrder purchaseOrder)
+    {
+        List<PurchaseOrder> list = purchaseOrderService.selectPurchaseOrderList(purchaseOrder);
+        ExcelUtil<PurchaseOrder> util = new ExcelUtil<PurchaseOrder>(PurchaseOrder.class);
+        util.exportExcel(response, list, "采购数据");
+    }
+
+    /**
+     * 获取采购详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:query')")
+    @GetMapping(value = "/{id}")
+    @ApiOperation(value = "获取采购详细信息")
+    public AjaxResult getInfo(@PathVariable("id") Long id)
+    {
+        return success(purchaseOrderService.selectPurchaseOrderById(id));
+    }
+
+    /**
+     * 获取采购详细信息
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:query')")
+    @GetMapping(value = "/getOne/{id}")
+    @ApiOperation(value = "获取采购详细信息")
+    public AjaxResult getgetOneInfo(@PathVariable("id") Long id)
+    {
+        return success(purchaseOrderService.selectPurchaseOrderByIdVo(id));
+    }
+
+    /**
+     * 新增采购
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:add')")
+    @Log(title = "采购", businessType = BusinessType.INSERT)
+    @PostMapping
+    @ApiOperation(value = "新增采购")
+    public AjaxResult add(@RequestBody PurchaseOrder purchaseOrder)
+    {
+        return toAjax(purchaseOrderService.insertPurchaseOrder(purchaseOrder));
+    }
+
+    /**
+     * 新增采购
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:add')")
+    @Log(title = "采购", businessType = BusinessType.INSERT)
+    @PostMapping("/insertPurchaseOrder")
+    @ApiOperation(value = "新增采购")
+    public AjaxResult insertPurchaseOrder(@RequestBody PurchaseOrderVo purchaseOrderVo)
+    {
+        return toAjax(purchaseOrderService.insertPurchaseOrderVo(purchaseOrderVo));
+    }
+
+    /**
+     * 修改采购
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:edit')")
+    @Log(title = "采购", businessType = BusinessType.UPDATE)
+    @PutMapping("")
+    @ApiOperation(value = "修改采购")
+    public AjaxResult edit(@RequestBody PurchaseOrder purchaseOrder)
+    {
+        return toAjax(purchaseOrderService.updatePurchaseOrder(purchaseOrder));
+    }
+
+
+    /**
+     * 修改采购状态信息
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:edit')")
+    @Log(title = "采购", businessType = BusinessType.UPDATE)
+    @PostMapping("/updatePurchaseOrderState")
+    @ApiOperation(value = "修改采购")
+    public AjaxResult updatePurchaseOrderState(@RequestBody PurchaseOrder purchaseOrder)
+    {
+        return toAjax(purchaseOrderService.updatePurchaseOrderState(purchaseOrder));
+    }
+    /**
+     * 修改采购
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:edit')")
+    @Log(title = "采购", businessType = BusinessType.UPDATE)
+    @PostMapping("/updatePurchaseOrder")
+    @ApiOperation(value = "修改采购")
+    public AjaxResult editVo(@RequestBody PurchaseOrderVo purchaseOrder)
+    {
+        return toAjax(purchaseOrderService.updatePurchaseOrderVo(purchaseOrder));
+    }
+
+//    /**
+//     * 删除采购
+//     */
+//    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:remove')")
+//    @Log(title = "采购", businessType = BusinessType.DELETE)
+//    @DeleteMapping("/{ids}")
+//    @ApiOperation(value = "删除采购")
+//    public AjaxResult remove(@PathVariable Long[] ids)
+//    {
+//        return toAjax(purchaseOrderService.deletePurchaseOrderByIds(ids));
+//    }
+
+    /**
+     * 删除采购
+     */
+    @PreAuthorize("@ss.hasPermi('amichi:purchaseOrder:remove')")
+    @Log(title = "采购", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{ids}")
+    @ApiOperation(value = "删除采购")
+    public AjaxResult remove(@PathVariable Long[] ids)
+    {
+        return toAjax(purchaseOrderService.updatePurchaseOrderDelete(ids));
+    }
+}

+ 287 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/Pocurementdetails.java

@@ -0,0 +1,287 @@
+package com.zkqy.amichi.domain;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zkqy.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zkqy.common.annotation.Excel;
+
+/**
+ * 采购明细对象 pocurementdetails
+ * 
+ * @author zkqy
+ * @date 2024-07-01
+ */
+public class Pocurementdetails extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 采购单id */
+    @Excel(name = "采购单id")
+    private String purchaseId;
+
+    /** 采购组织 */
+    @Excel(name = "采购组织")
+    private String organization;
+
+    /** 需求组织 */
+    @Excel(name = "需求组织")
+    private String demand;
+
+    /** 物料编码 */
+    @Excel(name = "物料编码")
+    private String materialnum;
+
+    /** 物料名称 */
+    @Excel(name = "物料名称")
+    private String materialname;
+
+    /** 规格型号 */
+    @Excel(name = "规格型号")
+    private String model;
+
+    /** 单位 */
+    @Excel(name = "单位")
+    private String company;
+
+    /** 申请数量 */
+    @Excel(name = "申请数量")
+    private String quantity;
+
+    /** 批准数量 */
+    @Excel(name = "批准数量")
+    private String approval;
+
+    /** 到货日期 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "到货日期", width = 30, dateFormat = "yyyy-MM-dd")
+    private Date reachtime;
+
+    /** 备用1 */
+    @Excel(name = "备用1")
+    private String sparea;
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String state;
+
+
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 数据条审批状态(默认字段 0:已提交、1:已通过、2:不通过、3:未提交、4:驳回、5:审批中) */
+    @Excel(name = "数据条审批状态", readConverterExp = "默=认字段,0=:已提交、1:已通过、2:不通过、3:未提交、4:驳回、5:审批中")
+    private String dataApprovalStatus;
+
+    /** 流程编号 */
+    @Excel(name = "流程编号")
+    private String processKey;
+
+    /** 任务编码 */
+    @Excel(name = "任务编码")
+    private String taskProcessKey;
+
+    /** 任务节点编码 */
+    @Excel(name = "任务节点编码")
+    private String taskNodeKey;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setPurchaseId(String purchaseId) 
+    {
+        this.purchaseId = purchaseId;
+    }
+
+    public String getPurchaseId() 
+    {
+        return purchaseId;
+    }
+    public void setOrganization(String organization) 
+    {
+        this.organization = organization;
+    }
+
+    public String getOrganization() 
+    {
+        return organization;
+    }
+    public void setDemand(String demand) 
+    {
+        this.demand = demand;
+    }
+
+    public String getDemand() 
+    {
+        return demand;
+    }
+    public void setMaterialnum(String materialnum) 
+    {
+        this.materialnum = materialnum;
+    }
+
+    public String getMaterialnum() 
+    {
+        return materialnum;
+    }
+    public void setMaterialname(String materialname) 
+    {
+        this.materialname = materialname;
+    }
+
+    public String getMaterialname() 
+    {
+        return materialname;
+    }
+    public void setModel(String model) 
+    {
+        this.model = model;
+    }
+
+    public String getModel() 
+    {
+        return model;
+    }
+    public void setCompany(String company) 
+    {
+        this.company = company;
+    }
+
+    public String getCompany() 
+    {
+        return company;
+    }
+    public void setQuantity(String quantity) 
+    {
+        this.quantity = quantity;
+    }
+
+    public String getQuantity() 
+    {
+        return quantity;
+    }
+    public void setApproval(String approval) 
+    {
+        this.approval = approval;
+    }
+
+    public String getApproval() 
+    {
+        return approval;
+    }
+    public void setReachtime(Date reachtime) 
+    {
+        this.reachtime = reachtime;
+    }
+
+    public Date getReachtime() 
+    {
+        return reachtime;
+    }
+    public void setSparea(String sparea) 
+    {
+        this.sparea = sparea;
+    }
+
+    public String getSparea() 
+    {
+        return sparea;
+    }
+    public void setState(String state) 
+    {
+        this.state = state;
+    }
+
+    public String getState() 
+    {
+        return state;
+    }
+
+    public void setDelFlag(String delFlag)
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag()
+    {
+        return delFlag;
+    }
+    public void setDataApprovalStatus(String dataApprovalStatus) 
+    {
+        this.dataApprovalStatus = dataApprovalStatus;
+    }
+
+    public String getDataApprovalStatus() 
+    {
+        return dataApprovalStatus;
+    }
+    public void setProcessKey(String processKey) 
+    {
+        this.processKey = processKey;
+    }
+
+    public String getProcessKey() 
+    {
+        return processKey;
+    }
+    public void setTaskProcessKey(String taskProcessKey) 
+    {
+        this.taskProcessKey = taskProcessKey;
+    }
+
+    public String getTaskProcessKey() 
+    {
+        return taskProcessKey;
+    }
+    public void setTaskNodeKey(String taskNodeKey) 
+    {
+        this.taskNodeKey = taskNodeKey;
+    }
+
+    public String getTaskNodeKey() 
+    {
+        return taskNodeKey;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("purchaseId", getPurchaseId())
+            .append("organization", getOrganization())
+            .append("demand", getDemand())
+            .append("materialnum", getMaterialnum())
+            .append("materialname", getMaterialname())
+            .append("model", getModel())
+            .append("company", getCompany())
+            .append("quantity", getQuantity())
+            .append("approval", getApproval())
+            .append("reachtime", getReachtime())
+            .append("sparea", getSparea())
+            .append("state", getState())
+            .append("remark", getRemark())
+            .append("createById", getCreateById())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateById", getUpdateById())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("delFlag", getDelFlag())
+            .append("dataApprovalStatus", getDataApprovalStatus())
+            .append("processKey", getProcessKey())
+            .append("taskProcessKey", getTaskProcessKey())
+            .append("taskNodeKey", getTaskNodeKey())
+            .toString();
+    }
+}

+ 302 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/PurchaseOrder.java

@@ -0,0 +1,302 @@
+package com.zkqy.amichi.domain;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.zkqy.common.core.domain.BaseEntity;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+import com.zkqy.common.annotation.Excel;
+
+/**
+ * 采购对象 purchase_order
+ * 
+ * @author zkqy
+ * @date 2024-07-01
+ */
+public class PurchaseOrder extends BaseEntity
+{
+    private static final long serialVersionUID = 1L;
+
+    /** 主键 */
+    private Long id;
+
+    /** 采购编号 */
+    @Excel(name = "采购编号")
+    private String number;
+
+    /** 申请组织 */
+    @Excel(name = "申请组织")
+    private String apply;
+
+
+    @Excel(name = "币别", width = 30)
+    private String currency;
+
+
+
+    /** 申请时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @Excel(name = "申请时间", width = 30, dateFormat = "yyyy-MM-dd")
+    private LocalDate applytime;
+
+    public LocalDate getApplytime() {
+        return applytime;
+    }
+
+    public void setApplytime(LocalDate applytime) {
+        this.applytime = applytime;
+    }
+
+    /** 申请部门 */
+    @Excel(name = "申请部门")
+    private String department;
+
+    /** 合计金额 */
+    @Excel(name = "合计金额")
+    private Long total;
+
+    /** 申请人 */
+    @Excel(name = "申请人")
+    private String applypeople;
+
+    /** 创建人 */
+    @Excel(name = "创建人")
+    private String createpeople;
+
+    /** 审批人 */
+    @Excel(name = "审批人")
+    private String approval;
+
+    /** 审批时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "审批时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime approvaltime;
+
+    /** 备用 */
+    @Excel(name = "备用")
+    private String sparea;
+
+    /** 备用 */
+    @Excel(name = "一级审批意见")
+    private String approvalOpinionFirst;
+
+    public String getApprovalOpinionFirst() {
+        return approvalOpinionFirst;
+    }
+
+    public void setApprovalOpinionFirst(String approvalOpinionFirst) {
+        this.approvalOpinionFirst = approvalOpinionFirst;
+    }
+
+    /** 状态 */
+    @Excel(name = "状态")
+    private String state;
+
+
+    /** 删除标志(0代表存在 2代表删除) */
+    private String delFlag;
+
+    /** 数据条审批状态(默认字段 0:已提交、1:已通过、2:不通过、3:未提交、4:驳回、5:审批中) */
+    @Excel(name = "数据条审批状态", readConverterExp = "默=认字段,0=:已提交、1:已通过、2:不通过、3:未提交、4:驳回、5:审批中")
+    private String dataApprovalStatus;
+
+    /** 流程编号 */
+    @Excel(name = "流程编号")
+    private String processKey;
+
+    /** 任务编码 */
+    @Excel(name = "任务编码")
+    private String taskProcessKey;
+
+    /** 任务节点编码 */
+    @Excel(name = "任务节点编码")
+    private String taskNodeKey;
+
+    public void setId(Long id) 
+    {
+        this.id = id;
+    }
+
+    public Long getId() 
+    {
+        return id;
+    }
+    public void setNumber(String number) 
+    {
+        this.number = number;
+    }
+
+    public String getNumber() 
+    {
+        return number;
+    }
+    public void setApply(String apply) 
+    {
+        this.apply = apply;
+    }
+
+    public String getApply() 
+    {
+        return apply;
+    }
+    public void setCurrency(String currency)
+    {
+        this.currency = currency;
+    }
+
+    public String getCurrency()
+    {
+        return currency;
+    }
+    public void setDepartment(String department) 
+    {
+        this.department = department;
+    }
+
+    public String getDepartment() 
+    {
+        return department;
+    }
+    public void setTotal(Long total) 
+    {
+        this.total = total;
+    }
+
+    public Long getTotal() 
+    {
+        return total;
+    }
+    public void setApplypeople(String applypeople) 
+    {
+        this.applypeople = applypeople;
+    }
+
+    public String getApplypeople() 
+    {
+        return applypeople;
+    }
+    public void setCreatepeople(String createpeople) 
+    {
+        this.createpeople = createpeople;
+    }
+
+    public String getCreatepeople() 
+    {
+        return createpeople;
+    }
+    public void setApproval(String approval) 
+    {
+        this.approval = approval;
+    }
+
+    public String getApproval() 
+    {
+        return approval;
+    }
+    public void setApprovaltime(LocalDateTime approvaltime)
+    {
+        this.approvaltime = approvaltime;
+    }
+
+    public LocalDateTime getApprovaltime()
+    {
+        return approvaltime;
+    }
+
+    public void setSparea(String sparea) 
+    {
+        this.sparea = sparea;
+    }
+
+    public String getSparea() 
+    {
+        return sparea;
+    }
+    public void setState(String state) 
+    {
+        this.state = state;
+    }
+
+    public String getState() 
+    {
+        return state;
+    }
+
+    public void setDelFlag(String delFlag) 
+    {
+        this.delFlag = delFlag;
+    }
+
+    public String getDelFlag() 
+    {
+        return delFlag;
+    }
+    public void setDataApprovalStatus(String dataApprovalStatus) 
+    {
+        this.dataApprovalStatus = dataApprovalStatus;
+    }
+
+    public String getDataApprovalStatus() 
+    {
+        return dataApprovalStatus;
+    }
+    public void setProcessKey(String processKey) 
+    {
+        this.processKey = processKey;
+    }
+
+    public String getProcessKey() 
+    {
+        return processKey;
+    }
+    public void setTaskProcessKey(String taskProcessKey) 
+    {
+        this.taskProcessKey = taskProcessKey;
+    }
+
+    public String getTaskProcessKey() 
+    {
+        return taskProcessKey;
+    }
+    public void setTaskNodeKey(String taskNodeKey) 
+    {
+        this.taskNodeKey = taskNodeKey;
+    }
+
+    public String getTaskNodeKey() 
+    {
+        return taskNodeKey;
+    }
+
+    @Override
+    public String toString() {
+        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
+            .append("id", getId())
+            .append("number", getNumber())
+            .append("apply", getApply())
+            .append("currency", getCurrency())
+            .append("department", getDepartment())
+            .append("total", getTotal())
+            .append("applypeople", getApplypeople())
+            .append("createpeople", getCreatepeople())
+            .append("approval", getApproval())
+            .append("approvaltime", getApprovaltime())
+            .append("sparea", getSparea())
+            .append("state", getState())
+            .append("remark", getRemark())
+            .append("createById", getCreateById())
+            .append("createBy", getCreateBy())
+            .append("createTime", getCreateTime())
+            .append("updateById", getUpdateById())
+            .append("updateBy", getUpdateBy())
+            .append("updateTime", getUpdateTime())
+            .append("delFlag", getDelFlag())
+            .append("dataApprovalStatus", getDataApprovalStatus())
+            .append("processKey", getProcessKey())
+            .append("taskProcessKey", getTaskProcessKey())
+            .append("taskNodeKey", getTaskNodeKey())
+            .toString();
+    }
+}

+ 18 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/domain/vo/PurchaseOrderVo.java

@@ -0,0 +1,18 @@
+package com.zkqy.amichi.domain.vo;
+
+import com.zkqy.amichi.domain.Pocurementdetails;
+import com.zkqy.amichi.domain.PurchaseOrder;
+
+import java.util.List;
+
+public class PurchaseOrderVo extends PurchaseOrder {
+    private List<Pocurementdetails> pocurementdetailsList;
+
+    public List<Pocurementdetails> getPocurementdetailsList() {
+        return pocurementdetailsList;
+    }
+
+    public void setPocurementdetailsList(List<Pocurementdetails> pocurementdetailsList) {
+        this.pocurementdetailsList = pocurementdetailsList;
+    }
+}

+ 79 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/PocurementdetailsMapper.java

@@ -0,0 +1,79 @@
+package com.zkqy.amichi.mapper;
+
+import java.util.List;
+import com.zkqy.amichi.domain.Pocurementdetails;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 采购明细Mapper接口
+ * 
+ * @author zkqy
+ * @date 2024-07-01
+ */
+@Mapper
+public interface PocurementdetailsMapper 
+{
+    /**
+     * 查询采购明细
+     * 
+     * @param id 采购明细主键
+     * @return 采购明细
+     */
+    public Pocurementdetails selectPocurementdetailsById(Long id);
+
+    /**
+     * 查询采购明细列表
+     * 
+     * @param pocurementdetails 采购明细
+     * @return 采购明细集合
+     */
+    public List<Pocurementdetails> selectPocurementdetailsList(Pocurementdetails pocurementdetails);
+
+    /**
+     * 新增采购明细
+     * 
+     * @param pocurementdetails 采购明细
+     * @return 结果
+     */
+    public int insertPocurementdetails(Pocurementdetails pocurementdetails);
+
+    /**
+     * 新增采购明细
+     *
+     * @param pocurementdetailsList 采购明细
+     * @return 结果
+     */
+    public int insertPocurementdetailsBatch(List<Pocurementdetails> pocurementdetailsList);
+
+    /**
+     * 修改采购明细
+     * 
+     * @param pocurementdetails 采购明细
+     * @return 结果
+     */
+    public int updatePocurementdetails(Pocurementdetails pocurementdetails);
+
+    /**
+     * 删除采购明细
+     * 
+     * @param id 采购明细主键
+     * @return 结果
+     */
+    public int deletePocurementdetailsById(Long id);
+
+    /**
+     * 批量删除采购明细
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deletePocurementdetailsByIds(Long[] ids);
+
+    /**
+     * 批量删除采购明细
+     *
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int updatePocurementdetailsByIdsDelete(Long[] ids);
+}

+ 70 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/mapper/PurchaseOrderMapper.java

@@ -0,0 +1,70 @@
+package com.zkqy.amichi.mapper;
+
+import java.util.List;
+import com.zkqy.amichi.domain.PurchaseOrder;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 采购Mapper接口
+ * 
+ * @author zkqy
+ * @date 2024-07-01
+ */
+@Mapper
+public interface PurchaseOrderMapper 
+{
+    /**
+     * 查询采购
+     * 
+     * @param id 采购主键
+     * @return 采购
+     */
+    public PurchaseOrder selectPurchaseOrderById(Long id);
+
+    /**
+     * 查询采购列表
+     * 
+     * @param purchaseOrder 采购
+     * @return 采购集合
+     */
+    public List<PurchaseOrder> selectPurchaseOrderList(PurchaseOrder purchaseOrder);
+
+    /**
+     * 新增采购
+     * 
+     * @param purchaseOrder 采购
+     * @return 结果
+     */
+    public int insertPurchaseOrder(PurchaseOrder purchaseOrder);
+
+    /**
+     * 修改采购
+     * 
+     * @param purchaseOrder 采购
+     * @return 结果
+     */
+    public int updatePurchaseOrder(PurchaseOrder purchaseOrder);
+
+    /**
+     * 删除采购
+     * 
+     * @param id 采购主键
+     * @return 结果
+     */
+    public int deletePurchaseOrderById(Long id);
+
+    /**
+     * 批量删除采购
+     * 
+     * @param ids 需要删除的数据主键集合
+     * @return 结果
+     */
+    public int deletePurchaseOrderByIds(Long[] ids);
+
+    /**
+     * 劈来那个修改采购单状态
+     * @param ids
+     * @return
+     */
+    int updatePurchaseOrderBatchById(Long[] ids);
+}

+ 61 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IPocurementdetailsService.java

@@ -0,0 +1,61 @@
+package com.zkqy.amichi.service;
+
+import java.util.List;
+import com.zkqy.amichi.domain.Pocurementdetails;
+
+/**
+ * 采购明细Service接口
+ * 
+ * @author zkqy
+ * @date 2024-07-01
+ */
+public interface IPocurementdetailsService 
+{
+    /**
+     * 查询采购明细
+     * 
+     * @param id 采购明细主键
+     * @return 采购明细
+     */
+    public Pocurementdetails selectPocurementdetailsById(Long id);
+
+    /**
+     * 查询采购明细列表
+     * 
+     * @param pocurementdetails 采购明细
+     * @return 采购明细集合
+     */
+    public List<Pocurementdetails> selectPocurementdetailsList(Pocurementdetails pocurementdetails);
+
+    /**
+     * 新增采购明细
+     * 
+     * @param pocurementdetails 采购明细
+     * @return 结果
+     */
+    public int insertPocurementdetails(Pocurementdetails pocurementdetails);
+
+    /**
+     * 修改采购明细
+     * 
+     * @param pocurementdetails 采购明细
+     * @return 结果
+     */
+    public int updatePocurementdetails(Pocurementdetails pocurementdetails);
+
+    /**
+     * 批量删除采购明细
+     * 
+     * @param ids 需要删除的采购明细主键集合
+     * @return 结果
+     */
+    public int deletePocurementdetailsByIds(Long[] ids);
+
+    /**
+     * 删除采购明细信息
+     * 
+     * @param id 采购明细主键
+     * @return 结果
+     */
+    public int deletePocurementdetailsById(Long id);
+}

+ 102 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/IPurchaseOrderService.java

@@ -0,0 +1,102 @@
+package com.zkqy.amichi.service;
+
+import java.util.List;
+import com.zkqy.amichi.domain.PurchaseOrder;
+import com.zkqy.amichi.domain.vo.PurchaseOrderVo;
+
+/**
+ * 采购Service接口
+ * 
+ * @author zkqy
+ * @date 2024-07-01
+ */
+public interface IPurchaseOrderService 
+{
+    /**
+     * 查询采购
+     * 
+     * @param id 采购主键
+     * @return 采购
+     */
+    public PurchaseOrder selectPurchaseOrderById(Long id);
+
+    /**
+     * 查询采购
+     *
+     * @param id 采购主键
+     * @return 采购
+     */
+    public PurchaseOrderVo selectPurchaseOrderByIdVo(Long id);
+
+
+    /**
+     * 查询采购列表
+     * 
+     * @param purchaseOrder 采购
+     * @return 采购集合
+     */
+    public List<PurchaseOrder> selectPurchaseOrderList(PurchaseOrder purchaseOrder);
+
+    /**
+     * 新增采购
+     * 
+     * @param purchaseOrder 采购
+     * @return 结果
+     */
+    public int insertPurchaseOrder(PurchaseOrder purchaseOrder);
+
+    /**
+     * 修改采购
+     * 
+     * @param purchaseOrder 采购
+     * @return 结果
+     */
+    public int updatePurchaseOrder(PurchaseOrder purchaseOrder);
+
+
+    /**
+     * 修改采购
+     *
+     * @param purchaseOrder 采购
+     * @return 结果
+     */
+    public int updatePurchaseOrderVo(PurchaseOrderVo purchaseOrder);
+
+    /**
+     * 批量删除采购
+     * 
+     * @param ids 需要删除的采购主键集合
+     * @return 结果
+     */
+    public int deletePurchaseOrderByIds(Long[] ids);
+
+    /**
+     * 删除采购信息
+     * 
+     * @param id 采购主键
+     * @return 结果
+     */
+    public int deletePurchaseOrderById(Long id);
+
+    /**
+     * 新增采购单和采购单详情
+     * @param purchaseOrderVo
+     * @return
+     */
+    int insertPurchaseOrderVo(PurchaseOrderVo purchaseOrderVo);
+
+    /**
+     * 删除订单
+     * @param ids
+     * @return
+     */
+    int updatePurchaseOrderDelete(Long[] ids);
+
+
+    /**
+     * 修改审批状态
+     * @param purchaseOrder
+     * @return
+     */
+    int updatePurchaseOrderState(PurchaseOrder purchaseOrder);
+}

+ 97 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/PocurementdetailsServiceImpl.java

@@ -0,0 +1,97 @@
+package com.zkqy.amichi.service.impl;
+
+import java.util.List;
+import com.zkqy.common.utils.DateUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zkqy.amichi.mapper.PocurementdetailsMapper;
+import com.zkqy.amichi.domain.Pocurementdetails;
+import com.zkqy.amichi.service.IPocurementdetailsService;
+
+/**
+ * 采购明细Service业务层处理
+ * 
+ * @author zkqy
+ * @date 2024-07-01
+ */
+@Service
+public class PocurementdetailsServiceImpl implements IPocurementdetailsService 
+{
+    @Autowired
+    private PocurementdetailsMapper pocurementdetailsMapper;
+
+    /**
+     * 查询采购明细
+     * 
+     * @param id 采购明细主键
+     * @return 采购明细
+     */
+    @Override
+    public Pocurementdetails selectPocurementdetailsById(Long id)
+    {
+        return pocurementdetailsMapper.selectPocurementdetailsById(id);
+    }
+
+    /**
+     * 查询采购明细列表
+     * 
+     * @param pocurementdetails 采购明细
+     * @return 采购明细
+     */
+    @Override
+    public List<Pocurementdetails> selectPocurementdetailsList(Pocurementdetails pocurementdetails)
+    {
+        pocurementdetails.setDelFlag("0");
+        return pocurementdetailsMapper.selectPocurementdetailsList(pocurementdetails);
+    }
+
+    /**
+     * 新增采购明细
+     * 
+     * @param pocurementdetails 采购明细
+     * @return 结果
+     */
+    @Override
+    public int insertPocurementdetails(Pocurementdetails pocurementdetails)
+    {
+        pocurementdetails.setCreateTime(DateUtils.getNowDate());
+        return pocurementdetailsMapper.insertPocurementdetails(pocurementdetails);
+    }
+
+    /**
+     * 修改采购明细
+     * 
+     * @param pocurementdetails 采购明细
+     * @return 结果
+     */
+    @Override
+    public int updatePocurementdetails(Pocurementdetails pocurementdetails)
+    {
+        pocurementdetails.setUpdateTime(DateUtils.getNowDate());
+        return pocurementdetailsMapper.updatePocurementdetails(pocurementdetails);
+    }
+
+    /**
+     * 批量删除采购明细
+     * 
+     * @param ids 需要删除的采购明细主键
+     * @return 结果
+     */
+    @Override
+    public int deletePocurementdetailsByIds(Long[] ids)
+    {
+        return pocurementdetailsMapper.deletePocurementdetailsByIds(ids);
+    }
+
+    /**
+     * 删除采购明细信息
+     * 
+     * @param id 采购明细主键
+     * @return 结果
+     */
+    @Override
+    public int deletePocurementdetailsById(Long id)
+    {
+        return pocurementdetailsMapper.deletePocurementdetailsById(id);
+    }
+}

+ 213 - 0
zkqy-fujian-amichi/src/main/java/com/zkqy/amichi/service/impl/PurchaseOrderServiceImpl.java

@@ -0,0 +1,213 @@
+package com.zkqy.amichi.service.impl;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import com.zkqy.amichi.domain.Pocurementdetails;
+import com.zkqy.amichi.domain.vo.PurchaseOrderVo;
+import com.zkqy.amichi.mapper.PocurementdetailsMapper;
+import com.zkqy.common.utils.DateUtils;
+import com.zkqy.common.utils.SecurityUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import com.zkqy.amichi.mapper.PurchaseOrderMapper;
+import com.zkqy.amichi.domain.PurchaseOrder;
+import com.zkqy.amichi.service.IPurchaseOrderService;
+import org.springframework.transaction.annotation.Transactional;
+
+/**
+ * 采购Service业务层处理
+ * 
+ * @author zkqy
+ * @date 2024-07-01
+ */
+@Service
+public class PurchaseOrderServiceImpl implements IPurchaseOrderService 
+{
+    @Autowired
+    private PurchaseOrderMapper purchaseOrderMapper;
+
+    @Autowired
+    private PocurementdetailsMapper pocurementdetailsMapper;
+
+    /**
+     * 查询采购
+     * 
+     * @param id 采购主键
+     * @return 采购
+     */
+    @Override
+    public PurchaseOrder selectPurchaseOrderById(Long id)
+    {
+
+        return purchaseOrderMapper.selectPurchaseOrderById(id);
+    }
+
+    @Override
+    public PurchaseOrderVo selectPurchaseOrderByIdVo(Long id)
+    {
+        PurchaseOrderVo purchaseOrder = new PurchaseOrderVo();
+        Pocurementdetails pocurementdetails = new Pocurementdetails();
+        pocurementdetails.setPurchaseId(id.toString());
+        pocurementdetails.setDelFlag("0");
+        PurchaseOrder purchaseOrder1 = purchaseOrderMapper.selectPurchaseOrderById(id);
+        List<Pocurementdetails> pocurementdetails1 = pocurementdetailsMapper.selectPocurementdetailsList(pocurementdetails);
+        //拷贝
+        BeanUtils.copyProperties(purchaseOrder1, purchaseOrder);
+        purchaseOrder.setPocurementdetailsList(pocurementdetails1);
+        return purchaseOrder;
+    }
+
+    /**
+     * 查询采购列表
+     * 
+     * @param purchaseOrder 采购
+     * @return 采购
+     */
+    @Override
+    public List<PurchaseOrder> selectPurchaseOrderList(PurchaseOrder purchaseOrder)
+    {
+        purchaseOrder.setDelFlag("0");
+        return purchaseOrderMapper.selectPurchaseOrderList(purchaseOrder);
+    }
+
+    /**
+     * 新增采购
+     * 
+     * @param purchaseOrder 采购
+     * @return 结果
+     */
+    @Override
+    public int insertPurchaseOrder(PurchaseOrder purchaseOrder)
+    {
+        purchaseOrder.setCreateTime(DateUtils.getNowDate());
+        return purchaseOrderMapper.insertPurchaseOrder(purchaseOrder);
+    }
+
+    /**
+     * 修改采购
+     * 
+     * @param purchaseOrder 采购
+     * @return 结果
+     */
+    @Override
+    public int updatePurchaseOrder(PurchaseOrder purchaseOrder)
+    {
+        purchaseOrder.setUpdateTime(DateUtils.getNowDate());
+        return purchaseOrderMapper.updatePurchaseOrder(purchaseOrder);
+    }
+
+    @Override
+    @Transactional
+    public int updatePurchaseOrderVo(PurchaseOrderVo purchaseOrder) {
+        //删除旧的采购单数据
+        List<String> collect = purchaseOrder.getPocurementdetailsList().stream().map(Pocurementdetails::getPurchaseId).collect(Collectors.toList());
+        if (collect.size() > 0) {
+            // 使用流和map将List<String>转换为Long[]
+            Long[] longArray = collect.stream()
+                    .map(Long::valueOf) // 将String转换为Long
+                    .toArray(Long[]::new);
+            //这里应该改成逻辑删除
+//            pocurementdetailsMapper.deletePocurementdetailsByIds(longArray);
+            //逻辑删除
+            pocurementdetailsMapper.updatePocurementdetailsByIdsDelete(longArray);
+        }
+        //修改采购单数据
+        purchaseOrder.setUpdateBy(SecurityUtils.getUsername());
+        purchaseOrder.setUpdateById(SecurityUtils.getUserId());
+        purchaseOrder.setCreateTime(new Date());
+        int i = purchaseOrderMapper.updatePurchaseOrder(purchaseOrder);
+        //从新插入订单数据
+        int i1 = pocurementdetailsMapper.insertPocurementdetailsBatch(purchaseOrder.getPocurementdetailsList());
+        return 1;
+    }
+
+    /**
+     * 批量删除采购
+     * 
+     * @param ids 需要删除的采购主键
+     * @return 结果
+     */
+    @Override
+    public int deletePurchaseOrderByIds(Long[] ids)
+    {
+        return purchaseOrderMapper.deletePurchaseOrderByIds(ids);
+    }
+
+    /**
+     * 删除采购信息
+     * 
+     * @param id 采购主键
+     * @return 结果
+     */
+    @Override
+    public int deletePurchaseOrderById(Long id)
+    {
+        return purchaseOrderMapper.deletePurchaseOrderById(id);
+    }
+
+    @Override
+    @Transactional
+    public int insertPurchaseOrderVo(PurchaseOrderVo purchaseOrderVo) {
+
+
+        //创建人
+        purchaseOrderVo.setCreatepeople(SecurityUtils.getUsername());
+        //审批状态(0:待审批,1:通过 2:驳回 3:待发起)
+        purchaseOrderVo.setState("3");
+        //删除状态
+        purchaseOrderVo.setDelFlag("0");
+        //创建者id
+        purchaseOrderVo.setCreateById(SecurityUtils.getUserId());
+        //创建者
+        purchaseOrderVo.setCreateBy(SecurityUtils.getUsername());
+        //创建时间
+        purchaseOrderVo.setCreateTime(DateUtils.getNowDate());
+        //插入采购信息
+        int i1 = purchaseOrderMapper.insertPurchaseOrder(purchaseOrderVo);
+        //审批人
+
+        //审批时间
+
+        //赋值采购单id
+        List<Pocurementdetails> collect = purchaseOrderVo.getPocurementdetailsList().stream().map(pocurementdetails -> {
+            pocurementdetails.setPurchaseId(purchaseOrderVo.getId().toString());
+            //创建者id
+            pocurementdetails.setCreateById(SecurityUtils.getUserId());
+            //创建者
+            pocurementdetails.setCreateBy(SecurityUtils.getUsername());
+            //创建时间
+            pocurementdetails.setCreateTime(DateUtils.getNowDate());
+            //删除状态
+            pocurementdetails.setDelFlag("0");
+            return pocurementdetails;
+        }).collect(Collectors.toList());
+
+        //插入采购单明细信息
+        int i2 = pocurementdetailsMapper.insertPocurementdetailsBatch(collect);
+        return 1;
+    }
+
+    @Override
+    public int updatePurchaseOrderDelete(Long[] ids) {
+        purchaseOrderMapper.updatePurchaseOrderBatchById(ids);
+        return 1;
+    }
+
+    @Override
+    public int updatePurchaseOrderState(PurchaseOrder purchaseOrder) {
+        //审批人
+        purchaseOrder.setApproval(SecurityUtils.getUsername());
+        //审批时间
+        purchaseOrder.setApprovaltime(LocalDateTime.now());
+        //修改时间
+        purchaseOrder.setUpdateTime(DateUtils.getNowDate());
+        purchaseOrder.setUpdateById(SecurityUtils.getUserId());
+        purchaseOrder.setUpdateBy(SecurityUtils.getUsername());
+        return purchaseOrderMapper.updatePurchaseOrder(purchaseOrder);
+    }
+}

+ 219 - 0
zkqy-fujian-amichi/src/main/resources/mapper/PocurementdetailsMapper.xml

@@ -0,0 +1,219 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zkqy.amichi.mapper.PocurementdetailsMapper">
+    
+    <resultMap type="com.zkqy.amichi.domain.Pocurementdetails" id="PocurementdetailsResult">
+        <result property="id"    column="id"    />
+        <result property="purchaseId"    column="purchase_id"    />
+        <result property="organization"    column="organization"    />
+        <result property="demand"    column="demand"    />
+        <result property="materialnum"    column="materialnum"    />
+        <result property="materialname"    column="materialname"    />
+        <result property="model"    column="model"    />
+        <result property="company"    column="company"    />
+        <result property="quantity"    column="quantity"    />
+        <result property="approval"    column="approval"    />
+        <result property="reachtime"    column="reachtime"    />
+        <result property="sparea"    column="sparea"    />
+        <result property="state"    column="state"    />
+        <result property="remark"    column="remark"    />
+        <result property="createById"    column="create_by_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateById"    column="update_by_id"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="dataApprovalStatus"    column="data_approval_status"    />
+        <result property="processKey"    column="process_key"    />
+        <result property="taskProcessKey"    column="task_process_key"    />
+        <result property="taskNodeKey"    column="task_node_key"    />
+    </resultMap>
+
+    <sql id="selectPocurementdetailsVo">
+        select id, purchase_id, organization, demand, materialnum, materialname, model, company, quantity, approval, reachtime, sparea, state, remark, create_by_id, create_by, create_time, update_by_id, update_by, update_time, del_flag, data_approval_status, process_key, task_process_key, task_node_key from  {DBNAME}.pocurementdetails
+    </sql>
+
+    <select id="selectPocurementdetailsList" parameterType="com.zkqy.amichi.domain.Pocurementdetails" resultMap="PocurementdetailsResult">
+        <include refid="selectPocurementdetailsVo"/>
+        <where>  
+            <if test="purchaseId != null  and purchaseId != ''"> and purchase_id = #{purchaseId}</if>
+            <if test="organization != null  and organization != ''"> and organization = #{organization}</if>
+            <if test="demand != null  and demand != ''"> and demand = #{demand}</if>
+            <if test="delFlag != null">and del_flag = #{delFlag}</if>
+            <if test="materialnum != null  and materialnum != ''"> and materialnum = #{materialnum}</if>
+            <if test="materialname != null  and materialname != ''"> and materialname like concat('%', #{materialname}, '%')</if>
+            <if test="reachtime != null "> and reachtime = #{reachtime}</if>
+            <if test="state != null  and state != ''"> and `state` = #{state}</if>
+        </where>
+    </select>
+    
+    <select id="selectPocurementdetailsById" parameterType="Long" resultMap="PocurementdetailsResult">
+        <include refid="selectPocurementdetailsVo"/>
+        where id = #{id}
+    </select>
+        
+    <insert id="insertPocurementdetails" parameterType="com.zkqy.amichi.domain.Pocurementdetails" useGeneratedKeys="true" keyProperty="id">
+        insert into  {DBNAME}.pocurementdetails
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="purchaseId != null">purchase_id,</if>
+            <if test="organization != null">organization,</if>
+            <if test="demand != null">demand,</if>
+            <if test="materialnum != null">materialnum,</if>
+            <if test="materialname != null">materialname,</if>
+            <if test="model != null">model,</if>
+            <if test="company != null">company,</if>
+            <if test="quantity != null">quantity,</if>
+            <if test="approval != null">approval,</if>
+            <if test="reachtime != null">reachtime,</if>
+            <if test="sparea != null">sparea,</if>
+            <if test="state != null">`state`,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createById != null">create_by_id,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateById != null">update_by_id,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="dataApprovalStatus != null">data_approval_status,</if>
+            <if test="processKey != null">process_key,</if>
+            <if test="taskProcessKey != null">task_process_key,</if>
+            <if test="taskNodeKey != null">task_node_key,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="purchaseId != null">#{purchaseId},</if>
+            <if test="organization != null">#{organization},</if>
+            <if test="demand != null">#{demand},</if>
+            <if test="materialnum != null">#{materialnum},</if>
+            <if test="materialname != null">#{materialname},</if>
+            <if test="model != null">#{model},</if>
+            <if test="company != null">#{company},</if>
+            <if test="quantity != null">#{quantity},</if>
+            <if test="approval != null">#{approval},</if>
+            <if test="reachtime != null">#{reachtime},</if>
+            <if test="sparea != null">#{sparea},</if>
+            <if test="state != null">#{state},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createById != null">#{createById},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateById != null">#{updateById},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="dataApprovalStatus != null">#{dataApprovalStatus},</if>
+            <if test="processKey != null">#{processKey},</if>
+            <if test="taskProcessKey != null">#{taskProcessKey},</if>
+            <if test="taskNodeKey != null">#{taskNodeKey},</if>
+         </trim>
+    </insert>
+    <insert id="insertPocurementdetailsBatch" parameterType="java.util.List">
+        insert into {DBNAME}.pocurementdetails
+        <!-- 使用foreach遍历list中的每一个元素 -->
+        <foreach item="item"  collection="list"  separator =";">
+            <trim prefix="(" suffix=")" suffixOverrides=",">
+                <if test="item.purchaseId != null">purchase_id,</if>
+                <if test="item.organization != null">organization,</if>
+                <if test="item.demand != null">demand,</if>
+                <if test="item.materialnum != null">materialnum,</if>
+                <if test="item.materialname != null">materialname,</if>
+                <if test="item.model != null">model,</if>
+                <if test="item.company != null">company,</if>
+                <if test="item.quantity != null">quantity,</if>
+                <if test="item.approval != null">approval,</if>
+                <if test="item.reachtime != null">reachtime,</if>
+                <if test="item.sparea != null">sparea,</if>
+                <if test="item.state != null">`state`,</if>
+                <if test="item.remark != null">remark,</if>
+                <if test="item.createById != null">create_by_id,</if>
+                <if test="item.createBy != null">create_by,</if>
+                <if test="item.createTime != null">create_time,</if>
+                <if test="item.updateById != null">update_by_id,</if>
+                <if test="item.updateBy != null">update_by,</if>
+                <if test="item.updateTime != null">update_time,</if>
+                <if test="item.delFlag != null">del_flag,</if>
+                <if test="item.dataApprovalStatus != null">data_approval_status,</if>
+                <if test="item.processKey != null">process_key,</if>
+                <if test="item.taskProcessKey != null">task_process_key,</if>
+                <if test="item.taskNodeKey != null">task_node_key,</if>
+            </trim>
+            <trim prefix="values (" suffix=")" suffixOverrides=",">
+                <if test="item.purchaseId != null">#{item.purchaseId},</if>
+                <if test="item.organization != null">#{item.organization},</if>
+                <if test="item.demand != null">#{item.demand},</if>
+                <if test="item.materialnum != null">#{item.materialnum},</if>
+                <if test="item.materialname != null">#{item.materialname},</if>
+                <if test="item.model != null">#{item.model},</if>
+                <if test="item.company != null">#{item.company},</if>
+                <if test="item.quantity != null">#{item.quantity},</if>
+                <if test="item.approval != null">#{item.approval},</if>
+                <if test="item.reachtime != null">#{item.reachtime},</if>
+                <if test="item.sparea != null">#{item.sparea},</if>
+                <if test="item.state != null">#{item.state},</if>
+                <if test="item.remark != null">#{item.remark},</if>
+                <if test="item.createById != null">#{item.createById},</if>
+                <if test="item.createBy != null">#{item.createBy},</if>
+                <if test="item.createTime != null">#{item.createTime},</if>
+                <if test="item.updateById != null">#{item.updateById},</if>
+                <if test="item.updateBy != null">#{item.updateBy},</if>
+                <if test="item.updateTime != null">#{item.updateTime},</if>
+                <if test="item.delFlag != null">#{item.delFlag},</if>
+                <if test="item.dataApprovalStatus != null">#{item.dataApprovalStatus},</if>
+                <if test="item.processKey != null">#{item.processKey},</if>
+                <if test="item.taskProcessKey != null">#{item.taskProcessKey},</if>
+                <if test="item.taskNodeKey != null">#{item.taskNodeKey},</if>
+            </trim>
+        </foreach>
+    </insert>
+
+    <update id="updatePocurementdetails" parameterType="com.zkqy.amichi.domain.Pocurementdetails">
+        update  {DBNAME}.pocurementdetails
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="purchaseId != null">purchase_id = #{purchaseId},</if>
+            <if test="organization != null">organization = #{organization},</if>
+            <if test="demand != null">demand = #{demand},</if>
+            <if test="materialnum != null">materialnum = #{materialnum},</if>
+            <if test="materialname != null">materialname = #{materialname},</if>
+            <if test="model != null">model = #{model},</if>
+            <if test="company != null">company = #{company},</if>
+            <if test="quantity != null">quantity = #{quantity},</if>
+            <if test="approval != null">approval = #{approval},</if>
+            <if test="reachtime != null">reachtime = #{reachtime},</if>
+            <if test="sparea != null">sparea = #{sparea},</if>
+            <if test="state != null">`state` = #{state},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createById != null">create_by_id = #{createById},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateById != null">update_by_id = #{updateById},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="dataApprovalStatus != null">data_approval_status = #{dataApprovalStatus},</if>
+            <if test="processKey != null">process_key = #{processKey},</if>
+            <if test="taskProcessKey != null">task_process_key = #{taskProcessKey},</if>
+            <if test="taskNodeKey != null">task_node_key = #{taskNodeKey},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <update id="updatePocurementdetailsByIdsDelete" parameterType="String">
+        update  {DBNAME}.pocurementdetails set del_flag = 1  where purchase_id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+    <delete id="deletePocurementdetailsById" parameterType="Long">
+        delete from  {DBNAME}.pocurementdetails where id = #{id}
+    </delete>
+
+    <delete id="deletePocurementdetailsByIds" parameterType="String">
+        delete from  {DBNAME}.pocurementdetails where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 177 - 0
zkqy-fujian-amichi/src/main/resources/mapper/PurchaseOrderMapper.xml

@@ -0,0 +1,177 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.zkqy.amichi.mapper.PurchaseOrderMapper">
+    
+    <resultMap type="com.zkqy.amichi.domain.PurchaseOrder" id="PurchaseOrderResult">
+        <result property="id"    column="id"    />
+        <result property="number"    column="number"    />
+        <result property="apply"    column="apply"    />
+        <result property="currency"    column="currency"    />
+        <result property="applytime"    column="applytime"    />
+        <result property="department"    column="department"    />
+        <result property="total"    column="total"    />
+        <result property="applypeople"    column="applypeople"    />
+        <result property="createpeople"    column="createpeople"    />
+        <result property="approval"    column="approval"    />
+        <result property="approvaltime"    column="approvaltime"    />
+        <result property="sparea"    column="sparea"    />
+        <result property="state"    column="state"    />
+        <result property="remark"    column="remark"    />
+        <result property="createById"    column="create_by_id"    />
+        <result property="createBy"    column="create_by"    />
+        <result property="createTime"    column="create_time"    />
+        <result property="updateById"    column="update_by_id"    />
+        <result property="updateBy"    column="update_by"    />
+        <result property="updateTime"    column="update_time"    />
+        <result property="delFlag"    column="del_flag"    />
+        <result property="dataApprovalStatus"    column="data_approval_status"    />
+        <result property="processKey"    column="process_key"    />
+        <result property="taskProcessKey"    column="task_process_key"    />
+        <result property="taskNodeKey"    column="task_node_key"    />
+        <result property="approvalOpinionFirst"    column="approval_opinion_first"    />
+
+    </resultMap>
+
+    <sql id="selectPurchaseOrderVo">
+        select id, number, apply, currency, applytime,department, total, applypeople, createpeople, approval, approvaltime, sparea, state, remark, create_by_id, create_by, create_time, update_by_id, update_by, update_time, del_flag, data_approval_status, process_key, task_process_key, task_node_key,approval_opinion_first from {DBNAME}.purchase_order
+    </sql>
+
+    <select id="selectPurchaseOrderList" parameterType="com.zkqy.amichi.domain.PurchaseOrder" resultMap="PurchaseOrderResult">
+        <include refid="selectPurchaseOrderVo"/>
+        <where>  
+            <if test="number != null  and number != ''"> and `number` = #{number}</if>
+            <if test="apply != null  and apply != ''"> and apply = #{apply}</if>
+            <if test="currency != null "> and currency = #{currency}</if>
+            <if test="applytime != null "> and applytime = #{applytime}</if>
+            <if test="department != null  and department != ''"> and department = #{department}</if>
+            <if test="total != null "> and total = #{total}</if>
+            <if test="applypeople != null  and applypeople != ''"> and applypeople = #{applypeople}</if>
+            <if test="createpeople != null  and createpeople != ''"> and createpeople = #{createpeople}</if>
+            <if test="approval != null  and approval != ''"> and approval = #{approval}</if>
+            <if test="approvaltime != null "> and approvaltime = #{approvaltime}</if>
+            <if test="sparea != null  and sparea != ''"> and sparea = #{sparea}</if>
+            <if test="state != null  and state != ''"> and `state` = #{state}</if>
+            <if test="delFlag != null  and delFlag != ''"> and `del_flag` = #{delFlag}</if>
+            <if test="createById != null "> and create_by_id = #{createById}</if>
+            <if test="updateById != null "> and update_by_id = #{updateById}</if>
+            <if test="dataApprovalStatus != null  and dataApprovalStatus != ''"> and data_approval_status = #{dataApprovalStatus}</if>
+            <if test="processKey != null  and processKey != ''"> and process_key = #{processKey}</if>
+            <if test="taskProcessKey != null  and taskProcessKey != ''"> and task_process_key = #{taskProcessKey}</if>
+            <if test="taskNodeKey != null  and taskNodeKey != ''"> and task_node_key = #{taskNodeKey}</if>
+        </where>
+    </select>
+    
+    <select id="selectPurchaseOrderById" parameterType="Long" resultMap="PurchaseOrderResult">
+        <include refid="selectPurchaseOrderVo"/>
+        where id = #{id} and del_flag = 0
+    </select>
+        
+    <insert id="insertPurchaseOrder" parameterType="com.zkqy.amichi.domain.PurchaseOrder" useGeneratedKeys="true" keyProperty="id">
+        insert into {DBNAME}.purchase_order
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="number != null">`number`,</if>
+            <if test="apply != null">apply,</if>
+            <if test="currency != null">currency,</if>
+            <if test="applytime != null">applytime,</if>
+            <if test="department != null">department,</if>
+            <if test="total != null">total,</if>
+            <if test="applypeople != null">applypeople,</if>
+            <if test="createpeople != null">createpeople,</if>
+            <if test="approval != null">approval,</if>
+            <if test="approvaltime != null">approvaltime,</if>
+            <if test="sparea != null">sparea,</if>
+            <if test="state != null">`state`,</if>
+            <if test="remark != null">remark,</if>
+            <if test="createById != null">create_by_id,</if>
+            <if test="createBy != null">create_by,</if>
+            <if test="createTime != null">create_time,</if>
+            <if test="updateById != null">update_by_id,</if>
+            <if test="updateBy != null">update_by,</if>
+            <if test="updateTime != null">update_time,</if>
+            <if test="delFlag != null">del_flag,</if>
+            <if test="dataApprovalStatus != null">data_approval_status,</if>
+            <if test="processKey != null">process_key,</if>
+            <if test="taskProcessKey != null">task_process_key,</if>
+            <if test="taskNodeKey != null">task_node_key,</if>
+            <if test="approvalOpinionFirst != null">approval_opinion_first,</if>
+         </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="number != null">#{number},</if>
+            <if test="apply != null">#{apply},</if>
+            <if test="currency != null">#{currency},</if>
+            <if test="applytime != null">#{applytime},</if>
+            <if test="department != null">#{department},</if>
+            <if test="total != null">#{total},</if>
+            <if test="applypeople != null">#{applypeople},</if>
+            <if test="createpeople != null">#{createpeople},</if>
+            <if test="approval != null">#{approval},</if>
+            <if test="approvaltime != null">#{approvaltime},</if>
+            <if test="sparea != null">#{sparea},</if>
+            <if test="state != null">#{state},</if>
+            <if test="remark != null">#{remark},</if>
+            <if test="createById != null">#{createById},</if>
+            <if test="createBy != null">#{createBy},</if>
+            <if test="createTime != null">#{createTime},</if>
+            <if test="updateById != null">#{updateById},</if>
+            <if test="updateBy != null">#{updateBy},</if>
+            <if test="updateTime != null">#{updateTime},</if>
+            <if test="delFlag != null">#{delFlag},</if>
+            <if test="dataApprovalStatus != null">#{dataApprovalStatus},</if>
+            <if test="processKey != null">#{processKey},</if>
+            <if test="taskProcessKey != null">#{taskProcessKey},</if>
+            <if test="taskNodeKey != null">#{taskNodeKey},</if>
+            <if test="approvalOpinionFirst != null">#{approvalOpinionFirst},</if>
+         </trim>
+    </insert>
+
+    <update id="updatePurchaseOrder" parameterType="com.zkqy.amichi.domain.PurchaseOrder">
+        update {DBNAME}.purchase_order
+        <trim prefix="SET" suffixOverrides=",">
+            <if test="number != null">`number` = #{number},</if>
+            <if test="apply != null">apply = #{apply},</if>
+            <if test="currency != null">currency = #{currency},</if>
+            <if test="applytime != null">currency=#{applytime},</if>
+            <if test="department != null">department = #{department},</if>
+            <if test="total != null">total = #{total},</if>
+            <if test="applypeople != null">applypeople = #{applypeople},</if>
+            <if test="createpeople != null">createpeople = #{createpeople},</if>
+            <if test="approval != null">approval = #{approval},</if>
+            <if test="approvaltime != null">approvaltime = #{approvaltime},</if>
+            <if test="sparea != null">sparea = #{sparea},</if>
+            <if test="state != null">`state` = #{state},</if>
+            <if test="remark != null">remark = #{remark},</if>
+            <if test="createById != null">create_by_id = #{createById},</if>
+            <if test="createBy != null">create_by = #{createBy},</if>
+            <if test="createTime != null">create_time = #{createTime},</if>
+            <if test="updateById != null">update_by_id = #{updateById},</if>
+            <if test="updateBy != null">update_by = #{updateBy},</if>
+            <if test="updateTime != null">update_time = #{updateTime},</if>
+            <if test="delFlag != null">del_flag = #{delFlag},</if>
+            <if test="dataApprovalStatus != null">data_approval_status = #{dataApprovalStatus},</if>
+            <if test="processKey != null">process_key = #{processKey},</if>
+            <if test="taskProcessKey != null">task_process_key = #{taskProcessKey},</if>
+            <if test="taskNodeKey != null">task_node_key = #{taskNodeKey},</if>
+            <if test="approvalOpinionFirst != null">approval_opinion_first=#{approvalOpinionFirst},</if>
+        </trim>
+        where id = #{id}
+    </update>
+    <update id="updatePurchaseOrderBatchById">
+        update {DBNAME}.purchase_order set del_flag = 1  where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </update>
+
+    <delete id="deletePurchaseOrderById" parameterType="Long">
+        delete from {DBNAME}.purchase_order where id = #{id}
+    </delete>
+
+    <delete id="deletePurchaseOrderByIds" parameterType="String">
+        delete from {DBNAME}.purchase_order where id in
+        <foreach item="id" collection="array" open="(" separator="," close=")">
+            #{id}
+        </foreach>
+    </delete>
+</mapper>

+ 28 - 6
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/CommonServiceImpl.java

@@ -341,16 +341,38 @@ public class CommonServiceImpl implements ICommonService {
         queryMap.remove("sqlkey");
         queryMap.remove("queryCriteriaValue");
         AtomicReference<String> equivalent = new AtomicReference<>("");
-        queryMap.forEach((k, v) -> {
-            String querySqlWhere = equivalent.get() + " and " + k + " = " + v;
-            equivalent.set(querySqlWhere);
-        });
-
+        // 首先处理时间范围查询
         // 处理时间 开始时间-结束时间
-
         // 可能会存在多个时间范围的查询,根据查询字段名称做筛选条件
+        Map<String, Object> timeMap = JSONObject.parseObject(queryMap.get("timehorizon") != null ? queryMap.get("timehorizon").toString() : String.valueOf(new HashMap<String, Object>()));
+
+
+        String beginTimeSql = " AND date_format(#{field},'%Y%m%d%H%i%s') >= date_format('#{beginTime}','%Y%m%d%H%i%s')";
+        String endTimeSql = " AND date_format(#{field},'%Y%m%d%H%i%s') <= date_format('#{endTime}','%Y%m%d%H%i%s')";
 
 
+        //		<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
+        //			AND date_format(u.create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+        //		</if>
+        //		<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
+        //			AND date_format(u.create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+        //		</if>
+
+
+        //  处理时间sql拼接
+        timeMap.keySet().forEach(item -> {
+            Map<String, Object> endtime = (Map) timeMap.get(item);
+            String executeBeginTimesql = beginTimeSql.replace("#{field}", item).replace("#{beginTime}", endtime.get("beginTime").toString());
+            String executeEndTimeSql = endTimeSql.replace("#{field}", item).replace("#{endTime}", endtime.get("endTime").toString());
+            equivalent.set(executeBeginTimesql + executeEndTimeSql);
+        });
+        // 删除时间范围查询
+        queryMap.remove("timehorizon");
+        // 其他查询条件拼接
+        queryMap.forEach((k, v) -> {
+            String querySqlWhere = equivalent.get() + " and " + k + " = " + v;
+            equivalent.set(querySqlWhere);
+        });
         //联动表格查询
         AtomicReference<String> stringAtomicReference = new AtomicReference<>(endSQL);
         if (endSQL.contains("#{")) {

+ 4 - 7
zkqy-ui/.env.development

@@ -8,21 +8,18 @@ ENV = 'development'
 VUE_APP_BASE_API = '/dev-api'
 
 # 图片路径
-VUE_APP_BASE_IMG_API = 'http://192.168.110.59:1025/dev-api'
+VUE_APP_BASE_IMG_API = 'http://192.168.110.15:1025/dev-api'
 
 # 路由懒加载
 VUE_CLI_BABEL_TRANSPILE_MODULES = true
 
 #本项目地址
-# VUE_APP_BASE_API1 = 'http://192.168.110.83:8066/'
+VUE_APP_BASE_API1 = 'http://192.168.110.15:8066/'
 # VUE_APP_BASE_API1 = 'http://192.168.110.59:8066/'
-# VUE_APP_BASE_API1 = 'http://192.168.110.52:8066/'
-VUE_APP_BASE_API1 = 'http://192.168.110.76:8066/'
+# VUE_APP_BASE_API1 = 'http://192.168.110.76:8066/'
 
 # ws地址
-# VUE_APP_BASE_WS_API = '//192.168.110.83:9000'
-# VUE_APP_BASE_WS_API = '//192.168.110.76:8721'
-VUE_APP_BASE_WS_API = '//192.168.110.76:8721'
+VUE_APP_BASE_WS_API = '//192.168.110.15:9000'
 
 #数据引擎模块IP
 #VUE_APP_BASE_API2 = 'http://192.168.110.

+ 78 - 0
zkqy-ui/src/api/amichi/purchase/purchaseOrder.js

@@ -0,0 +1,78 @@
+import request from '@/utils/request'
+
+// 查询采购列表
+export function listPurchaseOrder(query) {
+  return request({
+    url: '/amichi/purchaseOrder/list',
+    method: 'get',
+    params: query
+  })
+}
+
+// 查询采购详细
+export function getPurchaseOrder(id) {
+  return request({
+    url: '/amichi/purchaseOrder/' + id,
+    method: 'get'
+  })
+}
+
+// 查询采购详细
+export function getPurchaseOrderOne(id) {
+  return request({
+    url: '/amichi/purchaseOrder/getOne/'+id,
+    method: 'get'
+  })
+}
+
+
+// 新增采购
+export function addPurchaseOrder(data) {
+  return request({
+    url: '/amichi/purchaseOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+// 新增采购
+export function addPurchaseOrderVo(data) {
+  return request({
+    url: '/amichi/purchaseOrder/insertPurchaseOrder',
+    method: 'post',
+    data: data
+  })
+}
+
+// 修改采购
+export function updatePurchaseOrder(data) {
+  return request({
+    url: '/amichi/purchaseOrder',
+    method: 'put',
+    data: data
+  })
+}
+
+// 修改采购
+export function updatePurchaseOrderVo(data) {
+  return request({
+    url: '/amichi/purchaseOrder/updatePurchaseOrder',
+    method: 'post',
+    data: data
+  })
+}
+// 删除采购
+export function delPurchaseOrder(id) {
+  return request({
+    url: '/amichi/purchaseOrder/' + id,
+    method: 'delete'
+  })
+}
+//更新采购状态
+export function updatePurchaseOrderState(data) {
+  return request({
+    url: '/amichi/purchaseOrder/updatePurchaseOrderState',
+    method: 'post',
+    data: data
+  })
+}

二进制
zkqy-ui/src/assets/operationInstructionimgs/dzqx1.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzqx2.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzqx3.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzqx4.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzqx5.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzqx6.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzqx7.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzqx8.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzqx9.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dztx1.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dztx2.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dztx3.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dztx4.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dztx5.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dztx6.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzyz1.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzyz2.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzyz3.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzyz4.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzyz5.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/dzyz6.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/footerLogo.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/pic1.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/pic2.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/pic3.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/pic4.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/pic5.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/pic6.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/pic7.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/pic8.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/pic9.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/qdp1.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/qdp2.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/qdp3.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/qdp4.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/qdp5.png


二进制
zkqy-ui/src/assets/operationInstructionimgs/titleLogo.png


+ 0 - 3
zkqy-ui/src/layout/components/Sidebar/SidebarItem.vue

@@ -96,14 +96,12 @@ export default {
       if (isExternal(this.basePath)) {
         if (routeQuery) {
           let query = JSON.parse(routeQuery);
-          console.log("query参数", query)
           if (query.key) {
             // 设置code
             query.key = window.localStorage.getItem("setoauthUUID" + this.userInfo.name);
             query.tenantCode = this.userInfo.tenant.tenantCode
             query.redirect_uri = encodeURIComponent(query.redirect_uri);
             query.params = encodeURIComponent(query.params);
-            console.log(query)
             let baseURL = this.basePath
             Object.keys(query).forEach((key, index) => {
               if (index == 0) {
@@ -115,7 +113,6 @@ export default {
             return baseURL;
           }
         }
-        console.log(this.basePath)
         return this.basePath
       }
 

+ 0 - 2
zkqy-ui/src/layout/components/Sidebar/index.vue

@@ -66,7 +66,6 @@ export default {
       if (meta.activeMenu) {
         return meta.activeMenu;
       }
-      console.log(path);
       return path;
     },
     showLogo() {
@@ -95,7 +94,6 @@ export default {
       } else {
         this.isCollapse = false;
       }
-      console.log(this.isCollapse);
     },
   },
   mounted() {

+ 15 - 13
zkqy-ui/src/layout/index.vue

@@ -6,7 +6,7 @@
         <el-col :span="12">
           <div class="logo-title">
             <!-- <img src="../assets/images/mes412.png" alt="" class="imgg" /> -->
-            <img :src="logo" alt="" class="imgg" />
+            <img :src="logo" alt="" class="imgg"/>
             <span class="title">{{ title }}</span>
             <!-- <img src="../assets/images/comlo.png" alt="" class="imgg" /> -->
           </div>
@@ -20,7 +20,7 @@
               <span style="">
                 <span class="jianbiase">{{ username || "默认用户" }}</span>
               </span>
-              <img :src="avatar" class="user-avatar" />
+              <img :src="avatar" class="user-avatar"/>
               <!-- <i class="el-icon-caret-bottom" /> -->
             </div>
             <el-dropdown-menu slot="dropdown" style="margin-top: -20px">
@@ -61,11 +61,11 @@
       >
         <div :class="{ 'fixed-header': fixedHeader }">
           <!-- <navbar /> -->
-          <tags-view v-if="needTagsView" />
+          <tags-view v-if="needTagsView"/>
         </div>
-        <app-main />
+        <app-main/>
         <right-panel>
-          <settings />
+          <settings/>
         </right-panel>
       </div>
     </div>
@@ -73,17 +73,17 @@
 </template>
 
 <script>
-import { mapGetters } from "vuex";
+import {mapGetters} from "vuex";
 import RightPanel from "@/components/RightPanel";
-import { AppMain, Navbar, Settings, Sidebar, TagsView } from "./components";
+import {AppMain, Navbar, Settings, Sidebar, TagsView} from "./components";
 import ResizeMixin from "./mixin/ResizeHandler";
-import { mapState } from "vuex";
+import {mapState} from "vuex";
 import variables from "@/assets/styles/variables.scss";
 import mes412 from "@/assets/images/mes412.svg";
 import mecLogoLogin from "@/assets/images/mec-logo-login.svg";
 import mecosLogo1 from "@/assets/images/mecosLogo1.svg";
 
-import { refreshToken } from "@/api/login";
+import {refreshToken} from "@/api/login";
 
 export default {
   name: "Layout",
@@ -168,10 +168,11 @@ export default {
           //   this.$router.push({path: "/login", query: {tenantCode: tenantCode}});
           // });
         })
-        .catch(() => {});
+        .catch(() => {
+        });
     },
     handleClickOutside() {
-      this.$store.dispatch("app/closeSideBar", { withoutAnimation: false });
+      this.$store.dispatch("app/closeSideBar", {withoutAnimation: false});
     },
     getlogo() {
       let logo = sessionStorage.getItem("logo");
@@ -190,8 +191,9 @@ export default {
   mounted() {
     this.getlogo();
     var user = JSON.parse(sessionStorage.getItem("sessionObj"));
-    this.userName = JSON.parse(user.data).username;
-
+    if (user) {
+      this.userName = JSON.parse(user.data()).username;
+    }
     // this.startTokenRefresh();
   },
   beforeDestroy() {

+ 238 - 10
zkqy-ui/src/views/amichi/materiel/index.vue

@@ -120,6 +120,9 @@
 <!--    /** 型号 */-->
 <!--    @Excel(name = "型号")-->
 <!--    private String modelNumber;-->
+      <div>
+
+      </div>
       <el-table
         class="sysDictInfoTable"
         :data="materialsList"
@@ -130,22 +133,138 @@
         :load="load"
         :tree-props="{children: 'children', hasChildren: 'hasChildren'}">
         <el-table-column
-          prop="materialCode"
-          label="物料编码"
+          v-for="(item, index) in tableHeadData" :key="index"
+          :prop="item.value"
+          :label="item.label"
+          align="center"
+          width="180"
+          >
+        </el-table-column>
+        <!-- <el-table-column
+          prop="specification"
+          align="center"
+          label="规格">
+        </el-table-column>
+        <el-table-column
+          prop="dosageMolecular"
+          align="center"
+          label="用量分子">
+        </el-table-column>
+        <el-table-column
+          prop="usageDenominator"
+          align="center"
+          label="用量:分母">
+        </el-table-column>
+        <el-table-column
+          prop="skipOrNot"
+          align="center"
+          label="是否跳层">
+        </el-table-column>
+        <el-table-column
+          prop="materialProperty"
+          align="center"
+          label="物料属性">
+        </el-table-column>
+        <el-table-column
+          prop="dataState"
+          align="center"
+          label="数据状态">
+        </el-table-column>
+        <el-table-column
+          prop="bomVersion"
+          align="center"
+          label="BOM版本">
+        </el-table-column>
+        <el-table-column
+          prop="materialIssueMethod"
+          align="center"
+          label="发料方式">
+        </el-table-column>
+        <el-table-column
+          prop="job"
           align="center"
-          width="180">
+          label="作业">
         </el-table-column>
         <el-table-column
-          prop="materialName"
-          label="物料名称"
+          prop="subitemType"
           align="center"
-          width="180">
+          label="子项类型">
         </el-table-column>
         <el-table-column
-          prop="modelNumber"
+          prop="standardDosage"
           align="center"
-          label="型号">
+          label="标准用量">
         </el-table-column>
+        <el-table-column
+          prop="actualQuantity"
+          align="center"
+          label="实际数量">
+        </el-table-column>
+        <el-table-column
+          prop="auxiliaryAttribute"
+          align="center"
+          label="辅助属性">
+        </el-table-column>
+        <el-table-column
+          prop="dosageType"
+          align="center"
+          label="用量类型">
+        </el-table-column>
+        <el-table-column
+          prop="dosageType"
+          align="center"
+          label="用量类型">
+        </el-table-column>
+        <el-table-column
+          prop="fixedLoss"
+          align="center"
+          label="固定损耗">
+        </el-table-column>
+        <el-table-column
+          prop="changeTheAttritionRate"
+          align="center"
+          label="变动损耗率">
+        </el-table-column>
+        <el-table-column
+          prop="alternativeStrategy"
+          align="center"
+          label="替代策略">
+        </el-table-column>
+        <el-table-column
+          prop="alternativeMode"
+          align="center"
+          label="替代方式">
+        </el-table-column>
+        <el-table-column
+          prop="substituteMaterial"
+          align="center"
+          label="替代主料">
+        </el-table-column>
+        <el-table-column
+          prop="effectiveDate"
+          align="center"
+          label="生效日期">
+        </el-table-column>
+        <el-table-column
+          prop="expirationDate"
+          align="center"
+          label="失效日期">
+        </el-table-column>
+        <el-table-column
+          prop="presenceOfCobyproducts"
+          align="center"
+          label="存在联副产品">
+        </el-table-column>
+        <el-table-column
+          prop="standardSubitemUsage"
+          align="center"
+          label="标准子项清单">
+        </el-table-column>
+        <el-table-column
+          prop="actualSubitemUsage"
+          align="center"
+          label="实际子项用量">
+        </el-table-column> -->
         <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
           <template slot-scope="scope">
             <el-dropdown @command="(command)=>{handleCommand(command, scope.row)}">
@@ -186,7 +305,7 @@
           <el-col :span="8">
             <el-form-item label="物料父级" prop="fid">
               <treeselect v-model="form.fid" :options="materialRows" :multiple="false" :disable-branch-nodes="false"
-                          :clear-on-select="true" :flat="true" :show-count="true" placeholder="请选择租户" style="width: 286.66px" />
+                          :clear-on-select="true" :flat="true" :show-count="true" placeholder="请选择父级物料信息" style="width: 286.66px" />
             </el-form-item>
           </el-col>
         </el-row>
@@ -434,7 +553,116 @@ export default {
       form: {},
       // 表单校验
       rules: {
-      }
+      },
+      tableHeadData: [{
+        label: '物料名称',
+        value: 'materialName',
+        isCheck: true
+      },{
+        label: '物料编码',
+        value: 'materialCode',
+        isCheck: true
+      },{
+        label: '物料父级',
+        value: 'fid',
+        isCheck: true
+      },{
+        label: '型号',
+        value: 'modelNumber',
+        isCheck: true
+      },{
+        label: '规格',
+        value: 'specification',
+        isCheck: true
+      },{
+        label: '用量分子',
+        value: 'dosageMolecular',
+        isCheck: false
+      },{
+        label: '用量:分母',
+        value: 'usageDenominator',
+        isCheck: false
+      },{
+        label: '是否跳层',
+        value: 'skipOrNot',
+        isCheck: false
+      },{
+        label: '物料属性',
+        value: 'materialProperty',
+        isCheck: false
+      },{
+        label: '数据状态',
+        value: 'dataState',
+        isCheck: false
+      },{
+        label: 'BOM版本',
+        value: 'bomVersion',
+        isCheck: false
+      },{
+        label: '发料方式',
+        value: 'materialIssueMethod',
+        isCheck: false
+      },{
+        label: '作业',
+        value: 'job',
+        isCheck: false
+      },{
+        label: '标准用量',
+        value: 'materialName',
+        isCheck: false
+      },{
+        label: '实际数量',
+        value: 'actualQuantity',
+        isCheck: false
+      },{
+        label: '辅助属性',
+        value: 'fixedLoss',
+        isCheck: false
+      },{
+        label: '变动损耗率',
+        value: 'changeTheAttritionRate',
+        isCheck: false
+      },{
+        label: '替代策略',
+        value: 'alternativeStrategy',
+        isCheck: false
+      },{
+        label: '替代方式',
+        value: 'alternativeMode',
+        isCheck: false
+      },{
+        label: '替代主料',
+        value: 'substituteMaterial',
+        isCheck: false
+      },{
+        label: '生效日期',
+        value: 'effectiveDate',
+        isCheck: false
+      },{
+        label: '失效日期',
+        value: 'expirationDate',
+        isCheck: false
+      },{
+        label: '库存量',
+        value: 'inventory',
+        isCheck: false
+      },{
+        label: '存在联副产品',
+        value: 'presenceOfCobyproducts',
+        isCheck: false
+      },{
+        label: '标准子项清单',
+        value: 'standardSubitemUsage',
+        isCheck: false
+      },{
+        label: '实际子项用量',
+        value: 'actualSubitemUsage',
+        isCheck: false
+      },{
+        label: '备注',
+        value: 'remark',
+        isCheck: false
+      }]
     };
   },
   created() {

+ 85 - 0
zkqy-ui/src/views/amichi/operationInstruction/components/attentionComp.vue

@@ -0,0 +1,85 @@
+<template>
+  <div class="attentionComp" :style="{borderBottom: isBorderBottom ? '1px solid #333': 0}">
+    <table>
+      <tr>
+        <td  :style="{color: color}" style="font-size: 18px;text-align: center;border-bottom: 1px solid #333;padding: 0;">注意事项</td>
+      </tr>
+      <tr>
+        <td>
+          <div v-for="item in attentData" style="white-space: pre-wrap;">{{ item }}</div>
+        </td>
+      </tr>
+    </table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'attentionComp',
+  props: {
+    attentData: {
+      type: Array,
+      default: function () {
+        return [] // 或者[]
+      }
+    },
+    isBorderBottom: {
+      type: Boolean,
+      default: false
+    },
+    color: {
+      type: String,
+      default: '#F93B39'
+    }
+  },
+  data() {
+    return {
+    }
+  },
+  methods: {
+
+  }
+}
+</script>
+
+<style scoped>
+ .attentionComp{
+  border: 1px solid #333;
+  border-bottom: 0;
+  /* height: calc(100vh - 320px); */
+ }
+/* 表格样式 */
+table {
+  width: 100%;
+  border-collapse: collapse;
+  /* 合并边框 */
+  /* border: 1px solid #333; */
+}
+
+tr {
+  /* line-height: 33px; */
+}
+
+th,
+td {
+  /* border: 1px solid #333; */
+  /* border-top: 0; */
+  text-align: left;
+  font-size: 14px;
+  padding: 10px;
+}
+
+td:nth-child(2n) {
+  width: 30%;
+}
+
+td:nth-child(2n -1) {
+  width: 20%;
+}
+
+.felx-center {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+</style>

+ 85 - 0
zkqy-ui/src/views/amichi/operationInstruction/components/auxiliaryTools.vue

@@ -0,0 +1,85 @@
+<template>
+  <div class="parameterComp">
+
+    <table :style="{borderTop: isBorderTop ? '0' : ''}">
+      <tr>
+        <td style=" font-size: 18px;" :style="{color: color}">所需辅助工装 量具 工具</td>
+      </tr>
+
+      <tr>
+        <td class="td">{{ tableData.type }}</td>
+      </tr>
+      <tr>
+        <td>{{ tableData.wire }}</td>
+      </tr>
+      <tr>
+        <td>{{ tableData.specs }}</td>
+      </tr>
+    </table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'auxiliaryTools',
+  props: {
+    tableData: {
+      type: Object,
+      default: function () {
+        return {} // 或者[]
+      }
+    },
+    isBorderTop: {
+      type: Boolean,
+      default: false
+    },
+    color: {
+      type: String,
+      default: '#005BAE'
+    }
+  },
+  data() {
+    return {
+    }
+  },
+  methods: {
+
+  }
+}
+</script>
+
+<style scoped>
+/* 表格样式 */
+table {
+  width: 100%;
+  border-collapse: collapse;
+  /* 合并边框 */
+  border: 1px solid #333;
+}
+.td {
+  height: 23px;
+}
+
+
+th,
+td {
+  border: 1px solid #333;
+  border-top: 0;
+  text-align: center;
+  font-size: 14px;
+}
+
+td:nth-child(2n) {
+  width: 30%;
+}
+
+td:nth-child(2n -1) {
+  width: 20%;
+}
+
+.felx-center {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+</style>

+ 36 - 0
zkqy-ui/src/views/amichi/operationInstruction/components/footerComp.vue

@@ -0,0 +1,36 @@
+<template>
+  <div class="footer">
+    <span class="info">FUJIAN FIRSTALL POWER TECHNOLOGY CO., LTD</span>
+    <div class="footer">
+      <img src="@/assets/operationInstructionimgs/footerLogo.png" alt="" class="img" srcset="">
+      <span class="title" style="font-weight: 500;">福建铨一电源科技有限公司</span>
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  name: 'footerComp',
+  data() {
+    return {
+
+    }
+  }
+}
+
+</script>
+<style scoped>
+.footer {
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+}
+.img {
+  width: 150px;
+}
+.info {
+  font-size: 12px;
+}
+.title {
+  font-size: 24px;
+}
+</style>

+ 221 - 0
zkqy-ui/src/views/amichi/operationInstruction/components/parameterComp.vue

@@ -0,0 +1,221 @@
+<template>
+  <div class="parameterComp">
+    <table v-if="type == 1">
+      <tr>
+        <td colspan="4" style="color: #005BAE; font-size: 18px;border-top: 0;">{{ title }}</td>
+      </tr>
+      <tr>
+        <td v-for="(item, index) in headData" :key="index">{{ item }}</td>
+      </tr>
+      <tr class="tr" v-for="(item, index) in tableData" :key="index">
+        <td>{{ item.type }}</td>
+        <td>{{ item.wire }}</td>
+        <td>{{ item.num }}</td>
+        <td>{{ item.specs }}</td>
+      </tr>
+    </table>
+    <table v-if="type == 2">
+      <tr>
+        <td colspan="4" style="color: #005BAE; font-size: 18px;border-top: 0;">224/48槽 绝缘材料规格表<br>150mm铁芯为例</td>
+      </tr>
+      <tr v-for="(item, index) in tableData" :key="index">
+        <td>{{ item.name }}</td>
+        <td colspan="3">{{ item.value }}</td>
+      </tr>
+      <tr>
+        <td colspan="4" style="text-align: left;padding: 15px;">
+          槽纸/薄膜=铁芯长+15<br>
+          层间绝缘纸=铁芯长+120
+        </td>
+      </tr>
+    </table>
+    <table v-if="type == 3">
+      <tr>
+        <td :colspan="headData.length" style="color: #005BAE; font-size: 18px;border-top: 0;">{{ title }}</td>
+      </tr>
+      <tr>
+        <td v-for="(item, index) in headData" :key="index">{{ item }}</td>
+      </tr>
+      <tr v-for="(item, index) in tableData" :key="index">
+        <td>{{ item.type }}</td>
+        <td style="white-space: pre-wrap;">{{ item.wire }}</td>
+        <td>{{ item.num }}</td>
+        <td>{{ item.specs }}</td>
+        <td>{{ item.size }}</td>
+        <td style="white-space: pre-wrap;">{{ item.line }}</td>
+      </tr>
+    </table>
+    <table v-if="type == 4">
+      <tr>
+        <td :colspan="headData.length" style="color: #005BAE; font-size: 18px;border-top: 0;">{{ title }}</td>
+      </tr>
+      <tr>
+        <td v-for="(item, index) in headData" :key="index">{{ item }}</td>
+      </tr>
+      <tr v-for="(item, index) in tableData" :key="index">
+        <td>{{ item.type }}</td>
+        <td>{{ item.wire }}</td>
+        <td>{{ item.num }}</td>
+        <td>{{ item.specs }}</td>
+        <td v-if="item.size" :rowspan="index == 0 || index == 3 ? 2 : 1">{{ item.size }}</td>
+      </tr>
+      <tr>
+        <td :colspan="headData.length" style="color: #F93B39;padding: 10px;">注意:螺栓连接深度尺寸是指《驱动片及垫片的厚度》除外的数值</td>
+      </tr>
+    </table>
+    <table v-if="type == 5">
+      <tr>
+        <td colspan="4" style="color: #005BAE; font-size: 18px;border-top: 0;">{{ title }}</td>
+      </tr>
+      <tr>
+        <td>环境温度</td>
+        <td>{{ `0~+40℃` }}</td>
+        <td>锁模压力</td>
+        <td>{{ `10t` }}</td>
+      </tr>
+      <tr>
+        <td>环境湿度</td>
+        <td>{{ `≤85%` }}</td>
+        <td>斜槽角度</td>
+        <td>{{ `偏置一个槽节距` }}</td>
+      </tr>
+      <tr>
+        <td class="td"></td>
+        <td></td>
+        <td></td>
+        <td></td>
+      </tr>
+    </table>
+    <table v-if="type == 6">
+      <tr>
+        <td colspan="4" style="color: #005BAE; font-size: 18px;border-top: 0;">{{ title }}</td>
+      </tr>
+      <tr>
+        <td>设备</td>
+        <td>{{ objData.device }}</td>
+        <td>{{ objData.device1 }}</td>
+        <td>{{ objData.device2 }}</td>
+      </tr>
+      <tr>
+        <td>环境温度</td>
+        <td>{{ objData.temp }}</td>
+        <td>{{ objData.temp1 }}</td>
+        <td>{{ objData.temp2 }}</td>
+      </tr>
+      <tr>
+        <td>环境湿度</td>
+        <td>{{ objData.humidity }}</td>
+        <td>{{ objData.humidity1 }}</td>
+        <td>{{ objData.humidity2 }}</td>
+      </tr>
+      <tr>
+        <td>压力</td>
+        <td>{{ objData.pressure }}</td>
+        <td>{{ objData.pressure1 }}</td>
+        <td>{{ objData.pressure2 }}</td>
+      </tr>
+      <tr>
+        <td>尺寸控制</td>
+        <td>{{ objData.size }}</td>
+        <td>{{ objData.size1 }}</td>
+        <td>{{ objData.size2 }}</td>
+      </tr>
+      <tr>
+        <td class="td"></td>
+        <td></td>
+        <td></td>
+        <td></td>
+      </tr>
+    </table>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'parameterComp',
+  props: {
+    tableData: {
+      type: Array,
+      default: function () {
+        return [] // 或者[]
+      }
+    },
+    type: {
+      type: String,
+      default: '1'
+    },
+    headData: {
+      type: Array,
+      default: function () {
+        return []// 或者[]
+      }
+    },
+    title: {
+      type: String,
+      default: ''
+    },
+    objData: {
+      type: Object,
+      default: function () {
+        return {} // 或者[]
+      }
+    }
+  },
+  data() {
+    return {
+    }
+  },
+  computed: {
+    formattedWire(wire) {
+      return wire.replace(' ', '<br>');
+    }
+  },
+  methods: {
+    cellStayle(row, colum, rowIndex, columnIndex) {
+      return "border-bottom: 1px solid #000;border-left: 1px solid #000;";
+
+      // row.row.viewFlag 为tableData中的属性
+    },
+  }
+}
+</script>
+
+<style scoped>
+/* 表格样式 */
+table {
+  width: 100%;
+  border-collapse: collapse;
+  /* 合并边框 */
+  /* border: 1px solid #333; */
+}
+
+tr:nth-last-child(1) {
+  padding-bottom: 30px;
+}
+
+.td {
+  height: 21px;
+}
+
+th,
+td {
+  border: 1px solid #333;
+  border-top: 0;
+  text-align: center;
+  font-size: 12px;
+}
+
+.tr td:nth-child(2n) {
+  width: 30%;
+}
+
+.tr td:nth-child(2n -1) {
+  width: 20%;
+}
+
+.felx-center {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+</style>

+ 174 - 0
zkqy-ui/src/views/amichi/operationInstruction/components/stepImgComp.vue

@@ -0,0 +1,174 @@
+<template>
+  <div class="container1">
+    <template v-if="col == 3">
+      <div class="box" v-for="(item, index) in data" :key="index">
+        <div v-if="item.bigImg" class="bigImg">
+          <div style="display: flex;">
+            <img :src="item.bigImg" style="width: 70%;" class="Img">
+            <img :src="item.bigImg1" style="width: 30%;">
+          </div>
+          <div class="textPOSI">
+            <div style="color: #FF003B;" class="step">{{ item.step }}</div>
+            <div v-for="(i, j) in item.text" style="white-space: pre-wrap;">{{ j + 1 }}、{{ i }}</div>
+          </div>
+        </div>
+        <div class="boxItem" v-else>
+          <img :src="item.img" :style="{ height: height }" class="img">
+          <div style="color: #FF003B;" class="step">{{ item.step }}</div>
+          <div v-for="(i, j) in item.text" v-if="item.step">{{ j + 1 }}、{{ i }}</div>
+        </div>
+      </div>
+    </template>
+    <template v-if="col == 4">
+      <div class="box4" v-for="(item, index) in data" :key="index">
+        <div class="boxItem">
+          <div v-if="index == 5">
+            <img :src="item.img" :style="{ height: '250px',width: '250%', paddingLeft: '40px' }" class="img">
+          </div>
+          <div v-else-if="index == 4">
+            <img :src="item.img" :style="{ height: '250px',}" class="img">
+          </div>
+          <img :src="item.img" v-else :style="{ height: height }" class="img">
+
+          <div v-if="index == 0" style="width: 120%; padding-left: 30px;">
+            <div style="color: #FF003B;" class="step">{{ item.step }}</div>
+            <div v-for="(i, j) in item.text">{{ j + 1 }}、{{ i }}</div>
+          </div>
+          <div v-if="index == 1" class="step2">
+            <div style="color: #FF003B;" class="step">{{ item.step }}</div>
+            <div v-for="(i, j) in item.text">{{ j + 1 }}、{{ i }}</div>
+          </div>
+          <div v-if="index == 3" style="margin-left: -40px;">
+            <div style="color: #FF003B;" class="step">{{ item.step }}</div>
+            <div v-for="(i, j) in item.text">{{ j + 1 }}、{{ i }}</div>
+          </div>
+
+        </div>
+      </div>
+    </template>
+    <template v-if="col == 0">
+      <div class="box" v-for="(item, index) in data" :key="index">
+        <div class="boxItem">
+          <!-- <div v-if="index == 5">
+            <img :src="item.img" :style="{ height: '250px',width: '250%', paddingLeft: '40px' }" class="img0">
+          </div>
+          <div v-else-if="index == 4">
+            <img :src="item.img" :style="{ height: '250px',}" class="img0">
+          </div> -->
+          <img :src="item.img"  :style="{ width: item.width }" class="img0">
+
+          <div v-if="index == 0" style="width: 120%;">
+            <div style="color: #FF003B;" class="step">{{ item.step }}</div>
+            <div v-for="(i, j) in item.text">{{ j + 1 }}、{{ i }}</div>
+          </div>
+          <div v-if="index == 1" class="step2">
+            <div style="color: #FF003B;" class="step">{{ item.step }}</div>
+            <div v-for="(i, j) in item.text">{{ j + 1 }}、{{ i }}</div>
+          </div>
+          <div v-if="index == 4 ||index == 5" style="margin-left: 1%;position: absolute;width: 15%;">
+            <div style="color: #FF003B;" class="step">{{ item.step }}</div>
+            <div v-for="(i, j) in item.text">{{ j + 1 }}、{{ i }}</div>
+          </div>
+
+        </div>
+      </div>
+    </template>
+
+  </div>
+</template>
+<script>
+import { string } from '@/components/updateModule/k-form-design/lib/k-form-design.common';
+
+export default {
+  props: {
+    data: {
+      type: Array,
+      default: function () {
+        return [] // 或者[]
+      }
+    },
+    height: {
+      type: String,
+      default: ''
+    },
+    type: {
+      type: String,
+      default: ''
+    },
+    col: {
+      type: String,
+      default: '3'
+    }
+  },
+  data() {
+    return {
+
+    }
+  }
+}
+</script>
+
+<style scoped>
+/* .container {
+
+} */
+.box {
+  width: 33%;
+  min-height: 139px;
+}
+
+.box4 {
+  width: 25%;
+  padding-bottom: 20px;
+}
+
+.box4 .img {
+  width: 180px;
+  height: 200px;
+}
+
+.step,
+.boxItem {
+  padding-top: 5px;
+}
+
+.step2 {
+  width: 200%;
+  padding-left: 50px;
+}
+
+.bigImg {
+  position: relative;
+  width: calc(100vw - 600px);
+  margin-top: 50px;
+
+  /* height: 145px; */
+}
+.img0 {
+  height: 220px;
+}
+.Img {
+  height: 280px;
+
+}
+
+.textPOSI {
+  padding-left: 25%;
+  position: absolute;
+  top: 350px;
+}
+
+.img {
+  width: 260px;
+  height: 145px;
+}
+
+.container1 {
+  padding: 20px;
+  font-size: 12px;
+  display: flex;
+  flex-wrap: wrap;
+
+  /* border-bottom: .5px solid #333; */
+}
+</style>

+ 142 - 0
zkqy-ui/src/views/amichi/operationInstruction/components/titleComp.vue

@@ -0,0 +1,142 @@
+<template>
+  <div class="titleComp">
+    <el-row>
+      <el-col :span="6">
+        <table>
+          <tr>
+            <td>适用机型</td>
+            <td>{{titleData.type}}</td>
+            <td>文件编号</td>
+            <td>{{titleData.number}}</td>
+          </tr>
+          <tr>
+            <td>适用部门</td>
+            <td>{{titleData.dep}}</td>
+            <td>文件版次</td>
+            <td>{{titleData.version}}</td>
+          </tr>
+          <tr>
+            <td>适用工序</td>
+            <td>{{titleData.procedure}}</td>
+            <td>页 码</td>
+            <td>{{titleData.page}}</td>
+          </tr>
+        </table>
+      </el-col>
+      <el-col class="felx-center title" :span="12" >
+        <div class="felx-center">
+          <img class="img" src="@/assets/operationInstructionimgs/titleLogo.png" alt="" srcset="">
+          <div class="titleStyle">{{ title }}</div>
+        </div>
+      </el-col>
+      <el-col :span="6">
+        <table>
+          <tr>
+            <td>编 制</td>
+            <td>{{titleData.org}}</td>
+            <td>编制日期</td>
+            <td>{{titleData.orgDate}}</td>
+          </tr>
+          <tr>
+            <td>审 核</td>
+            <td>{{titleData.exa}}</td>
+            <td>发行部门</td>
+            <td>{{titleData.exaDep}}</td>
+          </tr>
+          <tr>
+            <td>批 准</td>
+            <td>{{titleData.approval}}</td>
+            <td>发行日期</td>
+            <td>{{titleData.approvalDate}}</td>
+          </tr>
+        </table>
+      </el-col>
+    </el-row>
+
+  </div>
+</template>
+
+<script>
+
+export default {
+  name: 'titleComp',
+  props: {
+    titleData: {
+      type: Object,
+      default: function () {
+        return {} // 或者[]
+      }
+    },
+    title: {
+      type: String,
+      default: ''
+    }
+  },
+  data() {
+    return {
+    }
+  }
+}
+</script>
+
+<style scoped>
+.title {
+  border-bottom: 1px solid #333;
+  border-top: 1px solid #333;
+  height: 70px;
+}
+.titleComp {
+  background: #0068B8;
+
+}
+
+/* 表格样式 */
+table {
+  width: 100%;
+  border-collapse: collapse;
+  /* 合并边框 */
+  border: 1px solid #333;
+  border-spacing: 0;
+  /* border-bottom: 0; */
+
+}
+
+
+td {
+line-height: 22px;
+}
+
+th,
+td {
+  border: 1px solid #333;
+  /* border-bottom: 0; */
+  padding: 0;
+  margin: 0;
+  text-align: center;
+  color: #fff;
+  font-size: 14px;
+}
+
+td:nth-child(2n) {
+  width: 30%;
+}
+
+td:nth-child(2n -1) {
+  width: 20%;
+}
+
+.felx-center {
+  display: flex;
+  justify-content: center;
+  align-items: center;
+}
+.img {
+  height: 50px;
+}
+.titleStyle {
+  color: #FFF000;
+  font-size: 40px;
+  font-size: 30px;
+  font-weight: 500;
+}
+</style>

+ 451 - 0
zkqy-ui/src/views/amichi/operationInstruction/index.vue

@@ -0,0 +1,451 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="物料编码" prop="materialCode">
+        <el-input
+          v-model="queryParams.materialCode"
+          placeholder="请输入物料编码"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="物料名称" prop="materialName">
+        <el-input
+          v-model="queryParams.materialName"
+          placeholder="请输入物料名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="型号" prop="model">
+        <el-input
+          v-model="queryParams.model"
+          placeholder="请输入型号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="发料方式" prop="issueMethod">
+        <el-input
+          v-model="queryParams.issueMethod"
+          placeholder="请输入发料方式"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['system:materialInfo:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['system:materialInfo:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['system:materialInfo:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['system:materialInfo:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" style="margin-top: 20px" :data="tableData" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="主键" align="center" prop="id" />
+      <el-table-column label="指导书名称" align="center" prop="title" />
+      <el-table-column label="作业名" align="center" prop="materialName" />
+      <el-table-column label="描述" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-dropdown @command="(command)=>{handleCommand(command, scope.row)}">
+            <el-button type="warning">
+              操作<i class="el-icon-arrow-down el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item  icon="el-icon-edit"  command="catOperationInstruction">查看作业指导书</el-dropdown-item>
+              <el-dropdown-item  icon="el-icon-edit"  command="handleUpdate">修改</el-dropdown-item>
+              <el-dropdown-item  icon="el-icon-delete" command="handleDelete">删除</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改物料信息对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="物料编码" prop="materialCode">
+          <el-input v-model="form.materialCode" placeholder="请输入物料编码" />
+        </el-form-item>
+        <el-form-item label="物料名称" prop="materialName">
+          <el-input v-model="form.materialName" placeholder="请输入物料名称" />
+        </el-form-item>
+        <el-form-item label="型号" prop="model">
+          <el-input v-model="form.model" placeholder="请输入型号" />
+        </el-form-item>
+        <el-form-item label="规格" prop="specification">
+          <el-input v-model="form.specification" placeholder="请输入规格" />
+        </el-form-item>
+        <el-form-item label="属性" prop="attribute">
+          <el-select
+            v-model="form.attribute"
+            size="small"
+            clearable
+            filterable
+          >
+            <el-option
+              v-for="(item,index) in dict.type.wlsx"
+              :key="index"
+              :label="item.label"
+              :value="item.value"
+            ></el-option>
+          </el-select>
+        </el-form-item>
+        <el-form-item label="单位" prop="unit">
+          <el-input v-model="form.unit" placeholder="请输入单位" />
+        </el-form-item>
+        <el-form-item label="发料方式" prop="issueMethod">
+          <el-input v-model="form.issueMethod" placeholder="请输入发料方式" />
+        </el-form-item>
+        <el-form-item label="库存量" prop="stockQuantity">
+          <el-input v-model="form.stockQuantity" placeholder="请输入库存量" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input type="textarea" v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+    <!-- 添加或修改物料信息对话框 -->
+    <el-dialog :title="title" :visible.sync="catOperationInstructionBoolean" width="1500px" append-to-body>
+      <!-- 动态加载组件 -->
+      <component :is="catOperationInstructionCurrentComponent"></component>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="catOperationInstructionBoolean=false">确 定</el-button>
+        <el-button @click="catOperationInstructionBoolean=false">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listMaterialInfo, getMaterialInfo, delMaterialInfo, addMaterialInfo, updateMaterialInfo } from "@/api/amichi/materiel/materialInfo";
+import driverInstallation from '@/views/amichi/operationInstruction/page/driverInstallation.vue';
+import excitationStator from '@/views/amichi/operationInstruction/page/excitationStator.vue';
+import statorCore from '@/views/amichi/operationInstruction/page/statorCore.vue';
+import statorPressFit from '@/views/amichi/operationInstruction/page/statorPressFit.vue';
+import StatorWireEmbedding from '@/views/amichi/operationInstruction/page/StatorWireEmbedding.vue';
+
+export default {
+  name: "MaterialInfo",
+  dicts: ["wlsx"],
+  data() {
+    return {
+      catOperationInstructionTitle: '',
+      catOperationInstructionCurrentComponent: "", // 默认显示ComponentA
+      catOperationInstructionBoolean:false,
+      tableData: [{
+        id:"1",
+        title: '励磁定子自动绕线工序作业指导书',
+        path: '/excitationStator',
+      }, {
+        id:"3",
+        title: '定子嵌线工序作业指导书',
+        path: '/StatorWireEmbedding',
+      }, {
+        id:"4",
+        title: '驱动片安装工序作业指导书',
+        path: '/driverInstallation',
+      }, {
+        id:"5",
+        title: '定子铁芯焊接作业指导书',
+        path: '/statorCore',
+      }, {
+        id:"6",
+        title: '定子压装工序作业指导书',
+        path: '/statorPressFit',
+      }],
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 物料信息表格数据
+      materialInfoList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        materialCode: null,
+        materialName: null,
+        model: null,
+        specification: null,
+        unit: null,
+        attribute: null,
+        issueMethod: null,
+        stockQuantity: null,
+        createById: null,
+        updateById: null,
+        dataApprovalStatus: null,
+        processKey: null,
+        taskProcessKey: null,
+        taskNodeKey: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+        materialCode: [
+          { required: true, message: "物料编码不能为空", trigger: "blur" }
+        ],
+        materialName: [
+          { required: true, message: "物料名称不能为空", trigger: "blur" }
+        ],
+        unit: [
+          { required: true, message: "单位不能为空", trigger: "blur" }
+        ],
+        attribute: [
+          { required: true, message: "属性 0自制 1外购不能为空", trigger: "blur" }
+        ],
+      }
+    };
+  },
+  components: {
+    driverInstallation,
+    excitationStator,
+    statorCore,
+    statorPressFit,
+    StatorWireEmbedding,
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    handleClick(row) {
+      console.log(row);
+      switch (row.title) {
+        case "驱动片安装工序作业指导书":
+          this.catOperationInstructionCurrentComponent = driverInstallation;
+          this.catOperationInstructionBoolean = true;
+          this.catOperationInstructionTitle = '驱动片安装工序作业指导书';
+          break;
+        case "励磁定子自动绕线工序作业指导书":
+          this.catOperationInstructionCurrentComponent = excitationStator;
+          this.catOperationInstructionBoolean = true;
+          console.log("ddddddddddd")
+          this.catOperationInstructionTitle = '励磁定子自动绕线工序作业指导书';
+          break;
+        case "定子铁芯焊接作业指导书":
+          this.catOperationInstructionCurrentComponent = statorCore;
+          this.catOperationInstructionBoolean = true;
+          this.catOperationInstructionTitle = '定子铁芯焊接作业指导书';
+          break;
+        case "定子压装工序作业指导书":
+          this.catOperationInstructionCurrentComponent = statorPressFit;
+          this.catOperationInstructionBoolean = true;
+          this.catOperationInstructionTitle = '驱动片安装工序作业指导书';
+          break;
+        case "定子压装定子嵌线工序作业指导书工序作业指导书":
+          this.catOperationInstructionCurrentComponent = StatorWireEmbedding;
+          this.catOperationInstructionBoolean = true;
+          this.catOperationInstructionTitle = '定子压装定子嵌线工序作业指导书工序作业指导书';
+          break;
+        default:
+          break;
+      }
+      // this.$router.push({
+      //   path: row.path
+      // })
+    },
+    //下拉菜单点击事件
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleUpdate":
+          this.handleUpdate(row)
+          break;
+        case "handleDelete":
+          this.handleDelete(row)
+          break;
+        case "catOperationInstruction":
+          this.catOperationInstructionBoolean= true;
+          this.handleClick(row)
+          break;
+        default:
+          break;
+      }
+    },
+    // catOperationInstruction(row){
+    //   console.log(row)
+    //
+    // },
+    /** 查询物料信息列表 */
+    getList() {
+      this.loading = true;
+      listMaterialInfo(this.queryParams).then(response => {
+        this.materialInfoList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        materialCode: null,
+        materialName: null,
+        model: null,
+        specification: null,
+        unit: null,
+        attribute: null,
+        issueMethod: null,
+        stockQuantity: null,
+        remark: null,
+        createById: null,
+        createBy: null,
+        createTime: null,
+        updateById: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null,
+        dataApprovalStatus: null,
+        processKey: null,
+        taskProcessKey: null,
+        taskNodeKey: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加物料信息";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getMaterialInfo(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改物料信息";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            this.form.typeOfOperation=1
+            updateMaterialInfo(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            this.form.typeOfOperation=0
+            addMaterialInfo(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除物料信息编号为"' + ids + '"的数据项?').then(function() {
+        return delMaterialInfo(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('system/materialInfo/export', {
+        ...this.queryParams
+      }, `materialInfo_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 66 - 0
zkqy-ui/src/views/amichi/operationInstruction/index3.vue

@@ -0,0 +1,66 @@
+<template>
+  <div class="container">
+    <div style="width: 80%;">
+      <el-table :data="tableData" >
+      <el-table-column prop="title" label="标题" >
+      </el-table-column>
+      <el-table-column
+      fixed="right"
+      label="操作"
+      width="100">
+      <template slot-scope="scope">
+        <el-button @click="handleClick(scope.row)" type="text" size="small">查看</el-button>
+        <!-- <el-button type="text" size="small">编辑</el-button> -->
+      </template>
+    </el-table-column>
+
+    </el-table>
+    </div>
+  </div>
+</template>
+
+<script>
+export default {
+  data() {
+    return {
+      tableData: [{
+        id:"1",
+        title: '励磁定子自动绕线工序作业指导书',
+        path: '/excitationStator',
+      }, {
+        id:"3",
+        title: '定子嵌线工序作业指导书',
+        path: '/StatorWireEmbedding',
+      }, {
+        id:"4",
+        title: '驱动片安装工序作业指导书',
+        path: '/driverInstallation',
+      }, {
+        id:"5",
+        title: '定子铁芯焊接作业指导书',
+        path: '/statorCore',
+      }, {
+        id:"6",
+        title: '定子压装工序作业指导书',
+        path: '/statorPressFit',
+      }]
+    }
+  },
+  methods: {
+    handleClick(row) {
+      console.log(row);
+      this.$router.push({
+        path: row.path
+      })
+    }
+  },
+}
+</script>
+<style scoped>
+.container {
+  margin-top: 30px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+</style>

+ 145 - 0
zkqy-ui/src/views/amichi/operationInstruction/page/StatorWireEmbedding.vue

@@ -0,0 +1,145 @@
+<template>
+  <div class="container">
+    <div class="borderline">
+    <titleComp :titleData="titleData" title="定子嵌线工序作业指导书"></titleComp>
+    <el-row>
+      <el-col :span="6">
+        <parameterComp :tableData="paramData" type="2"></parameterComp>
+        <div class="line"></div>
+        <auxiliaryTools :tableData="toolsData"></auxiliaryTools>
+        <div class="line"></div>
+        <attentionComp :attentData="attentionCont"></attentionComp>
+      </el-col>
+      <el-col :span="18">
+        <stepImgComp :data="stepImgData" height="169px"></stepImgComp>
+      </el-col>
+    </el-row>
+  </div>
+  <footerComp></footerComp>
+  </div>
+</template>
+
+<script>
+import titleComp from '@/views/amichi/operationInstruction/components/titleComp.vue';
+import parameterComp from '@/views/amichi/operationInstruction/components/parameterComp.vue';
+import auxiliaryTools from '@/views/amichi/operationInstruction/components/auxiliaryTools.vue';
+import attentionComp from '@/views/amichi/operationInstruction/components/attentionComp.vue';
+import stepImgComp from '@/views/amichi/operationInstruction/components/stepImgComp.vue';
+import footerComp from '@/views/amichi/operationInstruction/components/footerComp.vue'
+export default {
+  components: {
+    titleComp,
+    parameterComp,
+    auxiliaryTools,
+    attentionComp,
+    stepImgComp,
+    footerComp
+  },
+  data() {
+    return {
+      titleData: {
+        type: '全系列',
+        number: 'QYDG-SOP022',
+        dep: '电工',
+        version: 'A',
+        procedure: '嵌线',
+        page: '1/1',
+        org: '叶梦珪',
+        orgDate: '2023/1/11',
+        exa: '陈光',
+        exaDep: '技术部',
+        approval: '陈兰生',
+        approvalDate: ''
+      },
+      paramData: [{
+        name: '槽纸',
+        value: 'L165xW82xH0.2'
+      },{
+        name: '薄膜',
+        value: 'L165xW82xH0.1'
+      },{
+        name: '层间绝缘',
+        value: 'L270xW20xH0.2'
+      },{
+        name: '相间绝缘',
+        value: 'L220xW57xH0.2'
+      },{
+        name: '槽楔',
+        value: 'L165xW7xH1.5'
+      }],
+      toolsData: {
+        type: '定子吊具,滚动铁圈',
+        wire: '钢直尺 千分尺',
+        specs: '橡胶锤 尖嘴钳 槽刀 槽纸刀 弯剪 竹槽塞 铁锤 竹板 圆锉刀'
+      },
+      attentionCont: [
+        '1.槽绝缘,槽楔,层间绝缘,不得高出定子铁心内圆,两端长度应相等。',
+        '2.开始嵌线暂不嵌的上层边要理好,用手轻轻压平,注意不要损伤绝缘。',
+        '3.上层边和下层边连线要理好,嵌入线圈下层边时要防止连线弯曲和擦破漆膜,造成匝间短路。',
+        '4.垫相间绝缘时,应覆盖住层间绝缘上面,且与槽楔相碰。',
+        '5.每嵌完一个(或一组)线圈后,应将其端部压下,或用竹板垫住,用铁锤轻轻敲打竹板,使其稍向外扩张,以利后面线圈嵌线。',
+        '6.嵌线时要仔细整好线型,把线理直放入槽中,必要时分几次放入。',
+        '7.嵌线中不得用铁制工具直接与导线接触。',
+        '8.嵌线中不允许有导线绝缘损伤及槽底绝缘破裂现象,否则必须重新调换。',
+        '9.嵌线中端部整型不得过分用力以致损伤绝缘。',
+        '10.嵌完成后,检查相间绝缘是否垫好,端部是否整齐。'
+      ],
+      stepImgData: [{
+        step: '步骤一',
+        img: require('@/assets/operationInstructionimgs/dzqx1.png'),
+        text: [' 清洁要嵌线的工件;', '工件用专用吊具以内径定位定子外圆塞入铁圈;', '依上图示,镶入槽纸、薄膜(注意核对槽纸尺寸);', '依上图示,注意定子放置位置。']
+      }, {
+        step: '步骤二',
+        img: require('@/assets/operationInstructionimgs/dzqx2.png'),
+        text: ['依上图示,面向前端,人位于工件右侧;', '下线第一槽位置于《224定子为例》两筋棒中间位置;', '下线时注意漆包线不得接触铁芯。']
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dzqx3.png'),
+        text: []
+      }, {
+        step: '步骤三',
+        img: require('@/assets/operationInstructionimgs/dzqx4.png'),
+        text: ['依次将线圈嵌入定子;', ' 注意层间绝缘放置,两端露出线圈端部;', ' 注意用竹板敲击线圈端部成型并注意力度,保证端部槽纸不折裂损坏。']
+      }, {
+        step: '步骤四',
+        img: require('@/assets/operationInstructionimgs/dzqx5.png'),
+        text: ['插入槽签须保持两端平整,不得少于5MM;', '槽签应压紧槽线,不得露出槽纸、槽膜;', '相邻两相须插入相间绝缘纸,确保相间隔断绝缘。']
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dzqx6.png'),
+        text: []
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dzqx7.png'),
+        text: []
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dzqx8.png'),
+        text: []
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dzqx9.png'),
+        text: []
+      },]
+    }
+  }
+}
+</script>
+
+<style scoped>
+.container {
+  padding: 30px;
+  background: linear-gradient(to bottom, #74D9FB, #fff);
+}
+.borderline {
+  border: 1.5px solid #333;
+  border-bottom: 2.5px solid #333;
+  border-right: 2.5px solid #333;
+
+}
+.line {
+  height: 30px;
+  border-left: 1px solid #333;
+}
+</style>
+

+ 213 - 0
zkqy-ui/src/views/amichi/operationInstruction/page/driverInstallation.vue

@@ -0,0 +1,213 @@
+<template>
+  <div class="container">
+    <div class="borderline">
+    <titleComp :titleData="titleData" title="驱动片安装工序作业指导书"></titleComp>
+    <el-row>
+      <el-col :span="8">
+        <parameterComp :tableData="paramData" :headData="headData" type="3" title="发电机接口尺寸"></parameterComp>
+        <parameterComp :tableData="paramData1" :headData="headData1" type="4" title="螺栓扭矩参数表"></parameterComp>
+        <div class="line"></div>
+        <auxiliaryTools :tableData="toolsData"></auxiliaryTools>
+        <attentionComp :attentData="attentionCont" style="border-top: 0;"></attentionComp>
+      </el-col>
+      <el-col :span="16">
+        <stepImgComp :data="stepImgData" height="130px" type="qdp"></stepImgComp>
+      </el-col>
+    </el-row>
+  </div>
+  <footerComp></footerComp>
+  </div>
+</template>
+
+<script>
+import titleComp from '@/views/amichi/operationInstruction/components/titleComp.vue';
+import parameterComp from '@/views/amichi/operationInstruction/components/parameterComp.vue';
+import auxiliaryTools from '@/views/amichi/operationInstruction/components/auxiliaryTools.vue';
+import attentionComp from '@/views/amichi/operationInstruction/components/attentionComp.vue';
+import stepImgComp from '@/views/amichi/operationInstruction/components/stepImgComp.vue';
+import footerComp from '@/views/amichi/operationInstruction/components/footerComp.vue'
+export default {
+  components: {
+    titleComp,
+    parameterComp,
+    auxiliaryTools,
+    attentionComp,
+    stepImgComp,
+    footerComp
+  },
+  data() {
+    return {
+      titleData: {
+        type: '164-454',
+        number: 'QYZP-SOP001',
+        dep: '组装',
+        version: 'A',
+        procedure: '驱动片安装',
+        page: '1/1',
+        org: '',
+        orgDate: '2023/1/11',
+        exa: '',
+        exaDep: '技术部',
+        approval: '',
+        approvalDate: ''
+      },
+      headData: ['法兰接口', '接口尺寸', '等分圆/安装孔', '盘片型号〃', 'AN尺寸mm', '外径'],
+      paramData: [{
+        type: '00#',
+        wire: '787.4\n787.27',
+        num: '851/16X14(11.25°)',
+        specs: '6.5”',
+        size: '30.2',
+        line: '215.77\n215.85'
+      },{
+        type: '0#',
+        wire: '647.57\n647.70',
+        num: '679.5/12-14(11.25°)',
+        specs: '7.5”',
+        size: '30.2',
+        line: '241.17\n241.25'
+      },{
+        type: '0.5#',
+        wire: '584.09\n584.20',
+        num: '619.1/12X14(15°)',
+        specs: '8”',
+        size: '62',
+        line: '263.40\n263.47'
+      },{
+        type: '1#',
+        wire: '511.06\n511.17',
+        num: '530.2/12/12.7(15°)',
+        specs: '10”',
+        size: '53.8',
+        line: '314.22\n314.27'
+      }, {
+        type: '2#',
+        wire: '447.57\n447.67',
+        num: '466.7/12x12.7(15°)',
+        specs: '11.5”',
+        size: '39.6',
+        line: '352.32\n352.37'
+      },{
+        type: '3#',
+        wire: '409.57\n409.47',
+        num: '428.6/8x11.0(15°)',
+        specs: '14”',
+        size: '25.4',
+        line: '466.574\n466.65'
+      },{
+        type: '4#',
+        wire: '361.95\n361.86',
+        num: '381/8x11.0(15°)',
+        specs: '18”',
+        size: '15.7',
+        line: '571.374\n571.450'
+      },{
+        type: '5#',
+        wire: '314.35\n314.25',
+        num: '333.3/8x11.0(22.5°)',
+        specs: '21”',
+        size: '0',
+        line: '672.976\n673.05'
+      },{
+        type: '6#',
+        wire: '266.62\n266.7',
+        num: '另一端与5#前盖对接',
+        specs: '24”',
+        size: '0',
+        line: '733.3'
+      }],
+      headData1: ['型号', '螺栓 12.9级', '螺栓连接深度', '扭矩设定(Nm)', '驱动片用量×厚度'],
+      paramData1: [{
+        type: 'QY164/184',
+        wire: '内六角 M10',
+        num: '20~25',
+        specs: '70±10',
+        size: '2×1.5',
+      },{
+        type: 'QY184HJ',
+        wire: '内六角 M12',
+        num: '25~30',
+        specs: '100±10',
+        size: '',
+      },{
+        type: 'QY224',
+        wire: '内六角 M16',
+        num: '25~30',
+        specs: '240±20',
+        size: '3×1.2',
+      },{
+        type: 'QY274',
+        wire: '内六角 M16',
+        num: '25~30',
+        specs: '240±20',
+        size: '4×1.2',
+      }, {
+        type: 'QY4',
+        wire: '内六角 M20',
+        num: '35~40',
+        specs: '480±20',
+        size: '',
+      },{
+        type: 'QY5',
+        wire: '内六角 M20',
+        num: '35~40',
+        specs: '480±20',
+        size: '5×1.2'
+      },{
+        type: 'QY6/7',
+        wire: '内六角 M24',
+        num: '40~45',
+        specs: '780±20',
+        size: '6×1.2',
+      }],
+      toolsData: {
+        type: '',
+        wire: '200-1000Nm数显扭矩仪 游标卡尺 螺纹通止规',
+        specs: '白色防松记号笔 气动扳手'
+      },
+      attentionCont: [
+        '1.作业时应根据生产订单BOM要求,对应AN尺寸,领用螺栓、平垫圈驱动片、垫块;',
+        `2.气动扳手型号与管径配置如下:\n 1/2气动扳手配外径 12气管,适用M16及以下螺栓; \n 3/4气动扳手配外径 16气管,适用M20-M24 螺栓;`,
+        '3.当工作气压<0.6Mpa应停止检查;',
+        '4.驱动片安装后必须用防松记号笔依顺序划记'
+      ],
+      stepImgData: [{
+        step: '步骤一',
+        img: require('@/assets/operationInstructionimgs/qdp1.png'),
+        text: ['清洁轴端螺孔铁屑,并用通止规检查螺纹是否合格;', '用深度尺检查螺纹深度是否符合图面要求。']
+      }, {
+        step: '步骤二',
+        img: require('@/assets/operationInstructionimgs/qdp2.png'),
+        text: ['气压调整到0.75-0.85Mpa;', '依图示顺序安装驱动片;', '首件用数显扭矩仪进行扭矩检测。']
+      }, {
+        step: '步骤三',
+        img: require('@/assets/operationInstructionimgs/qdp3.png'),
+        text: ['螺栓安装时须按顺序进行锁紧;', '安装好的驱动片依图示用防松记号笔标记。']
+      }, {
+        step: '步骤四',
+        bigImg: require('@/assets/operationInstructionimgs/qdp4.png'),
+        bigImg1: require('@/assets/operationInstructionimgs/qdp5.png'),
+        text: ['驱动片依订单需求用固定架或尼龙扎带进行固定以防止\n运输过程转子脱出造成损坏。']
+      }]
+    }
+  }
+}
+</script>
+
+<style scoped>
+.container {
+  padding: 30px;
+  background: linear-gradient(to bottom, #74D9FB, #fff);
+}
+.borderline {
+  border: 1.5px solid #333;
+  border-bottom: 2.5px solid #333;
+  border-right: 2.5px solid #333;
+
+}
+.line {
+  height: 10px;
+  border-left: 1px solid #333;
+}
+</style>
+

+ 176 - 0
zkqy-ui/src/views/amichi/operationInstruction/page/excitationStator.vue

@@ -0,0 +1,176 @@
+<template>
+  <div class="container">
+    <div class="borderline">
+    <titleComp :titleData="titleData" title="励磁定子自动绕线工序作业指导书"></titleComp>
+    <el-row>
+      <el-col :span="6">
+        <parameterComp :tableData="paramData" :headData="headData" title="励磁定子自动绕线参数表"></parameterComp>
+        <div class="line"></div>
+        <auxiliaryTools :tableData="toolsData"></auxiliaryTools>
+        <div class="line"></div>
+        <attentionComp :attentData="attentionCont"></attentionComp>
+      </el-col>
+      <el-col :span="18">
+        <stepImgComp :data="stepImgData"></stepImgComp>
+      </el-col>
+    </el-row>
+  </div>
+  <footerComp></footerComp>
+  </div>
+</template>
+
+<script>
+import titleComp from '@/views/amichi/operationInstruction/components/titleComp.vue';
+import parameterComp from '@/views/amichi/operationInstruction/components/parameterComp.vue';
+import auxiliaryTools from '@/views/amichi/operationInstruction/components/auxiliaryTools.vue';
+import attentionComp from '@/views/amichi/operationInstruction/components/attentionComp.vue';
+import stepImgComp from '@/views/amichi/operationInstruction/components/stepImgComp.vue';
+import footerComp from '@/views/amichi/operationInstruction/components/footerComp.vue'
+export default {
+  components: {
+    titleComp,
+    parameterComp,
+    auxiliaryTools,
+    attentionComp,
+    stepImgComp,
+    footerComp
+  },
+  data() {
+    return {
+      titleData: {
+        type: '全系列',
+        number: 'QYDG-SOP007',
+        dep: '电工',
+        version: 'A',
+        procedure: '励磁定子绕嵌',
+        page: '1/1',
+        org: '',
+        orgDate: '2023/1/11',
+        exa: '',
+        exaDep: '技术部',
+        approval: '',
+        approvalDate: ''
+      },
+      paramData: [{
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 1
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 2
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 3
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 4
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 5
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 6
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 7
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 8
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 9
+      }],
+      headData: ['定子型号', '线径', '匝数', '对应程序/规格'],
+      toolsData: {
+        type: '定子吊具,滚动铁圈',
+        wire: '钢直尺 千分尺',
+        specs: '橡胶锤 尖嘴钳 槽刀 槽纸刀 弯剪 竹槽塞 铁锤 竹板 圆锉刀'
+      },
+      attentionCont: [
+        '1.作业前检查漆包线规格、厂牌、铁芯型号及长度;',
+        '2.在铁芯槽两端插入塑料绝缘件;',
+        '3.铁芯放入工作台有定位角度要求,依据步骤图示放置;',
+        '4.工作台及大齿轮周边禁止放置任何工具及配件;',
+        '5.当更换铁芯型号及长度,必须用手动单段模式运行,确保无误,再切入自动运行;',
+        '6.每班必须在六角轴X2、丝杆X1、铜套光轴X2加注润滑油;',
+        '7.每班检查电器柜风扇是否有在运行;',
+        '8.设备运行中禁止更换程序;',
+        '9.出现异常及时按下急停按钮;',
+        '10.复位/单步只能在手动模式下进行。'
+      ],
+      stepImgData: [{
+        step: '步骤一',
+        img: require('@/assets/operationInstructionimgs/pic1.png'),
+        text: ['用空压气清洁要绕线的励磁定子铁芯;', '插入两端绝缘塑料件,注意要贴合平整。']
+      }, {
+        step: '步骤二',
+        img: require('@/assets/operationInstructionimgs/pic2.png'),
+        text: ['根据励磁定子自动绕线参数表选择漆包线线规;', '漆包线依次穿过导线轮,拉出引出线,用压线气缸夹紧。']
+      }, {
+        step: '步骤三',
+        img: require('@/assets/operationInstructionimgs/pic3.png'),
+        text: ['初始工作及更换型号及铁芯长度需复位机械原点;', '根据励磁定子自动绕线参数表选择程序。']
+      }, {
+        step: '步骤四',
+        img: require('@/assets/operationInstructionimgs/pic4.png'),
+        text: ['根据励磁定子铁芯调整压紧气缸、压线气缸、勾线气缸。']
+      }, {
+        step: '步骤五',
+        img: require('@/assets/operationInstructionimgs/pic5.png'),
+        text: ['点击启动,开始绕线;', '进行第一段绕制,需检查线嘴位置(在槽型中间处方可)。']
+      }, {
+        step: '步骤六',
+        img: require('@/assets/operationInstructionimgs/pic6.png'),
+        text: ['为确保程序及各机械位置准确调整,切换手动模式单段运行;', '手动模式确认无误后切换至自动绕制。']
+      }, {
+        step: '步骤七',
+        img: require('@/assets/operationInstructionimgs/pic7.png'),
+        text: ['设备运行中禁止更换程序;', '出现异常及时按下停止按钮。']
+      }, {
+        step: '步骤八',
+        img: require('@/assets/operationInstructionimgs/pic8.png'),
+        text: ['当所有槽绕完,机器会自动停下来;', '剪下线头注意剪刀不能碰到绕组。']
+      }, {
+        step: '步骤九',
+        img: require('@/assets/operationInstructionimgs/pic9.png'),
+        text: ['取下绕好的励磁定子;', '换上待绕制的励磁铁芯,按下启动,开始下一个绕制。']
+      },]
+    }
+  }
+}
+</script>
+
+<style scoped>
+.container {
+  padding: 30px;
+  background: linear-gradient(to bottom, #74D9FB, #fff);
+}
+.borderline {
+  border: 1.5px solid #333;
+  border-bottom: 2.5px solid #333;
+  border-right: 2.5px solid #333;
+
+}
+.line {
+  height: 30px;
+  border-left: 1px solid #333;
+}
+</style>
+

+ 292 - 0
zkqy-ui/src/views/amichi/operationInstruction/page/statorCore.vue

@@ -0,0 +1,292 @@
+<template>
+  <div class="container">
+    <div class="borderline">
+      <titleComp :titleData="titleData" title="定子铁芯焊接作业指导书"></titleComp>
+      <el-row>
+        <el-col :span="6">
+          <parameterComp :tableData="paramData" :headData="headData" title="作业参数表" type="5"></parameterComp>
+          <!-- <div class="line"></div> -->
+          <auxiliaryTools :isBorderTop="true" :tableData="toolsData"></auxiliaryTools>
+          <!-- <div class="line"></div> -->
+          <attentionComp :isBorderBottom="true" style="border-top: 0;" :attentData="attentionCont"></attentionComp>
+        </el-col>
+        <el-col :span="18">
+          <stepImgComp :data="stepImgData" col="4"></stepImgComp>
+        </el-col>
+      </el-row>
+      <el-row>
+        <el-col :span="6">
+          <table class="table">
+            <tr>
+              <td>型号</td>
+              <td>L<br>筋棒肩长</td>
+              <td colspan="3">焊棒用量<br>(长度45~50mm 10统一规格)<br>铁芯长/焊棒数量</td>
+              <td>定子外径</td>
+            </tr>
+            <tr v-for="(item, index) in leftBottomData" :key="index">
+              <td>{{ item.type }}</td>
+              <td>{{ item.Ljc }}</td>
+              <td rowspan="5" v-if="item.num1">{{ item.num1 }}</td>
+              <td :rowspan="index == 0 ? 2 : 1" v-if="item.num2">{{ item.num2 }}</td>
+              <td :rowspan="index == 0 ? 2 : 1" v-if="item.num3">{{ item.num3 }}</td>
+              <td rowspan="5" v-if="item.len">{{ item.len }}</td>
+            </tr>
+          </table>
+        </el-col>
+        <el-col :span="2">
+          <div style="height: 1px;"></div>
+        </el-col>
+        <el-col :span="16">
+          <table class="table1">
+            <tr>
+              <td rowspan="3">型号</td>
+              <td rowspan="3">焊接<br>项目</td>
+              <td colspan="5">焊接参数设置表</td>
+              <td colspan="3">其他参数</td>
+            </tr>
+            <tr>
+              <td colspan="2">焊机型号</td>
+              <td rowspan="2">焊接电流A</td>
+              <td rowspan="2">焊接电压V</td>
+              <td rowspan="2">焊丝直径Φ</td>
+              <td rowspan="2"></td>
+              <td rowspan="2"></td>
+              <td rowspan="2"></td>
+            </tr>
+            <tr>
+              <td >氩弧焊<br>
+                锐龙315-B</td>
+              <td >气保焊<br>
+                佳士NBC-350</td>
+            </tr>
+            <tr>
+              <td rowspan="2">164/184</td>
+              <td style="height: 35px;">铁芯</td>
+              <td></td>
+              <td></td>
+              <td>203</td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+            </tr>
+            <tr>
+              <td>筋棒</td>
+              <td>●</td>
+              <td>●</td>
+              <td>11.9</td>
+              <td>29.5</td>
+              <td>聚力<br>
+                JL-YJQ5011 1.2mm</td>
+              <td style="width: 100px;"></td>
+              <td style="width: 100px;"></td>
+              <td style="width: 100px;"></td>
+            </tr>
+          </table>
+        </el-col>
+
+
+      </el-row>
+    </div>
+    <footerComp></footerComp>
+  </div>
+</template>
+
+<script>
+import titleComp from '@/views/amichi/operationInstruction/components/titleComp.vue';
+import parameterComp from '@/views/amichi/operationInstruction/components/parameterComp.vue';
+import auxiliaryTools from '@/views/amichi/operationInstruction/components/auxiliaryTools.vue';
+import attentionComp from '@/views/amichi/operationInstruction/components/attentionComp.vue';
+import stepImgComp from '@/views/amichi/operationInstruction/components/stepImgComp.vue';
+import footerComp from '@/views/amichi/operationInstruction/components/footerComp.vue'
+export default {
+  components: {
+    titleComp,
+    parameterComp,
+    auxiliaryTools,
+    attentionComp,
+    stepImgComp,
+    footerComp
+  },
+  data() {
+    return {
+      titleData: {
+        type: '164/184',
+        number: 'QYHJ-SOP001',
+        dep: '焊接',
+        version: 'A',
+        procedure: '焊接',
+        page: '1/1',
+        org: '',
+        orgDate: '2023/1/11',
+        exa: '',
+        exaDep: '技术部',
+        approval: '',
+        approvalDate: ''
+      },
+      paramData: [{
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 1
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 2
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 3
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 4
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 5
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 6
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 7
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 8
+      }, {
+        type: '164/25',
+        wire: 'Ø 0.71',
+        num: '250',
+        specs: 9
+      }],
+      headData: ['定子型号', '线径', '匝数', '对应程序/规格'],
+      toolsData: {
+        type: '筋棒定位块 焊棒 斜键',
+        wire: '游标卡尺 钢直尺 钢直角尺',
+        specs: '铜制榔头 气动扳手'
+      },
+      attentionCont: [
+        '1.定子焊接时注意调整焊机参数,并清洁工装;',
+        '2.注意积片斜槽及积长尺寸,筋棒与工装结合面须平齐不得有间隙;',
+        '3.铁芯需用槽芯棒整平;',
+        '4.锁模压力、焊接电流要调正确;',
+        '5.焊缝不得有开裂、缩孔等缺陷;',
+        '6.首件焊接好,要做好各参数检验,如同心度、平行、铁芯长度、筋棒长度等关键首检,方可批量生产。'
+      ],
+      stepImgData: [{
+        step: '步骤一',
+        img: require('@/assets/operationInstructionimgs/dztx1.png'),
+        text: ['依技术图面对应的铁芯片放置于工装', '注意斜槽角度是否与图面一致', '铁芯片数量是否符合图纸要求', '调整好叠片压力(依作业参数表)进行调整']
+      }, {
+        step: '步骤二',
+        img: require('@/assets/operationInstructionimgs/dztx2.png'),
+        text: ['依图示位置进行焊接铁芯,焊接参数参考(焊接参数设置表);', '铁芯焊接后,依图面要求将对应图号的筋棒放入工装 ,装夹固定;', '使用槽芯棒整平铁芯;', '筋棒焊接与焊棒使用数量参考下列表格;', '筋棒焊接时,注意前后端方向,不可颠倒。']
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dztx3.png'),
+        text: []
+      }, {
+        step: '步骤三',
+        img: require('@/assets/operationInstructionimgs/dztx4.png'),
+        text: ['筋棒焊接时应将焊棒 、筋棒 、铁芯先点焊;', '然后分段对角焊接,以减小焊接后造成热应力;', '圆款定子可免除上述步骤。']
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dztx5.png'),
+        text: ['筋棒焊接时应将焊棒 、筋棒 、铁芯先点焊;', '然后分段对角焊接,以减小焊接后造成热应力;', '圆款定子可免除上述步骤。']
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dztx6.png'),
+        text: ['筋棒焊接时应将焊棒 、筋棒 、铁芯先点焊;', '然后分段对角焊接,以减小焊接后造成热应力;', '圆款定子可免除上述步骤。']
+      }],
+      leftBottomData: [{
+        type: '164AB',
+        Ljc: '229',
+        num1: '164、184',
+        num2: '50-120',
+        num3: '11+1',
+        len: '275'
+      }, {
+        type: '164CD',
+        Ljc: '256',
+        num1: '',
+        num2: '',
+        num3: '',
+        len: ''
+      }, {
+        type: '184E',
+        Ljc: '296',
+        num1: '',
+        num2: '130-150',
+        num3: '1+2',
+        len: ''
+      }, {
+        type: '184FG',
+        Ljc: '386',
+        num1: '',
+        num2: '160-240',
+        num3: '1+2',
+        len: ''
+      }, {
+        type: '184HJ',
+        Ljc: '446',
+        num1: '',
+        num2: '250-285',
+        num3: '2+2',
+        len: ''
+      }]
+    }
+  }
+}
+</script>
+
+<style scoped>
+.container {
+  padding: 30px;
+  background: linear-gradient(to bottom, #74D9FB, #fff);
+}
+
+.borderline {
+  border: 1.5px solid #333;
+  border-bottom: 2.5px solid #333;
+  border-right: 2.5px solid #333;
+  position: relative;
+}
+
+.line {
+  height: 30px;
+  border-left: 1px solid #333;
+}
+
+.table {
+  width: 100%;
+  border-collapse: collapse;
+}
+
+.table1 {
+  border-collapse: collapse;
+  position: absolute;
+  width: 66%;
+  bottom: 0;
+  right: 0;
+}
+
+th,
+td {
+  border: 1px solid #333;
+  border-bottom: 0;
+  text-align: center;
+  font-size: 12px;
+}
+</style>

+ 331 - 0
zkqy-ui/src/views/amichi/operationInstruction/page/statorPressFit.vue

@@ -0,0 +1,331 @@
+<template>
+  <div class="container">
+    <div class="borderline">
+      <titleComp :titleData="titleData" title="定子压装工序作业指导书"></titleComp>
+      <el-row>
+        <el-col :span="6">
+          <parameterComp :objData="objData" title="作业参数表" type="6"></parameterComp>
+          <div class="line"></div>
+          <auxiliaryTools :tableData="toolsData"></auxiliaryTools>
+          <!-- <div class="line"></div> -->
+          <attentionComp :isBorderBottom="true" style="border-top: 0;" color="#005BAE" :attentData="attentionCont"></attentionComp>
+        </el-col>
+        <el-col :span="18">
+          <stepImgComp :data="stepImgData" col="0"></stepImgComp>
+        </el-col>
+      </el-row>
+      <div class="line"></div>
+
+      <el-row>
+        <el-col :span="12">
+          <table class="table">
+            <tr>
+              <td>型号</td>
+              <td colspan="6">机壳长度mm</td>
+              <td>工装编号</td>
+              <td colspan="3">压装深度mm</td>
+              <td>压装压力t</td>
+              <td colspan="3">查询程序</td>
+            </tr>
+            <tr>
+              <td>164/184</td>
+              <td>226</td>
+              <td>256</td>
+              <td>296</td>
+              <td>386</td>
+              <td>446</td>
+              <td></td>
+              <td>QYZC301</td>
+              <td colspan="3">28</td>
+              <td>20</td>
+              <td colspan="3"></td>
+            </tr>
+            <tr>
+              <td>224</td>
+              <td>438</td>
+              <td>528</td>
+              <td>573</td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td>QYZC302</td>
+              <td colspan="3">70</td>
+              <td>30</td>
+              <td colspan="3"></td>
+            </tr>
+            <tr>
+              <td>274</td>
+              <td>505</td>
+              <td>620</td>
+              <td>670</td>
+              <td>710</td>
+              <td>780</td>
+              <td>795</td>
+              <td>QYZC303</td>
+              <td colspan="3">85</td>
+              <td>50</td>
+              <td colspan="3"></td>
+            </tr>
+            <tr>
+              <td>314</td>
+              <td>835</td>
+              <td>925</td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td>QYZC304</td>
+              <td>104</td>
+              <td>114</td>
+              <td>160</td>
+              <td>80</td>
+              <td>01</td>
+              <td>02</td>
+              <td>03</td>
+            </tr>
+            <tr>
+              <td>354</td>
+              <td>965</td>
+              <td>1040</td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td>QYZC305</td>
+              <td>114</td>
+              <td>160</td>
+              <td></td>
+              <td>100</td>
+              <td>04</td>
+              <td>05</td>
+              <td></td>
+            </tr>
+            <tr>
+              <td>404</td>
+              <td>1079</td>
+              <td>1180</td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td>QYZC306</td>
+              <td>140</td>
+              <td>175</td>
+              <td>230</td>
+              <td>100</td>
+              <td>06</td>
+              <td>07</td>
+              <td>08</td>
+            </tr>
+            <tr>
+              <td>454</td>
+              <td>1185</td>
+              <td>1335</td>
+              <td>1420</td>
+              <td></td>
+              <td></td>
+              <td></td>
+              <td>QYZC307</td>
+              <td>160</td>
+              <td>190</td>
+              <td></td>
+              <td>120</td>
+              <td>09</td>
+              <td>10</td>
+              <td></td>
+            </tr>
+            <tr>
+              <td colspan="15">
+                <div style="display: flex;">
+                  <div style="flex: 1;"></div>
+                <div style="flex: 1;">1吨/平方米=9800Pa=0.0098Mpa</div>
+                <div style="flex: 1;">备注:上述压装深度依工装尺寸定位</div>
+                </div>
+
+              </td>
+            </tr>
+          </table>
+        </el-col>
+        <el-col :span="2">
+          <div style="height: 1px;"></div>
+        </el-col>
+      </el-row>
+    </div>
+    <footerComp></footerComp>
+  </div>
+</template>
+
+<script>
+import titleComp from '@/views/amichi/operationInstruction/components/titleComp.vue';
+import parameterComp from '@/views/amichi/operationInstruction/components/parameterComp.vue';
+import auxiliaryTools from '@/views/amichi/operationInstruction/components/auxiliaryTools.vue';
+import attentionComp from '@/views/amichi/operationInstruction/components/attentionComp.vue';
+import stepImgComp from '@/views/amichi/operationInstruction/components/stepImgComp.vue';
+import footerComp from '@/views/amichi/operationInstruction/components/footerComp.vue'
+export default {
+  components: {
+    titleComp,
+    parameterComp,
+    auxiliaryTools,
+    attentionComp,
+    stepImgComp,
+    footerComp
+  },
+  data() {
+    return {
+      titleData: {
+        type: '全系列',
+        number: 'QYZP-SOP003',
+        dep: '组装',
+        version: 'A',
+        procedure: '定子压装',
+        page: '1/1',
+        org: '叶梦珪',
+        orgDate: '2022/12/8',
+        exa: '陈兰生',
+        exaDep: '技术部',
+        approval: '张必文',
+        approvalDate: '2023/1/11'
+      },
+      objData: {
+        device: '200t龙门门式压床',
+        device1: '200',
+        device2: '轴向行程2500',
+        temp: '0 ~ +40°C',
+        temp1: '',
+        temp2: '',
+        humidity: '≤85%',
+        humidity1: '',
+        humidity2: '',
+        pressure: '314-454',
+        pressure1:'100t',
+        pressure2: '',
+        size: '压入模',
+        size1: '',
+        size2: ''
+      },
+      toolsData: {
+        type: '主定子压装底座 三点式内张吊具',
+        wire: '游标卡 尺钢直尺',
+        specs: '铜制榔头 固定铆钉 手工电弧焊机'
+      },
+      attentionCont: [
+        '1.作业前要熟悉定子组立图纸方可展开作业。',
+        '2.吊装前定子引出线端向上,并与机座出线孔方向一致注意绕组碰伤。',
+        '3.定子放至压装底座时应确认接触面是否平行。',
+        '4.压装前在机座与定子过盈面涂抹适当润滑油,以免产生异响,压装后首件须检查。',
+        '5.确认尺寸无误后,依机座铆钉孔位置打入铆钉,再用电焊熔接以防止震动后脱出。',
+        '6.龙门伺服液压机所设定快下速度最高不可超2000,慢下速度不高于1000。(转速越慢,位移精度越高)。所设定压力,不可大于25兆帕。',
+        '7.龙门伺服液压机每天首次开机需回程清零。校准液压机零点。'
+      ],
+      stepImgData: [{
+        step: '步骤一',
+        img: require('@/assets/operationInstructionimgs/dzyz1.png'),
+        text: ['依工装型号表格选取工装(依据压装深度)。', '依图示用专用吊具把定子吊放于工装,出线端向上。'],
+        // width: '180px'
+      }, {
+        step: '步骤二',
+        img: require('@/assets/operationInstructionimgs/dzyz2.png'),
+        text: ['机座吊至于定子上端:出线孔向上(注意出线孔与定子子引出线位置角度)。', '在机座上端放置平板。', '半自动作业流程:查询程序,上传PLC,旋钮调至半自动,单手自动。开始半自动作业。', '手动作业流程:根据工件压深调整上限位、下限位,上传PLC,旋钮旋至点动。开始手动作业。'],
+        // width: '160px'
+
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dzyz3.png'),
+        text: []
+      }, {
+        step: '',
+        img: require('@/assets/operationInstructionimgs/dzyz4.png'),
+        text: ['筋棒焊接时应将焊棒 、筋棒 、铁芯先点焊;', '然后分段对角焊接,以减小焊接后造成热应力;', '圆款定子可免除上述步骤。']
+      }, {
+        step: '步骤三',
+        img: require('@/assets/operationInstructionimgs/dzyz5.png'),
+        text: ['退出机床导轨', '依据机座铆钉孔位置 钻铆钉孔(孔径及深度依据技术图面要求)', '钻孔时注意孔径尺寸 及深度。', '打入固定铆钉(端部用焊接 防止铆钉在震动时脱出)']
+      }, {
+        step: '步骤四',
+        img: require('@/assets/operationInstructionimgs/dzyz6.png'),
+        text: ['调整好定子位置,按下翻转按钮,翻转定子90°']
+      }],
+      leftBottomData: [{
+        type: '164/184',
+        len1: '226',
+        len2: '256',
+        len3: '296',
+        len4: '386',
+        len4: '446',
+        len4: '',
+        num: 'QYZC301'
+
+      }, {
+        type: '164CD',
+        Ljc: '256',
+        num1: '',
+        num2: '',
+        num3: '',
+        len: ''
+      }, {
+        type: '184E',
+        Ljc: '296',
+        num1: '',
+        num2: '130-150',
+        num3: '1+2',
+        len: ''
+      }, {
+        type: '184FG',
+        Ljc: '386',
+        num1: '',
+        num2: '160-240',
+        num3: '1+2',
+        len: ''
+      }, {
+        type: '184HJ',
+        Ljc: '446',
+        num1: '',
+        num2: '250-285',
+        num3: '2+2',
+        len: ''
+      }]
+    }
+  }
+}
+</script>
+
+<style scoped>
+.container {
+  padding: 30px;
+  background: linear-gradient(to bottom, #74D9FB, #fff);
+}
+
+.borderline {
+  border: 1.5px solid #333;
+  border-bottom: 2.5px solid #333;
+  border-right: 2.5px solid #333;
+  position: relative;
+}
+
+.line {
+  height: 30px;
+  border-left: 1px solid #333;
+}
+
+.table {
+  width: 100%;
+  border-collapse: collapse;
+}
+
+.table1 {
+  border-collapse: collapse;
+  position: absolute;
+  width: 66%;
+  bottom: 0;
+  right: 0;
+}
+
+th,
+td {
+  border: 1px solid #333;
+  border-bottom: 0;
+  text-align: center;
+  font-size: 12px;
+}
+</style>

+ 822 - 0
zkqy-ui/src/views/amichi/purchase/purchaseOrder/index.vue

@@ -0,0 +1,822 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="采购编号" prop="number">
+        <el-input
+          v-model="queryParams.number"
+          placeholder="请输入采购编号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="申请组织" prop="apply">
+        <el-input
+          v-model="queryParams.apply"
+          placeholder="请输入申请组织"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="申请时间" prop="currency">
+        <el-date-picker clearable
+          v-model="queryParams.currency"
+          type="date"
+                        style="width: 205px;"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择申请时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="申请部门" prop="department">
+        <el-input
+          v-model="queryParams.department"
+          placeholder="请输入申请部门"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item label="申请人" prop="applypeople">
+        <el-input
+          v-model="queryParams.applypeople"
+          placeholder="请输入申请人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="审批人" prop="approval">
+        <el-input
+          v-model="queryParams.approval"
+          placeholder="请输入审批人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="审批时间" prop="approvaltime">
+        <el-date-picker clearable
+          v-model="queryParams.approvaltime"
+          type="date"
+          style="width: 205px;"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择审批时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="状态" prop="state">
+        <el-input
+          v-model="queryParams.state"
+          placeholder="请输入状态"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['amichi:purchaseOrder:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['amichi:purchaseOrder:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['amichi:purchaseOrder:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['amichi:purchaseOrder:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" style="margin-top: 20px"  :data="purchaseOrderList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="主键" align="center" prop="id" />
+      <el-table-column label="采购编号" align="center" prop="number" />
+      <el-table-column label="申请组织" align="center" prop="apply" />
+      <el-table-column label="申请时间" align="center" prop="currency"/>
+      <el-table-column label="申请部门" align="center" prop="department" />
+      <el-table-column label="合计金额" align="center" prop="total" />
+      <el-table-column label="申请人" align="center" prop="applypeople" />
+      <el-table-column label="创建人" align="center" prop="createpeople" />
+
+<!--      <el-table-column label="备用" align="center" prop="sparea" />-->
+      <el-table-column label="状态" align="center" prop="state" >
+        <template  v-slot="scope">
+          <el-tag :type="getStatusType(scope.row.state)" disable-transitions> <dict-tag  :options="dict.type.cgspzt" :value="scope.row.state"/></el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="审批人" align="center" prop="approval" />
+      <el-table-column label="审批时间" align="center" prop="approvaltime"/>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-dropdown @command="(command)=>{handleCommand(command, scope.row)}">
+            <el-button type="warning">
+              操作<i class="el-icon-arrow-down el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item  icon="el-icon-edit"  command="handleUpdate">修改</el-dropdown-item>
+              <el-dropdown-item  icon="el-icon-delete" command="handleDelete">删除</el-dropdown-item>
+              <el-dropdown-item  icon="el-icon-delete" command="initiateApproval">发起审批</el-dropdown-item>
+              <el-dropdown-item  icon="el-icon-delete" command="catDetails">查看详情</el-dropdown-item>
+
+            </el-dropdown-menu>
+          </el-dropdown>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改采购对话框 -->
+    <el-dialog title="查看详情" :visible.sync="catOpen" width="1000px" append-to-body>
+        <el-row type="flex" class="row-bg" justify="space-between">
+          <el-col :span="6"><div class="bt">单据编号</div></el-col>
+          <el-col :span="6"><div class="bt">申请组织</div></el-col>
+          <el-col :span="6"><div class="bt" style="padding-left: 27px">币别</div></el-col>
+        </el-row>
+        <el-row type="flex" class="row-bg" justify="space-between">
+          <el-col :span="6"><div class="bt">申请日期</div></el-col>
+          <el-col :span="6"><div class="bt">申请部门</div></el-col>
+          <el-col :span="6"><div class="bt">合计金额</div></el-col>
+        </el-row>
+    </el-dialog>
+    <!-- 添加或修改采购对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="1200px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-row type="flex" class="row-bg" justify="space-between">
+          <el-col :span="8">
+            <el-form-item label="采购编号" prop="number">
+              <el-input v-model="form.number" placeholder="请输入采购编号" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="申请组织" prop="apply">
+              <el-input v-model="form.apply" placeholder="请输入申请组织" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="申请时间" prop="applytime">
+              <el-date-picker clearable
+                              v-model="form.applytime"
+                              type="date"
+                              style="width: 306.32px"
+                              value-format="yyyy-MM-dd"
+                              placeholder="请选择申请时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row type="flex" class="row-bg" justify="space-between">
+          <el-col :span="8">
+            <el-form-item label="申请部门" prop="department">
+              <el-input v-model="form.department" placeholder="请输入申请部门" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="币别" prop="currency">
+              <el-input v-model="form.currency" placeholder="请输入申请组织" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="合计金额" prop="total">
+              <el-input v-model="form.total" placeholder="请输入合计金额" />
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+        <el-row type="flex" class="row-bg">
+          <el-col :span="8">
+            <el-form-item label="申请人" prop="applypeople">
+              <el-input v-model="form.applypeople" placeholder="请输入申请人" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+<!--            type="textarea"-->
+            <el-form-item label="备注" prop="applypeople">
+              <el-input v-model="form.remark" placeholder="请输入备注" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+
+        <el-row class="">
+          <div class="cesiumTabRoot">
+            <el-table
+              :data="detailData"
+              border
+              show-summary
+              :summary-method="getSummaries"
+              :cell-class-name="tabCellClassName"
+              :row-class-name="tabRowClassName"
+              @cell-click="cellClick"
+              style="width:100%">
+              <el-table-column
+                type="index"
+                label="序号"
+                align="center"
+                width="50">
+              </el-table-column>
+              <el-table-column
+                prop="organization"
+                align="center"
+                label="采购组织"
+              >
+                <template v-slot="{ row, column }">
+                    <el-input
+                      v-if="rowIndex === row.index && columnIndex === column.index"
+                      v-model="row.organization"
+                      @blur="hideInput(detailData,row.index,columnIndex,'organization')"
+                    >
+                    </el-input>
+                    <!-- 显示 -->
+                    <span v-else>{{ row.organization }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="demand"
+                label="需求组织"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.demand"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.demand }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="materialnum"
+                label="物料编码"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.materialnum"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.materialnum }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="materialname"
+                align="center"
+                :label="'物料名称'">
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.materialname"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.materialname }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="model"
+                label="规格型号"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.model"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.model }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="company"
+                label="单位"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.company"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.company }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="quantity"
+                label="申请数量"
+                align="center"
+                sortable
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.quantity"
+                    @blur="hideInput('sl')"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.quantity }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="approval"
+                label="批准数量"
+                align="center"
+                sortable
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.approval"
+                    @blur="hideInput('sl')"></el-input>
+
+                  <!-- 显示 -->
+                  <span v-else>{{ row.approval }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="remark"
+                label="到货日期"
+                align="center"
+                width="180"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-date-picker
+                    style="width: 100%"
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.reachtime"
+                    prop
+                    type="date"
+                    @blur="hideInput"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期">
+                  </el-date-picker>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.reachtime }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="remark"
+                label="备注"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.remark"
+                    prop
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.remark }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                align="center"
+                fixed="right"
+                label="操作"
+                width="120">
+                <template v-slot="scope">
+                  <el-button type="danger"  size="small" icon="el-icon-delete" @click.native.prevent="deleteRow(scope.$index, detailData)"></el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-row>
+        <el-row type="flex" class="row-bg" justify="space-between" style="margin-top: 20px">
+          <el-col  :span="10">
+          </el-col>
+          <el-col  :span="10">
+            <el-button type="primary" style="float: right" icon="el-icon-circle-plus" @click="addDetails">新增明细</el-button>
+          </el-col>
+        </el-row>
+<!--        <el-row type="flex" class="row-bg" justify="space-between" style="margin-top: 20px">-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="创建人" prop="createpeople">-->
+<!--              <el-input v-model="form.createpeople" placeholder="请输入创建人" />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--          <el-col :span="12">-->
+<!--            <el-form-item label="审批人" prop="approval">-->
+<!--              <el-input v-model="form.approval" placeholder="请输入审批人" />-->
+<!--            </el-form-item>-->
+<!--          </el-col>-->
+<!--        </el-row>-->
+
+<!--        <el-form-item label="审批时间" prop="approvaltime">-->
+<!--          <el-date-picker clearable-->
+<!--            v-model="form.approvaltime"-->
+<!--            type="date"-->
+<!--            value-format="yyyy-MM-dd"-->
+<!--            placeholder="审批时间">-->
+<!--          </el-date-picker>-->
+<!--        </el-form-item>-->
+
+<!--        <el-form-item label="审批时间" prop="createTime">-->
+<!--          <el-date-picker clearable-->
+<!--                          v-model="form.createTime"-->
+<!--                          type="date"-->
+<!--                          value-format="yyyy-MM-dd"-->
+<!--                          placeholder="创建时间">-->
+<!--          </el-date-picker>-->
+<!--        </el-form-item>-->
+
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  listPurchaseOrder,
+  addPurchaseOrderVo,
+  getPurchaseOrderOne,
+  getPurchaseOrder,
+  updatePurchaseOrderVo,
+  delPurchaseOrder,
+  addPurchaseOrder,
+  updatePurchaseOrder,
+  updatePurchaseOrderState
+} from "@/api/amichi/purchase/purchaseOrder";
+
+export default {
+  name: "PurchaseOrder",
+  dicts: ["cgspzt"],
+  data() {
+    return {
+      catOpen:false,
+      // 行index
+      rowIndex: null,
+      // 列index
+      columnIndex: null,
+      detailData:[],
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 采购表格数据
+      purchaseOrderList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        number: null,
+        apply: null,
+        currency: null,
+        department: null,
+        total: null,
+        applypeople: null,
+        createpeople: null,
+        approval: null,
+        approvaltime: null,
+        sparea: null,
+        state: null,
+        createById: null,
+        updateById: null,
+        dataApprovalStatus: null,
+        processKey: null,
+        taskProcessKey: null,
+        taskNodeKey: null
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    //展示不同的标签
+    getStatusType(status) {
+      switch (status) {
+        case '3':
+          return 'warning';
+        case '0':
+          return 'danger';
+        case '1':
+          return 'success';
+        case '2':
+          return 'info';
+        default:
+          return '';
+      }
+    },
+    //下拉菜单点击事件
+    handleCommand(command, row) {
+      switch (command) {
+        case "handleUpdate":
+          this.handleUpdate(row)
+          break;
+        case "handleDelete":
+          this.handleDelete(row)
+          break;
+        case "initiateApproval":
+          this.initiateApproval(row)
+          break;
+        case "catDetails":
+          this.catDetails(row)
+          break;
+
+        default:
+          break;
+      }
+    },
+    //查看详情
+    catDetails(row){
+      this.catOpen=true;
+    },
+    initiateApproval(row){
+      //发起审批改状态
+      let data={"id":row.id,state:0}
+      updatePurchaseOrderState(data).then((res)=>{
+        this.$modal.msgSuccess("发起审批成功");
+        this.getList();
+      });
+    },
+    // 对列进行合算
+    getSummaries(param) {
+      const { columns, data } = param;
+      const sums = [];
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = '合计';
+          return;
+        }
+        const values = data.map(item => Number(item[column.property]));
+        // 只对amount这一列进行总计核算。
+        if (column.property === 'quantity') {
+          if (!values.every(value => isNaN(value))) {
+            sums[index] = values.reduce((prev, curr) => {
+              const value = Number(curr);
+              if (!isNaN(value)) {
+                return prev + curr;
+              }else {
+                return prev;
+              }
+            }, 0);
+            // sums[index] += ' 元';
+          } else {
+            // sums[index] = '---'
+          }
+        }
+        if (column.property === 'approval') {
+          if (!values.every(value => isNaN(value))) {
+            sums[index] = values.reduce((prev, curr) => {
+              const value = Number(curr);
+              if (!isNaN(value)) {
+                return prev + curr;
+              }else {
+                return prev;
+              }
+            }, 0);
+            // sums[index] += ' 元';
+          } else {
+            // sums[index] = '---'
+          }
+        }
+      });
+      return sums;
+    },
+    //新增明细
+    addDetails(){
+      this.detailData.push(
+        {"organization":"","demand":"","materialnum":"","materialname":"","model":"","company":"","quantity":0,"approval":0,"reachtime":"","remark":""});
+    },
+    deleteRow(index, rows) {
+      rows.splice(index, 1);
+    },
+    // 表格input失去焦点
+    hideInput(a,b,c,d) {
+      if(a=="sl"){
+        this.updateTotalQuantity();
+      }
+      // console.log(a,b,c,d)
+      // console.log(a[b-1])
+      // console.log("33333")
+      // if(a[b-1]){
+      //   console.log("a")
+      //   if(a[b-1][`${d}`]!=undefined&&a[b-1][`${d}`]!=""){
+      //     a[b-1].isEmpty[`${d}`]=false;
+      //     console.log("h")
+      //   }else {
+      //     console.log("m")
+      //     a[b-1].isEmpty[`${d}`]=true;
+      //   }
+      // }
+      // console.log(this.detailData)
+      this.rowIndex = null;
+      this.columnIndex = null;
+    },
+    // 点击表格单元格编辑
+    cellClick(row, column) {
+      this.rowIndex = row.index;
+      this.columnIndex = column.index;
+    },
+    // 给表格单元格数据添加列下标
+    tabCellClassName({ column, columnIndex }) {
+      column.index = columnIndex + 1;
+    },
+    // 表格行class-name
+    tabRowClassName({ row, rowIndex }) {
+      row.index = rowIndex + 1;
+    },
+    /** 查询采购列表 */
+    getList() {
+      this.loading = true;
+      listPurchaseOrder(this.queryParams).then(response => {
+        this.purchaseOrderList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        number: null,
+        apply: null,
+        currency: null,
+        department: null,
+        total: null,
+        applypeople: null,
+        createpeople: null,
+        approval: null,
+        approvaltime: null,
+        sparea: null,
+        state: null,
+        remark: null,
+        createById: null,
+        createBy: null,
+        createTime: null,
+        updateById: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null,
+        dataApprovalStatus: null,
+        processKey: null,
+        taskProcessKey: null,
+        taskNodeKey: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.detailData=[];
+      this.open = true;
+      this.title = "添加采购";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.detailData=[];
+      const id = row.id || this.ids
+      getPurchaseOrderOne(id).then(response => {
+        this.form = response.data;
+        this.detailData = response.data.pocurementdetailsList;
+        this.open = true;
+        this.title = "修改采购";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            this.form.pocurementdetailsList = this.detailData;
+            updatePurchaseOrderVo(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            this.form.pocurementdetailsList = this.detailData;
+            addPurchaseOrderVo(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除采购编号为"' + ids + '"的数据项?').then(function() {
+        return delPurchaseOrder(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('amichi/purchaseOrder/export', {
+        ...this.queryParams
+      }, `purchaseOrder_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>
+<style>
+.bt{
+  text-align: left;
+  border: 1px solid red;
+}
+</style>

+ 705 - 0
zkqy-ui/src/views/amichi/purchase/purchaseOrder/purchaseOrderApproval.vue

@@ -0,0 +1,705 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="采购编号" prop="number">
+        <el-input
+          v-model="queryParams.number"
+          placeholder="请输入采购编号"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="申请组织" prop="apply">
+        <el-input
+          v-model="queryParams.apply"
+          placeholder="请输入申请组织"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="申请时间" prop="currency">
+        <el-date-picker clearable
+          v-model="queryParams.currency"
+          type="date"
+                        style="width: 205px;"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择申请时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="申请部门" prop="department">
+        <el-input
+          v-model="queryParams.department"
+          placeholder="请输入申请部门"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+
+      <el-form-item label="申请人" prop="applypeople">
+        <el-input
+          v-model="queryParams.applypeople"
+          placeholder="请输入申请人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="审批人" prop="approval">
+        <el-input
+          v-model="queryParams.approval"
+          placeholder="请输入审批人"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="审批时间" prop="approvaltime">
+        <el-date-picker clearable
+          v-model="queryParams.approvaltime"
+          type="date"
+          style="width: 205px;"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择审批时间">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+    
+    <el-table v-loading="loading" style="margin-top: 20px"  :data="purchaseOrderList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="主键" align="center" prop="id" />
+      <el-table-column label="采购编号" align="center" prop="number" />
+      <el-table-column label="申请组织" align="center" prop="apply" />
+      <el-table-column label="申请时间" align="center" prop="currency"/>
+      <el-table-column label="申请部门" align="center" prop="department" />
+      <el-table-column label="合计金额" align="center" prop="total" />
+      <el-table-column label="申请人" align="center" prop="applypeople" />
+      <el-table-column label="创建人" align="center" prop="createpeople" />
+
+<!--      <el-table-column label="备用" align="center" prop="sparea" />-->
+      <el-table-column label="状态" align="center" prop="state" >
+        <template  v-slot="scope">
+          <el-tag :type="getStatusType(scope.row.state)" disable-transitions> <dict-tag  :options="dict.type.cgspzt" :value="scope.row.state"/></el-tag>
+        </template>
+      </el-table-column>
+      <el-table-column label="审批人" align="center" prop="approval" />
+      <el-table-column label="审批时间" align="center" prop="approvaltime"/>
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-dropdown @command="(command)=>{handleCommand(command, scope.row)}">
+            <el-button type="warning">
+              操作<i class="el-icon-arrow-down el-icon--right"></i>
+            </el-button>
+            <el-dropdown-menu slot="dropdown">
+              <el-dropdown-item  icon="el-icon-edit"  command="examineAndApprove">审批</el-dropdown-item>
+            </el-dropdown-menu>
+          </el-dropdown>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+    <!-- 添加或修改采购对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="1200px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px" :disabled="true">
+        <el-row class="row-bg" justify="space-between" type="flex">
+          <el-col :span="8">
+            <el-form-item label="采购编号:" prop="number">
+              <el-input v-model="form.number" placeholder="请输入采购编号" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="申请组织:" prop="apply">
+              <el-input v-model="form.apply" placeholder="请输入申请组织" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="申请时间:" prop="applytime">
+              <el-date-picker clearable
+                              v-model="form.applytime"
+                              type="date"
+                              style="width: 306.32px"
+                              value-format="yyyy-MM-dd"
+                              placeholder="请选择申请时间">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row type="flex" class="row-bg" justify="space-between">
+          <el-col :span="8">
+            <el-form-item label="申请部门:" prop="department">
+              <el-input v-model="form.department" placeholder="请输入申请部门" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="币别:" prop="currency">
+              <el-input v-model="form.currency" placeholder="请输入申请组织" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+            <el-form-item label="合计金额:" prop="total">
+              <el-input v-model="form.total" placeholder="请输入合计金额" />
+            </el-form-item>
+          </el-col>
+
+        </el-row>
+        <el-row type="flex" class="row-bg">
+          <el-col :span="8">
+            <el-form-item label="申请人:" prop="applypeople">
+              <el-input v-model="form.applypeople" placeholder="请输入申请人" />
+            </el-form-item>
+          </el-col>
+          <el-col :span="8">
+<!--            type="textarea"-->
+            <el-form-item label="备注:" prop="applypeople">
+              <el-input v-model="form.remark" placeholder="请输入备注" />
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <!-- 表单表格信息 -->
+        <el-row class="">
+          <div class="cesiumTabRoot">
+            <el-table
+              :data="detailData"
+              border
+              show-summary
+              :summary-method="getSummaries"
+              :cell-class-name="tabCellClassName"
+              :row-class-name="tabRowClassName"
+              @cell-click="cellClick"
+              style="width:100%">
+              <el-table-column
+                type="index"
+                label="序号"
+                align="center"
+                width="50">
+              </el-table-column>
+              <el-table-column
+                prop="organization"
+                align="center"
+                label="采购组织"
+              >
+                <template v-slot="{ row, column }">
+                    <el-input
+                      v-if="rowIndex === row.index && columnIndex === column.index"
+                      v-model="row.organization"
+                      @blur="hideInput(detailData,row.index,columnIndex,'organization')"
+                    >
+                    </el-input>
+                    <!-- 显示 -->
+                    <span v-else>{{ row.organization }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="demand"
+                label="需求组织"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.demand"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.demand }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="materialnum"
+                label="物料编码"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.materialnum"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.materialnum }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="materialname"
+                align="center"
+                :label="'物料名称'">
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.materialname"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.materialname }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="model"
+                label="规格型号"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.model"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.model }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="company"
+                label="单位"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.company"
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.company }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="quantity"
+                label="申请数量"
+                align="center"
+                sortable
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.quantity"
+                    @blur="hideInput('sl')"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.quantity }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="approval"
+                label="批准数量"
+                align="center"
+                sortable
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.approval"
+                    @blur="hideInput('sl')"></el-input>
+
+                  <!-- 显示 -->
+                  <span v-else>{{ row.approval }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="remark"
+                label="到货日期"
+                align="center"
+                width="180"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-date-picker
+                    style="width: 100%"
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.reachtime"
+                    prop
+                    type="date"
+                    @blur="hideInput"
+                    value-format="yyyy-MM-dd"
+                    placeholder="选择日期">
+                  </el-date-picker>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.reachtime }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                prop="remark"
+                label="备注"
+                align="center"
+              >
+                <template v-slot="{ row, column }">
+                  <!-- 编辑 -->
+                  <el-input
+                    v-if="rowIndex === row.index && columnIndex === column.index"
+                    v-model="row.remark"
+                    prop
+                    @blur="hideInput"></el-input>
+                  <!-- 显示 -->
+                  <span v-else>{{ row.remark }}</span>
+                </template>
+              </el-table-column>
+
+              <el-table-column
+                align="center"
+                fixed="right"
+                label="操作"
+                width="120">
+                <template v-slot="scope">
+                  <el-button type="danger"  size="small" icon="el-icon-delete" @click.native.prevent="deleteRow(scope.$index, detailData)"></el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+          </div>
+        </el-row>
+      </el-form>
+      <el-form ref="spForm" :model="spform" style="margin-top: 20px" :rules="spRules" label-width="80px" >
+        <el-row class="row-bg" justify="space-between" type="flex">
+          <el-col :span="8">
+            <el-form-item label="审批结果:" prop="state">
+              <el-select
+                v-model="spform.state"
+                size="small"
+                style="width: 300px"
+                clearable
+                placeholder="请选择审批结果"
+                filterable
+              >
+                <el-option
+                  v-for="(item,index) in dict.type.cgspzt"
+                  v-if="item.label!='待审批'"
+                  :key="index"
+                  :label="item.label"
+                  :value="item.value"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row class="row-bg" justify="space-between">
+          <el-col :span="8">
+            <el-form-item label="审批意见:" prop="approvalOpinionFirst">
+              <el-input type="textarea" v-model="spform.approvalOpinionFirst"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listPurchaseOrder,updatePurchaseOrderState,getPurchaseOrderOne, delPurchaseOrder} from "@/api/amichi/purchase/purchaseOrder";
+
+export default {
+  name: "PurchaseOrder",
+  dicts: ["cgspzt"],
+  data() {
+    return {
+      // 行index
+      rowIndex: null,
+      // 列index
+      columnIndex: null,
+      detailData:[],
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 采购表格数据
+      purchaseOrderList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        number: null,
+        apply: null,
+        currency: null,
+        department: null,
+        total: null,
+        applypeople: null,
+        createpeople: null,
+        approval: null,
+        approvaltime: null,
+        sparea: null,
+        state: null,
+        createById: null,
+        updateById: null,
+        dataApprovalStatus: null,
+        processKey: null,
+        taskProcessKey: null,
+        taskNodeKey: null
+      },
+      //审批表单
+      spform:{},
+      // 表单参数
+      form: {},
+      //审批信息
+      spRules:{},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    //展示不同的标签
+    getStatusType(status) {
+      switch (status) {
+        case '3':
+          return 'warning';
+        case '0':
+          return 'danger';
+        case '1':
+          return 'success';
+        case '2':
+          return 'info';
+        default:
+          return '';
+      }
+    },
+    //下拉菜单点击事件
+    handleCommand(command, row) {
+      switch (command) {
+        case "examineAndApprove":
+          this.handleUpdate(row)
+          break;
+        default:
+          break;
+      }
+    },
+    // 对列进行合算
+    getSummaries(param) {
+      const { columns, data } = param;
+      const sums = [];
+      columns.forEach((column, index) => {
+        if (index === 0) {
+          sums[index] = '合计';
+          return;
+        }
+        const values = data.map(item => Number(item[column.property]));
+        // 只对amount这一列进行总计核算。
+        if (column.property === 'quantity') {
+          if (!values.every(value => isNaN(value))) {
+            sums[index] = values.reduce((prev, curr) => {
+              const value = Number(curr);
+              if (!isNaN(value)) {
+                return prev + curr;
+              }else {
+                return prev;
+              }
+            }, 0);
+            // sums[index] += ' 元';
+          } else {
+            // sums[index] = '---'
+          }
+        }
+        if (column.property === 'approval') {
+          if (!values.every(value => isNaN(value))) {
+            sums[index] = values.reduce((prev, curr) => {
+              const value = Number(curr);
+              if (!isNaN(value)) {
+                return prev + curr;
+              }else {
+                return prev;
+              }
+            }, 0);
+            // sums[index] += ' 元';
+          } else {
+            // sums[index] = '---'
+          }
+        }
+      });
+      return sums;
+    },
+    //新增明细
+    addDetails(){
+      this.detailData.push(
+        {"organization":"","demand":"","materialnum":"","materialname":"","model":"","company":"","quantity":0,"approval":0,"reachtime":"","remark":""});
+    },
+    deleteRow(index, rows) {
+      rows.splice(index, 1);
+    },
+    // 表格input失去焦点
+    hideInput(a,b,c,d) {
+      if(a=="sl"){
+        this.updateTotalQuantity();
+      }
+      // console.log(a,b,c,d)
+      // console.log(a[b-1])
+      // console.log("33333")
+      // if(a[b-1]){
+      //   console.log("a")
+      //   if(a[b-1][`${d}`]!=undefined&&a[b-1][`${d}`]!=""){
+      //     a[b-1].isEmpty[`${d}`]=false;
+      //     console.log("h")
+      //   }else {
+      //     console.log("m")
+      //     a[b-1].isEmpty[`${d}`]=true;
+      //   }
+      // }
+      // console.log(this.detailData)
+      this.rowIndex = null;
+      this.columnIndex = null;
+    },
+    // 点击表格单元格编辑
+    cellClick(row, column) {
+      this.rowIndex = row.index;
+      this.columnIndex = column.index;
+    },
+    // 给表格单元格数据添加列下标
+    tabCellClassName({ column, columnIndex }) {
+      column.index = columnIndex + 1;
+    },
+    // 表格行class-name
+    tabRowClassName({ row, rowIndex }) {
+      row.index = rowIndex + 1;
+    },
+    /** 查询采购列表 */
+    getList() {
+      this.loading = true;
+      this.queryParams.state = 0;
+      listPurchaseOrder(this.queryParams).then(response => {
+        this.purchaseOrderList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+      this.queryParams.state =" ";
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        number: null,
+        apply: null,
+        currency: null,
+        department: null,
+        total: null,
+        applypeople: null,
+        createpeople: null,
+        approval: null,
+        approvaltime: null,
+        sparea: null,
+        state: null,
+        remark: null,
+        createById: null,
+        createBy: null,
+        createTime: null,
+        updateById: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null,
+        dataApprovalStatus: null,
+        processKey: null,
+        taskProcessKey: null,
+        taskNodeKey: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.detailData=[];
+      this.open = true;
+      this.title = "添加采购";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      this.detailData=[];
+      const id = row.id || this.ids
+      this.spform={};
+      getPurchaseOrderOne(id).then(response => {
+        this.form = response.data;
+        this.detailData = response.data.pocurementdetailsList;
+        this.open = true;
+        this.title = "采购单审批";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          this.loading = true;
+          this.spform.id = this.form.id;
+          if (this.form.id != null) {
+            updatePurchaseOrderState(this.spform).then(response => {
+              this.$modal.msgSuccess("审批成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除采购编号为"' + ids + '"的数据项?').then(function() {
+        return delPurchaseOrder(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('amichi/purchaseOrder/export', {
+        ...this.queryParams
+      }, `purchaseOrder_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 403 - 0
zkqy-ui/src/views/amichi/purchase/purchaseOrderDetails/index.vue

@@ -0,0 +1,403 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
+      <el-form-item label="采购单id" prop="purchaseId">
+        <el-input
+          v-model="queryParams.purchaseId"
+          placeholder="请输入采购单id"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="采购组织" prop="organization">
+        <el-input
+          v-model="queryParams.organization"
+          placeholder="请输入采购组织"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="需求组织" prop="demand">
+        <el-input
+          v-model="queryParams.demand"
+          placeholder="请输入需求组织"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="物料编码" prop="materialnum">
+        <el-input
+          v-model="queryParams.materialnum"
+          placeholder="请输入物料编码"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="物料名称" prop="materialname">
+        <el-input
+          v-model="queryParams.materialname"
+          placeholder="请输入物料名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="到货日期" prop="reachtime">
+        <el-date-picker clearable
+          v-model="queryParams.reachtime"
+          type="date"
+          value-format="yyyy-MM-dd"
+          placeholder="请选择到货日期">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="状态" prop="state">
+        <el-input
+          v-model="queryParams.state"
+          placeholder="请输入状态"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <el-row :gutter="10" class="mb8">
+      <el-col :span="1.5">
+        <el-button
+          type="primary"
+          plain
+          icon="el-icon-plus"
+          size="mini"
+          @click="handleAdd"
+          v-hasPermi="['amichi:pocurementdetails:add']"
+        >新增</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="success"
+          plain
+          icon="el-icon-edit"
+          size="mini"
+          :disabled="single"
+          @click="handleUpdate"
+          v-hasPermi="['amichi:pocurementdetails:edit']"
+        >修改</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="danger"
+          plain
+          icon="el-icon-delete"
+          size="mini"
+          :disabled="multiple"
+          @click="handleDelete"
+          v-hasPermi="['amichi:pocurementdetails:remove']"
+        >删除</el-button>
+      </el-col>
+      <el-col :span="1.5">
+        <el-button
+          type="warning"
+          plain
+          icon="el-icon-download"
+          size="mini"
+          @click="handleExport"
+          v-hasPermi="['amichi:pocurementdetails:export']"
+        >导出</el-button>
+      </el-col>
+      <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
+    </el-row>
+
+    <el-table v-loading="loading" :data="pocurementdetailsList" @selection-change="handleSelectionChange">
+      <el-table-column type="selection" width="55" align="center" />
+      <el-table-column label="主键" align="center" prop="id" />
+      <el-table-column label="采购单id" align="center" prop="purchaseId" />
+      <el-table-column label="采购组织" align="center" prop="organization" />
+      <el-table-column label="需求组织" align="center" prop="demand" />
+      <el-table-column label="物料编码" align="center" prop="materialnum" />
+      <el-table-column label="物料名称" align="center" prop="materialname" />
+      <el-table-column label="规格型号" align="center" prop="model" />
+      <el-table-column label="单位" align="center" prop="company" />
+      <el-table-column label="申请数量" align="center" prop="quantity" />
+      <el-table-column label="批准数量" align="center" prop="approval" />
+      <el-table-column label="到货日期" align="center" prop="reachtime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.reachtime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
+      <el-table-column label="备用1" align="center" prop="sparea" />
+      <el-table-column label="状态" align="center" prop="state" />
+      <el-table-column label="备注" align="center" prop="remark" />
+      <el-table-column label="创建者id" align="center" prop="createById" />
+      <el-table-column label="更新者id" align="center" prop="updateById" />
+      <el-table-column label="数据条审批状态" align="center" prop="dataApprovalStatus" />
+      <el-table-column label="流程编号" align="center" prop="processKey" />
+      <el-table-column label="任务编码" align="center" prop="taskProcessKey" />
+      <el-table-column label="任务节点编码" align="center" prop="taskNodeKey" />
+      <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
+        <template slot-scope="scope">
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-edit"
+            @click="handleUpdate(scope.row)"
+            v-hasPermi="['amichi:pocurementdetails:edit']"
+          >修改</el-button>
+          <el-button
+            size="mini"
+            type="text"
+            icon="el-icon-delete"
+            @click="handleDelete(scope.row)"
+            v-hasPermi="['amichi:pocurementdetails:remove']"
+          >删除</el-button>
+        </template>
+      </el-table-column>
+    </el-table>
+
+    <pagination
+      v-show="total>0"
+      :total="total"
+      :page.sync="queryParams.pageNum"
+      :limit.sync="queryParams.pageSize"
+      @pagination="getList"
+    />
+
+    <!-- 添加或修改采购明细对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+      <el-form ref="form" :model="form" :rules="rules" label-width="80px">
+        <el-form-item label="采购单id" prop="purchaseId">
+          <el-input v-model="form.purchaseId" placeholder="请输入采购单id" />
+        </el-form-item>
+        <el-form-item label="采购组织" prop="organization">
+          <el-input v-model="form.organization" placeholder="请输入采购组织" />
+        </el-form-item>
+        <el-form-item label="需求组织" prop="demand">
+          <el-input v-model="form.demand" placeholder="请输入需求组织" />
+        </el-form-item>
+        <el-form-item label="物料编码" prop="materialnum">
+          <el-input v-model="form.materialnum" placeholder="请输入物料编码" />
+        </el-form-item>
+        <el-form-item label="物料名称" prop="materialname">
+          <el-input v-model="form.materialname" placeholder="请输入物料名称" />
+        </el-form-item>
+        <el-form-item label="规格型号" prop="model">
+          <el-input v-model="form.model" placeholder="请输入规格型号" />
+        </el-form-item>
+        <el-form-item label="单位" prop="company">
+          <el-input v-model="form.company" placeholder="请输入单位" />
+        </el-form-item>
+        <el-form-item label="申请数量" prop="quantity">
+          <el-input v-model="form.quantity" placeholder="请输入申请数量" />
+        </el-form-item>
+        <el-form-item label="批准数量" prop="approval">
+          <el-input v-model="form.approval" placeholder="请输入批准数量" />
+        </el-form-item>
+        <el-form-item label="到货日期" prop="reachtime">
+          <el-date-picker clearable
+            v-model="form.reachtime"
+            type="date"
+            value-format="yyyy-MM-dd"
+            placeholder="请选择到货日期">
+          </el-date-picker>
+        </el-form-item>
+        <el-form-item label="备用1" prop="sparea">
+          <el-input v-model="form.sparea" placeholder="请输入备用1" />
+        </el-form-item>
+        <el-form-item label="状态" prop="state">
+          <el-input v-model="form.state" placeholder="请输入状态" />
+        </el-form-item>
+        <el-form-item label="备注" prop="remark">
+          <el-input v-model="form.remark" placeholder="请输入备注" />
+        </el-form-item>
+        <el-form-item label="创建者id" prop="createById">
+          <el-input v-model="form.createById" placeholder="请输入创建者id" />
+        </el-form-item>
+        <el-form-item label="更新者id" prop="updateById">
+          <el-input v-model="form.updateById" placeholder="请输入更新者id" />
+        </el-form-item>
+        <el-form-item label="删除标志" prop="delFlag">
+          <el-input v-model="form.delFlag" placeholder="请输入删除标志" />
+        </el-form-item>
+        <el-form-item label="流程编号" prop="processKey">
+          <el-input v-model="form.processKey" placeholder="请输入流程编号" />
+        </el-form-item>
+        <el-form-item label="任务编码" prop="taskProcessKey">
+          <el-input v-model="form.taskProcessKey" placeholder="请输入任务编码" />
+        </el-form-item>
+        <el-form-item label="任务节点编码" prop="taskNodeKey">
+          <el-input v-model="form.taskNodeKey" placeholder="请输入任务节点编码" />
+        </el-form-item>
+      </el-form>
+      <div slot="footer" class="dialog-footer">
+        <el-button type="primary" @click="submitForm">确 定</el-button>
+        <el-button @click="cancel">取 消</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { listPocurementdetails, getPocurementdetails, delPocurementdetails, addPocurementdetails, updatePocurementdetails } from "@/api/amichi/purchase/pocurementdetails";
+
+export default {
+  name: "Pocurementdetails",
+  data() {
+    return {
+      // 遮罩层
+      loading: true,
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 采购明细表格数据
+      pocurementdetailsList: [],
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        purchaseId: null,
+        organization: null,
+        demand: null,
+        materialnum: null,
+        materialname: null,
+        reachtime: null,
+        state: null,
+      },
+      // 表单参数
+      form: {},
+      // 表单校验
+      rules: {
+      }
+    };
+  },
+  created() {
+    this.getList();
+  },
+  methods: {
+    /** 查询采购明细列表 */
+    getList() {
+      this.loading = true;
+      listPocurementdetails(this.queryParams).then(response => {
+        this.pocurementdetailsList = response.rows;
+        this.total = response.total;
+        this.loading = false;
+      });
+    },
+    // 取消按钮
+    cancel() {
+      this.open = false;
+      this.reset();
+    },
+    // 表单重置
+    reset() {
+      this.form = {
+        id: null,
+        purchaseId: null,
+        organization: null,
+        demand: null,
+        materialnum: null,
+        materialname: null,
+        model: null,
+        company: null,
+        quantity: null,
+        approval: null,
+        reachtime: null,
+        sparea: null,
+        state: null,
+        remark: null,
+        createById: null,
+        createBy: null,
+        createTime: null,
+        updateById: null,
+        updateBy: null,
+        updateTime: null,
+        delFlag: null,
+        dataApprovalStatus: null,
+        processKey: null,
+        taskProcessKey: null,
+        taskNodeKey: null
+      };
+      this.resetForm("form");
+    },
+    /** 搜索按钮操作 */
+    handleQuery() {
+      this.queryParams.pageNum = 1;
+      this.getList();
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 新增按钮操作 */
+    handleAdd() {
+      this.reset();
+      this.open = true;
+      this.title = "添加采购明细";
+    },
+    /** 修改按钮操作 */
+    handleUpdate(row) {
+      this.reset();
+      const id = row.id || this.ids
+      getPocurementdetails(id).then(response => {
+        this.form = response.data;
+        this.open = true;
+        this.title = "修改采购明细";
+      });
+    },
+    /** 提交按钮 */
+    submitForm() {
+      this.$refs["form"].validate(valid => {
+        if (valid) {
+          if (this.form.id != null) {
+            updatePocurementdetails(this.form).then(response => {
+              this.$modal.msgSuccess("修改成功");
+              this.open = false;
+              this.getList();
+            });
+          } else {
+            addPocurementdetails(this.form).then(response => {
+              this.$modal.msgSuccess("新增成功");
+              this.open = false;
+              this.getList();
+            });
+          }
+        }
+      });
+    },
+    /** 删除按钮操作 */
+    handleDelete(row) {
+      const ids = row.id || this.ids;
+      this.$modal.confirm('是否确认删除采购明细编号为"' + ids + '"的数据项?').then(function() {
+        return delPocurementdetails(ids);
+      }).then(() => {
+        this.getList();
+        this.$modal.msgSuccess("删除成功");
+      }).catch(() => {});
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      this.download('amichi/pocurementdetails/export', {
+        ...this.queryParams
+      }, `pocurementdetails_${new Date().getTime()}.xlsx`)
+    }
+  }
+};
+</script>

+ 65 - 14
zkqy-ui/src/views/index.vue

@@ -1,5 +1,29 @@
 <template>
   <div class="app-container home">
+    <!--    <div>-->
+    <!--      <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>-->
+    <!--        <el-upload ref="upload" :limit="1"   :headers="upload.headers"-->
+    <!--                   :action="upload.url" :disabled="upload.isUploading"-->
+    <!--                   :on-progress="handleFileUploadProgress" :on-success="handleFileSuccess" :auto-upload="false" drag>-->
+    <!--          <i class="el-icon-upload"></i>-->
+    <!--          <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>-->
+    <!--          <div class="el-upload__tip text-center" slot="tip">-->
+    <!--            <div class="el-upload__tip" slot="tip">-->
+    <!--              <el-checkbox v-model="upload.updateSupport"/>-->
+    <!--              是否更新已经存在的用户数据-->
+    <!--            </div>-->
+    <!--            <span>仅允许导入xls、xlsx格式文件。</span>-->
+    <!--            <el-link type="primary" :underline="false" style="font-size: 12px; vertical-align: baseline"-->
+    <!--                     @click="importTemplate">下载模板-->
+    <!--            </el-link>-->
+    <!--          </div>-->
+    <!--        </el-upload>-->
+    <!--        <div slot="footer" class="dialog-footer">-->
+    <!--          <el-button type="primary" @click="submitFileForm">确 定</el-button>-->
+    <!--          <el-button @click="upload.open = false">取 消</el-button>-->
+    <!--        </div>-->
+    <!--      </el-dialog>-->
+    <!--    </div>-->
     <!-- <el-row :gutter="20"></el-row>
     <el-row :gutter="20"></el-row>
     <el-divider/>
@@ -104,9 +128,9 @@
 </template>
 
 <script>
-import { formatDate } from "@/utils";
-import { getToken } from "@/utils/auth";
-import { mapGetters, mapState } from "vuex";
+import {formatDate} from "@/utils";
+import {getToken} from "@/utils/auth";
+import {mapGetters, mapState} from "vuex";
 import "swiper/css/swiper.css";
 import Swiper from "swiper";
 import {
@@ -157,7 +181,7 @@ export default {
       // 用户导入参数
       upload: {
         // 是否显示弹出层(用户导入)
-        open: false,
+        open: true,
         // 弹出层标题(用户导入)
         title: "",
         // 是否禁用上传
@@ -165,9 +189,9 @@ export default {
         // 是否更新已经存在的用户数据
         updateSupport: 0,
         // 设置上传的请求头部
-        headers: { Authorization: "Bearer " + getToken() },
+        headers: {Authorization: "Bearer " + getToken()},
         // 上传的地址
-        url: process.env.VUE_APP_BASE_API3 + "common/importDataInfo",
+        url: process.env.VUE_APP_BASE_API1 + "common/tenantUploadFile",
       },
       // 版本号
       version: "3.8.5",
@@ -330,8 +354,8 @@ export default {
             right: "40%",
             top: "50%",
             data: [
-              { value: 10, name: "工艺流" },
-              { value: 20, name: "审批流" },
+              {value: 10, name: "工艺流"},
+              {value: 20, name: "审批流"},
             ],
             label: {
               show: false,
@@ -490,9 +514,9 @@ export default {
             barWidth: "18",
             orientation: "horizontal",
             data: [
-              { value: 88, name: "表单" },
-              { value: 66, name: "表格" },
-              { value: 33, name: "三级联动" },
+              {value: 88, name: "表单"},
+              {value: 66, name: "表格"},
+              {value: 33, name: "三级联动"},
             ],
             showBackground: true,
             backgroundStyle: {
@@ -594,10 +618,10 @@ export default {
       this.$refs.upload.clearFiles();
       this.$alert(
         "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
-          response.msg +
-          "</div>",
+        response.msg +
+        "</div>",
         "导入结果",
-        { dangerouslyUseHTMLString: true }
+        {dangerouslyUseHTMLString: true}
       );
       this.getList();
     },
@@ -635,12 +659,14 @@ export default {
   width: 100%;
   /* height: 500px; */
   background-color: #eff2f7;
+
   .info-content {
     width: 100%;
     height: 100%;
     display: flex;
     flex-direction: row;
     flex-wrap: wrap;
+
     .echarts1 {
       position: relative;
       width: 20%;
@@ -650,16 +676,19 @@ export default {
       box-shadow: 10px 10px 5px #e0e0e0;
       background-color: #fff;
       border-radius: 10px;
+
       .pieChart {
         width: 100%;
         height: 100%;
       }
+
       .describe1 {
         .text {
           position: absolute;
           left: 50px;
           top: 90px;
         }
+
         .num {
           position: absolute;
           font-size: 20px;
@@ -668,12 +697,14 @@ export default {
           top: 55px;
         }
       }
+
       .describe2 {
         .text {
           position: absolute;
           left: 157px;
           top: 90px;
         }
+
         .num {
           position: absolute;
           font-size: 20px;
@@ -683,6 +714,7 @@ export default {
         }
       }
     }
+
     .echarts2 {
       width: 76%;
       height: 280px;
@@ -692,11 +724,13 @@ export default {
       background-color: #fff;
       border-radius: 10px;
       margin-right: 30px;
+
       .lineChart {
         width: 100%;
         height: 100%;
       }
     }
+
     .echarts3 {
       width: 23%;
       height: 200px;
@@ -706,17 +740,21 @@ export default {
       background-color: #fff;
       border-radius: 10px;
       margin-top: 20px;
+
       p {
         margin: 0;
       }
+
       .title {
         font-size: 16px;
         color: "#696969";
       }
+
       .text {
         display: flex;
         flex-direction: row;
         margin-top: 10px;
+
         .peo {
           font-size: 14px;
           color: black;
@@ -724,12 +762,14 @@ export default {
           margin-left: 20px;
           margin-right: 120px;
         }
+
         .add {
           font-size: 14px;
           color: black;
           font-weight: bold;
         }
       }
+
       .swiper-container {
         display: flex;
         flex-direction: row;
@@ -738,18 +778,21 @@ export default {
         height: 80px;
         /* overflow: auto; */
         margin-top: 10px;
+
         .name {
           text-align: center;
           font-size: 16px;
           margin-left: 2px;
           margin-right: 59px;
         }
+
         .ip {
           text-align: center;
           font-size: 16px;
         }
       }
     }
+
     .echarts4 {
       width: 20%;
       height: 200px;
@@ -759,11 +802,13 @@ export default {
       background-color: #fff;
       border-radius: 10px;
       margin-top: 20px;
+
       .gaugeChart {
         width: 100%;
         height: 100%;
       }
     }
+
     .echarts5 {
       width: 53%;
       height: 200px;
@@ -774,11 +819,13 @@ export default {
       border-radius: 10px;
       margin-top: 20px;
       margin-right: 30px;
+
       .barChart {
         width: 100%;
         height: 100%;
       }
     }
+
     /* .header {
       white-space: nowrap;
       margin-bottom: 5px;
@@ -792,17 +839,21 @@ export default {
       font-size: 30px;
       margin-bottom: 5px;
     }
+
     .tenant-name {
       font-size: 20px;
     }
+
     .date {
       margin-bottom: 10px;
     }
+
     .title {
       font-size: 16px;
     }
   }
 }
+
 .home {
   blockquote {
     padding: 10px 20px;

+ 1 - 1
zkqy-ui/src/views/login.vue

@@ -282,7 +282,7 @@ export default {
             Cookies.remove("rememberMe");
           }
           let form = {
-            uri: "?client_id=mestool&scope=basic&response_type=code&state=AB1357&redirect_uri=http://192.168.110.59:8066/oauth/callback",
+            uri: "?client_id=gly&scope=basic&response_type=code&state=AB1357&redirect_uri=http://192.168.110.15:8066/oauth/callback",
             ...this.loginForm,
             tenantID: this.tenantId,
           };

+ 3 - 7
zkqy-ui/src/views/system/processModeling/flow-x6/graph/index.js

@@ -24,7 +24,7 @@ export default class FlowGraph {
    * @param {*} width 容器宽度
    * @param {*} height 容器高度
    * @param {*} flag 默认为true,传入false只实例化画板
-   * @returns 
+   * @returns
    */
   static init(dom, width = 800, height = 800, flag = true) {
     // 初始化 流程图画板
@@ -82,12 +82,8 @@ export default class FlowGraph {
         snap: true, // 是否自动吸附
         allowMulti: true, // 是否允许在相同的起始节点和终止之间创建多条边
         allowNode: false, // 是否允许边链接到节点(非节点上的链接桩)
-        allowBlank: false, // 是否允许连接到空白点
         allowLoop: false, // 是否允许创建循环连线,即边的起始节点和终止节点为同一节点,
         allowEdge: false, // 是否允许边链接到另一个边
-        highlight: true, // 拖动边时,是否高亮显示所有可用的连接桩或节点
-        connectionPoint: "anchor", // 指定连接点
-        anchor: "center", // 指定被连接的节点的锚点
         createEdge() {
           // X6 的 Shape 命名空间中内置 Edge、DoubleEdge、ShadowEdge 三种边
           return new Shape.DoubleEdge({
@@ -115,7 +111,7 @@ export default class FlowGraph {
                 },
                 targetMarker: {
                   "name": "classic",//这个是三角样式
-                  "size": 8,//三角形的大小    
+                  "size": 8,//三角形的大小
                   'stroke': 'rgba(95,149,255)',
                 }, // 去掉箭头
 
@@ -230,7 +226,7 @@ export default class FlowGraph {
             marginX: 8,
           },
         },
-        // {  
+        // {
         //   name: 'custom-image',
         //   title: '系统设计图',
         //   graphHeight: 600

+ 0 - 1
zkqy-ui/src/views/tablelist/commonTable/BtnMenuList.vue

@@ -137,7 +137,6 @@ export default {
       return btnObj.children;
     },
     topBtnList() {
-      console.log(this.topBtnArr);
       let res = JSON.parse(JSON.stringify(this.topBtnArr[0]?.children || []));
       res.forEach((item) => {
         let iconAndStyle = item.btnIcon;

+ 1 - 1
zkqy-ui/src/views/tablelist/commonTable/embeddedIndex.vue

@@ -14,7 +14,7 @@ export default {
       url: "",
       // 参数实例
       data: {
-        "uri": "http://192.168.110.59:8066/oauth2/authorize",
+        "uri": "http://192.168.110.114:8066/oauth2/authorize",
         "client_id": "htmes",
         "redirect_uri": "http://192.168.110.76:8087/oauth/callback",
         "key": "asd",

+ 125 - 243
zkqy-ui/src/views/tablelist/commonTable/listInfo.vue

@@ -42,7 +42,7 @@
               :underline="false"
               style="font-size: 12px; vertical-align: baseline"
               @click="importTemplate"
-              >下载模板
+            >下载模板
             </el-link>
           </div>
         </el-upload>
@@ -52,7 +52,8 @@
         </div>
       </el-dialog>
       <Queryfrom
-        :form-vals="templateInfo.where"
+        v-if="QueryfromLoading"
+        :formVals="templateInfo.where"
         :statisticList="statisticList"
         :showCount="showCount"
         :showSearch="showSearch"
@@ -171,7 +172,7 @@
                     :style="`color:${
                       scope.row.styleFieldObj[item.key].fontColor
                     }`"
-                    >{{ scope.row[item.key] }}</span
+                  >{{ scope.row[item.key] }}</span
                   >
                 </template>
                 <!-- 标签字体样式 -->
@@ -201,7 +202,7 @@
                     scope.row.styleFieldObj[item.key].listClass == '' ||
                     scope.row.styleFieldObj[item.key].listClass == 'default'
                   "
-                  >{{ scope.row.styleFieldObj[item.key].dictLabel }}</span
+                >{{ scope.row.styleFieldObj[item.key].dictLabel }}</span
                 >
                 <el-tag
                   v-else
@@ -210,7 +211,7 @@
                       ? ''
                       : scope.row.styleFieldObj[item.key].listClass
                   "
-                  >{{ scope.row.styleFieldObj[item.key].dictLabel }}
+                >{{ scope.row.styleFieldObj[item.key].dictLabel }}
                 </el-tag>
               </template>
             </template>
@@ -293,7 +294,8 @@
 
         <div slot="footer" class="dialog-footer">
           <el-button type="primary" @click="editConfirmHandler"
-            >确 定</el-button
+          >确 定
+          </el-button
           >
           <el-button @click="cancel">取 消</el-button>
         </div>
@@ -361,7 +363,7 @@
         <template #footer>
           <span>
             <el-button type="primary" @click="toastShow = false"
-              >确认</el-button
+            >确认</el-button
             >
           </span>
         </template>
@@ -383,17 +385,17 @@ import {
   batchEdit,
   getStatisticList,
 } from "@/api/tablelist/commonTable";
-import { listData } from "@/api/system/tenant/data";
-import { getToken } from "@/utils/auth";
+import {listData} from "@/api/system/tenant/data";
+import {getToken} from "@/utils/auth";
 import Queryfrom from "@/views/tablelist/commonTable/queryfrom.vue";
-import { camelCase, toUnderline } from "@/utils";
-import { inputDisableComplete } from "@/utils/other";
+import {camelCase, toUnderline} from "@/utils";
+import {inputDisableComplete} from "@/utils/other";
 import Menu from "@/views/tablelist/commonTable/BtnMenu.vue";
 import BtnMenuList from "@/views/tablelist/commonTable/BtnMenuList.vue";
-import { checkRole } from "@/utils/permission";
+import {checkRole} from "@/utils/permission";
 import DialogTemplate from "@/views/dialogTemplate/components/index.vue";
 import FormList from "@/components/FormGroup/formList.vue";
-import { v4 as uuidv4 } from "uuid";
+import {v4 as uuidv4} from "uuid";
 import printHtml from "./print";
 import LayoutIndex from "@/views/tablelist/components/FormGroupLayout/LayoutIndex.vue";
 // let times = 2; //请求次数
@@ -409,6 +411,7 @@ export default {
   },
   data() {
     return {
+      QueryfromLoading: false,
       layoutData: "", //表单组布局数据
       times: 2, //请求次数
       // 提示信息 start
@@ -480,7 +483,7 @@ export default {
         // 是否更新已经存在的数据
         updateSupport: 0,
         // 设置上传的请求头部
-        headers: { Authorization: "Bearer " + getToken() },
+        headers: {Authorization: "Bearer " + getToken()},
         // 上传的地址
         url: process.env.VUE_APP_BASE_API1 + "common/uploadData",
       },
@@ -494,7 +497,7 @@ export default {
         isAsc: "", // desc(降序)或 asc(升序)
         // 基本查询参数
         basicMap: {
-          tableName: "drag_form",
+          tableName: "",
         },
         // 当前表字段筛选参数
         queryMap: {
@@ -572,27 +575,11 @@ export default {
   created() {
     // 得到当前展示的table的唯一标识
     this.tableKey = this.$route.query.tableKey;
-  },
-  watch: {},
-  computed: {
-    // isShowExcuteCol() {
-    //   let res = false;
-    //   if (!this.excuteBtnArr || !this.excuteBtnArr.length) {
-    //     res = false;
-    //   } else {
-    //     res = !this.excuteBtnArr?.every((arr) => arr.children.length == 0);
-    //   }
-    //   this.$nextTick(() => {
-    //     // console.log(res);
-    //     this.$refs.tableRef.doLayout();
-    //   });
-    //   return res;
-    // },
+    // 优化共通模版查询调用逻辑 (Don't fucking change it)
+    this.getList(this.queryParams);
   },
   methods: {
-    // test
     showValue() {
-      // console.log(this.$refs.formGroupRef);
       this.$refs.formGroupRef.setDefaultValue();
     },
     // 计算操作列的显示与隐藏
@@ -609,87 +596,74 @@ export default {
     getRowKey(row) {
       return row[
         camelCase(this.tableName + "_" + this.templateInfo.template?.primaryKey)
-      ];
+        ];
     },
     /** 查询列表 */
     getList(queryParams) {
       this.loading = true;
+
       // 序列化当前查询参数列表
-      queryParams && (this.queryParams.queryMap = queryParams.queryMap);
-      // 获取当前表单结构信息
-      dragTableInfo({ queryMap: { tableKey: this.tableKey } })
-        .then((res) => {
-          console.log(res);
-          // 得到当前模版信息 --- sql columns queryWhere
-          this.templateInfo = res.data.resultMap;
-          this.styleList = res.data.resultMap.style?.map((item) => {
-            item.styleField = camelCase(
-              item.styleField.replace(".", "_") || ""
-            );
-            return item;
-          });
-          // 获取操作列的按钮数据
-          this.excuteBtnArr = res.data.resultMap.button?.filter(
-            (item) => item.btnGroupType == "right"
-          );
-          this.topBtnArr =
-            res.data.resultMap.button?.filter(
-              (item) => item.btnGroupType == "top"
-            ) || [];
-          this.calcuteExcuteCol();
-          this.$nextTick(() => {
-            this.$refs.tableRef.doLayout();
-          });
-          this.queryParams.orderByColumn =
-            res.data.resultMap.querySql.orderByColumn;
-          this.sortOrder = JSON.parse(res.data.resultMap.querySql.sortOrder);
-          // 根据拖拽时设置当前列表排列顺序
-          this.queryParams.isAsc = this.sortOrder ? "DESC" : "ASC";
-          this.tableName = this.templateInfo.template.dtTableName;
-          // 得到查询条件
-          this.queryFromWhere = res.data.resultMap.where;
-          //  得到当前列表信息
-          this.columns = this.columnsHandler(
-            JSON.parse(this.templateInfo.template.dtColumnName)
-          );
-        })
-        .finally((fes) => {
-          if (this.templateInfo == {}) return;
-          // 调用查询需要携带当前table的唯一标识
-          this.queryParams.queryMap.sqlkey = this.templateInfo.template.sqlKey;
-          this.queryParams.orderByColumn = camelCase(
-            this.queryParams.orderByColumn || ""
-          );
-          // 根据sql语句查询当前表数据
-          unionListTableData(this.queryParams).then(async (res) => {
-            this.tableList = [];
-            res.rows.forEach((item) => {
-              this.tableList.push(item.resultMap);
-            });
-            // 驼峰转换
-            let tempTableList = [];
-            tempTableList = this.tableList.map((item) => {
-              let kv = {};
-              for (let itemKey in item) {
-                kv[camelCase(itemKey)] = item[itemKey];
-              }
-              return kv;
-            });
-            this.tableList = await this.setFieldStyleData(tempTableList);
-            this.total = res.total;
-            this.loading = false;
-          });
+      queryParams && (this.queryParams.queryMap = Object.assign({}, queryParams.queryMap));
 
-          // 查询统计信息
-          getStatisticList({
-            queryMap: {
-              tableKey: this.templateInfo.template.tableKey,
-              queryCriteriaValue: this.queryParams.queryMap.queryCriteriaValue,
-            },
-          }).then((res) => {
-            this.statisticList = res.data;
+      if (typeof (queryParams.queryMap.timehorizon) != "undefined") {
+        // timehorizon 时间范围转换字符串回传后台
+        this.queryParams.queryMap.timehorizon = JSON.stringify(Object.assign({}, queryParams.queryMap.timehorizon));
+      }
+      // 获取当前表单结构信息
+      dragTableInfo({queryMap: {tableKey: this.tableKey}}).then((res) => {
+        // 得到当前模版信息 --- sql columns queryWhere
+        this.templateInfo = res.data.resultMap;
+        this.QueryfromLoading = true; // 加载查询组件
+        this.styleList = res.data.resultMap.style?.map((item) => {
+          item.styleField = camelCase(item.styleField.replace(".", "_") || "");
+          return item;
+        });
+        // 获取操作列的按钮数据
+        this.excuteBtnArr = res.data.resultMap.button?.filter((item) => item.btnGroupType == "right");
+        this.topBtnArr = res.data.resultMap.button?.filter((item) => item.btnGroupType == "top") || [];
+        this.calcuteExcuteCol();
+        this.$nextTick(() => this.$refs.tableRef.doLayout());
+        this.queryParams.orderByColumn = res.data.resultMap.querySql.orderByColumn;
+        this.sortOrder = JSON.parse(res.data.resultMap.querySql.sortOrder);
+        // 根据拖拽时设置当前列表排列顺序
+        this.queryParams.isAsc = this.sortOrder ? "DESC" : "ASC";
+        this.tableName = this.templateInfo.template.dtTableName;
+        // 得到查询条件
+        this.queryFromWhere = res.data.resultMap.where;
+        //  得到当前列表信息
+        this.columns = this.columnsHandler(JSON.parse(this.templateInfo.template.dtColumnName));
+      }).finally((fes) => {
+        // 调用子组件中查询条件顺序处理事件
+        this.$refs.mychild.handlerFormVals();
+        if (this.templateInfo == {}) return;
+        // 调用查询需要携带当前table的唯一标识
+        this.queryParams.queryMap.sqlkey = this.templateInfo.template.sqlKey;
+        this.queryParams.orderByColumn = camelCase(this.queryParams.orderByColumn || "");
+        // 根据sql语句查询当前表数据 ->得到列表数据
+        unionListTableData(this.queryParams).then(async (res) => {
+          this.tableList = [];
+          res.rows.forEach((item) => this.tableList.push(item.resultMap));
+          // 驼峰转换
+          let tempTableList = [];
+          tempTableList = this.tableList.map((item) => {
+            let kv = {};
+            for (let itemKey in item) kv[camelCase(itemKey)] = item[itemKey];
+            return kv;
           });
+          this.tableList = await this.setFieldStyleData(tempTableList);
+          this.total = res.total;
+          this.loading = false;
+        });
+        // 查询统计信息
+        getStatisticList({
+          queryMap: {
+            tableKey: this.templateInfo.template.tableKey,
+            queryCriteriaValue: this.queryParams.queryMap.queryCriteriaValue,
+          }
+        }).then((res) => {
+          this.statisticList = res.data;
         });
+      });
     },
     isUpperCase(char) {
       return char === char.toUpperCase();
@@ -758,9 +732,9 @@ export default {
       this.$refs.mychild.pageList(
         row == undefined
           ? {
-              limit: this.queryParams.pageSize,
-              page: this.queryParams.pageNum,
-            }
+            limit: this.queryParams.pageSize,
+            page: this.queryParams.pageNum,
+          }
           : row
       );
     },
@@ -772,7 +746,7 @@ export default {
             camelCase(
               this.tableName + "_" + this.templateInfo.template?.primaryKey
             )
-          ]
+            ]
       );
       this.selection = selection;
       this.single = selection.length != 1;
@@ -807,7 +781,7 @@ export default {
         },
       };
       // getInfoBySqlKey(this.templateInfo.template.sqlKey)
-      btnCommonApi(payLoad).then(({ data }) => {
+      btnCommonApi(payLoad).then(({data}) => {
         if (!data || !data.dfVueTemplate) {
           this.jsonData = false;
           this.$message.error("当前表格未绑定表单!");
@@ -859,12 +833,12 @@ export default {
     // 延迟
     sleep(ms) {
       var unixtime_ms = new Date().getTime();
-      while (new Date().getTime() < unixtime_ms + ms) {}
+      while (new Date().getTime() < unixtime_ms + ms) {
+      }
       return "";
     },
     /** 修改按钮操作 */
     async handleUpdate(row, btnData) {
-      console.log("handleUpdate");
       let nameTable = this.templateInfo.template.dtTableName;
       this.rowobj = {};
       let obj = {};
@@ -887,8 +861,7 @@ export default {
 
       // 新的修改请求
       try {
-        // console.log("btnData", btnData);
-        let { btnFormType, btnGroupType } = btnData;
+        let {btnFormType, btnGroupType} = btnData;
         this.formType = btnFormType;
         let payLoad = {};
         let primary = camelCase(
@@ -919,7 +892,6 @@ export default {
           },
           conditionMap: {},
         };
-        console.log("primary111", primary);
         payLoad.conditionMap[this.templateInfo.template?.primaryKey] =
           row[primary];
         // }
@@ -945,13 +917,11 @@ export default {
             this.$message.error("当前按钮未绑定表单!");
             return;
           }
-          console.log(res);
           if (btnFormType == "dragFormGroup") {
             //表单组
             if (res.code == 200) {
               if (res.data.mainForm) {
                 //表单组
-                // console.log(res.data);
                 // 判断是否有布局数据
                 this.isLayout =
                   res.data.layoutJson &&
@@ -959,18 +929,12 @@ export default {
                 this.transformDataFormat(res.data);
                 if (this.isLayout) {
                   //自定义布局
-                  console.log(JSON.parse(JSON.stringify(res.data)));
                   this.layoutData = JSON.parse(JSON.stringify(res.data));
                 }
-
-                // this.tableName = res.data.mainForm.showTemplate.dfTableName;
               } else {
                 this.formList = res.data;
-                // this.tableName = res.data.dfTableName;
               }
-              // console.log(this.formList);
               this.open = true;
-
               if (btnData.btnFormType == "dragFormGroup") {
                 this.times--;
                 if (this.times) {
@@ -985,7 +949,6 @@ export default {
               }
               this.$nextTick(() => {
                 // 手动触发布局组件的数据处理函数
-                console.log(111, JSON.parse(JSON.stringify(res.data)));
                 this.$refs.formGroupLayoutRef?.initLayoutData(
                   JSON.parse(JSON.stringify(res.data))
                 );
@@ -1003,7 +966,6 @@ export default {
               //   }
               // });
             } else {
-              console.error(res);
               this.$message.error("网络异常,请稍后再试");
             }
           } else {
@@ -1084,59 +1046,15 @@ export default {
             this.tableCount = res.data;
           });
         }
-
-        // let fieldList = Object.keys(resultMap);
-        // let tableName = this.longestCommonSubstring(fieldList);
-        // fieldList.forEach((field) => {
-        //   let realField = field.replace(tableName, "");
-        //   realField = realField[0].toLocaleLowerCase() + realField.substring(1);
-        //   resultMap[realField] = resultMap[field];
-        // });
       } catch (error) {
         this.$message.error("网络异常,请稍后再试");
-        console.error(error);
       }
       return;
-      // getInfoBySqlKey(this.templateInfo.template.sqlKey).then(({ data }) => {
-      //   if (!data || !data.dfVueTemplate) {
-      //     this.$message.error("当前表格未绑定表单!");
-      //     return;
-      //   }
-      //   // let fieldList = Object.keys(row);
-      //   // let tableName = this.longestCommonSubstring(fieldList);
-      //   // fieldList.forEach((field) => {
-      //   //   let realField = field.replace(tableName, "");
-      //   //   realField = realField[0].toLocaleLowerCase() + realField.substring(1);
-      //   //   row[realField] = row[field];
-      //   // });
-      //   this.addRealFieldName(row);
-      //   Object.assign(this.defaultValue, row);
-      //   this.jsonData = JSON.parse(data.dfVueTemplate);
-      //   this.open = true;
-      //   this.title = "修改信息";
-      //   this.form.password = this.initPassword;
-      //   this.$nextTick(() => {
-      //     this.$refs.addFromRef.setData(row);
-      //   });
-      // });
-      // return;
-      this.reset();
-      const userId = row.userId || this.ids;
-      getUser(userId).then((response) => {
-        this.form = response.data;
-        this.postOptions = response.posts;
-        this.roleOptions = response.roles;
-        this.$set(this.form, "postIds", response.postIds);
-        this.$set(this.form, "roleIds", response.roleIds);
-        this.open = true;
-        this.title = "修改当前信息";
-        this.form.password = "";
-      });
     },
     // 将表单组数据转换成符合单个表单的数据格式
     transformDataFormat(data) {
       this.FormNameList = [];
-      let { mainForm, subFormList } = data;
+      let {mainForm, subFormList} = data;
       this.formList = [];
       let showValue = null;
       if (mainForm.showValue) {
@@ -1182,7 +1100,6 @@ export default {
                 tableName = item.formItem?.split(".")?.[0];
               batch[tableName] = item.showValue.map((item) => item.resultMap);
               defaultValue = JSON.parse(JSON.stringify(batch));
-              console.log(JSON.parse(JSON.stringify(batch)));
               // 所有字段驼峰转下划线
               batch[tableName].forEach((i) => {
                 for (const key of Object.keys(i)) {
@@ -1227,7 +1144,7 @@ export default {
     },
     // 格式化表单组布局数据
     formateLayout(data) {
-      let { layoutJson, mainForm, subFormList } = data;
+      let {layoutJson, mainForm, subFormList} = data;
     },
     // 添加真正的字段名
     addRealFieldName(row) {
@@ -1313,7 +1230,8 @@ export default {
           this.$refs.mychild.pageList();
           this.$modal.msgSuccess("删除成功");
         })
-        .catch(() => {});
+        .catch(() => {
+        });
     },
     // 批量删除接口
     handleBatchDelete() {
@@ -1353,7 +1271,8 @@ export default {
           this.$refs.mychild.pageList();
           this.$modal.msgSuccess("删除成功");
         })
-        .catch(() => {});
+        .catch(() => {
+        });
     },
     /** 导出按钮操作 */
     handleExport() {
@@ -1391,7 +1310,7 @@ export default {
     importTemplate() {
       this.download(
         process.env.VUE_APP_BASE_API1 +
-          `common/exportTemplate?tableName=${this.tableName}&sqlkey=${this.templateInfo.template.sqlKey}`,
+        `common/exportTemplate?tableName=${this.tableName}&sqlkey=${this.templateInfo.template.sqlKey}`,
         {},
         `下载模版名称${new Date().getTime()}.xlsx`
       );
@@ -1407,10 +1326,10 @@ export default {
       this.$refs.upload.clearFiles();
       this.$alert(
         "<div style='overflow: auto;overflow-x: hidden;max-height: 70vh;padding: 10px 20px 0;'>" +
-          response.msg +
-          "</div>",
+        response.msg +
+        "</div>",
         "导入结果",
-        { dangerouslyUseHTMLString: true }
+        {dangerouslyUseHTMLString: true}
       );
       this.$refs.mychild.pageList({
         limit: this.queryParams.pageSize,
@@ -1450,7 +1369,6 @@ export default {
       // }
       // // data.addListMap =
       // btnCommonApi(data).then(res => {
-      //   // console.log('弹窗确定', res);
       // })
     },
     // 去掉表名 开头字母小写
@@ -1471,7 +1389,6 @@ export default {
     },
     // 添加插入的数据
     addInsertData(insertMap, result, res) {
-      console.log(insertMap, result, res);
       result.addListMap.forEach((i) => {
         insertMap.forEach((j) => {
           i[j.fieldName?.split(".")[1]] = res.find(
@@ -1481,10 +1398,10 @@ export default {
       });
     },
     // 处理 动态表单 动态表格 修改数据
-    getEditBatchData(values, data) {},
+    getEditBatchData(values, data) {
+    },
     // 处理 表单组  含有动态表格  新增数据
     getFormGroupBatchData(values, index, result) {
-      console.log(values, index, result);
       let tableName = Object.keys(values.data.batch)[0];
       let res = {
         basicMap: {
@@ -1492,7 +1409,7 @@ export default {
         },
         addListMap: [],
       };
-      let { formItem, relateFormItem } = values;
+      let {formItem, relateFormItem} = values;
       res.addListMap = values.data.batch[tableName].map((item) => {
         delete item.key;
         item[formItem.split(".")[1]] =
@@ -1507,7 +1424,6 @@ export default {
         this.$refs.addFromRef
           .getData()
           .then(async (values) => {
-            console.log(values);
             for (const key of Object.keys(values)) {
               values[key] =
                 typeof values[key] == "undefined" ? "" : values[key];
@@ -1536,7 +1452,7 @@ export default {
                   item.fieldValue
                     ? item.fieldValue
                     : this.currentRow[
-                        camelCase(item.fieldName.replace(".", "_"))
+                      camelCase(item.fieldName.replace(".", "_"))
                       ];
               });
               conditionData.forEach((item) => {
@@ -1544,7 +1460,7 @@ export default {
                   item.fieldValue
                     ? item.fieldValue
                     : this.currentRow[
-                        camelCase(item.fieldName.replace(".", "_"))
+                      camelCase(item.fieldName.replace(".", "_"))
                       ];
               });
             }
@@ -1581,7 +1497,6 @@ export default {
                 this.$message.error("网络异常,请稍后再试");
               }
             } catch (error) {
-              // console.log(error);
               this.$message.error("网络异常,请稍后再试");
             }
             this.getList();
@@ -1589,29 +1504,13 @@ export default {
             this.open = false;
           })
           .catch((res) => {
-            console.log(res);
             this.$modal.msgError("表单校验失败,请规范填写数据");
           });
       } else if (this.formType == "dragFormGroup") {
-        //表单组
-        // // console.log(this.$refs.formGroupRef);
-        //有布局的表单组
-        // let res = await this.$refs.formGroupLayoutRef.getFormData();
-        // console.log(res);
-        // let valuesArr = [];
-        // res.forEach((item) => {
-        //   valuesArr.push(...item);
-        // });
-        // console.log(valuesArr);
-        // Promise.all(valuesArr).then((values) => {
-        //   console.log("布局表单数据", values);
-        // });
         //无布局
         let promiseArray = [];
         if (this.isLayout) {
           let res = await this.$refs.formGroupLayoutRef.getFormData();
-          // let values = await Promise.all(res);
-          console.log(res);
           res.forEach((item) => {
             promiseArray.push(...item);
           });
@@ -1623,7 +1522,6 @@ export default {
         Promise.all(promiseArray).then(
           async (res) => {
             // 获取到所有表单数据
-            console.log("res", res);
             let mainForm = res.find((item) => item.isMainForm);
             let mainFormData = mainForm.data;
             let data = {
@@ -1650,7 +1548,7 @@ export default {
                 item.fieldValue
                   ? item.fieldValue
                   : this.currentRow[
-                      camelCase(item.fieldName.replace(".", "_"))
+                    camelCase(item.fieldName.replace(".", "_"))
                     ];
             });
             conditionData.forEach((item) => {
@@ -1689,7 +1587,7 @@ export default {
                       item.fieldValue
                         ? item.fieldValue
                         : this.currentRow[
-                            camelCase(item.fieldName.replace(".", "_"))
+                          camelCase(item.fieldName.replace(".", "_"))
                           ];
                   });
                   payLoad.updateCommonEntityList.push(result);
@@ -1741,7 +1639,7 @@ export default {
                     let value =
                       this.currentRow[
                         camelCase(relateFormItem.replace(".", "_"))
-                      ];
+                        ];
                     result.conditionMap[fieldName] = value;
                     payLoad.updateCommonEntityList.push(result);
                   }
@@ -1752,8 +1650,6 @@ export default {
               let uuid = uuidv4().replace("-", "");
               payLoad.insertCommonEntityList = res.map((item, index) => {
                 let result = {};
-                console.log(item);
-                // return;
                 if (item.data.batch) {
                   //动态表格
                   result = this.getFormGroupBatchData(item, index, res);
@@ -1768,14 +1664,11 @@ export default {
                       },
                     ],
                   };
-                  let { formItem, relateFormItem } = item;
+                  let {formItem, relateFormItem} = item;
                   if (index == 0) {
                     //主表单
                     // 添加新增数据的关联条件
-                    // console.log(formItem);
-
                     let mainFormKey = mainForm.data[formItem.split(".")[1]];
-                    console.log("formItem", formItem);
                     if (mainFormKey) {
                       result.addListMap[0][formItem.split(".")[1]] =
                         mainFormKey;
@@ -1865,17 +1758,17 @@ export default {
                       item.fieldValue
                         ? item.fieldValue
                         : this.currentRow[
-                            camelCase(item.fieldName.replace(".", "_"))
+                          camelCase(item.fieldName.replace(".", "_"))
                           ];
                   });
                 } else {
                   // 从表条件
-                  let { formItem, relateFormItem } = item;
+                  let {formItem, relateFormItem} = item;
                   let fieldName = formItem.split(".")[1];
                   let value =
                     this.currentRow[
                       camelCase(relateFormItem.replace(".", "_"))
-                    ];
+                      ];
                   result.conditionMap[fieldName] = value;
                 }
                 return result;
@@ -1892,17 +1785,12 @@ export default {
                 this.defaultValue = {};
                 this.open = false;
               } else {
-                console.log(res);
                 this.$message.error("网络异常,请稍后再试");
               }
             } catch (error) {
-              console.log(error);
               this.$message.error("网络异常,请稍后再试");
             }
           },
-          (err) => {
-            // console.log(err);
-          }
         );
       } else {
         // 没有绑定表单
@@ -1943,11 +1831,9 @@ export default {
           if (res.code == 200) {
             this.$message.success("操作成功");
           } else {
-            console.log(res);
             this.$message.error("网络异常,请稍后再试");
           }
         } catch (error) {
-          console.log(error);
           this.$message.error("网络异常,请稍后再试");
         }
         this.getList();
@@ -1968,14 +1854,14 @@ export default {
     tempSubBtn(getData) {
       getData()
         .then((values) => {
-          // console.log("验证通过", values);
+
         })
         .catch(() => {
-          // console.log("验证未通过,获取失败");
+
         });
     },
     // 判断是否生效行样式
-    cellStyle({ row, column, rowIndex, columnIndex }) {
+    cellStyle({row, column, rowIndex, columnIndex}) {
       let rowStyleList = this.styleList.filter((item) => item.styleType == 0);
       if (!rowStyleList.length) return "";
       let mainTableName = this.templateInfo.querySql.tableAlias; //主表名
@@ -2017,7 +1903,6 @@ export default {
 
     // 设置表格字段样式
     async setFieldStyleData(tableList) {
-      // console.log(JSON.parse(JSON.stringify(tableList)));
       let fieldConditionList = this.styleList.filter(
         (item) => item.styleType == 1 || item.styleType == 2
       );
@@ -2030,7 +1915,6 @@ export default {
           ...item,
         };
       }, {});
-      // // console.log("this.dictStyleObj", this.dictStyleObj);
       tableList.forEach((row) => {
         // if (!row.styleFieldObj) row.styleFieldObj = {};
         for (let i = 0; i < fieldConditionList.length; i++) {
@@ -2098,7 +1982,7 @@ export default {
 
     // 页面跳转
     routerHandler(btnData, type) {
-      let { url, commonFieldData } = JSON.parse(btnData.btnParams);
+      let {url, commonFieldData} = JSON.parse(btnData.btnParams);
       let tempArr = [];
       if (commonFieldData) {
         let queryArr = JSON.parse(commonFieldData);
@@ -2114,8 +1998,6 @@ export default {
       if (tempArr.length) {
         url += "?" + tempArr.join("&");
       }
-      // let link = btnData.btnParams;
-      console.log(url);
       if (type == "INNERLINK") {
         this.$router.push(url);
       } else {
@@ -2125,9 +2007,7 @@ export default {
 
     // 操作列回调
     excuteHandler(btnData, row) {
-      console.log("btnData", btnData);
-      console.log("row", row);
-      let { btnType, btnParams, btnFormType } = btnData;
+      let {btnType, btnParams, btnFormType} = btnData;
       this.currentBtnData = btnData;
       this.currentRow = JSON.parse(JSON.stringify(row));
       // 无表单
@@ -2177,16 +2057,14 @@ export default {
     },
     // 消息提示回调
     showToast(btnData, row) {
-      console.log(btnData, row);
-      let { btnFormKey, btnFormType } = btnData;
+      let {btnFormKey, btnFormType} = btnData;
       this.toastMsg = btnFormKey;
       this.toastType = btnFormType;
       this.toastShow = true;
     },
     // 顶部按钮回调
     topBtnHandler(btnData) {
-      console.log(btnData);
-      let { btnType, btnParams, btnFormType } = btnData;
+      let {btnType, btnParams, btnFormType} = btnData;
       let row = this.selection[0] || [];
       this.currentBtnData = btnData;
       this.currentRow = JSON.parse(JSON.stringify(row));
@@ -2275,7 +2153,6 @@ export default {
             commMap: {},
             btnParametersMap: {},
           };
-          // console.log(this.currentBtnData, this.currentRow);
           if (this.currentBtnData.btnParams) {
             let conditionData =
               JSON.parse(this.currentBtnData.btnParams).conditionData || [];
@@ -2293,7 +2170,7 @@ export default {
                 item.fieldValue
                   ? item.fieldValue
                   : this.currentRow[
-                      camelCase(item.fieldName.replace(".", "_"))
+                    camelCase(item.fieldName.replace(".", "_"))
                     ];
             });
           }
@@ -2317,12 +2194,12 @@ export default {
           this.$refs.mychild.pageList();
           // this.$modal.msgSuccess("操作成功");
         })
-        .catch(() => {});
+        .catch(() => {
+        });
     },
 
     // k-form-build表单变化回调
     formChangeHandler(value, label) {
-      // // console.log(value, label);
     },
   },
 };
@@ -2335,18 +2212,23 @@ export default {
   width: 100%;
   font-size: 30px;
 }
+
 ::v-deep .el-dialog:not(.is-fullscreen) {
   min-width: 610px !important;
 }
+
 .success {
   color: #67c23a;
 }
+
 .error {
   color: #f56c6c;
 }
+
 .warning {
   color: #e6a23c;
 }
+
 .info {
   color: #909399;
 }

+ 143 - 140
zkqy-ui/src/views/tablelist/commonTable/queryfrom.vue

@@ -16,132 +16,65 @@
       <!--   不加载初始数据   -->
       <div v-show="showSearch" class="btn-wrap">
         <!--      条件循环-->
-        <span v-for="(item, index) in formVals" :key="index">
+        <span v-if="!(formVals.length&&queryParams.queryMap)"/>
+        <span v-else v-for="(item, index) in formVals" :key="index">
           <!--      input框循环-->
-          <span
-            v-if="item.conditionType == 'input'"
-            style="width: 500px; height: 500px">
-            <el-form-item
-              :label="item.conditionName"
-            >
+          <span v-if="item.conditionType == 'input'">
+            <el-form-item :label="item.conditionName">
               <!-- :label-width="calculateLabelWidth(item.conditionName)"-->
-              <el-input
-                v-model="queryParams.queryMap[item.conditionField]"
-                :placeholder="
-                  item.conditionNotes == null ? '请输入' : item.conditionNotes
-                "
-                @keyup.enter.native="handleQuery"
-                clearable
-              />
+              <el-input v-model="queryParams.queryMap[item.conditionField]" @keyup.enter.native="handleQuery" clearable
+                        :placeholder=" item.conditionNotes == null ? '请输入' : item.conditionNotes"/>
             </el-form-item>
           </span>
           <!--      button按钮循环-->
           <span v-if="item.conditionType == 'button'">
-            <el-form-item :label="item.conditionName">
-              <!--              {{-->
-              <!--                (queryParams.queryMap[item.conditionField] =-->
-              <!--                  item.conditionDefaultValue)-->
-              <!--              }}-->
-              <el-button
-                :size="item.componentSize"
-                :type="item.componentType"
-                @keyup.enter.native="btnClick"
-                @click="
-                  btnClick(item.conditionField, item.conditionDefaultValue)
-                ">
+            <el-form-item>
+              <el-button :size="item.componentSize" :type="item.componentType" @keyup.enter.native="btnClick"
+                         @click=" btnClick(item.conditionField, item.conditionDefaultValue)">
                 <span>
-                  <svg-icon
-                    v-if="item.componentIcon"
-                    class="pre-icon"
-                    slot="prefix"
-                    :icon-class="item.componentIcon"
-                  />{{
+                  <svg-icon v-if="item.componentIcon" class="pre-icon" slot="prefix" :icon-class="item.componentIcon"/>
+                  {{
                     item.conditionName == null ? "按钮" : item.conditionName
                   }}
                 </span>
               </el-button>
             </el-form-item>
-            <div style="clear: both"/>
           </span>
-          <div style="clear: both"/>
           <!--      select下拉框循环-->
-          <span
-            v-if="item.conditionType == 'select'"
-            style="width: 500px; height: 500px">
-            <el-form-item
-              :label="item.conditionName">
-              <el-select
-                v-model="queryParams.queryMap[item.conditionField]"
-                :placeholder="
-                  item.conditionNotes == null ? '请选择' : item.conditionNotes
-                " clearable filterable>
-                <el-option
-                  v-for="(i, index) in item.dropDownList"
-                  :key="index"
-                  :label="i.label"
-                  :value="i.value"
-                ></el-option>
+          <span v-if="item.conditionType == 'select'">
+            <el-form-item :label="item.conditionName">
+              <el-select v-model="queryParams.queryMap[item.conditionField]"
+                         :placeholder=" item.conditionNotes == null ? '请选择' : item.conditionNotes" clearable
+                         filterable>
+                <el-option v-for="(i, index) in item.dropDownList" :key="index" :label="i.label"
+                           :value="i.value"></el-option>
               </el-select>
-
-              <!-- <el-option
-            v-for="item in options"
-            :key="item.value"
-            :label="item.label"
-            :value="item.value">
-          </el-option> -->
             </el-form-item>
           </span>
           <!--      radio单选框循环-->
-          <span
-            v-if="item.conditionType == 'radio'"
-            style="width: 500px; height: 500px"
-          >
+          <span v-if="item.conditionType == 'radio'">
             <el-form-item>
-              <el-button
-                :type="item.componentType"
-                :icon="item.componentIcon"
-                :size="item.componentSize"
-                @click="buttonClick(item)"
-              >
-                {{ item.conditionName }}</el-button
-              >
+              <el-button :type="item.componentType" :icon="item.componentIcon" :size="item.componentSize"
+                         @click="buttonClick(item)">{{ item.conditionName }}</el-button>
             </el-form-item>
           </span>
           <!--      time时间范围  -->
           <span
-            v-if="item.conditionType == 'datetimerange'"
-            style="width: 500px; height: 500px"
-          >
-            <el-form-item
-              :label="item.conditionName"
-            >
+            v-if="item.conditionType == 'datetimerange'">
+            <el-form-item :label="item.conditionName">
               <!--  item.componentType 使用某种组件
         year/month/date/dates/months/years week/datetime/datetimerange/ daterange/monthrange-->
-
-                                <el-date-picker
-                                  v-model="queryParams.queryMap[item.conditionField]"
-                                  :type="item.conditionType"
-                                  :picker-options="pickerOptions"
-                                  range-separator="至"
-                                  start-placeholder="开始日期"
-                                  end-placeholder="结束日期"
-                                  value-format="yyyy-MM-DD HH:mm:ss"
-                                  align="right">
-                              </el-date-picker>
-
-              <!--              <el-date-picker-->
-              <!--                v-model="queryParams.queryMap[item.conditionField]"-->
-              <!--                :type="item.componentType"-->
-              <!--                :picker-options="pickerOptions"-->
-              <!--                range-separator="至"-->
-              <!--                start-placeholder="开始日期"-->
-              <!--                end-placeholder="结束日期"-->
-              <!--                value-format="yyyy-MM-DD HH:mm:ss"-->
-              <!--                :default-time="['12:00:00']"-->
-              <!--              >-->
-              <!--              </el-date-picker>-->
+          <el-date-picker v-model="queryParams.queryMap.timehorizon[item.conditionField]"
+                          :type="item.conditionType" :picker-options="pickerOptions"
+                          range-separator="至" start-placeholder="开始日期"
+                          end-placeholder="结束日期" value-format="yyyy-MM-dd HH:mm:ss"
+                          align="right"/>
             </el-form-item>
           </span>
+          <!--            <span v-if="index==3">-->
+          <!--            <div>换行</div>-->
+          <!--          </span>-->
+          <!-- <span>当前循环下标:{{ index }}</span> -->
         </span>
       </div>
     </el-form>
@@ -171,8 +104,6 @@ export default {
   components: {cardcountpanel},
   data() {
     return {
-      // 时间范围临时存储
-      dateRange: [],
       // 共通查询参数
       queryParams: {
         // pageNum: 1,                  // 第几页
@@ -185,6 +116,8 @@ export default {
         },
         // 当前表字段筛选参数
         queryMap: {
+          // 时间范围查询条件对象
+          timehorizon: {},
           // 当前查询基本参数
           // ... key : value         当前页面的筛选条件
           // 超级查询的唯一值
@@ -227,44 +160,33 @@ export default {
           }
         }]
       },
-      // card
     };
   },
-  watch: {
-    formVals: {
-      handler: function (val) {
-        console.log("formVals", val);
-        return;
-        // console.log(this.formVals);
-        this.formVals.forEach((item) => {
-          // console.log(item.conditionType);
-          if (item.conditionType == "input") {
-            this.inputs.push(item);
-          } else if (item.conditionType == "between") {
-            // 判断使用某种时间范围组件  YYYY 表示年范围之间的组件 MM 表示月等。。。
-            // // console.log(item.componentType);
-            this.betweens.push(item);
-          } else if (item.conditionType == "select") {
-            this.selects.push(item);
-          } else if (item.conditionType == "radio") {
-            this.radios.push(item);
-          }
-        });
-      },
-    },
-  },
   created() {
-    console.log("formVals", this.queryParams);
-    this.$emit("getList", this.queryParams);
-    // console.log("showCount", this.showCount)
-    // console.log("showSearch", this.showSearch)
-    // console.log("statisticList", this.statisticList)
+    // 优化渲染调用逻辑(Don't fucking change it)
+    // this.handlerFormVals();
+    // this.$emit("getList", this.queryParams);
   },
   methods: {
+    handlerFormVals() {
+      console.log("监听调用")
+      // 处理当前需要渲染的查询条件 // 删除超级查询、默认查询得到实际需要渲染查询条件数组
+      this.formVals.forEach((item, index) => {
+        if (item.conditionType == "DefaultQuery" || item.conditionType == "SuperQuery") {
+          this.formVals.splice(index, 1)
+        }
+      });
+      // 排序
+      this.formVals.sort((a, b) => {
+        if (a.sort < b.sort) return -1;
+        if (a.sort > b.sort) return 1;
+        return 0;// 如果sort相等,保持原相对顺序(稳定排序)
+      });
+    },
     // 计算form宽度-label
     calculateLabelWidth(font) {
       // 一个汉字为20px宽度
-      console.log("当前form中label宽度:", 20 * font.length, font);
+      // console.log("当前form中label宽度:", 20 * font.length, font);
       return 20 * font.length;
     },
     // radio 点击事件调用getList
@@ -272,19 +194,85 @@ export default {
       // 调用父组件中的getlist    待处理
       // 当前按钮绑定的默认值以及列
       this.queryParams.queryMap[tem.conditionField] = tem.conditionDefaultValue;
-      // console.log(this.queryParams);
       // 处理完成后调用getlist
       this.handleQuery();
     },
     /** 搜索按钮操作 */
     handleQuery() {
+      // 拷贝查询参数对象
+      let tempQueryParams = Object.assign({}, JSON.parse(JSON.stringify(this.queryParams)));
       // 调用组件中的getList
       this.queryParams.pageNum = 1;
-      console.log(this.queryParams);
+      if (tempQueryParams.queryMap.timehorizon && typeof (tempQueryParams.queryMap.timehorizon) != "undefined") {
+        // 处理时间查询参数 this.queryParams.queryMap.timehorizon
+        // 得到当前查询所需时间范围
+        let timehorizon = Object.assign({}, JSON.parse(JSON.stringify(tempQueryParams.queryMap.timehorizon)));
+        tempQueryParams.queryMap.timehorizon = {};
+        // 得到所有时间范围查询条件参数
+        let keys = Object.keys(timehorizon);
+        if (keys.length != 0) {
+          // 循环处理时间范围
+          keys.forEach(item => {
+            let times = timehorizon[item];
+            times = Array.isArray(times) ? times : [];
+            if (times.length >= 2) { // 确保times数组至少有两个元素
+              let parms = {
+                'beginTime': times[0],
+                'endTime': times[1]
+              };
+              tempQueryParams.queryMap.timehorizon[item] = parms
+            }
+          });
+        }
+      }
+      this.$emit("getList", tempQueryParams)
+
+      // 以下注释勿动!!!⚠️⚠️⚠️
+      // // 处理时间查询参数 this.queryParams.queryMap.timehorizon
+      // if (keys.length != 0) {
+      //   // 得到当前查询所需时间范围
+      //   let timehorizon = Object.assign({}, JSON.parse(JSON.stringify(tempQueryParams.queryMap.timehorizon)));
+      //
+      //   tempQueryParams.queryMap.timehorizon = {};
+      //
+      //   // 得到所有时间范围查询条件参数
+      //   let keys = Object.keys(timehorizon);
+      //
+      //
+      //
+      //   // 循环处理时间范围
+      //   keys.forEach(item => {
+      //     let times = timehorizon[item];
+      //     times = Array.isArray(times) ? times : [];
+      //
+      //     if (times.length >= 2) { // 确保times数组至少有两个元素
+      //
+      //       let parms = {
+      //         'beginTime': times[0],
+      //         'endTime': times[1]
+      //       };
+      //       // 序列化处理完成后的时间条件
+      //       // tempQueryParams.queryMap.timehorizon = {
+      //       //   ...tempQueryParams.queryMap.timehorizon,
+      //       //   parms
+      //       // }
+      //       tempQueryParams.queryMap.timehorizon[item] = parms
+      //       // 在将parms赋值回原对象之前,先删除原来的值
+      //       // delete this.queryParams.queryMap.timehorizon[item];
+      //
+      //       // 将parms对象赋值回原对象
+      //       // this.queryParams.queryMap.timehorizon[item] = parms;
+      //
+      //       // 时间范围转换字符串
+      //       // tempQueryParams.queryMap.timehorizon = JSON.stringify(tempQueryParams.queryMap.timehorizon);
+      //
+      //     }
+      //   });
+      //
+      //   // // 重新为时间范围组件赋值
+      //   // this.queryParams.queryMap.timehorizon = timehorizon;
+      // }
       // 调用父组件中的查询函数
-      let tempQueryParams = JSON.parse(JSON.stringify(this.queryParams));
-      console.log(tempQueryParams);
-      this.$emit("getList", tempQueryParams);
     },
     btnClick(field, val) {
       this.queryParams.queryMap[field] = val;
@@ -300,12 +288,27 @@ export default {
     },
     /** 重置按钮操作 */
     resetQuery() {
-      // 时间范围滞空
-      this.dateRange = [];
+      debugger;
       // 查询表单清空
       this.resetForm("queryForm");
       // 清空查询条件
-      this.queryParams.queryMap = {};
+      this.queryParams.queryMap = {
+        // 时间范围查询条件对象
+        timehorizon: {},
+        // 超级查询的唯一值
+        queryCriteriaValue: "",
+      }
+      //   {
+      //   isAsc: this.sortState ? "DESC" : "ASC", // desc(降序)或 asc(升序)
+      //   // 基本查询参数
+      //   basicMap: {
+      //     tableName: "drag_form",
+      //   },
+      //   queryMap: {
+      //     timehorizon: {},
+      //     queryCriteriaValue: "",
+      //   },
+      // };
       // 调用查询
       this.handleQuery();
     },
@@ -365,7 +368,7 @@ export default {
 }
 
 .btn-wrap {
-  display: flex;
+  //display: flex;
   //flex-direction: row-reverse;
 }
 </style>

+ 1 - 3
zkqy-ui/vue.config.js

@@ -40,9 +40,7 @@ module.exports = {
       [process.env.VUE_APP_BASE_API]: {
         // target: `http://192.168.110.52:8066`,
         // target: `http://192.168.110.59:8066`,
-        target: `http://192.168.110.76:8066`,
-        // target: `http://62.234.61.92:8066`,
-        // target: `http://127.0.0.1:8066`,
+        target: `http://192.168.110.15:8066/`,
         changeOrigin: true,
         pathRewrite: {
           ['^' + process.env.VUE_APP_BASE_API]: ''