Commit f3919697 by zhuzhequan

添加自动打印逻辑

parent f487e64e
......@@ -2,12 +2,12 @@ import {
downloadImage,
downloadOtherImage,
toSend,
writeProfileXml,
writeProfileXml
} from "@/server/utils";
const {
cropImageTransparentEdges,
cropTransparentEdges,
processImages,
processImages
} = require("../utils/setImage");
import axios from "axios";
import { returnLogFilePath } from "../utils/log";
......@@ -15,13 +15,11 @@ var request = require("request");
const compressing = require("compressing");
const uuid = require("uuid");
const path = require("path");
const fs = require("fs");
const os = require("os");
const { app } = require("electron");
let fileEnv, env, visionUrl;
axios.defaults.timeout = 12600000;
const multiparty = require("multiparty");
function readEnv() {
......@@ -74,7 +72,7 @@ export default {
const token = req.headers["jwt-token"];
try {
let {
data,
data
} = await axios.post(
`${env}/factory/podJomallOrder/downloadByProduction`,
[req.body[0]],
......@@ -83,27 +81,27 @@ export default {
let files = [];
if (data.code === 200) {
files = data.data;
files = files.map((el) => {
files = files.map(el => {
return { url: `${fileEnv}${el}` };
});
// res.json({ code: 200, data: "" });
// return;
if (req.body[1] === 1) {
downloadImage(files)
.then((data) => {
.then(data => {
res.json({ code: 200, data });
})
.catch((err) => {
.catch(err => {
res.json({ code: 500, msg: err });
});
} else {
downloadOtherImage(files)
.then((data) => {
.then(data => {
console.log(77, data);
res.json({ code: 200, data });
})
.catch((err) => {
.catch(err => {
res.json({ code: 500, msg: err });
});
}
......@@ -123,7 +121,7 @@ export default {
`${env}/factory/podJomallOrderProduct/getSubOrderByThirdSubOrderNumber`,
{
params: q,
headers: { "jwt-token": token },
headers: { "jwt-token": token }
}
);
res.json(data);
......@@ -147,7 +145,7 @@ export default {
const token = req.headers["jwt-token"];
try {
let {
data,
data
} = await axios.post(
`${env}/factory/podJomallOrderProduct/completeDelivery`,
req.body,
......@@ -180,7 +178,7 @@ export default {
console.log("success");
res.json({
code: 200,
msg: q.productionNo + ".zip" + "已下载到桌面",
msg: q.productionNo + ".zip" + "已下载到桌面"
});
})
.on("error", () => {
......@@ -222,8 +220,8 @@ export default {
code: 200,
data: {
fileName,
url: path.join(process.cwd(), "./print/Input/" + fileName),
},
url: path.join(process.cwd(), "./print/Input/" + fileName)
}
});
}
});
......@@ -275,10 +273,10 @@ export default {
console.log(249, body);
toSend(body)
.then((r) => {
.then(r => {
res.send({ code: 200, msg: "操作成功" });
})
.catch((err) => {
.catch(err => {
res.send({ code: 500, msg: err });
});
},
......@@ -317,7 +315,7 @@ export default {
fs.unlinkSync(from);
res.json({ code: 200, msg: "更新成功" });
})
.catch((err) => {
.catch(err => {
res.json({ code: 500, msg: err.message });
});
});
......@@ -358,4 +356,33 @@ export default {
res.json({ code: 500, msg: err.message });
}
},
saveToPng: async (req, res) => {
try {
const p = path.join(process.cwd(), "./print/Input/");
const form = new multiparty.Form({ uploadDir: p });
form.parse(req, function(err, fields, files) {
console.log(fields, files, err);
if (err) {
res.send({ code: 500, err });
} else {
let list = [];
files.files.forEach(file => {
let fileName = uuid.v4() + ".png";
fs.renameSync(file.path, path.join(p, fileName));
list.push({
fileName,
url: path.join(process.cwd(), "./print/Input/" + fileName)
});
});
res.json({
code: 200,
data: list
});
}
});
} catch (err) {
console.log(err);
res.json({ code: 500, msg: err });
}
}
};
......@@ -37,4 +37,7 @@ router.post("/imageListTransparentEdges", fn.imageListTransparentEdges);
// 处理图片并输出结果
router.post("/processImage", fn.processImage);
// 保存生成后得图片返回地址
router.post("/saveToPng", fn.saveToPng);
export { router as default };
......@@ -226,10 +226,7 @@ export default {
productDetail(newValue) {
this.detail = { ...newValue };
if (typeof this.detail.imageAry == "string") {
this.detail.imageAry = JSON.parse(this.detail.imageAry).map((el) => {
if (!el.title) el.title = 1;
return el;
});
this.detail.imageAry = JSON.parse(this.detail.imageAry).filter(el=>el.title)
const otherArr = this.detail.imageAry.filter((el) => el.title == 1);
this.detail.AimageAry = [
...this.detail.imageAry.filter((el) => el.title === "正"),
......@@ -366,12 +363,21 @@ export default {
return mm1.width;
},
setDesignImg(title){
let img = this.selectImgList.find(it=>it.title===title)
if(img){
console.log(this.detail.designImageSize,'this.detail.size');
this.getBackFile({ files: [img] ,size:this.detail.designImageSize}, (file) => {
this.imgHistoryList.push(JSON.parse(JSON.stringify(this.imgList)));
});
}
},
selectImg(it, i) {
// this.selectImgIndexList.push(i)
let item = this.imgList.find((img) => img.fileName === it.fileName);
if (item) return;
// this.selectImgIndexList = Array.from(new Set(this.selectImgIndexList))
this.getBackFile({ files: [it] }, (file) => {
this.getBackFile({ files: [it],size:null }, (file) => {
this.imgHistoryList.push(JSON.parse(JSON.stringify(this.imgList)));
});
},
......@@ -526,18 +532,27 @@ export default {
};
});
},
getComputedName(title){
let img = this.selectImgList.find(it=>it.title===title)
return img?.fileName
},
getComputedTitle(title){
console.log(this.selectImgList,'this.selectImgList');
let img = this.selectImgList.find(it=>it.title===title)
return img?.url
},
getBackFile({ files, size }, callback) {
let that = this;
let bw = document.getElementById("line").clientWidth;
let bw = window.getComputedStyle(document.getElementsByClassName('grid')[0]).width
bw = Number(bw.replace('px',''))
for (let i = 0; i < files.length; i++) {
files[i].url = files[i].productionFile;
files[i].url = files[i].productionFile || files[i].url
that.$nextTick(async () => {
let w = document.getElementById("line").clientWidth / 2;
let w = bw / 2;
let width_px, height_px, rate;
if (size) {
width_px = mmToPx(size.width);
height_px = mmToPx(size.height);
console.log(width_px, height_px, "w,h");
rate = height_px / width_px;
} else {
let data = await that.getImageSize(files[i].url);
......@@ -783,17 +798,19 @@ export default {
});
break;
case "sendFile":
console.log('sendFile');
if(size){
this.hasSize = true
}else{
this.hasSize = false
}
this.imgList = [];
this.detail.designImageSize = size
this.imgList = []
this.selectIndex = -1;
if (value.length > 0) {
this.selectImgList = value;
this.selectImgIndex = 0;
this.getBackFile({ files: [value[0]], size }, (file) => {
this.getBackFile({ files: [value[0]], size:this.detail.designImageSize || null }, (file) => {
this.imgHistoryList.push(
JSON.parse(JSON.stringify(this.imgList))
);
......@@ -845,113 +862,20 @@ export default {
>
</div>
</div>
<el-row class="main">
<el-col :span="6">
<div class="text-center">打印区域</div>
</el-col>
<el-col :span="9" class="effectPic border-col">
<div class="pic-title">效果图</div>
</el-col>
<el-col :span="9">
<div class="pic-title">素材图</div>
</el-col>
<el-row class="border-row">
<el-col :span="6" class="text-center"><div>A面</div></el-col>
<el-col :span="9" class="border-col text-center">
<el-carousel
v-if="detail.AimageAry?.length"
height="170px"
:autoplay="false"
indicator-position="none"
style="width: 100%;"
>
<el-carousel-item
v-for="(item, index) in detail.AimageAry"
:key="index"
>
<img class="full-width" :src="item.url" alt="" />
</el-carousel-item>
</el-carousel>
<div v-else>&nbsp;</div>
</el-col>
<el-col
:span="9"
style="overflow: hidden;align-items: stretch;flex-grow: 1"
>
<el-checkbox-group
v-if="selectImgList.length"
v-model="checkList"
>
<el-checkbox
:label="selectImgList[0]"
:class="{
imgchecked: checkList.includes(selectImgList[0]),
}"
>
<div
class="img-item"
@click.stop.prevent="selectImg(selectImgList[0], 0)"
>
<img
style="width: 140px"
:src="selectImgList[0].productionFile"
/>
<span>{{ selectImgList[0].designId }}</span>
</div>
</el-checkbox>
</el-checkbox-group>
</el-col>
</el-row>
<el-row class="border-row">
<el-col :span="6" class="text-center"><div>B面</div></el-col>
<el-col :span="9" class="border-col text-center">
<el-carousel
v-if="detail.BimageAry?.length"
height="170px"
:autoplay="false"
indicator-position="none"
style="width: 100%;"
>
<el-carousel-item
v-for="(item, index) in detail.BimageAry"
:key="index"
>
<img class="full-width" :src="item.url" alt="" />
</el-carousel-item>
</el-carousel>
<div v-else>&nbsp;</div>
</el-col>
<el-col :span="9" style="overflow: hidden;">
<el-checkbox-group
v-if="selectImgList.length > 1"
v-model="checkList"
>
<el-checkbox
:label="selectImgList[1]"
:class="{
imgchecked: checkList.includes(selectImgList[1]),
}"
>
<div
class="img-item"
@click.stop.prevent="selectImg(selectImgList[1], 1)"
>
<img
style="width: 140px"
:src="selectImgList[1].productionFile"
/>
<span>{{ selectImgList[1].designId }}</span>
</div>
</el-checkbox>
</el-checkbox-group>
</el-col>
</el-row>
</el-row>
<el-table border :data="detail.imageAry">
<el-table-column label="打印区域" prop="title"></el-table-column>
<el-table-column label="效果图" prop="title">
<template slot-scope="{row}">
<img class="full-width" :src="row.url" alt="" />
</template>
</el-table-column>
<el-table-column label="素材图" prop="title">
<template slot-scope="{row}">
<img style="cursor: pointer" @click="setDesignImg(row.title)" v-if="getComputedTitle(row.title)" class="full-width" :src="getComputedTitle(row.title)" alt="" />
<span>{{getComputedName(row.title)}}</span>
</template>
</el-table-column>
</el-table>
</div>
<div class="product-information">
<div class="title">
......@@ -1224,7 +1148,7 @@ export default {
</div>
</div>
</div>
<div class="print-tip" v-if="imgList.length">
<div class="print-tip" v-if="detail && detail.designImageSize && selectImgList.length">
<b style="color: green" v-if="hasSize ">该生产单无需拖动设计,直接打印</b>
<b style="color: red" v-else>该生产单需要拖动设计打印</b>
</div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment