This commit is contained in:
24kycj
2025-12-30 20:48:21 +08:00
parent ff6df432ec
commit a6ce251509
11 changed files with 514 additions and 278 deletions
+99 -139
View File
@@ -6,13 +6,8 @@
<div class="title"> <div class="title">
{{ $t("index.wordSpace") }} {{ $t("index.wordSpace") }}
</div> </div>
<div <div class="card" v-for="(item, index) of infoData" :key="item.PrinterID" @click="() => (printData = index)"
class="card" style="text-align: left">
v-for="(item, index) of infoData"
:key="item.PrinterID"
@click="() => (printData = index)"
style="text-align: left"
>
<span style="font-size: 18px; margin-left: 40px">{{ <span style="font-size: 18px; margin-left: 40px">{{
getPrintName(item.PrinterID, true) getPrintName(item.PrinterID, true)
}}</span> }}</span>
@@ -30,9 +25,7 @@
<div :span="21" style="height: 100%; width: calc(100% - 164px)"> <div :span="21" style="height: 100%; width: calc(100% - 164px)">
<div class="grid-content bg-purple-light mid"> <div class="grid-content bg-purple-light mid">
<div class="toMain"> <div class="toMain">
<span style="margin-right: 20px" <span style="margin-right: 20px">{{ $t("admin.hello") }} {{ user }}</span>
>{{ $t("admin.hello") }} {{ user }}</span
>
<router-link to="/main"> {{ $t("admin.home") }}</router-link> <router-link to="/main"> {{ $t("admin.home") }}</router-link>
</div> </div>
@@ -46,27 +39,11 @@
<el-tab-pane :label="$t('admin.userManage')" name="second"> <el-tab-pane :label="$t('admin.userManage')" name="second">
<div class="brief"> <div class="brief">
<el-row :gutter="20" style="height: 100%"> <el-row :gutter="20" style="height: 100%">
<el-table <el-table :data="userData" style="width: 100%" :empty-text="$t('admin.nodata')">
:data="userData" <el-table-column prop="userUuid" label="ID"></el-table-column>
style="width: 100%" <el-table-column prop="userName" :label="$t('admin.userName')"></el-table-column>
:empty-text="$t('admin.nodata')" <el-table-column prop="userRole" :label="$t('admin.role')"></el-table-column>
> <el-table-column prop="time" :label="$t('admin.lastTime')"></el-table-column>
<el-table-column
prop="userUuid"
label="ID"
></el-table-column>
<el-table-column
prop="userName"
:label="$t('admin.userName')"
></el-table-column>
<el-table-column
prop="userRole"
:label="$t('admin.role')"
></el-table-column>
<el-table-column
prop="time"
:label="$t('admin.lastTime')"
></el-table-column>
<el-table-column prop="time" :label="$t('admin.online')"> <el-table-column prop="time" :label="$t('admin.online')">
<template slot-scope="scope"> <template slot-scope="scope">
{{ {{
@@ -79,26 +56,12 @@
<!--<el-table-column prop="describe" label="描述"></el-table-column>--> <!--<el-table-column prop="describe" label="描述"></el-table-column>-->
<el-table-column width="120"> <el-table-column width="120">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button <el-button type="text" size="medium" @click="() => edit(scope.row)">{{ $t("admin.edit")
type="text" }}</el-button>
size="medium" <el-button type="text" size="medium" @click="adduserVisible = true"
@click="() => edit(scope.row)" v-if="scope.row.userName == 'admin'">{{ $t("admin.add") }}</el-button>
>{{ $t("admin.edit") }}</el-button <el-button type="text" size="medium" @click="() => deleted(scope.row)"
> v-if="scope.row.userName != 'admin'">{{ $t("admin.delete") }}</el-button>
<el-button
type="text"
size="medium"
@click="adduserVisible = true"
v-if="scope.row.userName == 'admin'"
>{{ $t("admin.add") }}</el-button
>
<el-button
type="text"
size="medium"
@click="() => deleted(scope.row)"
v-if="scope.row.userName != 'admin'"
>{{ $t("admin.delete") }}</el-button
>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@@ -116,47 +79,30 @@
<div class="service"> <div class="service">
<div class="lable">{{ $t("admin.selectWorkstation") }}</div> <div class="lable">{{ $t("admin.selectWorkstation") }}</div>
<el-select v-model="workValue"> <el-select v-model="workValue">
<el-option <el-option v-for="(item, index) in infoData" :key="item.PrinterID"
v-for="(item, index) in infoData" :label="getPrintName(item.PrinterID)" :value="item.PrinterID" :disabled="runningState">
:key="item.PrinterID"
:label="getPrintName(item.PrinterID)"
:value="item.PrinterID"
:disabled="runningState"
>
</el-option> </el-option>
</el-select> </el-select>
<div class="lable">{{ $t("admin.formatType") }}</div> <div class="lable">{{ $t("admin.formatType") }}</div>
<el-select v-model="formatValue"> <el-select v-model="formatValue">
<el-option <el-option v-for="item in formatOptions" :key="item.value" :label="item.label" :value="item.value"
v-for="item in formatOptions" :disabled="runningState">
:key="item.value"
:label="item.label"
:value="item.value"
:disabled="runningState"
>
</el-option> </el-option>
</el-select> </el-select>
<div class="lable">{{ $t("admin.number") }}</div> <div class="lable">{{ $t("admin.number") }}</div>
<el-input <el-input v-model="number" :disabled="runningState"></el-input>
v-model="number"
:disabled="runningState"
></el-input>
</div> </div>
<el-button <el-button @click="
@click="
() => { () => {
running = 0; running = 0;
runningEmergy = false; runningEmergy = false;
isFormat = true; isFormat = true;
handleFormat(); handleFormat();
} }
" " :loading="runningState && isFormat" :disabled="runningState && !isFormat">{{ $t("work.submit")
:loading="runningState && isFormat" }}</el-button>
:disabled="runningState && !isFormat"
>{{ $t("work.submit") }}</el-button
>
</div> </div>
<div class="copy"> <div class="copy">
@@ -167,41 +113,25 @@
<div class="service"> <div class="service">
<div class="lable">{{ $t("admin.selectWorkstation") }}</div> <div class="lable">{{ $t("admin.selectWorkstation") }}</div>
<el-select v-model="workValue2"> <el-select v-model="workValue2">
<el-option <el-option v-for="(item, index) in infoData" :key="index" :label="getPrintName(item.PrinterID)"
v-for="(item, index) in infoData" :value="item.PrinterID" :disabled="runningState">
:key="index"
:label="getPrintName(item.PrinterID)"
:value="item.PrinterID"
:disabled="runningState"
>
</el-option> </el-option>
</el-select> </el-select>
<div class="lable">{{ $t("admin.copyPath") }}</div> <div class="lable">{{ $t("admin.copyPath") }}</div>
<el-input <el-input v-model="path" :disabled="runningState"></el-input>
v-model="path"
:disabled="runningState"
></el-input>
<div class="lable">{{ $t("admin.number") }}</div> <div class="lable">{{ $t("admin.number") }}</div>
<el-input <el-input v-model="number2" :disabled="runningState"></el-input>
v-model="number2"
:disabled="runningState"
></el-input>
</div> </div>
<el-button <el-button :loading="runningState && !isFormat" :disabled="runningState && isFormat" @click="
:loading="runningState && !isFormat"
:disabled="runningState && isFormat"
@click="
() => { () => {
running = 0; running = 0;
runningEmergy = false; runningEmergy = false;
isFormat = false; isFormat = false;
handleCopy(); handleCopy();
} }
" ">{{ $t("work.submit") }}</el-button>
>{{ $t("work.submit") }}</el-button
>
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
@@ -235,49 +165,22 @@
<div class="wLog" v-html="wlog" style="text-align: left"></div> <div class="wLog" v-html="wlog" style="text-align: left"></div>
</el-dialog> </el-dialog>
<el-dialog <el-dialog :title="$t('admin.addUser')" :visible.sync="adduserVisible" width="450px" class="infdialog"
:title="$t('admin.addUser')" destroy-on-close :close-on-click-modal="false">
:visible.sync="adduserVisible" <adduser :changevisiable="this.chageAdduservisible" v-if="adduserVisible"></adduser>
width="450px"
class="infdialog"
destroy-on-close
:close-on-click-modal="false"
>
<adduser
:changevisiable="this.chageAdduservisible"
v-if="adduserVisible"
></adduser>
</el-dialog> </el-dialog>
<el-dialog <el-dialog :title="$t('admin.editUser')" :visible.sync="edituserVisible" width="450px" class="infdialog"
:title="$t('admin.editUser')" destroy-on-close :close-on-click-modal="false">
:visible.sync="edituserVisible" <edituser :changevisiable="this.chageEdituservisible" v-if="edituserVisible" :data="editData" @editover="
width="450px"
class="infdialog"
destroy-on-close
:close-on-click-modal="false"
>
<edituser
:changevisiable="this.chageEdituservisible"
v-if="edituserVisible"
:data="editData"
@editover="
() => { () => {
chageEdituservisible(false); chageEdituservisible(false);
getUserData(); getUserData();
} }
" "></edituser>
></edituser>
</el-dialog> </el-dialog>
<el-dialog <el-dialog :title="$t('admin.copying')" :visible.sync="copyVisible" width="450px">
:title="$t('admin.copying')" <el-progress :percentage="parseInt(copyState.progress * 100)" v-if="copyVisible"></el-progress>
:visible.sync="copyVisible"
width="450px"
>
<el-progress
:percentage="parseInt(copyState.progress * 100)"
v-if="copyVisible"
></el-progress>
</el-dialog> </el-dialog>
</div> </div>
</template> </template>
@@ -513,6 +416,11 @@ export default {
method: "get", method: "get",
url: "/web/get_printer_info", url: "/web/get_printer_info",
}).then((res) => { }).then((res) => {
if (!res.data || !res.data.printerList) {
console.warn('获取工作站列表返回的数据格式不正确:', res)
this.infoData = []
return
}
this.infoData = res.data.printerList; this.infoData = res.data.printerList;
this.workValue2 = this.workValue = this.workValue2 = this.workValue =
res.data.printerList.length > 0 res.data.printerList.length > 0
@@ -527,6 +435,10 @@ export default {
this.DualSide = 1; //只要有一个是双面就是1 this.DualSide = 1; //只要有一个是双面就是1
} }
} }
}).catch((e) => {
console.error('获取工作站列表失败:', e)
this.infoData = []
this.$message.error('获取工作站列表失败,请检查网络连接')
}); });
}, },
runCheckState() { runCheckState() {
@@ -561,8 +473,7 @@ export default {
//阻止即将发生的事件 //阻止即将发生的事件
this.runningEmergy = true; this.runningEmergy = true;
appendLog( appendLog(
`Task ${this.running + 1}/${ `Task ${this.running + 1}/${this.isFormat ? this.number : this.number2
this.isFormat ? this.number : this.number2
} failed, Error = ${data.printer_status}`, } failed, Error = ${data.printer_status}`,
this.root this.root
); );
@@ -1032,42 +943,50 @@ export default {
/deep/ .el-tabs__content { /deep/ .el-tabs__content {
overflow-y: auto; overflow-y: auto;
} }
.infdialog { .infdialog {
/deep/.el-dialog { /deep/.el-dialog {
padding: 20px 0px; padding: 20px 0px;
} }
/deep/.el-dialog__header { /deep/.el-dialog__header {
padding: 0px; padding: 0px;
font-size: 15px; font-size: 15px;
font-weight: bold; font-weight: bold;
} }
/deep/.el-dialog__body { /deep/.el-dialog__body {
margin-top: 30px; margin-top: 30px;
padding: 0px; padding: 0px;
} }
/deep/.el-dialog__title {
} /deep/.el-dialog__title {}
} }
.wLog { .wLog {
max-height: 600px; max-height: 600px;
overflow: auto; overflow: auto;
} }
h1, h1,
h2 { h2 {
font-weight: normal; font-weight: normal;
} }
ul { ul {
list-style-type: none; list-style-type: none;
padding: 0; padding: 0;
} }
li { li {
display: inline-block; display: inline-block;
margin: 0 10px; margin: 0 10px;
} }
a { a {
color: #42b983; color: #42b983;
} }
.left { .left {
background-color: #e8e7ee; background-color: #e8e7ee;
height: 100%; height: 100%;
@@ -1076,10 +995,12 @@ a {
box-sizing: border-box; box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
.title { .title {
color: #999999; color: #999999;
font-size: 28px; font-size: 28px;
} }
.card { .card {
background-color: #f5f5f5; background-color: #f5f5f5;
height: 50px; height: 50px;
@@ -1100,36 +1021,45 @@ a {
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
overflow-y: auto; overflow-y: auto;
.tabs { .tabs {
height: 100%; height: 100%;
/deep/.el-tabs__header { /deep/.el-tabs__header {
margin: 0px; margin: 0px;
} }
/deep/ .el-tabs__content { /deep/ .el-tabs__content {
height: 100%; height: 100%;
} }
} }
&::-webkit-scrollbar { &::-webkit-scrollbar {
/*滚动条整体样式*/ /*滚动条整体样式*/
width: 10px; /*高宽分别对应横竖滚动条的尺寸*/ width: 10px;
/*高宽分别对应横竖滚动条的尺寸*/
height: 1px; height: 1px;
} }
&::-webkit-scrollbar-thumb { &::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/ /*滚动条里面小方块*/
border-radius: 10px; border-radius: 10px;
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
background: #c7c7cb; background: #c7c7cb;
} }
&::-webkit-scrollbar-track { &::-webkit-scrollbar-track {
/*滚动条里面轨道*/ /*滚动条里面轨道*/
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2);
border-radius: 10px; border-radius: 10px;
background: #ededed; background: #ededed;
} }
.system { .system {
height: 100%; height: 100%;
width: 100%; width: 100%;
} }
.App { .App {
height: 100%; height: 100%;
width: 100%; width: 100%;
@@ -1139,10 +1069,12 @@ a {
box-sizing: border-box; box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
.format { .format {
width: 100%; width: 100%;
height: 300px; height: 300px;
border-bottom: 1px rgb(224, 224, 224) solid; border-bottom: 1px rgb(224, 224, 224) solid;
.title { .title {
font-size: 14px; font-size: 14px;
width: 150px; width: 150px;
@@ -1155,6 +1087,7 @@ a {
background-color: rgb(240, 240, 240); background-color: rgb(240, 240, 240);
font-weight: bold; font-weight: bold;
} }
.tips { .tips {
font-size: 14px; font-size: 14px;
padding: 10px; padding: 10px;
@@ -1163,22 +1096,27 @@ a {
align-items: center; align-items: center;
text-align: left; text-align: left;
} }
.service { .service {
height: 150px; height: 150px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-start; justify-content: flex-start;
.lable { .lable {
margin: 20px; margin: 20px;
font-size: 14px; font-size: 14px;
} }
.el-select { .el-select {
width: 150px; width: 150px;
} }
.el-input { .el-input {
width: 180px; width: 180px;
} }
} }
.el-button { .el-button {
color: rgb(154, 202, 128); color: rgb(154, 202, 128);
width: 120px; width: 120px;
@@ -1189,12 +1127,15 @@ a {
float: right; float: right;
margin-right: 25px; margin-right: 25px;
} }
.el-button:hover { .el-button:hover {
background-color: white; background-color: white;
} }
.el-button:active { .el-button:active {
background-color: white; background-color: white;
} }
.el-button:focus { .el-button:focus {
background-color: white; background-color: white;
} }
@@ -1204,6 +1145,7 @@ a {
width: 100%; width: 100%;
height: 300px; height: 300px;
border-bottom: 1px rgb(224, 224, 224) solid; border-bottom: 1px rgb(224, 224, 224) solid;
.title { .title {
margin-top: 10px; margin-top: 10px;
font-size: 14px; font-size: 14px;
@@ -1217,6 +1159,7 @@ a {
background-color: rgb(240, 240, 240); background-color: rgb(240, 240, 240);
font-weight: bold; font-weight: bold;
} }
.tips { .tips {
font-size: 14px; font-size: 14px;
padding: 10px; padding: 10px;
@@ -1224,22 +1167,27 @@ a {
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
} }
.service { .service {
height: 150px; height: 150px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: flex-start; justify-content: flex-start;
.lable { .lable {
margin: 20px; margin: 20px;
font-size: 14px; font-size: 14px;
} }
.el-select { .el-select {
width: 150px; width: 150px;
} }
.el-input { .el-input {
width: 180px; width: 180px;
} }
} }
.el-button { .el-button {
color: rgb(154, 202, 128); color: rgb(154, 202, 128);
width: 120px; width: 120px;
@@ -1250,21 +1198,26 @@ a {
float: right; float: right;
margin-right: 25px; margin-right: 25px;
} }
.el-button:hover { .el-button:hover {
background-color: white; background-color: white;
} }
.el-button:active { .el-button:active {
background-color: white; background-color: white;
} }
.el-button:focus { .el-button:focus {
background-color: white; background-color: white;
} }
} }
} }
.dispose { .dispose {
height: 100%; height: 100%;
width: 100%; width: 100%;
} }
.brief { .brief {
height: 90%; height: 90%;
width: 100%; width: 100%;
@@ -1274,10 +1227,12 @@ a {
box-sizing: border-box; box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
.el-table { .el-table {
position: absolute; position: absolute;
z-index: 0; z-index: 0;
} }
.add-button { .add-button {
position: absolute; position: absolute;
top: 6px; top: 6px;
@@ -1286,6 +1241,7 @@ a {
} }
} }
} }
.right { .right {
background-color: #c8cfd7; background-color: #c8cfd7;
height: 100%; height: 100%;
@@ -1295,10 +1251,12 @@ a {
box-sizing: border-box; box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
.title { .title {
color: #999999; color: #999999;
font-size: 28px; font-size: 28px;
} }
.log { .log {
padding: 20px; padding: 20px;
font-size: 18px; font-size: 18px;
@@ -1311,11 +1269,13 @@ a {
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
} }
} }
.toMain { .toMain {
position: absolute; position: absolute;
right: 200px; right: 200px;
font-size: 16px; font-size: 16px;
z-index: 1; z-index: 1;
.link { .link {
color: blue; color: blue;
cursor: pointer; cursor: pointer;
+36 -23
View File
@@ -4,12 +4,7 @@
<div class="row"> <div class="row">
<div class="lable">LogLevel</div> <div class="lable">LogLevel</div>
<el-select v-model="iniData.LogLevel"> <el-select v-model="iniData.LogLevel">
<el-option <el-option v-for="item in LogLevelOptions" :key="item.value" :label="item.label" :value="item.value">
v-for="item in LogLevelOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
<div class="tips">{{ $t("dispose.infoTips") }}</div> <div class="tips">{{ $t("dispose.infoTips") }}</div>
@@ -17,12 +12,7 @@
<div class="row"> <div class="row">
<div class="lable">AutoRetryTimes</div> <div class="lable">AutoRetryTimes</div>
<el-select v-model="iniData.AutoRetryTimes"> <el-select v-model="iniData.AutoRetryTimes">
<el-option <el-option v-for="item in autoRetryOptions" :key="item.value" :label="item.label" :value="item.value">
v-for="item in autoRetryOptions"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
<div class="tips">{{ $t("dispose.errorTips1") }}</div> <div class="tips">{{ $t("dispose.errorTips1") }}</div>
@@ -68,14 +58,11 @@
</div> </div>
<div class="tips">{{ $t("dispose.isReservetask") }}</div> <div class="tips">{{ $t("dispose.isReservetask") }}</div>
</div> </div>
<div <div class="row" style="
class="row"
style="
align-items: start; align-items: start;
height: 50px; height: 50px;
border-bottom: 1px rgb(224, 224, 224) solid; border-bottom: 1px rgb(224, 224, 224) solid;
" ">
>
<div class="lable">UploadSharedDir</div> <div class="lable">UploadSharedDir</div>
<div class="switch"> <div class="switch">
<el-switch v-model="iniData.UploadSharedDir"></el-switch> <el-switch v-model="iniData.UploadSharedDir"></el-switch>
@@ -83,16 +70,19 @@
<div class="tips">{{ $t("dispose.isUpload") }}</div> <div class="tips">{{ $t("dispose.isUpload") }}</div>
</div> </div>
<div <div class="row">
class="row" <div class="lable">AuthorizationCode</div>
style=" <el-input v-model="iniData.AuthorizationCode" :placeholder="$t('dispose.authCodePlaceholder')"></el-input>
<div class="tips">{{ $t("dispose.authCodeTips") }}</div>
</div>
<div class="row" style="
align-items: flex-start; align-items: flex-start;
justify-content: flex-end; justify-content: flex-end;
margin-top: 40px; margin-top: 40px;
margin-right: 40px; margin-right: 40px;
height: 300px; height: 300px;
" ">
>
<el-button @click="save">{{ $t("work.submit") }}</el-button> <el-button @click="save">{{ $t("work.submit") }}</el-button>
</div> </div>
</div> </div>
@@ -146,7 +136,18 @@ export default {
label: "FATAL", label: "FATAL",
}, },
], ],
iniData: null, iniData: {
LogLevel: 'INFO',
AutoRetryTimes: 0,
TaskDir: '',
SharedDir: '',
RejectConfig: false,
StopOnFailure: false,
KeepCombinedImage: false,
CleanTaskFile: false,
UploadSharedDir: false,
AuthorizationCode: ''
},
AutoRetryTimes: null, AutoRetryTimes: null,
LogLevel: "TRACE", LogLevel: "TRACE",
@@ -233,6 +234,7 @@ export default {
data.UploadSharedDir data.UploadSharedDir
? true ? true
: false; : false;
that.iniData.AuthorizationCode = data.AuthorizationCode ? data.AuthorizationCode : "";
console.log(data); console.log(data);
} }
}); });
@@ -298,6 +300,7 @@ export default {
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.title { .title {
font-size: 14px; font-size: 14px;
font-weight: bold; font-weight: bold;
@@ -310,38 +313,45 @@ export default {
align-items: center; align-items: center;
background-color: rgb(240, 240, 240); background-color: rgb(240, 240, 240);
} }
.row { .row {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
margin-top: 20px; margin-top: 20px;
.lable { .lable {
width: 200px; width: 200px;
margin-left: 20px; margin-left: 20px;
font-size: 14px; font-size: 14px;
text-align: left; text-align: left;
} }
.el-input { .el-input {
width: 200px; width: 200px;
margin-left: 20px; margin-left: 20px;
} }
.el-select { .el-select {
width: 200px; width: 200px;
margin-left: 20px; margin-left: 20px;
} }
.switch { .switch {
display: flex; display: flex;
margin-left: 20px; margin-left: 20px;
justify-content: flex-start; justify-content: flex-start;
width: 200px; width: 200px;
} }
.tips { .tips {
font-size: 14px; font-size: 14px;
margin-left: 20px; margin-left: 20px;
width: calc(100% - 440px); width: calc(100% - 440px);
text-align: left; text-align: left;
} }
.el-button { .el-button {
color: rgb(154, 202, 128); color: rgb(154, 202, 128);
width: 120px; width: 120px;
@@ -350,12 +360,15 @@ export default {
border-radius: 1px; border-radius: 1px;
box-shadow: 1px 0px 2px 0px grey; box-shadow: 1px 0px 2px 0px grey;
} }
.el-button:hover { .el-button:hover {
background-color: white; background-color: white;
} }
.el-button:active { .el-button:active {
background-color: white; background-color: white;
} }
.el-button:focus { .el-button:focus {
background-color: white; background-color: white;
} }
+11 -2
View File
@@ -1025,6 +1025,13 @@ export default {
url: '/web/get_printer_info' url: '/web/get_printer_info'
}) })
.then((res) => { .then((res) => {
if (!res.data || !res.data.printerList) {
console.warn('获取工作站列表返回的数据格式不正确:', res)
this.infoData = []
this.$message.error(this.$t('main.notConnected') || '获取工作站列表失败')
return
}
let infoData = [...this.infoData] let infoData = [...this.infoData]
this.infoData = res.data.printerList.map((item, index) => { this.infoData = res.data.printerList.map((item, index) => {
let child = { ...item } let child = { ...item }
@@ -1038,7 +1045,7 @@ export default {
} }
}) })
// console.log('infoData', this.infoData) // console.log('infoData', this.infoData)
if (!res.data.printerList || res.data.printerList.length == 0) { if (res.data.printerList.length == 0) {
this.$message.error(this.$t('main.notConnected')) this.$message.error(this.$t('main.notConnected'))
} }
let DualSide = 0 //默认是单面 let DualSide = 0 //默认是单面
@@ -1077,7 +1084,9 @@ export default {
this.DualSide = DualSide this.DualSide = DualSide
}) })
.catch((e) => { .catch((e) => {
console.error('获取工作站列表失败:', e)
this.infoData = []
this.$message.error(this.$t('main.notConnected') || '获取工作站列表失败,请检查网络连接')
}) })
}, },
// 清除报错通知 // 清除报错通知
+42 -38
View File
@@ -15,18 +15,8 @@
<div>{{ $t("systemControl.tips1") }}</div> <div>{{ $t("systemControl.tips1") }}</div>
</div> </div>
<div class="serviceImg"> <div class="serviceImg">
<el-button <el-button icon="el-icon-video-play" circle @click="play" :disabled="state || state == null"></el-button>
icon="el-icon-video-play" <el-button icon="el-icon-video-pause" circle @click="pause" :disabled="!state || state == null"></el-button>
circle
@click="play"
:disabled="state || state == null"
></el-button>
<el-button
icon="el-icon-video-pause"
circle
@click="pause"
:disabled="!state || state == null"
></el-button>
</div> </div>
</div> </div>
</div> </div>
@@ -36,12 +26,8 @@
<div class="select"> <div class="select">
<div class="lable">{{ $t("systemControl.selectWorkstation") }}</div> <div class="lable">{{ $t("systemControl.selectWorkstation") }}</div>
<el-select v-model="workValue"> <el-select v-model="workValue">
<el-option <el-option v-for="item in printData" :key="item.PrinterID" :label="getPrintName(item.PrinterID)"
v-for="item in printData" :value="item.PrinterID">
:key="item.PrinterID"
:label="getPrintName(item.PrinterID)"
:value="item.PrinterID"
>
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
@@ -118,27 +104,18 @@
<div class="select"> <div class="select">
<div class="lable">{{ $t("systemControl.refreshTime1") }}</div> <div class="lable">{{ $t("systemControl.refreshTime1") }}</div>
<el-input v-model="refreshTime1" type="number" style="width: 300px"> <el-input v-model="refreshTime1" type="number" style="width: 300px">
<el-button <el-button slot="append" icon="el-icon-finished" @click="handleSaveTime1"></el-button>
slot="append" ></el-input>
icon="el-icon-finished"
@click="handleSaveTime1"
></el-button>
></el-input
>
</div> </div>
<div class="select"> <div class="select">
<div class="lable">{{ $t("systemControl.refreshTime2") }}</div> <div class="lable">{{ $t("systemControl.refreshTime2") }}</div>
<el-input v-model="refreshTime2" type="number" style="width: 300px"> <el-input v-model="refreshTime2" type="number" style="width: 300px">
<el-button <el-button slot="append" icon="el-icon-finished" @click="handleSaveTime2"></el-button></el-input>
slot="append"
icon="el-icon-finished"
@click="handleSaveTime2"
></el-button
></el-input>
</div> </div>
<div class="select"> <div class="select">
<div class="lable">{{ $t("systemControl.guide") }}</div> <div class="lable">{{ $t("systemControl.guide") }}</div>
<el-switch @change="changeStep" v-model="showStep" :active-text="$t('systemControl.show')" :inactive-text="$t('systemControl.hide')"></el-switch> <el-switch @change="changeStep" v-model="showStep" :active-text="$t('systemControl.show')"
:inactive-text="$t('systemControl.hide')"></el-switch>
</div> </div>
</div> </div>
</div> </div>
@@ -147,12 +124,7 @@
<div class="select"> <div class="select">
<div class="lable">{{ $t("systemControl.changeLanguage") }}</div> <div class="lable">{{ $t("systemControl.changeLanguage") }}</div>
<el-select v-model="selectLan"> <el-select v-model="selectLan">
<el-option <el-option v-for="item in languages" :key="item.value" :label="item.label" :value="item.value">
v-for="item in languages"
:key="item.value"
:label="item.label"
:value="item.value"
>
</el-option> </el-option>
</el-select> </el-select>
</div> </div>
@@ -360,11 +332,20 @@ export default {
method: "get", method: "get",
url: "/web/get_printer_info", url: "/web/get_printer_info",
}).then((res) => { }).then((res) => {
if (!res.data || !res.data.printerList) {
console.warn('获取工作站列表返回的数据格式不正确:', res)
this.printData = []
return
}
this.printData = res.data.printerList; this.printData = res.data.printerList;
if (this.printData.length != 0) { if (this.printData.length != 0) {
//自动选择第一个 //自动选择第一个
this.workValue = this.printData[0].PrinterID; this.workValue = this.printData[0].PrinterID;
} }
}).catch((e) => {
console.error('获取工作站列表失败:', e)
this.printData = []
this.$message.error('获取工作站列表失败,请检查网络连接')
}); });
}, },
checkServerState(callback) { checkServerState(callback) {
@@ -779,12 +760,14 @@ export default {
box-sizing: border-box; box-sizing: border-box;
-webkit-box-sizing: border-box; -webkit-box-sizing: border-box;
-moz-box-sizing: border-box; -moz-box-sizing: border-box;
.restart { .restart {
width: 100%; width: 100%;
height: 180px; height: 180px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
border-bottom: 1px rgb(224, 224, 224) solid; border-bottom: 1px rgb(224, 224, 224) solid;
.title { .title {
font-size: 14px; font-size: 14px;
width: 300px; width: 300px;
@@ -797,27 +780,32 @@ export default {
background-color: rgb(240, 240, 240); background-color: rgb(240, 240, 240);
font-weight: bold; font-weight: bold;
} }
.service { .service {
width: 100%; width: 100%;
height: 120px; height: 120px;
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
.tips { .tips {
color: rgb(94, 94, 94); color: rgb(94, 94, 94);
font-size: 14px; font-size: 14px;
margin-left: 20px; margin-left: 20px;
} }
.serviceImg { .serviceImg {
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
flex-direction: row; flex-direction: row;
margin-left: 100px; margin-left: 100px;
.begin { .begin {
width: 55px; width: 55px;
height: 55px; height: 55px;
} }
.stop { .stop {
margin-left: 5px; margin-left: 5px;
width: 50px; width: 50px;
@@ -826,12 +814,14 @@ export default {
} }
} }
} }
.control { .control {
width: 100%; width: 100%;
height: 420px; height: 420px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
border-bottom: 1px rgb(224, 224, 224) solid; border-bottom: 1px rgb(224, 224, 224) solid;
.title { .title {
margin-top: 20px; margin-top: 20px;
font-size: 14px; font-size: 14px;
@@ -845,9 +835,11 @@ export default {
background-color: rgb(240, 240, 240); background-color: rgb(240, 240, 240);
font-weight: bold; font-weight: bold;
} }
.service { .service {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.select { .select {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -865,10 +857,12 @@ export default {
width: 150px; width: 150px;
margin-left: 20px; margin-left: 20px;
} }
.el-select { .el-select {
width: 180px; width: 180px;
} }
} }
.concrete { .concrete {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -894,6 +888,7 @@ export default {
flex-wrap: wrap; flex-wrap: wrap;
justify-content: flex-start; justify-content: flex-start;
align-items: flex-start; align-items: flex-start;
.el-button { .el-button {
width: 180px; width: 180px;
height: 35px; height: 35px;
@@ -911,15 +906,19 @@ export default {
border-radius: 1px; border-radius: 1px;
box-shadow: 1px 0px 2px 0px grey; box-shadow: 1px 0px 2px 0px grey;
} }
.el-button:nth-child(4) { .el-button:nth-child(4) {
margin-left: 0 !important; margin-left: 0 !important;
} }
.el-button:hover { .el-button:hover {
background-color: white; background-color: white;
} }
.el-button:active { .el-button:active {
background-color: white; background-color: white;
} }
.el-button:focus { .el-button:focus {
background-color: white; background-color: white;
} }
@@ -927,11 +926,13 @@ export default {
} }
} }
} }
.languageer { .languageer {
width: 100%; width: 100%;
height: 220px; height: 220px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
.title { .title {
margin-top: 20px; margin-top: 20px;
font-size: 14px; font-size: 14px;
@@ -945,6 +946,7 @@ export default {
background-color: rgb(240, 240, 240); background-color: rgb(240, 240, 240);
font-weight: bold; font-weight: bold;
} }
.select { .select {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
@@ -952,12 +954,14 @@ export default {
align-items: flex-start; align-items: flex-start;
margin-left: 20px; margin-left: 20px;
margin-top: 20px; margin-top: 20px;
.lable { .lable {
margin-top: 5px; margin-top: 5px;
font-size: 14px; font-size: 14px;
width: 150px; width: 150px;
text-align: left; text-align: left;
} }
.el-select { .el-select {
width: 180px; width: 180px;
} }
@@ -17,11 +17,6 @@
</el-form> </el-form>
</div> </div>
<span slot="footer" class="dialog-footer grand-footer"> <span slot="footer" class="dialog-footer grand-footer">
<div class="footer-left">
<el-button type="warning" size="medium" plain icon="el-icon-key" @click="setAuthCode">
设置授权码
</el-button>
</div>
<div class="footer-buttons"> <div class="footer-buttons">
<el-button @click="handleClose" size="medium" icon="el-icon-close">{{ $t('common.cancel') }}</el-button> <el-button @click="handleClose" size="medium" icon="el-icon-close">{{ $t('common.cancel') }}</el-button>
<el-button type="primary" @click="handleSave" size="medium" icon="el-icon-check">{{ $t('common.confirm') <el-button type="primary" @click="handleSave" size="medium" icon="el-icon-check">{{ $t('common.confirm')
@@ -76,22 +71,41 @@ export default {
this.visibleSync = false this.visibleSync = false
}, },
handleSave() { handleSave() {
// 验证加密狗计数
if (this.form.is_dongle_count) {
if (!this.form.dongle_count || this.form.dongle_count <= 0 || !Number.isInteger(this.form.dongle_count)) {
this.$message.warning(this.$t('work.dongleCountRequired') || '请输入有效的加密狗安装次数(必须是正整数)')
return
}
}
// 验证 ISO 文件名
if (this.form.is_generate_iso && !this.form.iso_file_name) {
this.$message.warning(this.$t('work.isoNameInput') || '请输入 ISO 文件名')
return
}
// 验证 ZIP 文件名
if (this.form.is_generate_zip) {
if (!this.form.zip_file_name) {
this.$message.warning(this.$t('work.zipNameInput') || '请输入 ZIP 文件名')
return
}
// 验证 ZIP 加密密码
if (this.form.is_zip_encrypt) {
if (!this.form.zip_password) {
this.$message.warning(this.$t('work.pleasePassword') || '请输入 ZIP 压缩密码')
return
}
if (this.form.zip_password !== this.form.zip_repassword) {
this.$message.warning(this.$t('work.zipPassWrong') || 'ZIP 压缩密码不一致')
return
}
}
}
this.$emit('save') this.$emit('save')
},
setAuthCode() {
this.$prompt(this.$t('work.inputAuthCode') || '请输入作业授权码', this.$t('work.setAuthCode') || '授权码设置', {
confirmButtonText: this.$t('common.ok') || '确定',
cancelButtonText: this.$t('common.cancel') || '取消',
inputValue: this.form.auth_code || '',
inputPattern: /^[a-zA-Z0-9]*$/,
inputErrorMessage: '授权码格式不正确'
}).then(({ value }) => {
this.$set(this.form, 'auth_code', value);
this.$message({
type: 'success',
message: '授权码已设置'
});
}).catch(() => { });
} }
} }
} }
@@ -101,7 +115,7 @@ export default {
/* 样式将包含在主组件中或按需引入 */ /* 样式将包含在主组件中或按需引入 */
.grand-footer { .grand-footer {
display: flex; display: flex;
justify-content: space-between; justify-content: flex-end;
align-items: center; align-items: center;
width: 100%; width: 100%;
} }
+244 -8
View File
@@ -167,6 +167,19 @@ export default {
switch_tag: true, switch_tag: true,
submitLoading: false, submitLoading: false,
// 新手引导
guideStep: null,
currentStep: 0,
// 文件相关
file_name3: '',
zip_attrs: { accept: '.zip' },
iso_attrs: { accept: 'iso/img' },
// 辅助字段
flag: false,
isPass: false,
filter_rules: [[0], [1, 5], [0], [0], [3]],
flag_cont_up: false, flag_cont_up: false,
customColors: [ customColors: [
{ color: '#67C23A', percentage: 99 }, { color: '#67C23A', percentage: 99 },
@@ -204,8 +217,7 @@ export default {
zip_repassword: '', zip_repassword: '',
copy_hash: false, copy_hash: false,
is_dongle_count: false, is_dongle_count: false,
dongle_count: 0, dongle_count: 1
auth_code: ''
} }
} }
}, },
@@ -217,6 +229,33 @@ export default {
let per = (this.size / (1024 * 1024) / mb) * 100 let per = (this.size / (1024 * 1024) / mb) * 100
if (isNaN(per) || !isFinite(per)) return 0 if (isNaN(per) || !isFinite(per)) return 0
return per > 100 ? 100 : parseFloat(per.toFixed(1)) return per > 100 ? 100 : parseFloat(per.toFixed(1))
},
// 打印选项
print_op() {
return [
{ value: 2, label: this.$t('work.front') },
{ value: 3, label: this.$t('work.back') },
{ value: 1, label: this.$t('work.double') }
]
},
// 分区类型
type() {
return [
{ value: 0, label: this.$t('work.diskPart') },
{ value: 1, label: this.$t('work.cdPart') },
{ value: 3, label: this.$t('work.forbidCopyPart') },
{ value: 5, label: this.$t('work.cdWithDisk') }
]
},
// 文件类型
file_type() {
return [
{ value: 0, label: this.$t('work.fileAnd') },
{ value: 1, label: this.$t('work.eCd') },
{ value: 2, label: this.$t('work.zip') },
{ value: 3, label: this.$t('work.passZip') },
{ value: 4, label: this.$t('work.forbidCopyU') }
]
} }
}, },
created() { created() {
@@ -258,6 +297,16 @@ export default {
this.print_flag = this.dice === 1 ? 2 : 1 this.print_flag = this.dice === 1 ? 2 : 1
this.loadNetworkCredentials() this.loadNetworkCredentials()
this.getTemplates() this.getTemplates()
// 加载新手引导
this.guideStep = JSON.parse(localStorage.getItem('guideStep'))
this.currentStep = localStorage.getItem('currentStep')
if (this.guideStep && this.guideStep[this.currentStep]) {
this.guideStep[this.currentStep].show = false
setTimeout(() => {
this.guideStep[this.currentStep].show = true
}, 200)
}
}, },
// --- 高级设置与录制 --- // --- 高级设置与录制 ---
@@ -336,9 +385,51 @@ export default {
try { try {
const data = JSON.parse(content) const data = JSON.parse(content)
this.fileData = data this.fileData = data
this.tableData = data.tableData || [] this.form = {}
this.tableData = []
// 解析正面数据字段
if (data.frontData && Array.isArray(data.frontData)) {
data.frontData.forEach(item => {
if ([1, 3, 4, 5].includes(item.type)) {
const defaultVal = item.DefaultText !== undefined ? item.DefaultText : ''
this.tableData.push({
name: item.name + this.$t('work.front_tag'),
val: defaultVal,
origin_name: item.name,
type: item.type,
default: item.DefaultText
})
this.$set(this.form, item.name, defaultVal)
}
})
}
// 解析背面数据字段
if (data.backData && Array.isArray(data.backData)) {
data.backData.forEach(item => {
if ([1, 3, 4, 5].includes(item.type)) {
const defaultVal = item.DefaultText !== undefined ? item.DefaultText : ''
this.tableData.push({
name: item.name + this.$t('work.back_tag'),
val: defaultVal,
origin_name: item.name,
type: item.type,
default: item.DefaultText
})
this.$set(this.form, item.name, defaultVal)
}
})
}
// 清空文件选择器
if (this.$refs.refFile2) this.$refs.refFile2.value = ''
if (this.$refs.refFile3) this.$refs.refFile3.value = ''
this.csvIsExist = false
this.file_name = null
this.currentTemplate = '' this.currentTemplate = ''
} catch (e) { } catch (e) {
console.error('解析标签文件失败:', e)
this.$message.error('无效的标签文件') this.$message.error('无效的标签文件')
} }
}, },
@@ -382,7 +473,15 @@ export default {
changeTemplate(templatePath) { changeTemplate(templatePath) {
if (!templatePath) return if (!templatePath) return
fs.readFile(templatePath, 'utf8', (err, data) => { fs.readFile(templatePath, 'utf8', (err, data) => {
if (!err) this.readFile(data) if (err) {
console.error('读取模板文件时出错:', err)
this.$message.error('读取模板文件失败')
return
}
// 创建文件对象保存到fileLists,与手动导入保持一致
const fileName = path.basename(templatePath)
this.fileLists[0] = new File([data], fileName, { type: '' })
this.readFile(data)
}) })
}, },
@@ -558,7 +657,6 @@ export default {
data += `&copy_hash=${!!this.high_setting_form.copy_hash}` data += `&copy_hash=${!!this.high_setting_form.copy_hash}`
data += `&enable_dongle_counter=${!!this.high_setting_form.is_dongle_count}` data += `&enable_dongle_counter=${!!this.high_setting_form.is_dongle_count}`
data += `&donglel_install_count=${this.high_setting_form.dongle_count || 0}` data += `&donglel_install_count=${this.high_setting_form.dongle_count || 0}`
data += `&auth_code=${encodeURIComponent(this.high_setting_form.auth_code || '')}`
// 录像与标识 // 录像与标识
data += `&is_blend=${!!this.high_setting_form.is_blend}` data += `&is_blend=${!!this.high_setting_form.is_blend}`
@@ -640,9 +738,6 @@ export default {
this.submitLoading = false this.submitLoading = false
}) })
} catch (e) { } catch (e) {
console.error(e)
this.$message.error('Failed to create file list')
this.submitLoading = false
} }
}, },
saveWork() { saveWork() {
@@ -660,6 +755,147 @@ export default {
}).then(result => { }).then(result => {
if (result.filePath) fs.writeFileSync(result.filePath, JSON.stringify(save)) if (result.filePath) fs.writeFileSync(result.filePath, JSON.stringify(save))
}) })
},
// --- 新手引导功能 ---
exitGuide() {
for (let key in this.guideStep) {
this.guideStep[key].show = false
}
this.currentStep = -1
localStorage.setItem('currentStep', this.currentStep)
localStorage.setItem('guideStep', JSON.stringify(this.guideStep))
},
prevStep() {
this.guideStep[this.currentStep].show = false
this.currentStep = parseInt(this.currentStep) - 1
if (this.guideStep[this.currentStep]) {
this.guideStep[this.currentStep].show = true
localStorage.setItem('guideStep', JSON.stringify(this.guideStep))
localStorage.setItem('currentStep', this.currentStep)
} else {
this.exitGuide()
}
},
nextStep() {
this.guideStep[this.currentStep].show = false
this.currentStep = parseInt(this.currentStep) + 1
if (this.guideStep[this.currentStep]) {
this.guideStep[this.currentStep].show = true
localStorage.setItem('guideStep', JSON.stringify(this.guideStep))
localStorage.setItem('currentStep', this.currentStep)
} else {
this.exitGuide()
}
},
help() {
ipcRenderer.send('open-help-file')
},
// --- 工具方法 ---
toChar(n) {
return String.fromCharCode(65 + parseInt(n))
},
getPrintName(id) {
return this.$t('index.wordSpace') + id.substr(-5)
},
getPrintName1(id) {
for (let i = 0; i < this.printerList.length; i++) {
if (this.printerList[i].PrinterID == id) {
return this.$t('index.wordSpace') + this.toChar(i)
}
}
},
// --- 网络认证增强 ---
getHostFromPath(p) {
if (!p || typeof p !== 'string') return ''
if (p.indexOf('\\\\') === 0) {
const parts = p.slice(2).split('\\')
return parts[0] || ''
}
if (p.indexOf('//') === 0) {
const parts = p.slice(2).split('/')
return parts[0] || ''
}
const m = p.match(/^([^\\\\/: ]+)/)
return (m && m[1]) ? m[1] : ''
},
checkNetworkPaths() {
if (!(this.$refs.files && this.$refs.files.hasNetworkPaths())) {
return false
}
const networkPaths = this.$refs.files.getNetworkPaths() || []
if (networkPaths.length === 0) return false
let stored = {}
try {
stored = JSON.parse(localStorage.getItem('networkCredentials') || '{}')
} catch (e) {
stored = {}
}
const missing = []
const prepared = []
for (const item of networkPaths) {
const host = item.hostName || this.getHostFromPath(item.path) || ''
if (host && stored[host] && stored[host].userName && stored[host].password) {
prepared.push({
host_name: host,
user_name: stored[host].userName,
password: stored[host].password,
})
} else {
missing.push({ ...item, hostName: host })
}
}
if (missing.length > 0) {
this.networkAuthPaths = missing.map(m => ({
path: m.path,
hostName: m.hostName,
userName: '',
password: ''
}))
this.networkAuthVisible = true
this.networkCredentials = prepared
return true
}
this.networkCredentials = prepared
return false
},
// --- 文件管理方法 ---
handleContentCommand(command) {
if (command === 'folder') {
this.addFolder()
} else {
this.addFile()
}
},
addFolder() {
if (this.$refs.files) {
this.$refs.files.addFolder()
}
},
addFile() {
if (this.$refs.files) {
this.$refs.files.addFile()
}
},
fileLoad3() {
if (this.$refs.refFile3 && this.$refs.refFile3.files[0]) {
this.file_name3 = this.$refs.refFile3.files[0].name
}
},
openFile3() {
if (this.$refs.refFile3) {
this.$refs.refFile3.click()
}
},
sizeChange(size) {
this.size = size
} }
} }
} }
@@ -95,15 +95,15 @@
</div> </div>
<div class="g-switch-item"> <div class="g-switch-item">
<span class="g-label">{{ $t('work.installDongle') }}</span> <span class="g-label">{{ $t('work.installDongle') }}</span>
<el-switch v-model="form.has_counter"></el-switch> <el-switch v-model="form.is_dongle_count"></el-switch>
</div> </div>
</div> </div>
<!-- 计数器详细 --> <!-- 计数器详细 -->
<div v-if="form.has_counter" class="mt-10 p-10" <div v-if="form.is_dongle_count" class="mt-10 p-10"
style="background: #fdf6ec; border-radius: 6px; border: 1px solid #faecd8;"> style="background: #fdf6ec; border-radius: 6px; border: 1px solid #faecd8;">
<el-form-item :label="$t('work.installCount')" label-width="140px" class="mb-0"> <el-form-item :label="$t('work.installCount')" label-width="140px" class="mb-0">
<el-input-number v-model="form.install_count" :min="1" size="mini" /> <el-input-number v-model="form.dongle_count" :min="1" :step="1" :precision="0" size="mini" />
</el-form-item> </el-form-item>
</div> </div>
</div> </div>
@@ -21,12 +21,6 @@
</transition> </transition>
</div> </div>
</el-col> </el-col>
<el-col :span="12">
<el-form-item :label="$t('work.setAuthCode') || '授权码'" label-width="80px">
<el-input size="small" v-model="form.auth_code"
:placeholder="$t('work.inputAuthCode') || '输入授权码'" />
</el-form-item>
</el-col>
</el-row> </el-row>
</div> </div>
</template> </template>
+2
View File
@@ -117,6 +117,8 @@ export default {
successReserve: "保存成功!", successReserve: "保存成功!",
errorRead: "读取配置文件失败!", errorRead: "读取配置文件失败!",
configTitle: "系统配置", configTitle: "系统配置",
authCodePlaceholder: "请输入授权码",
authCodeTips: "系统授权码,用于激活高级功能和许可验证"
}, },
dialog: { dialog: {
closeTips: "0.5秒后将自动关闭......", closeTips: "0.5秒后将自动关闭......",
+2
View File
@@ -151,6 +151,8 @@ export default {
successReserve: "Save success", successReserve: "Save success",
errorRead: "Reading configuration file fail", errorRead: "Reading configuration file fail",
configTitle: "CardSoon Production Service Configuration File", configTitle: "CardSoon Production Service Configuration File",
authCodePlaceholder: "Enter authorization code",
authCodeTips: "System authorization code for activating advanced features and license validation"
}, },
dialog: { dialog: {
closeTips: "The window will close in 0.5 seconds...", closeTips: "The window will close in 0.5 seconds...",
+2
View File
@@ -93,6 +93,8 @@ export default {
successReserve: "保存成功! ", successReserve: "保存成功! ",
errorRead: "讀取設定檔失敗! ", errorRead: "讀取設定檔失敗! ",
configTitle: "系統配寘", configTitle: "系統配寘",
authCodePlaceholder: "請輸入授權碼",
authCodeTips: "系統授權碼,用於啟動進階功能和許可驗證"
}, },
dialog: { dialog: {
closeTips: "0.5秒後將自動關閉…… ", closeTips: "0.5秒後將自動關閉…… ",