From 5efd01db698683e95a63053da43aaa08fa35a185 Mon Sep 17 00:00:00 2001
From: 叶松 <2217086471@qq.com>
Date: 星期五, 01 十二月 2023 11:20:28 +0800
Subject: [PATCH] Merge branch 'master' of http://111.30.93.211:10101/r/supipe

---
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/controller/MixingPlantNewScheduled.java |   35 +
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/MouldDto.java                  |   15 
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/impl/WeighServiceImpl.java        |   61 ++
 web/src/views/GoodManage/MixingScreen.vue                                                                            |  202 +++++++
 web/src/router/index.js                                                                                              |   16 
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/WeighService.java                 |   12 
 web/src/assets/mixing/container_40.png                                                                               |    0 
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/MaterialStockRecordDto.java    |   14 
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/controller/WeighController.java           |   30 +
 web/src/assets/mixing/container_10.png                                                                               |    0 
 web/src/assets/mixing/list_r_bg.png                                                                                  |    0 
 web/src/assets/mixing/list_bg.png                                                                                    |    0 
 web/src/assets/mixing/container_100.png                                                                              |    0 
 web/src/views/GoodManage/MixRatioScreen.vue                                                                          |   11 
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/SteelDto.java                  |   16 
 web/src/views/MixingInfo/mixRatio.vue                                                                                |  247 +++++++++
 web/src/assets/mixing/header.png                                                                                     |    0 
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/AssistGoodDto.java             |   16 
 web/src/api/modules/mixing.js                                                                                        |    5 
 web/src/assets/mixing/container_90.png                                                                               |    0 
 web/src/assets/mixing/name_bg.png                                                                                    |    0 
 web/src/views/MixingInfo/mixing.vue                                                                                  |  314 ++++++++++++
 web/src/assets/mixing/container_60.png                                                                               |    0 
 hd/pipe/materialsManage/src/main/resources/mapping/WeighMapper.xml                                                   |  312 ++++++++++++
 web/src/assets/mixing/list_l_bg.png                                                                                  |    0 
 web/src/assets/mixing/container_20.png                                                                               |    0 
 web/src/assets/mixing/container_80.png                                                                               |    0 
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/TSuMaterialWarehouseRecord.java    |  103 +++
 hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/mapper/WeighMapper.java                   |   28 +
 web/src/views/MixingInfo/components/List.vue                                                                         |   91 +++
 30 files changed, 1,523 insertions(+), 5 deletions(-)

diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/controller/MixingPlantNewScheduled.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/controller/MixingPlantNewScheduled.java
index c70f37a..e52fa33 100644
--- a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/controller/MixingPlantNewScheduled.java
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/concret/controller/MixingPlantNewScheduled.java
@@ -1,6 +1,7 @@
 package com.thhy.materials.modules.biz.concret.controller;
 
 
+import com.thhy.materials.modules.biz.concret.entity.SysSteel;
 import com.thhy.materials.modules.biz.concret.entity.dto.DicetName;
 import com.thhy.materials.modules.biz.concret.entity.dto.TMinxingPlant;
 import com.thhy.materials.modules.biz.concret.entity.dto.WeighDto;
@@ -238,5 +239,39 @@
 
     }
 
+    //苏州项目------- 地磅入库  记录,及库存修改 钢筋
+    @Scheduled(fixedRate = 2000000) // 每隔3秒执行一次任务
+    public void weighbridgeSteel() {
+        //查询搅拌 所有类型
+        List<SysSteel> steels = weighService.steelType();
+
+        List<TWeighbridge> tWeighbridges = weighMapper.weighbridgeListType();
+        for (SysSteel steel : steels){
+            for (TWeighbridge weighbridge :tWeighbridges){
+                if(steel.getSteelName().equals(weighbridge.getMatname())&&steel.getSteelModel().equals(weighbridge.getMatmodel())){
+                    //净重
+                    String jweight = weighbridge.getJweight();
+                    HashMap<String, Object> hashMap = new HashMap<>();
+                    hashMap.put("id","");
+                    hashMap.put("steelId",steel.getSteelId());
+                    hashMap.put("stockType",1);
+                    hashMap.put("changeStock",jweight);
+                    hashMap.put("companyId","031e3dd577e8ed28e96aa69b");
+                    BigDecimal b1 = new BigDecimal(jweight);
+                    BigDecimal b2 = new BigDecimal(steel.getStock());
+                    RLock lock = redissonclient.getLock("materlock");
+                    if(!lock.isLocked()) {
+                        lock.lock(10, TimeUnit.SECONDS);
+                        //插入记录表//苏州项目(入库计入增加)
+                        weighMapper.steelRecordIn(hashMap);
+                        //更改记录值
+                        weighMapper.steelUp(steel.getSteelId(),b1.add(b2).doubleValue());
+                        lock.unlock();
+                    }
+                    weighMapper.weighbridgeUpdateType(weighbridge.getWeighbridgeId());
+                }
+            }
+        }
+    }
 }
 
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/controller/WeighController.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/controller/WeighController.java
index c782925..2797868 100644
--- a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/controller/WeighController.java
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/controller/WeighController.java
@@ -8,10 +8,7 @@
 import com.thhy.materials.modules.biz.weigh.service.WeighService;
 import org.omg.CORBA.StringHolder;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Map;
 
@@ -40,6 +37,31 @@
 		return weighService.weighbridgeList(values);
 	}
 
+	//原料库存
+	@PostMapping("/headThingJsInventory")
+	public BasicResult headThingJsInventory(){
+		return weighService.headThingJsInventory();
+	}
+	//料仓列表
+	@PostMapping("/materialWarehouseRecordList")
+	public BasicResult materialWarehouseRecordList(@RequestBody Map<String,Object> values){
+		return weighService.materialWarehouseRecordList(values);
+	}
 
