自动化立体仓库 - WMS系统
pang.jiabao
2 天以前 973eed10d720c7dbd0020407c3b89fe1d385944f
wms功能完善
1个文件已添加
1个文件已删除
25个文件已修改
718 ■■■■■ 已修改文件
src/main/java/com/zy/asrs/controller/MesController.java 57 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/RcsController.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/AgvInfo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java 28 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/WorkMastScheduler.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/AdminInterceptor.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/LogAspect.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/config/WebConfig.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/model/LocTypeDto.java 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/service/CommonService.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/utils/HttpHandler.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/param/SearchLocParam.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/system/entity/license/CustomLicenseManager.java 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/system/entity/license/LicenseCheckListener.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application-dev.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/TaskMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/css/main.min.css 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/static/js/taskLog/taskLog.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/taskLog/taskDetlLog.html 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/taskLog/taskLog.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/taskLog/taskLog_detail.html 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/controller/MesController.java
@@ -4,7 +4,6 @@
import com.alibaba.fastjson.JSONObject;
import com.core.annotations.AppAuth;
import com.core.common.Cools;
import com.core.exception.CoolException;
import com.zy.asrs.entity.mes.*;
import com.zy.asrs.service.MesService;
import com.zy.common.web.BaseController;
@@ -41,73 +40,51 @@
        return mesReturn;
    }
    // 出库申请
    @PostMapping("/api/mes/outBoundOrder")
    public MesReturn outBoundOrder(@RequestBody MesOutApply param){
    @AppAuth(memo = "出库申请")
    public MesReturn outBoundOrder(@RequestHeader(required = false) String appkey,@RequestBody MesOutApply param, HttpServletRequest request){
        auth(appkey, param, request);
        MesReturn mesReturn = new MesReturn();
        mesReturn.setSuccess(mesService.outBoundOrder(param) == 1 ? "1" : "2");
        return mesReturn;
    }
    // 出库申请(叫料),装配库、滑块库
    @PostMapping("/api/mes/callOutBoundOrder")
    public MesReturn callOutBoundOrder(@RequestBody MesCallOutApply param){
        MesReturn mesReturn = new MesReturn();
        mesReturn.setSuccess(mesService.callOutBoundOrder(param) == 1 ? "1" : "2");
        return mesReturn;
    }
    // 入库申请
    @PostMapping("/api/mes/inBoundOrder")
    public MesReturn inBoundOrder(@RequestBody MesInApply param){
    @AppAuth(memo = "入库申请")
    public MesReturn inBoundOrder(@RequestHeader(required = false) String appkey,@RequestBody MesInApply param, HttpServletRequest request){
        auth(appkey, param, request);
        MesReturn mesReturn = new MesReturn();
        mesReturn.setSuccess(mesService.inBoundOrder(param) == 1 ? "1" : "2");
        return mesReturn;
    }
    // 入站允许
    @PostMapping("/api/mes/allowInStation")
    public MesReturn allowInStation(@RequestBody TransInOutStationAllow param){
    @AppAuth(memo = "入站允许")
    public MesReturn allowInStation(@RequestHeader(required = false) String appkey,@RequestBody TransInOutStationAllow param, HttpServletRequest request){
        auth(appkey, param, request);
        return mesService.allowInStation(param);
    }
    // 离站允许,装配库、滑块库
    @PostMapping("/api/mes/allowOutStation")
    public MesReturn allowOutStation(@RequestBody TransInOutStationAllow param){
    public MesReturn allowOutStation(@RequestHeader(required = false) String appkey,@RequestBody TransInOutStationAllow param, HttpServletRequest request){
        auth(appkey, param, request);
        return mesService.allowOutStation(param);
    }
    // 下发运输任务
    @PostMapping("/api/mes/submitTask")
    public JSONObject submitTask(@RequestBody TransTask param){
    @AppAuth(memo = "下发运输任务")
    public JSONObject submitTask(@RequestHeader(required = false) String appkey,@RequestBody TransTask param, HttpServletRequest request){
        auth(appkey, param, request);
        return mesService.submitTask(param);
    }
    // region 临时测试
    @GetMapping("/api/mes/testInFeedback")
    public int test(@RequestParam String orderNo){
        return mesService.inFeedback(orderNo);
    }
    @GetMapping("/api/mes/testInFeedback2")
    public int test(@RequestParam String orderNo, @RequestParam String zapplet){
        return mesService.recvFeedback(orderNo, zapplet);
    }
    // endregion
    // 库存查询接口
    // 按 物料编码+oderNo
    @PostMapping("/api/mes/queryInventory")
    public MesReturn queryInventory(@RequestBody JSONObject param){
    @AppAuth(memo = "库存查询接口")
    public MesReturn queryInventory(@RequestHeader(required = false) String appkey,@RequestBody JSONObject param, HttpServletRequest request){
        auth(appkey, param, request);
        MesReturn mesReturn = new MesReturn();
        String itemno = param.getString("itemno");
        String orderNo = param.getString("orderNo");
src/main/java/com/zy/asrs/controller/RcsController.java
@@ -7,6 +7,7 @@
import com.zy.asrs.entity.rcs.RcsReturn;
import com.zy.asrs.service.RcsService;
import com.zy.common.web.BaseController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@@ -14,6 +15,7 @@
import javax.annotation.Resource;
@RestController
@Slf4j
public class RcsController extends BaseController {
    @Resource
@@ -23,7 +25,7 @@
    // 反馈任务执行结果
    @PostMapping("/api/robot/reporter/task")
    public RcsReturn reporterTask(@RequestBody RcsReporterTask param){
        log.info("agv任务执行反馈请求:{}",param.toString());
        return rcsService.reporterTask(param);
    }
src/main/java/com/zy/asrs/entity/AgvInfo.java
@@ -19,7 +19,7 @@
     * 主键,设备编号
     */
    @ApiModelProperty(value= "主键")
    @TableId(value = "agvNo", type = IdType.AUTO)
    @TableId(value = "agv_no", type = IdType.AUTO)
    private String agvNo;
    /**
src/main/java/com/zy/asrs/entity/rcs/RcsTaskSubmit.java
@@ -9,7 +9,7 @@
public class RcsTaskSubmit {
    // 任务类型,枚举值:TRANSPORT搬运。
    private String taskType = "TRANSPORT";
    private String taskType = "CS";
    // 执行步骤集合。本次任务机器人需要执行的关键路径,序号0代表起点,序号1代表终点。
    private List<RcsTaskTargetRoute> targetRoute;
    // 任务唯一编号,如果为空,系统生成任务号并返回。
src/main/java/com/zy/asrs/service/impl/MesServiceImpl.java
@@ -1,23 +1,21 @@
package com.zy.asrs.service.impl;
import com.alibaba.excel.util.DateUtils;
import com.alibaba.excel.util.StringUtils;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.common.Cools;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.mes.*;
import com.zy.asrs.entity.param.CombParam;
import com.zy.asrs.entity.param.EmptyPlateOutParam;
import com.zy.asrs.entity.rcs.*;
import com.zy.asrs.entity.rcs.RcsReporterTask;
import com.zy.asrs.entity.rcs.RcsTaskContinue;
import com.zy.asrs.entity.rcs.RcsTaskSubmit;
import com.zy.asrs.entity.rcs.RcsTaskTargetRoute;
import com.zy.asrs.mapper.AgvInfoMapper;
import com.zy.asrs.mapper.MatItemBarcodeMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.common.model.DetlDto;
import com.zy.common.model.enums.WorkNoType;
import com.zy.common.service.CommonService;
import lombok.extern.slf4j.Slf4j;
@@ -29,9 +27,7 @@
import javax.annotation.Resource;
import java.text.ParseException;
import java.util.*;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@Slf4j
@Service
@@ -108,10 +104,8 @@
        MesReturn mesReturn = new MesReturn();
        // 1、物料信息同步
        int matSuccess = 0;
        for (MesMatInfo mesMatInfo : matRecvForm.getItemdata()) {
            if (synMatInfo(mesMatInfo) == 1) {
                matSuccess++;
            } else {
                throw new CoolException("同步物料信息失败");
            }
@@ -454,7 +448,6 @@
                throw new CoolException("保存出库订单明细档失败");
            }
            // TODO:若AGV和输送线没有安全交互,则要保证立库出货完成后再呼叫AGV。
            // 立库生成订单后,自动调度AGV运送到站点,目前多托生成多个。
            try {
                if (!StringUtils.isEmpty(mesOutApply.getTaskno()) && !StringUtils.isEmpty(mesOutApply.getStationId())) {
@@ -708,7 +701,7 @@
            mesOutFeedback.setStationId(dbMemo.getString("StationId"));
            mesOutFeedback.setItemno(dbMemo.getString("Itemno"));
            mesOutFeedback.setTuoPanId(zpalletId);
            if (itemBarCode != null && itemBarCode.size() > 0) {
            if (itemBarCode.size() > 0) {
                mesOutFeedback.setQty(itemBarCode.size());
                mesOutFeedback.setItemBarcode(itemBarCode);
            }
@@ -1030,6 +1023,14 @@
        // 下发给RCS
        RcsTaskSubmit rcsTaskSubmit = new RcsTaskSubmit();
        // 模板名
        if(transTask.getCurStationId().startsWith("LL") || transTask.getCurStationId().startsWith("LG")) { // 起点产线
            rcsTaskSubmit.setTaskType("CS2");
        } else if(transTask.getNextStationId().startsWith("LL") || transTask.getNextStationId().startsWith("LG")) { // 终点产线
            rcsTaskSubmit.setTaskType("CS");
        } else { // 不涉及产线
            rcsTaskSubmit.setTaskType("CS3");
        }
        rcsTaskSubmit.setRobotTaskCode(transTask.getTaskno());
        rcsTaskSubmit.setInitPriority(10);  //默认10
        List<RcsTaskTargetRoute> targetRouteList = new ArrayList<>();
@@ -1046,8 +1047,7 @@
        rcsTaskSubmit.setTargetRoute(targetRouteList);
        // 转发给海康或华晓RCS
//        int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
        int success = 1;
        int success = rcsService.submitTask(rcsTaskSubmit, transTask.getAgvFactory());
        if (success == 1) {
            int workNo = commonService.getWorkNo(WorkNoType.OTHER.type);
            Date now = new Date();
src/main/java/com/zy/asrs/service/impl/TaskServiceImpl.java
@@ -42,16 +42,12 @@
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }
        if (wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 14) {
        if (wrkMast.getWrkSts() == 304) {
            throw new CoolException("当前工作档已完成");
        }
        // 入库 + 库位转移
        if (wrkMast.getWrkSts() < 4 || (wrkMast.getWrkSts() > 10 && wrkMast.getIoType() == 11)) {
            wrkMast.setWrkSts(4L);
            // 出库
        } else if (wrkMast.getWrkSts() > 10) {
            wrkMast.setWrkSts(14L);
        }
        wrkMast.setWrkSts(304L);
        Date now = new Date();
        wrkMast.setCrnStrTime(DateUtils.calculate(now, 1L, TimeUnit.SECONDS, true));
        wrkMast.setCrnEndTime(now);
@@ -135,117 +131,9 @@
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }
        String locNo = ""; // 待修改目标库位
        String locSts = ""; // 待修改目标库位状态
        // 入库取消(修改目标库位)
        if (wrkMast.getWrkSts() < 4) {
            locNo = wrkMast.getLocNo();
            locSts = "O";
            // 库位转移
            if (wrkMast.getIoType() == 11) {
                // 库位转移:源库位
                LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getSourceLocNo()));
                if (Cools.isEmpty(locMast)) {
                    throw new CoolException("取消库位转移失败,源库位不存在:" + wrkMast.getSourceLocNo());
                }
                locMast.setLocSts(wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F");
                locMast.setModiTime(now);
                locMast.setModiUser(userId);
                locCacheService.updateById(locMast);
            }
            // 出库取消(修改源库位)
        } else if (wrkMast.getWrkSts() > 10 && wrkMast.getWrkSts() != 14) {
            locNo = wrkMast.getSourceLocNo();
            // 出库 ===>> F.在库
            if (wrkMast.getIoType() > 100 && wrkMast.getIoType() != 110) {
                locSts = "F";
                // 空板出库 ===>> D.空桶/空栈板
            } else if (wrkMast.getIoType() == 110) {
                locSts = "D";
                // 库位转移 ===>> D.空桶/空栈板
            } else if (wrkMast.getIoType() == 11) {
//                locSts = wrkMast.getFullPlt().equalsIgnoreCase("N") ? "D" : "F";
//                // 库位转移:目标库位
//                LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", wrkMast.getLocNo()));
//                if (Cools.isEmpty(locMast)) {
//                    throw new CoolException("取消库位转移失败,目标库位不存在:" + wrkMast.getSourceLocNo());
//                }
//                locMast.setLocSts("O");
//                locMast.setModiTime(now);
//                locMast.setModiUser(userId);
//                locCacheService.updateById(locMast);
            }
        } else {
            throw new CoolException("当前工作状态无法取消");
        if(wrkMast.getWrkSts() >= 304) {
            throw new CoolException("工作状态已经完成:" + wrkMast.getWrkSts());
        }
        //取消入库工作档时,查询组托表,如果有将状态改为待处理
        if (wrkMast.getIoType() == 1) {
            List<WaitPakin> waitPakins = waitPakinService.selectList(new EntityWrapper<WaitPakin>().eq("zpallet", wrkMast.getBarcode()));
            for (WaitPakin waitPakin : waitPakins) {
                if (!Cools.isEmpty(waitPakin)) {
                    waitPakin.setIoStatus("N");
                    waitPakin.setLocNo("");
                    waitPakinService.update(waitPakin, new EntityWrapper<WaitPakin>()
//                            .eq("order_no", waitPakin.getOrderNo())
                            .eq("zpallet", waitPakin.getZpallet())
                            .eq("matnr", waitPakin.getMatnr())
                            .eq("batch", waitPakin.getBatch()));
                }
            }
        }
        //取消出库工作档时,查询单据管理表,回滚作业中数量
        if (wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103) {
            List<TaskDetl> wrkDetls = taskDetlService.selectList(new EntityWrapper<TaskDetl>().eq("wrk_no", wrkMast.getWrkNo()));
            for (TaskDetl wrkDetl : wrkDetls) {
                if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
//                    if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
//                        throw new CoolException("订单数据回滚失败");
//                    }
                    OrderInAndOutUtil.decrease(Boolean.FALSE, wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getBrand(),
                            wrkDetl.getStandby1(), wrkDetl.getStandby2(), wrkDetl.getStandby3(),
                            wrkDetl.getBoxType1(), wrkDetl.getBoxType2(), wrkDetl.getBoxType3(), wrkDetl.getAnfme());
                    //修改订单主表状态,没有作业数量时才可以修改
                    boolean flag = true;
//                    List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no",wrkDetl.getOrderNo()));
                    Order order = OrderInAndOutUtil.selectByNo(Boolean.FALSE, wrkDetl.getOrderNo());
                    List<OrderDetl> orderDetls = OrderInAndOutUtil.selectByOrderId(Boolean.FALSE, order.getId());
                    for (OrderDetl orderDetl : orderDetls) {
                        if (orderDetl.getWorkQty() > 0) {
                            flag = false;
                        }
                    }
                    if (flag) {
//                        Order order = orderService.selectOne(new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo()));
                        if (!Cools.isEmpty(order) && order.getSettle() == 2) {
                            order.setSettle(1L);
                            order.setUpdateBy(userId);
                            order.setUpdateTime(now);
                        }
//                        if(!orderService.update(order,new EntityWrapper<Order>().eq("order_no",wrkDetl.getOrderNo()))){
//                            throw new CoolException("修改订单状态失败");
//                        }
                        OrderInAndOutUtil.updateOrder(Boolean.FALSE, order.getId(), order.getSettle(), userId);
                    }
                }
            }
        }
//        // 订单关联
//        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
//        for (WrkDetl wrkDetl : wrkDetls) {
//            if (!Cools.isEmpty(wrkDetl.getOrderNo())) {
//                if (!orderDetlService.decrease(wrkDetl.getOrderNo(), wrkDetl.getMatnr(), wrkDetl.getBatch(), wrkDetl.getAnfme())) {
//                    throw new CoolException("订单数据回滚失败");
//                }
//                // 生成新的出库作业
////                        stockOutRe(wrkMast, wrkDetls);
//            }
//        }
        // 取消操作人员记录
        wrkMast.setManuType("手动取消");
@@ -259,29 +147,12 @@
            throw new CoolException("保存工作历史档失败, workNo = " + wrkMast.getWrkNo());
        }
        // 删除工作主档
        boolean wrkMastRes = taskService.deleteById(wrkMast);
        taskService.deleteById(wrkMast);
        if (wrkMast.getIoType() != 10 && wrkMast.getIoType() != 110) {
            // 保存工作明细档历史档
            if (!taskDetlLogService.save(wrkMast.getWrkNo())) {
//                throw new CoolException("保存工作明细历史档失败, workNo = " + wrkMast.getWrkNo());
            }
            taskDetlLogService.save(wrkMast.getWrkNo());
            // 删除工作档明细
            boolean wrkDetlRes = taskDetlService.delete(new EntityWrapper<TaskDetl>().eq("wrk_no", workNo));
        }
        // 修改库位状态
//        LocCache locMast = locCacheService.selectOne(new EntityWrapper<LocCache>().eq("loc_no", locNo));
//        if (Cools.isEmpty(locMast)) {
//            throw new CoolException("取消工作档失败,库位不存在:" + locNo);
//        }
//        locMast.setLocSts(locSts);
//        locMast.setModiTime(now);
//        locMast.setModiUser(userId);
//        boolean locMastRes = locCacheService.updateById(locMast);
//        if (!wrkMastRes || !locMastRes) {
//            throw new CoolException("保存数据失败");
//        }
            taskDetlService.delete(new EntityWrapper<TaskDetl>().eq("wrk_no", workNo));
    }
}
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -1079,7 +1079,7 @@
    @Transactional
    public void cancelWrkMast(String workNo, Long userId) {
        Date now = new Date();
        WrkMast wrkMast = wrkMastService.selectById(workNo);
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("wrk_no", workNo));
        if (Cools.isEmpty(wrkMast)) {
            throw new CoolException(workNo + "工作档不存在");
        }
src/main/java/com/zy/asrs/task/OrderSyncScheduler.java
@@ -161,15 +161,15 @@
            mesRecvFeedback.setItemdata(list);
            String url = MES_URL + "MaterialReceiptAndReturn";
            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesRecvFeedback));
            if (!StringUtils.isEmpty(response) && response.contains("Success")) {
                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
                if ("1".equals(mesReturn.getSuccess())) {
//            String response = RcsServiceImpl.sendPost(url, JSONObject.toJSONString(mesRecvFeedback));
//            if (!StringUtils.isEmpty(response) && response.contains("Success")) {
//                MesReturn mesReturn = JSONObject.parseObject(response, MesReturn.class);
//                if ("1".equals(mesReturn.getSuccess())) {
                    orderPakin.setSettle(6L);
                    orderPakinService.updateById(orderPakin);
                    log.info("订单上报成功,orderNo={}", orderNo);
                }
            }
//                }
//            }
        }
    }
src/main/java/com/zy/asrs/task/WorkMastScheduler.java
@@ -61,15 +61,7 @@
            return;
        }
        for (Task wrkMast : wrkMasts) {
            ReturnT<String> returnT = workMastHandler.AgvStart(wrkMast);
            if (!returnT.isSuccess()) {
                wrkMast.setUpdMk("X");
                wrkMast.setErrorMemo(returnT.getMsg());
                wrkMast.setErrorTime(new Date());
                if (!taskService.updateById(wrkMast)) {
                    log.error("工作档[workNo={}]标记待处理失败", wrkMast.getWrkNo());
                }
            }
            workMastHandler.AgvStart(wrkMast);
        }
    }
src/main/java/com/zy/asrs/task/handler/WorkMastHandler.java
@@ -19,6 +19,7 @@
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.annotation.Resource;
import java.util.*;
import java.util.stream.Collectors;
@@ -585,6 +586,12 @@
        return SUCCESS;
    }
    @Resource
    private TaskLogService taskLogService;
    @Resource
    private TaskDetlLogService taskDetlLogService;
    /**
     * @author Ryan
     * @date 2025/9/23
@@ -592,15 +599,19 @@
     * @version 1.0
     */
    @Transactional(rollbackFor = Exception.class)
    public ReturnT<String> AgvStart(Task task) {
        // 4.入库完成
        if (task.getWrkSts() == 4) {
            return agvDoIn(task);
            // 14.出库完成
        } else if (task.getWrkSts() == 14) {
            return agvDoOut(task);
        }
        return SUCCESS;
    public void AgvStart(Task task) {
        // 保存工作主档历史档
        taskLogService.save(task.getWrkNo());
        // 删除工作主档
        taskService.deleteById(task.getId());
        // 保存工作明细档历史档
        taskDetlLogService.save(task.getWrkNo());
        // 删除工作档明细
        taskDetlService.delete(new EntityWrapper<TaskDetl>().eq("wrk_no", task.getWrkNo()));
    }
src/main/java/com/zy/common/config/AdminInterceptor.java
@@ -10,6 +10,7 @@
import com.zy.common.utils.Http;
import com.zy.system.entity.*;
import com.zy.system.service.*;
import com.zy.system.timer.LicenseTimer;
import com.zy.system.timer.LoadingConfigTimer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -44,13 +45,18 @@
    private RolePermissionService rolePermissionService;
    @Autowired
    private LoadingConfigTimer loadingConfigTimer;
    @Autowired
    private LicenseTimer licenseTimer;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        cors(response);
        if (handler instanceof org.springframework.web.servlet.resource.ResourceHttpRequestHandler) {
            return true;
        }
        if (!licenseTimer.getSystemSupport()) {
            Http.response(response, BaseRes.NO_ACTIVATION);
            return false;
        }
        // super账号
        String token = request.getHeader("token");
        if (token!=null) {
src/main/java/com/zy/common/config/LogAspect.java
@@ -4,10 +4,7 @@
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@@ -22,10 +19,10 @@
/**
 * Created by Administrator on 2019-07-09.
 */
@Component
@Aspect
//@Component
//@Aspect
@Slf4j
@Order(2)
//@Order(2)
public class LogAspect {
    private final List<String> logApiList = Stream.of("digitalTwin", "api/mes", "api/robot")
src/main/java/com/zy/common/config/WebConfig.java
@@ -36,7 +36,7 @@
//                .addPathPatterns("/api/robot") // 拦截路径
//                .excludePathPatterns("/static/**"); // 排除静态资源
        registry.addInterceptor(adminInterceptor)
                .addPathPatterns("/**")
                .addPathPatterns("/**").excludePathPatterns("/license/getServerlnfos")
        ;
    }
src/main/java/com/zy/common/model/LocTypeDto.java
@@ -26,14 +26,15 @@
    }
    public LocTypeDto(BasDevp basDevp) {
        if (basDevp.getLocType1() == null || basDevp.getLocType1() == 0) {
            throw new CoolException("高低检测异常");
        }
        if (basDevp.getLocType2() == null || basDevp.getLocType2() == 0) {
            throw new CoolException("plc高低检测异常");
            throw new CoolException("宽窄检测异常");
        }
        if (basDevp.getLocType2() == 1) {
            this.locType2 = 1; // 低库位
        } else {
            this.locType2 = 2; // 高库位
        }
        this.locType1 = basDevp.getLocType1();
        this.locType2 = basDevp.getLocType2();
        log.info(JSON.toJSONString(this));
    }
src/main/java/com/zy/common/service/CommonService.java
@@ -171,7 +171,8 @@
        }
        Short locType2 = locTypeDto.getLocType2();
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("loc_type2", locType2).orderBy("lev1").orderBy("bay1").orderBy("row1"));
        Short locType1 = locTypeDto.getLocType1();
        LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "O").eq("loc_type2", locType2).eq("loc_type1",locType1).orderBy("lev1").orderBy("bay1").orderBy("row1"));
        if (locMast == null) {
            log.error("入库请求库位失败:无库位" + locType2);
            throw new CoolException("入库请求库位失败:无库位" + locType2);
src/main/java/com/zy/common/utils/HttpHandler.java
@@ -3,6 +3,10 @@
import okhttp3.*;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.util.Map;
import java.util.Optional;
@@ -16,7 +20,7 @@
public class HttpHandler {
    private static final Integer DEFAULT_TIMEOUT_SECONDS = 5;
    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json;charset=utf-8");
    private static final MediaType MEDIA_TYPE = MediaType.parse("application/json");
    private String uri;
    private String path;
@@ -80,7 +84,7 @@
        } else {
            RequestBody body = RequestBody.create(MEDIA_TYPE, json);
            Request.Builder builder = headerBuilder.url((https?"https://":"http://")+uri+path);
            builder.header("Content-Type", "application/json;charset=UTF-8");
            builder.header("Content-Type", "application/json");
            request = builder.post(body).build();
        }
@@ -132,6 +136,35 @@
                .build();
    }
    private OkHttpClient getUnsafeClient(Integer timeout, TimeUnit timeUnit) {
        try {
            TrustManager[] trustAllCerts = new TrustManager[]{
                    new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
                        @Override
                        public void checkServerTrusted(java.security.cert.X509Certificate[] chain, String authType) {}
                        @Override
                        public java.security.cert.X509Certificate[] getAcceptedIssuers() { return new java.security.cert.X509Certificate[]{}; }
                    }
            };
            SSLContext sslContext = SSLContext.getInstance("SSL");
            sslContext.init(null, trustAllCerts, new java.security.SecureRandom());
            SSLSocketFactory sslSocketFactory = sslContext.getSocketFactory();
            return new OkHttpClient.Builder()
                    .sslSocketFactory(sslSocketFactory, (X509TrustManager) trustAllCerts[0])
                    .hostnameVerifier((hostname, session) -> true)
                    .connectTimeout(timeout, timeUnit)
                    .readTimeout(timeout, timeUnit)
                    .build();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /**
     * Http协议报文建造者
     */
src/main/java/com/zy/common/web/WcsController.java
@@ -82,13 +82,14 @@
                return R.error(CodeRes.EXIST_500);
            }
        }
        if (Cools.isEmpty(param.getLocType1())){
            return R.error("高低检测信号不能为空");
        if (Cools.isEmpty(param.getLocType1(),param.getLocType2())){
            return R.error("高低/长短检测信号不能为空");
        }
        // 源站点状态检测
        BasDevp sourceStaNo = basDevpService.checkSiteStatus(param.getSourceStaNo(), true);
        sourceStaNo.setLocType2(param.getLocType1());
        sourceStaNo.setLocType1(param.getLocType1());
        sourceStaNo.setLocType2(param.getLocType2());
        LocTypeDto locTypeDto = new LocTypeDto(sourceStaNo);
        StartupDto dto = null;
@@ -247,7 +248,9 @@
        // 检索库位
        FindLocNoAttributeVo findLocNoAttributeVo = new FindLocNoAttributeVo();
        StartupDto dto = commonService.getLocNo( 10, devpNo, findLocNoAttributeVo, locTypeDto);
//        StartupDto dto = commonService.getLocNo( 10, devpNo, findLocNoAttributeVo, locTypeDto);
        StartupDto dto = commonService.getLocNoNew(10,devpNo,locTypeDto);
        int workNo = dto.getWorkNo();
        // 生成工作档
        WrkMast wrkMast = new WrkMast();
src/main/java/com/zy/common/web/param/SearchLocParam.java
@@ -17,4 +17,7 @@
    // 库位规格( 0:未知, 1:低库位, 2:高库位)
    private Short locType1;
    // 库位规格( 0:未知, 1:短库位, 2:长库位 )
    private Short locType2;
}
src/main/java/com/zy/system/entity/license/CustomLicenseManager.java
@@ -128,24 +128,24 @@
        if(expectedCheckModel != null && serverCheckModel != null){
            //校验IP地址
            if(!checkIpAddress(expectedCheckModel.getIpAddress(),serverCheckModel.getIpAddress())){
                throw new LicenseContentException("当前服务器的IP没在授权范围内");
            }
            //校验Mac地址
            if(!checkIpAddress(expectedCheckModel.getMacAddress(),serverCheckModel.getMacAddress())){
                throw new LicenseContentException("当前服务器的Mac地址没在授权范围内");
            }
            //校验主板序列号
            if(!checkSerial(expectedCheckModel.getMainBoardSerial(),serverCheckModel.getMainBoardSerial())){
                throw new LicenseContentException("当前服务器的主板序列号没在授权范围内");
            }
            //校验CPU序列号
            if(!checkSerial(expectedCheckModel.getCpuSerial(),serverCheckModel.getCpuSerial())){
                throw new LicenseContentException("当前服务器的CPU序列号没在授权范围内");
            }
//            if(!checkIpAddress(expectedCheckModel.getIpAddress(),serverCheckModel.getIpAddress())){
//                throw new LicenseContentException("当前服务器的IP没在授权范围内");
//            }
//
//            //校验Mac地址
//            if(!checkIpAddress(expectedCheckModel.getMacAddress(),serverCheckModel.getMacAddress())){
//                throw new LicenseContentException("当前服务器的Mac地址没在授权范围内");
//            }
//
//            //校验主板序列号
//            if(!checkSerial(expectedCheckModel.getMainBoardSerial(),serverCheckModel.getMainBoardSerial())){
//                throw new LicenseContentException("当前服务器的主板序列号没在授权范围内");
//            }
//
//            //校验CPU序列号
//            if(!checkSerial(expectedCheckModel.getCpuSerial(),serverCheckModel.getCpuSerial())){
//                throw new LicenseContentException("当前服务器的CPU序列号没在授权范围内");
//            }
        }else{
            throw new LicenseContentException("不能获取服务器硬件信息");
        }
src/main/java/com/zy/system/entity/license/LicenseCheckListener.java
@@ -84,7 +84,7 @@
                LicenseVerify licenseVerify = new LicenseVerify();
                //安装证书
//                LicenseContent install = licenseVerify.install(param);
                LicenseContent install = licenseVerify.install(param);
                logger.info("++++++++ 许可证加载结束 ++++++++");
src/main/resources/application-dev.yml
@@ -137,7 +137,7 @@
#海康对接
hik:
  url: http://127.0.0.1:8089/hik/
  url: http://172.26.11.98:80/rcs/rtas/
#华晓对接
hx:
src/main/resources/mapper/TaskMapper.xml
@@ -9,7 +9,7 @@
    </resultMap>
    <select id="selectToBeCompleteData" resultType="com.zy.asrs.entity.Task">
        select * from agv_task where ((wrk_sts = 4 Or wrk_sts = 14 ) and io_type != 103 and io_type != 104 and io_type != 107 ) or (wrk_sts = 2 and io_type=6) order by upd_mk,error_time,io_time,wrk_no
        select * from agv_task where (wrk_sts = 303 Or wrk_sts = 304 )
    </select>
</mapper>
src/main/webapp/static/css/main.min.css
@@ -1 +1 @@
@import url(https://fonts.googleapis.com/css?family=Homenaje);@import url(https://fonts.googleapis.com/css?family=Noto+Serif+JP);@-webkit-keyframes animateSsplashStr{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}30%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes animateSsplashStr{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}30%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{height:100%}body{min-height:100%;font-family:Homenaje,sans-serif;letter-spacing:.15em;background-color:#111}@media all and (min-width:569px) and (max-width:1366px){body{font-size:14px;font-size:.875rem}}@media all and (max-width:568px){body{font-size:12px;font-size:.75rem}}body.is-opened-index{overflow:auto}body.is-picked{cursor:pointer}a{text-decoration:none}::-moz-selection{color:#fff;background:rgba(0,0,0,.5)}::selection{color:#fff;background:rgba(0,0,0,.5)}.l-contents{position:relative;z-index:10}.l-contents.is-fixed{position:fixed;top:0;right:0;left:0}.l-page--white{color:#fff}.l-page--white a{color:#fff}.l-page--white svg{fill:#fff}.l-page--black{color:#222}.l-page--black a{color:#222}.l-page--black svg{fill:#222}.c-btn-circle{width:60px;height:60px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;margin-top:5px;border-radius:50%}.c-btn-circle svg{width:30px;height:30px}.c-btn-circle--white{background-color:#fff}.c-btn-circle--white .path-fill{fill:#222}.c-btn-circle--black{background-color:#222}.c-btn-circle--black .path-fill{fill:#fff}.c-button{height:2em;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:1.25em;padding-left:1.25em;border-radius:1em;border-width:2px;border-style:solid}.c-button--white{border-color:#fff}.c-button--black{border-color:#222}.c-button__icon{display:block;margin-right:.7em}.c-button__icon--back{width:.3em;height:.3em;border-top:2px solid #fff;border-left:2px solid #fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.c-button__icon--white{border-color:#fff}.c-button__icon--black{border-color:#222}.c-button__label{font-weight:700}.c-button__label .js-split-str{display:inline-block}.c-button__icon{-webkit-transition-duration:.4s;transition-duration:.4s}.c-button:hover .c-button__icon{-webkit-transform:translateX(-5px) rotate(-45deg);transform:translateX(-5px) rotate(-45deg)}.c-button:hover .c-button__label .js-split-str{-webkit-animation-name:animateSsplashStr;animation-name:animateSsplashStr;-webkit-animation-duration:.6s;animation-duration:.6s}.c-button:hover .c-button__label .js-split-str:nth-of-type(1){-webkit-animation-delay:0s;animation-delay:0s}.c-button:hover .c-button__label .js-split-str:nth-of-type(2){-webkit-animation-delay:20ms;animation-delay:20ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(3){-webkit-animation-delay:40ms;animation-delay:40ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(4){-webkit-animation-delay:60ms;animation-delay:60ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(5){-webkit-animation-delay:80ms;animation-delay:80ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(6){-webkit-animation-delay:.1s;animation-delay:.1s}.c-button:hover .c-button__label .js-split-str:nth-of-type(7){-webkit-animation-delay:.12s;animation-delay:.12s}.c-button:hover .c-button__label .js-split-str:nth-of-type(8){-webkit-animation-delay:.14s;animation-delay:.14s}.c-button:hover .c-button__label .js-split-str:nth-of-type(9){-webkit-animation-delay:.16s;animation-delay:.16s}.c-button:hover .c-button__label .js-split-str:nth-of-type(10){-webkit-animation-delay:.18s;animation-delay:.18s}.c-button:hover .c-button__label .js-split-str:nth-of-type(11){-webkit-animation-delay:.2s;animation-delay:.2s}.c-button:hover .c-button__label .js-split-str:nth-of-type(12){-webkit-animation-delay:.22s;animation-delay:.22s}.c-button:hover .c-button__label .js-split-str:nth-of-type(13){-webkit-animation-delay:.24s;animation-delay:.24s}.c-button:hover .c-button__label .js-split-str:nth-of-type(14){-webkit-animation-delay:.26s;animation-delay:.26s}.c-button:hover .c-button__label .js-split-str:nth-of-type(15){-webkit-animation-delay:.28s;animation-delay:.28s}.c-button:hover .c-button__label .js-split-str:nth-of-type(16){-webkit-animation-delay:.3s;animation-delay:.3s}.c-button:hover .c-button__label .js-split-str:nth-of-type(17){-webkit-animation-delay:.32s;animation-delay:.32s}.c-button:hover .c-button__label .js-split-str:nth-of-type(18){-webkit-animation-delay:.34s;animation-delay:.34s}.c-button:hover .c-button__label .js-split-str:nth-of-type(19){-webkit-animation-delay:.36s;animation-delay:.36s}.c-button:hover .c-button__label .js-split-str:nth-of-type(20){-webkit-animation-delay:.38s;animation-delay:.38s}.c-button:hover .c-button__label .js-split-str:nth-of-type(21){-webkit-animation-delay:.4s;animation-delay:.4s}.c-button:hover .c-button__label .js-split-str:nth-of-type(22){-webkit-animation-delay:.42s;animation-delay:.42s}.c-button:hover .c-button__label .js-split-str:nth-of-type(23){-webkit-animation-delay:.44s;animation-delay:.44s}.c-button:hover .c-button__label .js-split-str:nth-of-type(24){-webkit-animation-delay:.46s;animation-delay:.46s}.c-button:hover .c-button__label .js-split-str:nth-of-type(25){-webkit-animation-delay:.48s;animation-delay:.48s}.c-button:hover .c-button__label .js-split-str:nth-of-type(26){-webkit-animation-delay:.5s;animation-delay:.5s}.c-button:hover .c-button__label .js-split-str:nth-of-type(27){-webkit-animation-delay:.52s;animation-delay:.52s}.c-button:hover .c-button__label .js-split-str:nth-of-type(28){-webkit-animation-delay:.54s;animation-delay:.54s}.c-button:hover .c-button__label .js-split-str:nth-of-type(29){-webkit-animation-delay:.56s;animation-delay:.56s}.c-button:hover .c-button__label .js-split-str:nth-of-type(30){-webkit-animation-delay:.58s;animation-delay:.58s}.c-text-link{display:inline-block;position:relative}.c-text-link__label{display:inline-block;position:relative;z-index:2}.c-text-link__bg{height:2px;display:block;position:absolute;top:50%;right:0;left:0}.c-text-link__bg--white{background-color:#fff}.c-text-link__bg--black{background-color:#222}@-webkit-keyframes openTextLinkBar{0%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:left;transform-origin:left}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:left;transform-origin:left}}@keyframes openTextLinkBar{0%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:left;transform-origin:left}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:left;transform-origin:left}}@-webkit-keyframes closeTextLinkBar{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:right;transform-origin:right}100%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right}}@keyframes closeTextLinkBar{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:right;transform-origin:right}100%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right}}.c-text-link__label{-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1)}.c-text-link__bg{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-animation-name:closeTextLinkBar;animation-name:closeTextLinkBar;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:cubic-bezier(.075,.82,.165,1);animation-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}.c-text-link:hover .c-text-link__bg{-webkit-animation-name:openTextLinkBar;animation-name:openTextLinkBar}.p-badges{position:fixed;z-index:100;bottom:20px;right:20px}@media all and (max-width:568px){.p-badges{width:90px}}.p-badges img{width:100%}.p-canvas-webgl{position:fixed;z-index:1;top:0;left:0}.p-dummy-scroll{position:relative;z-index:1}.p-hold-button{width:60px;height:60px;opacity:0;position:fixed;z-index:10;pointer-events:none}.p-hold-button.is-pc{opacity:1;top:0;left:0}.p-hold-button.is-smartphone{cursor:pointer;bottom:35px;right:0;left:0;opacity:1;margin-right:auto;margin-left:auto}.p-hold-button__border{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute}.p-hold-button__border--out{width:60px;height:60px;top:0;left:0;border:1px solid #fff}.p-hold-button__border--in{width:54px;height:54px;top:3px;left:3px;border:1px solid #fff}.p-hold-button__label{width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;z-index:2;mix-blend-mode:difference;padding-left:.15em}.p-hold-button__progress{width:54px;height:54px;overflow:hidden;position:absolute;top:3px;left:3px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.p-hold-button__progress-in{width:108px;height:54px;background-color:#fff;-webkit-transform:skewX(-45deg) translateX(50%);transform:skewX(-45deg) translateX(50%);-webkit-transform-origin:right bottom;transform-origin:right bottom}.p-hold-button__label{opacity:0;font-size:14px;font-size:.875rem}.p-hold-button__border{opacity:0;-webkit-transform:rotate(45deg) scale(.6);transform:rotate(45deg) scale(.6)}.p-hold-button.is-enabled{pointer-events:auto}.p-hold-button.is-shown .p-hold-button__label{opacity:1;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-delay:.3s;transition-delay:.3s;-webkit-transition-property:opacity;transition-property:opacity}.p-hold-button.is-shown .p-hold-button__border{opacity:1;-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-shown .p-hold-button__border--out{-webkit-transition-delay:.1s;transition-delay:.1s}.p-hold-button.is-shown .p-hold-button__border--in{-webkit-transition-delay:.2s;transition-delay:.2s}.p-hold-button.is-shown .p-hold-button__progress{opacity:1;-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-delay:.3s;transition-delay:.3s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-hidden .p-hold-button__label{opacity:0;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-property:opacity;transition-property:opacity}.p-hold-button.is-hidden .p-hold-button__border{opacity:0;-webkit-transform:rotate(45deg) scale(.8);transform:rotate(45deg) scale(.8);-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-hidden .p-hold-button__progress{opacity:0;-webkit-transform:rotate(45deg) scale(.5);transform:rotate(45deg) scale(.5);-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-pressed .p-hold-button__border--out{-webkit-transform:rotate(45deg) scale(1.12);transform:rotate(45deg) scale(1.12);-webkit-transition-delay:0s;transition-delay:0s}.p-hold-button.is-released .p-hold-button__border--out{-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition-delay:0s;transition-delay:0s}@-webkit-keyframes loopFollow{0%{-webkit-transform:translateY(-100.5%);transform:translateY(-100.5%)}100%{-webkit-transform:translateY(100.5%);transform:translateY(100.5%)}}@keyframes loopFollow{0%{-webkit-transform:translateY(-100.5%);transform:translateY(-100.5%)}100%{-webkit-transform:translateY(100.5%);transform:translateY(100.5%)}}.p-introduction{width:100%;height:100vh;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:1.5;position:relative;z-index:10;color:#fff;text-align:center;letter-spacing:.2em}.p-introduction__wrap{position:absolute;right:0;bottom:0;left:0}.p-introduction__row{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-introduction__row.is-shown{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.p-introduction__row.is-shown:nth-of-type(1){-webkit-transition-delay:5s;transition-delay:5s}.p-introduction__row.is-shown:nth-of-type(2){-webkit-transition-delay:5.25s;transition-delay:5.25s}.p-introduction__row.is-shown:nth-of-type(3){-webkit-transition-delay:5.5s;transition-delay:5.5s}.p-introduction__row.is-shown:nth-of-type(4){-webkit-transition-delay:5.75s;transition-delay:5.75s}.p-introduction__row.is-shown:nth-of-type(5){-webkit-transition-delay:6s;transition-delay:6s}.p-introduction__links{margin-top:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.p-introduction__link{width:18px;height:18px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;opacity:0;-webkit-transform:scale(1.8);transform:scale(1.8);margin:0 12px;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-introduction__link svg{width:18px}.p-introduction__link.is-shown{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.p-introduction__link.is-shown:nth-of-type(1){-webkit-transition-delay:5.6s;transition-delay:5.6s}.p-introduction__link.is-shown:nth-of-type(2){-webkit-transition-delay:5.7s;transition-delay:5.7s}.p-introduction__link.is-shown:nth-of-type(3){-webkit-transition-delay:5.8s;transition-delay:5.8s}.p-introduction__link.is-shown:nth-of-type(4){-webkit-transition-delay:5.9s;transition-delay:5.9s}.p-introduction__link.is-shown:nth-of-type(5){-webkit-transition-delay:6s;transition-delay:6s}.p-introduction__follow{width:15px;height:10vh;overflow:hidden;position:relative;margin:6vh auto 0;opacity:0;-webkit-transition-property:opacity;transition-property:opacity}.p-introduction__follow.is-shown{opacity:1;-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-delay:3s;transition-delay:3s}.p-introduction__follow-in{width:1px;height:100%;position:absolute;top:0;background-color:#fff;-webkit-animation-name:loopFollow;animation-name:loopFollow;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.p-introduction__follow-in--1{left:0}.p-introduction__follow-in--2{left:50%;margin-left:-1px;-webkit-animation-delay:.3s;animation-delay:.3s}.p-introduction__follow-in--3{right:0;-webkit-animation-delay:.15s;animation-delay:.15s}.p-preloader{position:fixed;top:50%;left:50%;z-index:100;pointer-events:none}@media all and (min-width:569px){.p-preloader{width:60px;height:60px;margin-top:-30px;margin-left:-30px}}@media all and (max-width:568px){.p-preloader{width:30px;height:30px;margin-top:-15px;margin-left:-15px}}.p-preloader.is-hidden{opacity:0;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-property:opacity;transition-property:opacity}.p-preloader__box{width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;top:0;left:0;border-style:solid;-webkit-animation-name:rotatePreloaderBox;animation-name:rotatePreloaderBox;-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media all and (min-width:569px){.p-preloader__box{border-width:3px}}@media all and (max-width:568px){.p-preloader__box{border-width:2px}}.p-preloader__box--blank{border-color:#111}.p-preloader__box--white{border-color:#fff}.p-preloader__box--02{-webkit-animation-delay:1s;animation-delay:1s}.p-preloader__box--03{-webkit-animation-delay:2s;animation-delay:2s}@-webkit-keyframes rotatePreloaderBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(0);transform:scale(.1) rotate(0)}12.5%{opacity:1}25%{-webkit-transform:scale(1) rotate(180deg);transform:scale(1) rotate(180deg)}37.5%{opacity:1;-webkit-transform:scale(1) rotate(270deg);transform:scale(1) rotate(270deg)}50%{opacity:0;-webkit-transform:scale(1.2) rotate(360deg);transform:scale(1.2) rotate(360deg)}100%{opacity:0}}@keyframes rotatePreloaderBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(0);transform:scale(.1) rotate(0)}12.5%{opacity:1}25%{-webkit-transform:scale(1) rotate(180deg);transform:scale(1) rotate(180deg)}37.5%{opacity:1;-webkit-transform:scale(1) rotate(270deg);transform:scale(1) rotate(270deg)}50%{opacity:0;-webkit-transform:scale(1.2) rotate(360deg);transform:scale(1.2) rotate(360deg)}100%{opacity:0}}.p-config-menu{position:fixed;bottom:20px;right:20px;z-index:100}.p-sketch-index{max-width:1366px;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;top:0;right:0;left:0;z-index:100000;margin-right:auto;margin-left:auto}@media all and (min-width:1025px){.p-sketch-index{padding-top:100px;padding-bottom:50px;padding-right:7.5%;padding-left:7.5%}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index{padding-top:100px;padding-bottom:50px;padding-right:7.5%;padding-left:7.5%}}@media all and (max-width:568px){.p-sketch-index{padding-top:70px;padding-bottom:40px;padding-right:10px;padding-left:10px}}.p-sketch-index__item{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}@media all and (min-width:1025px){.p-sketch-index__item{width:33.3%;margin-bottom:60px;padding-right:15px;padding-left:15px}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index__item{width:50%;margin-bottom:40px;padding-right:10px;padding-left:10px}}@media all and (max-width:568px){.p-sketch-index__item{width:100%;margin-bottom:30px;padding-right:10px;padding-left:10px}}.p-sketch-index__item-wrap{display:block}.p-sketch-index__item-thumb{width:100%;position:relative;margin-bottom:10px;padding-top:52.5%;background-color:#fff;background-size:cover}.p-sketch-index__item-thumb:after,.p-sketch-index__item-thumb:before{content:"";display:block;position:absolute;top:0;right:0;bottom:0;left:0}.p-sketch-index__item-thumb:before{background-color:#fff}.p-sketch-index__item-thumb:after{background-color:rgba(0,0,0,.7)}.p-sketch-index__item-thumb-label{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;z-index:10;letter-spacing:.2em}@media all and (min-width:1025px){.p-sketch-index__item-thumb-label{font-size:24px;font-size:1.5rem}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index__item-thumb-label{font-size:21px;font-size:1.3125rem}}@media all and (max-width:568px){.p-sketch-index__item-thumb-label{font-size:18px;font-size:1.125rem}}.p-sketch-index__item-title{letter-spacing:.1em}@media all and (min-width:1025px){.p-sketch-index__item-title{font-size:32px;font-size:2rem}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index__item-title{font-size:28px;font-size:1.75rem}}@media all and (max-width:568px){.p-sketch-index__item-title{font-size:24px;font-size:1.5rem}}.p-sketch-index__item-title .js-split-str{display:inline-block}.p-sketch-index__item-date{margin-top:5px;font-size:12px;font-size:.75rem}.p-sketch-index__item-thumb{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-delay:.4s;transition-delay:.4s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1)}.p-sketch-index__item-thumb:before{-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-delay:.6s;transition-delay:.6s}.p-sketch-index__item-thumb:after{opacity:0;-webkit-transition-duration:.4s;transition-duration:.4s}.p-sketch-index__item-thumb-label .js-split-str{opacity:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition-duration:.6s;transition-duration:.6s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(1){-webkit-transition-delay:0s;transition-delay:0s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(2){-webkit-transition-delay:20ms;transition-delay:20ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(3){-webkit-transition-delay:40ms;transition-delay:40ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(4){-webkit-transition-delay:60ms;transition-delay:60ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(5){-webkit-transition-delay:80ms;transition-delay:80ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(6){-webkit-transition-delay:.1s;transition-delay:.1s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(7){-webkit-transition-delay:.12s;transition-delay:.12s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(8){-webkit-transition-delay:.14s;transition-delay:.14s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(9){-webkit-transition-delay:.16s;transition-delay:.16s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(10){-webkit-transition-delay:.18s;transition-delay:.18s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(11){-webkit-transition-delay:.2s;transition-delay:.2s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(12){-webkit-transition-delay:.22s;transition-delay:.22s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(13){-webkit-transition-delay:.24s;transition-delay:.24s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(14){-webkit-transition-delay:.26s;transition-delay:.26s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(15){-webkit-transition-delay:.28s;transition-delay:.28s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(16){-webkit-transition-delay:.3s;transition-delay:.3s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(17){-webkit-transition-delay:.32s;transition-delay:.32s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(18){-webkit-transition-delay:.34s;transition-delay:.34s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(19){-webkit-transition-delay:.36s;transition-delay:.36s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(20){-webkit-transition-delay:.38s;transition-delay:.38s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(21){-webkit-transition-delay:.4s;transition-delay:.4s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(22){-webkit-transition-delay:.42s;transition-delay:.42s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(23){-webkit-transition-delay:.44s;transition-delay:.44s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(24){-webkit-transition-delay:.46s;transition-delay:.46s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(25){-webkit-transition-delay:.48s;transition-delay:.48s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(26){-webkit-transition-delay:.5s;transition-delay:.5s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(27){-webkit-transition-delay:.52s;transition-delay:.52s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(28){-webkit-transition-delay:.54s;transition-delay:.54s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(29){-webkit-transition-delay:.56s;transition-delay:.56s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(30){-webkit-transition-delay:.58s;transition-delay:.58s}.p-sketch-index__item-title .js-split-str{opacity:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition-duration:.6s;transition-duration:.6s}.p-sketch-index__item-title .js-split-str:nth-of-type(1){-webkit-transition-delay:.6s;transition-delay:.6s}.p-sketch-index__item-title .js-split-str:nth-of-type(2){-webkit-transition-delay:.62s;transition-delay:.62s}.p-sketch-index__item-title .js-split-str:nth-of-type(3){-webkit-transition-delay:.64s;transition-delay:.64s}.p-sketch-index__item-title .js-split-str:nth-of-type(4){-webkit-transition-delay:.66s;transition-delay:.66s}.p-sketch-index__item-title .js-split-str:nth-of-type(5){-webkit-transition-delay:.68s;transition-delay:.68s}.p-sketch-index__item-title .js-split-str:nth-of-type(6){-webkit-transition-delay:.7s;transition-delay:.7s}.p-sketch-index__item-title .js-split-str:nth-of-type(7){-webkit-transition-delay:.72s;transition-delay:.72s}.p-sketch-index__item-title .js-split-str:nth-of-type(8){-webkit-transition-delay:.74s;transition-delay:.74s}.p-sketch-index__item-title .js-split-str:nth-of-type(9){-webkit-transition-delay:.76s;transition-delay:.76s}.p-sketch-index__item-title .js-split-str:nth-of-type(10){-webkit-transition-delay:.78s;transition-delay:.78s}.p-sketch-index__item-title .js-split-str:nth-of-type(11){-webkit-transition-delay:.8s;transition-delay:.8s}.p-sketch-index__item-title .js-split-str:nth-of-type(12){-webkit-transition-delay:.82s;transition-delay:.82s}.p-sketch-index__item-title .js-split-str:nth-of-type(13){-webkit-transition-delay:.84s;transition-delay:.84s}.p-sketch-index__item-title .js-split-str:nth-of-type(14){-webkit-transition-delay:.86s;transition-delay:.86s}.p-sketch-index__item-title .js-split-str:nth-of-type(15){-webkit-transition-delay:.88s;transition-delay:.88s}.p-sketch-index__item-title .js-split-str:nth-of-type(16){-webkit-transition-delay:.9s;transition-delay:.9s}.p-sketch-index__item-title .js-split-str:nth-of-type(17){-webkit-transition-delay:.92s;transition-delay:.92s}.p-sketch-index__item-title .js-split-str:nth-of-type(18){-webkit-transition-delay:.94s;transition-delay:.94s}.p-sketch-index__item-title .js-split-str:nth-of-type(19){-webkit-transition-delay:.96s;transition-delay:.96s}.p-sketch-index__item-title .js-split-str:nth-of-type(20){-webkit-transition-delay:.98s;transition-delay:.98s}.p-sketch-index__item-title .js-split-str:nth-of-type(21){-webkit-transition-delay:1s;transition-delay:1s}.p-sketch-index__item-title .js-split-str:nth-of-type(22){-webkit-transition-delay:1.02s;transition-delay:1.02s}.p-sketch-index__item-title .js-split-str:nth-of-type(23){-webkit-transition-delay:1.04s;transition-delay:1.04s}.p-sketch-index__item-title .js-split-str:nth-of-type(24){-webkit-transition-delay:1.06s;transition-delay:1.06s}.p-sketch-index__item-title .js-split-str:nth-of-type(25){-webkit-transition-delay:1.08s;transition-delay:1.08s}.p-sketch-index__item-title .js-split-str:nth-of-type(26){-webkit-transition-delay:1.1s;transition-delay:1.1s}.p-sketch-index__item-title .js-split-str:nth-of-type(27){-webkit-transition-delay:1.12s;transition-delay:1.12s}.p-sketch-index__item-title .js-split-str:nth-of-type(28){-webkit-transition-delay:1.14s;transition-delay:1.14s}.p-sketch-index__item-title .js-split-str:nth-of-type(29){-webkit-transition-delay:1.16s;transition-delay:1.16s}.p-sketch-index__item-title .js-split-str:nth-of-type(30){-webkit-transition-delay:1.18s;transition-delay:1.18s}.p-sketch-index__item-date{opacity:0;-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-delay:.8s;transition-delay:.8s}.p-sketch-index__item.is-shown .p-sketch-index__item-thumb{-webkit-transform:scaleY(1);transform:scaleY(1)}.p-sketch-index__item.is-shown .p-sketch-index__item-thumb:before{opacity:0}.p-sketch-index__item.is-shown .p-sketch-index__item-title .js-split-str{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.p-sketch-index__item.is-shown .p-sketch-index__item-date{opacity:1}.p-sketch-index__item:hover .p-sketch-index__item-thumb:after{opacity:1}.p-sketch-index__item:hover .p-sketch-index__item-thumb-label .js-split-str{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.p-sketch-outline{position:fixed;z-index:100;bottom:22px;left:20px}@media all and (max-width:568px){.p-sketch-outline{right:20px}}.p-sketch-outline__title{line-height:1;margin-top:0;margin-bottom:.075em;margin-left:-.05em;font-weight:100;letter-spacing:.05em}@media all and (min-width:1367px){.p-sketch-outline__title{font-size:80px}}@media all and (min-width:569px) and (max-width:1366px){.p-sketch-outline__title{font-size:6vw}}@media all and (max-width:568px){.p-sketch-outline__title{font-size:62.48px}}.p-sketch-outline__date{line-height:1;margin:0}.p-sketch-outline__description{line-height:1.5;margin:10px 0 0}.p-sketch-outline__assets{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:8px;margin-bottom:0}.p-sketch-outline__assets dd{margin:0}.p-sketch-outline__assets ul{display:-webkit-box;display:-ms-flexbox;display:flex;list-style-type:none;margin:0;padding:0}.p-sketch-outline__assets li{margin-left:12px}.p-utility-menu{position:fixed;z-index:100;top:25px;right:20px}.p-website-outline{position:fixed;z-index:100;top:20px;left:20px}.p-website-outline__title{margin:0 0 5px;font-size:18px;font-size:1.125rem}.p-website-outline__description{line-height:1.25;margin:0}.p-website-outline__links{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:15px}.p-website-outline__link{width:18px;height:18px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:20px}.p-website-outline__link svg{width:18px}
@-webkit-keyframes animateSsplashStr{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}30%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes animateSsplashStr{0%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}20%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}30%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{height:100%}body{min-height:100%;font-family:Homenaje,sans-serif;letter-spacing:.15em;background-color:#111}@media all and (min-width:569px) and (max-width:1366px){body{font-size:14px;font-size:.875rem}}@media all and (max-width:568px){body{font-size:12px;font-size:.75rem}}body.is-opened-index{overflow:auto}body.is-picked{cursor:pointer}a{text-decoration:none}::-moz-selection{color:#fff;background:rgba(0,0,0,.5)}::selection{color:#fff;background:rgba(0,0,0,.5)}.l-contents{position:relative;z-index:10}.l-contents.is-fixed{position:fixed;top:0;right:0;left:0}.l-page--white{color:#fff}.l-page--white a{color:#fff}.l-page--white svg{fill:#fff}.l-page--black{color:#222}.l-page--black a{color:#222}.l-page--black svg{fill:#222}.c-btn-circle{width:60px;height:60px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;cursor:pointer;margin-top:5px;border-radius:50%}.c-btn-circle svg{width:30px;height:30px}.c-btn-circle--white{background-color:#fff}.c-btn-circle--white .path-fill{fill:#222}.c-btn-circle--black{background-color:#222}.c-btn-circle--black .path-fill{fill:#fff}.c-button{height:2em;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:1.25em;padding-left:1.25em;border-radius:1em;border-width:2px;border-style:solid}.c-button--white{border-color:#fff}.c-button--black{border-color:#222}.c-button__icon{display:block;margin-right:.7em}.c-button__icon--back{width:.3em;height:.3em;border-top:2px solid #fff;border-left:2px solid #fff;-webkit-transform:rotate(-45deg);transform:rotate(-45deg)}.c-button__icon--white{border-color:#fff}.c-button__icon--black{border-color:#222}.c-button__label{font-weight:700}.c-button__label .js-split-str{display:inline-block}.c-button__icon{-webkit-transition-duration:.4s;transition-duration:.4s}.c-button:hover .c-button__icon{-webkit-transform:translateX(-5px) rotate(-45deg);transform:translateX(-5px) rotate(-45deg)}.c-button:hover .c-button__label .js-split-str{-webkit-animation-name:animateSsplashStr;animation-name:animateSsplashStr;-webkit-animation-duration:.6s;animation-duration:.6s}.c-button:hover .c-button__label .js-split-str:nth-of-type(1){-webkit-animation-delay:0s;animation-delay:0s}.c-button:hover .c-button__label .js-split-str:nth-of-type(2){-webkit-animation-delay:20ms;animation-delay:20ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(3){-webkit-animation-delay:40ms;animation-delay:40ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(4){-webkit-animation-delay:60ms;animation-delay:60ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(5){-webkit-animation-delay:80ms;animation-delay:80ms}.c-button:hover .c-button__label .js-split-str:nth-of-type(6){-webkit-animation-delay:.1s;animation-delay:.1s}.c-button:hover .c-button__label .js-split-str:nth-of-type(7){-webkit-animation-delay:.12s;animation-delay:.12s}.c-button:hover .c-button__label .js-split-str:nth-of-type(8){-webkit-animation-delay:.14s;animation-delay:.14s}.c-button:hover .c-button__label .js-split-str:nth-of-type(9){-webkit-animation-delay:.16s;animation-delay:.16s}.c-button:hover .c-button__label .js-split-str:nth-of-type(10){-webkit-animation-delay:.18s;animation-delay:.18s}.c-button:hover .c-button__label .js-split-str:nth-of-type(11){-webkit-animation-delay:.2s;animation-delay:.2s}.c-button:hover .c-button__label .js-split-str:nth-of-type(12){-webkit-animation-delay:.22s;animation-delay:.22s}.c-button:hover .c-button__label .js-split-str:nth-of-type(13){-webkit-animation-delay:.24s;animation-delay:.24s}.c-button:hover .c-button__label .js-split-str:nth-of-type(14){-webkit-animation-delay:.26s;animation-delay:.26s}.c-button:hover .c-button__label .js-split-str:nth-of-type(15){-webkit-animation-delay:.28s;animation-delay:.28s}.c-button:hover .c-button__label .js-split-str:nth-of-type(16){-webkit-animation-delay:.3s;animation-delay:.3s}.c-button:hover .c-button__label .js-split-str:nth-of-type(17){-webkit-animation-delay:.32s;animation-delay:.32s}.c-button:hover .c-button__label .js-split-str:nth-of-type(18){-webkit-animation-delay:.34s;animation-delay:.34s}.c-button:hover .c-button__label .js-split-str:nth-of-type(19){-webkit-animation-delay:.36s;animation-delay:.36s}.c-button:hover .c-button__label .js-split-str:nth-of-type(20){-webkit-animation-delay:.38s;animation-delay:.38s}.c-button:hover .c-button__label .js-split-str:nth-of-type(21){-webkit-animation-delay:.4s;animation-delay:.4s}.c-button:hover .c-button__label .js-split-str:nth-of-type(22){-webkit-animation-delay:.42s;animation-delay:.42s}.c-button:hover .c-button__label .js-split-str:nth-of-type(23){-webkit-animation-delay:.44s;animation-delay:.44s}.c-button:hover .c-button__label .js-split-str:nth-of-type(24){-webkit-animation-delay:.46s;animation-delay:.46s}.c-button:hover .c-button__label .js-split-str:nth-of-type(25){-webkit-animation-delay:.48s;animation-delay:.48s}.c-button:hover .c-button__label .js-split-str:nth-of-type(26){-webkit-animation-delay:.5s;animation-delay:.5s}.c-button:hover .c-button__label .js-split-str:nth-of-type(27){-webkit-animation-delay:.52s;animation-delay:.52s}.c-button:hover .c-button__label .js-split-str:nth-of-type(28){-webkit-animation-delay:.54s;animation-delay:.54s}.c-button:hover .c-button__label .js-split-str:nth-of-type(29){-webkit-animation-delay:.56s;animation-delay:.56s}.c-button:hover .c-button__label .js-split-str:nth-of-type(30){-webkit-animation-delay:.58s;animation-delay:.58s}.c-text-link{display:inline-block;position:relative}.c-text-link__label{display:inline-block;position:relative;z-index:2}.c-text-link__bg{height:2px;display:block;position:absolute;top:50%;right:0;left:0}.c-text-link__bg--white{background-color:#fff}.c-text-link__bg--black{background-color:#222}@-webkit-keyframes openTextLinkBar{0%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:left;transform-origin:left}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:left;transform-origin:left}}@keyframes openTextLinkBar{0%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:left;transform-origin:left}100%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:left;transform-origin:left}}@-webkit-keyframes closeTextLinkBar{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:right;transform-origin:right}100%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right}}@keyframes closeTextLinkBar{0%{-webkit-transform:scaleX(1);transform:scaleX(1);-webkit-transform-origin:right;transform-origin:right}100%{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:right;transform-origin:right}}.c-text-link__label{-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1)}.c-text-link__bg{-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-animation-name:closeTextLinkBar;animation-name:closeTextLinkBar;-webkit-animation-duration:.4s;animation-duration:.4s;-webkit-animation-timing-function:cubic-bezier(.075,.82,.165,1);animation-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-animation-fill-mode:both;animation-fill-mode:both}.c-text-link:hover .c-text-link__bg{-webkit-animation-name:openTextLinkBar;animation-name:openTextLinkBar}.p-badges{position:fixed;z-index:100;bottom:20px;right:20px}@media all and (max-width:568px){.p-badges{width:90px}}.p-badges img{width:100%}.p-canvas-webgl{position:fixed;z-index:1;top:0;left:0}.p-dummy-scroll{position:relative;z-index:1}.p-hold-button{width:60px;height:60px;opacity:0;position:fixed;z-index:10;pointer-events:none}.p-hold-button.is-pc{opacity:1;top:0;left:0}.p-hold-button.is-smartphone{cursor:pointer;bottom:35px;right:0;left:0;opacity:1;margin-right:auto;margin-left:auto}.p-hold-button__border{-webkit-box-sizing:border-box;box-sizing:border-box;display:block;position:absolute}.p-hold-button__border--out{width:60px;height:60px;top:0;left:0;border:1px solid #fff}.p-hold-button__border--in{width:54px;height:54px;top:3px;left:3px;border:1px solid #fff}.p-hold-button__label{width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;z-index:2;mix-blend-mode:difference;padding-left:.15em}.p-hold-button__progress{width:54px;height:54px;overflow:hidden;position:absolute;top:3px;left:3px;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.p-hold-button__progress-in{width:108px;height:54px;background-color:#fff;-webkit-transform:skewX(-45deg) translateX(50%);transform:skewX(-45deg) translateX(50%);-webkit-transform-origin:right bottom;transform-origin:right bottom}.p-hold-button__label{opacity:0;font-size:14px;font-size:.875rem}.p-hold-button__border{opacity:0;-webkit-transform:rotate(45deg) scale(.6);transform:rotate(45deg) scale(.6)}.p-hold-button.is-enabled{pointer-events:auto}.p-hold-button.is-shown .p-hold-button__label{opacity:1;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-delay:.3s;transition-delay:.3s;-webkit-transition-property:opacity;transition-property:opacity}.p-hold-button.is-shown .p-hold-button__border{opacity:1;-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-shown .p-hold-button__border--out{-webkit-transition-delay:.1s;transition-delay:.1s}.p-hold-button.is-shown .p-hold-button__border--in{-webkit-transition-delay:.2s;transition-delay:.2s}.p-hold-button.is-shown .p-hold-button__progress{opacity:1;-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-delay:.3s;transition-delay:.3s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-hidden .p-hold-button__label{opacity:0;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-property:opacity;transition-property:opacity}.p-hold-button.is-hidden .p-hold-button__border{opacity:0;-webkit-transform:rotate(45deg) scale(.8);transform:rotate(45deg) scale(.8);-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-hidden .p-hold-button__progress{opacity:0;-webkit-transform:rotate(45deg) scale(.5);transform:rotate(45deg) scale(.5);-webkit-transition-duration:.8s;transition-duration:.8s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-hold-button.is-pressed .p-hold-button__border--out{-webkit-transform:rotate(45deg) scale(1.12);transform:rotate(45deg) scale(1.12);-webkit-transition-delay:0s;transition-delay:0s}.p-hold-button.is-released .p-hold-button__border--out{-webkit-transform:rotate(45deg) scale(1);transform:rotate(45deg) scale(1);-webkit-transition-delay:0s;transition-delay:0s}@-webkit-keyframes loopFollow{0%{-webkit-transform:translateY(-100.5%);transform:translateY(-100.5%)}100%{-webkit-transform:translateY(100.5%);transform:translateY(100.5%)}}@keyframes loopFollow{0%{-webkit-transform:translateY(-100.5%);transform:translateY(-100.5%)}100%{-webkit-transform:translateY(100.5%);transform:translateY(100.5%)}}.p-introduction{width:100%;height:100vh;-webkit-box-sizing:border-box;box-sizing:border-box;line-height:1.5;position:relative;z-index:10;color:#fff;text-align:center;letter-spacing:.2em}.p-introduction__wrap{position:absolute;right:0;bottom:0;left:0}.p-introduction__row{opacity:0;-webkit-transform:translateY(-10px);transform:translateY(-10px);-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-introduction__row.is-shown{opacity:1;-webkit-transform:translateY(0);transform:translateY(0);-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.p-introduction__row.is-shown:nth-of-type(1){-webkit-transition-delay:5s;transition-delay:5s}.p-introduction__row.is-shown:nth-of-type(2){-webkit-transition-delay:5.25s;transition-delay:5.25s}.p-introduction__row.is-shown:nth-of-type(3){-webkit-transition-delay:5.5s;transition-delay:5.5s}.p-introduction__row.is-shown:nth-of-type(4){-webkit-transition-delay:5.75s;transition-delay:5.75s}.p-introduction__row.is-shown:nth-of-type(5){-webkit-transition-delay:6s;transition-delay:6s}.p-introduction__links{margin-top:20px;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.p-introduction__link{width:18px;height:18px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;opacity:0;-webkit-transform:scale(1.8);transform:scale(1.8);margin:0 12px;-webkit-transition-property:opacity,-webkit-transform;transition-property:opacity,-webkit-transform;transition-property:opacity,transform;transition-property:opacity,transform,-webkit-transform}.p-introduction__link svg{width:18px}.p-introduction__link.is-shown{opacity:1;-webkit-transform:scale(1);transform:scale(1);-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-timing-function:cubic-bezier(.215,.61,.355,1);transition-timing-function:cubic-bezier(.215,.61,.355,1)}.p-introduction__link.is-shown:nth-of-type(1){-webkit-transition-delay:5.6s;transition-delay:5.6s}.p-introduction__link.is-shown:nth-of-type(2){-webkit-transition-delay:5.7s;transition-delay:5.7s}.p-introduction__link.is-shown:nth-of-type(3){-webkit-transition-delay:5.8s;transition-delay:5.8s}.p-introduction__link.is-shown:nth-of-type(4){-webkit-transition-delay:5.9s;transition-delay:5.9s}.p-introduction__link.is-shown:nth-of-type(5){-webkit-transition-delay:6s;transition-delay:6s}.p-introduction__follow{width:15px;height:10vh;overflow:hidden;position:relative;margin:6vh auto 0;opacity:0;-webkit-transition-property:opacity;transition-property:opacity}.p-introduction__follow.is-shown{opacity:1;-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-delay:3s;transition-delay:3s}.p-introduction__follow-in{width:1px;height:100%;position:absolute;top:0;background-color:#fff;-webkit-animation-name:loopFollow;animation-name:loopFollow;-webkit-animation-duration:.8s;animation-duration:.8s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.p-introduction__follow-in--1{left:0}.p-introduction__follow-in--2{left:50%;margin-left:-1px;-webkit-animation-delay:.3s;animation-delay:.3s}.p-introduction__follow-in--3{right:0;-webkit-animation-delay:.15s;animation-delay:.15s}.p-preloader{position:fixed;top:50%;left:50%;z-index:100;pointer-events:none}@media all and (min-width:569px){.p-preloader{width:60px;height:60px;margin-top:-30px;margin-left:-30px}}@media all and (max-width:568px){.p-preloader{width:30px;height:30px;margin-top:-15px;margin-left:-15px}}.p-preloader.is-hidden{opacity:0;-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-property:opacity;transition-property:opacity}.p-preloader__box{width:100%;height:100%;-webkit-box-sizing:border-box;box-sizing:border-box;position:absolute;top:0;left:0;border-style:solid;-webkit-animation-name:rotatePreloaderBox;animation-name:rotatePreloaderBox;-webkit-animation-duration:3s;animation-duration:3s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-fill-mode:both;animation-fill-mode:both}@media all and (min-width:569px){.p-preloader__box{border-width:3px}}@media all and (max-width:568px){.p-preloader__box{border-width:2px}}.p-preloader__box--blank{border-color:#111}.p-preloader__box--white{border-color:#fff}.p-preloader__box--02{-webkit-animation-delay:1s;animation-delay:1s}.p-preloader__box--03{-webkit-animation-delay:2s;animation-delay:2s}@-webkit-keyframes rotatePreloaderBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(0);transform:scale(.1) rotate(0)}12.5%{opacity:1}25%{-webkit-transform:scale(1) rotate(180deg);transform:scale(1) rotate(180deg)}37.5%{opacity:1;-webkit-transform:scale(1) rotate(270deg);transform:scale(1) rotate(270deg)}50%{opacity:0;-webkit-transform:scale(1.2) rotate(360deg);transform:scale(1.2) rotate(360deg)}100%{opacity:0}}@keyframes rotatePreloaderBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(0);transform:scale(.1) rotate(0)}12.5%{opacity:1}25%{-webkit-transform:scale(1) rotate(180deg);transform:scale(1) rotate(180deg)}37.5%{opacity:1;-webkit-transform:scale(1) rotate(270deg);transform:scale(1) rotate(270deg)}50%{opacity:0;-webkit-transform:scale(1.2) rotate(360deg);transform:scale(1.2) rotate(360deg)}100%{opacity:0}}.p-config-menu{position:fixed;bottom:20px;right:20px;z-index:100}.p-sketch-index{max-width:1366px;-webkit-box-sizing:border-box;box-sizing:border-box;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;position:relative;top:0;right:0;left:0;z-index:100000;margin-right:auto;margin-left:auto}@media all and (min-width:1025px){.p-sketch-index{padding-top:100px;padding-bottom:50px;padding-right:7.5%;padding-left:7.5%}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index{padding-top:100px;padding-bottom:50px;padding-right:7.5%;padding-left:7.5%}}@media all and (max-width:568px){.p-sketch-index{padding-top:70px;padding-bottom:40px;padding-right:10px;padding-left:10px}}.p-sketch-index__item{-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}@media all and (min-width:1025px){.p-sketch-index__item{width:33.3%;margin-bottom:60px;padding-right:15px;padding-left:15px}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index__item{width:50%;margin-bottom:40px;padding-right:10px;padding-left:10px}}@media all and (max-width:568px){.p-sketch-index__item{width:100%;margin-bottom:30px;padding-right:10px;padding-left:10px}}.p-sketch-index__item-wrap{display:block}.p-sketch-index__item-thumb{width:100%;position:relative;margin-bottom:10px;padding-top:52.5%;background-color:#fff;background-size:cover}.p-sketch-index__item-thumb:after,.p-sketch-index__item-thumb:before{content:"";display:block;position:absolute;top:0;right:0;bottom:0;left:0}.p-sketch-index__item-thumb:before{background-color:#fff}.p-sketch-index__item-thumb:after{background-color:rgba(0,0,0,.7)}.p-sketch-index__item-thumb-label{width:100%;height:100%;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:absolute;top:0;left:0;z-index:10;letter-spacing:.2em}@media all and (min-width:1025px){.p-sketch-index__item-thumb-label{font-size:24px;font-size:1.5rem}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index__item-thumb-label{font-size:21px;font-size:1.3125rem}}@media all and (max-width:568px){.p-sketch-index__item-thumb-label{font-size:18px;font-size:1.125rem}}.p-sketch-index__item-title{letter-spacing:.1em}@media all and (min-width:1025px){.p-sketch-index__item-title{font-size:32px;font-size:2rem}}@media all and (min-width:569px) and (max-width:1024px){.p-sketch-index__item-title{font-size:28px;font-size:1.75rem}}@media all and (max-width:568px){.p-sketch-index__item-title{font-size:24px;font-size:1.5rem}}.p-sketch-index__item-title .js-split-str{display:inline-block}.p-sketch-index__item-date{margin-top:5px;font-size:12px;font-size:.75rem}.p-sketch-index__item-thumb{-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition-duration:.6s;transition-duration:.6s;-webkit-transition-delay:.4s;transition-delay:.4s;-webkit-transition-timing-function:cubic-bezier(.075,.82,.165,1);transition-timing-function:cubic-bezier(.075,.82,.165,1)}.p-sketch-index__item-thumb:before{-webkit-transition-duration:.4s;transition-duration:.4s;-webkit-transition-delay:.6s;transition-delay:.6s}.p-sketch-index__item-thumb:after{opacity:0;-webkit-transition-duration:.4s;transition-duration:.4s}.p-sketch-index__item-thumb-label .js-split-str{opacity:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition-duration:.6s;transition-duration:.6s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(1){-webkit-transition-delay:0s;transition-delay:0s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(2){-webkit-transition-delay:20ms;transition-delay:20ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(3){-webkit-transition-delay:40ms;transition-delay:40ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(4){-webkit-transition-delay:60ms;transition-delay:60ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(5){-webkit-transition-delay:80ms;transition-delay:80ms}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(6){-webkit-transition-delay:.1s;transition-delay:.1s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(7){-webkit-transition-delay:.12s;transition-delay:.12s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(8){-webkit-transition-delay:.14s;transition-delay:.14s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(9){-webkit-transition-delay:.16s;transition-delay:.16s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(10){-webkit-transition-delay:.18s;transition-delay:.18s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(11){-webkit-transition-delay:.2s;transition-delay:.2s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(12){-webkit-transition-delay:.22s;transition-delay:.22s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(13){-webkit-transition-delay:.24s;transition-delay:.24s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(14){-webkit-transition-delay:.26s;transition-delay:.26s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(15){-webkit-transition-delay:.28s;transition-delay:.28s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(16){-webkit-transition-delay:.3s;transition-delay:.3s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(17){-webkit-transition-delay:.32s;transition-delay:.32s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(18){-webkit-transition-delay:.34s;transition-delay:.34s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(19){-webkit-transition-delay:.36s;transition-delay:.36s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(20){-webkit-transition-delay:.38s;transition-delay:.38s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(21){-webkit-transition-delay:.4s;transition-delay:.4s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(22){-webkit-transition-delay:.42s;transition-delay:.42s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(23){-webkit-transition-delay:.44s;transition-delay:.44s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(24){-webkit-transition-delay:.46s;transition-delay:.46s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(25){-webkit-transition-delay:.48s;transition-delay:.48s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(26){-webkit-transition-delay:.5s;transition-delay:.5s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(27){-webkit-transition-delay:.52s;transition-delay:.52s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(28){-webkit-transition-delay:.54s;transition-delay:.54s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(29){-webkit-transition-delay:.56s;transition-delay:.56s}.p-sketch-index__item-thumb-label .js-split-str:nth-of-type(30){-webkit-transition-delay:.58s;transition-delay:.58s}.p-sketch-index__item-title .js-split-str{opacity:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transition-duration:.6s;transition-duration:.6s}.p-sketch-index__item-title .js-split-str:nth-of-type(1){-webkit-transition-delay:.6s;transition-delay:.6s}.p-sketch-index__item-title .js-split-str:nth-of-type(2){-webkit-transition-delay:.62s;transition-delay:.62s}.p-sketch-index__item-title .js-split-str:nth-of-type(3){-webkit-transition-delay:.64s;transition-delay:.64s}.p-sketch-index__item-title .js-split-str:nth-of-type(4){-webkit-transition-delay:.66s;transition-delay:.66s}.p-sketch-index__item-title .js-split-str:nth-of-type(5){-webkit-transition-delay:.68s;transition-delay:.68s}.p-sketch-index__item-title .js-split-str:nth-of-type(6){-webkit-transition-delay:.7s;transition-delay:.7s}.p-sketch-index__item-title .js-split-str:nth-of-type(7){-webkit-transition-delay:.72s;transition-delay:.72s}.p-sketch-index__item-title .js-split-str:nth-of-type(8){-webkit-transition-delay:.74s;transition-delay:.74s}.p-sketch-index__item-title .js-split-str:nth-of-type(9){-webkit-transition-delay:.76s;transition-delay:.76s}.p-sketch-index__item-title .js-split-str:nth-of-type(10){-webkit-transition-delay:.78s;transition-delay:.78s}.p-sketch-index__item-title .js-split-str:nth-of-type(11){-webkit-transition-delay:.8s;transition-delay:.8s}.p-sketch-index__item-title .js-split-str:nth-of-type(12){-webkit-transition-delay:.82s;transition-delay:.82s}.p-sketch-index__item-title .js-split-str:nth-of-type(13){-webkit-transition-delay:.84s;transition-delay:.84s}.p-sketch-index__item-title .js-split-str:nth-of-type(14){-webkit-transition-delay:.86s;transition-delay:.86s}.p-sketch-index__item-title .js-split-str:nth-of-type(15){-webkit-transition-delay:.88s;transition-delay:.88s}.p-sketch-index__item-title .js-split-str:nth-of-type(16){-webkit-transition-delay:.9s;transition-delay:.9s}.p-sketch-index__item-title .js-split-str:nth-of-type(17){-webkit-transition-delay:.92s;transition-delay:.92s}.p-sketch-index__item-title .js-split-str:nth-of-type(18){-webkit-transition-delay:.94s;transition-delay:.94s}.p-sketch-index__item-title .js-split-str:nth-of-type(19){-webkit-transition-delay:.96s;transition-delay:.96s}.p-sketch-index__item-title .js-split-str:nth-of-type(20){-webkit-transition-delay:.98s;transition-delay:.98s}.p-sketch-index__item-title .js-split-str:nth-of-type(21){-webkit-transition-delay:1s;transition-delay:1s}.p-sketch-index__item-title .js-split-str:nth-of-type(22){-webkit-transition-delay:1.02s;transition-delay:1.02s}.p-sketch-index__item-title .js-split-str:nth-of-type(23){-webkit-transition-delay:1.04s;transition-delay:1.04s}.p-sketch-index__item-title .js-split-str:nth-of-type(24){-webkit-transition-delay:1.06s;transition-delay:1.06s}.p-sketch-index__item-title .js-split-str:nth-of-type(25){-webkit-transition-delay:1.08s;transition-delay:1.08s}.p-sketch-index__item-title .js-split-str:nth-of-type(26){-webkit-transition-delay:1.1s;transition-delay:1.1s}.p-sketch-index__item-title .js-split-str:nth-of-type(27){-webkit-transition-delay:1.12s;transition-delay:1.12s}.p-sketch-index__item-title .js-split-str:nth-of-type(28){-webkit-transition-delay:1.14s;transition-delay:1.14s}.p-sketch-index__item-title .js-split-str:nth-of-type(29){-webkit-transition-delay:1.16s;transition-delay:1.16s}.p-sketch-index__item-title .js-split-str:nth-of-type(30){-webkit-transition-delay:1.18s;transition-delay:1.18s}.p-sketch-index__item-date{opacity:0;-webkit-transition-duration:1s;transition-duration:1s;-webkit-transition-delay:.8s;transition-delay:.8s}.p-sketch-index__item.is-shown .p-sketch-index__item-thumb{-webkit-transform:scaleY(1);transform:scaleY(1)}.p-sketch-index__item.is-shown .p-sketch-index__item-thumb:before{opacity:0}.p-sketch-index__item.is-shown .p-sketch-index__item-title .js-split-str{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.p-sketch-index__item.is-shown .p-sketch-index__item-date{opacity:1}.p-sketch-index__item:hover .p-sketch-index__item-thumb:after{opacity:1}.p-sketch-index__item:hover .p-sketch-index__item-thumb-label .js-split-str{opacity:1;-webkit-transform:scale(1);transform:scale(1)}.p-sketch-outline{position:fixed;z-index:100;bottom:22px;left:20px}@media all and (max-width:568px){.p-sketch-outline{right:20px}}.p-sketch-outline__title{line-height:1;margin-top:0;margin-bottom:.075em;margin-left:-.05em;font-weight:100;letter-spacing:.05em}@media all and (min-width:1367px){.p-sketch-outline__title{font-size:80px}}@media all and (min-width:569px) and (max-width:1366px){.p-sketch-outline__title{font-size:6vw}}@media all and (max-width:568px){.p-sketch-outline__title{font-size:62.48px}}.p-sketch-outline__date{line-height:1;margin:0}.p-sketch-outline__description{line-height:1.5;margin:10px 0 0}.p-sketch-outline__assets{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:8px;margin-bottom:0}.p-sketch-outline__assets dd{margin:0}.p-sketch-outline__assets ul{display:-webkit-box;display:-ms-flexbox;display:flex;list-style-type:none;margin:0;padding:0}.p-sketch-outline__assets li{margin-left:12px}.p-utility-menu{position:fixed;z-index:100;top:25px;right:20px}.p-website-outline{position:fixed;z-index:100;top:20px;left:20px}.p-website-outline__title{margin:0 0 5px;font-size:18px;font-size:1.125rem}.p-website-outline__description{line-height:1.25;margin:0}.p-website-outline__links{display:-webkit-box;display:-ms-flexbox;display:flex;margin-top:15px}.p-website-outline__link{width:18px;height:18px;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;margin-right:20px}.p-website-outline__link svg{width:18px}
src/main/webapp/static/js/taskLog/taskLog.js
@@ -107,7 +107,7 @@
                    maxmin: true,
                    area: [top.detailWidth, top.detailHeight],
                    shadeClose: true,
                    content: 'taskLog_detail.html',
                    content: 'taskDetlLog.html',
                    success: function (layero, index) {
                    }
                });
src/main/webapp/views/taskLog/taskDetlLog.html
New file
@@ -0,0 +1,93 @@
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title></title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all">
    <link rel="stylesheet" href="../../static/css/cool.css" media="all">
    <link rel="stylesheet" href="../../static/css/common.css" media="all">
    <style>
    </style>
</head>
<body>
<div class="layui-inline" style="width:31%;margin-top: 20px">
    <label class="layui-form-label">工 作 号:</label>
    <div class="layui-input-inline">
        <input id="wrkNo" class="layui-input" type="text" disabled="disabled">
    </div>
</div>
<table class="layui-hide" id="taskDetailByMast" lay-filter="taskDetailByMast"></table>
</body>
<script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/locMast/locMast.js" charset="utf-8"></script>
<script type="text/javascript">
    var pageCur;
    function getCol() {
        var cols = [
            {field: 'wrkNo', align: 'center', title: '工作号'}
            , {field: 'ioTime$', align: 'center', title: '工作时间'}
        ];
        cols.push.apply(cols, detlCols);
        return cols;
    }
    layui.use(['table', 'laydate', 'form'], function () {
        table = layui.table;
        var $ = layui.jquery;
        var form = layui.form;
        $('#wrkNo').val(parent.wrkNo);
        // 数据渲染
        tableIns1 = table.render({
            elem: '#taskDetailByMast',
            headers: {token: localStorage.getItem('token')},
            url: baseUrl + '/taskDetlLog/list/auth',
            where: {wrk_no: parent.wrkNo},
            page: true,
            limit: 16,
            limits: [16, 30, 50, 100, 200, 500],
            even: true,
            toolbar: '#toolbar',
            cellMinWidth: 50,
            cols: [getCol()],
            request: {
                pageName: 'curr',
                pageSize: 'limit'
            },
            parseData: function (res) {
                return {
                    'code': res.code,
                    'msg': res.msg,
                    'count': res.data.total,
                    'data': res.data.records
                }
            },
            response: {
                statusCode: 200
            },
            done: function (res, curr, count) {
                if (res.code === 403) {
                    top.location.href = baseUrl + "/";
                }
                pageCur = curr;
                form.on('checkbox(tableCheckbox)', function (data) {
                    var _index = $(data.elem).attr('table-index') || 0;
                    if (data.elem.checked) {
                        res.data[_index][data.value] = 'Y';
                    } else {
                        res.data[_index][data.value] = 'N';
                    }
                });
            }
        });
    });
</script>
</html>
src/main/webapp/views/taskLog/taskLog.html
@@ -72,7 +72,7 @@
<!-- 表格 -->
<div class="layui-form">
    <table class="layui-hide" id="wrkMastLog" lay-filter="wrkMastLog"></table>
    <table class="layui-hide" id="taskLog" lay-filter="taskLog"></table>
</div>
<script type="text/html" id="toolbar">
    <div class="layui-btn-container">
@@ -89,7 +89,7 @@
<script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/wrkMastLog/wrkMastLog.js" charset="utf-8"></script>
<script type="text/javascript" src="../../static/js/taskLog/taskLog.js" charset="utf-8"></script>
<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe>
src/main/webapp/views/taskLog/taskLog_detail.html
File was deleted