function itemToView(item) {
    var groups = [];

    // 基本信息
    groups.push({
        name: "基本信息",
        title: {
            label: "组件序列号",
            value: item.组件编号
        },
        head: [
            { label: "车间编号", value: item.车间编号 },
            { label: "当前站点", value: item.当前站点 },
            { label: "客户名称", value: item.客户名称 },
            { label: "工单类型", value: item.工单类型 },
        ],
        attrs: []
    });

    // 整理属性
    function getAttrs(allAttrs, processCode) {
        if (!allAttrs || !allAttrs.length) return [];
        var info = allAttrs.filter(x => x.站点 == processCode);
        var dict = {};
        info.forEach(x => {
            if (!dict[x.物料类型]) dict[x.物料类型] = {};
            if (x.子批号 && !dict[x.物料类型].子批号) dict[x.物料类型].子批号 = x.子批号;
            if (x.母批号 && !dict[x.物料类型].母批号) dict[x.物料类型].母批号 = x.母批号;
            if (x.厂商 && !dict[x.物料类型].厂商) dict[x.物料类型].厂商 = x.厂商;
            if (x.属性名 && x.属性值) dict[x.物料类型][x.属性名] = x.属性值;
        });

        var attrs = [];
        for (var partType in dict) {
            for (var attrName in dict[partType]) {
                var label = attrName + " (" + partType + ")";
                var value = dict[partType][attrName];
                attrs.push({ label: label, value: value });
            }
        }
        return attrs;
    }

    // 焊接
    groups.push({
        name: "焊接",
        title: {
            label: "站点",
            value: "焊接"
        },
        vid: {
            label: "虚拟 ID",
            value: item.虚拟ID
        },
        lr: {
            label: "LR 侧",
            value: item.LR侧
        },
        head: [
            { label: "焊接时间", value: item.焊接时间 },
            { label: "焊接机台", value: item.焊接机台名称 },
            { label: "操作人员", value: item.焊接操作人员 },
            { label: "焊接班次", value: item.焊接操作班次 },
            { label: "破片数量", value: item.破片数量 },
        ],
        attrs: getAttrs(item.物料信息, "M10")
    });

    // 叠层
    groups.push({
        title: {
            label: "站点",
            value: "叠层"
        },
        head: [
            { label: "叠层时间", value: item.叠层时间 },
            { label: "叠层机台", value: item.叠层机台名称 },
            { label: "操作人员", value: item.叠层操作人员 },
            { label: "叠层班次", value: item.叠层操作班次 },
        ],
        attrs: getAttrs(item.物料信息, "M15")
    });

    // 层压前EL
    groups.push({
        title: {
            label: "站点",
            value: "层压前EL"
        },
        head: [
            { label: "测试时间", value: item.前EL测试时间 },
            { label: "测试机台", value: item.前EL机台名称 },
            { label: "操作人员", value: item.前EL操作人员 },
            { label: "测试结果", value: item.前EL测试结果 },
        ],
        attrs: []
    });

    // 层压
    groups.push({
        title: {
            label: "站点",
            value: "层压"
        },
        head: [
            { label: "测试时间", value: item.层压时间 },
            { label: "测试机台", value: item.层压机台名称 },
            { label: "操作人员", value: item.层压操作人员 },
            { label: "层压位置", value: item.层压位置 },
            { label: "一腔温度设定值", value: item.一腔温度设定值 },
            { label: "二腔温度设定值", value: item.二腔温度设定值 },
            { label: "上真空延时时间设定", value: item.上真空延时时间设定值 },
            { label: "抽真空时间设定", value: item.抽真空时间设定值 },
            { label: "加压1延时设定值", value: item.加压1延时设定值 },
            { label: "加压1压力设定值", value: item.加压1压力设定值 },
            { label: "加压2延时设定值", value: item.加压2延时设定值 },
            { label: "加压2压力设定值", value: item.加压2压力设定值 },
            { label: "加压3延时设定值", value: item.加压3延时设定值 },
            { label: "加压3压力设定值", value: item.加压3压力设定值 },
            { label: "层压时间设定值", value: item.层压时间设定值 },
            { label: "下充气时间设定值", value: item.下充气时间设定值 },
        ],
        attrs: []
    });

    // 中EL
    groups.push({
        title: {
            label: "站点",
            value: "中EL"
        },
        head: [
            { label: "测试时间", value: item.中EL测试时间 },
            { label: "测试机台", value: item.中EL机台名称 },
            { label: "操作人员", value: item.中EL操作人员 },
            { label: "测试结果", value: item.中EL测试结果 },
        ],
        attrs: []
    });

    // 层压后EL
    groups.push({
        title: {
            label: "站点",
            value: "层压后EL"
        },
        head: [
            { label: "测试时间", value: item.层压后EL测试时间 },
            { label: "测试机台", value: item.层压后EL机台名称 },
            { label: "操作人员", value: item.层压后EL操作人员 },
            { label: "测试结果", value: item.层压后EL测试结果 },
        ],
        attrs: []
    });

    // 装框
    groups.push({
        title: {
            label: "站点",
            value: "装框"
        },
        head: [
            { label: "装框时间", value: item.装框时间 },
            { label: "装框机台", value: item.装框机台名称 },
            { label: "操作人员", value: item.装框操作人员 },
            { label: "装框班次", value: item.装框操作班次 },
        ],
        attrs: getAttrs(item.物料信息, "M45")
    });

    // 清洗
    groups.push({
        title: {
            label: "站点",
            value: "清洗"
        },
        head: [
            { label: "清洗时间", value: item.清洗时间 },
            { label: "清洗机台", value: item.清洗机台编号 },
            { label: "操作人员", value: item.清洗操作人员 },
            { label: "清洗班次", value: item.清洗操作班次 },
        ],
        attrs: []
    });

    // 耐压测试
    groups.push({
        title: {
            label: "站点",
            value: "耐压测试"
        },
        head: [
            { label: "测试时间", value: item.耐压测试时间 },
            { label: "测试机台", value: item.耐压测试机台名称 },
            { label: "操作人员", value: item.耐压测试操作人员 },
            { label: "测试结果", value: item.耐压测试结果 },
        ],
        attrs: []
    });

    // 电性能测试
    groups.push({
        title: {
            label: "站点",
            value: "电性能测试"
        },
        head: [
            { label: "测试时间", value: item.测试时间 },
            { label: "测试机台", value: item.IV机台名称 },
            { label: "测试功率", value: item.测试功率 },
            { label: "测试电流", value: item.测试电流 },
            { label: "测试温度", value: item.IV测试温度 },
        ],
        attrs: []
    });

    // 测试后EL
    groups.push({
        title: {
            label: "站点",
            value: "测试后EL"
        },
        head: [
            { label: "测试时间", value: item.后EL测试时间 },
            { label: "测试机台", value: item.后EL机台名称 },
            { label: "操作人员", value: item.后EL操作人员 },
            { label: "测试结果", value: item.后EL测试结果 },
        ],
        attrs: []
    });

    // 检验评审
    groups.push({
        title: {
            label: "站点",
            value: "检验评审"
        },
        head: [
            { label: "评审时间", value: item.全检时间 },
            { label: "评审人员", value: item.全检操作人员 },
            { label: "外观等级", value: item.外观等级 },
            { label: "EL等级", value: item.EL等级 },
            { label: "最终等级", value: item.最终等级 },
            { label: "不良原因", value: "" },
            { label: "三码校验", value: item.三码校验结果 },
            { label: "全检次数", value: item.全检次数 },
        ],
        attrs: []
    });

    // 分档
    if (item.分档次数) {
        groups.push({
            title: {
                label: "站点",
                value: "分档"
            },
            head: [
                { label: "分档时间", value: item.分档时间 },
                { label: "分档位置", value: item.分档位置 },
                { label: "分档次数", value: item.分档次数 },
            ],
            attrs: []
        });
    }

    // 包装
    groups.push({
        title: {
            label: "站点",
            value: "包装"
        },
        head: [
            { label: "包装时间", value: item.包装时间 },
            { label: "包装机台", value: item.包装机台编号 },
            { label: "操作人员", value: item.包装操作人员 },
            { label: "包装托盘", value: item.托盘号 },
        ],
        attrs: []
    });

    return { item: item, groups: groups };
}