+	//料仓添加进仓
+	@PostMapping("/materialWarehouseRecordInsert")
+	public BasicResult materialWarehouseRecordInsert(@RequestBody Map<String,Object> values){
+		return weighService.materialWarehouseRecordInsert(values);
+	}
+	//料仓修改进仓
+	@PostMapping("/materialWarehouseRecordUpdate")
+	public BasicResult materialWarehouseRecordUpdate(@RequestBody Map<String,Object> values){
+		return weighService.materialWarehouseRecordUpdate(values);
+	}
+	//删除
+	@GetMapping("/materialWarehouseRecordDel")
+	public BasicResult materialWarehouseRecordDel(@RequestParam String id){
+		return weighService.materialWarehouseRecordDel(id);
+	}
 
 }
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/TSuMaterialWarehouseRecord.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/TSuMaterialWarehouseRecord.java
new file mode 100644
index 0000000..fcbef74
--- /dev/null
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/TSuMaterialWarehouseRecord.java
@@ -0,0 +1,103 @@
+package com.thhy.materials.modules.biz.weigh.entity;
+
+import lombok.Data;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.util.Date;
+
+@Data
+@Getter
+@Setter
+@ToString
+public class TSuMaterialWarehouseRecord implements Serializable {
+    /**
+     * 
+     */
+    private String id;
+
+    /**
+     * 桌号
+     */
+    private Integer tableNum;
+
+    /**
+     * 产地名称
+     */
+    private String nameOfOrigin;
+
+    /**
+     * 物料名称
+     */
+    private String materialName;
+
+    /**
+     * 进厂数量
+     */
+    private Double incomingQuantity;
+
+    /**
+     * 进厂日期
+     */
+    private Date inTime;
+
+    /**
+     * 检验状态
+     */
+    private Integer status;
+
+    /**
+     * 检验日期
+     */
+    private Date inspectionDate;
+
+    /**
+     * 报告编号
+     */
+    private String reportNumber;
+
+    /**
+     * 创建日期
+     */
+    private Date createTime;
+
+    /**
+     * 
+     */
+    private String createUser;
+
+    /**
+     * 
+     */
+    private Date updateTime;
+
+    /**
+     * 
+     */
+    private String updateUser;
+
+    /**
+     * 
+     */
+    private Integer isUse;
+
+    /**
+     * 
+     */
+    private String companyId;
+
+    /**
+     * 入库方式 1手动 2自动
+     */
+    private Integer type;
+
+    /**
+     * This field was generated by MyBatis Generator.
+     * This field corresponds to the database table t_su_material_warehouse_record
+     *
+     * @mbg.generated Thu Nov 30 14:55:49 CST 2023
+     */
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/AssistGoodDto.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/AssistGoodDto.java
new file mode 100644
index 0000000..f317633
--- /dev/null
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/AssistGoodDto.java
@@ -0,0 +1,16 @@
+package com.thhy.materials.modules.biz.weigh.entity.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+@Data
+public class AssistGoodDto implements Serializable {
+    //辅材名称
+    private String  assistName;
+    //辅材类型
+    private String assistType;
+    //辅材库存
+    private String stock;
+
+
+}
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/MaterialStockRecordDto.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/MaterialStockRecordDto.java
new file mode 100644
index 0000000..a229fcc
--- /dev/null
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/MaterialStockRecordDto.java
@@ -0,0 +1,14 @@
+package com.thhy.materials.modules.biz.weigh.entity.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+@Data
+public class MaterialStockRecordDto implements Serializable {
+    //原料名称
+    private String materialName;
+    //原料值
+    private String materialValue;
+
+
+}
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/MouldDto.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/MouldDto.java
new file mode 100644
index 0000000..b3b9fbc
--- /dev/null
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/MouldDto.java
@@ -0,0 +1,15 @@
+package com.thhy.materials.modules.biz.weigh.entity.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+@Data
+public class MouldDto implements Serializable {
+    //模具编号
+    private String mouldNum;
+    //使用状态
+    private String free;
+    //次数
+    private String currentCycleTime;
+
+}
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/SteelDto.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/SteelDto.java
new file mode 100644
index 0000000..dbc5e11
--- /dev/null
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/entity/dto/SteelDto.java
@@ -0,0 +1,16 @@
+package com.thhy.materials.modules.biz.weigh.entity.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+@Data
+public class SteelDto implements Serializable {
+    //钢筋名
+    private String steelName;
+    //钢筋型号
+    private String steelModel;
+    //库存
+    private String stock;
+
+
+}
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/mapper/WeighMapper.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/mapper/WeighMapper.java
index 9b87258..af60e21 100644
--- a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/mapper/WeighMapper.java
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/mapper/WeighMapper.java
@@ -1,13 +1,19 @@
 package com.thhy.materials.modules.biz.weigh.mapper;
 
 import com.thhy.general.annotations.Idkey;
+import com.thhy.materials.modules.biz.concret.entity.SysSteel;
 import com.thhy.materials.modules.biz.concret.entity.dto.DicetName;
 import com.thhy.materials.modules.biz.concret.entity.dto.TMinxingPlant;
 import com.thhy.materials.modules.biz.concret.entity.dto.WeighDto;
 import com.thhy.materials.modules.biz.video.entity.TVideoNo;
 import com.thhy.materials.modules.biz.weigh.dto.QueryWeighDto;
+import com.thhy.materials.modules.biz.weigh.entity.TSuMaterialWarehouseRecord;
 import com.thhy.materials.modules.biz.weigh.entity.TWeighbridge;
 import com.thhy.materials.modules.biz.weigh.entity.WeighVo;
+import com.thhy.materials.modules.biz.weigh.entity.dto.AssistGoodDto;
+import com.thhy.materials.modules.biz.weigh.entity.dto.MaterialStockRecordDto;
+import com.thhy.materials.modules.biz.weigh.entity.dto.MouldDto;
+import com.thhy.materials.modules.biz.weigh.entity.dto.SteelDto;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -81,4 +87,26 @@
 	void materialStockRecordIns(HashMap<String, Object> hashMap);
 
 	void weighbridgeUpdateType(Integer weighbridgeId);
+
+	List<MaterialStockRecordDto> materialStockInventory();
+
+	List<SteelDto> steelInventory();
+
+	List<AssistGoodDto> assistGoodInventory();
+
+	List<MouldDto> mouldInventory();
+
+	List<SysSteel> steelType();
+
+	void steelRecordIn(@Idkey("id") HashMap<String, Object> hashMap);
+
+	void steelUp(@Param("steelId") String steelId,@Param("doubleValue") double doubleValue);
+
+	List<TSuMaterialWarehouseRecord> materialWarehouseRecordList(Map<String, Object> values);
+
+	void materialWarehouseRecordInsert(@Idkey("id") Map<String, Object> values);
+
+	void materialWarehouseRecordUpdate(Map<String, Object> values);
+
+	void materialWarehouseRecordDel(String id);
 }
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/WeighService.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/WeighService.java
index 895dc22..1674876 100644
--- a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/WeighService.java
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/WeighService.java
@@ -1,6 +1,7 @@
 package com.thhy.materials.modules.biz.weigh.service;
 
 import com.thhy.general.common.BasicResult;
+import com.thhy.materials.modules.biz.concret.entity.SysSteel;
 import com.thhy.materials.modules.biz.concret.entity.dto.DicetName;
 import com.thhy.materials.modules.biz.concret.entity.dto.TMinxingPlant;
 import com.thhy.materials.modules.biz.concret.entity.dto.WeighDto;
@@ -40,4 +41,15 @@
 
 	BasicResult weighbridgeList(Map<String, Object> values);
 
+    BasicResult headThingJsInventory();
+
+    List<SysSteel> steelType();
+
+    BasicResult materialWarehouseRecordList(Map<String, Object> values);
+
+	BasicResult materialWarehouseRecordInsert(Map<String, Object> values);
+
+	BasicResult materialWarehouseRecordUpdate(Map<String, Object> values);
+
+	BasicResult materialWarehouseRecordDel(String id);
 }
