添加工序
|
|
@ -122,4 +122,31 @@ public interface ProProgressDao {
|
||||||
* @date 2025/4/23 14:46
|
* @date 2025/4/23 14:46
|
||||||
*/
|
*/
|
||||||
void updateTower(ProProgressVo.UpdateRecordVo vo);
|
void updateTower(ProProgressVo.UpdateRecordVo vo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 杆塔基础开挖完成后,自动生成A腿B腿C腿D腿
|
||||||
|
* @param vo
|
||||||
|
* @return void
|
||||||
|
* @author cwchen
|
||||||
|
* @date 2025/5/19 13:35
|
||||||
|
*/
|
||||||
|
void addTowerPouring(ProProgressVo.UpdateRecordVo vo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新杆塔基础浇筑A、B、C、D四个腿的数据
|
||||||
|
* @param vo
|
||||||
|
* @return void
|
||||||
|
* @author cwchen
|
||||||
|
* @date 2025/5/19 14:44
|
||||||
|
*/
|
||||||
|
void updatetTowerPouring(ProProgressVo.UpdateRecordVo vo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询已经完成4个腿都浇筑完成的杆塔
|
||||||
|
* @param list
|
||||||
|
* @return List<Long>
|
||||||
|
* @author cwchen
|
||||||
|
* @date 2025/5/19 14:52
|
||||||
|
*/
|
||||||
|
List<Long> getTowerPouring(List<Long> list);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,7 @@ import lombok.Data;
|
||||||
import javax.validation.constraints.NotBlank;
|
import javax.validation.constraints.NotBlank;
|
||||||
import javax.validation.constraints.NotNull;
|
import javax.validation.constraints.NotNull;
|
||||||
import javax.validation.constraints.Size;
|
import javax.validation.constraints.Size;
|
||||||
import java.util.Date;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @className:ProProgressVo
|
* @className:ProProgressVo
|
||||||
|
|
@ -109,33 +107,42 @@ public class ProProgressVo {
|
||||||
*/
|
*/
|
||||||
private double proProgress;
|
private double proProgress;
|
||||||
/**
|
/**
|
||||||
* 基础开挖
|
* 协调完成
|
||||||
*/
|
*/
|
||||||
private int num1;
|
private int num1;
|
||||||
/**
|
/**
|
||||||
* 基础开挖完成
|
* 基础开挖
|
||||||
*/
|
*/
|
||||||
private int num2;
|
private int num2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 基础浇筑完成
|
* 基础开挖完成
|
||||||
*/
|
*/
|
||||||
private int num3;
|
private int num3;
|
||||||
/**
|
/**
|
||||||
* 铁塔组立
|
* 基础浇筑
|
||||||
*/
|
*/
|
||||||
private int num4;
|
private int num4;
|
||||||
/**
|
/**
|
||||||
* 铁塔组立完成
|
* 基础浇筑完成
|
||||||
*/
|
* */
|
||||||
private int num5;
|
private int num5;
|
||||||
/**
|
/**
|
||||||
* 架线施工完成
|
* 铁塔组立
|
||||||
*/
|
*/
|
||||||
private int num6;
|
private int num6;
|
||||||
/**
|
/**
|
||||||
* 附件安装完成
|
* 铁塔组立完成
|
||||||
*/
|
*/
|
||||||
private int num7;
|
private int num7;
|
||||||
|
/**
|
||||||
|
* 架线施工完成
|
||||||
|
*/
|
||||||
|
private int num8;
|
||||||
|
/**
|
||||||
|
* 附件安装完成
|
||||||
|
*/
|
||||||
|
private int num9;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
|
@ -193,7 +200,7 @@ public class ProProgressVo {
|
||||||
* 工序类型 1.基础开挖 2.基础开挖完成 3.基础浇筑完成 4.铁塔组立 5.铁塔组立完成 6.架线施工完成 7.附件安装完成
|
* 工序类型 1.基础开挖 2.基础开挖完成 3.基础浇筑完成 4.铁塔组立 5.铁塔组立完成 6.架线施工完成 7.附件安装完成
|
||||||
*/
|
*/
|
||||||
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
|
@JsonProperty(access = JsonProperty.Access.WRITE_ONLY)
|
||||||
private int progressType;
|
private Integer progressType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 创建人id
|
* 创建人id
|
||||||
|
|
@ -215,6 +222,13 @@ public class ProProgressVo {
|
||||||
@Size(min = 1, message = "至少选择一个杆塔数据", groups = {Update.class})
|
@Size(min = 1, message = "至少选择一个杆塔数据", groups = {Update.class})
|
||||||
private List<Long> towerIds;
|
private List<Long> towerIds;
|
||||||
|
|
||||||
|
private List<Long> towerLegIds = new ArrayList<>();
|
||||||
|
|
||||||
|
private List<TowerDetailVo> towerDetailVos;
|
||||||
|
|
||||||
|
/**杆塔腿*/
|
||||||
|
private List<String> innerLoops = Arrays.asList("A", "B", "C", "D");
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 修改条件限制
|
* 修改条件限制
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ import com.bonus.digitalSignage.backstage.service.ProProgressService;
|
||||||
import com.bonus.digitalSignage.utils.ServerResponse;
|
import com.bonus.digitalSignage.utils.ServerResponse;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.apache.commons.collections4.CollectionUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.poi.ss.usermodel.Workbook;
|
import org.apache.poi.ss.usermodel.Workbook;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
@ -88,6 +89,9 @@ public class ProProgressServiceImpl implements ProProgressService {
|
||||||
vo.setNum5(vo2.getNum5());
|
vo.setNum5(vo2.getNum5());
|
||||||
vo.setNum6(vo2.getNum6());
|
vo.setNum6(vo2.getNum6());
|
||||||
vo.setNum7(vo2.getNum7());
|
vo.setNum7(vo2.getNum7());
|
||||||
|
vo.setNum7(vo2.getNum7());
|
||||||
|
vo.setNum8(vo2.getNum8());
|
||||||
|
vo.setNum9(vo2.getNum9());
|
||||||
return ServerResponse.createSuccess(vo);
|
return ServerResponse.createSuccess(vo);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.toString(), e);
|
log.error(e.toString(), e);
|
||||||
|
|
@ -153,14 +157,34 @@ public class ProProgressServiceImpl implements ProProgressService {
|
||||||
List<Long> progressAndTowers = Optional.ofNullable(dao.getNowProProgress(vo)).orElseGet(ArrayList::new);
|
List<Long> progressAndTowers = Optional.ofNullable(dao.getNowProProgress(vo)).orElseGet(ArrayList::new);
|
||||||
Long finishTowerNum = progressAndTowers.get(0);
|
Long finishTowerNum = progressAndTowers.get(0);
|
||||||
Long towerNum = progressAndTowers.get(1);
|
Long towerNum = progressAndTowers.get(1);
|
||||||
|
// 杆塔基础开挖完成后,自动生成A腿B腿C腿D腿
|
||||||
|
if (vo.getProgressType() == 3) {
|
||||||
|
dao.addTowerPouring(vo);
|
||||||
|
}
|
||||||
|
// 工序进度为基础浇筑时
|
||||||
|
if (vo.getProgressType() == 4) {
|
||||||
|
// 更新杆塔基础浇筑A、B、C、D四个腿的数据
|
||||||
|
dao.updatetTowerPouring(vo);
|
||||||
|
// 查询已经完成4个腿都浇筑完成的杆塔
|
||||||
|
Set<Long> set = new HashSet<>(vo.getTowerIds());
|
||||||
|
List<Long> distinctList = new ArrayList<>(set);
|
||||||
|
List<Long> towerPourings = Optional.ofNullable(dao.getTowerPouring(distinctList)).orElseGet(ArrayList::new);
|
||||||
|
vo.setTowerLegIds(towerPourings);
|
||||||
|
}
|
||||||
// 计算更新后的进度
|
// 计算更新后的进度
|
||||||
double progress = handleProgress(finishTowerNum, towerNum, vo.getTowerIds().size());
|
double progress = handleProgress(finishTowerNum, towerNum, vo.getProgressType() != 4 ? vo.getTowerIds().size():vo.getTowerLegIds().size());
|
||||||
vo.setFinishProgress(progress);
|
vo.setFinishProgress(progress);
|
||||||
// 添加杆塔进度、杆塔进度关系表、更新工程整体进度、更新杆塔进度
|
// 添加杆塔进度、杆塔进度关系表、更新工程整体进度、更新杆塔进度
|
||||||
dao.addProgress(vo);
|
dao.addProgress(vo);
|
||||||
dao.addTowerProgress(vo);
|
if (vo.getProgressType() == 4 && CollectionUtils.isNotEmpty(vo.getTowerLegIds())) {
|
||||||
|
dao.addTowerProgress(vo);
|
||||||
|
dao.updateTower(vo);
|
||||||
|
}
|
||||||
|
if (vo.getProgressType() != 4) {
|
||||||
|
dao.addTowerProgress(vo);
|
||||||
|
dao.updateTower(vo);
|
||||||
|
}
|
||||||
dao.updateProProgress(vo);
|
dao.updateProProgress(vo);
|
||||||
dao.updateTower(vo);
|
|
||||||
return ServerResponse.createBySuccessMsg("操作成功");
|
return ServerResponse.createBySuccessMsg("操作成功");
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error(e.toString(), e);
|
log.error(e.toString(), e);
|
||||||
|
|
@ -171,6 +195,7 @@ public class ProProgressServiceImpl implements ProProgressService {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 计算进度
|
* 计算进度
|
||||||
|
*
|
||||||
* @param nowProgress
|
* @param nowProgress
|
||||||
* @param towerNum
|
* @param towerNum
|
||||||
* @param towerNum2
|
* @param towerNum2
|
||||||
|
|
@ -180,7 +205,7 @@ public class ProProgressServiceImpl implements ProProgressService {
|
||||||
*/
|
*/
|
||||||
public static double handleProgress(Long nowProgress, Long towerNum, int towerNum2) {
|
public static double handleProgress(Long nowProgress, Long towerNum, int towerNum2) {
|
||||||
BigDecimal bigDecimal = BigDecimal.valueOf(nowProgress + (long) towerNum2).multiply(BigDecimal.valueOf(100));
|
BigDecimal bigDecimal = BigDecimal.valueOf(nowProgress + (long) towerNum2).multiply(BigDecimal.valueOf(100));
|
||||||
BigDecimal bigDecimal2 = BigDecimal.valueOf(towerNum * 7);
|
BigDecimal bigDecimal2 = BigDecimal.valueOf(towerNum * 9);
|
||||||
BigDecimal result = bigDecimal.divide(bigDecimal2, 2, RoundingMode.HALF_UP);
|
BigDecimal result = bigDecimal.divide(bigDecimal2, 2, RoundingMode.HALF_UP);
|
||||||
return result.doubleValue();
|
return result.doubleValue();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -21,11 +21,32 @@
|
||||||
</insert>
|
</insert>
|
||||||
<!--杆塔进度关系表-->
|
<!--杆塔进度关系表-->
|
||||||
<insert id="addTowerProgress">
|
<insert id="addTowerProgress">
|
||||||
INSERT INTO tb_tower_progress(tower_id,progress_id,progress_type,pro_id) VALUES
|
<if test="progressType == 4">
|
||||||
|
INSERT INTO tb_tower_progress(tower_id,progress_id,progress_type,pro_id) VALUES
|
||||||
|
<foreach collection="towerLegIds" separator="," item="item">
|
||||||
|
(
|
||||||
|
#{item},#{dataId},#{progressType},#{id}
|
||||||
|
)
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="progressType != 4">
|
||||||
|
INSERT INTO tb_tower_progress(tower_id,progress_id,progress_type,pro_id) VALUES
|
||||||
|
<foreach collection="towerIds" separator="," item="item">
|
||||||
|
(
|
||||||
|
#{item},#{dataId},#{progressType},#{id}
|
||||||
|
)
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
</insert>
|
||||||
|
<!--杆塔基础开挖完成后,自动生成A腿B腿C腿D腿-->
|
||||||
|
<insert id="addTowerPouring">
|
||||||
|
INSERT INTO tb_tower_pouring(tower_id,leg,finish_status) VALUES
|
||||||
<foreach collection="towerIds" separator="," item="item">
|
<foreach collection="towerIds" separator="," item="item">
|
||||||
(
|
<foreach item="innerItem" collection="innerLoops" separator=",">
|
||||||
#{item},#{dataId},#{progressType},#{id}
|
(
|
||||||
)
|
${item},#{innerItem},0
|
||||||
|
)
|
||||||
|
</foreach>
|
||||||
</foreach>
|
</foreach>
|
||||||
</insert>
|
</insert>
|
||||||
<!--更新工程整体进度-->
|
<!--更新工程整体进度-->
|
||||||
|
|
@ -35,11 +56,30 @@
|
||||||
</update>
|
</update>
|
||||||
<!--更新杆塔进度-->
|
<!--更新杆塔进度-->
|
||||||
<update id="updateTower">
|
<update id="updateTower">
|
||||||
<foreach collection="towerIds" item="item" index="index" separator=";">
|
<if test="progressType == 4">
|
||||||
UPDATE tb_tower
|
<foreach collection="towerLegIds" item="item" index="index" separator=";">
|
||||||
|
UPDATE tb_tower
|
||||||
|
SET
|
||||||
|
tower_progress = #{progressType}
|
||||||
|
WHERE id = #{item}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
<if test="progressType != 4">
|
||||||
|
<foreach collection="towerIds" item="item" index="index" separator=";">
|
||||||
|
UPDATE tb_tower
|
||||||
|
SET
|
||||||
|
tower_progress = #{progressType}
|
||||||
|
WHERE id = #{item}
|
||||||
|
</foreach>
|
||||||
|
</if>
|
||||||
|
</update>
|
||||||
|
<!--更新杆塔基础浇筑A、B、C、D四个腿的数据-->
|
||||||
|
<update id="updatetTowerPouring">
|
||||||
|
<foreach collection="towerDetailVos" item="item" index="index" separator=";">
|
||||||
|
UPDATE tb_tower_pouring
|
||||||
SET
|
SET
|
||||||
tower_progress = #{progressType}
|
finish_status = '1'
|
||||||
WHERE id = #{item}
|
WHERE tower_id = #{item.id} AND leg = #{item.towerName}
|
||||||
</foreach>
|
</foreach>
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
|
|
@ -132,6 +172,8 @@
|
||||||
COUNT(IF(tower_progress >= 5, 1, NULL)) AS num5,
|
COUNT(IF(tower_progress >= 5, 1, NULL)) AS num5,
|
||||||
COUNT(IF(tower_progress >= 6, 1, NULL)) AS num6,
|
COUNT(IF(tower_progress >= 6, 1, NULL)) AS num6,
|
||||||
COUNT(IF(tower_progress >= 7, 1, NULL)) AS num7,
|
COUNT(IF(tower_progress >= 7, 1, NULL)) AS num7,
|
||||||
|
COUNT(IF(tower_progress >= 8, 1, NULL)) AS num8,
|
||||||
|
COUNT(IF(tower_progress >= 9, 1, NULL)) AS num9,
|
||||||
COUNT(*) AS towerNum
|
COUNT(*) AS towerNum
|
||||||
FROM tb_tower WHERE pro_id = #{id} AND is_actvice = '1'
|
FROM tb_tower WHERE pro_id = #{id} AND is_actvice = '1'
|
||||||
</select>
|
</select>
|
||||||
|
|
@ -152,18 +194,50 @@
|
||||||
<select id="getGxData"
|
<select id="getGxData"
|
||||||
resultType="com.bonus.digitalSignage.backstage.entity.vo.ProProgressVo$TowerDetailVo">
|
resultType="com.bonus.digitalSignage.backstage.entity.vo.ProProgressVo$TowerDetailVo">
|
||||||
SELECT * FROM (
|
SELECT * FROM (
|
||||||
SELECT id,
|
SELECT tt.id,
|
||||||
tower_name AS towerName,
|
<if test="type == 4">
|
||||||
|
CONCAT(tt.tower_name,'-',ttp.leg) AS towerName,
|
||||||
|
ttp.leg,
|
||||||
|
</if>
|
||||||
|
<if test="type != 4">
|
||||||
|
tt.tower_name AS towerName,
|
||||||
|
0 AS leg,
|
||||||
|
</if>
|
||||||
1 AS chooseStatus,
|
1 AS chooseStatus,
|
||||||
sort
|
tt.sort
|
||||||
FROM tb_tower WHERE pro_id = #{id} AND tower_progress = #{type} - 1 AND is_actvice = '1'
|
FROM tb_tower tt
|
||||||
|
<if test="type == 4">
|
||||||
|
LEFT JOIN tb_tower_pouring ttp ON tt.id = ttp.tower_id AND tt.tower_progress = 3
|
||||||
|
</if>
|
||||||
|
WHERE tt.pro_id = #{id} AND tt.tower_progress = #{type} - 1 AND tt.is_actvice = '1'
|
||||||
|
<if test="type == 4">
|
||||||
|
AND ttp.finish_status = '0'
|
||||||
|
</if>
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT id,
|
SELECT tt.id,
|
||||||
tower_name AS towerName,
|
<if test="type == 4">
|
||||||
|
CONCAT(tt.tower_name,'-',ttp.leg) AS towerName,
|
||||||
|
ttp.leg,
|
||||||
|
</if>
|
||||||
|
<if test="type != 4">
|
||||||
|
tt.tower_name AS towerName,
|
||||||
|
0 AS leg,
|
||||||
|
</if>
|
||||||
0 AS chooseStatus,
|
0 AS chooseStatus,
|
||||||
sort
|
tt.sort
|
||||||
FROM tb_tower WHERE pro_id = #{id} AND tower_progress >= #{type} AND is_actvice = '1'
|
FROM tb_tower tt
|
||||||
) A ORDER BY sort
|
<if test="type == 4">
|
||||||
|
LEFT JOIN tb_tower_pouring ttp ON tt.id = ttp.tower_id AND tt.tower_progress = 3
|
||||||
|
</if>
|
||||||
|
WHERE tt.pro_id = #{id} AND tt.is_actvice = '1'
|
||||||
|
<if test="type != 4">
|
||||||
|
AND tt.tower_progress >= #{type}
|
||||||
|
</if>
|
||||||
|
<if test="type == 4">
|
||||||
|
AND tt.tower_progress = #{type} - 1
|
||||||
|
AND ttp.finish_status = '1'
|
||||||
|
</if>
|
||||||
|
) A ORDER BY sort,leg
|
||||||
</select>
|
</select>
|
||||||
<!--查询杆塔进度是否被重复更新-->
|
<!--查询杆塔进度是否被重复更新-->
|
||||||
<select id="getIsRepeatUpdate" resultType="java.lang.Integer">
|
<select id="getIsRepeatUpdate" resultType="java.lang.Integer">
|
||||||
|
|
@ -184,4 +258,16 @@
|
||||||
FROM tb_tower
|
FROM tb_tower
|
||||||
WHERE pro_id = #{id} AND is_actvice = '1'
|
WHERE pro_id = #{id} AND is_actvice = '1'
|
||||||
</select>
|
</select>
|
||||||
|
<!--查询已经完成4个腿都浇筑完成的杆塔-->
|
||||||
|
<select id="getTowerPouring" resultType="java.lang.Long">
|
||||||
|
SELECT ttp.tower_id AS towerId
|
||||||
|
FROM tb_tower_pouring ttp
|
||||||
|
WHERE ttp.tower_id IN
|
||||||
|
<foreach collection="list" item="towerId" open="(" separator="," close=")">
|
||||||
|
#{towerId}
|
||||||
|
</foreach>
|
||||||
|
AND ttp.finish_status = '1'
|
||||||
|
GROUP BY ttp.tower_id
|
||||||
|
HAVING COUNT(DISTINCT ttp.leg) = 4
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ body {
|
||||||
.num-box {
|
.num-box {
|
||||||
width: 10%;
|
width: 10%;
|
||||||
height: 100%;
|
height: 100%;
|
||||||
margin-right: 2%;
|
/*margin-right: 1%;*/
|
||||||
justify-content: space-around;
|
justify-content: space-around;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -112,6 +112,13 @@ body {
|
||||||
color: #00bfbf;
|
color: #00bfbf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.num-box:nth-child(9) > p:nth-child(2) {
|
||||||
|
color: #13227a;
|
||||||
|
}
|
||||||
|
.num-box:nth-child(10) > p:nth-child(2) {
|
||||||
|
color: #1afa29;
|
||||||
|
}
|
||||||
|
|
||||||
.layui-tab-brief > .layui-tab-title .layui-this {
|
.layui-tab-brief > .layui-tab-title .layui-this {
|
||||||
color: #409eff;
|
color: #409eff;
|
||||||
}
|
}
|
||||||
|
|
@ -191,6 +198,10 @@ body {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.tower-info p{
|
||||||
|
padding: 0 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.biddenChoose{
|
.biddenChoose{
|
||||||
background-color: #ffff00;
|
background-color: #ffff00;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 375 B After Width: | Height: | Size: 339 B |
|
Before Width: | Height: | Size: 433 B After Width: | Height: | Size: 338 B |
|
Before Width: | Height: | Size: 436 B After Width: | Height: | Size: 343 B |
|
Before Width: | Height: | Size: 408 B After Width: | Height: | Size: 319 B |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 358 B |
|
Before Width: | Height: | Size: 405 B After Width: | Height: | Size: 317 B |
|
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 300 B |
|
After Width: | Height: | Size: 356 B |
|
After Width: | Height: | Size: 347 B |
|
|
@ -19,6 +19,9 @@ function setParams(params) {
|
||||||
// $('.coordinate-option[data-system="WGS-84"]').addClass('active').trigger('click');
|
// $('.coordinate-option[data-system="WGS-84"]').addClass('active').trigger('click');
|
||||||
$('#wgs84Fields').show();
|
$('#wgs84Fields').show();
|
||||||
$('#2000Fields').hide();
|
$('#2000Fields').hide();
|
||||||
|
$('input[name="centralMeridian"]').removeAttr('lay-verify');
|
||||||
|
$('input[name="longitude2000"]').removeAttr('lay-verify');
|
||||||
|
$('input[name="latitude2000"]').removeAttr('lay-verify');
|
||||||
// 设置验证规则
|
// 设置验证规则
|
||||||
/* $('input[name^="longitude2000"], input[name^="latitude2000"], input[name="centralMeridian"]').removeAttr('lay-verify');
|
/* $('input[name^="longitude2000"], input[name^="latitude2000"], input[name="centralMeridian"]').removeAttr('lay-verify');
|
||||||
$('input[name="longitude"]').attr('lay-verify', 'required|longitude');
|
$('input[name="longitude"]').attr('lay-verify', 'required|longitude');
|
||||||
|
|
@ -44,6 +47,7 @@ function setParams(params) {
|
||||||
$('input[name="longitude"]').attr('lay-verify', 'required|longitude');
|
$('input[name="longitude"]').attr('lay-verify', 'required|longitude');
|
||||||
$('input[name="latitude"]').attr('lay-verify', 'required|latitude');
|
$('input[name="latitude"]').attr('lay-verify', 'required|latitude');
|
||||||
// $('input[name="longitude"], input[name="latitude"]').attr('lay-verify', 'required|number');
|
// $('input[name="longitude"], input[name="latitude"]').attr('lay-verify', 'required|number');
|
||||||
|
$('input[name="centralMeridian"]').removeAttr('lay-verify');
|
||||||
} else {
|
} else {
|
||||||
$('#wgs84Fields').hide();
|
$('#wgs84Fields').hide();
|
||||||
$('#2000Fields').show();
|
$('#2000Fields').show();
|
||||||
|
|
|
||||||
|
|
@ -92,42 +92,52 @@ function initTable(dataList, limit, page) {
|
||||||
return (page - 1) * limit + d.LAY_NUM;
|
return (page - 1) * limit + d.LAY_NUM;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{field: "towerName", title: "杆塔", width: "18%", unresize: true, align: "center"},
|
{field: "towerName", title: "杆塔", width: "14%", unresize: true, align: "center"},
|
||||||
{title: "基础开挖",width: "10%",unresize: true,align: "center",
|
{title: "协调完成",width: "10%",unresize: true,align: "center",
|
||||||
templet: function (d) {
|
templet: function (d) {
|
||||||
return setTowerProgress(d.towerProgress,1);
|
return setTowerProgress(d.towerProgress,1);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{title: "基础开挖完成",width: "11%",unresize: true,align: "center",
|
{title: "基础开挖",width: "9%",unresize: true,align: "center",
|
||||||
templet: function (d) {
|
templet: function (d) {
|
||||||
return setTowerProgress(d.towerProgress,2);
|
return setTowerProgress(d.towerProgress,2);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{title: "基础浇筑完成",width: "11%",unresize: true,align: "center",
|
{title: "基础开挖完成",width: "9%",unresize: true,align: "center",
|
||||||
templet: function (d) {
|
templet: function (d) {
|
||||||
return setTowerProgress(d.towerProgress,3);
|
return setTowerProgress(d.towerProgress,3);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{title: "铁塔组立",width: "11%",unresize: true,align: "center",
|
{title: "基础浇筑",width: "9%",unresize: true,align: "center",
|
||||||
templet: function (d) {
|
templet: function (d) {
|
||||||
return setTowerProgress(d.towerProgress,4);
|
return setTowerProgress(d.towerProgress,4);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{title: "铁塔组立完成",width: "11%",unresize: true,align: "center",
|
{title: "基础浇筑完成",width: "9%",unresize: true,align: "center",
|
||||||
templet: function (d) {
|
templet: function (d) {
|
||||||
return setTowerProgress(d.towerProgress,5);
|
return setTowerProgress(d.towerProgress,5);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{title: "架线施工完成",width: "11%",unresize: true,align: "center",
|
{title: "铁塔组立",width: "9%",unresize: true,align: "center",
|
||||||
templet: function (d) {
|
templet: function (d) {
|
||||||
return setTowerProgress(d.towerProgress,6);
|
return setTowerProgress(d.towerProgress,6);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{title: "附件安装完成",width: "11%",unresize: true,align: "center",
|
{title: "铁塔组立完成",width: "9%",unresize: true,align: "center",
|
||||||
templet: function (d) {
|
templet: function (d) {
|
||||||
return setTowerProgress(d.towerProgress,7);
|
return setTowerProgress(d.towerProgress,7);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{title: "架线施工完成",width: "9%",unresize: true,align: "center",
|
||||||
|
templet: function (d) {
|
||||||
|
return setTowerProgress(d.towerProgress,8);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{title: "附件安装完成",width: "9%",unresize: true,align: "center",
|
||||||
|
templet: function (d) {
|
||||||
|
return setTowerProgress(d.towerProgress,9);
|
||||||
|
}
|
||||||
|
},
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
done: function (res, curr, count) {
|
done: function (res, curr, count) {
|
||||||
|
|
@ -186,6 +196,10 @@ function setTowerProgress(value,type){
|
||||||
html = '<img src="../../img/synthesisQuery/num6.png" alt="">'
|
html = '<img src="../../img/synthesisQuery/num6.png" alt="">'
|
||||||
}else if(value >= 7 && type === 7){
|
}else if(value >= 7 && type === 7){
|
||||||
html = '<img src="../../img/synthesisQuery/num7.png" alt="">'
|
html = '<img src="../../img/synthesisQuery/num7.png" alt="">'
|
||||||
|
}else if(value >= 8 && type === 8){
|
||||||
|
html = '<img src="../../img/synthesisQuery/num8.png" alt="">'
|
||||||
|
}else if(value >= 9 && type === 9){
|
||||||
|
html = '<img src="../../img/synthesisQuery/num9.png" alt="">'
|
||||||
}else {
|
}else {
|
||||||
html = '';
|
html = '';
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ function initSetProData() {
|
||||||
let url = dataUrl + "/backstage/proProgress/detailQuery"
|
let url = dataUrl + "/backstage/proProgress/detailQuery"
|
||||||
let obj = {
|
let obj = {
|
||||||
id: objParams.id,
|
id: objParams.id,
|
||||||
departId:objParams.departId
|
departId: objParams.departId
|
||||||
}
|
}
|
||||||
let params = {
|
let params = {
|
||||||
encryptedData: encryptCBC(JSON.stringify(obj))
|
encryptedData: encryptCBC(JSON.stringify(obj))
|
||||||
|
|
@ -25,7 +25,7 @@ function initSetProData() {
|
||||||
$('#companyName').html(obj.companyName);
|
$('#companyName').html(obj.companyName);
|
||||||
$('#proStatus').html('<span style="color: #51d351;"> ● </span>' + obj.proStatus);
|
$('#proStatus').html('<span style="color: #51d351;"> ● </span>' + obj.proStatus);
|
||||||
$('#voltageLevel').html(obj.voltageLevel);
|
$('#voltageLevel').html(obj.voltageLevel);
|
||||||
$('#lineLength').html((obj.lineLength || '/') + 'km');
|
$('#lineLength').html((obj.lineLength || '/') + 'km');
|
||||||
$('#towerNum').html(obj.towerNum);
|
$('#towerNum').html(obj.towerNum);
|
||||||
$('#towerNum2').html(obj.towerNum);
|
$('#towerNum2').html(obj.towerNum);
|
||||||
$('#planStartTime').html(obj.planStartTime);
|
$('#planStartTime').html(obj.planStartTime);
|
||||||
|
|
@ -36,7 +36,7 @@ function initSetProData() {
|
||||||
<div class="layui-progress-bar layui-bg-blue" lay-percent="${obj.proProgress}%"></div>
|
<div class="layui-progress-bar layui-bg-blue" lay-percent="${obj.proProgress}%"></div>
|
||||||
</div>
|
</div>
|
||||||
`);
|
`);
|
||||||
for (let i = 1; i <= 7 ; i++) {
|
for (let i = 1; i <= 9; i++) {
|
||||||
$('#num' + i).html(obj['num' + i]);
|
$('#num' + i).html(obj['num' + i]);
|
||||||
}
|
}
|
||||||
element.render();
|
element.render();
|
||||||
|
|
@ -44,7 +44,7 @@ function initSetProData() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**更新记录*/
|
/**更新记录*/
|
||||||
function setUpdateRecord(){
|
function setUpdateRecord() {
|
||||||
let url = dataUrl + "/backstage/proProgress/updateRecord"
|
let url = dataUrl + "/backstage/proProgress/updateRecord"
|
||||||
let obj = {
|
let obj = {
|
||||||
id: objParams.id
|
id: objParams.id
|
||||||
|
|
@ -65,6 +65,7 @@ function setUpdateRecord(){
|
||||||
layer.close(loadingMsg);
|
layer.close(loadingMsg);
|
||||||
error(xhr)
|
error(xhr)
|
||||||
});
|
});
|
||||||
|
|
||||||
function setUpdateRecordInfo(list, obj) {
|
function setUpdateRecordInfo(list, obj) {
|
||||||
let html = '';
|
let html = '';
|
||||||
if (list && list.length > 0) {
|
if (list && list.length > 0) {
|
||||||
|
|
@ -111,7 +112,7 @@ function setUpdateProData(value) {
|
||||||
let url = dataUrl + "/backstage/proProgress/getGxData"
|
let url = dataUrl + "/backstage/proProgress/getGxData"
|
||||||
let obj = {
|
let obj = {
|
||||||
id: objParams.id,
|
id: objParams.id,
|
||||||
type:value
|
type: value
|
||||||
}
|
}
|
||||||
let params = {
|
let params = {
|
||||||
encryptedData: encryptCBC(JSON.stringify(obj))
|
encryptedData: encryptCBC(JSON.stringify(obj))
|
||||||
|
|
@ -134,60 +135,65 @@ function setUpdateProData(value) {
|
||||||
let obj = data.vo;
|
let obj = data.vo;
|
||||||
let list = data.list;
|
let list = data.list;
|
||||||
$('#towerNum2').html(obj.towerNum);
|
$('#towerNum2').html(obj.towerNum);
|
||||||
for (let i = 1; i <= 7 ; i++) {
|
for (let i = 1; i <= 9; i++) {
|
||||||
$('#num' + i).html(obj['num' + i]);
|
$('#num' + i).html(obj['num' + i]);
|
||||||
}
|
}
|
||||||
let html = '';
|
let html = '';
|
||||||
$.each(list,function (index,item) {
|
$.each(list, function (index, item) {
|
||||||
if(item.chooseStatus === 1){
|
if (item.chooseStatus === 1) {
|
||||||
html += '<div class="tower-info layout" dataId="'+item.id+'" onclick="chooseData(this)"><p>'+item.towerName+'</p></div>';
|
html += '<div class="tower-info layout" dataId="' + item.id + '" towerName="' + item.towerName + '" onclick="chooseData(this)"><p>' + item.towerName + '</p></div>';
|
||||||
}else if(item.chooseStatus === 0){
|
} else if (item.chooseStatus === 0) {
|
||||||
html += '<div class="tower-info layout biddenChoose" dataId="'+item.id+'"><p>'+item.towerName+'</p></div>';
|
html += '<div class="tower-info layout biddenChoose" dataId="' + item.id + '" towerName="' + item.towerName + '"><p>' + item.towerName + '</p></div>';
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
$('.tower-box').empty().append(html);
|
$('.tower-box').empty().append(html);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function chooseData(that){
|
function chooseData(that) {
|
||||||
let towerName = $(that).find('p').eq(0).html();
|
let towerName = $(that).find('p').eq(0).html();
|
||||||
if($(that).hasClass('choose')){
|
if ($(that).hasClass('choose')) {
|
||||||
$(that).removeClass('choose');
|
$(that).removeClass('choose');
|
||||||
let oldData = $('#updateDesc').val();
|
let oldData = $('#updateDesc').val();
|
||||||
let dataArr = oldData.split(';');
|
let dataArr = oldData.split(';');
|
||||||
const filteredArray = dataArr.filter(item => !item.includes(towerName));
|
const filteredArray = dataArr.filter(item => !item.includes(towerName));
|
||||||
$('#updateDesc').val(filteredArray.join(';'));
|
$('#updateDesc').val(filteredArray.join(';'));
|
||||||
}else{
|
} else {
|
||||||
$(that).addClass('choose');
|
$(that).addClass('choose');
|
||||||
let oldData = $('#updateDesc').val();
|
let oldData = $('#updateDesc').val();
|
||||||
let value = getTypeName(towerName);
|
let value = getTypeName(towerName);
|
||||||
$('#updateDesc').val(oldData + value);
|
$('#updateDesc').val(oldData + value);
|
||||||
}
|
}
|
||||||
|
|
||||||
function getTypeName(towerName){
|
function getTypeName(towerName) {
|
||||||
if(checkType === 1){
|
if (checkType === 1) {
|
||||||
|
return towerName + '-' + '协调完成;';
|
||||||
|
} else if (checkType === 2) {
|
||||||
return towerName + '-' + '基础开挖;';
|
return towerName + '-' + '基础开挖;';
|
||||||
}else if(checkType === 2){
|
} else if (checkType === 3) {
|
||||||
return towerName + '-' + '基础开挖完成;';
|
return towerName + '-' + '基础开挖完成;';
|
||||||
}else if(checkType === 3){
|
}else if (checkType === 4) {
|
||||||
|
return towerName + '-' + '基础浇筑;';
|
||||||
|
} else if (checkType === 5) {
|
||||||
return towerName + '-' + '基础浇筑完成;';
|
return towerName + '-' + '基础浇筑完成;';
|
||||||
}else if(checkType === 4){
|
} else if (checkType === 6) {
|
||||||
return towerName + '-' + '铁塔组立;';
|
return towerName + '-' + '铁塔组立;';
|
||||||
}else if(checkType === 5){
|
} else if (checkType === 7) {
|
||||||
return towerName + '-' + '铁塔组立完成;';
|
return towerName + '-' + '铁塔组立完成;';
|
||||||
}else if(checkType === 6){
|
} else if (checkType === 8) {
|
||||||
return towerName + '-' + '架线施工完成;';
|
return towerName + '-' + '架线施工完成;';
|
||||||
}else if(checkType === 7){
|
} else if (checkType === 9) {
|
||||||
return towerName + '-' + '附件安装完成;';
|
return towerName + '-' + '附件安装完成;';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 更新项目保存数据
|
// 更新项目保存数据
|
||||||
function saveData(data,towers) {
|
function saveData(data, towers, towerNames) {
|
||||||
let url = dataUrl + "/backstage/proProgress/updateProgressData";
|
let url = dataUrl + "/backstage/proProgress/updateProgressData";
|
||||||
let paramsObj = data.field;
|
let paramsObj = data.field;
|
||||||
paramsObj.towerIds = towers;
|
paramsObj.towerIds = towers;
|
||||||
|
paramsObj.towerDetailVos = towerNames;
|
||||||
paramsObj.id = objParams.id;
|
paramsObj.id = objParams.id;
|
||||||
paramsObj.progressType = checkType;
|
paramsObj.progressType = checkType;
|
||||||
let params = {
|
let params = {
|
||||||
|
|
|
||||||
|
|
@ -17,19 +17,31 @@ function setParams(obj) {
|
||||||
setUpdateProData(1);
|
setUpdateProData(1);
|
||||||
element.render();
|
element.render();
|
||||||
form.on('submit(formData)', function (data) {
|
form.on('submit(formData)', function (data) {
|
||||||
let towers = getChooseData();
|
let towers = getChooseData('dataId');
|
||||||
|
let towerNames = getChooseData('towerName');
|
||||||
if(!towers.length){
|
if(!towers.length){
|
||||||
return layer.msg("请选择杆塔", {icon: 7})
|
return layer.msg("请选择杆塔", {icon: 7})
|
||||||
}
|
}
|
||||||
saveData(data,towers);
|
saveData(data,towers,towerNames);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function getChooseData(){
|
function getChooseData(attr){
|
||||||
let towers = [];
|
let towers = [];
|
||||||
$('.tower-info.choose').each(function(){
|
$('.tower-info.choose').each(function(){
|
||||||
towers.push($(this).attr('dataId'));
|
let value = $(this).attr(attr);
|
||||||
|
if(attr === 'towerName'){
|
||||||
|
const lastDashIndex = value.lastIndexOf("-"); // 找到最后一个 - 的位置
|
||||||
|
const result = value.slice(lastDashIndex + 1); // 从 - 后一位开始截取
|
||||||
|
let obj = {
|
||||||
|
towerName: result,
|
||||||
|
id: $(this).attr('dataId')
|
||||||
|
}
|
||||||
|
towers.push(obj);
|
||||||
|
}else{
|
||||||
|
towers.push(value);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
return towers;
|
return towers;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,33 +79,41 @@
|
||||||
<p id="towerNum2"></p>
|
<p id="towerNum2"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>基础开挖</p>
|
<p>协调完成</p>
|
||||||
<p id="num1">0</p>
|
<p id="num1">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>基础开挖完成</p>
|
<p>基础开挖</p>
|
||||||
<p id="num2">0</p>
|
<p id="num2">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>基础浇筑完成</p>
|
<p>基础开挖完成</p>
|
||||||
<p id="num3">0</p>
|
<p id="num3">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>铁塔组立</p>
|
<p>基础浇筑</p>
|
||||||
<p id="num4">0</p>
|
<p id="num4">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>铁塔组立完成</p>
|
<p>基础浇筑完成</p>
|
||||||
<p id="num5">0</p>
|
<p id="num5">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>架线施工完成</p>
|
<p>铁塔组立</p>
|
||||||
<p id="num6">0</p>
|
<p id="num6">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>附件安装完成</p>
|
<p>铁塔组立完成</p>
|
||||||
<p id="num7">0</p>
|
<p id="num7">0</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="layout num-box">
|
||||||
|
<p>架线施工完成</p>
|
||||||
|
<p id="num8">0</p>
|
||||||
|
</div>
|
||||||
|
<div class="layout num-box">
|
||||||
|
<p>附件安装完成</p>
|
||||||
|
<p id="num9">0</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="table-box" table-responsive style="z-index: 1;">
|
<div class="table-box" table-responsive style="z-index: 1;">
|
||||||
<table id="table_data" class="table" lay-filter="table_data"></table>
|
<table id="table_data" class="table" lay-filter="table_data"></table>
|
||||||
|
|
|
||||||
|
|
@ -30,13 +30,15 @@
|
||||||
<div id="data-box">
|
<div id="data-box">
|
||||||
<div class="layui-tab layui-tab-brief" style="height: 98%;" lay-filter="demo-filter-tab">
|
<div class="layui-tab layui-tab-brief" style="height: 98%;" lay-filter="demo-filter-tab">
|
||||||
<ul class="layui-tab-title" id="layui-tab-title">
|
<ul class="layui-tab-title" id="layui-tab-title">
|
||||||
<li class="layui-this" value="1">基础开挖</li>
|
<li class="layui-this" value="1">协调完成</li>
|
||||||
<li value="2">基础开挖完成</li>
|
<li value="2">基础开挖</li>
|
||||||
<li value="3">基础浇筑完成</li>
|
<li value="3">基础开挖完成</li>
|
||||||
<li value="4">铁塔组立</li>
|
<li value="4">基础浇筑</li>
|
||||||
<li value="5">铁塔组立完成</li>
|
<li value="5">基础浇筑完成</li>
|
||||||
<li value="6">架线施工完成</li>
|
<li value="6">铁塔组立</li>
|
||||||
<li value="7">附件安装完成</li>
|
<li value="7">铁塔组立完成</li>
|
||||||
|
<li value="8">架线施工完成</li>
|
||||||
|
<li value="9">附件安装完成</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="layui-tab-content" style="height: calc(100% - 60px);" id="layui-tab-content">
|
<div class="layui-tab-content" style="height: calc(100% - 60px);" id="layui-tab-content">
|
||||||
<div class="layui-tab-item layui-show">
|
<div class="layui-tab-item layui-show">
|
||||||
|
|
@ -47,33 +49,41 @@
|
||||||
<p id="towerNum2"></p>
|
<p id="towerNum2"></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>基础开挖</p>
|
<p>协调完成</p>
|
||||||
<p id="num1">0</p>
|
<p id="num1">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>基础开挖完成</p>
|
<p>基础开挖</p>
|
||||||
<p id="num2">0</p>
|
<p id="num2">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>基础浇筑完成</p>
|
<p>基础开挖完成</p>
|
||||||
<p id="num3">0</p>
|
<p id="num3">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>铁塔组立</p>
|
<p>基础浇筑</p>
|
||||||
<p id="num4">0</p>
|
<p id="num4">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>铁塔组立完成</p>
|
<p>基础浇筑完成</p>
|
||||||
<p id="num5">0</p>
|
<p id="num5">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>架线施工完成</p>
|
<p>铁塔组立</p>
|
||||||
<p id="num6">0</p>
|
<p id="num6">0</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="layout num-box">
|
<div class="layout num-box">
|
||||||
<p>附件安装完成</p>
|
<p>铁塔组立完成</p>
|
||||||
<p id="num7">0</p>
|
<p id="num7">0</p>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="layout num-box">
|
||||||
|
<p>架线施工完成</p>
|
||||||
|
<p id="num8">0</p>
|
||||||
|
</div>
|
||||||
|
<div class="layout num-box">
|
||||||
|
<p>附件安装完成</p>
|
||||||
|
<p id="num9">0</p>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="tower-box layout">
|
<div class="tower-box layout">
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||