Commit a65d4912 by linjinhong

feat:【生产软件】(新)生产软件新增烫画智能排版管理模块

parent a29c51e3
...@@ -388,6 +388,13 @@ async function createWindow() { ...@@ -388,6 +388,13 @@ async function createWindow() {
win.webContents.send("sendWebsockt", obj); win.webContents.send("sendWebsockt", obj);
}); });
ipcMain.on("open-folder-only", async (event, dirPath) => {
console.log(938, dirPath);
const result = shell.showItemInFolder(dirPath);
return result;
});
win.on("closed", () => { win.on("closed", () => {
// win && win.removeAllListeners(); // win && win.removeAllListeners();
// win = null; // win = null;
......
...@@ -222,8 +222,8 @@ export default { ...@@ -222,8 +222,8 @@ export default {
} }
}, },
mounted() { mounted() {
console.log("tableConfig", this.tableConfig); // console.log("tableConfig", this.tableConfig);
console.log("tableData", this.tableData); // console.log("tableData", this.tableData);
} }
}; };
</script> </script>
......
...@@ -18,42 +18,42 @@ const routes = [ ...@@ -18,42 +18,42 @@ const routes = [
meta: { meta: {
title: "设计页面" title: "设计页面"
}, },
component: resolve => require(["../views/design/index.vue"], resolve) component: resolve => require(["../views/design/tabIndex.vue"], resolve),
}, redirect: "/design/dtg",
children: [
// { // DTG
// path: "/design-detail", {
// name: "design", path: "dtg",
// meta: { name: "design-dtg",
// title: "设计详情页面" meta: { title: "DTG生产" },
// }, component: resolve => require(["../views/design/index.vue"], resolve)
// component: resolve => require(["../views/design/detail/index.vue"], resolve) },
// }, // DTF 列表
{ {
path: "/dtf-setting", path: "dtf",
name: "dtfSetting", name: "design-dtf",
meta: { meta: { title: "DTF生产" },
title: "DTF排版设置" component: resolve => require(["@/views/dtf-list/index.vue"], resolve)
}, },
component: resolve => require(["@/views/dtf-setting/index.vue"], resolve) // DTF 排版设置
}, {
{ path: "dtf/setting",
path: "/dtf-batch-detail", name: "dtf-setting",
name: "dtfBatchDetail", meta: { title: "DTF排版设置" },
meta: { component: resolve =>
title: "DTF批次详情" require(["@/views/dtf-setting/index.vue"], resolve)
}, },
component: resolve => // DTF 批次详情
require(["@/views/dtf-batch-detail/detail.vue"], resolve) {
}, path: "dtf/batch-detail",
{ name: "dtf-batch-detail",
path: "/dtf-file", meta: { title: "DTF批次详情" },
name: "dtfFileDownLoad", component: resolve =>
meta: { require(["@/views/dtf-batch-detail/detail.vue"], resolve)
title: "DTF下载文件详情" }
}, ]
component: resolve => require(["@/views/dtf-file/index.vue"], resolve)
}, },
// 删掉原来独立的 /dtf-setting、/dtf-batch-detail、/dtf-file
{ {
path: "*", path: "*",
redirect: "/" redirect: "/"
......
...@@ -652,5 +652,15 @@ export default { ...@@ -652,5 +652,15 @@ export default {
console.log("checkInventory", error); console.log("checkInventory", error);
res.json({ code: 500, msg: error }); res.json({ code: 500, msg: error });
} }
},
getFileList: async (req, res) => {
try {
const { downloadDir } = req.body;
res.send();
} catch (error) {
console.log("getFileList", error);
res.json({ code: 500, msg: error });
}
} }
}; };
...@@ -51,6 +51,8 @@ router.post("/getAllCountry", fn.getAllCountry); ...@@ -51,6 +51,8 @@ router.post("/getAllCountry", fn.getAllCountry);
//根据图片地址保存文件到本地 //根据图片地址保存文件到本地
router.post("/saveImgByUrl", fn.saveImgByUrl); router.post("/saveImgByUrl", fn.saveImgByUrl);
//获取目标路径文件夹下所以文件
router.post("/getFileList", fn.getFileList);
//复制文件夹下文件 //复制文件夹下文件
router.post("/copySingleImageFn", fn.copySingleImageFn); router.post("/copySingleImageFn", fn.copySingleImageFn);
......
...@@ -202,11 +202,29 @@ module.exports = { ...@@ -202,11 +202,29 @@ module.exports = {
}, },
getIsOver: () => store.get("isOver") || false, getIsOver: () => store.get("isOver") || false,
//本地储存 DTG、DTF生产 //本地储存 DTG、DTF生产类型
setProductType: value => { setProductType: value => {
store.set("productType", value); store.set("productType", value);
}, },
getProductType: () => store.get("productType") || "DTG", getProductType: () => store.get("productType") || "DTG",
//DTF生产设置
setDTFSetting: value => {
console.log("DTFSetting", value);
store.set("DTFSetting", value);
},
getDTFSetting: () =>
store.get("DTFSetting") || {
overWidthMode: "autoScale",
// 最大素材数模式:batch / custom
maxPicMode: "batch",
// 自定义素材数量
customPicNum: 30,
// 自动排版规格 40+2 / 60 / none
autoLayoutType: "none",
// 默认下载目录
downloadDir: ""
},
setLocation: (version, locationKey) => { setLocation: (version, locationKey) => {
if (!locationKey) return; if (!locationKey) return;
......
<script> <script>
import PHead from "./head/index.vue"; import PHead from "./head/index.vue";
import PMain from "./main/index.vue"; import PMain from "./main/index.vue";
import DTFproduct from "@/views/dtf-list/index.vue";
import UpdateDialog from "@/views/design/updateDialog.vue";
const { getProductType, setProductType } = require("@/server/utils/store");
export default { export default {
components: { PHead, PMain, UpdateDialog, DTFproduct }, name: "design-dtg",
components: { PHead, PMain },
data() { data() {
return { return {
user: {}, user: {},
factoryType: "CN", factoryType: "CN"
activeName: getProductType()
}; };
}, },
mounted() { mounted() {},
console.log(18, getProductType()); methods: {}
this.user = this.$dataStore.get("user");
if (this.user.factory && this.user.factory.countryCode) {
this.factoryType = this.user.factory.countryCode;
}
// console.log(17, this.user);
this.$refs.updateDialog.checkUpdate().then(data => {
// console.log(17, data);
if (data) {
// 有新版本更新
this.$refs.updateDialog.open(data);
}
});
},
methods: {
tabClick(tab) {
console.log(34, tab);
setProductType(tab.name);
}
}
}; };
</script> </script>
<template> <template>
<div class="page"> <div class="page">
<el-tabs type="border-card" v-model="activeName" @tab-click="tabClick"> <p-head :user="user" :factoryType="factoryType" />
<el-tab-pane label="DTG生产" name="DTG"> <p-main :factoryType="factoryType" />
<p-head :user="user" :factoryType="factoryType"/>
<p-main :factoryType="factoryType"/>
<update-dialog ref="updateDialog"
/></el-tab-pane>
<el-tab-pane label="DTF生产" name="DTF">
<DTFproduct :user="user" :factoryType="factoryType"></DTFproduct>
</el-tab-pane>
</el-tabs>
</div> </div>
</template> </template>
...@@ -64,42 +30,4 @@ export default { ...@@ -64,42 +30,4 @@ export default {
flex-direction: column; flex-direction: column;
// border-top: 1px solid #dcdfe6; // border-top: 1px solid #dcdfe6;
} }
::v-deep {
.el-tabs {
height: 100%;
border-bottom: none;
}
.el-tabs__header {
margin: 0;
background-color: #c6c6c6;
// height: 20px;
}
.el-tabs__header .el-tabs__item {
font-size: 12px;
line-height: 25px;
height: 25px;
// border-bottom: none;
}
.el-tabs--border-card > .el-tabs__content {
padding: 0;
height: 100%;
}
.el-tab-pane {
height: 100%;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
border: none;
background-color: #243151;
color: #fff;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item {
border: none;
}
.el-tabs--border-card
> .el-tabs__header
.el-tabs__item:not(.is-disabled):hover {
color: #fff;
// background-color: #5b647c;
}
}
</style> </style>
...@@ -38,22 +38,18 @@ export default { ...@@ -38,22 +38,18 @@ export default {
}, },
created() { created() {
this.$store.commit("getNewGrid"); this.$store.commit("getNewGrid");
let proportion;
ipcRenderer.on("window-size", (event, size) => { ipcRenderer.on("window-size", (event, size) => {
const { width, height } = size; const { width, height } = size;
console.log(`接收到窗口尺寸:${width}x${height}`); console.log(`接收到窗口尺寸:${width}x${height}`);
let proportion;
proportion = 1.4; proportion = 1.4;
// } else {
// proportion = 1.5;
// }
this.$store.commit("setWHproportion", proportion); this.$store.commit("setWHproportion", proportion);
this.$store.commit("setWindows", { width, height }); this.$store.commit("setWindows", { width, height });
this.$store.commit("setDefaultproportion", proportion);
this.$store.commit("setGrid");
}); });
this.$store.commit("setDefaultproportion", proportion);
this.$store.commit("setGrid");
if (!this.countryList.length) { if (!this.countryList.length) {
this.getAllCountryFn(); this.getAllCountryFn();
} }
......
<script>
import UpdateDialog from "@/views/design/updateDialog.vue";
import { Loading } from "element-ui";
const { getProductType, setProductType } = require("@/server/utils/store");
export default {
components: { UpdateDialog },
data() {
return {
user: {},
factoryType: "CN",
activeName: getProductType(),
loading: null
};
},
mounted() {
this.user = this.$dataStore.get("user");
if (this.user.factory && this.user.factory.countryCode) {
this.factoryType = this.user.factory.countryCode;
}
this.$refs.updateDialog?.checkUpdate().then(data => {
if (data) {
// 有新版本更新
this.$refs.updateDialog?.open(data);
}
});
const routerName = this.$router.currentRoute.name;
const routerMap = { DTG: "design-dtf", DTF: "design-dtf" };
if (routerName !== routerMap[getProductType()]) {
if (getProductType() === "DTG") {
this.$router.push({ name: "design-dtg" });
} else if (getProductType() === "DTF") {
this.$router.push({ name: "design-dtf" });
}
}
},
methods: {
tabClick(tab) {
const targetName = tab.name === "DTG" ? "design-dtg" : "design-dtf";
// 如果已经在目标路由,直接返回,不跳转
if (this.$route.name === targetName) {
return;
}
this.startLoading();
try {
setProductType(tab.name);
if (tab.name === "DTG") {
this.$router.push({ name: "design-dtg" });
} else if (tab.name === "DTF") {
this.$router.push({ name: "design-dtf" });
}
} catch (error) {
console.log(error);
} finally {
this.endLoading();
}
},
startLoading() {
this.loading = Loading.service({
lock: true,
text: "拼命加载中...",
spinner: "el-icon-loading",
background: "rgba(0,0,0,.7)"
});
},
endLoading() {
this.loading.close();
}
}
};
</script>
<template>
<div class="page">
<el-tabs type="border-card" v-model="activeName" @tab-click="tabClick">
<el-tab-pane label="DTG生产" name="DTG">
<router-view v-if="activeName === 'DTG'"></router-view>
</el-tab-pane>
<el-tab-pane label="DTF生产" name="DTF">
<router-view v-if="activeName === 'DTF'"></router-view>
</el-tab-pane>
</el-tabs>
<update-dialog ref="updateDialog" />
</div>
</template>
<style scoped lang="less">
.page {
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
// border-top: 1px solid #dcdfe6;
}
::v-deep {
.el-tabs {
height: 100%;
border: none;
}
.el-tabs__header {
margin: 0;
background-color: #c6c6c6;
// height: 20px;
}
.el-tabs__header .el-tabs__item {
font-size: 12px;
line-height: 25px;
height: 25px;
// border-bottom: none;
}
.el-tabs--border-card > .el-tabs__content {
padding: 0;
height: 100%;
}
.el-tab-pane {
height: 100%;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
border: none;
background-color: #243151;
color: #fff;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item {
border: none;
}
.el-tabs--border-card
> .el-tabs__header
.el-tabs__item:not(.is-disabled):hover {
color: #fff;
// background-color: #5b647c;
}
}
</style>
...@@ -79,10 +79,7 @@ export default { ...@@ -79,10 +79,7 @@ export default {
return ""; return "";
}, },
goBack() { goBack() {
// Vue路由返回 this.$router.push({ name: "design-dtf" });
this.$router.back();
// 如果需要关闭当前弹窗/子窗口,搭配:
// ipcRenderer.send("close-current-win");
}, },
goSetting() { goSetting() {
this.$router.push({ this.$router.push({
......
<script> <script>
import BaseCard from "../../components/BaseCard.vue"; import BaseCard from "../../components/BaseCard.vue";
import DTFhead from "./components/detailHead.vue"; import DTFhead from "./components/detailHead.vue";
const { getProductType, setProductType } = require("@/server/utils/store");
const { remote } = require("electron"); const { remote } = require("electron");
const { Menu } = remote; const { Menu } = remote;
import dayjs from "dayjs"; import dayjs from "dayjs";
export default { export default {
name: "dtfBatchDetail", name: "dtf-batch-detail",
components: { BaseCard, DTFhead }, components: { BaseCard, DTFhead },
props: { props: {
user: { user: {
...@@ -41,21 +41,11 @@ export default { ...@@ -41,21 +41,11 @@ export default {
name5: { label: "排版状态", value: 111 }, name5: { label: "排版状态", value: 111 },
name7: { label: "操作单状态", value: 111 } name7: { label: "操作单状态", value: 111 }
}, },
item: {}, item: {}
activeName: getProductType()
}; };
}, },
mounted() { mounted() {},
console.log(this.tableList);
},
methods: { methods: {
tabClick(tab) {
if (tab.name == "DTG")
this.$router.push({
name: "design"
});
setProductType(tab.name);
},
loadData() { loadData() {
// 请求列表接口 // 请求列表接口
}, },
...@@ -105,277 +95,261 @@ export default { ...@@ -105,277 +95,261 @@ export default {
<template> <template>
<div style="height:100%" @contextmenu.prevent="openMenu"> <div style="height:100%" @contextmenu.prevent="openMenu">
<el-tabs type="border-card" v-model="activeName" @tab-click="tabClick"> <div class="page">
<el-tab-pane label="DTG生产" name="DTG"> /></el-tab-pane> <DTFhead :user="user" :factoryType="factoryType"></DTFhead>
<el-tab-pane label="DTF生产" name="DTF"> <div class="rowBox">
<div class="page"> <div class="rowItem" v-for="(item, index) in detailRow" :key="index">
<DTFhead :user="user" :factoryType="factoryType"></DTFhead> <div
<div class="rowBox"> style="display: flex;
<div
class="rowItem"
v-for="(item, index) in detailRow"
:key="index"
>
<div
style="display: flex;
flex-direction: column; align-items: center;" flex-direction: column; align-items: center;"
> >
<div>{{ item.label }}</div> <div>{{ item.label }}</div>
<div>{{ item.value }}</div> <div>{{ item.value }}</div>
</div>
</div>
</div> </div>
<div class="card-content"> </div>
<div class="card-grid"> </div>
<div class="card-grid-item" v-for="value in 20" :key="value"> <div class="card-content">
<BaseCard <div class="card-grid">
style="cursor: pointer;" <div class="card-grid-item" v-for="value in 20" :key="value">
:card-item="item" <BaseCard
:active="true" style="cursor: pointer;"
:show-sku="false" :card-item="item"
:show-product-info="false" :active="true"
:image-field="'variantImage'" :show-sku="false"
:padding-top="'100%'" :show-product-info="false"
:image-field="'variantImage'"
:padding-top="'100%'"
>
<template #bottom_left>
<span
class="operation-number"
:title="`操作单号:${item.operationNo}`"
@click.stop="() => {}"
> >
<template #bottom_left> {{ item.operationNo }}
<span </span>
class="operation-number" </template>
:title="`操作单号:${item.operationNo}`" <template #top_left>
@click.stop="() => {}" <el-tooltip
> v-if="item.outOfStock"
{{ item.operationNo }} effect="light"
</span> content="缺货"
</template> placement="bottom"
<template #top_left> >
<el-tooltip <div
v-if="item.outOfStock" style="
effect="light"
content="缺货"
placement="bottom"
>
<div
style="
background-color: #f56c6c; background-color: #f56c6c;
color: #fff; color: #fff;
padding: 2px 4px; padding: 2px 4px;
border-radius: 4px; border-radius: 4px;
font-size: 12px; font-size: 12px;
" "
> >
</div> </div>
</el-tooltip> </el-tooltip>
<span v-if="item.tagsId" class="flex-row flex-row-gap6"> <span v-if="item.tagsId" class="flex-row flex-row-gap6">
<el-tag <el-tag v-for="tag in getItemTags(item.tagsId)" :key="tag.id">
v-for="tag in getItemTags(item.tagsId)" {{ tag.name }}
:key="tag.id" </el-tag>
> </span>
{{ tag.name }} </template>
</el-tag>
</span>
</template>
<template #images> <template #images>
<div class="flex-between"> <div class="flex-between">
<div class="images-position"> <div class="images-position">
<div class="images-container"> <div class="images-container">
<div <div
v-for="(img, index) in parseImageAry(item.imageAry)" v-for="(img, index) in parseImageAry(item.imageAry)"
:key="index" :key="index"
:title="img.title" :title="img.title"
class="item-image" class="item-image"
> >
<el-image <el-image
:src="img.url" :src="img.url"
height="50" height="50"
:preview-src-list=" :preview-src-list="
parseImageAry(item.imageAry).map(i => i.url) parseImageAry(item.imageAry).map(i => i.url)
" "
:initial-index="index" :initial-index="index"
/> />
</div>
</div>
</div> </div>
<div class="flex-row flex-row-gap15"> </div>
<el-tooltip </div>
class="item" <div class="flex-row flex-row-gap15">
effect="dark" <el-tooltip
:content="'用户编码: ' + item?.userMark" class="item"
placement="bottom" effect="dark"
> :content="'用户编码: ' + item?.userMark"
<span placement="bottom"
style=" >
<span
style="
white-space: nowrap; white-space: nowrap;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
width: 100%; width: 100%;
display: inline-block; display: inline-block;
" "
@click.stop="copyText(String(item?.userMark || ''))" @click.stop="copyText(String(item?.userMark || ''))"
>
{{ item?.userMark || "AAAF" }}
</span>
</el-tooltip>
<img
v-if="item.platform"
:src="''"
style="width: 30px; height: 30px"
/>
</div>
</div>
</template>
<template #operations>
<div class="flex-row flex-row-gap6">
<div
v-if="
item?.productMark === 'custom_normal' ||
item?.productMark === 'normal'
"
class="product-mark-badge"
:title="`类型:${setProductMark(item?.productMark)}类`"
>
{{ setProductMark(item?.productMark) }}
</div>
<div
v-if="item.customizedQuantity"
class="quantity-badge"
:class="
item.customizedQuantity === 1
? 'single-quantity-badge-color'
: 'multiple-quantity-badge-color'
"
:title="
`类型:${
item.customizedQuantity === 1 ? '单面' : '双面'
}`
"
>
{{ item.customizedQuantity === 1 ? "单" : "多" }}
</div>
<el-icon
name="caozuorizhi"
style="width: 28px; height: 28px"
@click.stop="openLogDialog(item)"
>
<template #title>
<title>操作日志</title>
</template>
</el-icon>
<el-icon
name="chakanxiangqing"
@click.stop="handleViewDetail(item)"
> >
<template #title> {{ item?.userMark || "AAAF" }}
<title>查看详情</title> </span>
</template> </el-tooltip>
</el-icon> <img
</div> v-if="item.platform"
</template> :src="''"
<template #info> style="width: 30px; height: 30px"
<div class="card-info-grid"> />
<div class="card-info-row full"> </div>
<span </div>
class="info-value ellipsis" </template>
:title="item.productName || ''" <template #operations>
> <div class="flex-row flex-row-gap6">
{{ item.productName }} <div
</span> v-if="
</div> item?.productMark === 'custom_normal' ||
<div class="card-info-row"> item?.productMark === 'normal'
<span "
class="info-value clickable ellipsis" class="product-mark-badge"
:title="`变体SKU:${item.variantSku || ''}`" :title="`类型:${setProductMark(item?.productMark)}类`"
@click.stop="copyText(item.variantSku || '')" >
> {{ setProductMark(item?.productMark) }}
{{ item.variantSku }} </div>
</span> <div
</div> v-if="item.customizedQuantity"
<div class="card-info-row"> class="quantity-badge"
<span class="info-label">工艺:</span> :class="
<span class="info-value">{{ item.craftName }}</span> item.customizedQuantity === 1
</div> ? 'single-quantity-badge-color'
<div class="card-info-row"> : 'multiple-quantity-badge-color'
<span "
class="info-value clickable ellipsis" :title="
:title="`库存SKU:${item.thirdSkuCode || ''}`" `类型:${item.customizedQuantity === 1 ? '单面' : '双面'}`
@click.stop="copyText(item.thirdSkuCode || '')" "
> >
{{ item.thirdSkuCode }} {{ item.customizedQuantity === 1 ? "单" : "多" }}
</span> </div>
</div> <el-icon
<div class="card-info-row"> name="caozuorizhi"
<span class="info-label">店铺单号:</span> style="width: 28px; height: 28px"
<span @click.stop="openLogDialog(item)"
class="info-value clickable ellipsis" >
:title="`店铺单号:${item.shopNumber || ''}`" <template #title>
@click.stop="copyText(item.shopNumber || '')" <title>操作日志</title>
>{{ item.shopNumber }}</span </template>
> </el-icon>
</div> <el-icon
<div class="card-info-row"> name="chakanxiangqing"
<span class="info-label">款号:</span> @click.stop="handleViewDetail(item)"
<span >
class="info-value clickable ellipsis" <template #title>
:title="`款号:${item.supplierProductNo || ''}`" <title>查看详情</title>
@click.stop="copyText(item.supplierProductNo || '')" </template>
>{{ item.supplierProductNo }}</span </el-icon>
> </div>
</div> </template>
<div class="card-info-row"> <template #info>
<span class="info-label">客户单号:</span> <div class="card-info-grid">
<span <div class="card-info-row full">
class="info-value clickable ellipsis" <span
:title="`客户单号:${item.thirdOrderNumber || ''}`" class="info-value ellipsis"
@click.stop="copyText(item.thirdOrderNumber || '')" :title="item.productName || ''"
>{{ item.thirdOrderNumber }}</span >
> {{ item.productName }}
</div> </span>
<div class="card-info-row"> </div>
<span class="info-label">批次号:</span> <div class="card-info-row">
<span <span
class="info-value clickable ellipsis" class="info-value clickable ellipsis"
:title="`批次号:${item.batchArrangeNumber || ''}`" :title="`变体SKU:${item.variantSku || ''}`"
@click.stop="copyText(item.batchArrangeNumber || '')" @click.stop="copyText(item.variantSku || '')"
>{{ item.batchArrangeNumber }}</span >
> {{ item.variantSku }}
</div> </span>
<div class="card-info-row" style="color: red"> </div>
<span class="info-label">状态:</span> <div class="card-info-row">
<span class="info-value">{{ item.statusName }}</span> <span class="info-label">工艺:</span>
</div> <span class="info-value">{{ item.craftName }}</span>
<div class="card-info-row full delay-time-row"> </div>
<span <div class="card-info-row">
class="delay-time-value" <span
:title=" class="info-value clickable ellipsis"
`订单延期:${getOrderDelayText( :title="`库存SKU:${item.thirdSkuCode || ''}`"
item.orderCreateTime @click.stop="copyText(item.thirdSkuCode || '')"
)}` >
" {{ item.thirdSkuCode }}
> </span>
{{ getOrderDelayText(item.orderCreateTime) }} </div>
</span> <div class="card-info-row">
</div> <span class="info-label">店铺单号:</span>
</div> <span
</template> class="info-value clickable ellipsis"
</BaseCard> :title="`店铺单号:${item.shopNumber || ''}`"
</div> @click.stop="copyText(item.shopNumber || '')"
</div> >{{ item.shopNumber }}</span
</div> >
<div class="table-pagination"> </div>
<el-pagination <div class="card-info-row">
small <span class="info-label">款号:</span>
@size-change="handleSizeChange" <span
@current-change="handleCurrentChange" class="info-value clickable ellipsis"
:current-page="pageInfo.pageNum" :title="`款号:${item.supplierProductNo || ''}`"
:page-sizes="[10, 20, 50, 100]" @click.stop="copyText(item.supplierProductNo || '')"
:page-size="pageInfo.pageSize" >{{ item.supplierProductNo }}</span
layout="total, sizes, prev, pager, next, jumper" >
:total="pageInfo.total" </div>
/> <div class="card-info-row">
<span class="info-label">客户单号:</span>
<span
class="info-value clickable ellipsis"
:title="`客户单号:${item.thirdOrderNumber || ''}`"
@click.stop="copyText(item.thirdOrderNumber || '')"
>{{ item.thirdOrderNumber }}</span
>
</div>
<div class="card-info-row">
<span class="info-label">批次号:</span>
<span
class="info-value clickable ellipsis"
:title="`批次号:${item.batchArrangeNumber || ''}`"
@click.stop="copyText(item.batchArrangeNumber || '')"
>{{ item.batchArrangeNumber }}</span
>
</div>
<div class="card-info-row" style="color: red">
<span class="info-label">状态:</span>
<span class="info-value">{{ item.statusName }}</span>
</div>
<div class="card-info-row full delay-time-row">
<span
class="delay-time-value"
:title="
`订单延期:${getOrderDelayText(item.orderCreateTime)}`
"
>
{{ getOrderDelayText(item.orderCreateTime) }}
</span>
</div>
</div>
</template>
</BaseCard>
</div> </div>
</div> </div>
</el-tab-pane> </div>
</el-tabs> <div class="table-pagination">
<el-pagination
small
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="pageInfo.pageNum"
:page-sizes="[10, 20, 50, 100]"
:page-size="pageInfo.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="pageInfo.total"
/>
</div>
</div>
</div> </div>
</template> </template>
...@@ -390,44 +364,6 @@ export default { ...@@ -390,44 +364,6 @@ export default {
text-align: center; text-align: center;
} }
::v-deep {
.el-tabs {
height: 100%;
border-bottom: none;
}
.el-tabs__header {
margin: 0;
background-color: #c6c6c6;
// height: 20px;
}
.el-tabs__header .el-tabs__item {
font-size: 12px;
line-height: 25px;
height: 25px;
// border-bottom: none;
}
.el-tabs--border-card > .el-tabs__content {
padding: 0;
height: 100%;
}
.el-tab-pane {
height: 100%;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
border: none;
background-color: #243151;
color: #fff;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item {
border: none;
}
.el-tabs--border-card
> .el-tabs__header
.el-tabs__item:not(.is-disabled):hover {
color: #fff;
// background-color: #5b647c;
}
}
.rowBox { .rowBox {
display: grid; display: grid;
grid-template-columns: repeat(8, 1fr); grid-template-columns: repeat(8, 1fr);
......
<template>
<div style="height:100%">
<el-tabs type="border-card" v-model="activeName" @tab-click="tabClick">
<el-tab-pane label="DTG生产" name="DTG"> /></el-tab-pane>
<el-tab-pane label="DTF生产" name="DTF">
<div class="dtf-file-page">
<!-- 返回按钮 -->
<div class="page-top">
<el-button icon="el-icon-arrow-left" text @click="goBack">
返回
</el-button>
</div>
<el-card class="file-card">
<template #header>
<div class="card-header">
<span>下载文件夹</span>
</div>
</template>
<div class="file-breadcrumb">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item
><a style="vertical-align: middle;"
><img src="../../assets/computer.png" alt="" width="18"/></a
></el-breadcrumb-item>
<el-breadcrumb-item><a>活动管理</a></el-breadcrumb-item>
<el-breadcrumb-item>活动列表</el-breadcrumb-item>
<el-breadcrumb-item>活动详情</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="file-content">
<div v-for="value in 100" :key="value" class="imgBox">
<img
src="../../assets/file.png"
alt=""
width="80"
height="80"
/>
<div>test</div>
</div>
</div>
</el-card>
</div>
</el-tab-pane>
</el-tabs>
</div>
</template>
<script>
const { ipcRenderer } = require("electron");
const { getProductType, setProductType } = require("@/server/utils/store");
export default {
name: "dtfFileDownLoad",
data() {
return {
// 表单配置,可从本地配置文件读取初始化
form: {
// 素材超宽处理:autoScale / skip / biggerSize
overWidthMode: "autoScale",
// 最大素材数模式:batch / custom
maxPicMode: "batch",
// 自定义素材数量
customPicNum: 30,
// 自动排版规格 40+2 / 60 / none
autoLayoutType: "none",
// 默认下载目录
downloadDir: "C:\\Users\\95487\\Desktop\\Test_JMGZ_260530021.png"
},
activeName: getProductType()
};
},
mounted() {
// 页面加载读取本地配置回填表单
this.loadLocalConfig();
},
methods: {
// 返回上一页
goBack() {
this.$router.push({
name: "design"
});
},
// 读取本地配置
async loadLocalConfig() {
ipcRenderer.send("read-layout-config");
ipcRenderer.once("layout-config-data", (_, cfg) => {
if (cfg) {
this.form = Object.assign({}, this.form, cfg);
}
});
},
// 选择文件夹弹窗
selectFolder() {
ipcRenderer.send("request-select-folder");
ipcRenderer.once("select-folder-result", (_, path) => {
if (path) this.form.downloadDir = path;
});
},
// 保存配置到本地文件
saveConfig() {
ipcRenderer.send("save-layout-config", this.form);
this.$message.success("排版设置保存成功!");
},
tabClick(tab) {
if (tab.name == "DTG") this.goBack();
setProductType(tab.name);
}
}
};
</script>
<style lang="less" scoped>
.dtf-file-page {
padding: 16px;
width: 100%;
height: 100%;
box-sizing: border-box;
}
.page-top {
margin-bottom: 12px;
}
::v-deep.file-card {
width: 100%;
height: calc(100% - 90px);
.file-breadcrumb {
padding: 10px 20px;
background-color: #f3f3f3;
}
.el-card__body {
padding: 0;
height: 100%;
}
}
.card-header {
display: flex;
align-items: center;
gap: 8px;
font-size: 20px;
font-weight: 700;
}
.file-group {
margin-bottom: 24px;
}
.group-title {
font-size: 20px;
color: #303133;
margin-bottom: 10px;
}
.el-radio-group {
display: flex;
flex-direction: column;
gap: 10px;
padding: 12px 16px;
border: 1px solid #e4e7ed;
border-radius: 4px;
}
.custom-num-row {
display: flex;
align-items: center;
}
.dir-input-row {
display: flex;
align-items: center;
gap: 8px;
}
.btn-wrap {
margin-top: 30px;
text-align: left;
}
.el-radio-group {
.el-radio {
padding: 10px 0;
font-size: 18px;
}
}
::v-deep {
.el-tabs {
height: 100%;
border-bottom: none;
}
.el-tabs__header {
margin: 0;
background-color: #c6c6c6;
// height: 20px;
}
.el-tabs__header .el-tabs__item {
font-size: 12px;
line-height: 25px;
height: 25px;
// border-bottom: none;
}
.el-tabs--border-card > .el-tabs__content {
padding: 0;
height: 100%;
}
.el-tab-pane {
height: 100%;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
border: none;
background-color: #243151;
color: #fff;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item {
border: none;
}
.el-tabs--border-card
> .el-tabs__header
.el-tabs__item:not(.is-disabled):hover {
color: #fff;
// background-color: #5b647c;
}
}
.file-content {
display: grid;
grid-template-columns: repeat(10, minmax(0, 1fr));
grid-template-rows: max-content;
gap: 10px;
padding: 20px;
overflow-y: auto;
height: calc(100% - 150px);
.imgBox {
text-align: center;
}
}
.el-breadcrumb {
font-size: 18px;
}
</style>
...@@ -88,12 +88,12 @@ export default { ...@@ -88,12 +88,12 @@ export default {
}, },
goSetting() { goSetting() {
this.$router.push({ this.$router.push({
name: "dtfSetting" name: "dtf-setting"
}); });
}, },
goSetting1() { goSetting1() {
this.$router.push({ this.$router.push({
name: "dtfBatchDetail" name: "dtf-batch-detail"
}); });
}, },
getDataInfo() {} getDataInfo() {}
......
...@@ -3,7 +3,7 @@ import BaseTable from "../../components/BaseTable.vue"; ...@@ -3,7 +3,7 @@ import BaseTable from "../../components/BaseTable.vue";
import DTFhead from "./components/head.vue"; import DTFhead from "./components/head.vue";
export default { export default {
name: "DtfFile", name: "design-dtf",
components: { BaseTable, DTFhead }, components: { BaseTable, DTFhead },
props: { props: {
user: { user: {
...@@ -101,9 +101,7 @@ export default { ...@@ -101,9 +101,7 @@ export default {
] ]
}; };
}, },
mounted() { mounted() {},
console.log(this.tableList);
},
methods: { methods: {
loadData() { loadData() {
// 请求列表接口 // 请求列表接口
...@@ -122,7 +120,7 @@ export default { ...@@ -122,7 +120,7 @@ export default {
}, },
goFliePage() { goFliePage() {
this.$router.push({ this.$router.push({
name: "dtfFileDownLoad" name: "dtf-file-download"
}); });
} }
} }
......
<template> <template>
<div style="height:100%"> <div style="height:100%">
<el-tabs type="border-card" v-model="activeName" @tab-click="tabClick"> <div class="dtf-setting-page">
<el-tab-pane label="DTG生产" name="DTG"> /></el-tab-pane> <!-- 返回按钮 -->
<el-tab-pane label="DTF生产" name="DTF"> <div class="page-top">
<div class="dtf-setting-page"> <el-button icon="el-icon-arrow-left" text @click="goBack">
<!-- 返回按钮 --> 返回
<div class="page-top"> </el-button>
<el-button icon="el-icon-arrow-left" text @click="goBack"> </div>
返回
</el-button>
</div>
<el-card class="setting-card"> <el-card class="setting-card">
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<i <i
class="el-icon-setting" class="el-icon-setting"
style="color: #568cf9;font-size: 24px;margin-right: 8px;" style="color: #568cf9;font-size: 24px;margin-right: 8px;"
></i> ></i>
<span>DTF排版设置</span> <span>DTF排版设置</span>
</div> </div>
</template> </template>
<div class="setting-group"> <div class="setting-group">
<div class="group-title">素材超排版宽度时:</div> <div class="group-title">素材超排版宽度时:</div>
<el-radio-group v-model="form.overWidthMode"> <el-radio-group v-model="form.overWidthMode">
<el-radio label="autoScale" <el-radio label="autoScale">自动缩小素材,适配烫画模宽度</el-radio>
>自动缩小素材,适配烫画模宽度</el-radio <el-radio label="skip">超出排版宽度不排版</el-radio>
> <el-radio label="biggerSize"
<el-radio label="skip">超出排版宽度不排版</el-radio> >超出排版宽度,使用更大规格排版</el-radio
<el-radio label="biggerSize" >
>超出排版宽度,使用更大规格排版</el-radio </el-radio-group>
> </div>
</el-radio-group>
</div>
<div class="setting-group"> <div class="setting-group">
<div class="group-title">单张排版最大素材数:</div> <div class="group-title">单张排版最大素材数:</div>
<el-radio-group v-model="form.maxPicMode"> <el-radio-group v-model="form.maxPicMode">
<el-radio label="batch">批次素材数</el-radio> <el-radio label="batch">批次素材数</el-radio>
<div class="custom-num-row"> <div class="custom-num-row">
<el-radio label="custom">自定义素材数(建议数量30):</el-radio> <el-radio label="custom">自定义素材数(建议数量30):</el-radio>
<el-input <el-input
v-model.number="form.customPicNum" v-model.number="form.customPicNum"
placeholder="请输入素材数" placeholder="请输入素材数"
style="width: 180px; margin-left: 8px" style="width: 180px; margin-left: 8px"
:disabled="form.maxPicMode !== 'custom'" :disabled="form.maxPicMode !== 'custom'"
/> />
</div>
</el-radio-group>
</div> </div>
</el-radio-group>
</div>
<div class="setting-group"> <div class="setting-group">
<div class="group-title">自动排版设置</div> <div class="group-title">自动排版设置</div>
<el-radio-group v-model="form.autoLayoutType"> <el-radio-group v-model="form.autoLayoutType">
<el-radio label="40+2">40+2</el-radio> <el-radio label="40+2">40+2</el-radio>
<el-radio label="60">60</el-radio> <el-radio label="60">60</el-radio>
<el-radio label="none">不执行自动排版</el-radio> <el-radio label="none">不执行自动排版</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<div class="setting-group"> <div class="setting-group">
<div class="group-title">下载文件目录</div> <div class="group-title">下载文件目录</div>
<div class="dir-input-row"> <div class="dir-input-row">
<el-input v-model="form.downloadDir" readonly style="flex: 1"> <el-input v-model="form.downloadDir" readonly style="flex: 1">
<template slot="prepend">素材默认下载位置:</template> <template slot="prepend">素材默认下载位置:</template>
</el-input> </el-input>
<el-button <el-button
icon="el-icon-folder-opened" icon="el-icon-folder-opened"
@click="selectFolder" @click="selectFolder"
></el-button> ></el-button>
</div> </div>
</div> </div>
<div class="btn-wrap"> <div class="btn-wrap">
<el-button type="primary" @click="saveConfig">保存设置</el-button> <el-button type="primary" @click="saveConfig">保存设置</el-button>
</div>
</el-card>
</div> </div>
</el-tab-pane> </el-card>
</el-tabs> </div>
</div> </div>
</template> </template>
<script> <script>
const { ipcRenderer } = require("electron"); const { ipcRenderer } = require("electron");
const { getProductType, setProductType } = require("@/server/utils/store"); const {
getProductType,
setProductType,
setDTFSetting,
getDTFSetting
} = require("@/server/utils/store");
export default { export default {
name: "dtfSetting", name: "dtf-setting",
data() { data() {
return { return {
// 表单配置,可从本地配置文件读取初始化 // 表单配置,可从本地配置文件读取初始化
form: { form: { ...getDTFSetting() },
// 素材超宽处理:autoScale / skip / biggerSize
overWidthMode: "autoScale",
// 最大素材数模式:batch / custom
maxPicMode: "batch",
// 自定义素材数量
customPicNum: 30,
// 自动排版规格 40+2 / 60 / none
autoLayoutType: "none",
// 默认下载目录
downloadDir: "C:\\Users\\95487\\Desktop\\Test_JMGZ_260530021.png"
},
activeName: getProductType() activeName: getProductType()
}; };
}, },
...@@ -114,9 +101,7 @@ export default { ...@@ -114,9 +101,7 @@ export default {
methods: { methods: {
// 返回上一页 // 返回上一页
goBack() { goBack() {
this.$router.push({ this.$router.push({ name: "design-dtf" });
name: "design"
});
}, },
// 读取本地配置 // 读取本地配置
async loadLocalConfig() { async loadLocalConfig() {
...@@ -136,8 +121,8 @@ export default { ...@@ -136,8 +121,8 @@ export default {
}, },
// 保存配置到本地文件 // 保存配置到本地文件
saveConfig() { saveConfig() {
ipcRenderer.send("save-layout-config", this.form);
this.$message.success("排版设置保存成功!"); this.$message.success("排版设置保存成功!");
setDTFSetting({ ...this.form });
}, },
tabClick(tab) { tabClick(tab) {
if (tab.name == "DTG") this.goBack(); if (tab.name == "DTG") this.goBack();
...@@ -212,42 +197,4 @@ export default { ...@@ -212,42 +197,4 @@ export default {
font-size: 18px; font-size: 18px;
} }
} }
::v-deep {
.el-tabs {
height: 100%;
border-bottom: none;
}
.el-tabs__header {
margin: 0;
background-color: #c6c6c6;
// height: 20px;
}
.el-tabs__header .el-tabs__item {
font-size: 12px;
line-height: 25px;
height: 25px;
// border-bottom: none;
}
.el-tabs--border-card > .el-tabs__content {
padding: 0;
height: 100%;
}
.el-tab-pane {
height: 100%;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item.is-active {
border: none;
background-color: #243151;
color: #fff;
}
.el-tabs--border-card > .el-tabs__header .el-tabs__item {
border: none;
}
.el-tabs--border-card
> .el-tabs__header
.el-tabs__item:not(.is-disabled):hover {
color: #fff;
// background-color: #5b647c;
}
}
</style> </style>
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