diff --git a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/impl/WeighServiceImpl.java b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/impl/WeighServiceImpl.java
index 3e1f773..b68da00 100644
--- a/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/impl/WeighServiceImpl.java
+++ b/hd/pipe/materialsManage/src/main/java/com/thhy/materials/modules/biz/weigh/service/impl/WeighServiceImpl.java
@@ -3,18 +3,25 @@
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.thhy.general.common.BasicResult;
+import com.thhy.materials.modules.biz.concret.entity.SysSteel;
 import com.thhy.materials.modules.biz.concret.entity.dto.DicetName;
 import com.thhy.materials.modules.biz.concret.entity.dto.TMinxingPlant;
 import com.thhy.materials.modules.biz.concret.entity.dto.WeighDto;
 import com.thhy.materials.modules.biz.weigh.dto.QueryWeighDto;
+import com.thhy.materials.modules.biz.weigh.entity.TSuMaterialWarehouseRecord;
 import com.thhy.materials.modules.biz.weigh.entity.TWeighbridge;
 import com.thhy.materials.modules.biz.weigh.entity.WeighVo;
+import com.thhy.materials.modules.biz.weigh.entity.dto.AssistGoodDto;
+import com.thhy.materials.modules.biz.weigh.entity.dto.MaterialStockRecordDto;
+import com.thhy.materials.modules.biz.weigh.entity.dto.MouldDto;
+import com.thhy.materials.modules.biz.weigh.entity.dto.SteelDto;
 import com.thhy.materials.modules.biz.weigh.mapper.WeighMapper;
 import com.thhy.materials.modules.biz.weigh.service.WeighService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -95,4 +102,58 @@
 		PageInfo<TWeighbridge> tWeighbridgePageInfo = new PageInfo<>(weighbridges);
 		return BasicResult.success(tWeighbridgePageInfo);
 	}
+
+	@Override
+	public BasicResult headThingJsInventory() {
+
+		//原料库存
+		List<MaterialStockRecordDto> materialStockDtos =weighMapper.materialStockInventory();
+		//钢筋
+		List<SteelDto> steelDtos = weighMapper.steelInventory();
+		//辅材
+		List<AssistGoodDto> assistGoodDtos = weighMapper.assistGoodInventory();
+
+		//模具
+		List<MouldDto> mouldDtos = weighMapper.mouldInventory();
+		HashMap<String, Object> map = new HashMap<>();
+		map.put("materialStockDtos",materialStockDtos);
+		map.put("steelDtos",steelDtos);
+		map.put("assistGoodDtos",assistGoodDtos);
+		map.put("mouldDtos",mouldDtos);
+		return BasicResult.success(map);
+	}
+
+	@Override
+	public List<SysSteel> steelType() {
+		return weighMapper.steelType();
+	}
+
+	@Override
+	public BasicResult materialWarehouseRecordList(Map<String, Object> values) {
+		Integer pageSize = Integer.valueOf(values.get("pageSize").toString());
+		Integer pageNum = Integer.valueOf(values.get("pageNum").toString());
+		PageHelper.startPage(pageNum,pageSize);
+		List<TSuMaterialWarehouseRecord> records = weighMapper.materialWarehouseRecordList(values);
+		PageInfo<TSuMaterialWarehouseRecord> recordPageInfo = new PageInfo<>(records);
+		return BasicResult.success(recordPageInfo);
+	}
+
+	@Override
+	public BasicResult materialWarehouseRecordInsert(Map<String, Object> values) {
+		values.put("id","");
+		weighMapper.materialWarehouseRecordInsert(values);
+		return BasicResult.success();
+	}
+
+	@Override
+	public BasicResult materialWarehouseRecordUpdate(Map<String, Object> values) {
+		weighMapper.materialWarehouseRecordUpdate(values);
+		return BasicResult.success();
+	}
+
+	@Override
+	public BasicResult materialWarehouseRecordDel(String id) {
+		weighMapper.materialWarehouseRecordDel(id);
+		return BasicResult.success();
+	}
 }
diff --git a/hd/pipe/materialsManage/src/main/resources/mapping/WeighMapper.xml b/hd/pipe/materialsManage/src/main/resources/mapping/WeighMapper.xml
index 55cbeb7..ea28f6e 100644
--- a/hd/pipe/materialsManage/src/main/resources/mapping/WeighMapper.xml
+++ b/hd/pipe/materialsManage/src/main/resources/mapping/WeighMapper.xml
@@ -711,4 +711,316 @@
         types=2
         where weighbridge_id=#{weighbridgeId}
     </update>