function initVue() {
    window.vue = new Vue({
        el: "#vue",
        data: {
            // 开关
            profile: "",
            showqel: false,
            showcydata: true,
            tableData: [],

            // 电子流转单，每个元素是一个组件的单子流转单
            views: [],
            cols: 5,

            // 组件数据
            item: {},

        },
        computed: {},
        methods: {
            loadData: function () {
                var sn = urlQuery("sn");
                if (!sn) sn = "251203050200001";
                var body = { SerialNum: sn };
                ajaxPost("/api/dianziDataQueryNew/dianziDataQuery", body, (r) => {
                    // ajaxGet("response.json", (r) => {
                    if (!r.status) return toast(r.msg);
                    if (!r.data.length) return toast("NOT FOUND");

                    // 调整数据
                    // ...

                    this.views = r.data.map(item => itemToView(item));
                    var doprint = urlQuery("doprint");
                    switch (doprint) {
                        case "true":
                        case "yes":
                        case "1":
                            window.lang.loadStrings(() => {
                                window.print();
                            });
                            break;
                    }
                }, (e) => {
                    if (e.message) toast(e.message);
                });
            },
        }
    });
    vue.loadData();
    if (window.lang) {
        window.lang.loadStrings(() => {
            vue.$forceUpdate();
        });
    }
}

window.addEventListener("load", () => {
    initVue();
});