+
+    <select id="materialStockInventory" resultType="com.thhy.materials.modules.biz.weigh.entity.dto.MaterialStockRecordDto">
+    SELECT
+	s.dict_name AS materialName,
+	t.material_value AS materialValue
+FROM
+	t_material_stock t
+	LEFT JOIN sys_dict s ON t.material_name = s.dict_id
+    </select>
+    <select id="steelInventory" resultType="com.thhy.materials.modules.biz.weigh.entity.dto.SteelDto">
+        select
+         steel_name as steelName,
+         steel_model as steelModel,
+         stock as stock
+         from sys_steel
+    </select>
+    <select id="assistGoodInventory" resultType="com.thhy.materials.modules.biz.weigh.entity.dto.AssistGoodDto">
+        select s.assist_name as s.assistName,
+        d.dict_name as assistType,
+        s.stock as stock
+         from  sys_assist_good s left join sys_dict d on  s.assist_type=d.dict_id
+    </select>
+    <select id="mouldInventory" resultType="com.thhy.materials.modules.biz.weigh.entity.dto.MouldDto">
+        select
+         mould_num as mouldNum,
+         free as free,
+         current_cycle_time as currentCycleTime
+         from sys_mould
+    </select>
+    <select id="steelType" resultType="com.thhy.materials.modules.biz.concret.entity.SysSteel">
+        select
+         steel_id as steelId,
+         steel_name as steelName,
+         steel_model as steelModel,
+         stock as stock
+         from
+            sys_steel
+    </select>
+    <insert id="steelRecordIn" >
+        insert into sys_steel_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                id,
+            </if>
+            <if test="steelId != null">
+                steel_id,
+            </if>
+            <if test="stockType != null">
+                stock_type,
+            </if>
+            <if test="createTime != null">
+                create_time,
+            </if>
+            <if test="changeStock != null">
+                change_stock,
+            </if>
+            <if test="supplierId != null">
+                supplier_id,
+            </if>
+            <if test="factoryName != null">
+                factory_name,
+            </if>
+            <if test="brand != null">
+                brand,
+            </if>
+            <if test="lineCode != null">
+                line_code,
+            </if>
+            <if test="proId != null">
+                pro_id,
+            </if>
+            <if test="createUser != null">
+                create_user,
+            </if>
+            <if test="companyId != null">
+                company_id,
+            </if>
+            <if test="carName != null">
+                car_name,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                #{id,jdbcType=VARCHAR},
+            </if>
+            <if test="steelId != null">
+                #{steelId,jdbcType=VARCHAR},
+            </if>
+            <if test="stockType != null">
+                #{stockType,jdbcType=INTEGER},
+            </if>
+            <if test="createTime != null">
+                #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="changeStock != null">
+                #{changeStock,jdbcType=DOUBLE},
+            </if>
+            <if test="supplierId != null">
+                #{supplierId,jdbcType=VARCHAR},
+            </if>
+            <if test="factoryName != null">
+                #{factoryName,jdbcType=VARCHAR},
+            </if>
+            <if test="brand != null">
+                #{brand,jdbcType=VARCHAR},
+            </if>
+            <if test="lineCode != null">
+                #{lineCode,jdbcType=VARCHAR},
+            </if>
+            <if test="proId != null">
+                #{proId,jdbcType=VARCHAR},
+            </if>
+            <if test="createUser != null">
+                #{createUser,jdbcType=VARCHAR},
+            </if>
+            <if test="companyId != null">
+                #{companyId,jdbcType=VARCHAR},
+            </if>
+            <if test="carName != null">
+                #{carName,jdbcType=VARCHAR},
+            </if>
+        </trim>
+    </insert>
+    <update id="steelUp" >
+        update sys_steel set
+        stock=#{doubleValue}
+        where steel_id=#{steelId}
+    </update>
+
+    <select id="materialWarehouseRecordList" resultType="com.thhy.materials.modules.biz.weigh.entity.TSuMaterialWarehouseRecord">
+        select
+        id,
+        table_num as tableNum,
+        name_of_origin as nameOfOrigin,
+        material_name as materialName,
+        incoming_quantity as incomingQuantity,
+        in_time as inTime,
+        status as status,
+        inspection_date as inspectionDate,
+        report_number as reportNumber,
+        create_time as createTime,
+        `type`
+         from t_su_material_warehouse_record
+        where 1=1
+        <if test="tableNum!=null and tableNum!='' ">
+            and table_num=#{tableNum}
+        </if>
+        <if test="type!=null and type!='' ">
+            and `type`=#{type}
+        </if>
+        <if test="strTime!=null and strTime!='' and endTime!=null and endTime!='' ">
+            and create_time between #{strTime} and #{endTime}
+        </if>
+        order by create_time desc
+    </select>
+    <insert id="materialWarehouseRecordInsert" >
+        insert into t_su_material_warehouse_record
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                id,
+            </if>
+            <if test="tableNum != null">
+                table_num,
+            </if>
+            <if test="nameOfOrigin != null">
+                name_of_origin,
+            </if>
+            <if test="materialName != null">
+                material_name,
+            </if>
+            <if test="incomingQuantity != null">
+                incoming_quantity,
+            </if>
+            <if test="inTime != null">
+                in_time,
+            </if>
+            <if test="status != null">
+                status,
+            </if>
+            <if test="inspectionDate != null">
+                inspection_date,
+            </if>
+            <if test="reportNumber != null">
+                report_number,
+            </if>
+            <if test="createTime != null">
+                create_time,
+            </if>
+            <if test="createUser != null">
+                create_user,
+            </if>
+            <if test="updateTime != null">
+                update_time,
+            </if>
+            <if test="updateUser != null">
+                update_user,
+            </if>
+            <if test="isUse != null">
+                is_use,
+            </if>
+            <if test="companyId != null">
+                company_id,
+            </if>
+            <if test="type != null">
+                type,
+            </if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="id != null">
+                #{id,jdbcType=VARCHAR},
+            </if>
+            <if test="tableNum != null">
+                #{tableNum,jdbcType=INTEGER},
+            </if>
+            <if test="nameOfOrigin != null">
+                #{nameOfOrigin,jdbcType=VARCHAR},
+            </if>
+            <if test="materialName != null">
+                #{materialName,jdbcType=VARCHAR},
+            </if>
+            <if test="incomingQuantity != null">
+                #{incomingQuantity,jdbcType=DOUBLE},
+            </if>
+            <if test="inTime != null">
+                #{inTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="status != null">
+                #{status,jdbcType=INTEGER},
+            </if>
+            <if test="inspectionDate != null">
+                #{inspectionDate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="reportNumber != null">
+                #{reportNumber,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime != null">
+                #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="createUser != null">
+                #{createUser,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime != null">
+                #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updateUser != null">
+                #{updateUser,jdbcType=VARCHAR},
+            </if>
+            <if test="isUse != null">
+                #{isUse,jdbcType=INTEGER},
+            </if>
+            <if test="companyId != null">
+                #{companyId,jdbcType=VARCHAR},
+            </if>
+            <if test="type != null">
+                #{type,jdbcType=INTEGER},
+            </if>
+        </trim>
+    </insert>
+    <update id="materialWarehouseRecordUpdate" >
+        update t_su_material_warehouse_record
+        <set>
+            <if test="tableNum != null">
+                table_num = #{tableNum,jdbcType=INTEGER},
+            </if>
+            <if test="nameOfOrigin != null">
+                name_of_origin = #{nameOfOrigin,jdbcType=VARCHAR},
+            </if>
+            <if test="materialName != null">
+                material_name = #{materialName,jdbcType=VARCHAR},
+            </if>
+            <if test="incomingQuantity != null">
+                incoming_quantity = #{incomingQuantity,jdbcType=DOUBLE},
+            </if>
+            <if test="inTime != null">
+                in_time = #{inTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="status != null">
+                status = #{status,jdbcType=INTEGER},
+            </if>
+            <if test="inspectionDate != null">
+                inspection_date = #{inspectionDate,jdbcType=TIMESTAMP},
+            </if>
+            <if test="reportNumber != null">
+                report_number = #{reportNumber,jdbcType=VARCHAR},
+            </if>
+            <if test="createTime != null">
+                create_time = #{createTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="createUser != null">
+                create_user = #{createUser,jdbcType=VARCHAR},
+            </if>
+            <if test="updateTime != null">
+                update_time = #{updateTime,jdbcType=TIMESTAMP},
+            </if>
+            <if test="updateUser != null">
+                update_user = #{updateUser,jdbcType=VARCHAR},
+            </if>
+            <if test="isUse != null">
+                is_use = #{isUse,jdbcType=INTEGER},
+            </if>
+            <if test="companyId != null">
+                company_id = #{companyId,jdbcType=VARCHAR},
+            </if>
+            <if test="type != null">
+                type = #{type,jdbcType=INTEGER},
+            </if>
+        </set>
+        where id = #{id,jdbcType=VARCHAR}
+    </update>
+    <delete id="materialWarehouseRecordDel" parameterType="java.lang.String">
+        delete from t_su_material_warehouse_record where id=#{id}
+    </delete>
 </mapper>
\ No newline at end of file
diff --git a/web/src/api/modules/mixing.js b/web/src/api/modules/mixing.js
index c017b66..d91fa20 100644
--- a/web/src/api/modules/mixing.js
+++ b/web/src/api/modules/mixing.js
@@ -6,5 +6,8 @@
     // H5搅拌站大屏展示数据信息
     showHmixings: params =>
         axios.get('/materials/suMaterialWarehouse/selectNewOneByTableNum', {params}),
-
+    getMixing: params =>
+        axios.get('/materials/materialRelease/siloList', {params}),
+    getMixRatio: params =>
+        axios.post('/materials/materialRelease/mixingConsumeList', params),
  }
\ No newline at end of file
diff --git a/web/src/assets/mixing/container_10.png b/web/src/assets/mixing/container_10.png
new file mode 100644
index 0000000..15291b0
--- /dev/null
+++ b/web/src/assets/mixing/container_10.png
Binary files differ
diff --git a/web/src/assets/mixing/container_100.png b/web/src/assets/mixing/container_100.png
new file mode 100644
index 0000000..5b73dda
--- /dev/null
+++ b/web/src/assets/mixing/container_100.png
Binary files differ
diff --git a/web/src/assets/mixing/container_20.png b/web/src/assets/mixing/container_20.png
new file mode 100644
index 0000000..2bbe0dc
--- /dev/null
+++ b/web/src/assets/mixing/container_20.png
Binary files differ
diff --git a/web/src/assets/mixing/container_40.png b/web/src/assets/mixing/container_40.png
new file mode 100644
index 0000000..d2f52d3
--- /dev/null
+++ b/web/src/assets/mixing/container_40.png
Binary files differ
diff --git a/web/src/assets/mixing/container_60.png b/web/src/assets/mixing/container_60.png
new file mode 100644
index 0000000..5ced4a7
--- /dev/null
+++ b/web/src/assets/mixing/container_60.png
Binary files differ
diff --git a/web/src/assets/mixing/container_80.png b/web/src/assets/mixing/container_80.png
new file mode 100644
index 0000000..38348d1
--- /dev/null
+++ b/web/src/assets/mixing/container_80.png
Binary files differ
diff --git a/web/src/assets/mixing/container_90.png b/web/src/assets/mixing/container_90.png
new file mode 100644
index 0000000..47ee2ac
--- /dev/null
+++ b/web/src/assets/mixing/container_90.png
Binary files differ
diff --git a/web/src/assets/mixing/header.png b/web/src/assets/mixing/header.png
new file mode 100644
index 0000000..be0a727
--- /dev/null
+++ b/web/src/assets/mixing/header.png
Binary files differ
diff --git a/web/src/assets/mixing/list_bg.png b/web/src/assets/mixing/list_bg.png
new file mode 100644
index 0000000..462f5e3
--- /dev/null
+++ b/web/src/assets/mixing/list_bg.png
Binary files differ
diff --git a/web/src/assets/mixing/list_l_bg.png b/web/src/assets/mixing/list_l_bg.png
new file mode 100644
index 0000000..d8c7dc5
--- /dev/null
+++ b/web/src/assets/mixing/list_l_bg.png
Binary files differ
diff --git a/web/src/assets/mixing/list_r_bg.png b/web/src/assets/mixing/list_r_bg.png
new file mode 100644
index 0000000..63add79
--- /dev/null
+++ b/web/src/assets/mixing/list_r_bg.png
Binary files differ
diff --git a/web/src/assets/mixing/name_bg.png b/web/src/assets/mixing/name_bg.png
new file mode 100644
index 0000000..cf1da41
--- /dev/null
+++ b/web/src/assets/mixing/name_bg.png
Binary files differ
diff --git a/web/src/router/index.js b/web/src/router/index.js
index 2d80873..fe7eda0 100644
--- a/web/src/router/index.js
+++ b/web/src/router/index.js
@@ -15,6 +15,22 @@
     }
   },
   {
+    path: '/mixing/*',
+    name: 'mixing',
+    meta: {
+      title: '管片场拌合站'
+    },
+    component: () => import('../views/MixingInfo/mixing.vue'),
+  },
+  {
+    path: '/mixratio/*',
+    name: 'mixratio',
+    meta: {
+      title: '管片场拌合站表格'
+    },
+    component: () => import('../views/MixingInfo/mixRatio.vue'),
+  },
+  {
     path: `/mixingInfo/num=1`,
     name: 'mixingInfo',
     meta: {
diff --git a/web/src/views/GoodManage/MixRatioScreen.vue b/web/src/views/GoodManage/MixRatioScreen.vue
new file mode 100644
index 0000000..74753ca
--- /dev/null
+++ b/web/src/views/GoodManage/MixRatioScreen.vue
@@ -0,0 +1,11 @@
+<template>
+  <div>222222222222222</div>
+</template>
+
+<script>
+
+</script>
+
+<style lang="sass" scoped>
+@import '../../style/layout-main.scss';
+</style>
\ No newline at end of file
diff --git a/web/src/views/GoodManage/MixingScreen.vue b/web/src/views/GoodManage/MixingScreen.vue
new file mode 100644
index 0000000..5e6d786
--- /dev/null
+++ b/web/src/views/GoodManage/MixingScreen.vue
@@ -0,0 +1,202 @@
+<!-- 设备管理 ==> 拌合站屏管理-->
+<template>
+  <div class="main">
+    <div class="main_header">
+      <div class="header_item">
+        <span class="header_label">拌合站屏:</span>
+        <el-select size="mini" v-model="queryInfo.screen" placeholder="请选择拌合站屏">
+          <el-option v-for="item in queryInfoScreens" :key="item.value" :label="item.label"
+            :value="item.value"></el-option>
+        </el-select>
+      </div>
+      <div class="header_item">
+        <span class="header_label">录入方式:</span>
+        <el-select size="mini" v-model="queryInfo.inmode" placeholder="请选择录入方式">
+          <el-option v-for="item in queryInfoInmodes" :key="item.value" :label="item.label"
+            :value="item.value"></el-option>
+        </el-select>
+      </div>
+      <div class="header_item">
+        <span class="header_label">创建时间:</span>
+        <el-date-picker type="daterange" v-model="times" value-format="yyyy-MM-dd" start-placeholder="起始时间"
+          end-placeholder="结束时间" @change="changeTime" clear></el-date-picker>
+      </div>
+      <div class="header_item">
+        <el-button icon="el-icon-search" v-permission="'search'" @click="queryReset">查询</el-button>
+        <el-button icon="el-icon-plus" v-permission="'insert'" @click="addRow">新增</el-button>
+      </div>
+    </div>
+    <div class="main_content">
+      <div class="main_content_item" v-for="(item, index) in ['', '', '', '', '',]" :key="index">
+
+      </div>
+    </div>
+
+    <!-- 详情dialog -->
+    <el-dialog width="400px" class="prop_dialog" v-if="isRenderDialog" title="详情" :visible.sync="asyncVisible">
+
+      <el-form class="rule_form" label-width="auto">
+
+        <div class="divider"></div>
+
+        <el-form-item label="巡检任务:">{{ info.task }}</el-form-item>
+
+        <el-form-item label="巡检标准:">{{ info.standard }}</el-form-item>
+
+        <el-form-item label="巡检人员:">{{ info.name }}</el-form-item>
+
+        <div class="divider"><span>巡检路线</span></div>
+
+        <div class="regions">
+          <div class="region" v-for="     item      in      info.regions     " :key="item.regionId">{{
+            item.region }}
+          </div>
+        </div>
+      </el-form>
+    </el-dialog>
+
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {
+      loading: false,
+      isRenderDialog: false,
+      asyncVisible: false,
+
+      info: { // 详情信息
+        task: '',
+        standard: '',
+        name: '',
+        regions: [],
+      },
+      userId: '', // 存储点击后的用户id
+      taskId: '', // 存储点击后的巡检任务id
+      times: [], // 时间范围
+      queryInfo: {
+        pageNum: 1,
+        pageSize: 10,
+        inmode: '', // 录入方式
+        screen: '', // 拌合站屏
+        startTime: '',
+        endTime: '',
+      },
+      regionInfos: { // 巡检路线详情
+        isRenderDialog: false,
+        asyncVisible: false,
+        time: '', // 巡检时间
+        region: '', // 巡检区域
+        res: '', // 巡检结果
+        img: '', // 上传的图片
+        location: '', // 位置
+      }
+    }
+  },
+  beforeCreate() {
+    this.queryInfoInmodes = [
+      {value: '0', label: '手动'},
+      {value: '1', label: '自动'},
+    ]
+    this.queryInfoScreens = [
+      {value: '0', label: '1-1'},
+      {value: '1', label: '1-2'},
+    ]
+    this.$http = this.$api.Safety.RiskGrad.polling
+  },
+  created() {
+    this.setTableColumn()
+    this.getLists()
+  },
+  methods: {
+    // 获取table列表数据
+    getLists() {
+      let params = this.queryInfo
+      this.loading = true
+      this.$http.taskcardGetlists(params).then(res => {
+        if (res.statusMsg === 'ok') {
+          console.log(res)
+        }
+        this.loading = false
+      })
+    },
+    // 初始化 table 配置
+    setTableColumn() {
+    },
+    addRow() { },
+    // 查询按钮列表信息
+    queryReset() {
+      this.queryInfo.pageNum = 1
+      this.queryInfo.pageSize = 10
+      this.getLists()
+    },
+    changeTime(times) {
+      times = times || ['', '']
+      this.queryInfo.startTime = times[0]
+      this.queryInfo.endTime = times[1]
+    },
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import '@/style/layout-main.scss';
+
+.rule_form {
+  color: #fff;
+
+  ::v-deep .el-form-item__content {
+    display: block;
+  }
+
+  .image {
+    flex: none;
+    width: 91px;
+    height: 120px;
+    margin-right: 15px;
+    border-radius: 5px;
+    border: 1px solid #0c5983;
+
+    img {
+      width: 100%;
+    }
+  }
+}
+
+.regions {
+  text-align: center;
+
+  .region {
+    line-height: 34px;
+    margin-bottom: 16px;
+    background: rgba(56, 175, 247, .25);
+    cursor: pointer;
+  }
+}
+
+.divider {
+  position: relative;
+  margin-bottom: 30px;
+  text-indent: 10px;
+  color: #fff;
+  border-left: 3px solid #18F6F8;
+
+  &::after {
+    content: "";
+    position: absolute;
+    left: 0;
+    bottom: -8px;
+    width: 100%;
+    padding: 20px 0;
+    border-bottom: 1px solid #0C4D6F;
+  }
+}
+
+.main_content .main_content_item {
+  float: left;
+  width: 48%;
+  height: 200px;
+  margin: 1%;
+  border: 1px solid red;
+}
+</style>
\ No newline at end of file
diff --git a/web/src/views/MixingInfo/components/List.vue b/web/src/views/MixingInfo/components/List.vue
new file mode 100644
index 0000000..4642226
--- /dev/null
+++ b/web/src/views/MixingInfo/components/List.vue
@@ -0,0 +1,91 @@
+<template>
+  <div class="list">
+    <div class="item" v-for="item in fieldMap" :key="item.name">
+      <span class="name">{{ item.name }}:</span>
+      <template v-if="item.formatter">
+        <span class="value" :class="item.class(data)">{{ item.formatter(data) }}</span>
+      </template>
+      <template v-else>
+        <span class="value">{{ data && data[item.type] || '' }}</span>
+      </template>
+
+    </div>
+  </div>
+</template>
+<script>
+export default {
+  data() {
+    return {}
+  },
+  props: {
+    data: {
+      type: Object,
+      default: () => { }
+    }
+  },
+  beforeCreate() {
+    // 字段映射表
+    this.fieldMap = [
+      {name: '规格型号', type: 'spec'},
+      {name: '产地名称', type: 'producer'},
+      {name: '炉(批)号', type: 'stove'},
+      {name: '进场数量', type: 'inNum'},
+      {name: '进场日期', type: 'inDate'},
+      {name: '检验日期', type: 'inspectDate'},
+      {
+        name: '检验状态', class(row) {
+          let state = row && row.inspectState
+          return {1: 'style1', 2: 'style2', 3: 'style3'}[state] || ''
+        }, formatter(row) {
+          let state = row && row.inspectState || ''
+          return {1: '合格', 2: '不合格', 3: '待检测'}[state] || ''
+        }
+      },
+      {name: '报告编号', type: 'reportNumber'},
+    ]
+  },
+}
+</script>
+
+<style scoped>
+.list {
+  display: flex;
+  flex-direction: column;
+  height: 100%;
+
+  .item {
+    display: flex;
+    flex: 1;
+    margin-top: 4px;
+
+    .name {
+      margin-right: 4px;
+      text-indent: 6px;
+      white-space: nowrap;
+    }
+
+    .value {
+      color: #03F1FF;
+
+      &.style1 {
+        font-size: 1.5rem;
+        line-height: 1.2rem;
+        color: #16F849;
+      }
+
+      &.style2 {
+        font-size: 1.5rem;
+        line-height: 1.2rem;
+        color: red;
+      }
+
+      &.style3 {
+        font-size: 1.5rem;
+        line-height: 1.2rem;
+        color: #FF6600;
+      }
+    }
+
+  }
+}
+</style>
diff --git a/web/src/views/MixingInfo/mixRatio.vue b/web/src/views/MixingInfo/mixRatio.vue
new file mode 100644
index 0000000..075a28a
--- /dev/null
+++ b/web/src/views/MixingInfo/mixRatio.vue
@@ -0,0 +1,247 @@
+<template>
+    <div class="wrap">
+        <div class="header">
+            <div class="header_name">中铁十四局通甬站前I标管片场拌合站</div>
+        </div>
+        <div class="table">
+            <div class="row title">{{ info.signboardName }}</div>
+
+            <div class="row">
+                <div class="name">工程名称</div>
+                <div class="value">{{ info.proName }}</div>
+            </div>
+
+            <div class="row">
+                <div class="name">施工单位</div>
+                <div class="value">{{ info.constructionUnit }}</div>
+            </div>
+
+            <div class="row line">
+                <div>
+                    <div class="name">施工日期</div>
+                    <div class="value">{{ info.saveStamp }}</div>
+                </div>
+                <div>
+                    <div class="name">施工部位</div>
+                    <div class="value">{{ info.construction }}</div>
+                </div>
+            </div>
+
+            <div class="row" v-for="item in dataLists" :key="item.name">
+                <div class="name">{{ item.name }}</div>
+                <div class="column">
+                    <div class="column-item" v-for="(sub, index) in item.value" :key="index">{{ sub }}</div>
+                </div>
+            </div>
+
+        </div>
+    </div>
+</template>
+  
+<script>
+const interval = function (fn, Vue) {
+    let timer = setInterval(
+        (() => {
+            fn()
+            return fn
+        })(),
+        1000 * 60 * 1
+    )
+    if (Vue) {
+        Vue.$once('hook:beforeDestroy', function () {
+            timer && clearInterval(timer)
+        })
+    }
+}
+export default {
+    name: 'Page2',
+    data() {
+        return {
+            info: {
+                signboardName: '', // 标识排
+                proName: '', // 工程名称
+                constructionUnit: '', // 施工单位
+                saveStamp: '',  // 施工日期
+                construction: '',  // 施工部位
+            },
+            dataLists: [
+                {name: '材料名称', type: 'dictName', value: []}, // 材料名称
+                {name: '规格型号', type: 'spec', value: []}, // 规格型号
+                {name: '生产厂家', type: 'manufacturer', value: []}, // 生产厂家
+                {name: '材料含水率(%)', type: 'watFull', value: []}, // 含水率
+                {name: '理论用量(kg/m³)', type: 'planAmnt', value: []}, // 理论用量
+                {name: '实际用量(kg/m³)', type: 'factAmnt', value: []}, // 实际用量
+            ]
+        }
+    },
+    beforeCreate() {
+        this.$http = this.$api.Infos
+    },
+    beforeRouteEnter(to, form, next) {
+        const {path} = to
+
+        const type = path.slice(-1)
+
+        next(vm => {
+            vm.type = type
+            interval(vm.getLists, vm)
+        })
+    },
+    mounted() {
+        let width = document.getElementsByClassName('wrap')[0].clientWidth
+        let $html = document.getElementsByTagName('html')[0]
+        let fontsize = width / 1920 * 35.2
+        $html.style.fontSize = `${fontsize}px`
+        window.onresize = () => {
+            let width = document.getElementById('app').clientWidth
+            let fontsize = width / 1920 * 35.2
+            $html.style.fontSize = `${fontsize}px`
+        }
+    },
+    beforeDestroy() {
+        let $html = document.getElementsByTagName('html')[0]
+        $html.style.fontSize = ''
+    },
+    methods: {
+        async getLists() {
+            const params = {
+                pageNum: --this.type, // 传 0 1对应两个页面
+                pageSize: 1,
+            }
+            this.$api.Infos.getMixRatio(params).then(res => {
+                if (res.statusMsg === 'ok' && res.data) {
+                    const {list} = res.data
+                    if (list && list.length) {
+                        const item = list[0]
+                        const {tmixingConsumes} = item
+
+                        this.info.signboardName = item.signboardName
+                        this.info.proName = item.proName
+                        this.info.constructionUnit = item.constructionUnit
+
+                        if (tmixingConsumes && tmixingConsumes.length) {
+                            this.info.saveStamp = tmixingConsumes[0].saveStamp
+                            this.info.construction = tmixingConsumes[0].construction
+
+                            tmixingConsumes.forEach(item => {
+                                this.dataLists.forEach(val => {
+                                    item[val.type] && val.value.push(item[val.type])
+                                })
+                            })
+                        }
+                    }
+                } else {
+                    this.$message.warning('请检查网络或联系管理员!!!')
+                }
+            })
+
+        },
+    }
+}
+</script>
+<style scoped>
+.wrap {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    font-size: 1rem;
+    background: #040A3F;
+    overflow: hidden;
+}
+
+.header {
+    position: absolute;
+    top: 0;
+    width: 100%;
+    height: 3rem;
+    text-align: center;
+    color: #fff;
+    background: url('../../assets/mixing/header.png') no-repeat center center;
+    background-size: 100% auto;
+
+    .header_name {
+        font-size: 1.6rem;
+        font-weight: bold;
+        line-height: 3.2rem;
+        letter-spacing: 2px;
+        text-shadow: 0px 3px 3px rgba(25, 63, 95, 0.05);
+        background: -webkit-linear-gradient(90deg, #2AC0FF 0%, #FFFFFF 70%);
+        -webkit-background-clip: text;
+        -webkit-text-fill-color: transparent;
+    }
+}
+
+.table {
+    display: flex;
+    flex-direction: column;
+    position: absolute;
+    top: 4rem;
+    bottom: 2rem;
+    left: 2rem;
+    right: 2rem;
+    font-size: 0.8rem;
+    color: #fff;
+
+    .title {
+        display: flex;
+        justify-content: center;
+        align-items: center;
+        color: #BEE2F0;
+        background: rgba(1, 142, 196, .35);
+    }
+
+    .row {
+        flex: 1;
+        width: 100%;
+        height: 2rem;
+        margin: 0 -1px -1px 0;
+        text-align: center;
+        line-height: 2rem;
+        border: 1px solid #01B3EF;
+
+        .name {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            float: left;
+            width: 8rem;
+            height: 100%;
+            margin: -1px -1px -1px 0;
+            color: #BEE2F0;
+            border: 1px solid #01B3EF;
+            background: rgba(1, 142, 196, .75);
+            box-sizing: unset;
+        }
+
+        .value {
+            display: flex;
+            justify-content: center;
+            align-items: center;
+            height: 100%;
+            overflow: hidden;
+        }
+
+        .column {
+            display: flex;
+            height: 100%;
+
+            .column-item {
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                flex: 1;
+                margin: -1px -1px -1px 0;
+                border: 1px solid #01B3EF;
+            }
+        }
+    }
+
+    .row.line {
+        display: flex;
+
+        >div {
+            flex: 1;
+        }
+    }
+}
+</style>
\ No newline at end of file
diff --git a/web/src/views/MixingInfo/mixing.vue b/web/src/views/MixingInfo/mixing.vue
new file mode 100644
index 0000000..55d42a7
--- /dev/null
+++ b/web/src/views/MixingInfo/mixing.vue
@@ -0,0 +1,314 @@
+<template>
+    <div class="wrap">
+        <div class="header">
+            <div class="header_name">中铁十四局通甬站前I标管片场拌合站</div>
+        </div>
+        <div class="container">
+            <div class="con_name">
+                <div class="line left"></div>
+                <div class="name">
+                    <p class="p">{{ infoL.siloName }}</p>
+                    <p class="p">{{ infoR.siloName }}</p>
+                </div>
+                <div class="line right"></div>
+            </div>
+            <div class="con_main">
+                <div class="con_main_item con_main_l">
+                    <div class="placeholder"></div>
+                    <div class="list_wrap">
+                        <list :data="infoL.mixing"></list>
+                    </div>
+                </div>
+                <div class="con_main_item con_main_c">
+                    <div :class="`image ${infoL.percentImgName || ''}`">
+                        <p>{{ infoL.siloName }}</p>
+                    </div>
+                    <div :class="`image ${infoR.percentImgName || ''}`">
+                        <p>{{ infoR.siloName }}</p>
+                    </div>
+                </div>
+                <div class="con_main_item con_main_r">
+                    <div class="placeholder"></div>
+                    <div class="list_wrap">
+                        <list :data="infoR.mixing"></list>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</template>
+  
+<script>
+import List from './components/List'
+const interval = function (fn, Vue) {
+    let timer = setInterval(
+        (() => {
+            fn()
+            return fn
+        })(),
+        1000 * 60 * 1
+    )
+    if (Vue) {
+        Vue.$once('hook:beforeDestroy', function () {
+            timer && clearInterval(timer)
+        })
+    }
+}
+export default {
+    name: 'mixing',
+    data() {
+        return {
+            type: '',
+            infoL: {},
+            infoR: {},
+            percents: {
+                0: 'container_10',
+                10: 'container_10',
+                20: 'container_20',
+                40: 'container_40',
+                60: 'container_60',
+                80: 'container_80',
+                90: 'container_90',
+                100: 'container_100',
+            }
+        };
+    },
+    components: {
+        List
+    },
+    beforeCreate() {
+        this.$http = this.$api.Infos
+    },
+    beforeRouteEnter(to, form, next) {
+        const {path} = to
+
+        const type = path.slice(-1)
+
+        next(vm => {
+            vm.type = type
+            interval(vm.getLists, vm)
+        })
+    },
+    mounted() {
+        let width = document.getElementsByClassName('wrap')[0].clientWidth
+        let $html = document.getElementsByTagName('html')[0]
+        let fontsize = width / 1920 * 35.2
+        $html.style.fontSize = `${fontsize}px`
+        window.onresize = () => {
+            let width = document.getElementById('app').clientWidth
+            let fontsize = width / 1920 * 35.2
+            $html.style.fontSize = `${fontsize}px`
+        }
+    },
+    beforeDestroy() {
+        let $html = document.getElementsByTagName('html')[0]
+        $html.style.fontSize = ''
+    },
+    methods: {
+        getLists() {
+            const percentArr = Object.keys(this.percents)
+            this.$api.Infos.getMixing({types: this.type}).then(res => {
+                if (res.statusMsg === 'ok' && res.data && res.data.length) {
+                    res.data.forEach((item, index) => {
+                        if (item && item.mixing && item.mixing.percentage) {
+                            let targetVal = +item.mixing.percentage
+                            for (let index = 0; index < percentArr.length - 1; index++) {
+                                const val = percentArr[index]
+                                const valNext = percentArr[index + 1]
+                                if (val <= targetVal && targetVal <= valNext) {
+                                    item.percentImgName = this.percents[val]
+                                    break
+                                }
+                            }
+                        } else {
+                            item.percentImgName = this.percents[0]
+                        }
+                        index === 0 && (this.infoL = item)
+                        index === 1 && (this.infoR = item)
+                    })
+                } else {
+                    this.$message.warning('请检查网络或联系管理员!!!')
+                }
+            })
+
+
+
+        },
+    }
+}
+</script>
+<style scoped>
+li {
+    list-style: none;
+}
+
+.wrap {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    font-size: 1rem;
+    background: #040A3F;
+    overflow: hidden;
+}
+
+.header {
+    position: absolute;
+    width: 100%;
+    height: 3rem;
+    text-align: center;
+    font-family: 'Microsoft YaHei';
+    color: #fff;
+    background: url('../../assets/mixing/header.png') no-repeat center center;
+    background-size: 100% auto;
+
+    .header_name {
+        font-size: 1.6rem;
+        font-weight: bold;
+        line-height: 3.2rem;
+        letter-spacing: 2px;
+        text-shadow: 0px 3px 3px rgba(25, 63, 95, 0.05);
+        background: -webkit-linear-gradient(90deg, #2AC0FF 0%, #FFFFFF 70%);
+        -webkit-background-clip: text;
+        -webkit-text-fill-color: transparent;
+    }
+}
+
+.container {
+    flex: 1;
+    display: flex;
+    flex-direction: column;
+    position: absolute;
+    left: 20px;
+    right: 20px;
+    top: 3.6rem;
+    bottom: 20px;
+    color: #fff;
+
+    .con_name {
+        display: flex;
+        align-items: center;
+        height: 2.2rem;
+
+        .name {
+            width: 20rem;
+            display: flex;
+            justify-content: space-evenly;
+
+            .p {
+                height: 2rem;
+                padding: 0 2rem;
+                line-height: 2rem;
+                font-size: 1.2rem;
+                font-weight: bold;
+                white-space: nowrap;
+                background: url(../../assets/mixing/name_bg.png) no-repeat;
+                background-size: 100% 100%;
+            }
+        }
+
+        .line {
+            flex: 1;
+            height: 14px;
+
+            &.left {
+                background: -webkit-linear-gradient(right, rgba(18, 99, 162, 1) 0, rgba(18, 99, 162, 0) 100%);
+            }
+
+            &.right {
+                background: -webkit-linear-gradient(left, rgba(18, 99, 162, 1) 0, rgba(18, 99, 162, 0) 100%);
+            }
+        }
+    }
+
+    .con_main {
+        margin-top: 10px;
+        flex: 1;
+        display: flex;
+
+        .con_main_item {
+            padding: 15px 15px 0 15px;
+            position: relative;
+            flex: 1;
+
+            &.con_main_l,
+            &.con_main_r {
+                background: url(../../assets/mixing/list_bg.png) no-repeat;
+                background-size: 100% 100%;
+            }
+
+            &.con_main_l .placeholder {
+                width: 100%;
+                height: 8%;
+                background: url(../../assets/mixing/list_l_bg.png) no-repeat;
+                background-size: 100% 100%;
+            }
+
+            &.con_main_r .placeholder {
+                width: 100%;
+                height: 8%;
+                background: url(../../assets/mixing/list_r_bg.png) no-repeat;
+                background-size: 100% 100%;
+            }
+
+            &.con_main_c .image {
+                position: relative;
+                float: left;
+                width: 50%;
+                height: 100%;
+                min-height: 480px;
+                text-align: center;
+
+                >p {
+                    position: absolute;
+                    left: 50%;
+                    top: 21%;
+                    white-space: nowrap;
+                    transform: translate(-50%, -50%);
+                }
+
+                &.container_10 {
+                    background: url(../../assets/mixing/container_10.png) center 30% no-repeat;
+                    background-size: auto 70%;
+                }
+
+                &.container_20 {
+                    background: url(../../assets/mixing/container_20.png) center 30% no-repeat;
+                    background-size: auto 70%;
+                }
+
+                &.container_40 {
+                    background: url(../../assets/mixing/container_40.png) center 30% no-repeat;
+                    background-size: auto 70%;
+                }
+
+                &.container_60 {
+                    background: url(../../assets/mixing/container_60.png) center 30% no-repeat;
+                    background-size: auto 70%;
+                }
+
+                &.container_80 {
+                    background: url(../../assets/mixing/container_80.png) center 30% no-repeat;
+                    background-size: auto 70%;
+                }
+
+                &.container_90 {
+                    background: url(../../assets/mixing/container_90.png) center 30% no-repeat;
+                    background-size: auto 70%;
+                }
+
+                &.container_100 {
+                    background: url(../../assets/mixing/container_100.png) center 30% no-repeat;
+                    background-size: auto 70%;
+                }
+            }
+
+            .list_wrap {
+                position: absolute;
+                top: 12%;
+                bottom: 0;
+            }
+
+        }
+    }
+}
+</style>
\ No newline at end of file

--
Gitblit v1.9.3