Compare commits
41 Commits
Author | SHA1 | Date | |
---|---|---|---|
6b978fa93b | |||
82171c8ea8 | |||
41f2f01fd7 | |||
002c5a80e5 | |||
31b2cfcee6 | |||
506cab65a4 | |||
33d13b3eb4 | |||
3c44fbc636 | |||
61ca7b82cd | |||
eafb0f7c2a | |||
1f99830600 | |||
1bd826b21c | |||
71851b65e0 | |||
13de0ce8ea | |||
bd73613803 | |||
847b2c787c | |||
7de3355106 | |||
807766f83f | |||
521563bd00 | |||
d4a427ec5e | |||
a28544b671 | |||
7513d82d4d | |||
02c8538d47 | |||
7b0f53f677 | |||
a33784740d | |||
0939b96386 | |||
58f86a9b2b | |||
3adabb68b8 | |||
725fa19bd1 | |||
cdaa2c1f6c | |||
84a4b2999d | |||
99619fdc0a | |||
d1bc97f42a | |||
62f625197f | |||
4addca6d97 | |||
09c6a609b8 | |||
e3346be048 | |||
bc5b6c2868 | |||
bfd6a42349 | |||
42a7fb8bc9 | |||
c5b99b3ec4 |
@ -1,5 +1,5 @@
|
||||
{
|
||||
"printWidth": 120,
|
||||
"printWidth": 108,
|
||||
"bracketSameLine": true,
|
||||
"htmlWhitespaceSensitivity": "ignore",
|
||||
"semi": true,
|
||||
|
@ -17,12 +17,15 @@
|
||||
"babel-plugin-component": "^1.1.1",
|
||||
"code-brick-zj": "^0.0.7",
|
||||
"core-js": "^3.6.5",
|
||||
"dayjs": "^1.11.9",
|
||||
"echarts": "^5.3.3",
|
||||
"element-theme": "^2.0.1",
|
||||
"element-ui": "^2.15.7",
|
||||
"js-cookie": "^2.2.1",
|
||||
"jsbarcode": "^3.11.5",
|
||||
"lodash": "^4.17.19",
|
||||
"moment": "^2.29.4",
|
||||
"qrcode": "^1.5.3",
|
||||
"qs": "^6.9.4",
|
||||
"quill": "^1.3.7",
|
||||
"sass": "^1.26.5",
|
||||
|
BIN
public/importTemplates/PPVPImport.xlsx
Normal file
BIN
public/importTemplates/PPVPImport.xlsx
Normal file
Binary file not shown.
Binary file not shown.
@ -38,10 +38,10 @@
|
||||
<% if (process.env.VUE_APP_NODE_ENV === 'dev') { %>
|
||||
<script>
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://192.168.1.103:8080/pms-am';
|
||||
window.SITE_CONFIG['apiURL'] = 'http://192.168.1.49:8080/pms-am'; // tengyun
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://192.168.1.49:8080/pms-am'; // tengyun
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://192.168.1.67:8080/pms-am'; // wenzhang
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://192.168.1.62:8080/pms-am'; // tao
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://192.168.1.21:8080/pms-am'; // xv
|
||||
window.SITE_CONFIG['apiURL'] = 'http://192.168.1.21:8080/pms-am'; // xv
|
||||
// window.SITE_CONFIG['apiURL'] = 'http://localhost:3000/p//////ms-am'; // xv
|
||||
</script>
|
||||
<% } %>
|
||||
@ -60,7 +60,7 @@
|
||||
<!-- 生产环境 -->
|
||||
<% if (process.env.VUE_APP_NODE_ENV === 'prod') { %>
|
||||
<script>
|
||||
window.SITE_CONFIG['apiURL'] = 'http://10.196.233.155:8080/pms-am';
|
||||
window.SITE_CONFIG['apiURL'] = 'http://10.196.233.155/pms-am';
|
||||
</script>
|
||||
<% } %>
|
||||
</head>
|
||||
|
@ -538,7 +538,7 @@ img {
|
||||
.aui-content {
|
||||
position: relative;
|
||||
padding: $content--padding;
|
||||
min-height: calc(100vh - #{$navbar--height});
|
||||
min-height: calc(100vh - 30px - #{$navbar--height});
|
||||
&__wrapper {
|
||||
position: relative;
|
||||
margin-left: $sidebar--width;
|
||||
@ -673,7 +673,8 @@ img {
|
||||
z-index: 830;
|
||||
}
|
||||
> .el-tab-pane {
|
||||
min-height: calc(#{$content--fill-height-tabs});
|
||||
// min-height: calc(#{$content--fill-height-tabs});
|
||||
min-height: calc(100vh - 144px);
|
||||
> .aui-card--fill > .el-card__body {
|
||||
min-height: calc(#{$content--fill-height-tabs} - 2px);
|
||||
}
|
||||
|
@ -11,8 +11,7 @@
|
||||
row-key="id"
|
||||
:cell-style="{ padding: 0 }"
|
||||
@selection-change="handleSelectionChange"
|
||||
border
|
||||
>
|
||||
border>
|
||||
<!-- :cell-style="{ padding: 0 }" -->
|
||||
<!-- @cell-mouse-enter="(row, col, cell, event) => $emit('cell-mouse-enter', row, col, cell, event)"> -->
|
||||
<!-- @cell-mouse-leave="(row, col, cell, event) => $emit('cell-mouse-leave', row, col, cell, event)"> -->
|
||||
@ -34,8 +33,7 @@
|
||||
}
|
||||
: null
|
||||
"
|
||||
v-bind="head.more"
|
||||
></el-table-column>
|
||||
v-bind="head.more"></el-table-column>
|
||||
<!-- 普通的表头 -->
|
||||
<el-table-column
|
||||
v-else
|
||||
@ -50,8 +48,7 @@
|
||||
:align="head.align || null"
|
||||
:class-name="head.className ?? 'initial-column-class'"
|
||||
v-bind="head.more"
|
||||
:show-overflow-tooltip="head.showOverflowTooltip ?? !(head.prop === 'operations')"
|
||||
>
|
||||
:show-overflow-tooltip="head.showOverflowTooltip ?? !(head.prop === 'operations')">
|
||||
<!-- :show-overflow-tooltip="head.showOverflowTooltip || true" -->
|
||||
<!-- 子组件 -->
|
||||
<template v-if="head.prop" slot-scope="scope">
|
||||
@ -60,15 +57,17 @@
|
||||
:is="head.subcomponent"
|
||||
:key="idx + 'sub'"
|
||||
:inject-data="{ ...scope.row, head }"
|
||||
@emit-data="handleSubEmitData"
|
||||
/>
|
||||
@emit-data="handleSubEmitData" />
|
||||
<!-- 直接展示数据或应用过滤器 -->
|
||||
<span v-else>{{ scope.row[head.prop] | commonFilter(head.filter) }}</span>
|
||||
</template>
|
||||
|
||||
<!-- 多级表头 -->
|
||||
<template v-if="!head.prop && head.children">
|
||||
<TableHead v-for="(subhead, subindex) in head.children" :key="'subhead-' + idx + '-subindex-' + subindex" :opt="subhead" />
|
||||
<TableHead
|
||||
v-for="(subhead, subindex) in head.children"
|
||||
:key="'subhead-' + idx + '-subindex-' + subindex"
|
||||
:opt="subhead" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</template>
|
||||
@ -109,12 +108,16 @@ export default {
|
||||
type: Number,
|
||||
default: 0,
|
||||
},
|
||||
selectProps: {
|
||||
type: Array,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
// inject: ["urls"],
|
||||
data() {
|
||||
return {
|
||||
dataList: [],
|
||||
selections: []
|
||||
selections: [],
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
@ -124,15 +127,31 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleSubEmitData(payload) {
|
||||
console.log("[component] BaseListTable handleSubEmitData(): ", payload);
|
||||
//console.log("[component] BaseListTable handleSubEmitData(): ", payload);
|
||||
this.$emit("operate-event", payload);
|
||||
},
|
||||
handleSelectionChange(val) {
|
||||
// this.selections = val;
|
||||
console.log('selections change: ', val)
|
||||
this.$emit('select', val.map(item => item.id))
|
||||
//console.log("selections change: ", val);
|
||||
if (this.selectProps.length == 0)
|
||||
this.$emit(
|
||||
"select",
|
||||
val.map((item) => item.id)
|
||||
);
|
||||
else {
|
||||
this.$emit(
|
||||
"select",
|
||||
val.map((item) => {
|
||||
const payload = {};
|
||||
this.selectProps.forEach((key) => {
|
||||
payload[key] = item[key];
|
||||
});
|
||||
return payload;
|
||||
})
|
||||
);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@ -145,7 +164,7 @@ export default {
|
||||
text-shadow: unset;
|
||||
}
|
||||
|
||||
.base-list-table >>> .no-padding-class .cell {
|
||||
.base-list-table >>> .no-padding-class .cell {
|
||||
line-height: 1.75;
|
||||
padding: 0;
|
||||
}
|
||||
|
@ -34,6 +34,32 @@
|
||||
</span>
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-select
|
||||
v-if="opt.complexSelect"
|
||||
v-model="dataForm[opt.prop]"
|
||||
v-bind="opt.bind"
|
||||
clearable
|
||||
size="small"
|
||||
@keydown.enter.native.prevent="handleBtnClick('查询')">
|
||||
<el-option
|
||||
v-for="item in opt.complexSelect"
|
||||
:key="item.value + Math.random().toString()"
|
||||
:label="item.label"
|
||||
:value="item.value">
|
||||
<span>{{ item.label }}</span>
|
||||
<span v-if="opt.customLabel" style="display: inline-clock; margin-left: 12px; font-size: 0.9em">
|
||||
{{ item[opt.customLabel] || "无描述" }}
|
||||
</span>
|
||||
<template v-if="opt.customLabels">
|
||||
<span
|
||||
v-for="(label, idx) in opt.customLabels"
|
||||
:key="Math.random()"
|
||||
style="display: inline-clock; margin-left: 12px; font-size: 0.9em">
|
||||
{{ item[label] || " - " }}
|
||||
</span>
|
||||
</template>
|
||||
</el-option>
|
||||
</el-select>
|
||||
<el-date-picker
|
||||
v-if="opt.timerange"
|
||||
v-model="dataForm[opt.prop]"
|
||||
@ -77,20 +103,9 @@ export default {
|
||||
dataForm: {},
|
||||
};
|
||||
},
|
||||
|
||||
// 这个 watch 出现得没啥必要......
|
||||
// watch: {
|
||||
// dataForm: {
|
||||
// handler: (val) => {
|
||||
// console.log("[BaseSearchForm::watcher::dataForm]", val);
|
||||
// },
|
||||
// deep: true,
|
||||
// },
|
||||
// },
|
||||
|
||||
created() {},
|
||||
mounted() {
|
||||
console.log("[BaseSearchForm] configs:", JSON.parse(JSON.stringify(this.headConfig)));
|
||||
//console.log("[BaseSearchForm] configs:", JSON.parse(JSON.stringify(this.headConfig)));
|
||||
|
||||
this.headConfig.fields.forEach((field, index) => {
|
||||
// 没有 field.prop ,则为按钮之类的
|
||||
@ -114,20 +129,33 @@ export default {
|
||||
if (res.code === 0 && res.data) {
|
||||
// TODO: 此处需要随具体情况再做更新
|
||||
if ("list" in res.data) {
|
||||
this.$set(
|
||||
field,
|
||||
"select",
|
||||
"customLabel" in field
|
||||
? res.data.list.map((item) => ({
|
||||
const optionProp = "complexSelect" in field ? "complexSelect" : "select";
|
||||
let options = [];
|
||||
if (field.customLabel) {
|
||||
options = res.data.list.map((item) => ({
|
||||
label: optionLabel ? item[optionLabel] : item.name,
|
||||
value: optionValue ? item[optionValue] : item.id,
|
||||
[field.customLabel]: item[field.customLabel],
|
||||
}))
|
||||
: res.data.list.map((item) => ({
|
||||
}));
|
||||
} else if (field.customLabels) {
|
||||
options = res.data.list.map((item) => {
|
||||
let extraOptions = {};
|
||||
field.customLabels.forEach((label) => {
|
||||
extraOptions[label] = item[label];
|
||||
});
|
||||
return {
|
||||
label: optionLabel ? item[optionLabel] : item.name,
|
||||
value: optionValue ? item[optionValue] : item.id,
|
||||
}))
|
||||
);
|
||||
...extraOptions,
|
||||
};
|
||||
});
|
||||
} else {
|
||||
options = res.data.list.map((item) => ({
|
||||
label: optionLabel ? item[optionLabel] : item.name,
|
||||
value: optionValue ? item[optionValue] : item.id,
|
||||
}));
|
||||
}
|
||||
this.$set(field, optionProp, options);
|
||||
}
|
||||
} else {
|
||||
this.$message({
|
||||
@ -143,7 +171,7 @@ export default {
|
||||
// TODO: 此处也需要修改,碰到具体业务需求才更新...
|
||||
if (field.watch) {
|
||||
// const { index: innerIdx, condition } = field.watch;
|
||||
// console.log("=====field.watch=====", innerIdx, this.searchForm[innerIdx], this.headConfig.fields[innerIdx].default);
|
||||
// //console.log("=====field.watch=====", innerIdx, this.searchForm[innerIdx], this.headConfig.fields[innerIdx].default);
|
||||
// // 设置监听器
|
||||
// this.$watch(
|
||||
// () => this.searchForm[innerIdx],
|
||||
@ -153,19 +181,19 @@ export default {
|
||||
// // queryParams
|
||||
// // })
|
||||
// this.$http(field.url, queryParams).then((res) => {
|
||||
// console.log("[==>] 更新有前置条件的字段!!!", queryParams, res);
|
||||
// //console.log("[==>] 更新有前置条件的字段!!!", queryParams, res);
|
||||
// // 此处是外部的 index
|
||||
// this.searchForm[index] = Math.floor(Math.random() * 10);
|
||||
// });
|
||||
// }
|
||||
// );
|
||||
// console.log("[BaseSearchForm] mounted(): ", this.searchForm);
|
||||
// //console.log("[BaseSearchForm] mounted(): ", this.searchForm);
|
||||
// // 如果此时已经有默认值了,就立马根据这个默认值来发起请求
|
||||
// if (this.searchForm[innerIdx]) {
|
||||
// // TODO: 这个判断好像不太需要...
|
||||
// console.log("TODO: 这个判断好像不太需要...");
|
||||
// //console.log("TODO: 这个判断好像不太需要...");
|
||||
// } else {
|
||||
// console.log("TODO: 监听的字段还没来得及设置值呢...");
|
||||
// //console.log("TODO: 监听的字段还没来得及设置值呢...");
|
||||
// }
|
||||
}
|
||||
});
|
||||
|
@ -100,15 +100,6 @@ export default {
|
||||
methods: {
|
||||
/** init **/
|
||||
init(id) {
|
||||
if (!id) {
|
||||
this.$message({
|
||||
message: `没有传 id!`,
|
||||
type: "error",
|
||||
duration: 1500,
|
||||
});
|
||||
console.log("[*] 传入car payload对话框的id是", id);
|
||||
return;
|
||||
}
|
||||
this.showPaination = false;
|
||||
this.id = id;
|
||||
this.getList();
|
||||
@ -130,7 +121,7 @@ export default {
|
||||
params,
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("[car payload dialog] [http response] res is: ", res);
|
||||
//console.log("[car payload dialog] [http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
// page 场景:
|
||||
@ -183,7 +174,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
console.log("btn click payload: ", payload);
|
||||
//console.log("btn click payload: ", payload);
|
||||
|
||||
if ("name" in payload) {
|
||||
switch (payload.name) {
|
||||
@ -199,7 +190,7 @@ export default {
|
||||
// break;
|
||||
}
|
||||
} else {
|
||||
console.log("[x] 不是这么用的! 缺少name属性");
|
||||
//console.log("[x] 不是这么用的! 缺少name属性");
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1,17 +1,14 @@
|
||||
<template>
|
||||
<el-dialog
|
||||
class="dialog-just-form"
|
||||
custom-class="pms-dialog"
|
||||
:visible="dialogVisible"
|
||||
@close="handleClose"
|
||||
:destroy-on-close="false"
|
||||
:close-on-click-modal="configs.clickModalToClose ?? false"
|
||||
:width="configs.dialogWidth ?? '50%'">
|
||||
<!-- title -->
|
||||
<div slot="title" class="dialog-title">
|
||||
<h1 class="">
|
||||
:width="configs.width || '50%'"
|
||||
:destroy-on-close="false">
|
||||
<span slot="title" class="dialog-title">
|
||||
{{ detailMode ? "查看详情" : dataForm.id ? "编辑" : "新增" }}
|
||||
</h1>
|
||||
</div>
|
||||
</span>
|
||||
|
||||
<!-- form -->
|
||||
<el-form ref="dataForm" :model="dataForm" v-loading="loadingStatus">
|
||||
@ -75,7 +72,9 @@
|
||||
:label="opt.label"
|
||||
:value="opt.value">
|
||||
<span>{{ opt.label }}</span>
|
||||
<span v-if="col.customLabel" style="display: inline-clock; margin-left: 12px; font-size: 0.9em">
|
||||
<span
|
||||
v-if="col.customLabel"
|
||||
style="display: inline-clock; margin-left: 12px; font-size: 0.9em">
|
||||
{{ opt[col.customLabel] || "无描述" }}
|
||||
</span>
|
||||
<template v-if="col.customLabels">
|
||||
@ -256,7 +255,7 @@ export default {
|
||||
const promiseHistory = {};
|
||||
|
||||
const getData = (col, param) => {
|
||||
// console.log("getData: ", col.prop, "/", param ?? "no param!");
|
||||
// //console.log("getData: ", col.prop, "/", param ?? "no param!");
|
||||
// 获取数据 - 不需要等待前置条件时
|
||||
promiseHistory[col.prop] = col.fetchData(param).then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
@ -296,13 +295,13 @@ export default {
|
||||
|
||||
// 设置监听
|
||||
if ("injectTo" in col) {
|
||||
console.log("set watcher: ", col.prop);
|
||||
//console.log("set watcher: ", col.prop);
|
||||
|
||||
const valueProp = "optionValue" in col ? col.optionValue : "id";
|
||||
const unwatch = this.$watch(
|
||||
() => this.dataForm[col.prop],
|
||||
(val) => {
|
||||
console.log("do watcher: ", col.prop);
|
||||
//console.log("do watcher: ", col.prop);
|
||||
if (col.disableWatcherOnEdit && this.editMode) return;
|
||||
if (!val) {
|
||||
col.injectTo.map((item) => {
|
||||
@ -318,7 +317,7 @@ export default {
|
||||
this.$forceUpdate();
|
||||
});
|
||||
} else {
|
||||
console.log('[x] if ("injectTo" in col) {');
|
||||
//console.log('[x] if ("injectTo" in col) {');
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -357,14 +356,14 @@ export default {
|
||||
|
||||
// 设置监听
|
||||
if ("injectTo" in col && !col.watcher) {
|
||||
console.log("set watcher: ", col.prop);
|
||||
//console.log("set watcher: ", col.prop);
|
||||
|
||||
const valueProp = "optionValue" in col ? col.optionValue : "id";
|
||||
const unwatch = this.$watch(
|
||||
() => this.dataForm[col.prop],
|
||||
(val) => {
|
||||
if (col.disableWatcherOnEdit && this.editMode) return;
|
||||
console.log("do watcher: ", col.prop);
|
||||
//console.log("do watcher: ", col.prop);
|
||||
if (!val) {
|
||||
col.injectTo.map((item) => {
|
||||
this.$set(this.dataForm, item[0], null);
|
||||
@ -379,7 +378,7 @@ export default {
|
||||
this.$forceUpdate();
|
||||
});
|
||||
} else {
|
||||
console.log('[x] if ("injectTo" in col) {');
|
||||
//console.log('[x] if ("injectTo" in col) {');
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -400,16 +399,16 @@ export default {
|
||||
}
|
||||
});
|
||||
|
||||
console.log("after getData: ", promiseHistory);
|
||||
//console.log("after getData: ", promiseHistory);
|
||||
};
|
||||
|
||||
/** 处理函数 */
|
||||
const handleFn = (prevProp, anchorField, anchorValue, targetField, col) => {
|
||||
console.log("[handleFn]: ", prevProp, anchorField, anchorValue, targetField);
|
||||
//console.log("[handleFn]: ", prevProp, anchorField, anchorValue, targetField);
|
||||
/** 此时 cachedList 已经确保可用了 */
|
||||
const target = this.cachedList[prevProp].find((i) => i[anchorField] === anchorValue);
|
||||
const param = target ? target[targetField] : "";
|
||||
console.log("((( chosenObject )))", target);
|
||||
//console.log("((( chosenObject )))", target);
|
||||
|
||||
getData(col, param);
|
||||
};
|
||||
@ -428,13 +427,13 @@ export default {
|
||||
row.forEach((col) => {
|
||||
if (col == null) return;
|
||||
if (col.fetchData && typeof col.fetchData === "function" && col.hasPrev) {
|
||||
console.log("[hasPrev] set watcher: ", col.hasPrev);
|
||||
//console.log("[hasPrev] set watcher: ", col.hasPrev);
|
||||
|
||||
// 获取数据 - 需要等待前置条件时
|
||||
const unwatch = this.$watch(
|
||||
() => this.dataForm[col.hasPrev],
|
||||
(val) => {
|
||||
console.log("[hasPrev] do watcher: ", col.hasPrev);
|
||||
//console.log("[hasPrev] do watcher: ", col.hasPrev);
|
||||
if (!val) {
|
||||
col.injectTo.map((item) => {
|
||||
this.$set(this.dataForm, item[0], null);
|
||||
@ -468,11 +467,11 @@ export default {
|
||||
if (this.configs.extraFields)
|
||||
this.configs.extraFields.forEach((cnf) => {
|
||||
if (cnf.listenTo) {
|
||||
console.log("set watcher for: ", cnf.prop);
|
||||
//console.log("set watcher for: ", cnf.prop);
|
||||
const unwatch = this.$watch(
|
||||
() => this.dataForm[cnf.listenTo.prop],
|
||||
(carId) => {
|
||||
console.log("do watcher for: ", cnf.prop);
|
||||
//console.log("do watcher for: ", cnf.prop);
|
||||
if (!carId) return;
|
||||
if (cnf.disableWatcherOnEdit && this.editMode) return;
|
||||
cnf.listenTo.handler.call(this, this.cachedList[cnf.listenTo.prop], carId);
|
||||
@ -528,14 +527,14 @@ export default {
|
||||
|
||||
resetSpecificFields(fields) {
|
||||
Object.keys(this.dataForm).forEach((key) => {
|
||||
// console.log(`${key} ${fields}`, key in fields, fields.indexOf(key))
|
||||
// //console.log(`${key} ${fields}`, key in fields, fields.indexOf(key))
|
||||
if (fields.indexOf(key) !== -1) {
|
||||
// console.log(`key ${key} in fields`)
|
||||
// //console.log(`key ${key} in fields`)
|
||||
// this.dataForm[key] = null;
|
||||
this.$set(this.dataForm, key, null);
|
||||
}
|
||||
});
|
||||
console.log("this.dataform", this.dataForm);
|
||||
//console.log("this.dataform", this.dataForm);
|
||||
},
|
||||
|
||||
resetForm(excludeId = false, immediate = false) {
|
||||
@ -557,9 +556,9 @@ export default {
|
||||
|
||||
/** init **/
|
||||
init(id, detailMode, tagInfo, extraParams) {
|
||||
// console.log("[DialogJustForm] init", this.dataForm, id, detailMode);
|
||||
// //console.log("[DialogJustForm] init", this.dataForm, id, detailMode);
|
||||
if (this.$refs.dataForm) {
|
||||
// console.log("[DialogJustForm] clearing form validation...");
|
||||
// //console.log("[DialogJustForm] clearing form validation...");
|
||||
// 当不是首次渲染dialog的时候,一开始就清空验证信息,本组件的循环里只有一个 dataForm 所以只用取 [0] 即可
|
||||
this.$refs.dataForm.clearValidate();
|
||||
}
|
||||
@ -570,7 +569,7 @@ export default {
|
||||
/** 判断 extraParams */
|
||||
if (extraParams && typeof extraParams === "object") {
|
||||
for (const [key, value] of Object.entries(extraParams)) {
|
||||
// console.log("[dialog] dataForm | key | value", this.dataForm, key, value);
|
||||
// //console.log("[dialog] dataForm | key | value", this.dataForm, key, value);
|
||||
this.$set(this.dataForm, key, value);
|
||||
}
|
||||
}
|
||||
@ -603,7 +602,7 @@ export default {
|
||||
url: file.fileUrl,
|
||||
}));
|
||||
}
|
||||
// console.log("[DialogJustForm] init():", this.dataForm);
|
||||
// //console.log("[DialogJustForm] init():", this.dataForm);
|
||||
} else {
|
||||
this.$message({
|
||||
message: `${res.code}: ${res.msg}`,
|
||||
@ -629,7 +628,7 @@ export default {
|
||||
|
||||
handleButtonClick(col) {
|
||||
if (!("onClick" in col)) {
|
||||
console.log("[handleButtonClick] 配置文件config.js 里没有绑定 onClick");
|
||||
//console.log("[handleButtonClick] 配置文件config.js 里没有绑定 onClick");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -640,7 +639,7 @@ export default {
|
||||
handleSelectChange(col, eventValue) {
|
||||
if ("autoUpdateProp" in col) {
|
||||
// 自动更新 相关联 的字段
|
||||
// console.log(col.options, eventValue, this.savedDatalist);
|
||||
// //console.log(col.options, eventValue, this.savedDatalist);
|
||||
const item = this.savedDatalist[col.prop].find((item) => item.id === eventValue);
|
||||
this.shadowDataForm[col.autoUpdateProp] = item.cate ?? null;
|
||||
}
|
||||
@ -648,17 +647,17 @@ export default {
|
||||
},
|
||||
|
||||
handleSwitchChange(val) {
|
||||
console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
//console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
},
|
||||
|
||||
handleComponentModelUpdate(propName, { subject, payload: { data } }) {
|
||||
this.dataForm[propName] = JSON.stringify(data);
|
||||
console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
//console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
},
|
||||
|
||||
addOrUpdate(method = "POST", url) {
|
||||
if ("parentId" in this.dataForm) {
|
||||
console.log("[DialogJustForm parentId]", this.dataForm.parentId);
|
||||
//console.log("[DialogJustForm parentId]", this.dataForm.parentId);
|
||||
// 对特殊的键做特殊处理,如 parentId 是一个 cascader,获取的值是 ["xxx"],后端只需要xxx
|
||||
const lastItem = this.dataForm.parentId.length - 1;
|
||||
this.dataForm.parentId = this.dataForm.parentId[lastItem];
|
||||
@ -710,7 +709,7 @@ export default {
|
||||
data: httpPayload,
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("[add&update] res is: ", res);
|
||||
//console.log("[add&update] res is: ", res);
|
||||
this.loadingStatus = false;
|
||||
if (res.code === 0) {
|
||||
this.$message.success(method === "POST" ? "添加成功" : "更新成功");
|
||||
@ -736,7 +735,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
console.log("btn click payload: ", payload);
|
||||
//console.log("btn click payload: ", payload);
|
||||
|
||||
if ("name" in payload) {
|
||||
switch (payload.name) {
|
||||
@ -748,7 +747,7 @@ export default {
|
||||
break;
|
||||
case "resetSpecific":
|
||||
// qualityInspectionRecord config 里引用
|
||||
console.log("resetFields", this.resetFields);
|
||||
//console.log("resetFields", this.resetFields);
|
||||
this.resetSpecificFields(this.resetFields);
|
||||
break;
|
||||
case "add":
|
||||
@ -763,18 +762,18 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "add-car-payload": {
|
||||
console.log("edit-car-payload", payload);
|
||||
//console.log("edit-car-payload", payload);
|
||||
this.addOrUpdate("POST", this.urls.payloadFormUrl);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log("[x] 不是这么用的! 缺少name属性");
|
||||
//console.log("[x] 不是这么用的! 缺少name属性");
|
||||
}
|
||||
},
|
||||
|
||||
handleUploadChange(file, fileList) {
|
||||
console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
//console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
},
|
||||
|
||||
handleClose() {
|
||||
@ -787,20 +786,19 @@ export default {
|
||||
|
||||
<style scoped>
|
||||
.dialog-just-form >>> .el-dialog__body {
|
||||
/* padding-top: 16px !important;
|
||||
padding-bottom: 16px !important; */
|
||||
padding-top: 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.dialog-just-form >>> .el-form {
|
||||
padding: 16px;
|
||||
max-height: 56vh;
|
||||
overflow-y: auto;
|
||||
}
|
||||
|
||||
.el-select,
|
||||
.el-cascader,
|
||||
.el-date-editor {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.dialog-just-form >>> .el-dialog__header {
|
||||
padding: 10px 20px 10px;
|
||||
/* background: linear-gradient(to bottom, rgba(0, 0, 0, 0.25), white); */
|
||||
}
|
||||
</style>
|
||||
|
@ -4,6 +4,7 @@
|
||||
element-loading-text="处理中,请耐心等待..."
|
||||
element-loading-background="rgba(0,0,0,0.1)"
|
||||
class="dialog-just-form"
|
||||
custom-class="pms-dialog"
|
||||
:visible="visible"
|
||||
@close="handleClose"
|
||||
width="30%"
|
||||
@ -136,7 +137,7 @@ export default {
|
||||
},
|
||||
|
||||
handleSuccess(response, file, fileList) {
|
||||
console.log("success response", response);
|
||||
//console.log("success response", response);
|
||||
this.loadingStatus = false
|
||||
try {
|
||||
if ("code" in response && response.code === 500) {
|
||||
@ -177,7 +178,7 @@ export default {
|
||||
|
||||
handleError(err, file, fileList) {
|
||||
this.loadingStatus = false
|
||||
console.log("err", err);
|
||||
//console.log("err", err);
|
||||
},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
@ -210,7 +211,7 @@ export default {
|
||||
},
|
||||
|
||||
handleUploadChange(file, fileList) {
|
||||
// console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
// //console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
},
|
||||
|
||||
handleClose() {
|
||||
@ -229,7 +230,7 @@ export default {
|
||||
/* padding-top: 16px !important;
|
||||
padding-bottom: 16px !important; */
|
||||
padding-top: 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
padding-bottom: 12px !important;
|
||||
}
|
||||
|
||||
.el-select,
|
||||
@ -238,11 +239,6 @@ export default {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.dialog-just-form >>> .el-dialog__header {
|
||||
padding: 10px 20px 10px;
|
||||
/* background: linear-gradient(to bottom, rgba(0, 0, 0, 0.25), white); */
|
||||
}
|
||||
|
||||
.h0 {
|
||||
height: 0;
|
||||
width: 0;
|
||||
|
@ -12,12 +12,9 @@
|
||||
:destroy-on-close="false"
|
||||
@close="handleClose"
|
||||
:close-on-click-modal="configs.clickModalToClose ?? false">
|
||||
<!-- title -->
|
||||
<div slot="title" class="dialog-title">
|
||||
<h1 class="">
|
||||
<h1 slot="title" class="dialog-title">
|
||||
{{ detailMode ? "查看详情" : dataForm.id ? "编辑" : "新增" }}
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
<div class="dialog-body__inner relative">
|
||||
<!-- v-if="dataForm.id && !detailMode && /属性|详情/.test(activeMenu) && $hasPermission()" -->
|
||||
@ -100,7 +97,9 @@
|
||||
:label="opt.label"
|
||||
:value="opt.value">
|
||||
<span>{{ opt.label }}</span>
|
||||
<span v-if="col.customLabel" style="display: inline-clock; margin-left: 12px; font-size: 0.9em">
|
||||
<span
|
||||
v-if="col.customLabel"
|
||||
style="display: inline-clock; margin-left: 12px; font-size: 0.9em">
|
||||
{{ opt[col.customLabel] || "无描述" }}
|
||||
</span>
|
||||
</el-option>
|
||||
@ -169,7 +168,9 @@
|
||||
|
||||
<!-- 附件标签页 -->
|
||||
<div v-if="dataForm.id && tab.key === 'attachment'" key="attachment">
|
||||
<div class="upload-tips" style="font-size: 0.8em; margin-bottom: 12px">文件大小不要超过 2MB</div>
|
||||
<div class="upload-tips" style="font-size: 0.8em; margin-bottom: 12px">
|
||||
文件大小不要超过 2MB
|
||||
</div>
|
||||
<!-- 附件列表 -->
|
||||
<div class="" v-loading="loadingStatus">
|
||||
<ul class="file-list">
|
||||
@ -212,6 +213,7 @@
|
||||
:url="urls.subase"
|
||||
:configs="configs.subDialog"
|
||||
:related-id="dataForm.id"
|
||||
:code="extraCode"
|
||||
@refreshDataList="getSubList"></small-dialog>
|
||||
|
||||
<!-- footer -->
|
||||
@ -293,11 +295,12 @@ export default {
|
||||
|
||||
if (col.fetchData)
|
||||
col.fetchData().then(({ data: res }) => {
|
||||
console.log("[Fetch Data]", "list" in res.data, res.data, res.data.list);
|
||||
//console.log("[Fetch Data]", "list" in res.data, res.data, res.data.list);
|
||||
if (res.code === 0) {
|
||||
if (col.cacheFetchedData) {
|
||||
// cache fetched data
|
||||
cached[col.prop] = "list" in res.data ? res.data.list : Array.isArray(res.data) ? res.data : [];
|
||||
cached[col.prop] =
|
||||
"list" in res.data ? res.data.list : Array.isArray(res.data) ? res.data : [];
|
||||
}
|
||||
|
||||
if (!col.options || !col.options.length) {
|
||||
@ -329,7 +332,9 @@ export default {
|
||||
}
|
||||
// col.options = res.data.list;
|
||||
else if (col.options.length) {
|
||||
"list" in res.data ? res.data.list.unshift(...col.options) : res.data.unshift(...col.options);
|
||||
"list" in res.data
|
||||
? res.data.list.unshift(...col.options)
|
||||
: res.data.unshift(...col.options);
|
||||
this.$set(
|
||||
col,
|
||||
"options",
|
||||
@ -352,7 +357,7 @@ export default {
|
||||
else if (col.fetchTreeData) {
|
||||
// 获取设备类型时触发的,用于前端构建属性结构,约定,parentId 为0时是顶级节点
|
||||
col.fetchTreeData().then(({ data: res }) => {
|
||||
console.log("[Fetch Tree Data]", res.data);
|
||||
//console.log("[Fetch Tree Data]", res.data);
|
||||
if (res.code === 0) {
|
||||
// 先把数据先重构成一个对象
|
||||
const obj = {};
|
||||
@ -368,7 +373,7 @@ export default {
|
||||
}
|
||||
// 再过滤这个对象
|
||||
let filteredList = reConstructTreeData(obj);
|
||||
console.log("** filteredList **", filteredList);
|
||||
//console.log("** filteredList **", filteredList);
|
||||
// 最后设置 options
|
||||
this.$set(col, "options", filteredList);
|
||||
} else {
|
||||
@ -381,6 +386,7 @@ export default {
|
||||
});
|
||||
|
||||
return {
|
||||
extraCode: null,
|
||||
// configs,
|
||||
btnLoading: false,
|
||||
loadingStatus: false,
|
||||
@ -438,11 +444,16 @@ export default {
|
||||
() => this.dataForm[col.prop],
|
||||
(val) => {
|
||||
if (val && col.prop in this.cached) {
|
||||
console.log("here changeReflects", col.prop, col.changeReflects.toProp, this.cached[col.prop]);
|
||||
//console.log(
|
||||
// "here changeReflects",
|
||||
// col.prop,
|
||||
// col.changeReflects.toProp,
|
||||
// this.cached[col.prop]
|
||||
// );
|
||||
if (typeof col.changeReflects.fromKey === "string") {
|
||||
this.dataForm[col.changeReflects.toProp] = this.cached[col.prop].find((item) => item.id === val)?.[
|
||||
col.changeReflects.fromKey
|
||||
];
|
||||
this.dataForm[col.changeReflects.toProp] = this.cached[col.prop].find(
|
||||
(item) => item.id === val
|
||||
)?.[col.changeReflects.fromKey];
|
||||
} else if (Array.isArray(col.changeReflects.fromKey) && col.changeReflects.delimiter) {
|
||||
const foundItem = (this.dataForm[col.changeReflects.toProp] = this.cached[col.prop].find(
|
||||
(item) => item.id === val
|
||||
@ -452,7 +463,7 @@ export default {
|
||||
this.dataForm[col.changeReflects.toProp] = values.join(col.changeReflects.delimiter);
|
||||
} else {
|
||||
this.dataForm[col.changeReflects.toProp] = col.changeReflects.delimiter;
|
||||
console.log("[DialogWithMenu] mounted() 没找到对应数据");
|
||||
//console.log("[DialogWithMenu] mounted() 没找到对应数据");
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -510,14 +521,16 @@ export default {
|
||||
const addMode = !operate.showOnEdit && !this.dataForm.id;
|
||||
const permission = operate.permission ? this.$hasPermission(operate.permission) : true;
|
||||
const currentMenuKey = this.configs.menu.find((item) => item.name === this.activeMenu)?.key;
|
||||
return notDetailMode && (showAlways || ((editMode || addMode) && permission)) && currentMenuKey === "info";
|
||||
return (
|
||||
notDetailMode && (showAlways || ((editMode || addMode) && permission)) && currentMenuKey === "info"
|
||||
);
|
||||
},
|
||||
|
||||
resetForm(excludeId = false, immediate = false) {
|
||||
setTimeout(
|
||||
() => {
|
||||
Object.keys(this.dataForm).forEach((key) => {
|
||||
console.log("reset form, key", key);
|
||||
//console.log("reset form, key", key);
|
||||
if (excludeId && key === "id") return;
|
||||
if ("files" in this.dataForm) this.dataForm.files = [];
|
||||
else if ("fileIds" in this.dataForm) this.dataForm.fileIds = [];
|
||||
@ -528,7 +541,7 @@ export default {
|
||||
});
|
||||
this.activeMenu = this.configs.menu[0].name;
|
||||
this.$refs.dataForm[0].resetFields();
|
||||
console.log("清除Form...", this.dataForm);
|
||||
//console.log("清除Form...", this.dataForm);
|
||||
},
|
||||
immediate ? 0 : 200
|
||||
);
|
||||
@ -538,7 +551,7 @@ export default {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (this.watingToRefreshQueue.length) {
|
||||
this.watingToRefreshQueue.forEach((opt) => {
|
||||
console.log("[刷新数据, ", opt, "]");
|
||||
//console.log("[刷新数据, ", opt, "]");
|
||||
if ("fetchData" in opt) {
|
||||
opt.fetchData(this.dataForm.id ? this.dataForm.id : -1).then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
@ -574,7 +587,7 @@ export default {
|
||||
// 当不是首次渲染dialog的时候,一开始就清空验证信息,本组件的循环里只有一个 dataForm 所以只用取 [0] 即可
|
||||
this.$refs.dataForm[0].clearValidate();
|
||||
}
|
||||
console.log("[dialog] DialogWithHead init():", id, detailMode);
|
||||
//console.log("[dialog] DialogWithHead init():", id, detailMode);
|
||||
|
||||
this.detailMode = detailMode ?? false;
|
||||
this.$nextTick(() => {
|
||||
@ -590,11 +603,11 @@ export default {
|
||||
this.$http.get(this.urls.base + `/${this.dataForm.id}`).then(({ data: res }) => {
|
||||
if (res && res.code === 0) {
|
||||
const dataFormKeys = Object.keys(this.dataForm);
|
||||
console.log("[DialogWithMenu] dataFormKeys -------->", dataFormKeys);
|
||||
//console.log("[DialogWithMenu] dataFormKeys -------->", dataFormKeys);
|
||||
|
||||
this.dataForm = __pick(res.data, dataFormKeys);
|
||||
if ("files" in res.data) {
|
||||
console.log("[DialogWithMenu] fileList===>", res.data.files, this.fileList);
|
||||
//console.log("[DialogWithMenu] fileList===>", res.data.files, this.fileList);
|
||||
/** 返回的文件列表 */
|
||||
this.fileList = res.data.files
|
||||
? res.data.files.map((file) => ({
|
||||
@ -635,7 +648,7 @@ export default {
|
||||
responseType: "blob",
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("preivew", res);
|
||||
//console.log("preivew", res);
|
||||
if (/image/i.test(res.type)) {
|
||||
// 显示图片
|
||||
this.currentImgUrl = URL.createObjectURL(res);
|
||||
@ -646,9 +659,9 @@ export default {
|
||||
a.setAttribute("target", "_blank");
|
||||
a.href = URL.createObjectURL(res);
|
||||
a.click();
|
||||
console.log("before remove a ", a);
|
||||
//console.log("before remove a ", a);
|
||||
a.remove();
|
||||
console.log("removed a ", a);
|
||||
//console.log("removed a ", a);
|
||||
} else {
|
||||
this.$message({
|
||||
message: "非图片和PDF文件请下载后预览",
|
||||
@ -728,7 +741,7 @@ export default {
|
||||
},
|
||||
|
||||
handleUploadSuccess(response, file, fileList) {
|
||||
console.log("[DialogWithMenu] uploadedFileList", response, file, fileList);
|
||||
//console.log("[DialogWithMenu] uploadedFileList", response, file, fileList);
|
||||
|
||||
if (response.code === 0) {
|
||||
const uploadedFile = response.data[0];
|
||||
@ -768,7 +781,7 @@ export default {
|
||||
},
|
||||
|
||||
handleUploadCheck(file) {
|
||||
console.log("[before upload]", file);
|
||||
//console.log("[before upload]", file);
|
||||
const LIMIT = 2 * 1024 * 1024; // bytes
|
||||
if (file.size > LIMIT) {
|
||||
this.$message({
|
||||
@ -782,16 +795,16 @@ export default {
|
||||
|
||||
handleComponentModelUpdate(propName, { subject, payload: { data } }) {
|
||||
this.dataForm[propName] = JSON.stringify(data);
|
||||
console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
//console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
},
|
||||
handleSelectChange(col, eventValue) {
|
||||
console.log("[dialog] select change: ", col, eventValue);
|
||||
//console.log("[dialog] select change: ", col, eventValue);
|
||||
},
|
||||
handleSwitchChange(val) {
|
||||
console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
//console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
},
|
||||
handleBtnClick(payload) {
|
||||
console.log("btn click payload: ", payload);
|
||||
//console.log("btn click payload: ", payload);
|
||||
|
||||
if ("name" in payload) {
|
||||
switch (payload.name) {
|
||||
@ -832,7 +845,7 @@ export default {
|
||||
// this.configs.excludeProps.forEach((prop) => {
|
||||
// delete actualPayload[prop];
|
||||
// });
|
||||
// console.log('actualPayload', actualPayload);
|
||||
// //console.log('actualPayload', actualPayload);
|
||||
// }
|
||||
|
||||
// 实际发送请求
|
||||
@ -848,7 +861,7 @@ export default {
|
||||
.then(({ data: res }) => {
|
||||
this.btnLoading = false;
|
||||
this.loadingStatus = false;
|
||||
console.log("[add&update] res is: ", res);
|
||||
//console.log("[add&update] res is: ", res);
|
||||
if (res.code === 0) {
|
||||
this.$message.success(payload.name === "add" ? "添加成功" : "更新成功");
|
||||
this.$emit("refreshDataList");
|
||||
@ -857,7 +870,7 @@ export default {
|
||||
// if (this.watingToRefreshQueue.length) {
|
||||
// // 刷新队列
|
||||
// this.watingToRefreshQueue.forEach((opt) => {
|
||||
// console.log("[刷新数据, ", opt, "]");
|
||||
// //console.log("[刷新数据, ", opt, "]");
|
||||
// if ("fetchData" in opt) {
|
||||
// opt.fetchData().then(({ data: res }) => {
|
||||
// if (res.code === 0) {
|
||||
@ -898,7 +911,7 @@ export default {
|
||||
}
|
||||
},
|
||||
handleTabClick(payload) {
|
||||
// console.log("tab click payload: ", this.activeMenu);
|
||||
// //console.log("tab click payload: ", this.activeMenu);
|
||||
// if (this.activeMenu === this.configs.menu[1].name) {
|
||||
// // 获取数据
|
||||
// this.getSubList();
|
||||
@ -936,7 +949,7 @@ export default {
|
||||
}
|
||||
}
|
||||
this.$http.get(this.urls.subpage, { params }).then(({ data: res }) => {
|
||||
console.log("[DialogWithMenu] getSubList:", res);
|
||||
//console.log("[DialogWithMenu] getSubList:", res);
|
||||
if (res.code === 0 && res.data?.list) {
|
||||
// 有数据
|
||||
this.subList = res.data.list;
|
||||
@ -962,20 +975,21 @@ export default {
|
||||
|
||||
/** 列表handlers */
|
||||
handleAddItem() {
|
||||
// console.log('[dialog] handleAddItem ot list...');
|
||||
// //console.log('[dialog] handleAddItem ot list...');
|
||||
this.showBaseDialog = true;
|
||||
this.$nextTick(() => {
|
||||
console.log("[sub-dialog] ", this.$refs["sub-dialog"].init());
|
||||
//console.log("[sub-dialog] ", this.$refs["sub-dialog"].init());
|
||||
});
|
||||
},
|
||||
handleTableRowOperate({ type, data }) {
|
||||
console.log("handleTableRowOperate", type, data);
|
||||
//console.log("handleTableRowOperate", type, data);
|
||||
|
||||
switch (type) {
|
||||
case "delete": {
|
||||
// 确认是否删除
|
||||
console.log("delete....", data);
|
||||
const itemName = typeof data === "object" ? data.attrName || data.name || data.material || data.id : data;
|
||||
//console.log("delete....", data);
|
||||
const itemName =
|
||||
typeof data === "object" ? data.attrName || data.name || data.material || data.id : data;
|
||||
return this.$confirm(`是否删除条目: ${itemName}`, "提示", {
|
||||
confirmButtonText: "确认",
|
||||
cancelButtonText: "我再想想",
|
||||
@ -1002,6 +1016,7 @@ export default {
|
||||
.catch((err) => {});
|
||||
}
|
||||
case "edit": {
|
||||
this.extraCode = this.subList?.find((item) => item.id == data)?.code;
|
||||
this.handleAddParam(data); /** data is ==> id */
|
||||
break;
|
||||
}
|
||||
@ -1024,10 +1039,6 @@ export default {
|
||||
/* background: #0f02 !important; */
|
||||
}
|
||||
|
||||
/* .el-menu--horizontal > .el-menu-item.is-active { */
|
||||
/* border-bottom-color: #0b58ff; */
|
||||
/* } */
|
||||
|
||||
.dialog-with-menu >>> .el-dialog__body {
|
||||
/* padding-top: 16px !important;
|
||||
padding-bottom: 16px !important; */
|
||||
@ -1035,16 +1046,15 @@ export default {
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
/* .dialog-with-menu >>> .dialog-body__inner {
|
||||
padding: 16px;
|
||||
} */
|
||||
|
||||
.el-select,
|
||||
.el-cascader {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.dialog-with-menu >>> .el-dialog__header {
|
||||
padding: 10px 20px 10px;
|
||||
/* background: linear-gradient(to bottom, rgba(0, 0, 0, 0.25), white); */
|
||||
}
|
||||
|
||||
.relative {
|
||||
position: relative;
|
||||
}
|
||||
|
345
src/components/PrintDom.vue
Normal file
345
src/components/PrintDom.vue
Normal file
@ -0,0 +1,345 @@
|
||||
<!--
|
||||
filename: PrintDom.vue
|
||||
author: liubin
|
||||
date: 2023-08-11 13:59:22
|
||||
description:
|
||||
-->
|
||||
|
||||
<template>
|
||||
<div
|
||||
class="print-area"
|
||||
style="
|
||||
box-sizing: border-box;
|
||||
margin: 4px;
|
||||
border: 1px solid #000;
|
||||
padding: 8px;
|
||||
display: inline-block;
|
||||
width: calc(6cm - 8px);
|
||||
height: 14.5cm;
|
||||
font-family: Arial, Helvetica, sans-serif;
|
||||
">
|
||||
<!-- 6cm - margin -->
|
||||
<h4
|
||||
class="datetime"
|
||||
style="
|
||||
font-size: 10px;
|
||||
margin: 0 0 10px 0;
|
||||
font-weight: 400;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
">
|
||||
<span>{{ datetime.toLocaleDateString() }}</span>
|
||||
<span>{{ datetime.toLocaleTimeString() }}</span>
|
||||
</h4>
|
||||
<!-- 物料号 -->
|
||||
<h2 class="material-code" style="font-size: 20px; margin: 10px 0">{{ dataForm.pdtCode }}</h2>
|
||||
<!-- 牌号 -->
|
||||
<h2 class="brand" style="font-size: 16px; letter-spacing: 1px; margin: 10px 0">{{ dataForm.brand }}</h2>
|
||||
<!-- 配方号 -->
|
||||
<h3 class="bom-code" style="font-size: 14px; margin: 10px 0">{{ dataForm.bomCode }}</h3>
|
||||
<!-- 砖型 -->
|
||||
<h2 class="shape" style="font-size: 20px; letter-spacing: 1px; margin: 10px 0">
|
||||
{{ dataForm.shapeCode }}
|
||||
</h2>
|
||||
<!-- 生产订单 -->
|
||||
<h3 class="order-id" style="font-size: 14px; margin: 10px 0">{{ dataForm.orderCode }}</h3>
|
||||
<!-- 客户 -->
|
||||
<h3 class="client" style="font-size: 14px; text-transform: uppercase; margin: 10px 0">
|
||||
{{ dataForm.customer }}
|
||||
</h3>
|
||||
<h2
|
||||
class="sale-order-id sale-item-id"
|
||||
style="
|
||||
display: flex;
|
||||
align-items: center;
|
||||
font-size: 20px;
|
||||
justify-content: space-between;
|
||||
margin: 10px 0;
|
||||
">
|
||||
<!-- 托盘号 -->
|
||||
<span>{{ dataForm.code }}</span>
|
||||
<!-- 销售订单号 -->
|
||||
<span>{{ dataForm.saleNo }}</span>
|
||||
</h2>
|
||||
<!-- 销售订单发货时间 -->
|
||||
<h2 class="delivery-time" style="font-size: 18px; margin: 10px 0">
|
||||
{{ new Date(dataForm.deliveryTime).toLocaleDateString() }}
|
||||
<!-- {{
|
||||
new Date(dataForm.deliveryTime).toLocaleDateString() +
|
||||
" " +
|
||||
new Date(dataForm.deliveryTime).toLocaleTimeString()
|
||||
}} -->
|
||||
</h2>
|
||||
<!-- 托盘类型: 满托 尾托 余托 -->
|
||||
<h2
|
||||
class="pan-no"
|
||||
style="
|
||||
padding: 4px;
|
||||
border: 1px solid #000;
|
||||
font-size: 18px;
|
||||
margin: 10px 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'PingFang SC', '微软雅黑',
|
||||
'Microsoft YaHei UI', 'Microsoft YaHei', 'Source Han Sans SC', 'Noto Sans CJK SC',
|
||||
'WenQuanYi Micro Hei', sans-serif;
|
||||
/* background: #000; */
|
||||
/* color: #fff; */
|
||||
">
|
||||
{{ palletType }}
|
||||
<!-- {{ dataForm.code }} -->
|
||||
</h2>
|
||||
|
||||
<div
|
||||
class="bottom-area"
|
||||
style="margin-bottom: 8px; display: flex; align-items: flex-start; justify-content: space-between">
|
||||
<!-- 二维码 -->
|
||||
<div
|
||||
class="qrcode"
|
||||
style="flex-shrink: 0; width: 128px; height: 128px; /* border: 1px solid #0003; */">
|
||||
<img id="qrcode" style="width: 100%; height: 100%" />
|
||||
</div>
|
||||
<div class="" style="text-align: right">
|
||||
<!-- 订单生产总砖数 -->
|
||||
<h2 class="shape-count" style="font-size: 20px; margin: 0 0 10px 8px">{{ dataForm.prodqty }}</h2>
|
||||
<!-- 实际码放在托盘上的砖数 -->
|
||||
<h2 class="shape-placed" style="font-size: 20px; margin: 0 0 10px 8px">{{ dataForm.realQty }}</h2>
|
||||
<!-- 需要码放 24 托木托盘,每托120块砖 -->
|
||||
<h2 class="shape-24" style="font-size: 20px; margin: 0 0 10px 8px">{{ dataForm.fpText }}</h2>
|
||||
<!-- 需要码放 1 托木托盘,每托10块砖 -->
|
||||
<h2 class="shape-1" style="font-size: 20px; margin: 0 0 10px 8px">{{ dataForm.tpText }}</h2>
|
||||
</div>
|
||||
</div>
|
||||
<!-- <h2 class="pack-code" style="font-size: 20px; margin: 0 0 10px">S653</h2> -->
|
||||
<svg id="barcode"></svg>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import JsBarcode from "jsbarcode";
|
||||
import QRCode from "qrcode";
|
||||
import { getLodop } from "@/utils/Lodop";
|
||||
|
||||
export default {
|
||||
name: "PrintDom",
|
||||
components: {},
|
||||
props: {},
|
||||
data() {
|
||||
return {
|
||||
lodop: null,
|
||||
datetime: new Date(),
|
||||
dataForm: {
|
||||
pdtCode: null,
|
||||
brand: null,
|
||||
bomCode: null,
|
||||
shapeCode: null,
|
||||
orderCode: null,
|
||||
customer: null,
|
||||
code: null,
|
||||
saleNo: null,
|
||||
deliveryTime: null,
|
||||
typeDictValue: null,
|
||||
prodqty: null,
|
||||
realQty: null,
|
||||
fpText: null,
|
||||
tpText: null,
|
||||
packTechCode: null,
|
||||
hu: null,
|
||||
},
|
||||
jobId: null,
|
||||
palletId: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
// comp120() {
|
||||
// if (this.dataForm.realQty == null) return 0;
|
||||
// return Math.floor(this.dataForm.realQty / 120);
|
||||
// },
|
||||
// comp10() {
|
||||
// if (this.dataForm.realQty == null) return 0;
|
||||
// return Math.ceil((this.dataForm.realQty % 120) / 10);
|
||||
// },
|
||||
palletType() {
|
||||
switch (this.dataForm.typeDictValue?.toString()) {
|
||||
case "0":
|
||||
return "满 托";
|
||||
case "1":
|
||||
return "尾 托";
|
||||
case "2":
|
||||
return "余 托";
|
||||
default:
|
||||
return "-";
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
*
|
||||
* @param {string|object} data 当source为api时,data为id,当source为local时,data为对象
|
||||
* @param {'api'|'local'} source 数据来源
|
||||
*/
|
||||
async print(data, source = "api") {
|
||||
// 初始化打印控件
|
||||
if (!this.initPrintPlugin()) return this.close();
|
||||
if (source === "api") {
|
||||
this.palletId = data;
|
||||
await this.printByApi(data);
|
||||
} else {
|
||||
await this.printByLocalData(data);
|
||||
}
|
||||
this.close();
|
||||
},
|
||||
|
||||
async printByApi(id) {
|
||||
const { data: res } = await this.$http.get("/pms/pallet/" + id);
|
||||
|
||||
this.dataForm = res.data;
|
||||
await this.printByLocalData(res.data);
|
||||
// this.getPrintStatus(id);
|
||||
},
|
||||
|
||||
async printByLocalData(data) {
|
||||
// 绘制包装代码
|
||||
this.paintBarCode(data.packTechCode || "0000-0000-0000");
|
||||
// 绘制HU号
|
||||
await this.paintQrCode(data.hu || "- 无HU数据 -");
|
||||
this.handlePrint();
|
||||
},
|
||||
|
||||
initPrintPlugin() {
|
||||
this.lodop = getLodop();
|
||||
if (!this.lodop) {
|
||||
return this.$confirm("请先安装打印控件", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
window.open("http://www.c-lodop.com/download.html");
|
||||
})
|
||||
.catch(() => {
|
||||
return false;
|
||||
});
|
||||
}
|
||||
return true;
|
||||
},
|
||||
|
||||
paintBarCode(data) {
|
||||
JsBarcode("#barcode", data, {
|
||||
format: "CODE128",
|
||||
width: 2.5,
|
||||
height: 48,
|
||||
displayValue: true,
|
||||
margin: 0,
|
||||
});
|
||||
},
|
||||
|
||||
async paintQrCode(data) {
|
||||
try {
|
||||
const url = await QRCode.toDataURL(data, {
|
||||
width: 128,
|
||||
height: 128,
|
||||
});
|
||||
document.querySelector("#qrcode").src = url;
|
||||
} catch (err) {
|
||||
document.querySelector(".qrcode").innerHTML = "NO QRCode";
|
||||
}
|
||||
},
|
||||
|
||||
// handlePrint() {
|
||||
// return new Promise((resolve, reject) => {
|
||||
// this.lodop.PRINT_INIT("RGV小票打印");
|
||||
// // 捕获打印状态
|
||||
// this.lodop.SET_PRINT_MODE("CATCH_PRINT_STATUS", true);
|
||||
// if (this.lodop.CVERSION) {
|
||||
// // 获取jobId
|
||||
// this.lodop.On_Return = (TaskID, Value) => {
|
||||
// this.jobId = Value;
|
||||
// resolve();
|
||||
// };
|
||||
// }
|
||||
// // 纵向打印,宽度60mm,高度150mm,定义纸张名称
|
||||
// this.lodop.SET_PRINT_PAGESIZE(1, 600, 1500, "ZebraT231 Tag Paper");
|
||||
// this.lodop.ADD_PRINT_HTM(0, 0, "100%", "100%", document.querySelector(".print-area").outerHTML);
|
||||
// this.lodop.PRINT();
|
||||
// });
|
||||
// },
|
||||
|
||||
// getPrintStatus(id) {
|
||||
// return new Promise((resolve, reject) => {
|
||||
// if (!this.jobId || !this.lodop) reject(-1);
|
||||
// this.lodop.SET_PRINT_MODE("CATCH_PRINT_STATUS", true);
|
||||
// if (this.lodop.CVERSION) {
|
||||
// this.lodop.On_Return = (TaskID, Value) => {
|
||||
// //console.log("this.lodop.On_Return", this.lodop.On_Return, this.jobId, Value);
|
||||
// if (Value.toString() == "1") {
|
||||
// // 打印成功
|
||||
// this.sendSuccess()
|
||||
// .then(() => {
|
||||
// this.$message.success(`打印 ${id} 成功`);
|
||||
// this.$emit("refresh-list");
|
||||
// resolve();
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// this.$message.error(err);
|
||||
// reject(err);
|
||||
// });
|
||||
// } else {
|
||||
// this.$message.error(`打印 ${id} 失败`);
|
||||
// }
|
||||
// };
|
||||
// this.lodop.GET_VALUE("PRINT_STATUS_OK", this.jobId);
|
||||
// }
|
||||
// });
|
||||
// },
|
||||
|
||||
handlePrint() {
|
||||
this.lodop.PRINT_INIT("RGV小票打印");
|
||||
|
||||
// 纵向打印,宽度60mm,高度150mm,定义纸张名称
|
||||
this.lodop.SET_PRINT_PAGESIZE(1, 600, 1500, "ZebraT231 Tag Paper");
|
||||
this.lodop.ADD_PRINT_HTM(0, 0, "100%", "100%", document.querySelector(".print-area").outerHTML);
|
||||
this.lodop.PRINT();
|
||||
},
|
||||
|
||||
// getPrintStatus(id) {
|
||||
// // 打印成功
|
||||
// this.sendSuccess()
|
||||
// .then(() => {
|
||||
// this.$message.success(`打印 ${id} 成功`);
|
||||
// this.$emit("refresh-list");
|
||||
// })
|
||||
// .catch((err) => {
|
||||
// this.$message.error("code" in err && "msg" in err ? `${err.code}: ${err.msg}` : err);
|
||||
// });
|
||||
// },
|
||||
|
||||
// sendSuccess() {
|
||||
// return this.$http({
|
||||
// url: "/pms/pallet/print",
|
||||
// method: "post",
|
||||
// data: this.palletId,
|
||||
// headers: {
|
||||
// "Content-Type": "application/json",
|
||||
// },
|
||||
// }).then(({ data: res }) => {
|
||||
// if (res.code == 0) return;
|
||||
// else throw new Error(res.msg);
|
||||
// });
|
||||
// },
|
||||
|
||||
close() {
|
||||
this.$emit("destroy");
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.print-area {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
}
|
||||
</style>
|
347
src/components/ReportDialog.vue
Normal file
347
src/components/ReportDialog.vue
Normal file
@ -0,0 +1,347 @@
|
||||
<!--
|
||||
filename: ReportDialog.vue
|
||||
author: liubin
|
||||
date: 2023-08-17 14:46:32
|
||||
description: 报工弹窗
|
||||
-->
|
||||
|
||||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
width="700px"
|
||||
v-bind="$attrs"
|
||||
@close="close"
|
||||
@closed="$emit('destroy')"
|
||||
custom-class="pms-dialog">
|
||||
<!-- :class="{ 'pms-dialog--rotate-down': startLeave }"> -->
|
||||
<span slot="title" class="dialog-title">报工预览</span>
|
||||
|
||||
<!-- 面包屑导航 -->
|
||||
<div style="padding: 12px; background: #f7f7f7">
|
||||
<el-breadcrumb separator="/">
|
||||
<el-breadcrumb-item>预报工单</el-breadcrumb-item>
|
||||
<el-breadcrumb-item v-if="mode.includes('form')">编辑</el-breadcrumb-item>
|
||||
</el-breadcrumb>
|
||||
</div>
|
||||
|
||||
<transition class="l" mode="out-in">
|
||||
<BaseListTable
|
||||
v-if="mode.includes('table')"
|
||||
v-loading="loading"
|
||||
:column-config="tableProps"
|
||||
:table-data="dataList"
|
||||
@operate-event="handleOperate"
|
||||
:current-page="page"
|
||||
:current-size="size" />
|
||||
|
||||
<el-form
|
||||
v-if="mode.includes('form')"
|
||||
ref="dataForm"
|
||||
:model="dataForm"
|
||||
size="small"
|
||||
style="padding: 16px"
|
||||
v-loading="formLoading">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="订单号" prop="orderCode" :rules="null">
|
||||
<el-input v-model="dataForm.orderCode" disabled placeholder="-" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="订单子号" prop="orderCate" :rules="null">
|
||||
<el-input v-model="dataForm.orderCate" disabled placeholder="-" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<!-- 总量 - 前端计算 -->
|
||||
<el-form-item label="生产总量" prop="qty" :rules="null">
|
||||
<el-input v-model="dataForm.qty" disabled placeholder="-" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="合格砖数量" prop="goodqty" :rules="[$fv.isRequired, $fv.isNumber]">
|
||||
<el-input v-model="dataForm.goodqty" placeholder="请输入合格砖数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="报废砖数量" prop="badqty" :rules="[$fv.isRequired, $fv.isNumber]">
|
||||
<el-input v-model="dataForm.badqty" placeholder="请输入报废砖数量" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<!-- 报废率 - 前端计算 -->
|
||||
<el-form-item label="报废率" prop="badratio" :rules="null">
|
||||
<el-input v-model="dataForm.badratio" disabled placeholder="-" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="报工班次" prop="team" :rules="null">
|
||||
<el-select v-model="dataForm.team" placeholder="请选择报工班次">
|
||||
<el-option label="早班" value="0" />
|
||||
<el-option label="中班" value="1" />
|
||||
<el-option label="晚班" value="2" />
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8" style="padding-top: 32px">
|
||||
<el-button type="primary" size="small" @click="handleSaveEdit">预保存</el-button>
|
||||
<el-button size="small" @click="mode = 'table'">取消</el-button>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
</transition>
|
||||
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button size="small" @click="close">取消</el-button>
|
||||
<el-button size="small" type="primary" @click="handleConfirm">提交更改</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BaseListTable from "@/components/BaseListTable.vue";
|
||||
import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent";
|
||||
|
||||
export default {
|
||||
name: "ReportDialog",
|
||||
components: { BaseListTable },
|
||||
props: ["ids"],
|
||||
data() {
|
||||
return {
|
||||
mode: "table",
|
||||
visible: false,
|
||||
loading: false,
|
||||
dataList: [],
|
||||
page: 1,
|
||||
dataForm: {
|
||||
id: null,
|
||||
orderCate: null,
|
||||
orderCode: null,
|
||||
qty: null,
|
||||
goodqty: null,
|
||||
badqty: null,
|
||||
badratio: null,
|
||||
team: null,
|
||||
},
|
||||
formLoading: false,
|
||||
dataFormList: [],
|
||||
tableProps: [
|
||||
{ prop: "orderCode", label: "订单号" },
|
||||
{ prop: "orderCate", label: "订单子号" },
|
||||
{ width: 90, prop: "qty", label: "生产量" },
|
||||
{ width: 90, prop: "goodqty", label: "合格数量" },
|
||||
{ width: 90, prop: "badqty", label: "报废数量" },
|
||||
{ width: 90, prop: "badratio", label: "报废率", filter: (val) => (val ?? "-") + "%" },
|
||||
{
|
||||
width: 64,
|
||||
prop: "team",
|
||||
label: "班次",
|
||||
filter: (val) => (val != null ? ["早班", "中班", "晚班"][val] : "-"),
|
||||
},
|
||||
{
|
||||
prop: "operations",
|
||||
name: "操作",
|
||||
fixed: "right",
|
||||
width: 90,
|
||||
subcomponent: TableOperaionComponent,
|
||||
options: [
|
||||
{ name: "edit", label: "编辑", icon: "edit-outline", emitFull: true },
|
||||
// {
|
||||
// name: "delete",
|
||||
// icon: "delete",
|
||||
// label: "删除",
|
||||
// emitFull: true,
|
||||
// permission: "pms:carOrderReport:delete",
|
||||
// },
|
||||
],
|
||||
},
|
||||
],
|
||||
currentEditing: null,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
size() {
|
||||
return this.dataList.length;
|
||||
},
|
||||
},
|
||||
inject: ['urls'],
|
||||
watch: {
|
||||
"dataForm.goodqty"(val) {
|
||||
const qty = +val + +this.dataForm.badqty;
|
||||
this.dataForm.qty = qty;
|
||||
this.dataForm.badratio = ((+this.dataForm.badqty / qty) * 100).toFixed(2);
|
||||
},
|
||||
"dataForm.badqty"(val) {
|
||||
const qty = +val + +this.dataForm.goodqty;
|
||||
this.dataForm.qty = qty;
|
||||
this.dataForm.badratio = ((+val / qty) * 100).toFixed(2);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
async init() {
|
||||
this.visible = true;
|
||||
this.loading = true;
|
||||
// const { data: res } = await this.$http.post("/pms/workReport/pressReportPre", {
|
||||
const { data: res } = await this.$http.post(this.urls.reportPre, {
|
||||
datas: [],
|
||||
ids: this.ids,
|
||||
});
|
||||
if (res.code === 0) {
|
||||
this.dataList = res.data.map((item, index) => ({
|
||||
...item,
|
||||
qty: item.goodqty + item.badqty,
|
||||
// 该 __LOCAL_INDEX 用于更新本地缓存数据
|
||||
__LOCAL_INDEX: index,
|
||||
}));
|
||||
}
|
||||
this.loading = false;
|
||||
},
|
||||
|
||||
close() {
|
||||
this.visible = false;
|
||||
},
|
||||
|
||||
handleOperate({ type, data }) {
|
||||
//console.log("payload", type, data);
|
||||
switch (type) {
|
||||
case "edit":
|
||||
this.mode = "form";
|
||||
this.currentEditing = data.__LOCAL_INDEX;
|
||||
const { id, orderCate, orderCode, qty, goodqty, badqty, badratio, team } = data;
|
||||
this.dataForm = {
|
||||
id,
|
||||
orderCate,
|
||||
orderCode,
|
||||
qty,
|
||||
goodqty,
|
||||
badqty,
|
||||
badratio,
|
||||
team,
|
||||
};
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
async handleConfirm() {
|
||||
this.loading = true;
|
||||
const { data: res } = await this.$http.post(this.urls.report, {
|
||||
datas: this.dataList,
|
||||
ids: this.ids,
|
||||
});
|
||||
this.loading = false;
|
||||
if (res.code === 0) {
|
||||
this.$message.success("提交成功");
|
||||
this.$emit("refresh-list");
|
||||
this.close();
|
||||
}
|
||||
},
|
||||
|
||||
// 本地缓存编辑过的数据,保存时一并提交给服务器
|
||||
handleSaveEdit() {
|
||||
Object.keys(this.dataForm).forEach((key) => {
|
||||
this.dataList[this.currentEditing][key] = this.dataForm[key];
|
||||
});
|
||||
this.mode = "table";
|
||||
this.$nextTick(() => {
|
||||
this.clearDataForm();
|
||||
});
|
||||
},
|
||||
|
||||
// 清空输入数据
|
||||
clearDataForm() {
|
||||
this.currentEditing = null;
|
||||
this.dataForm = {
|
||||
id: null,
|
||||
orderCate: null,
|
||||
orderCode: null,
|
||||
qty: null,
|
||||
goodqty: null,
|
||||
badqty: null,
|
||||
badratio: null,
|
||||
team: null,
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.dialog-just-form >>> .dialog-title {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.dialog-just-form >>> .el-dialog__body {
|
||||
/* padding-top: 16px !important;
|
||||
padding-bottom: 16px !important; */
|
||||
padding-top: 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.el-select,
|
||||
.el-cascader,
|
||||
.el-date-editor {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.dialog-just-form >>> .el-dialog__header {
|
||||
padding: 10px 20px 10px;
|
||||
/* background: linear-gradient(to bottom, rgba(0, 0, 0, 0.25), white); */
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
.pms-dialog {
|
||||
box-shadow: 0 0 24px 8px rgba(0, 0, 0, 0.125);
|
||||
border-radius: 4px;
|
||||
transition: transform 1.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
|
||||
.pms-dialog .el-dialog__header {
|
||||
padding: 16px;
|
||||
border-bottom: 1px solid #eaeaea;
|
||||
}
|
||||
|
||||
.pms-dialog .el-dialog__header .dialog-title {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.pms-dialog .el-dialog__body {
|
||||
padding: 0;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.pms-dialog .el-dialog__footer {
|
||||
background: #fafafa;
|
||||
min-height: 3.2rem;
|
||||
padding: 0;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
text-align: unset;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding: 8px 16px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.v-enter,
|
||||
.v-leave-to {
|
||||
opacity: 0;
|
||||
/* transform: translateX(20px); */
|
||||
transform: scale(0);
|
||||
}
|
||||
|
||||
.v-enter-active,
|
||||
.v-leave-active {
|
||||
transition: all 0.3s;
|
||||
}
|
||||
|
||||
.v-enter-to,
|
||||
.v-leave {
|
||||
/* transform: translateX(0); */
|
||||
transform: scale(1);
|
||||
}
|
||||
</style>
|
@ -36,7 +36,9 @@
|
||||
:label="opt.label"
|
||||
:value="opt.value">
|
||||
<span>{{ opt.label }}</span>
|
||||
<span v-if="col.customLabel" style="display: inline-clock; margin-left: 12px; font-size: 0.9em">
|
||||
<span
|
||||
v-if="col.customLabel"
|
||||
style="display: inline-clock; margin-left: 12px; font-size: 0.9em">
|
||||
{{ opt[col.customLabel] || "-" }}
|
||||
</span>
|
||||
</el-option>
|
||||
@ -96,6 +98,10 @@ export default {
|
||||
type: String,
|
||||
default: "",
|
||||
},
|
||||
code: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
inject: ["urls"],
|
||||
data() {
|
||||
@ -103,7 +109,7 @@ export default {
|
||||
this.configs.rows.forEach((row) => {
|
||||
row.forEach((col) => {
|
||||
dataForm[col.prop] = col.default ?? "";
|
||||
console.log("[small dialog]==========>", col.prop, dataForm[col.prop]);
|
||||
//console.log("[small dialog]==========>", col.prop, dataForm[col.prop]);
|
||||
|
||||
if (typeof col.fetchData === "function")
|
||||
col.fetchData().then(({ data: res }) => {
|
||||
@ -112,20 +118,23 @@ export default {
|
||||
col,
|
||||
"options",
|
||||
!col.customLabel
|
||||
? res.data.list.map((item) => ({ label: item[col.optionLabel ?? "name"], value: item.id }))
|
||||
? res.data.list.map((item) => ({
|
||||
label: item[col.optionLabel ?? "name"],
|
||||
value: item.id,
|
||||
}))
|
||||
: res.data.list.map((item) => ({
|
||||
label: item[col.optionLabel ?? "name"],
|
||||
value: item.id,
|
||||
[col.customLabel]: item[col.customLabel],
|
||||
}))
|
||||
);
|
||||
console.log(
|
||||
res.data.list.map((item) => ({
|
||||
label: item.name,
|
||||
value: item.id,
|
||||
[col.customLabel]: item[col.customLabel],
|
||||
}))
|
||||
);
|
||||
//console.log(
|
||||
// res.data.list.map((item) => ({
|
||||
// label: item.name,
|
||||
// value: item.id,
|
||||
// [col.customLabel]: item[col.customLabel],
|
||||
// }))
|
||||
// );
|
||||
} else {
|
||||
this.$set(col, "options", []);
|
||||
}
|
||||
@ -156,7 +165,7 @@ export default {
|
||||
resetForm(excludeId = false) {
|
||||
setTimeout(() => {
|
||||
Object.keys(this.dataForm).forEach((key) => {
|
||||
// console.log(">>> clearing key: ", key);
|
||||
// //console.log(">>> clearing key: ", key);
|
||||
if (excludeId && key === "id") return;
|
||||
this.dataForm[key] = null;
|
||||
});
|
||||
@ -165,7 +174,7 @@ export default {
|
||||
},
|
||||
|
||||
init(id, isdetail = false) {
|
||||
// console.log("[small dialog] init", id, isdetail);
|
||||
// //console.log("[small dialog] init", id, isdetail);
|
||||
this.visible = true;
|
||||
|
||||
this.detailMode = isdetail;
|
||||
@ -201,8 +210,8 @@ export default {
|
||||
handleSwitchChange() {},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
console.log("btn click payload: ", payload);
|
||||
console.log("configs", this.configs);
|
||||
//console.log("btn click payload: ", payload);
|
||||
//console.log("configs", this.configs);
|
||||
if ("name" in payload) {
|
||||
switch (payload.name) {
|
||||
case "cancel":
|
||||
@ -213,23 +222,31 @@ export default {
|
||||
this.$refs.dataForm.validate((passed, result) => {
|
||||
if (passed) {
|
||||
this.btnLoading = true;
|
||||
console.log("update extraParam: ", this.configs.extraParam);
|
||||
//console.log("update extraParam: ", this.configs.extraParam);
|
||||
const method = payload.name === "add" ? "POST" : "PUT";
|
||||
|
||||
const fields = {};
|
||||
fields[this.configs.extraParam] = this.relatedId;
|
||||
// [this.configs.extraParam]: this.relatedId, // this.configs.extraParam 只能是字符串
|
||||
if (this.configs.forceAttachCode) fields["code"] = "";
|
||||
let body = {
|
||||
...this.dataForm,
|
||||
...fields,
|
||||
};
|
||||
|
||||
if (payload.name == "update") {
|
||||
if (this.code != null) {
|
||||
body.code = this.code;
|
||||
}
|
||||
}
|
||||
|
||||
console.log("body", body);
|
||||
this.$http({
|
||||
url: this.urls.subase,
|
||||
method,
|
||||
data: {
|
||||
...this.dataForm,
|
||||
...fields,
|
||||
},
|
||||
data: body,
|
||||
}).then(({ data: res }) => {
|
||||
console.log("[add&update] res is: ", res);
|
||||
//console.log("[add&update] res is: ", res);
|
||||
this.btnLoading = false;
|
||||
if (res.code === 0) {
|
||||
this.$message.success(payload.name === "add" ? "添加成功" : "更新成功");
|
||||
@ -242,7 +259,7 @@ export default {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log("[x] 不是这么用的! 缺少name属性");
|
||||
//console.log("[x] 不是这么用的! 缺少name属性");
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -17,7 +17,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
emitClick() {
|
||||
// console.log('inject data:' ,this.injectData)
|
||||
// //console.log('inject data:' ,this.injectData)
|
||||
this.$emit('emit-data', {
|
||||
type: this.injectData.head?.actionName || 'view-detail-action',
|
||||
data: this.injectData.head?.emitFullData ? this.injectData : this.injectData.id
|
||||
@ -25,7 +25,7 @@ export default {
|
||||
}
|
||||
},
|
||||
render: function (h) {
|
||||
// console.log('button content:', this.injectData)
|
||||
// //console.log('button content:', this.injectData)
|
||||
return h('span', null, [h('el-button', { props: { type: 'text' }, style: { padding: 0, margin: '5px 0' }, on: { click: this.emitClick } }, this.injectData.head?.buttonContent || this.defaultText)])
|
||||
}
|
||||
}
|
@ -53,7 +53,7 @@ export default {
|
||||
};
|
||||
},
|
||||
// mounted() {
|
||||
// console.log('inject data', this.injectData)
|
||||
// //console.log('inject data', this.injectData)
|
||||
// },
|
||||
methods: {
|
||||
// 发射事件
|
||||
@ -94,7 +94,7 @@ export default {
|
||||
if ("enable" in opt && typeof opt.enable === "function") {
|
||||
shouldDisabled = !opt.enable(this.injectData);
|
||||
}
|
||||
// console.log('should disabled', shouldDisabled)
|
||||
// //console.log('should disabled', shouldDisabled)
|
||||
btns.push(
|
||||
h(
|
||||
"el-button",
|
||||
|
@ -26,7 +26,7 @@ export default {
|
||||
},
|
||||
// modelValue(val) {
|
||||
// // 这样不行,会导致编辑时富文本内容是反过来的...
|
||||
// console.log('[modelValue] val is: ', val)
|
||||
// //console.log('[modelValue] val is: ', val)
|
||||
// this.editor && this.editor.setContents(JSON.parse(val), "user")
|
||||
// }
|
||||
modelValue(val) {
|
||||
|
@ -16,7 +16,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
emitClick() {
|
||||
// console.log('inject data:' ,this.injectData)
|
||||
// //console.log('inject data:' ,this.injectData)
|
||||
this.$emit('emit-data', {
|
||||
type: this.injectData.head?.actionName || 'select-change-action',
|
||||
data: this.injectData.head?.emitFullData ? this.injectData : this.injectData.id
|
||||
@ -24,7 +24,7 @@ export default {
|
||||
}
|
||||
},
|
||||
render: function (h) {
|
||||
// console.log('button content:', this.injectData)
|
||||
// //console.log('button content:', this.injectData)
|
||||
return h('span', null, [h('el-button', { props: { type: 'text' }, style: { paddingLeft: 0 }, on: { click: this.emitClick } }, this.injectData.head?.buttonContent || this.defaultText)])
|
||||
}
|
||||
}
|
@ -49,7 +49,7 @@ export default {
|
||||
}
|
||||
},
|
||||
mounted() {
|
||||
// console.log("[component] StatusComponent: ", this.injectData);
|
||||
// //console.log("[component] StatusComponent: ", this.injectData);
|
||||
},
|
||||
methods: {
|
||||
// 发射事件
|
||||
|
@ -19,7 +19,7 @@ export default {
|
||||
};
|
||||
},
|
||||
mounted() {
|
||||
// console.log("[SwitchBtn] injectData: ", this.injectData);
|
||||
// //console.log("[SwitchBtn] injectData: ", this.injectData);
|
||||
},
|
||||
computed: {
|
||||
status: {
|
||||
|
193
src/components/palletDialog.vue
Normal file
193
src/components/palletDialog.vue
Normal file
@ -0,0 +1,193 @@
|
||||
<!--
|
||||
filename: palletDialog.vue
|
||||
author: liubin
|
||||
date: 2023-08-22 09:15:49
|
||||
description: 生成托盘弹窗
|
||||
-->
|
||||
|
||||
<template>
|
||||
<el-dialog
|
||||
:visible.sync="visible"
|
||||
width="500px"
|
||||
v-bind="$attrs"
|
||||
@close="close"
|
||||
@closed="$emit('destroy')"
|
||||
custom-class="pms-dialog">
|
||||
<!-- :class="{ 'pms-dialog--rotate-down': startLeave }"> -->
|
||||
<span slot="title" class="dialog-title">生成托盘</span>
|
||||
|
||||
<el-form ref="dataForm" :model="dataForm" size="small" style="padding: 16px" v-loading="formLoading">
|
||||
<el-row :gutter="20">
|
||||
<el-col>
|
||||
<el-form-item label="订单号" prop="orderId" :rules="null">
|
||||
<el-select v-model="dataForm.orderId" filterable clearable placeholder="请选择订单号">
|
||||
<el-option v-for="o in orderList" :key="o.id" :label="o.code" :value="o.id">
|
||||
<div class="option-label">
|
||||
<span>{{ o.code }}</span>
|
||||
<span>{{ o.cate }}</span>
|
||||
</div>
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row v-if="ids.length > 0" :gutter="20">
|
||||
<el-col>
|
||||
<el-form-item label="尾托" prop="ids" :rules="null">
|
||||
<el-input disabled v-model="ids[0].orderCode" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-form>
|
||||
|
||||
<div slot="footer" class="dialog-footer">
|
||||
<el-button size="small" @click="close">取消</el-button>
|
||||
<el-button size="small" type="primary" @click="handleConfirm">生成</el-button>
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "PalletDialog",
|
||||
components: {},
|
||||
props: ["ids"],
|
||||
data() {
|
||||
return {
|
||||
visible: false,
|
||||
loading: false,
|
||||
orderList: [],
|
||||
dataForm: {
|
||||
orderId: null,
|
||||
ids: [],
|
||||
},
|
||||
formLoading: false,
|
||||
};
|
||||
},
|
||||
methods: {
|
||||
async init() {
|
||||
this.visible = true;
|
||||
this.loading = true;
|
||||
// 获取生产订单列表
|
||||
const { data: res } = await this.$http.post("/pms/order/listWithStock");
|
||||
if (res.code === 0) {
|
||||
this.orderList = res.data.map((item, index) => ({
|
||||
code: item.code, // 订单号
|
||||
cate: item.cate, // 订单子号
|
||||
id: item.id, // 订单 id
|
||||
}));
|
||||
} else this.$message.error(res.msg);
|
||||
this.loading = false;
|
||||
},
|
||||
|
||||
close() {
|
||||
this.visible = false;
|
||||
},
|
||||
|
||||
async handleConfirm() {
|
||||
this.loading = true;
|
||||
try {
|
||||
const { data: res } = await this.$http.post("/pms/pallet/newPallet", {
|
||||
...this.dataForm,
|
||||
ids: this.ids.map((item) => item.id),
|
||||
});
|
||||
if (res.code === 0) {
|
||||
this.$message.success("提交成功");
|
||||
this.$emit("refresh-list");
|
||||
this.close();
|
||||
this.loading = false;
|
||||
} else throw new Error(res.msg);
|
||||
} catch (err) {
|
||||
this.$message.error('message' in err ? err.message : err);
|
||||
this.loading = false;
|
||||
}
|
||||
},
|
||||
|
||||
// 清空输入数据
|
||||
clearDataForm() {
|
||||
this.dataForm = {
|
||||
orderId: null,
|
||||
ids: [],
|
||||
};
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.dialog-just-form >>> .dialog-title {
|
||||
color: #000;
|
||||
}
|
||||
|
||||
.dialog-just-form >>> .el-dialog__body {
|
||||
/* padding-top: 16px !important;
|
||||
padding-bottom: 16px !important; */
|
||||
padding-top: 0 !important;
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.el-select,
|
||||
.el-cascader,
|
||||
.el-date-editor {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
.dialog-just-form >>> .el-dialog__header {
|
||||
padding: 10px 20px 10px;
|
||||
/* background: linear-gradient(to bottom, rgba(0, 0, 0, 0.25), white); */
|
||||
}
|
||||
</style>
|
||||
|
||||
<style>
|
||||
.pms-dialog {
|
||||
box-shadow: 0 0 24px 8px rgba(0, 0, 0, 0.125);
|
||||
border-radius: 4px;
|
||||
transition: transform 1.3s cubic-bezier(0.645, 0.045, 0.355, 1);
|
||||
}
|
||||
|
||||
.pms-dialog .el-dialog__header {
|
||||
padding: 16px;
|
||||
border-bottom: 1px solid #eaeaea;
|
||||
}
|
||||
|
||||
.pms-dialog .el-dialog__header .dialog-title {
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
|
||||
.pms-dialog .el-dialog__body {
|
||||
padding: 0;
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
.pms-dialog .el-dialog__footer {
|
||||
background: #fafafa;
|
||||
min-height: 3.2rem;
|
||||
padding: 0;
|
||||
border-bottom-left-radius: 4px;
|
||||
border-bottom-right-radius: 4px;
|
||||
text-align: unset;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
padding: 8px 16px;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.option-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.option-label > span {
|
||||
text-overflow: ellipsis;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.option-label > span:first-child {
|
||||
width: 128px;
|
||||
margin-right: 8px;
|
||||
}
|
||||
|
||||
/* .option-label > span:last-child {
|
||||
} */
|
||||
</style>
|
@ -59,7 +59,7 @@ export default {
|
||||
watch: {
|
||||
fileList(val) {
|
||||
if (val) {
|
||||
console.log("[FileList] fileList prop:", val);
|
||||
//console.log("[FileList] fileList prop:", val);
|
||||
}
|
||||
},
|
||||
},
|
||||
@ -82,7 +82,7 @@ export default {
|
||||
responseType: "blob",
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("preivew", res);
|
||||
//console.log("preivew", res);
|
||||
if (/image/i.test(res.type) || /pdf/i.test(res.type)) {
|
||||
let a = document.createElement('a')
|
||||
a.setAttribute('target', '_blank')
|
||||
@ -100,7 +100,7 @@ export default {
|
||||
|
||||
},
|
||||
handleDownload(file) {
|
||||
console.log("[FileList] handleDownload", file);
|
||||
//console.log("[FileList] handleDownload", file);
|
||||
this.$http
|
||||
.get("/pms/attachment/downloadFile", {
|
||||
params: {
|
||||
@ -136,12 +136,12 @@ export default {
|
||||
});
|
||||
},
|
||||
handleDelete(file) {
|
||||
console.log("[FileList] handleDelete", file);
|
||||
//console.log("[FileList] handleDelete", file);
|
||||
// TODO: 警示删除操作
|
||||
this.$emit("delete-a-file", file.id);
|
||||
},
|
||||
handleSearchClick() {
|
||||
console.log("[FileList] handleSearchClick()");
|
||||
//console.log("[FileList] handleSearchClick()");
|
||||
this.showSearchInput = true;
|
||||
},
|
||||
},
|
||||
|
@ -77,12 +77,12 @@ export default {
|
||||
},
|
||||
},
|
||||
mounted() {
|
||||
console.log("[UploadBtn] mounted()", this.fileList, this.uploadedFileList);
|
||||
//console.log("[UploadBtn] mounted()", this.fileList, this.uploadedFileList);
|
||||
this.uploadedFileList = this.fileList ?? [];
|
||||
},
|
||||
methods: {
|
||||
handleRemoveFile(fileId) {
|
||||
console.log("[UploadBtn] handleRemoveFile", fileId);
|
||||
//console.log("[UploadBtn] handleRemoveFile", fileId);
|
||||
this.$confirm("确定删除此文件?", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
@ -112,7 +112,7 @@ export default {
|
||||
},
|
||||
|
||||
handleUploadSuccess(response, file, fileList) {
|
||||
console.log("[UploadBtn] uploadedFileList", response, file, fileList, this.uploadedFileList);
|
||||
//console.log("[UploadBtn] uploadedFileList", response, file, fileList, this.uploadedFileList);
|
||||
|
||||
if (response.code === 0) {
|
||||
const uploadedFile = response.data[0];
|
||||
|
@ -23,7 +23,8 @@ import { hasPermission, getDictLabel } from '@/utils'
|
||||
import cloneDeep from 'lodash/cloneDeep'
|
||||
// main.js
|
||||
import myComponents from 'code-brick-zj'
|
||||
|
||||
// 表单验证
|
||||
import { formValidateRules } from '@/utils/validate'
|
||||
|
||||
// import mocks from './mocks'
|
||||
|
||||
@ -44,6 +45,7 @@ Vue.use(myComponents)
|
||||
Vue.prototype.$http = http
|
||||
Vue.prototype.$hasPermission = hasPermission
|
||||
Vue.prototype.$getDictLabel = getDictLabel
|
||||
Vue.prototype.$fv = formValidateRules
|
||||
|
||||
// 保存整站vuex本地储存初始状态
|
||||
window.SITE_CONFIG['storeState'] = cloneDeep(store.state)
|
||||
|
@ -70,14 +70,14 @@ export default {
|
||||
},
|
||||
// 表单提交
|
||||
dataFormSubmit() {
|
||||
console.log('in minxin basic-page dataformsubmit')
|
||||
//console.log('in minxin basic-page dataformsubmit')
|
||||
this.$refs["dataForm"].validate((valid) => {
|
||||
if (!valid) {
|
||||
return false;
|
||||
}
|
||||
this.$http[!this.dataForm.id ? "post" : "put"](this.urlOptions.submitURL, this.dataForm)
|
||||
.then(({ data: res }) => {
|
||||
// console.log('[confirm] here...')
|
||||
// //console.log('[confirm] here...')
|
||||
if (res.code !== 0) {
|
||||
return this.$message.error(res.msg);
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ export default {
|
||||
this.$refs.addOrUpdate.init(val.data.id);
|
||||
});
|
||||
} else if (val.type === "delete") {
|
||||
console.log('va', val)
|
||||
//console.log('va', val)
|
||||
this.deleteHandle(val.data.id, val.data.name)
|
||||
}
|
||||
},
|
||||
@ -151,7 +151,7 @@ export default {
|
||||
this.addOrUpdateHandle()
|
||||
break;
|
||||
default:
|
||||
console.log(val)
|
||||
//console.log(val)
|
||||
}
|
||||
},
|
||||
handleCancel() {
|
||||
@ -165,7 +165,7 @@ export default {
|
||||
refreshLocalstorage() {
|
||||
// 刷新数据字典数据
|
||||
this.$http("/sys/dict/type/all", { limit: 999, page: 1 }).then(({ data: res }) => {
|
||||
// console.log("[dictData] loading...", res);
|
||||
// //console.log("[dictData] loading...", res);
|
||||
if (res.code === 0 && res.data) {
|
||||
let dictList = {}
|
||||
res.data.map(item => {
|
||||
|
@ -9,7 +9,7 @@ function m(url, type, fn) {
|
||||
|
||||
m(carManagement.url, carManagement.type, opt => {
|
||||
let { limit, page } = JSON.parse(opt.body)
|
||||
// console.log('limit, page', limit, page, opt.body)
|
||||
// //console.log('limit, page', limit, page, opt.body)
|
||||
// limit = 5
|
||||
return {
|
||||
code: 0,
|
||||
|
77
src/utils/Lodop.js
Normal file
77
src/utils/Lodop.js
Normal file
@ -0,0 +1,77 @@
|
||||
//用双端口加载主JS文件Lodop.js(或CLodopfuncs.js兼容老版本)以防其中某端口被占:
|
||||
var MainJS = "CLodopfuncs.js",
|
||||
URL_WS1 = "ws://localhost:8000/" + MainJS, //ws用8000/18000
|
||||
URL_WS2 = "ws://localhost:18000/" + MainJS,
|
||||
URL_HTTP1 = "http://localhost:8000/" + MainJS, //http用8000/18000
|
||||
URL_HTTP2 = "http://localhost:18000/" + MainJS,
|
||||
URL_HTTP3 = "https://localhost.lodop.net:8443/" + MainJS; //https用8000/8443
|
||||
|
||||
//==检查加载成功与否,如没成功则用http(s)再试==
|
||||
//==低版本CLODOP6.561/Lodop7.043及前)用本方法==
|
||||
function checkOrTryHttp() {
|
||||
if (window.getCLodop) return true;
|
||||
var head = document.head || document.getElementsByTagName("head")[0] || document.documentElement;
|
||||
var JS1 = document.createElement("script"),
|
||||
JS2 = document.createElement("script"),
|
||||
JS3 = document.createElement("script");
|
||||
JS1.src = URL_HTTP1;
|
||||
JS2.src = URL_HTTP2;
|
||||
JS3.src = URL_HTTP3;
|
||||
JS1.onerror = function (e) {
|
||||
if (window.location.protocol !== "https:") head.insertBefore(JS2, head.firstChild);
|
||||
else head.insertBefore(JS3, head.firstChild);
|
||||
};
|
||||
JS2.onerror = JS3.onerror = function () {
|
||||
var JSelf = document.createElement("script");
|
||||
JSelf.src = "/" + MainJS; //JSelf让其它电脑通过本机打印(仅适用CLodop自带例子)
|
||||
document.head.insertBefore(JSelf, document.head.firstChild);
|
||||
};
|
||||
head.insertBefore(JS1, head.firstChild);
|
||||
}
|
||||
|
||||
//==加载Lodop对象的主过程:==
|
||||
(function loadCLodop() {
|
||||
if (!window.WebSocket && window.MozWebSocket) window.WebSocket = window.MozWebSocket;
|
||||
//ws方式速度快(小于200ms)且可避免CORS错误,但要求Lodop版本足够新:
|
||||
try {
|
||||
var WSK1 = new WebSocket(URL_WS1);
|
||||
WSK1.onopen = function (e) {
|
||||
setTimeout(checkOrTryHttp, 200);
|
||||
};
|
||||
WSK1.onmessage = function (e) {
|
||||
if (!window.getCLodop) eval(e.data);
|
||||
};
|
||||
WSK1.onerror = function (e) {
|
||||
var WSK2 = new WebSocket(URL_WS2);
|
||||
WSK2.onopen = function (e) {
|
||||
setTimeout(checkOrTryHttp, 200);
|
||||
};
|
||||
WSK2.onmessage = function (e) {
|
||||
if (!window.getCLodop) eval(e.data);
|
||||
};
|
||||
WSK2.onerror = function (e) {
|
||||
checkOrTryHttp();
|
||||
};
|
||||
};
|
||||
} catch (e) {
|
||||
checkOrTryHttp();
|
||||
}
|
||||
})();
|
||||
|
||||
//==获取LODOP对象的主过程:==
|
||||
export function getLodop(oOBJECT, oEMBED) {
|
||||
var LODOP;
|
||||
try {
|
||||
LODOP = window.getCLodop();
|
||||
if (!LODOP && document.readyState !== "complete") {
|
||||
alert("C-Lodop没准备好,请稍后再试!");
|
||||
return;
|
||||
}
|
||||
//清理原例子内的object或embed元素,避免乱提示:
|
||||
if (oEMBED && oEMBED.parentNode) oEMBED.parentNode.removeChild(oEMBED);
|
||||
if (oOBJECT && oOBJECT.parentNode) oOBJECT.parentNode.removeChild(oOBJECT);
|
||||
return LODOP;
|
||||
} catch (err) {
|
||||
alert("getLodop出错:" + err);
|
||||
}
|
||||
}
|
@ -17,7 +17,7 @@ const http = axios.create({
|
||||
http.interceptors.request.use(config => {
|
||||
config.headers['Accept-Language'] = Cookies.get('language') || 'zh-CN'
|
||||
config.headers['token'] = 'token' in config.headers ? config.headers.token : (Cookies.get('token') || '')
|
||||
// console.log('[request interceptor] token is:', config.headers['token'])
|
||||
// //console.log('[request interceptor] token is:', config.headers['token'])
|
||||
// 默认参数
|
||||
var defaults = {}
|
||||
// 防止缓存,GET请求默认带_t参数
|
||||
|
@ -2,30 +2,47 @@
|
||||
* 邮箱
|
||||
* @param {*} s
|
||||
*/
|
||||
export function isEmail (s) {
|
||||
return /^([a-zA-Z0-9._-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s)
|
||||
export function isEmail(s) {
|
||||
return /^([a-zA-Z0-9._-])+@([a-zA-Z0-9_-])+((.[a-zA-Z0-9_-]{2,3}){1,2})$/.test(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机号码
|
||||
* @param {*} s
|
||||
*/
|
||||
export function isMobile (s) {
|
||||
return /^1[0-9]{10}$/.test(s)
|
||||
export function isMobile(s) {
|
||||
return /^1[0-9]{10}$/.test(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* 电话号码
|
||||
* @param {*} s
|
||||
*/
|
||||
export function isPhone (s) {
|
||||
return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s)
|
||||
export function isPhone(s) {
|
||||
return /^([0-9]{3,4}-)?[0-9]{7,8}$/.test(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* URL地址
|
||||
* @param {*} s
|
||||
*/
|
||||
export function isURL (s) {
|
||||
return /^http[s]?:\/\/.*/.test(s)
|
||||
export function isURL(s) {
|
||||
return /^http[s]?:\/\/.*/.test(s);
|
||||
}
|
||||
|
||||
/**
|
||||
* 表单验证
|
||||
*/
|
||||
export const formValidateRules = {
|
||||
isRequired: {
|
||||
required: true,
|
||||
message: "必填项",
|
||||
trigger: "blur",
|
||||
},
|
||||
isNumber: {
|
||||
type: "number",
|
||||
message: "请输入正确的数字类型",
|
||||
trigger: "blur",
|
||||
transform: (val) => Number(val),
|
||||
},
|
||||
};
|
||||
|
@ -115,7 +115,7 @@ export default {
|
||||
},
|
||||
},
|
||||
activated() {
|
||||
console.log("list view with ehad activated..........");
|
||||
//console.log("list view with ehad activated..........");
|
||||
this.refreshLayoutKey = this.layoutTable();
|
||||
},
|
||||
watch: {
|
||||
@ -182,7 +182,7 @@ export default {
|
||||
}
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
// page 场景:
|
||||
@ -232,7 +232,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -289,7 +289,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "status": {
|
||||
console.log("status", data);
|
||||
//console.log("status", data);
|
||||
// TODO: 类似于这种字符串,可以统一集中到一个文件里
|
||||
const { id, code } = data;
|
||||
const queryCondition = { id, code };
|
||||
@ -318,7 +318,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "to-bom-detail": {
|
||||
// console.log('to-bom-detail', data.name)
|
||||
// //console.log('to-bom-detail', data.name)
|
||||
// 查看配方详情
|
||||
return this.$router.push({
|
||||
name: "pms-bomDetails",
|
||||
@ -386,7 +386,7 @@ export default {
|
||||
});
|
||||
}
|
||||
case "preview": {
|
||||
console.log("[PREVIEW] data", data);
|
||||
//console.log("[PREVIEW] data", data);
|
||||
// report preview
|
||||
return this.$router.push({
|
||||
name: "pms-reportPreview",
|
||||
@ -396,7 +396,7 @@ export default {
|
||||
});
|
||||
}
|
||||
case "design": {
|
||||
console.log("[DESIGN] data", data);
|
||||
//console.log("[DESIGN] data", data);
|
||||
// report design
|
||||
return this.$router.push({
|
||||
name: "pms-reportDesign",
|
||||
@ -431,7 +431,7 @@ export default {
|
||||
case "sync": {
|
||||
let shouldShowOverlay = false;
|
||||
let payload = "";
|
||||
console.log("sync...", type, data);
|
||||
//console.log("sync...", type, data);
|
||||
if (typeof data === "object") {
|
||||
const head = data.head;
|
||||
const syncOpt =
|
||||
@ -469,7 +469,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "新增":
|
||||
this.openDialog();
|
||||
@ -503,7 +503,7 @@ export default {
|
||||
});
|
||||
}
|
||||
});
|
||||
console.log("查询", params);
|
||||
//console.log("查询", params);
|
||||
this.getList(params);
|
||||
break;
|
||||
}
|
||||
@ -541,7 +541,7 @@ export default {
|
||||
});
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
//console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
this.$refs["edit-dialog"].init(/** some args... */ row_id, detail_mode, tag_info, extraParams);
|
||||
});
|
||||
},
|
||||
|
@ -13,6 +13,7 @@
|
||||
:current-page="page"
|
||||
:current-size="size"
|
||||
@select="handleTableSelect"
|
||||
:select-props="tableConfig.selectProps ?? []"
|
||||
:refresh-layout-key="refreshLayoutKey" />
|
||||
|
||||
<el-pagination
|
||||
@ -61,6 +62,22 @@
|
||||
}
|
||||
" />
|
||||
<Overlay v-if="overlayVisible" />
|
||||
|
||||
<PrintDom ref="print" v-if="printDOMmount" @destroy="printDOMmount = false" @refresh-list="getList" />
|
||||
|
||||
<ReportDialog
|
||||
ref="car-report-dialog"
|
||||
v-if="carReportDialogVisible"
|
||||
@destroy="carReportDialogVisible = false"
|
||||
@refresh-list="getList"
|
||||
:ids="tableSelectedIds" />
|
||||
|
||||
<PalletDialog
|
||||
ref="pallet-dialog"
|
||||
v-if="palletDialogVisible"
|
||||
@destroy="palletDialogVisible = false"
|
||||
@refresh-list="getList"
|
||||
:ids="tableSelectedIds" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@ -74,6 +91,9 @@ import DialogUpload from "@/components/DialogUpload.vue";
|
||||
import Overlay from "@/components/Overlay.vue";
|
||||
import moment from "moment";
|
||||
import AttachmentDialog from "@/components/attachmentDialog.vue";
|
||||
import PrintDom from "../../components/PrintDom.vue";
|
||||
import ReportDialog from "../../components/ReportDialog.vue";
|
||||
import PalletDialog from "../../components/palletDialog.vue";
|
||||
|
||||
const DIALOG_WITH_MENU = "DialogWithMenu";
|
||||
const DIALOG_JUST_FORM = "DialogJustForm";
|
||||
@ -90,6 +110,9 @@ export default {
|
||||
DialogUpload,
|
||||
Overlay,
|
||||
AttachmentDialog,
|
||||
PrintDom,
|
||||
ReportDialog,
|
||||
PalletDialog,
|
||||
},
|
||||
props: {
|
||||
navigator: {
|
||||
@ -142,16 +165,17 @@ export default {
|
||||
},
|
||||
watch: {
|
||||
page: (val) => {
|
||||
console.log("page changed:", val);
|
||||
//console.log("page changed:", val);
|
||||
},
|
||||
size: (val) => {
|
||||
console.log("size changed:", val);
|
||||
//console.log("size changed:", val);
|
||||
},
|
||||
triggerUpdate(val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
// get list
|
||||
this.page = 1;
|
||||
this.size = "defaultPageSize" in this.tableConfig.column ? this.tableConfig.column.defaultPageSize : 20;
|
||||
this.size =
|
||||
"defaultPageSize" in this.tableConfig.column ? this.tableConfig.column.defaultPageSize : 20;
|
||||
this.getList();
|
||||
}
|
||||
},
|
||||
@ -175,14 +199,33 @@ export default {
|
||||
cachedSearchCondition: {},
|
||||
needAttachmentDialog: false,
|
||||
tableSelectedIds: [],
|
||||
printDOMmount: false,
|
||||
queryParams: {},
|
||||
carReportDialogVisible: false,
|
||||
palletDialogVisible: false,
|
||||
};
|
||||
},
|
||||
inject: ["urls"],
|
||||
mounted() {
|
||||
// 更新页面默认 size
|
||||
const size = "defaultPageSize" in this.tableConfig.column ? this.tableConfig.column.defaultPageSize : 20;
|
||||
const size =
|
||||
"defaultPageSize" in this.tableConfig.column ? this.tableConfig.column.defaultPageSize : 20;
|
||||
this.size = size;
|
||||
|
||||
// 如果设置了 listQueryExtra,就合并到 queryParams
|
||||
if (this.listQueryExtra && Array.isArray(this.listQueryExtra)) {
|
||||
this.listQueryExtra.map((item) => {
|
||||
if (typeof item === "string") this.$set(this.queryParams, item, "");
|
||||
else if (typeof item === "object") {
|
||||
Object.keys(item).forEach((key) => {
|
||||
this.$set(this.queryParams, key, item[key]);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//console.log("this.queryParams is: ", JSON.stringify(this.queryParams));
|
||||
|
||||
this.initDataWhenLoad && this.getList();
|
||||
},
|
||||
methods: {
|
||||
@ -196,43 +239,29 @@ export default {
|
||||
page: this.page,
|
||||
limit: this.size,
|
||||
};
|
||||
|
||||
if (!queryParams && this.listQueryExtra && this.listQueryExtra.length) {
|
||||
this.listQueryExtra.map((nameOrObj) => {
|
||||
if (typeof nameOrObj === "string") params[nameOrObj] = "";
|
||||
else if (typeof nameOrObj === "object") {
|
||||
Object.keys(nameOrObj).forEach((key) => {
|
||||
params[key] = nameOrObj[key];
|
||||
});
|
||||
}
|
||||
});
|
||||
this.cachedSearchCondition = Object.assign({}, params);
|
||||
}
|
||||
|
||||
// this.dataList = [{}];
|
||||
// this.tableLoading = false;
|
||||
// return;
|
||||
this.$http[this.urls.pageIsPostApi ? "post" : "get"](
|
||||
this.urls.page,
|
||||
this.urls.pageIsPostApi
|
||||
? {
|
||||
...this.queryParams,
|
||||
...params,
|
||||
}
|
||||
: {
|
||||
params,
|
||||
params: {
|
||||
...this.queryParams,
|
||||
...params,
|
||||
},
|
||||
}
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
// page 场景:
|
||||
if ("list" in res.data) {
|
||||
// if (res.data.list.length == 0 && res.data.total != 0) {
|
||||
// // refresh list
|
||||
// if (this.page > 1) {
|
||||
// this.page -= 1
|
||||
// this.getList()
|
||||
// return
|
||||
// } else return
|
||||
// }
|
||||
/** 破碎记录的特殊需求:数据要结合单位 material + materialUnitDictValue */
|
||||
if ("attachDictValue" in this.tableConfig.column) {
|
||||
this.dataList = res.data.list.map((row) => {
|
||||
@ -241,12 +270,6 @@ export default {
|
||||
});
|
||||
} else this.dataList = res.data.list;
|
||||
|
||||
this.totalPage = res.data.total;
|
||||
} else if ("records" in res.data) {
|
||||
this.dataList = res.data.records.map((item) => ({
|
||||
...item,
|
||||
id: item._id ?? item.id,
|
||||
}));
|
||||
this.totalPage = res.data.total;
|
||||
} else if (Array.isArray(res.data)) {
|
||||
this.dataList = res.data;
|
||||
@ -284,7 +307,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -340,7 +363,7 @@ export default {
|
||||
.catch((err) => {});
|
||||
}
|
||||
case "edit": {
|
||||
console.log("[edit] ", data);
|
||||
//console.log("[edit] ", data);
|
||||
this.openDialog(data); /** data is ==> id */
|
||||
break;
|
||||
}
|
||||
@ -372,7 +395,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "status": {
|
||||
console.log("status", data);
|
||||
//console.log("status", data);
|
||||
// TODO: 类似于这种字符串,可以统一集中到一个文件里
|
||||
const { id, code } = data;
|
||||
const queryCondition = { id, code };
|
||||
@ -397,7 +420,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "view-attachment-justform-version": {
|
||||
console.log(data);
|
||||
//console.log(data);
|
||||
break;
|
||||
}
|
||||
case "view-recipe": {
|
||||
@ -405,7 +428,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "to-bom-detail": {
|
||||
console.log("to-bom-detail", data);
|
||||
//console.log("to-bom-detail", data);
|
||||
// 查看配方详情
|
||||
return this.$router.push({
|
||||
name: "pms-bomDetails",
|
||||
@ -424,7 +447,7 @@ export default {
|
||||
.then(() => {
|
||||
//
|
||||
let payload = "";
|
||||
console.log("copying...", type, data);
|
||||
//console.log("copying...", type, data);
|
||||
if (typeof data === "object") {
|
||||
const head = data.head;
|
||||
const copyOpt =
|
||||
@ -494,7 +517,7 @@ export default {
|
||||
});
|
||||
}
|
||||
case "preview": {
|
||||
console.log("[PREVIEW] data", data);
|
||||
//console.log("[PREVIEW] data", data);
|
||||
// report preview
|
||||
return this.$router.push({
|
||||
name: "pms-reportPreview",
|
||||
@ -504,7 +527,7 @@ export default {
|
||||
});
|
||||
}
|
||||
case "design": {
|
||||
console.log("[DESIGN] data", data);
|
||||
//console.log("[DESIGN] data", data);
|
||||
// report design
|
||||
return this.$router.push({
|
||||
name: "pms-reportDesign",
|
||||
@ -521,7 +544,9 @@ export default {
|
||||
})
|
||||
.then(() => {
|
||||
this.$http
|
||||
.post(this.urls.detach, data /* { id: data } */, { headers: { "Content-Type": "application/json" } })
|
||||
.post(this.urls.detach, data /* { id: data } */, {
|
||||
headers: { "Content-Type": "application/json" },
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
@ -562,13 +587,20 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "sync": {
|
||||
return this.$confirm(`是否开始同步`, "提示", {
|
||||
confirmButtonText: "同步",
|
||||
cancelButtonText: "我再想想",
|
||||
type: "warning",
|
||||
}).then(() => {
|
||||
let shouldShowOverlay = false;
|
||||
let payload = "";
|
||||
console.log("sync...", type, data);
|
||||
// //console.log("sync...", type, data);
|
||||
if (typeof data === "object") {
|
||||
const head = data.head;
|
||||
const syncOpt =
|
||||
("options" in head && Array.isArray(head.options) && head.options.find((item) => item.name === "sync")) ||
|
||||
("options" in head &&
|
||||
Array.isArray(head.options) &&
|
||||
head.options.find((item) => item.name === "sync")) ||
|
||||
null;
|
||||
if (syncOpt && "showOverlay" in syncOpt && syncOpt.showOverlay) {
|
||||
this.overlayVisible = true;
|
||||
@ -597,11 +629,44 @@ export default {
|
||||
this.getList();
|
||||
if (shouldShowOverlay) this.overlayVisible = false;
|
||||
});
|
||||
});
|
||||
}
|
||||
case "print": {
|
||||
return this.$confirm("开始打印么", "提示", {
|
||||
confirmButtonText: "确认",
|
||||
cancelButtonText: "我再想想",
|
||||
type: "warning",
|
||||
})
|
||||
.then(this.printOnce.bind(null, data))
|
||||
.then(() => {
|
||||
// send successful request
|
||||
return this.$http({
|
||||
url: "/pms/pallet/print",
|
||||
method: "post",
|
||||
data: data,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
})
|
||||
.then(() => {
|
||||
this.$message.success("打印成功!");
|
||||
this.getList();
|
||||
})
|
||||
.catch(console.error);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
openCarPayloadDialog(id) {
|
||||
if (!id) {
|
||||
//console.log("[*] 传入car payload对话框的id是", id);
|
||||
return this.$message({
|
||||
message: `没有传 id!`,
|
||||
type: "error",
|
||||
duration: 1500,
|
||||
});
|
||||
}
|
||||
this.carPayloadDialogVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs["car-payload-dialog"].init(id);
|
||||
@ -609,7 +674,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "批量同步":
|
||||
this.overlayVisible = true;
|
||||
@ -625,43 +690,71 @@ export default {
|
||||
case "导入":
|
||||
this.openUploadDialog();
|
||||
break;
|
||||
case "导出":
|
||||
this.$http({
|
||||
method: "post",
|
||||
url: this.urls.export,
|
||||
data: { page: this.page },
|
||||
responseType: "blob",
|
||||
}).then((res) => {
|
||||
// //console.log("导出", res);
|
||||
const filename = res.headers["content-disposition"].split("filename=")[1];
|
||||
const blob = new Blob([res.data]);
|
||||
/** 通知 */
|
||||
this.$notify({
|
||||
title: "成功",
|
||||
message: "开始下载",
|
||||
type: "success",
|
||||
duration: 1200,
|
||||
});
|
||||
if ("download" in document.createElement("a")) {
|
||||
const alink = document.createElement("a");
|
||||
alink.download = filename;
|
||||
alink.style.display = "none";
|
||||
alink.target = "_blank";
|
||||
alink.href = URL.createObjectURL(blob);
|
||||
document.body.appendChild(alink);
|
||||
alink.click();
|
||||
URL.revokeObjectURL(alink.href);
|
||||
document.body.removeChild(alink);
|
||||
} else {
|
||||
navigator.msSaveBlob(blob, filename);
|
||||
}
|
||||
});
|
||||
break;
|
||||
case "手动添加": {
|
||||
this.openDialog();
|
||||
return;
|
||||
}
|
||||
case "查询": {
|
||||
if (typeof payload === "object") {
|
||||
// BaseSearchForm 给这个组件传递了数据
|
||||
Object.assign(this.cachedSearchCondition, payload);
|
||||
if ("timerange" in payload) {
|
||||
if (!!payload.timerange) {
|
||||
const [startTime, endTime] = payload["timerange"];
|
||||
this.cachedSearchCondition.startTime = moment(startTime).format("YYYY-MM-DDTHH:mm:ss");
|
||||
this.cachedSearchCondition.endTime = moment(endTime).format("YYYY-MM-DDTHH:mm:ss");
|
||||
const params = Object.assign({}, payload);
|
||||
|
||||
if ("timerange" in params) {
|
||||
if (!!params.timerange) {
|
||||
const [startTime, endTime] = params["timerange"];
|
||||
params.startTime = moment(startTime).format("YYYY-MM-DDTHH:mm:ss");
|
||||
params.endTime = moment(endTime).format("YYYY-MM-DDTHH:mm:ss");
|
||||
} else {
|
||||
delete this.cachedSearchCondition.startTime;
|
||||
delete this.cachedSearchCondition.endTime;
|
||||
}
|
||||
delete this.cachedSearchCondition.timerange;
|
||||
params.startTime = null;
|
||||
params.endTime = null;
|
||||
}
|
||||
delete params.timerange;
|
||||
}
|
||||
|
||||
/** 处理 listQueryExtra 里的数据 */
|
||||
this.listQueryExtra?.map((cond) => {
|
||||
if (typeof cond === "string") {
|
||||
if (!!payload[cond]) {
|
||||
this.cachedSearchCondition[cond] = payload[cond];
|
||||
} else {
|
||||
this.cachedSearchCondition[cond] = "";
|
||||
}
|
||||
} else if (typeof cond === "object") {
|
||||
Object.keys(cond).forEach((key) => {
|
||||
this.cachedSearchCondition[key] = cond[key];
|
||||
});
|
||||
}
|
||||
});
|
||||
console.log("查询", this.cachedSearchCondition);
|
||||
this.getList(this.cachedSearchCondition);
|
||||
// //console.log(
|
||||
// "查询 params",
|
||||
// JSON.stringify({
|
||||
// // ...this.queryParams,
|
||||
// ...params,
|
||||
// })
|
||||
// );
|
||||
|
||||
this.queryParams = {
|
||||
...this.queryParams,
|
||||
...params,
|
||||
};
|
||||
|
||||
this.getList();
|
||||
break;
|
||||
}
|
||||
case "同步":
|
||||
@ -675,7 +768,7 @@ export default {
|
||||
this.$http
|
||||
.post(this.urls.syncUrl)
|
||||
.then(({ data: res }) => {
|
||||
console.log("同步", res);
|
||||
//console.log("同步", res);
|
||||
this.$message({ message: res.msg, type: res.code === 0 ? "success" : "error" });
|
||||
this.getList();
|
||||
this.overlayVisible = false;
|
||||
@ -685,7 +778,89 @@ export default {
|
||||
});
|
||||
});
|
||||
break;
|
||||
case "打印":
|
||||
if (this.tableSelectedIds.length === 0) {
|
||||
return this.$message({
|
||||
message: "请先选择要打印的项",
|
||||
type: "warning",
|
||||
duration: 1500,
|
||||
});
|
||||
}
|
||||
return this.$confirm("开始打印么", "提示", {
|
||||
confirmButtonText: "确认",
|
||||
cancelButtonText: "我再想想",
|
||||
type: "warning",
|
||||
})
|
||||
.then(async () => {
|
||||
const batchPrint = async function* () {
|
||||
for (const item of this.tableSelectedIds) {
|
||||
if (typeof item == "object" && "id" in item) {
|
||||
yield { id: item.id, result: await this.printOnce(item.id) };
|
||||
} else {
|
||||
yield { id: item, result: await this.printOnce(item) }; // 此时 item 本身就是 id
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
for await (const { id } of batchPrint.call(this)) {
|
||||
await this.$http({
|
||||
url: "/pms/pallet/print",
|
||||
method: "post",
|
||||
data: id,
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
});
|
||||
}
|
||||
})
|
||||
.then(() => {
|
||||
this.$message.success("打印成功!");
|
||||
this.getList();
|
||||
})
|
||||
.catch((err) => {
|
||||
// this.$message.error(`批量打印出错: ${err}`);
|
||||
});
|
||||
case "报工":
|
||||
//console.log("报工ids:", this.tableSelectedIds);
|
||||
this.carReportDialogVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs["car-report-dialog"].init();
|
||||
});
|
||||
break;
|
||||
case "生成托盘":
|
||||
if (this.tableSelectedIds.length > 1) {
|
||||
return this.$message({
|
||||
message: "只能选择一项",
|
||||
type: "warning",
|
||||
duration: 1500,
|
||||
});
|
||||
}
|
||||
// // 尾托检测 - 由后端限制
|
||||
// if (this.tableSelectedIds.length == 1 && this.tableSelectedIds[0].typeDictValue != "2") {
|
||||
// return this.$message({
|
||||
// message: "只能选择尾托",
|
||||
// type: "warning",
|
||||
// duration: 1500,
|
||||
// });
|
||||
// }
|
||||
this.palletDialogVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs["pallet-dialog"].init();
|
||||
});
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
/** 打印一次 */
|
||||
printOnce(id) {
|
||||
return new Promise((resolve) => {
|
||||
this.printDOMmount = true;
|
||||
this.$nextTick(async () => {
|
||||
//console.log("[Print] 打印项:", id);
|
||||
await this.$refs["print"].print(id);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
/** 导航器的操作 */
|
||||
@ -693,12 +868,12 @@ export default {
|
||||
// val 是新值
|
||||
this.page = 1;
|
||||
this.size = val;
|
||||
this.getList(this.cachedSearchCondition);
|
||||
this.getList();
|
||||
},
|
||||
|
||||
handlePageChange(val) {
|
||||
// val 是新值
|
||||
this.getList(this.cachedSearchCondition);
|
||||
this.getList();
|
||||
},
|
||||
|
||||
/** 打开对话框 */
|
||||
@ -712,7 +887,7 @@ export default {
|
||||
});
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
//console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
this.$refs["edit-dialog"].init(/** some args... */ row_id, detail_mode, tag_info, extraParams);
|
||||
});
|
||||
},
|
||||
|
@ -56,7 +56,7 @@ export default {
|
||||
}
|
||||
list.push(newRouteItem);
|
||||
} else {
|
||||
// console.log(menu.name, '是应该被隐藏的路由')
|
||||
// //console.log(menu.name, '是应该被隐藏的路由')
|
||||
}
|
||||
});
|
||||
}
|
||||
|
143
src/views/modules/pms/agvList/config.js
Normal file
143
src/views/modules/pms/agvList/config.js
Normal file
@ -0,0 +1,143 @@
|
||||
import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent";
|
||||
// import switchBtn from "@/components/noTemplateComponents/switchBtn";
|
||||
import TableTextComponent from '@/components/noTemplateComponents/detailComponent'
|
||||
import request from "@/utils/request";
|
||||
import { timeFilter, dictFilter } from "@/utils/filters";
|
||||
|
||||
export default function () {
|
||||
const tableProps = [
|
||||
{ type: "index", label: "序号" },
|
||||
{ prop: "name", label: "库位" },
|
||||
{ prop: "order", label: "订单" },
|
||||
{ prop: "orderSub", label: "子号" },
|
||||
{ prop: "batchNo", label: "批次号" },
|
||||
{ prop: "gradeId", label: "配方" },
|
||||
{ prop: "status", label: "状态", filter: val => (val != null) ? ['空库位', '满料盅', '空料盅'][val] : '-' },
|
||||
];
|
||||
|
||||
const now = new Date();
|
||||
const [y, m, d] = [now.getFullYear(), now.getMonth(), now.getDate()];
|
||||
const today = new Date(y, m, d, 0, 0, 0, 0).getTime();
|
||||
const headFormFields = [
|
||||
{
|
||||
// prop: "key",
|
||||
label: "AGV库位",
|
||||
},
|
||||
{
|
||||
button: {
|
||||
type: "primary",
|
||||
permission: 'pms:agvList:info',
|
||||
name: "刷新",
|
||||
},
|
||||
},
|
||||
// {
|
||||
// button: {
|
||||
// type: "primary",
|
||||
// name: "新增",
|
||||
// permission: "",
|
||||
// },
|
||||
// bind: {
|
||||
// plain: true,
|
||||
// },
|
||||
// },
|
||||
];
|
||||
|
||||
/**
|
||||
* dialog config 有两个版本,一个适用于 DialogWithMenu 组件,另一个适用于 DialogJustForm 组件
|
||||
* 适用于 DialogWithMenu 组件的配置示例详见 blenderStep/config.js
|
||||
* 此为后者的配置:
|
||||
*/
|
||||
const dialogJustFormConfigs = {
|
||||
form: {
|
||||
rows: [
|
||||
[
|
||||
{
|
||||
input: true,
|
||||
label: "批次号",
|
||||
prop: "batchNo",
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "-" },
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
input: true,
|
||||
label: "配方",
|
||||
prop: "bom",
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "-" },
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
input: true,
|
||||
label: "重量",
|
||||
prop: "batchSize",
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "-" },
|
||||
},
|
||||
],
|
||||
// [
|
||||
// {
|
||||
// select: true,
|
||||
// label: "所属工厂",
|
||||
// prop: "factoryId",
|
||||
// fetchData: () => this.$http.get("/pms/factory/page", { params: { limit: 999, page: 1 } }),
|
||||
// options: [],
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "change" },
|
||||
// },
|
||||
// {
|
||||
// input: true,
|
||||
// label: "产线TT值",
|
||||
// prop: "tvalue",
|
||||
// rules: [
|
||||
// { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
// { type: "number", message: "数字", trigger: "blur", transform: (val) => Number(val) },
|
||||
// ],
|
||||
// elparams: { placeholder: "设定TT值(每小时下片数量)" },
|
||||
// },
|
||||
// ],
|
||||
// [
|
||||
// { input: true, label: "规格", prop: "specifications", elparams: { placeholder: "规格" } },
|
||||
// {
|
||||
// input: true,
|
||||
// label: "重量",
|
||||
// prop: "externalCode",
|
||||
// rules: [{ type: 'number', trigger: "blur", message: "请输入数字类型", transform: val => Number(val) }],
|
||||
// elparams: { placeholder: "外部编码" },
|
||||
// },
|
||||
// { input: true, label: "短描述", prop: "shortDesc", elparams: { placeholder: "短描述" } },
|
||||
// ],
|
||||
// [{ textarea: true, label: "描述", prop: "description", elparams: { placeholder: "描述" } }],
|
||||
// [{ input: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }],
|
||||
],
|
||||
operations: [
|
||||
// { name: "add", label: "保存", type: "primary", permission: "pms:shape:save", showOnEdit: false },
|
||||
// { name: "update", label: "更新", type: "primary", permission: "pms:shape:update", showOnEdit: true },
|
||||
// { name: "reset", label: "重置", type: "warning", showAlways: true },
|
||||
// { name: 'cancel', label: '取消', showAlways: true },
|
||||
],
|
||||
},
|
||||
};
|
||||
// 备注:弹窗弹出的时间和网速有关......
|
||||
|
||||
return {
|
||||
dialogConfigs: dialogJustFormConfigs,
|
||||
tableConfig: {
|
||||
table: null, // 此处可省略,el-table 上的配置项
|
||||
column: tableProps, // el-column-item 上的配置项
|
||||
},
|
||||
headFormConfigs: {
|
||||
rules: null, // 名称是由 BaseSearchForm.vue 组件固定的
|
||||
fields: headFormFields, // 名称是由 BaseSearchForm.vue 组件固定的
|
||||
},
|
||||
urls: {
|
||||
base: "/pms/trans/agvVisual",
|
||||
page: "/pms/trans/agvVisual",
|
||||
// detach: "/pms/agvTrans/delivery"
|
||||
// subase: '/pms/blenderStepParam',
|
||||
// subpage: '/pms/blenderStepParam/page',
|
||||
// more...
|
||||
},
|
||||
};
|
||||
}
|
80
src/views/modules/pms/agvList/index.vue
Normal file
80
src/views/modules/pms/agvList/index.vue
Normal file
@ -0,0 +1,80 @@
|
||||
<template>
|
||||
<!-- <ListViewWithHead
|
||||
:table-config="tableConfig"
|
||||
:head-config="headFormConfigs"
|
||||
:dialog-configs="dialogConfigs" /> -->
|
||||
|
||||
<div class="list-view-with-head">
|
||||
<BaseSearchForm :head-config="headFormConfigs" @btn-click="handleBtnClick" />
|
||||
|
||||
<BaseListTable
|
||||
v-loading="tableLoading"
|
||||
:table-config="tableConfig.table"
|
||||
:column-config="tableConfig.column"
|
||||
:table-data="dataList"
|
||||
:refresh-layout-key="refreshLayoutKey" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BaseListTable from "@/components/BaseListTable.vue";
|
||||
import initConfig from "./config";
|
||||
import BaseSearchForm from "@/components/BaseSearchForm.vue";
|
||||
|
||||
export default {
|
||||
name: "AGVList",
|
||||
components: { BaseListTable, BaseSearchForm },
|
||||
provide() {
|
||||
return {
|
||||
urls: this.allUrls,
|
||||
};
|
||||
},
|
||||
data() {
|
||||
const { tableConfig, headFormConfigs, urls, dialogConfigs } = initConfig.call(this);
|
||||
return {
|
||||
tableLoading: false,
|
||||
dataList: [],
|
||||
refreshLayoutKey: Math.random(),
|
||||
tableConfig,
|
||||
headFormConfigs,
|
||||
allUrls: urls,
|
||||
dialogConfigs,
|
||||
};
|
||||
},
|
||||
created() {},
|
||||
mounted() {
|
||||
this.getlist();
|
||||
},
|
||||
methods: {
|
||||
async getlist() {
|
||||
const { data: res } = await this.$http({
|
||||
url: this.allUrls.page,
|
||||
method: "get",
|
||||
});
|
||||
if (res.code == 0) {
|
||||
this.dataList = res.data;
|
||||
}
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
switch (btnName) {
|
||||
case "查询": {
|
||||
this.getlist();
|
||||
break;
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.list-view-with-head {
|
||||
background: white;
|
||||
/* height: 100%; */
|
||||
min-height: inherit;
|
||||
border-radius: 6px;
|
||||
padding: 16px;
|
||||
box-shadow: 0 0 1.125px 0.125px rgba(0, 0, 0, 0.125);
|
||||
}
|
||||
</style>
|
@ -33,6 +33,9 @@ export default function () {
|
||||
},
|
||||
];
|
||||
|
||||
const now = new Date();
|
||||
const [y, m, d] = [now.getFullYear(), now.getMonth(), now.getDate()];
|
||||
const today = new Date(y, m, d, 0, 0, 0, 0).getTime();
|
||||
const headFormFields = [
|
||||
{
|
||||
prop: "key",
|
||||
@ -85,6 +88,7 @@ export default function () {
|
||||
"start-placeholder": "开始时间",
|
||||
"end-placeholder": "结束时间",
|
||||
},
|
||||
default: { value: [today - 24 * 7 * 1000 * 3600, today + 3600 * 24 * 1000] },
|
||||
},
|
||||
{
|
||||
button: {
|
||||
|
@ -7,7 +7,7 @@ import initConfig from './config';
|
||||
import ListViewWithHead from '@/views/atomViews/ListViewWithHead.vue';
|
||||
|
||||
export default {
|
||||
name: 'ProductionLineView',
|
||||
name: 'AGVMission',
|
||||
components: { ListViewWithHead },
|
||||
provide() {
|
||||
return {
|
||||
|
@ -190,19 +190,19 @@ export default {
|
||||
const promiseHistory = {};
|
||||
|
||||
const getData = (col, param) => {
|
||||
console.log("getData: ", col.prop, "/", param ?? "no param!");
|
||||
//console.log("getData: ", col.prop, "/", param ?? "no param!");
|
||||
// 获取数据 - 不需要等待前置条件时
|
||||
promiseHistory[col.prop] = col.fetchData(param).then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
if ("list" in res.data) {
|
||||
console.log(
|
||||
"SdASD ",
|
||||
res.data.list.map((i) => ({
|
||||
label: col.optionLabel ? i[col.optionLabel] : i.name,
|
||||
value: col.optionValue ? i[col.optionValue] : i.id,
|
||||
[col.customLabel]: i[col.customLabel],
|
||||
}))
|
||||
);
|
||||
//console.log(
|
||||
// "SdASD ",
|
||||
// res.data.list.map((i) => ({
|
||||
// label: col.optionLabel ? i[col.optionLabel] : i.name,
|
||||
// value: col.optionValue ? i[col.optionValue] : i.id,
|
||||
// [col.customLabel]: i[col.customLabel],
|
||||
// }))
|
||||
// );
|
||||
// 填充 options
|
||||
this.$set(
|
||||
col,
|
||||
@ -226,13 +226,13 @@ export default {
|
||||
|
||||
// 设置监听
|
||||
if ("injectTo" in col) {
|
||||
console.log("set watcher: ", col.prop);
|
||||
//console.log("set watcher: ", col.prop);
|
||||
|
||||
const valueProp = "optionValue" in col ? col.optionValue : "id";
|
||||
const unwatch = this.$watch(
|
||||
() => this.dataForm[col.prop],
|
||||
(val) => {
|
||||
console.log("do watcher: ", col.prop);
|
||||
//console.log("do watcher: ", col.prop);
|
||||
if (col.disableWatcherOnEdit && this.editMode) return;
|
||||
if (!val) {
|
||||
col.injectTo.map((item) => {
|
||||
@ -248,7 +248,7 @@ export default {
|
||||
this.$forceUpdate();
|
||||
});
|
||||
} else {
|
||||
console.log('[x] if ("injectTo" in col) {');
|
||||
//console.log('[x] if ("injectTo" in col) {');
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -287,14 +287,14 @@ export default {
|
||||
|
||||
// 设置监听
|
||||
if ("injectTo" in col && !col.watcher) {
|
||||
console.log("set watcher: ", col.prop);
|
||||
//console.log("set watcher: ", col.prop);
|
||||
|
||||
const valueProp = "optionValue" in col ? col.optionValue : "id";
|
||||
const unwatch = this.$watch(
|
||||
() => this.dataForm[col.prop],
|
||||
(val) => {
|
||||
if (col.disableWatcherOnEdit && this.editMode) return;
|
||||
console.log("do watcher: ", col.prop);
|
||||
//console.log("do watcher: ", col.prop);
|
||||
if (!val) {
|
||||
col.injectTo.map((item) => {
|
||||
this.$set(this.dataForm, item[0], null);
|
||||
@ -309,7 +309,7 @@ export default {
|
||||
this.$forceUpdate();
|
||||
});
|
||||
} else {
|
||||
console.log('[x] if ("injectTo" in col) {');
|
||||
//console.log('[x] if ("injectTo" in col) {');
|
||||
}
|
||||
},
|
||||
{
|
||||
@ -330,16 +330,16 @@ export default {
|
||||
}
|
||||
});
|
||||
|
||||
console.log("after getData: ", promiseHistory);
|
||||
//console.log("after getData: ", promiseHistory);
|
||||
};
|
||||
|
||||
/** 处理函数 */
|
||||
const handleFn = (prevProp, anchorField, anchorValue, targetField, col) => {
|
||||
console.log("[handleFn]: ", prevProp, anchorField, anchorValue, targetField);
|
||||
//console.log("[handleFn]: ", prevProp, anchorField, anchorValue, targetField);
|
||||
/** 此时 cachedList 已经确保可用了 */
|
||||
const target = this.cachedList[prevProp].find((i) => i[anchorField] === anchorValue);
|
||||
const param = target ? target[targetField] : "";
|
||||
console.log("((( chosenObject )))", target);
|
||||
//console.log("((( chosenObject )))", target);
|
||||
|
||||
getData(col, param);
|
||||
};
|
||||
@ -358,13 +358,13 @@ export default {
|
||||
row.forEach((col) => {
|
||||
if (col == null) return;
|
||||
if (col.fetchData && typeof col.fetchData === "function" && col.hasPrev) {
|
||||
console.log("[hasPrev] set watcher: ", col.hasPrev);
|
||||
//console.log("[hasPrev] set watcher: ", col.hasPrev);
|
||||
|
||||
// 获取数据 - 需要等待前置条件时
|
||||
const unwatch = this.$watch(
|
||||
() => this.dataForm[col.hasPrev],
|
||||
(val) => {
|
||||
console.log("[hasPrev] do watcher: ", col.hasPrev);
|
||||
//console.log("[hasPrev] do watcher: ", col.hasPrev);
|
||||
if (!val) {
|
||||
col.injectTo.map((item) => {
|
||||
this.$set(this.dataForm, item[0], null);
|
||||
@ -398,11 +398,11 @@ export default {
|
||||
if (this.configs.extraFields)
|
||||
this.configs.extraFields.forEach((cnf) => {
|
||||
if (cnf.listenTo) {
|
||||
console.log("set watcher for: ", cnf.prop);
|
||||
//console.log("set watcher for: ", cnf.prop);
|
||||
const unwatch = this.$watch(
|
||||
() => this.dataForm[cnf.listenTo.prop],
|
||||
(carId) => {
|
||||
console.log("do watcher for: ", cnf.prop);
|
||||
//console.log("do watcher for: ", cnf.prop);
|
||||
if (!carId) return;
|
||||
if (cnf.disableWatcherOnEdit && this.editMode) return;
|
||||
cnf.listenTo.handler.call(this, this.cachedList[cnf.listenTo.prop], carId);
|
||||
@ -439,14 +439,14 @@ export default {
|
||||
|
||||
resetSpecificFields(fields) {
|
||||
Object.keys(this.dataForm).forEach((key) => {
|
||||
// console.log(`${key} ${fields}`, key in fields, fields.indexOf(key))
|
||||
// //console.log(`${key} ${fields}`, key in fields, fields.indexOf(key))
|
||||
if (fields.indexOf(key) !== -1) {
|
||||
// console.log(`key ${key} in fields`)
|
||||
// //console.log(`key ${key} in fields`)
|
||||
// this.dataForm[key] = null;
|
||||
this.$set(this.dataForm, key, null);
|
||||
}
|
||||
});
|
||||
console.log("this.dataform", this.dataForm);
|
||||
//console.log("this.dataform", this.dataForm);
|
||||
},
|
||||
|
||||
resetForm(excludeId = false, immediate = false) {
|
||||
@ -468,9 +468,9 @@ export default {
|
||||
|
||||
/** init **/
|
||||
init(id, detailMode, tagInfo, extraParams) {
|
||||
// console.log("[DialogJustForm] init", this.dataForm, id, detailMode);
|
||||
// //console.log("[DialogJustForm] init", this.dataForm, id, detailMode);
|
||||
if (this.$refs.dataForm) {
|
||||
// console.log("[DialogJustForm] clearing form validation...");
|
||||
// //console.log("[DialogJustForm] clearing form validation...");
|
||||
// 当不是首次渲染dialog的时候,一开始就清空验证信息,本组件的循环里只有一个 dataForm 所以只用取 [0] 即可
|
||||
this.$refs.dataForm.clearValidate();
|
||||
}
|
||||
@ -481,7 +481,7 @@ export default {
|
||||
/** 判断 extraParams */
|
||||
if (extraParams && typeof extraParams === "object") {
|
||||
for (const [key, value] of Object.entries(extraParams)) {
|
||||
// console.log("[dialog] dataForm | key | value", this.dataForm, key, value);
|
||||
// //console.log("[dialog] dataForm | key | value", this.dataForm, key, value);
|
||||
this.$set(this.dataForm, key, value);
|
||||
}
|
||||
}
|
||||
@ -514,7 +514,7 @@ export default {
|
||||
url: file.fileUrl,
|
||||
}));
|
||||
}
|
||||
// console.log("[DialogJustForm] init():", this.dataForm);
|
||||
// //console.log("[DialogJustForm] init():", this.dataForm);
|
||||
} else {
|
||||
this.$message({
|
||||
message: `${res.code}: ${res.msg}`,
|
||||
@ -540,7 +540,7 @@ export default {
|
||||
|
||||
handleButtonClick(col) {
|
||||
if (!("onClick" in col)) {
|
||||
console.log("[handleButtonClick] 配置文件config.js 里没有绑定 onClick");
|
||||
//console.log("[handleButtonClick] 配置文件config.js 里没有绑定 onClick");
|
||||
return;
|
||||
}
|
||||
|
||||
@ -551,7 +551,7 @@ export default {
|
||||
handleSelectChange(col, eventValue) {
|
||||
if ("autoUpdateProp" in col) {
|
||||
// 自动更新 相关联 的字段
|
||||
// console.log(col.options, eventValue, this.savedDatalist);
|
||||
// //console.log(col.options, eventValue, this.savedDatalist);
|
||||
const item = this.savedDatalist[col.prop].find((item) => item.id === eventValue);
|
||||
this.shadowDataForm[col.autoUpdateProp] = item.cate ?? null;
|
||||
}
|
||||
@ -559,17 +559,17 @@ export default {
|
||||
},
|
||||
|
||||
handleSwitchChange(val) {
|
||||
console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
//console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
},
|
||||
|
||||
handleComponentModelUpdate(propName, { subject, payload: { data } }) {
|
||||
this.dataForm[propName] = JSON.stringify(data);
|
||||
console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
//console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
},
|
||||
|
||||
addOrUpdate(method = "POST", url) {
|
||||
if ("parentId" in this.dataForm) {
|
||||
console.log("[DialogJustForm parentId]", this.dataForm.parentId);
|
||||
//console.log("[DialogJustForm parentId]", this.dataForm.parentId);
|
||||
// 对特殊的键做特殊处理,如 parentId 是一个 cascader,获取的值是 ["xxx"],后端只需要xxx
|
||||
const lastItem = this.dataForm.parentId.length - 1;
|
||||
this.dataForm.parentId = this.dataForm.parentId[lastItem];
|
||||
@ -621,7 +621,7 @@ export default {
|
||||
data: httpPayload,
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("[add&update] res is: ", res);
|
||||
//console.log("[add&update] res is: ", res);
|
||||
this.loadingStatus = false;
|
||||
if (res.code === 0) {
|
||||
this.$message.success(method === "POST" ? "添加成功" : "更新成功");
|
||||
@ -647,7 +647,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
console.log("btn click payload: ", payload);
|
||||
//console.log("btn click payload: ", payload);
|
||||
|
||||
if ("name" in payload) {
|
||||
switch (payload.name) {
|
||||
@ -659,7 +659,7 @@ export default {
|
||||
break;
|
||||
case "resetSpecific":
|
||||
// qualityInspectionRecord config 里引用
|
||||
console.log("resetFields", this.resetFields);
|
||||
//console.log("resetFields", this.resetFields);
|
||||
this.resetSpecificFields(this.resetFields);
|
||||
break;
|
||||
case "add":
|
||||
@ -674,18 +674,18 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "add-car-payload": {
|
||||
console.log("edit-car-payload", payload);
|
||||
//console.log("edit-car-payload", payload);
|
||||
this.addOrUpdate("POST", this.urls.payloadFormUrl);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
console.log("[x] 不是这么用的! 缺少name属性");
|
||||
//console.log("[x] 不是这么用的! 缺少name属性");
|
||||
}
|
||||
},
|
||||
|
||||
handleUploadChange(file, fileList) {
|
||||
console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
//console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
},
|
||||
|
||||
handleClose() {
|
||||
|
@ -95,7 +95,7 @@ export default {
|
||||
},
|
||||
blenderOrderId() {
|
||||
const item = this.listQueryExtra.find((item) => item.blenderOrderId);
|
||||
console.log("Find blenderOrderId", item);
|
||||
//console.log("Find blenderOrderId", item);
|
||||
return item ? item.blenderOrderId : null;
|
||||
},
|
||||
},
|
||||
@ -104,10 +104,10 @@ export default {
|
||||
},
|
||||
watch: {
|
||||
page: (val) => {
|
||||
console.log("page changed:", val);
|
||||
//console.log("page changed:", val);
|
||||
},
|
||||
size: (val) => {
|
||||
console.log("size changed:", val);
|
||||
//console.log("size changed:", val);
|
||||
},
|
||||
triggerUpdate(val, oldVal) {
|
||||
if (val && val !== oldVal) {
|
||||
@ -191,7 +191,7 @@ export default {
|
||||
}
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
// page 场景:
|
||||
@ -240,7 +240,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -381,7 +381,7 @@ export default {
|
||||
this.$http
|
||||
.post(this.urls.syncUrl)
|
||||
.then(({ data: res }) => {
|
||||
console.log("同步", res);
|
||||
//console.log("同步", res);
|
||||
this.$message({ message: res.msg, type: res.code === 0 ? "success" : "error" });
|
||||
this.getList();
|
||||
this.overlayVisible = false;
|
||||
|
@ -100,7 +100,7 @@ export default {
|
||||
watch: {
|
||||
blenderOrderId: {
|
||||
handler(val) {
|
||||
// console.log("blenderOrderId changed", val);
|
||||
// //console.log("blenderOrderId changed", val);
|
||||
},
|
||||
immediate: true,
|
||||
},
|
||||
|
@ -23,11 +23,11 @@ export default {
|
||||
computed: {
|
||||
// 混料订单id
|
||||
id() {
|
||||
console.log("computed id", this.$route.query.id || "");
|
||||
//console.log("computed id", this.$route.query.id || "");
|
||||
return this.$route.query.id || "";
|
||||
},
|
||||
refreshPage() {
|
||||
console.log("computed refreshPage");
|
||||
//console.log("computed refreshPage");
|
||||
const val = this.$route.query.refreshPage ? Math.random().toString() : null;
|
||||
// 手动清除 location.href 里的 refreshPage
|
||||
location.href = location.href.replace(/&refreshPage=[^&]*/, "");
|
||||
@ -50,7 +50,7 @@ export default {
|
||||
// handler: function (route) {
|
||||
// if (route.query.id) {
|
||||
// this.triggerUpdateKey = Math.random().toString()
|
||||
// console.log('[$oute changed] val.params.id', route.query.id, this.triggerUpdateKey)
|
||||
// //console.log('[$oute changed] val.params.id', route.query.id, this.triggerUpdateKey)
|
||||
// }
|
||||
// },
|
||||
// immediate: true,
|
||||
@ -60,7 +60,7 @@ export default {
|
||||
watch: {
|
||||
refreshPage: {
|
||||
handler: function (val) {
|
||||
console.log("refreshPage", val);
|
||||
//console.log("refreshPage", val);
|
||||
if (val) {
|
||||
// this.triggerUpdateKey = Math.random().toString();
|
||||
this.triggerUpdateKey = val;
|
||||
|
@ -86,10 +86,23 @@ export default {
|
||||
dialogBomCode: "",
|
||||
overlayVisible: false,
|
||||
cachedSearchCondition: {},
|
||||
queryParams: {},
|
||||
};
|
||||
},
|
||||
inject: ["urls"],
|
||||
mounted() {
|
||||
// 如果设置了 listQueryExtra,就合并到 queryParams
|
||||
if (this.listQueryExtra && Array.isArray(this.listQueryExtra)) {
|
||||
this.listQueryExtra.map((item) => {
|
||||
if (typeof item === "string") this.$set(this.queryParams, item, "");
|
||||
else if (typeof item === "object") {
|
||||
Object.keys(item).forEach((key) => {
|
||||
this.$set(this.queryParams, key, item[key]);
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
this.initDataWhenLoad && this.getList();
|
||||
},
|
||||
methods: {
|
||||
@ -104,17 +117,6 @@ export default {
|
||||
limit: this.size,
|
||||
};
|
||||
|
||||
if (!queryParams && this.listQueryExtra && this.listQueryExtra.length) {
|
||||
this.listQueryExtra.map((nameOrObj) => {
|
||||
if (typeof nameOrObj === "string") params[nameOrObj] = "";
|
||||
else if (typeof nameOrObj === "object") {
|
||||
Object.keys(nameOrObj).forEach((key) => {
|
||||
params[key] = nameOrObj[key];
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// if (this.urls.pageIsPostApi) {
|
||||
// } else {
|
||||
// 默认是 get 方式请求 page
|
||||
@ -122,14 +124,18 @@ export default {
|
||||
this.urls.page,
|
||||
this.urls.pageIsPostApi
|
||||
? {
|
||||
...this.queryParams,
|
||||
...params,
|
||||
}
|
||||
: {
|
||||
params,
|
||||
params: {
|
||||
...this.queryParams,
|
||||
...params
|
||||
},
|
||||
}
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
// page 场景:
|
||||
@ -170,7 +176,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data, toRouter }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -253,7 +259,9 @@ export default {
|
||||
.then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
message: `${type === "detach" ? "下发" : type === "pause-blender" ? "暂停" : "开始"}成功`,
|
||||
message: `${
|
||||
type === "detach" ? "下发" : type === "pause-blender" ? "暂停" : "开始"
|
||||
}成功`,
|
||||
type: "success",
|
||||
duration: 1500,
|
||||
onClose: () => {
|
||||
@ -275,7 +283,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "新增":
|
||||
this.openDialog();
|
||||
@ -312,7 +320,7 @@ export default {
|
||||
});
|
||||
}
|
||||
});
|
||||
console.log("查询", this.cachedSearchCondition);
|
||||
//console.log("查询", this.cachedSearchCondition);
|
||||
this.getList(this.cachedSearchCondition);
|
||||
break;
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ export default {
|
||||
if (col.delayRequest) delayList.push(col);
|
||||
// let doRequest = null;
|
||||
// if (col.fetchData.length) {
|
||||
// console.log(`this.bomCode '${this.bomCode}'`);
|
||||
// //console.log(`this.bomCode '${this.bomCode}'`);
|
||||
// // 如果有参数
|
||||
// doRequest = col.fetchData.bind(this.bomCode);
|
||||
// } else doRequest = col.fetchData;
|
||||
@ -146,7 +146,7 @@ export default {
|
||||
}))
|
||||
);
|
||||
} else {
|
||||
console.log("请检查返回的数据类型");
|
||||
//console.log("请检查返回的数据类型");
|
||||
}
|
||||
} else {
|
||||
col.options.splice(0);
|
||||
@ -207,7 +207,7 @@ export default {
|
||||
if (excludeId && key === "id") return;
|
||||
this.dataForm[key] = null;
|
||||
});
|
||||
console.log("[DialogJustForm resetForm()] clearing form...");
|
||||
//console.log("[DialogJustForm resetForm()] clearing form...");
|
||||
this.$refs.dataForm.clearValidate();
|
||||
this.$emit("dialog-closed"); // 触发父组件销毁自己
|
||||
},
|
||||
@ -220,17 +220,17 @@ export default {
|
||||
// id 和 混料机 ID 混料订单号 和 配方id
|
||||
const { id, code, blender, bomId } = row;
|
||||
|
||||
// console.log(" { id, code, blender } = row;", row);
|
||||
// //console.log(" { id, code, blender } = row;", row);
|
||||
|
||||
if (this.$refs.dataForm) {
|
||||
this.$refs.dataForm.clearValidate();
|
||||
}
|
||||
|
||||
this.delayList.forEach((col) => {
|
||||
// console.log("delay fetch", col);
|
||||
// //console.log("delay fetch", col);
|
||||
// 需要延迟获取异步数据的 col 配置
|
||||
if (col.fetchDataParam in row) {
|
||||
// console.log("delay row ", row, row[col.fetchDataParam]);
|
||||
// //console.log("delay row ", row, row[col.fetchDataParam]);
|
||||
col.fetchData(row[col.fetchDataParam]).then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
if ("list" in res.data) {
|
||||
@ -252,7 +252,7 @@ export default {
|
||||
}))
|
||||
);
|
||||
} else {
|
||||
console.log("请检查返回的数据类型");
|
||||
//console.log("请检查返回的数据类型");
|
||||
}
|
||||
} else {
|
||||
col.options.splice(0);
|
||||
@ -274,17 +274,17 @@ export default {
|
||||
|
||||
/** handlers */
|
||||
handleSelectChange(col, eventValue) {
|
||||
// console.log("[dialog] select change: ", col, eventValue);
|
||||
// //console.log("[dialog] select change: ", col, eventValue);
|
||||
this.$forceUpdate();
|
||||
},
|
||||
|
||||
handleSwitchChange(val) {
|
||||
console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
// //console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
},
|
||||
|
||||
handleComponentModelUpdate(propName, { subject, payload: { data } }) {
|
||||
this.dataForm[propName] = JSON.stringify(data);
|
||||
console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
// //console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
},
|
||||
|
||||
addOrUpdate(method = "POST") {
|
||||
@ -321,7 +321,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
console.log("btn click payload: ", payload);
|
||||
//console.log("btn click payload: ", payload);
|
||||
|
||||
if ("name" in payload) {
|
||||
switch (payload.name) {
|
||||
@ -333,12 +333,12 @@ export default {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
console.log("[x] 不是这么用的! 缺少name属性");
|
||||
//console.log("[x] 不是这么用的! 缺少name属性");
|
||||
}
|
||||
},
|
||||
|
||||
handleUploadChange(file, fileList) {
|
||||
console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
//console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
},
|
||||
|
||||
handleClose() {
|
||||
|
@ -9,7 +9,7 @@ export default function () {
|
||||
// { prop: "kilnCode", label: "窑炉" },
|
||||
{ width: 128, prop: "orderCode", label: "主订单号" },
|
||||
{ width: 60, prop: "orderCate", label: "子号" },
|
||||
{ width: 128, prop: "code", label: "混料订单号" },
|
||||
// { width: 128, prop: "code", label: "混料订单号" },
|
||||
{
|
||||
width: 80,
|
||||
prop: "percent",
|
||||
@ -25,7 +25,7 @@ export default function () {
|
||||
// { prop: "startTime", label: "开始时间" },
|
||||
// { prop: "shapeCode", label: "砖型" },
|
||||
{ prop: "bomCode", label: "配方" },
|
||||
{ prop: "bomName", label: "牌号" },
|
||||
{ width: 180, prop: "bomName", label: "牌号" },
|
||||
{ width: 60, prop: "ai", label: "版本" },
|
||||
{ width: 120, prop: "qty", label: "混料总量 [kg]" },
|
||||
{ width: 120, prop: "comqty", label: "已完成量 [kg]" },
|
||||
@ -40,7 +40,7 @@ export default function () {
|
||||
prop: "operations",
|
||||
name: "操作",
|
||||
fixed: "right",
|
||||
width: 190,
|
||||
width: 210,
|
||||
subcomponent: TableOperaionComponent,
|
||||
options: [
|
||||
{
|
||||
@ -305,7 +305,13 @@ export default function () {
|
||||
return {
|
||||
dialogConfigs,
|
||||
tableConfig: {
|
||||
table: null, // 此处可省略,el-table 上的配置项
|
||||
table: {
|
||||
"cell-class-name": ({ row, column, rowIndex, columnIndex }) => {
|
||||
if ("statusDictValue" in row && row.statusDictValue == "2") {
|
||||
return "cell-in-production";
|
||||
}
|
||||
},
|
||||
},
|
||||
column: tableProps, // el-column-item 上的配置项
|
||||
},
|
||||
headFormConfigs: {
|
||||
|
@ -1,5 +1,6 @@
|
||||
<template>
|
||||
<ListViewWithHead
|
||||
class="highlight-cell"
|
||||
key="blender-order"
|
||||
:table-config="tableConfig"
|
||||
:head-config="headFormConfigs"
|
||||
@ -34,4 +35,11 @@ export default {
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
<style scoped>
|
||||
.highlight-cell >>> .cell-in-production {
|
||||
background: rgba(33, 207, 134, 0.35);
|
||||
}
|
||||
.highlight-cell >>> .hover-row .cell-in-production {
|
||||
background: rgba(33, 207, 134, 0.7);
|
||||
}
|
||||
</style>
|
||||
|
@ -170,7 +170,7 @@ export default {
|
||||
}
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
// page 场景:
|
||||
@ -209,7 +209,7 @@ export default {
|
||||
},
|
||||
|
||||
handleOperatePress({ type, data, toRouter }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
switch (type) {
|
||||
case "detach": {
|
||||
// 下发订单
|
||||
@ -220,8 +220,11 @@ export default {
|
||||
}).then(() => {
|
||||
this.overlayVisible = true;
|
||||
return this.$http
|
||||
.post(this.urls.pressDetach, data /* { id: data } */, { headers: { "Content-Type": "application/json" } })
|
||||
.post(this.urls.pressDetach, data /* { id: data } */, {
|
||||
headers: { "Content-Type": "application/json" },
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
this.overlayVisible = false;
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
message: `下发成功`,
|
||||
@ -238,7 +241,6 @@ export default {
|
||||
duration: 1500,
|
||||
});
|
||||
}
|
||||
this.overlayVisible = false;
|
||||
});
|
||||
});
|
||||
}
|
||||
@ -247,7 +249,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data, toRouter }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -329,7 +331,9 @@ export default {
|
||||
.then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
message: `${type === "detach" ? "下发" : type === "pause-blender" ? "暂停" : "开始"}成功`,
|
||||
message: `${
|
||||
type === "detach" ? "下发" : type === "pause-blender" ? "暂停" : "开始"
|
||||
}成功`,
|
||||
type: "success",
|
||||
duration: 1500,
|
||||
onClose: () => {
|
||||
@ -351,7 +355,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "新增":
|
||||
this.openDialog();
|
||||
@ -388,7 +392,7 @@ export default {
|
||||
});
|
||||
}
|
||||
});
|
||||
console.log("查询", this.cachedSearchCondition);
|
||||
//console.log("查询", this.cachedSearchCondition);
|
||||
this.getList(this.cachedSearchCondition);
|
||||
this.getList(this.cachedSearchCondition, "press");
|
||||
break;
|
||||
|
@ -120,7 +120,7 @@ export default {
|
||||
if (col.delayRequest) delayList.push(col);
|
||||
// let doRequest = null;
|
||||
// if (col.fetchData.length) {
|
||||
// console.log(`this.bomCode '${this.bomCode}'`);
|
||||
// //console.log(`this.bomCode '${this.bomCode}'`);
|
||||
// // 如果有参数
|
||||
// doRequest = col.fetchData.bind(this.bomCode);
|
||||
// } else doRequest = col.fetchData;
|
||||
@ -146,7 +146,7 @@ export default {
|
||||
}))
|
||||
);
|
||||
} else {
|
||||
console.log("请检查返回的数据类型");
|
||||
//console.log("请检查返回的数据类型");
|
||||
}
|
||||
} else {
|
||||
col.options.splice(0);
|
||||
@ -207,7 +207,7 @@ export default {
|
||||
if (excludeId && key === "id") return;
|
||||
this.dataForm[key] = null;
|
||||
});
|
||||
console.log("[DialogJustForm resetForm()] clearing form...");
|
||||
//console.log("[DialogJustForm resetForm()] clearing form...");
|
||||
this.$refs.dataForm.clearValidate();
|
||||
this.$emit("dialog-closed"); // 触发父组件销毁自己
|
||||
},
|
||||
@ -220,17 +220,17 @@ export default {
|
||||
// id 和 混料机 ID 混料订单号 和 配方id
|
||||
const { id, code, blender, bomId } = row;
|
||||
|
||||
// console.log(" { id, code, blender } = row;", row);
|
||||
// //console.log(" { id, code, blender } = row;", row);
|
||||
|
||||
if (this.$refs.dataForm) {
|
||||
this.$refs.dataForm.clearValidate();
|
||||
}
|
||||
|
||||
this.delayList.forEach((col) => {
|
||||
// console.log("delay fetch", col);
|
||||
// //console.log("delay fetch", col);
|
||||
// 需要延迟获取异步数据的 col 配置
|
||||
if (col.fetchDataParam in row) {
|
||||
// console.log("delay row ", row, row[col.fetchDataParam]);
|
||||
// //console.log("delay row ", row, row[col.fetchDataParam]);
|
||||
col.fetchData(row[col.fetchDataParam]).then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
if ("list" in res.data) {
|
||||
@ -252,7 +252,7 @@ export default {
|
||||
}))
|
||||
);
|
||||
} else {
|
||||
console.log("请检查返回的数据类型");
|
||||
//console.log("请检查返回的数据类型");
|
||||
}
|
||||
} else {
|
||||
col.options.splice(0);
|
||||
@ -274,17 +274,17 @@ export default {
|
||||
|
||||
/** handlers */
|
||||
handleSelectChange(col, eventValue) {
|
||||
// console.log("[dialog] select change: ", col, eventValue);
|
||||
// //console.log("[dialog] select change: ", col, eventValue);
|
||||
this.$forceUpdate();
|
||||
},
|
||||
|
||||
handleSwitchChange(val) {
|
||||
console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
//console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
},
|
||||
|
||||
handleComponentModelUpdate(propName, { subject, payload: { data } }) {
|
||||
this.dataForm[propName] = JSON.stringify(data);
|
||||
console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
//console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
},
|
||||
|
||||
addOrUpdate(method = "POST") {
|
||||
@ -321,7 +321,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
console.log("btn click payload: ", payload);
|
||||
//console.log("btn click payload: ", payload);
|
||||
|
||||
if ("name" in payload) {
|
||||
switch (payload.name) {
|
||||
@ -333,12 +333,12 @@ export default {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
console.log("[x] 不是这么用的! 缺少name属性");
|
||||
//console.log("[x] 不是这么用的! 缺少name属性");
|
||||
}
|
||||
},
|
||||
|
||||
handleUploadChange(file, fileList) {
|
||||
console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
//console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
},
|
||||
|
||||
handleClose() {
|
||||
|
@ -9,11 +9,19 @@ export default function () {
|
||||
{ width: 160, prop: "orderCode", label: "主订单号" },
|
||||
{ width: 60, prop: "orderCate", label: "子号" },
|
||||
{ width: 160, prop: "code", label: "混料订单号" },
|
||||
{ width: 60, prop: "percent", label: "进度", filter: (val) => (val !== null && val !== undefined ? val + " %" : "-") },
|
||||
{
|
||||
width: 60,
|
||||
prop: "percent",
|
||||
label: "进度",
|
||||
filter: (val) => (val !== null && val !== undefined ? val + " %" : "-"),
|
||||
},
|
||||
{
|
||||
prop: "statusDictValue",
|
||||
label: "订单状态",
|
||||
filter: (val) => (val !== null && val !== undefined ? ["等待", "确认", "生产", "暂停", "结束", "接受", "拒绝", "已下发"][val] : "-"),
|
||||
filter: (val) =>
|
||||
val !== null && val !== undefined
|
||||
? ["等待", "确认", "生产", "暂停", "结束", "接受", "拒绝", "已下发"][val]
|
||||
: "-",
|
||||
},
|
||||
{ prop: "bomCode", label: "配方" },
|
||||
{ width: 120, prop: "qty", label: "混料总量 [kg]" },
|
||||
@ -25,20 +33,30 @@ export default function () {
|
||||
prop: "operations",
|
||||
name: "操作",
|
||||
fixed: "right",
|
||||
width: 180,
|
||||
width: 196,
|
||||
subcomponent: TableOperaionComponent,
|
||||
options: [
|
||||
{
|
||||
name: "edit", label: "编辑", emitFull: true, icon: 'edit-outline', enable: injectData => {
|
||||
const v = injectData.statusDictValue
|
||||
if (v && +v === 1) return true
|
||||
return false
|
||||
}
|
||||
name: "edit",
|
||||
label: "编辑",
|
||||
emitFull: true,
|
||||
icon: "edit-outline",
|
||||
enable: (injectData) => {
|
||||
const v = injectData.statusDictValue;
|
||||
if (v && +v === 1) return true;
|
||||
return false;
|
||||
},
|
||||
{ name: "view-batch", label: "查看批次", color: "#ff8000", toRouter: 'pms-blenderBatch', icon: 'document-copy' }, // 路由跳转至 pms-blenderBatch
|
||||
{ name: "pause-blender", label: "暂停", color: "#f10000", icon: 'video-pause' },
|
||||
{ name: "start-blender", label: "开始", color: "#0b58ff", icon: 'video-play' },
|
||||
{ name: "detach", label: "下发", color: "#099", icon: 'bottom-right' },
|
||||
},
|
||||
{
|
||||
name: "view-batch",
|
||||
label: "查看批次",
|
||||
color: "#ff8000",
|
||||
toRouter: "pms-blenderBatch",
|
||||
icon: "document-copy",
|
||||
}, // 路由跳转至 pms-blenderBatch
|
||||
{ name: "pause-blender", label: "暂停", color: "#f10000", icon: "video-pause" },
|
||||
{ name: "start-blender", label: "开始", color: "#0b58ff", icon: "video-play" },
|
||||
{ name: "detach", label: "下发", color: "#099", icon: "bottom-right" },
|
||||
],
|
||||
},
|
||||
];
|
||||
@ -48,8 +66,20 @@ export default function () {
|
||||
{ width: 160, prop: "orderCode", label: "主订单号" },
|
||||
{ width: 60, prop: "orderCate", label: "子号" },
|
||||
{ width: 160, prop: "code", label: "压制订单号" },
|
||||
{ width: 60, prop: "percent", label: "进度", filter: (val) => (val !== null && val !== undefined ? val + " %" : "-") },
|
||||
{ prop: "statusDictValue", label: "订单状态", filter: (val) => (val !== null && val !== undefined ? ["等待", "确认", "生产", "暂停", "结束", "接受", "拒绝", "已下发"][val] : "-"), },
|
||||
{
|
||||
width: 60,
|
||||
prop: "percent",
|
||||
label: "进度",
|
||||
filter: (val) => (val !== null && val !== undefined ? val + " %" : "-"),
|
||||
},
|
||||
{
|
||||
prop: "statusDictValue",
|
||||
label: "订单状态",
|
||||
filter: (val) =>
|
||||
val !== null && val !== undefined
|
||||
? ["等待", "确认", "生产", "暂停", "结束", "接受", "拒绝", "已下发"][val]
|
||||
: "-",
|
||||
},
|
||||
{ prop: "startTime", label: "开始时间" },
|
||||
{ width: 100, prop: "shapeCode", label: "砖型" },
|
||||
{ prop: "pressCode", label: "压机" },
|
||||
@ -64,11 +94,10 @@ export default function () {
|
||||
fixed: "right",
|
||||
width: 80,
|
||||
subcomponent: TableOperaionComponent,
|
||||
options: [{ name: 'detach', label: '下发', icon: 'bottom-right' }]
|
||||
options: [{ name: "detach", label: "下发", icon: "bottom-right" }],
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
const headFormFields = [
|
||||
{
|
||||
prop: "code",
|
||||
@ -109,8 +138,8 @@ export default function () {
|
||||
[
|
||||
{
|
||||
forceDisabled: true,
|
||||
prop: 'code',
|
||||
label: '混料订单号'
|
||||
prop: "code",
|
||||
label: "混料订单号",
|
||||
},
|
||||
],
|
||||
[
|
||||
@ -119,10 +148,11 @@ export default function () {
|
||||
label: "配方",
|
||||
prop: "bomId",
|
||||
options: [],
|
||||
optionLabelProp: 'code',
|
||||
optionLabelProp: "code",
|
||||
/** ====== */
|
||||
fetchData: (bomCode) => this.$http.get('/pms/bom/pageVersion', { params: { key: bomCode, limit: 999, page: 1 } }),
|
||||
fetchDataParam: 'bomCode',
|
||||
fetchData: (bomCode) =>
|
||||
this.$http.get("/pms/bom/pageVersion", { params: { key: bomCode, limit: 999, page: 1 } }),
|
||||
fetchDataParam: "bomCode",
|
||||
delayRequest: true,
|
||||
/** ====== */
|
||||
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
@ -135,8 +165,9 @@ export default function () {
|
||||
label: "混料机",
|
||||
prop: "blender",
|
||||
options: [],
|
||||
optionLabelProp: 'code',
|
||||
fetchData: () => this.$http.get('/pms/equipment/list', { params: { workSequenceName: '混料工序' } }),
|
||||
optionLabelProp: "code",
|
||||
fetchData: () =>
|
||||
this.$http.get("/pms/equipment/list", { params: { workSequenceName: "混料工序" } }),
|
||||
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { clearable: true, filterable: true, placeholder: "请选择混料机" },
|
||||
},
|
||||
@ -146,18 +177,30 @@ export default function () {
|
||||
{ name: "add", label: "保存", type: "primary", permission: "", showOnEdit: false },
|
||||
{ name: "update", label: "更新", type: "primary", permission: "", showOnEdit: true },
|
||||
// { name: "reset", label: "重置", type: "warning", showAlways: true },
|
||||
]
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
return {
|
||||
dialogConfigs,
|
||||
tableConfig: {
|
||||
table: null,
|
||||
table: {
|
||||
"cell-class-name": ({ row, column, rowIndex, columnIndex }) => {
|
||||
if ("statusDictValue" in row && row.statusDictValue == "2") {
|
||||
return "cell-in-production";
|
||||
}
|
||||
},
|
||||
},
|
||||
column: tableProps,
|
||||
},
|
||||
pressTableConfig: {
|
||||
table: null,
|
||||
table: {
|
||||
"cell-class-name": ({ row, column, rowIndex, columnIndex }) => {
|
||||
if ("statusDictValue" in row && row.statusDictValue == "2") {
|
||||
return "cell-in-production";
|
||||
}
|
||||
},
|
||||
},
|
||||
column: pressTableProps,
|
||||
},
|
||||
headFormConfigs: {
|
||||
@ -171,7 +214,7 @@ export default function () {
|
||||
pauseBlender: "/pms/trans/blenderPause",
|
||||
startBlender: "/pms/trans/blenderStart",
|
||||
pageIsPostApi: true, // 使用post接口来获取page数据,极少用,目前基本上只有工艺管理模块里在用
|
||||
changeBlender: '/pms/order/changeBlender',
|
||||
changeBlender: "/pms/order/changeBlender",
|
||||
pressPage: "/pms/pressOrder/pageView",
|
||||
pressDetach: "/pms/trans/pressDeli",
|
||||
},
|
||||
|
@ -1,12 +1,12 @@
|
||||
<template>
|
||||
<ListViewWithHead
|
||||
class="highlight-cell"
|
||||
key="blender-order"
|
||||
:table-config="tableConfig"
|
||||
:press-table-config="pressTableConfig"
|
||||
:head-config="headFormConfigs"
|
||||
:dialog-configs="dialogConfigs"
|
||||
:list-query-extra="[]"
|
||||
/>
|
||||
:list-query-extra="[]" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
@ -37,4 +37,11 @@ export default {
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
||||
<style scoped>
|
||||
.highlight-cell >>> .cell-in-production {
|
||||
background: rgba(33, 207, 134, 0.35);
|
||||
}
|
||||
.highlight-cell >>> .hover-row .cell-in-production {
|
||||
background: rgba(33, 207, 134, 0.7);
|
||||
}
|
||||
</style>
|
||||
|
@ -63,10 +63,13 @@ export default function () {
|
||||
},
|
||||
{
|
||||
button: {
|
||||
type: "plain",
|
||||
type: "success",
|
||||
name: "导入",
|
||||
permission: "",
|
||||
},
|
||||
bind: {
|
||||
plain: true,
|
||||
},
|
||||
},
|
||||
// {
|
||||
// button: {
|
||||
|
@ -15,7 +15,7 @@ const syncTimeComponent = {
|
||||
return {}
|
||||
},
|
||||
mounted() {
|
||||
console.log('syncTimeComponent mounted', this.injectData)
|
||||
//console.log('syncTimeComponent mounted', this.injectData)
|
||||
},
|
||||
render: function (h) {
|
||||
return h('div', {
|
||||
|
@ -40,7 +40,7 @@ export default {
|
||||
handler: function (route) {
|
||||
if (route.query.code) {
|
||||
this.triggerUpdateKey = Math.random().toString();
|
||||
console.log("[$oute changed] val.query.name", route.query.code, this.triggerUpdateKey);
|
||||
//console.log("[$oute changed] val.query.name", route.query.code, this.triggerUpdateKey);
|
||||
}
|
||||
},
|
||||
immediate: true,
|
||||
|
@ -155,12 +155,12 @@ export default {
|
||||
},
|
||||
|
||||
async getTechDetailInfo() {
|
||||
console.log("[getTechDetailInfo] this.techId: ", this.techId);
|
||||
//console.log("[getTechDetailInfo] this.techId: ", this.techId);
|
||||
// 填充 dataForm
|
||||
try {
|
||||
const { data: res } = await this.$http.get(`/pms/equipmentTech/${this.techId}`);
|
||||
if (res.code == 0) {
|
||||
// console.log('[getTechDetailInfo] res.data: ', res.data)
|
||||
// //console.log('[getTechDetailInfo] res.data: ', res.data)
|
||||
// return;
|
||||
this.$set(this.dataForm, "code", res.data.code);
|
||||
this.$set(this.dataForm, "remark", res.data.remark);
|
||||
@ -179,7 +179,7 @@ export default {
|
||||
try {
|
||||
const { data: res } = await this.$http.get("/pms/equipmentTechParam/page", { params });
|
||||
if (res.code == 0) {
|
||||
console.log("[getTechDetailList] res.data: ", res.data);
|
||||
//console.log("[getTechDetailList] res.data: ", res.data);
|
||||
this.dataList = res.data.list;
|
||||
this.total = res.data.total;
|
||||
}
|
||||
@ -189,7 +189,7 @@ export default {
|
||||
},
|
||||
|
||||
handleTabClick(v) {
|
||||
// console.log("handleTabClick: ", v);
|
||||
// //console.log("handleTabClick: ", v);
|
||||
},
|
||||
|
||||
handleOperate() {},
|
||||
|
@ -108,7 +108,7 @@ export default {
|
||||
page: 1,
|
||||
});
|
||||
if (res.code == 0) {
|
||||
console.log("res", res);
|
||||
//console.log("res", res);
|
||||
this.techList = res.data.list.map((item) => {
|
||||
return {
|
||||
label: item.code,
|
||||
|
@ -91,7 +91,7 @@ export default {
|
||||
params,
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
if ("list" in res.data) {
|
||||
@ -127,7 +127,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "查询":
|
||||
this.getList({ ...payload });
|
||||
@ -136,7 +136,7 @@ export default {
|
||||
},
|
||||
|
||||
handleDestroy(type, refresh) {
|
||||
console.log("[handleDestroy] ", type);
|
||||
//console.log("[handleDestroy] ", type);
|
||||
switch (type) {
|
||||
case "edit":
|
||||
this.editVisible = false;
|
||||
@ -151,7 +151,7 @@ export default {
|
||||
},
|
||||
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
switch (type) {
|
||||
case "delete": {
|
||||
// 找到删除的 prompt 字段
|
||||
@ -197,7 +197,7 @@ export default {
|
||||
.catch((err) => {});
|
||||
}
|
||||
case "edit": {
|
||||
console.log("[edit] ", data);
|
||||
//console.log("[edit] ", data);
|
||||
this.editVisible = true;
|
||||
this.$nextTick(() => {
|
||||
this.$refs.edit.init({
|
||||
@ -211,7 +211,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "view-detail-action": {
|
||||
console.log("[detail] ", data, data.techId);
|
||||
//console.log("[detail] ", data, data.techId);
|
||||
if (!data || !data.techId) {
|
||||
this.$message.warning("暂无详请可供查看");
|
||||
return;
|
||||
|
@ -7,21 +7,21 @@ export default function () {
|
||||
const tableProps = [
|
||||
{ type: "index", label: "序号" },
|
||||
// { prop: "updateTime", label: "上料时间", filter: timeFilter },
|
||||
{ prop: "materialName", label: "原料" },
|
||||
{ width: 100, prop: "materialName", label: "原料" },
|
||||
// { prop: "material", label: "原料编码" },
|
||||
{ prop: "qty", label: "上料量" },
|
||||
{ prop: "siloName1", label: "上料料仓1" },
|
||||
{ prop: "siloName2", label: "上料料仓2" },
|
||||
{ prop: "siloName3", label: "上料料仓3" },
|
||||
{ prop: "startTime", label: "开始上料时间", filter: timeFilter },
|
||||
{ prop: "endTime", label: "结束上料时间", filter: timeFilter },
|
||||
{ prop: "silo1Change", label: "料仓1变化" },
|
||||
{ prop: "silo2Change", label: "料仓2变化" },
|
||||
{ prop: "silo3Change", label: "料仓3变化" },
|
||||
{ prop: "statusDictValue", label: "破碎作业", filter: (val) => ["正常停止", "废除"][val] ?? "-" },
|
||||
{ width: 90, prop: "qty", label: "上料量[kg]", filter: val => (val != null) ? (+val).toFixed(0) : '-' },
|
||||
{ width: 100, prop: "siloName1", label: "上料料仓1" },
|
||||
{ width: 100, prop: "siloName2", label: "上料料仓2" },
|
||||
{ width: 100, prop: "siloName3", label: "上料料仓3" },
|
||||
{ width: 256, prop: "startTime", label: "开始上料时间", filter: timeFilter },
|
||||
{ width: 256, prop: "endTime", label: "结束上料时间", filter: timeFilter },
|
||||
{ width: 128, prop: "silo1Change", label: "料仓1变化[kg]", filter: val => (val != null) ? (+val).toFixed(0) : '-' },
|
||||
{ width: 128, prop: "silo2Change", label: "料仓2变化[kg]", filter: val => (val != null) ? (+val).toFixed(0) : '-' },
|
||||
{ width: 128, prop: "silo3Change", label: "料仓3变化[kg]", filter: val => (val != null) ? (+val).toFixed(0) : '-' },
|
||||
// { width: 128, prop: "statusDictValue", label: "破碎作业", filter: (val) => ["正常停止", "废除"][val] ?? "-" },
|
||||
// { prop: "description", label: "描述" },
|
||||
{ prop: "remark", label: "备注" },
|
||||
{ prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
{ width: 128, prop: "remark", label: "备注" },
|
||||
// { width: 256, prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
{
|
||||
prop: "operations",
|
||||
name: "操作",
|
||||
@ -60,7 +60,9 @@ export default function () {
|
||||
}
|
||||
};
|
||||
|
||||
const now = new Date().getTime();
|
||||
const now = new Date()
|
||||
const [y, m, d] = [now.getFullYear(), now.getMonth(), now.getDate()]
|
||||
const today = new Date(y, m, d, 0, 0, 0, 0).getTime()
|
||||
const headFormFields = [
|
||||
{
|
||||
prop: "material",
|
||||
@ -96,7 +98,7 @@ export default function () {
|
||||
"start-placeholder": "开始时间",
|
||||
"end-placeholder": "结束时间",
|
||||
},
|
||||
default: { value: [now - 3600 * 24 * 7 * 1000, now] },
|
||||
default: { value: [today - 3600 * 24 * 1000 * 7, today + 3600 * 1000 * 24] },
|
||||
},
|
||||
{
|
||||
button: {
|
||||
|
@ -9,19 +9,19 @@ export default function () {
|
||||
// { prop: "updateTime", label: "上料时间", filter: timeFilter },
|
||||
{ prop: "materialName", label: "原料" },
|
||||
// { prop: "material", label: "原料编码" },
|
||||
{ prop: "qty", label: "计划上料量" },
|
||||
{ prop: "qty", label: "计划上料量[kg]", filter: val => (val != null) ? (+val).toFixed(0) : '-' },
|
||||
{ prop: "siloName1", label: "上料料仓" },
|
||||
// { prop: "siloName2", label: "上料料仓2" },
|
||||
// { prop: "siloName3", label: "上料料仓3" },
|
||||
{ prop: "startTime", label: "开始上料时间", filter: timeFilter },
|
||||
{ prop: "endTime", label: "结束上料时间", filter: timeFilter },
|
||||
{ prop: "silo1Change", label: "料仓变化" },
|
||||
{ prop: "silo1Change", label: "料仓变化[kg]", filter: val => (val != null) ? (+val).toFixed(0) : '-' },
|
||||
// { prop: "silo2Change", label: "料仓2变化" },
|
||||
// { prop: "silo3Change", label: "料仓3变化" },
|
||||
{ prop: "statusDictValue", label: "破碎作业", filter: (val) => ["正常停止", "废除"][val] ?? "-" },
|
||||
// { prop: "statusDictValue", label: "破碎作业", filter: (val) => ["正常停止", "废除"][val] ?? "-" },
|
||||
// { prop: "description", label: "描述" },
|
||||
{ prop: "remark", label: "备注" },
|
||||
{ prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
// { prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
{
|
||||
prop: "operations",
|
||||
name: "操作",
|
||||
@ -60,15 +60,19 @@ export default function () {
|
||||
}
|
||||
};
|
||||
|
||||
const now = new Date().getTime();
|
||||
const now = new Date();
|
||||
const [y, m, d] = [now.getFullYear(), now.getMonth(), now.getDate()];
|
||||
const today = new Date(y, m, d, 0, 0, 0, 0).getTime();
|
||||
const headFormFields = [
|
||||
{
|
||||
prop: "material",
|
||||
label: "按原料搜索",
|
||||
// input: true,
|
||||
select: [],
|
||||
fieldOptionValue: "name", // 把料仓筛选条件的label改为展示code,而不是展示name
|
||||
complexSelect: [],
|
||||
fieldOptionLabel: 'code',
|
||||
fieldOptionValue: "code", // 把料仓筛选条件的label改为展示code,而不是展示name
|
||||
default: { value: "" },
|
||||
customLabels: ["description", "name"],
|
||||
fn: () => this.$http.get("/pms/material/page", { params: { page: 1, limit: 999 } }),
|
||||
bind: {
|
||||
placeholder: "请输入原料名",
|
||||
@ -96,7 +100,7 @@ export default function () {
|
||||
"start-placeholder": "开始时间",
|
||||
"end-placeholder": "结束时间",
|
||||
},
|
||||
default: { value: [now - 3600 * 24 * 7 * 1000, now] },
|
||||
default: { value: [today - 24 * 7 * 1000 * 3600, today + 3600 * 24 * 1000] },
|
||||
},
|
||||
{
|
||||
button: {
|
||||
|
@ -65,7 +65,14 @@ const DIALOG_CARPAYLOAD = "DialogCarPayload";
|
||||
|
||||
export default {
|
||||
name: "ListViewWithHead",
|
||||
components: { BaseSearchForm, BaseListTable, DialogWithMenu, DialogJustForm, DialogCarPayload, TemperatureDialog },
|
||||
components: {
|
||||
BaseSearchForm,
|
||||
BaseListTable,
|
||||
DialogWithMenu,
|
||||
DialogJustForm,
|
||||
DialogCarPayload,
|
||||
TemperatureDialog,
|
||||
},
|
||||
props: {
|
||||
tableConfig: {
|
||||
type: Object,
|
||||
@ -109,7 +116,7 @@ export default {
|
||||
},
|
||||
},
|
||||
activated() {
|
||||
console.log("list view with ehad activated..........", this.triggerUpdate);
|
||||
//console.log("list view with ehad activated..........", this.triggerUpdate);
|
||||
this.refreshLayoutKey = this.layoutTable();
|
||||
},
|
||||
watch: {
|
||||
@ -141,9 +148,9 @@ export default {
|
||||
};
|
||||
},
|
||||
inject: ["urls"],
|
||||
mounted() {
|
||||
this.initDataWhenLoad && this.getList();
|
||||
},
|
||||
// mounted() {
|
||||
// this.initDataWhenLoad && this.getList();
|
||||
// },
|
||||
methods: {
|
||||
/** 获取 列表数据 */
|
||||
getList(queryParams) {
|
||||
@ -170,6 +177,7 @@ export default {
|
||||
// if (this.urls.pageIsPostApi) {
|
||||
// } else {
|
||||
// 默认是 get 方式请求 page
|
||||
// console.log("params: ", params);
|
||||
this.$http[this.urls.pageIsPostApi ? "post" : "get"](
|
||||
this.urls.page,
|
||||
this.urls.pageIsPostApi
|
||||
@ -181,7 +189,7 @@ export default {
|
||||
}
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
// page 场景:
|
||||
@ -231,7 +239,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -304,7 +312,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "status": {
|
||||
console.log("status", data);
|
||||
//console.log("status", data);
|
||||
// TODO: 类似于这种字符串,可以统一集中到一个文件里
|
||||
const { id, code } = data;
|
||||
const queryCondition = { id, code };
|
||||
@ -333,7 +341,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "to-bom-detail": {
|
||||
// console.log('to-bom-detail', data.name)
|
||||
// //console.log('to-bom-detail', data.name)
|
||||
// 查看配方详情
|
||||
return this.$router.push({
|
||||
name: "pms-bomDetails",
|
||||
@ -394,7 +402,7 @@ export default {
|
||||
});
|
||||
}
|
||||
case "preview": {
|
||||
console.log("[PREVIEW] data", data);
|
||||
//console.log("[PREVIEW] data", data);
|
||||
// report preview
|
||||
return this.$router.push({
|
||||
name: "pms-reportPreview",
|
||||
@ -404,7 +412,7 @@ export default {
|
||||
});
|
||||
}
|
||||
case "design": {
|
||||
console.log("[DESIGN] data", data);
|
||||
//console.log("[DESIGN] data", data);
|
||||
// report design
|
||||
return this.$router.push({
|
||||
name: "pms-reportDesign",
|
||||
@ -415,7 +423,9 @@ export default {
|
||||
}
|
||||
case "detach": {
|
||||
return this.$http
|
||||
.post(this.urls.detach, data /* { id: data } */, { headers: { "Content-Type": "application/json" } })
|
||||
.post(this.urls.detach, data /* { id: data } */, {
|
||||
headers: { "Content-Type": "application/json" },
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
this.$message({
|
||||
@ -470,7 +480,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "新增":
|
||||
this.openDialog();
|
||||
@ -512,7 +522,7 @@ export default {
|
||||
});
|
||||
}
|
||||
});
|
||||
console.log("查询", this.cachedSearchCondition);
|
||||
//console.log("查询", this.cachedSearchCondition);
|
||||
this.getList(this.cachedSearchCondition);
|
||||
break;
|
||||
}
|
||||
@ -551,7 +561,7 @@ export default {
|
||||
});
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
//console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
this.$refs["edit-dialog"].init(/** some args... */ row_id, detail_mode, tag_info, extraParams);
|
||||
});
|
||||
},
|
||||
|
@ -2,18 +2,57 @@ const colors = {
|
||||
line: '#555'
|
||||
}
|
||||
|
||||
export default (x_data, y_data) => ({
|
||||
export default ({ x_data, y_data }, graph2) => {
|
||||
// debugger;
|
||||
|
||||
return {
|
||||
title: {
|
||||
text: "窑车温度",
|
||||
},
|
||||
grid: {
|
||||
show: true,
|
||||
top: 96,
|
||||
left: 52,
|
||||
right: 32,
|
||||
bottom: 24,
|
||||
|
||||
legend: {
|
||||
icon: 'circle',
|
||||
top: 280,
|
||||
left: 'center',
|
||||
itemHeight: 8,
|
||||
itemWidth: 8
|
||||
},
|
||||
xAxis: {
|
||||
|
||||
tooltip: {
|
||||
show: true,
|
||||
trigger: 'axis',
|
||||
formatter: function (params) {
|
||||
// debugger;
|
||||
return `<span>位置${params[0].name}</span>` + params.map(item => {
|
||||
return item.value ? `<div style="min-width: 180px; display: flex; justify-content: space-between;"><span>${item.seriesName}</span><span style="color: #888">${item.value}${item.seriesName == 'lambda' ? '' : item.seriesName == '温度' ? '℃' : 'm³'}</span></div>` : ''
|
||||
}).join('')
|
||||
}
|
||||
// formatter:
|
||||
// '<strong style="font-size: 16px">位置</strong> ({b}) <span style="font-size: 16px; font-weight: bold;">{c}</span> ℃'
|
||||
},
|
||||
|
||||
grid: [
|
||||
{
|
||||
id: 'temp-grid',
|
||||
top: 72,
|
||||
left: 56,
|
||||
right: 56,
|
||||
bottom: 24,
|
||||
height: 180,
|
||||
},
|
||||
{
|
||||
id: 'lambda-grid',
|
||||
top: 320,
|
||||
left: 56,
|
||||
right: 56,
|
||||
bottom: 24,
|
||||
height: 180,
|
||||
}
|
||||
],
|
||||
xAxis: [
|
||||
{
|
||||
gridIndex: 0,
|
||||
id: 'temp-x-axis',
|
||||
type: "category",
|
||||
data: Array(65)
|
||||
.fill(1)
|
||||
@ -26,15 +65,34 @@ export default (x_data, y_data) => ({
|
||||
},
|
||||
},
|
||||
},
|
||||
yAxis: {
|
||||
{
|
||||
gridIndex: 1,
|
||||
id: 'lambda-x-axis',
|
||||
data: Array(65)
|
||||
.fill(1)
|
||||
.map((val, index) => {
|
||||
return val + index;
|
||||
}),
|
||||
axisLine: {
|
||||
lineStyle: {
|
||||
color: colors.line
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
yAxis: [
|
||||
|
||||
{
|
||||
gridIndex: 0,
|
||||
type: "value",
|
||||
interval: 20,
|
||||
name: "温度",
|
||||
nameTextStyle: {
|
||||
fontSize: 18,
|
||||
fontSize: 14,
|
||||
align: "right",
|
||||
verticalAlign: "bottom",
|
||||
lineHeight: 36,
|
||||
padding: 10,
|
||||
lineHeight: 20,
|
||||
padding: 6,
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
@ -46,25 +104,107 @@ export default (x_data, y_data) => ({
|
||||
formatter: '{value} ℃'
|
||||
},
|
||||
splitLine: {
|
||||
show: false,
|
||||
lineStyle: {
|
||||
color: '#ddd'
|
||||
}
|
||||
},
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
formatter: '<strong style="font-size: 16px">位置</strong> ({b}) <span style="font-size: 16px; font-weight: bold;">{c}</span> ℃'
|
||||
{
|
||||
gridIndex: 1,
|
||||
type: "value",
|
||||
interval: 20,
|
||||
name: "消耗量",
|
||||
nameTextStyle: {
|
||||
fontSize: 14,
|
||||
align: "right",
|
||||
verticalAlign: "bottom",
|
||||
lineHeight: 20,
|
||||
padding: 6,
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: colors.line,
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
formatter: '{value} m³'
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: '#ddd'
|
||||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
gridIndex: 0,
|
||||
type: "value",
|
||||
name: "lambda",
|
||||
nameTextStyle: {
|
||||
fontSize: 14,
|
||||
align: "left",
|
||||
verticalAlign: "bottom",
|
||||
lineHeight: 20,
|
||||
padding: 6,
|
||||
},
|
||||
axisLine: {
|
||||
show: true,
|
||||
lineStyle: {
|
||||
color: colors.line,
|
||||
},
|
||||
},
|
||||
axisLabel: {
|
||||
formatter: '{value}'
|
||||
},
|
||||
splitLine: {
|
||||
lineStyle: {
|
||||
color: '#ddd'
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
],
|
||||
|
||||
dataZoom: {
|
||||
type: 'inside'
|
||||
},
|
||||
|
||||
series: [
|
||||
{
|
||||
id: 'temp-series',
|
||||
name: '温度',
|
||||
data: y_data,
|
||||
xAxisIndex: 0,
|
||||
yAxisIndex: 0,
|
||||
// data: Array(65)
|
||||
// .fill(1)
|
||||
// .map((val) => Math.floor(Math.random() * 1000)),
|
||||
type: "line",
|
||||
},
|
||||
{
|
||||
id: 'gas-series',
|
||||
name: '燃气消耗量(m³)',
|
||||
xAxisIndex: 1,
|
||||
yAxisIndex: 1,
|
||||
data: graph2?.gas || [],
|
||||
// data: Array(65)
|
||||
// .fill(1)
|
||||
// .map((val) => Math.floor(Math.random() * 128)),
|
||||
type: "line",
|
||||
},
|
||||
{
|
||||
id: 'lambda-series',
|
||||
name: 'lambda',
|
||||
// data: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 33, 11, 21, 3, 5, 67, 8, 88, 90, 12, 32, 2, 31, 33, null, null],
|
||||
data: [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, ...(graph2?.lambda || []), null, null],
|
||||
xAxisIndex: 0,
|
||||
yAxisIndex: 2,
|
||||
// data: Array(65)
|
||||
// .fill(1)
|
||||
// .map((val) => Math.floor(Math.random() * 1000)),
|
||||
type: "line",
|
||||
},
|
||||
],
|
||||
})
|
||||
}
|
||||
}
|
@ -8,7 +8,8 @@ export default [
|
||||
{ width: 60, prop: "code", label: "位置" },
|
||||
{ width: 60, prop: "temp1", label: "温度" },
|
||||
{ width: 80, prop: "press1", label: "窑内压力" },
|
||||
{ width: 80, prop: "press2", label: "车下压力" },
|
||||
{ width: 128, prop: "press2", label: "燃气消耗量(m3)" },
|
||||
{ prop: "remark", label: "lambda" },
|
||||
{ prop: "createTime", label: "时间", filter: timeFilter },
|
||||
// { prop: "endTime", label: "结束时间", filter: timeFilter },
|
||||
// {
|
||||
|
@ -3,15 +3,14 @@
|
||||
:visible="visible"
|
||||
title="烧制温度"
|
||||
class="temperature-dialog"
|
||||
width="80%"
|
||||
width="90%"
|
||||
@close="handleClose"
|
||||
:destroy-on-close="false"
|
||||
:close-on-click-modal="false"
|
||||
>
|
||||
:close-on-click-modal="false">
|
||||
<div class="data-list">
|
||||
<BaseListTable
|
||||
v-loading="tableLoading"
|
||||
style="height: 85%"
|
||||
style="height: 90%"
|
||||
:table-config="{ height: '100%' }"
|
||||
:column-config="tableConfig"
|
||||
:table-data="dataList"
|
||||
@ -30,8 +29,9 @@
|
||||
:total="totalPage"
|
||||
layout="total, sizes, prev, pager, next, jumper"></el-pagination>
|
||||
</div>
|
||||
<div class="temp-chart" style="height: 300px;">
|
||||
<div id="temp-chart" class="temp-chart__inner" style="height: 100%;" />
|
||||
<div class="temp-chart" style="height: 100%; overflow: hidden">
|
||||
<div id="temp-chart" class="temp-chart__inner" style="height: 100%" />
|
||||
<!-- <div id="lambda-chart" class="lambda-chart__inner" style="height: 50%; background: #f001;" /> -->
|
||||
</div>
|
||||
</el-dialog>
|
||||
</template>
|
||||
@ -80,6 +80,50 @@ export default {
|
||||
});
|
||||
},
|
||||
getList() {
|
||||
// this.dataList = [
|
||||
// {
|
||||
// code: "1",
|
||||
// temp1: 39,
|
||||
// press1: 12,
|
||||
// press2: 10,
|
||||
// remark: 9.9,
|
||||
// createTime: "2021-09-09 12:00:00",
|
||||
// },
|
||||
// {
|
||||
// code: "2",
|
||||
// temp1: 49,
|
||||
// press1: 11,
|
||||
// press2: 32,
|
||||
// remark: 9.9,
|
||||
// createTime: "2021-09-09 12:00:00",
|
||||
// },
|
||||
// {
|
||||
// code: "3",
|
||||
// temp1: 59,
|
||||
// press1: 32,
|
||||
// press2: 43,
|
||||
// remark: 39,
|
||||
// createTime: "2021-09-09 12:00:00",
|
||||
// },
|
||||
// {
|
||||
// code: "1",
|
||||
// temp1: 39,
|
||||
// press1: 21,
|
||||
// press2: 94,
|
||||
// remark: 19,
|
||||
// createTime: "2021-09-09 12:00:00",
|
||||
// },
|
||||
// {
|
||||
// code: "1",
|
||||
// temp1: 22,
|
||||
// press1: 55,
|
||||
// press2: 42,
|
||||
// remark: 98,
|
||||
// createTime: "2021-09-09 12:00:00",
|
||||
// },
|
||||
// ];
|
||||
// return;
|
||||
|
||||
this.tableLoading = true;
|
||||
this.$http
|
||||
.post("/pms/kilnPosHistory/pageView", {
|
||||
@ -88,41 +132,38 @@ export default {
|
||||
hisId: this.hisId,
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("temp dialog res", res);
|
||||
//console.log("temp dialog res", res);
|
||||
|
||||
this.tableLoading = false;
|
||||
if (res.code === 0) {
|
||||
if ("list" in res.data) {
|
||||
this.dataList = res.data.list;
|
||||
this.totalPage = res.data.total
|
||||
this.totalPage = res.data.total;
|
||||
} else if (Array.isArray(res.data)) {
|
||||
this.dataList = res.data;
|
||||
this.totalPage = res.data.length
|
||||
this.totalPage = res.data.length;
|
||||
} // else ...
|
||||
} else {
|
||||
this.dataList.splice(0);
|
||||
this.totalPage = 0
|
||||
this.totalPage = 0;
|
||||
}
|
||||
// this.dataList = [
|
||||
// { id: 1, code: 1, press1: 1, press2: 1, createTime: "2023-4-21 01:00:00", temp1: 1000 },
|
||||
// { id: 2, code: 2, press1: 2, press2: 2, createTime: "2023-4-21 02:00:00", temp1: 2000 },
|
||||
// { id: 3, code: 3, press1: 3, press2: 3, createTime: "2023-4-21 03:00:00", temp1: 3000 },
|
||||
// { id: 4, code: 4, press1: 4, press2: 4, createTime: "2023-4-21 04:00:00", temp1: 4000 },
|
||||
// { id: 5, code: 5, press1: 5, press2: 5, createTime: "2023-4-21 05:00:00", temp1: 5000 },
|
||||
// { id: 6, code: 6, press1: 6, press2: 6, createTime: "2023-4-21 06:00:00", temp1: 6000 },
|
||||
// { id: 7, code: 7, press1: 7, press2: 7, createTime: "2023-4-21 07:00:00", temp1: 7000 },
|
||||
// { id: 8, code: 8, press1: 8, press2: 8, createTime: "2023-4-21 08:00:00", temp1: 8000 },
|
||||
// { id: 9, code: 9, press1: 9, press2: 9, createTime: "2023-4-21 09:00:00", temp1: 9000 },
|
||||
// { id: 10, code: 10, press1: 10, press2: 10, createTime: "2023-4-21 10:00:00", temp1: 10000 },
|
||||
// { id: 11, code: 11, press1: 11, press2: 11, createTime: "2023-4-21 11:00:00", temp1: 11000 },
|
||||
// { id: 12, code: 12, press1: 12, press2: 12, createTime: "2023-4-21 12:00:00", temp1: 12000 },
|
||||
// ];
|
||||
});
|
||||
},
|
||||
drawChart() {
|
||||
// 根据 dataList 绘制折线图
|
||||
if (!this.chart) this.chart = echarts.init(document.getElementById("temp-chart"));
|
||||
// const y_data = Array(65).fill(0)
|
||||
this.chart.setOption(loadChartConfig(null, this.dataList.map(i => i.temp1)));
|
||||
// debugger;
|
||||
this.chart.setOption(
|
||||
loadChartConfig({
|
||||
x_data: null,
|
||||
y_data: this.dataList.map((i) => i.temp1),
|
||||
},
|
||||
{
|
||||
gas: this.dataList.map((i) => i.press2),
|
||||
lambda: this.dataList.map((i) => i.remark),
|
||||
})
|
||||
);
|
||||
},
|
||||
handleOperate() {},
|
||||
handlePageChange(page) {
|
||||
@ -152,7 +193,7 @@ export default {
|
||||
.data-list,
|
||||
.temp-chart {
|
||||
/* border: 1px solid #ccc; */
|
||||
width: 35%;
|
||||
width: 45%;
|
||||
overflow-y: auto;
|
||||
position: relative;
|
||||
}
|
||||
@ -161,7 +202,7 @@ export default {
|
||||
flex: 1;
|
||||
/* margin-left: 18px; */
|
||||
padding-left: 10px;
|
||||
margin-left: 10px;
|
||||
|
||||
/* border-left: 1px solid #ccc; */
|
||||
/* background-color: lightblue; */
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent";
|
||||
import StateSelect from "@/components/StateSelect.vue";
|
||||
import request from "@/utils/request";
|
||||
// import StateSelect from "@/components/StateSelect.vue";
|
||||
// import request from "@/utils/request";
|
||||
import { timeFilter } from "@/utils/filters";
|
||||
|
||||
export default function () {
|
||||
@ -8,7 +8,7 @@ export default function () {
|
||||
// { type: 'index', label: '序号' },
|
||||
// { prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
{ prop: "code", label: "窑车号" },
|
||||
{ prop: "stateDictValue", label: "状态", subcomponent: StateSelect },
|
||||
// { prop: "stateDictValue", label: "状态", subcomponent: StateSelect },
|
||||
// { prop: "stateDictValue", label: "状态", filter: v => (v !== null && v !== undefined) ? ['没有数据', '正常', '判废', '过渡'][v] : '-' }, // subcomponent
|
||||
{ prop: "orderCode", label: "订单号" },
|
||||
{ prop: "posCode", label: "位置" },
|
||||
@ -28,7 +28,9 @@ export default function () {
|
||||
},
|
||||
];
|
||||
|
||||
const now = new Date().getTime();
|
||||
const now = new Date();
|
||||
const [y, m, d] = [now.getFullYear(), now.getMonth(), now.getDate()];
|
||||
const today = new Date(y, m, d, 0, 0, 0, 0).getTime();
|
||||
const headFormFields = [
|
||||
{
|
||||
input: true,
|
||||
@ -58,7 +60,7 @@ export default function () {
|
||||
"start-placeholder": "开始时间",
|
||||
"end-placeholder": "结束时间",
|
||||
},
|
||||
default: { value: [now - 3600 * 24 * 7 * 1000, now] },
|
||||
default: { value: [today - 24 * 7 * 1000 * 3600, today + 3600 * 24 * 1000] },
|
||||
},
|
||||
{
|
||||
button: {
|
||||
@ -81,7 +83,7 @@ export default function () {
|
||||
const dialogJustFormConfigs = null;
|
||||
|
||||
const carPayloadDialogConfigs = {
|
||||
dialogWidth: "70%",
|
||||
dialogWidth: "100%",
|
||||
carPayloadDialog: true,
|
||||
clickModalToClose: false,
|
||||
tableConfig: {
|
||||
@ -94,6 +96,9 @@ export default function () {
|
||||
{ width: 80, prop: "orderCate", label: "订单子号" },
|
||||
{ prop: "bomCode", label: "配方" },
|
||||
{ prop: "shapeCode", label: "砖型" },
|
||||
{ prop: "weight", label: "重量" },
|
||||
{ width: 128, prop: "gas", label: "燃气用量(m³)" },
|
||||
{ width: 144, prop: "gp", label: "燃气(m³)/砖(kg)" },
|
||||
{ width: 80, prop: "qty", label: "订单数量" },
|
||||
{ width: 72, prop: "goodqty", label: "合格数" },
|
||||
{ width: 72, prop: "badqty", label: "废砖数" },
|
||||
|
@ -27,7 +27,8 @@ export default {
|
||||
// },
|
||||
// },
|
||||
data() {
|
||||
const { tableConfig, headFormConfigs, carPayloadDialogConfigs, urls, dialogConfigs } = initConfig.call(this);
|
||||
const { tableConfig, headFormConfigs, carPayloadDialogConfigs, urls, dialogConfigs } =
|
||||
initConfig.call(this);
|
||||
return {
|
||||
carPayloadDialogConfigs,
|
||||
tableConfig,
|
||||
@ -39,7 +40,6 @@ export default {
|
||||
};
|
||||
},
|
||||
activated() {
|
||||
console.log("activated", this.$route.query)
|
||||
this.code = this.$route.query.code || "";
|
||||
this.triggerUpdateKey = Math.random().toString();
|
||||
},
|
||||
|
144
src/views/modules/pms/carMaintain/config.js
Normal file
144
src/views/modules/pms/carMaintain/config.js
Normal file
@ -0,0 +1,144 @@
|
||||
import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent";
|
||||
import request from "@/utils/request";
|
||||
import { timeFilter, dictFilter } from '@/utils/filters'
|
||||
import { getDictDataList } from '@/utils'
|
||||
|
||||
export default function () {
|
||||
const tableProps = [
|
||||
{ type: 'index', label: '序号' },
|
||||
{ prop: "code", label: "窑车号" },
|
||||
{ prop: "typeDictValue", label: "维修类别", filter: dictFilter('carMain') },
|
||||
{ prop: "description", label: "维修描述" },
|
||||
{ prop: "remark", label: "备注" },
|
||||
{ prop: "startTime", label: "开始时间", filter: timeFilter },
|
||||
{ prop: "endTime", label: "结束时间", filter: timeFilter },
|
||||
// { prop: "prtTag", label: "是否打印标签", filter: val => ({ yes: '是', no: '否' })[val] ?? '-' },
|
||||
{ prop: "creatorName", label: "创建人" },
|
||||
// { prop: "remark", label: "创建时间" },
|
||||
{ prop: "createTime", label: "创建时间", filter: timeFilter },
|
||||
{
|
||||
prop: "operations",
|
||||
name: "操作",
|
||||
fixed: "right",
|
||||
width: 90,
|
||||
subcomponent: TableOperaionComponent,
|
||||
options: [{ name: "edit", label: "编辑", icon: "edit-outline" }, { name: "delete", icon: "delete", label: "删除", emitFull: true, permission: "pms:carMaintain:delete" }],
|
||||
},
|
||||
];
|
||||
|
||||
const now = new Date();
|
||||
const [y, m, d] = [now.getFullYear(), now.getMonth(), now.getDate()];
|
||||
const today = new Date(y, m, d, 0, 0, 0, 0).getTime();
|
||||
const headFormFields = [
|
||||
{
|
||||
prop: 'code',
|
||||
label: "窑车号",
|
||||
input: true,
|
||||
default: { value: "" },
|
||||
bind: {
|
||||
placeholder: '请输入窑车号'
|
||||
}
|
||||
},
|
||||
{
|
||||
timerange: true,
|
||||
prop: "timerange",
|
||||
label: "时间段",
|
||||
bind: {
|
||||
placeholder: "请选择时间段",
|
||||
type: "datetimerange",
|
||||
"start-placeholder": "开始时间",
|
||||
"end-placeholder": "结束时间",
|
||||
},
|
||||
default: { value: [today - 24 * 7 * 1000 * 3600, today + 3600 * 24 * 1000] },
|
||||
},
|
||||
{
|
||||
button: {
|
||||
type: "primary",
|
||||
name: "查询",
|
||||
},
|
||||
},
|
||||
{
|
||||
button: {
|
||||
type: "primary",
|
||||
name: "新增",
|
||||
permission: "pms:carMaintain:save"
|
||||
},
|
||||
bind: {
|
||||
plain: true,
|
||||
}
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
* dialog config 有两个版本,一个适用于 DialogWithMenu 组件,另一个适用于 DialogJustForm 组件
|
||||
* 适用于 DialogWithMenu 组件的配置示例详见 blenderStep/config.js
|
||||
* 此为后者的配置:
|
||||
*/
|
||||
const dialogJustFormConfigs = {
|
||||
form: {
|
||||
rows: [
|
||||
[
|
||||
{
|
||||
input: true,
|
||||
label: "窑车号",
|
||||
prop: "code",
|
||||
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "请输入窑车号" },
|
||||
},
|
||||
{
|
||||
select: true,
|
||||
label: "维修类别",
|
||||
prop: "typeDictValue",
|
||||
options: getDictDataList('carMain').map(_ => ({ label: _.dictLabel, value: _.dictValue })),
|
||||
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "请输入维修类别" },
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
datetime: true,
|
||||
label: "开始时间",
|
||||
prop: "startTime",
|
||||
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "请选择开始时间", type: "datetime" },
|
||||
},
|
||||
{
|
||||
datetime: true,
|
||||
label: "结束时间",
|
||||
prop: "endTime",
|
||||
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "请选择结束时间", type: "datetime" },
|
||||
},
|
||||
],
|
||||
[{ textarea: true, label: "维修描述", prop: "description", elparams: { placeholder: "维修描述" } }],
|
||||
[{ input: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }],
|
||||
],
|
||||
operations: [
|
||||
{ name: "add", label: "保存", type: "primary", permission: "pms:carMaintain:save", showOnEdit: false },
|
||||
{ name: "update", label: "更新", type: "primary", permission: "pms:carMaintain:update", showOnEdit: true },
|
||||
{ name: "reset", label: "重置", type: "warning", showAlways: true },
|
||||
],
|
||||
},
|
||||
};
|
||||
// 备注:弹窗弹出的时间和网速有关......
|
||||
|
||||
return {
|
||||
dialogConfigs: dialogJustFormConfigs,
|
||||
tableConfig: {
|
||||
table: null, // 此处可省略,el-table 上的配置项
|
||||
column: tableProps, // el-column-item 上的配置项
|
||||
},
|
||||
headFormConfigs: {
|
||||
rules: null, // 名称是由 BaseSearchForm.vue 组件固定的
|
||||
fields: headFormFields, // 名称是由 BaseSearchForm.vue 组件固定的
|
||||
},
|
||||
urls: {
|
||||
base: "/pms/carMaintain",
|
||||
page: "/pms/carMaintain/pageView",
|
||||
pageIsPostApi: true
|
||||
// subase: '/pms/blenderStepParam',
|
||||
// subpage: '/pms/blenderStepParam/page',
|
||||
// more...
|
||||
},
|
||||
};
|
||||
}
|
35
src/views/modules/pms/carMaintain/index.vue
Normal file
35
src/views/modules/pms/carMaintain/index.vue
Normal file
@ -0,0 +1,35 @@
|
||||
<template>
|
||||
<ListViewWithHead
|
||||
:table-config="tableConfig"
|
||||
:head-config="headFormConfigs"
|
||||
:dialog-configs="dialogConfigs" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import initConfig from "./config";
|
||||
import ListViewWithHead from "@/views/atomViews/ListViewWithHead.vue";
|
||||
|
||||
export default {
|
||||
name: "ProductionLineView",
|
||||
components: { ListViewWithHead },
|
||||
provide() {
|
||||
return {
|
||||
urls: this.allUrls,
|
||||
};
|
||||
},
|
||||
data() {
|
||||
const { tableConfig, headFormConfigs, urls, dialogConfigs } = initConfig.call(this);
|
||||
return {
|
||||
tableConfig,
|
||||
headFormConfigs,
|
||||
allUrls: urls,
|
||||
dialogConfigs,
|
||||
};
|
||||
},
|
||||
created() {},
|
||||
mounted() {},
|
||||
methods: {},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
261
src/views/modules/pms/carOrderReport/config.js
Normal file
261
src/views/modules/pms/carOrderReport/config.js
Normal file
@ -0,0 +1,261 @@
|
||||
import TableOperaionComponent from "@/components/noTemplateComponents/operationComponent";
|
||||
// import switchBtn from "@/components/noTemplateComponents/switchBtn";
|
||||
// import QuillRichInput from "@/components/noTemplateComponents/richInput";
|
||||
// import request from "@/utils/request";
|
||||
import { timeFilter } from "@/utils/filters";
|
||||
|
||||
export default function () {
|
||||
const tableProps = [
|
||||
// 多选框
|
||||
{ type: "selection", width: 60, align: "center" },
|
||||
{ width: 128, prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
{ width: 128, prop: "updaterName", label: "更改人" },
|
||||
{ width: 128, prop: "posCode", label: "位置" },
|
||||
{ width: 72, prop: "code", label: "窑车号" },
|
||||
{ width: 128, prop: "orderCode", label: "订单号" },
|
||||
{ width: 88, prop: "orderCate", label: "订单子号" },
|
||||
{ width: 72, prop: "shapeCode", label: "砖型" },
|
||||
{ width: 256, prop: "brand", label: "配方" },
|
||||
{ width: 128, prop: "goodqty", label: "合格数量" },
|
||||
{ width: 128, prop: "badqty", label: "报废数量" },
|
||||
// { prop: "typeDictValue", label: "过渡车", filter: val => ['否', '是'][val] },
|
||||
// { prop: "enabled", label: "状态", subcomponent: switchBtn }, // subcomponent
|
||||
{
|
||||
width: 128,
|
||||
prop: "team",
|
||||
label: "班次",
|
||||
filter: (val) => (val != null ? ["早班", "中班", "晚班"][val] : "-"),
|
||||
},
|
||||
{
|
||||
width: 128,
|
||||
prop: "report",
|
||||
label: "报工",
|
||||
filter: (val) => (val != null ? ["未报工", "已报工"][val] : "-"),
|
||||
},
|
||||
{ width: 128, prop: "rtime", label: "报工时间", filter: timeFilter },
|
||||
{
|
||||
prop: "operations",
|
||||
name: "操作",
|
||||
fixed: "right",
|
||||
width: 90,
|
||||
subcomponent: TableOperaionComponent,
|
||||
options: [
|
||||
{ name: "edit", label: "编辑", icon: "edit-outline", enable: (row) => row.report == 0 },
|
||||
// {
|
||||
// name: "delete",
|
||||
// icon: "delete",
|
||||
// label: "删除",
|
||||
// emitFull: true,
|
||||
// permission: "pms:carOrderReport:delete",
|
||||
// },
|
||||
],
|
||||
},
|
||||
];
|
||||
|
||||
const now = new Date();
|
||||
const [y, m, d] = [now.getFullYear(), now.getMonth(), now.getDate()];
|
||||
const today = new Date(y, m, d, 0, 0, 0, 0).getTime();
|
||||
const headFormFields = [
|
||||
{
|
||||
prop: "orderCode",
|
||||
label: "订单号",
|
||||
input: true,
|
||||
default: { value: "" },
|
||||
bind: {
|
||||
placeholder: "请输入订单号",
|
||||
},
|
||||
},
|
||||
{
|
||||
prop: "carCode",
|
||||
label: "窑车号",
|
||||
input: true,
|
||||
default: { value: "" },
|
||||
bind: {
|
||||
placeholder: "请输入窑车号",
|
||||
},
|
||||
},
|
||||
{
|
||||
prop: "team",
|
||||
label: "班次",
|
||||
select: [
|
||||
{ label: "早班", value: "0" },
|
||||
{ label: "中班", value: "1" },
|
||||
{ label: "晚班", value: "2" },
|
||||
],
|
||||
default: { value: "" },
|
||||
bind: {
|
||||
placeholder: "请选择班次",
|
||||
},
|
||||
},
|
||||
{
|
||||
prop: "report",
|
||||
label: "报工",
|
||||
select: [
|
||||
{ label: "未报工", value: "0" },
|
||||
{ label: "已报工", value: "1" },
|
||||
],
|
||||
default: { value: "0" },
|
||||
bind: {
|
||||
placeholder: "请选择报工状态",
|
||||
},
|
||||
},
|
||||
{
|
||||
prop: "pos",
|
||||
label: "压机",
|
||||
select: [
|
||||
{ label: "压机1", value: "1" },
|
||||
{ label: "压机2", value: "7" },
|
||||
],
|
||||
bind: {
|
||||
placeholder: "请选择压机",
|
||||
},
|
||||
},
|
||||
{
|
||||
timerange: true,
|
||||
prop: "timerange",
|
||||
label: "时间段",
|
||||
default: { value: [now - 3600 * 24 * 7 * 1000, now] },
|
||||
bind: {
|
||||
placeholder: "请选择时间段",
|
||||
type: "datetimerange",
|
||||
"start-placeholder": "开始时间",
|
||||
"end-placeholder": "结束时间",
|
||||
},
|
||||
default: { value: [today - 24 * 7 * 1000 * 3600, today + 3600 * 24 * 1000] },
|
||||
},
|
||||
{
|
||||
button: {
|
||||
type: "primary",
|
||||
name: "查询",
|
||||
},
|
||||
},
|
||||
{
|
||||
button: {
|
||||
type: "primary",
|
||||
name: "报工",
|
||||
permission: "pms:carOrderReport:report",
|
||||
},
|
||||
bind: {
|
||||
plain: true,
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
/**
|
||||
* dialog config 有两个版本,一个适用于 DialogWithMenu 组件,另一个适用于 DialogJustForm 组件
|
||||
* 适用于 DialogWithMenu 组件的配置示例详见 blenderStep/config.js
|
||||
* 此为后者的配置:
|
||||
*/
|
||||
const dialogJustFormConfigs = {
|
||||
clickModalToClose: false,
|
||||
form: {
|
||||
rows: [
|
||||
[
|
||||
{
|
||||
forceDisabled: true,
|
||||
label: "窑车号",
|
||||
prop: "code",
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "请输入窑车号" },
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
forceDisabled: true,
|
||||
label: "订单号",
|
||||
prop: "orderCode",
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "请输入订单号" },
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
forceDisabled: true,
|
||||
label: "订单子号",
|
||||
prop: "orderCate",
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "请输入订单子号" },
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
input: true,
|
||||
label: "合格数量",
|
||||
prop: "goodqty",
|
||||
rules: [
|
||||
{ required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入正确的数字类型",
|
||||
trigger: "blur",
|
||||
transform: (val) => Number(val),
|
||||
},
|
||||
],
|
||||
elparams: { placeholder: "请输入合格数量" },
|
||||
},
|
||||
],
|
||||
[
|
||||
{
|
||||
input: true,
|
||||
label: "报废数量",
|
||||
prop: "badqty",
|
||||
rules: [
|
||||
{ required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
{
|
||||
type: "number",
|
||||
message: "请输入正确的数字类型",
|
||||
trigger: "blur",
|
||||
transform: (val) => Number(val),
|
||||
},
|
||||
],
|
||||
elparams: { placeholder: "请输入报废数量" },
|
||||
},
|
||||
],
|
||||
// [
|
||||
// {
|
||||
// richInput: true,
|
||||
// label: "描述信息",
|
||||
// prop: "description",
|
||||
// },
|
||||
// ],
|
||||
// [{ input: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }],
|
||||
],
|
||||
operations: [
|
||||
{
|
||||
name: "add",
|
||||
label: "保存",
|
||||
type: "primary",
|
||||
permission: "pms:carOrderReport:save",
|
||||
showOnEdit: false,
|
||||
},
|
||||
{
|
||||
name: "update",
|
||||
label: "更新",
|
||||
type: "primary",
|
||||
permission: "pms:carOrderReport:update",
|
||||
showOnEdit: true,
|
||||
},
|
||||
{ name: "reset", label: "重置", type: "warning", showAlways: true },
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
return {
|
||||
dialogConfigs: dialogJustFormConfigs,
|
||||
tableConfig: {
|
||||
table: null, // 此处可省略,el-table 上的配置项
|
||||
column: tableProps, // el-column-item 上的配置项
|
||||
},
|
||||
headFormConfigs: {
|
||||
rules: null, // 名称是由 BaseSearchForm.vue 组件固定的
|
||||
fields: headFormFields, // 名称是由 BaseSearchForm.vue 组件固定的
|
||||
},
|
||||
urls: {
|
||||
base: "/pms/carOrderReport",
|
||||
page: "/pms/carOrderReport/pageView",
|
||||
pageIsPostApi: true,
|
||||
reportPre: "/pms/workReport/pressReportPre",
|
||||
report: "/pms/workReport/pressReport",
|
||||
},
|
||||
};
|
||||
}
|
44
src/views/modules/pms/carOrderReport/index.vue
Normal file
44
src/views/modules/pms/carOrderReport/index.vue
Normal file
@ -0,0 +1,44 @@
|
||||
<template>
|
||||
<ListViewWithHead
|
||||
:table-config="tableConfig"
|
||||
:head-config="headFormConfigs"
|
||||
:dialog-configs="dialogConfigs"
|
||||
:listQueryExtra="['carCode', 'orderCode', 'team', { report: 0, startTime: now[0], endTime: now[1] }]" />
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import initConfig from "./config";
|
||||
import ListViewWithHead from "@/views/atomViews/ListViewWithHead.vue";
|
||||
import moment from "moment";
|
||||
|
||||
export default {
|
||||
name: "CarView",
|
||||
components: { ListViewWithHead },
|
||||
provide() {
|
||||
return {
|
||||
urls: this.allUrls,
|
||||
};
|
||||
},
|
||||
data() {
|
||||
const { tableConfig, headFormConfigs, urls, dialogConfigs } = initConfig.call(this);
|
||||
return {
|
||||
tableConfig,
|
||||
headFormConfigs,
|
||||
allUrls: urls,
|
||||
dialogConfigs,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
now() {
|
||||
const curr = this.headFormConfigs.fields.find((item) => item.prop == "timerange").default.value;
|
||||
return [
|
||||
moment(curr[0]).format("YYYY-MM-DDTHH:mm:ss"),
|
||||
moment(curr[1]).format("YYYY-MM-DDTHH:mm:ss"),
|
||||
]
|
||||
},
|
||||
},
|
||||
methods: {},
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped></style>
|
@ -87,8 +87,11 @@ export default function () {
|
||||
{ width: 56, type: "index", label: "序号" },
|
||||
{ prop: "orderCode", label: "订单号" },
|
||||
{ width: 80, prop: "orderCate", label: "订单子号" },
|
||||
{ prop: "bomCode", label: "配方" },
|
||||
{ prop: "brand", label: "配方" },
|
||||
{ prop: "shapeCode", label: "砖型" },
|
||||
{ prop: "weight", label: "重量" },
|
||||
{ width: 128, prop: "gas", label: "燃气用量(m³)" },
|
||||
{ width: 144, prop: "gp", label: "燃气(m³)/砖(kg)" },
|
||||
{ width: 80, prop: "qty", label: "订单数量" },
|
||||
{ width: 72, prop: "goodqty", label: "合格数" },
|
||||
{ width: 72, prop: "badqty", label: "废砖数" },
|
||||
|
@ -112,7 +112,7 @@ export default {
|
||||
},
|
||||
},
|
||||
activated() {
|
||||
console.log("list view with ehad activated..........", this.triggerUpdate);
|
||||
//console.log("list view with ehad activated..........", this.triggerUpdate);
|
||||
this.refreshLayoutKey = this.layoutTable();
|
||||
},
|
||||
watch: {
|
||||
@ -182,7 +182,7 @@ export default {
|
||||
}
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
// page 场景:
|
||||
@ -221,7 +221,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -291,7 +291,7 @@ export default {
|
||||
// break;
|
||||
// }
|
||||
// case "status": {
|
||||
// console.log("status", data);
|
||||
// //console.log("status", data);
|
||||
// // TODO: 类似于这种字符串,可以统一集中到一个文件里
|
||||
// const { id, code } = data;
|
||||
// const queryCondition = { id, code };
|
||||
@ -320,7 +320,7 @@ export default {
|
||||
// break;
|
||||
// }
|
||||
// case "to-bom-detail": {
|
||||
// // console.log('to-bom-detail', data.name)
|
||||
// // //console.log('to-bom-detail', data.name)
|
||||
// // 查看配方详情
|
||||
// return this.$router.push({
|
||||
// name: "pms-bomDetails",
|
||||
@ -381,7 +381,7 @@ export default {
|
||||
// });
|
||||
// }
|
||||
// case "preview": {
|
||||
// console.log("[PREVIEW] data", data);
|
||||
// //console.log("[PREVIEW] data", data);
|
||||
// // report preview
|
||||
// return this.$router.push({
|
||||
// name: "pms-reportPreview",
|
||||
@ -391,7 +391,7 @@ export default {
|
||||
// });
|
||||
// }
|
||||
// case "design": {
|
||||
// console.log("[DESIGN] data", data);
|
||||
// //console.log("[DESIGN] data", data);
|
||||
// // report design
|
||||
// return this.$router.push({
|
||||
// name: "pms-reportDesign",
|
||||
@ -457,7 +457,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "新增":
|
||||
this.openDialog();
|
||||
@ -500,7 +500,7 @@ export default {
|
||||
});
|
||||
}
|
||||
});
|
||||
console.log("查询", this.cachedSearchCondition);
|
||||
//console.log("查询", this.cachedSearchCondition);
|
||||
this.getList(this.cachedSearchCondition);
|
||||
break;
|
||||
}
|
||||
@ -539,7 +539,7 @@ export default {
|
||||
});
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
//console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
this.$refs["edit-dialog"].init(/** some args... */ row_id, detail_mode, tag_info, extraParams);
|
||||
});
|
||||
},
|
||||
|
@ -66,7 +66,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleTabClick(tab) {
|
||||
console.log("handle tab click", tab);
|
||||
//console.log("handle tab click", tab);
|
||||
if (tab > this.oldActiveTab) this.toLeft = true;
|
||||
else this.toLeft = false;
|
||||
switch (tab) {
|
||||
@ -89,7 +89,7 @@ export default {
|
||||
|
||||
/** init **/
|
||||
init(order, detailMode) {
|
||||
console.log("init menu dialog,", order);
|
||||
//console.log("init menu dialog,", order);
|
||||
this.order = order;
|
||||
this.detailMode = detailMode ?? false;
|
||||
this.visible = true;
|
||||
|
@ -260,7 +260,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "新增":
|
||||
this.openDialog();
|
||||
@ -300,14 +300,14 @@ export default {
|
||||
});
|
||||
}
|
||||
});
|
||||
console.log("查询", this.cachedSearchCondition);
|
||||
//console.log("查询", this.cachedSearchCondition);
|
||||
this.getList(this.cachedSearchCondition);
|
||||
break;
|
||||
}
|
||||
case "同步":
|
||||
case "全部同步":
|
||||
this.$http.post(this.urls.syncUrl).then(({ data: res }) => {
|
||||
console.log("全部同步", res);
|
||||
//console.log("全部同步", res);
|
||||
if (res.code === 0) {
|
||||
this.$message({ message: "同步成功", type: "success" });
|
||||
this.getList();
|
||||
@ -334,7 +334,7 @@ export default {
|
||||
openDialog(row, detail) {
|
||||
this.dialogVisible = true;
|
||||
|
||||
console.log("row detail", row, detail);
|
||||
//console.log("row detail", row, detail);
|
||||
|
||||
let extraParams = null;
|
||||
if (this.attachListQueryExtra && this.listQueryExtra.length) {
|
||||
@ -344,7 +344,7 @@ export default {
|
||||
});
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
//console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
this.$refs["edit-dialog"].init(/** some args... */ row, detail);
|
||||
});
|
||||
},
|
||||
|
@ -66,7 +66,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
},
|
||||
|
||||
handleSizeChange(newSize) {
|
||||
@ -89,7 +89,7 @@ export default {
|
||||
...this.extraQueryFields,
|
||||
};
|
||||
|
||||
console.log("getAlist", data, this.pageIsPost);
|
||||
//console.log("getAlist", data, this.pageIsPost);
|
||||
|
||||
return this.$http({
|
||||
url: this.urls.page ?? this.urls.base + "/page",
|
||||
|
@ -114,7 +114,7 @@ export default {
|
||||
orderId: {
|
||||
handler: function (val) {
|
||||
if (val) {
|
||||
console.log("get car list based on orderId: ", val);
|
||||
//console.log("get car list based on orderId: ", val);
|
||||
this.getAList(val);
|
||||
}
|
||||
},
|
||||
@ -125,7 +125,7 @@ export default {
|
||||
},
|
||||
},
|
||||
// activated() {
|
||||
// console.log("hhh");
|
||||
// //console.log("hhh");
|
||||
// this.refreshLayoutKey = Math.random();
|
||||
// },
|
||||
methods: {
|
||||
@ -218,7 +218,7 @@ export default {
|
||||
},
|
||||
|
||||
getAList(orderId) {
|
||||
console.log("geting car list, ", orderId);
|
||||
//console.log("geting car list, ", orderId);
|
||||
if (!orderId) orderId = this.orderId;
|
||||
|
||||
this.tableLoading = true;
|
||||
@ -227,7 +227,7 @@ export default {
|
||||
if ("list" in res.data) {
|
||||
this.dataList = res.data.list;
|
||||
this.totalPage = res.data.total;
|
||||
} else console.log("没有res.data.list属性");
|
||||
}
|
||||
} else {
|
||||
this.dataList.splice(0);
|
||||
this.totalPage = 0;
|
||||
|
@ -7,7 +7,11 @@
|
||||
<el-col :span="6">
|
||||
<el-form-item label="订单状态" prop="statusDictValue" :rules="null">
|
||||
<span style="display: block; margin-top: 32px">
|
||||
{{ ["等待", "确认", "生产", "暂停", "结束", "接受", "拒绝", "已下发"][dataForm.statusDictValue] }}
|
||||
{{
|
||||
["等待", "确认", "生产", "暂停", "结束", "接受", "拒绝", "已下发"][
|
||||
dataForm.statusDictValue
|
||||
]
|
||||
}}
|
||||
</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
@ -160,7 +164,9 @@
|
||||
:label="opt.label"
|
||||
:value="opt.value"
|
||||
style="display: flex; align-items: center">
|
||||
<span style="display: inline-block; width: 128px; text-overflow: ellipsis">{{ opt.label }}</span>
|
||||
<span style="display: inline-block; width: 128px; text-overflow: ellipsis">
|
||||
{{ opt.label }}
|
||||
</span>
|
||||
<span
|
||||
v-if="requestList[3].extraLabel"
|
||||
style="display: inline-block; margin-left: 12px; font-size: 0.9em">
|
||||
@ -375,9 +381,7 @@
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item
|
||||
label="销售订单号"
|
||||
prop="saleNo">
|
||||
<el-form-item label="销售订单号" prop="saleNo">
|
||||
<!-- :rules="{ required: true, message: '必填项不能为空', trigger: 'blur' }"> -->
|
||||
<el-input
|
||||
v-model="dataForm.saleNo"
|
||||
@ -413,9 +417,7 @@
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item
|
||||
label="销售时间"
|
||||
prop="deliveryTime">
|
||||
<el-form-item label="销售时间" prop="deliveryTime">
|
||||
<!-- :rules="{ required: true, message: '必填项不能为空', trigger: 'blur' }"> -->
|
||||
<el-date-picker
|
||||
v-model="dataForm.deliveryTime"
|
||||
@ -456,8 +458,41 @@
|
||||
<span style="display: block; margin-top: 32px">{{ dataForm.shortDesc }}</span>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6"></el-col>
|
||||
<el-col :span="6"></el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item
|
||||
label="托盘类型"
|
||||
prop="palletType"
|
||||
:rules="{ required: true, message: '必填项不能为空', trigger: 'blur' }">
|
||||
<el-select
|
||||
v-model="dataForm.palletType"
|
||||
filterable
|
||||
clearable
|
||||
:disabled="mode.includes('detail')"
|
||||
v-bind="{ placeholder: '选择托盘类型' }">
|
||||
<el-option
|
||||
v-for="pt in palletType"
|
||||
:key="pt.dictValue"
|
||||
:label="pt.dictLabel"
|
||||
:value="pt.dictValue"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item
|
||||
label="贴纸板"
|
||||
prop="paperboard"
|
||||
:rules="{ required: true, message: '必填项不能为空', trigger: 'blur' }">
|
||||
<el-select
|
||||
v-model="dataForm.paperboard"
|
||||
filterable
|
||||
clearable
|
||||
:disabled="mode.includes('detail')"
|
||||
v-bind="{ placeholder: '选择贴纸板' }">
|
||||
<el-option label="否" value="0"></el-option>
|
||||
<el-option label="是" value="1"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col>
|
||||
@ -477,6 +512,7 @@
|
||||
<script>
|
||||
import { pick as __pick } from "@/utils/filters";
|
||||
import InputsArea from "./InputsArea.vue";
|
||||
import { getDictDataList } from "@/utils";
|
||||
|
||||
export default {
|
||||
name: "OrderDetailTag",
|
||||
@ -526,6 +562,8 @@ export default {
|
||||
customerId: null,
|
||||
shortDesc: null,
|
||||
remark: null,
|
||||
palletType: null,
|
||||
paperboard: null,
|
||||
},
|
||||
requestList: [
|
||||
{
|
||||
@ -619,6 +657,11 @@ export default {
|
||||
promiseList: [],
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
palletType() {
|
||||
return getDictDataList("pallet_type");
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
/**
|
||||
* 打开弹窗后,准备下拉选项数据
|
||||
|
@ -25,7 +25,7 @@ export default {
|
||||
},
|
||||
created() { },
|
||||
mounted() {
|
||||
console.log('this.order', this.order)
|
||||
//console.log('this.order', this.order)
|
||||
this.$nextTick(() => {
|
||||
this.$refs["order-detail-tag"].init(this.order.id, this.detailMode);
|
||||
});
|
||||
|
@ -100,18 +100,18 @@ export default {
|
||||
filter: (val) => (val !== null && val !== undefined ? ["等待", "确认", "生产", "暂停", "结束", "接受", "拒绝", "已下发"][val] : "-"),
|
||||
},
|
||||
{ prop: "qty", label: "混料总量 [kg]" },
|
||||
{
|
||||
prop: "operations",
|
||||
name: "操作",
|
||||
fixed: "right",
|
||||
width: 200,
|
||||
subcomponent: TableOperaionComponent,
|
||||
options: [
|
||||
{ name: "edit", label: "编辑", emitFull: true, icon: "edit-outline" },
|
||||
{ name: "view-batch", label: "查看批次", color: "#ff8000", toRouter: "pms-blenderBatch", icon: "document-copy" }, // 路由跳转至 pms-blenderBatch
|
||||
{ name: "detach", label: "下发", color: "#099", icon: "bottom-right" },
|
||||
],
|
||||
},
|
||||
// {
|
||||
// prop: "operations",
|
||||
// name: "操作",
|
||||
// fixed: "right",
|
||||
// width: 200,
|
||||
// subcomponent: TableOperaionComponent,
|
||||
// options: [
|
||||
// { name: "edit", label: "编辑", emitFull: true, icon: "edit-outline" },
|
||||
// { name: "view-batch", label: "查看批次", color: "#ff8000", toRouter: "pms-blenderBatch", icon: "document-copy" }, // 路由跳转至 pms-blenderBatch
|
||||
// { name: "detach", label: "下发", color: "#099", icon: "bottom-right" },
|
||||
// ],
|
||||
// },
|
||||
],
|
||||
refreshLayoutKey1: "",
|
||||
// 压制
|
||||
@ -127,14 +127,14 @@ export default {
|
||||
{ prop: "qtyComplete", label: "完成量" },
|
||||
{ prop: "goodqty", label: "合格数量" },
|
||||
{ prop: "badqty", label: "不合格数量" },
|
||||
{
|
||||
prop: "operations",
|
||||
name: "操作",
|
||||
fixed: "right",
|
||||
width: 200,
|
||||
subcomponent: TableOperaionComponent,
|
||||
options: [{ name: "detach", label: "下发", icon: "bottom-right" }], // , url: '/pms/trans/pressDeli' }]
|
||||
},
|
||||
// {
|
||||
// prop: "operations",
|
||||
// name: "操作",
|
||||
// fixed: "right",
|
||||
// width: 200,
|
||||
// subcomponent: TableOperaionComponent,
|
||||
// options: [{ name: "detach", label: "下发", icon: "bottom-right" }], // , url: '/pms/trans/pressDeli' }]
|
||||
// },
|
||||
],
|
||||
refreshLayoutKey2: "",
|
||||
// 窑炉
|
||||
|
@ -88,7 +88,7 @@ export default {
|
||||
hisId: this.hisId,
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("temp dialog res", res);
|
||||
//console.log("temp dialog res", res);
|
||||
this.tableLoading = false;
|
||||
if (res.code === 0) {
|
||||
if ("list" in res.data) {
|
||||
|
@ -8,8 +8,8 @@ import { getDictDataList } from '@/utils';
|
||||
|
||||
export default function () {
|
||||
const tableProps = [
|
||||
{ width: 60, type: "index", label: "序号", fixed: true },
|
||||
{ width: 120, prop: "code", label: "订单号", fixed: "left" },
|
||||
{ width: 60, type: "index", label: "序号", fixed: true },
|
||||
{ width: 60, prop: "cate", label: "子号" },
|
||||
{ width: 100, prop: "productCode", label: "物料" },
|
||||
{ width: 100, prop: "shapeCode", label: "砖型" },
|
||||
@ -23,7 +23,7 @@ export default function () {
|
||||
{ width: 120, prop: "planStartTime", label: "计划开始时间", filter: timeFilter },
|
||||
{ width: 120, prop: "startTime", label: "开始时间", filter: timeFilter },
|
||||
{ width: 120, prop: "sapParam6", label: "烧成温度" },
|
||||
{ width: 120, prop: "sapParam7", label: "烧成时间(h)" },
|
||||
{ width: 120, prop: "sapParam7", label: "烧成时间(min)" },
|
||||
{ width: 200, prop: "packTechCode", label: "包装工艺代码" },
|
||||
{ width: 120, prop: "pcsKilnCar", label: "托盘码放砖数" },
|
||||
{ width: 120, prop: "customerCode", label: "客户" },
|
||||
@ -37,6 +37,7 @@ export default function () {
|
||||
{ width: 200, prop: "shortDesc", label: "喷码描述" },
|
||||
{ width: 120, prop: "yieldqty", label: "已生产数量" },
|
||||
{ width: 120, prop: "remark", label: "备注" },
|
||||
{ width: 120, prop: "description", label: "结束备注" },
|
||||
// { width: 120, prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
{
|
||||
prop: "operations",
|
||||
@ -495,7 +496,7 @@ export default function () {
|
||||
},
|
||||
{
|
||||
input: true,
|
||||
label: "烧成时间 H",
|
||||
label: "烧成时间(min)",
|
||||
prop: "sapParam7",
|
||||
rules: [
|
||||
{ required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
|
@ -88,29 +88,6 @@ export default function () {
|
||||
form: {
|
||||
rows: [
|
||||
[
|
||||
// {
|
||||
// input: true,
|
||||
// label: "工艺名称",
|
||||
// prop: "name",
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
// elparams: { placeholder: "请输入烧成曲线名称" },
|
||||
// },
|
||||
// {
|
||||
// select: true,
|
||||
// label: "配方",
|
||||
// prop: "bomId",
|
||||
// options: [],
|
||||
// refreshOptionsAfterConfirm: true,
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
// elparams: { clearable: true, filterable: true, placeholder: "请选择配方" },
|
||||
// fetchData: (techId = -1) => this.$http.get("/pms/bom/listUnR", { params: { wsId: 3, version: '', key: '', techId } }),
|
||||
// cacheFetchedData: true,
|
||||
// changeReflects: {
|
||||
// fromKey: ['code', 'version'],
|
||||
// delimiter: '-',
|
||||
// toProp: 'code'
|
||||
// }
|
||||
// },
|
||||
{
|
||||
input: true,
|
||||
autoDisabled: true,
|
||||
@ -120,13 +97,6 @@ export default function () {
|
||||
elparams: { placeholder: "请输入烧成曲线编码" },
|
||||
},
|
||||
],
|
||||
// [
|
||||
// {
|
||||
// forceDisabled: true,
|
||||
// prop: 'bomCode',
|
||||
// label: '当前配方'
|
||||
// },
|
||||
// ],
|
||||
[{ textarea: true, label: "备注", prop: "remark", elparams: { placeholder: "备注" } }],
|
||||
],
|
||||
operations: [
|
||||
@ -139,14 +109,9 @@ export default function () {
|
||||
table: {
|
||||
extraParams: ["techId", "key"],
|
||||
props: [
|
||||
// { type: 'index', label: '序号' },
|
||||
// { prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
{ prop: "name", label: "参数名称", isEditField: true },
|
||||
{ prop: "code", label: "参数编码", isEditField: true },
|
||||
// { prop: "specifications", label: "规格", isEditField: true },
|
||||
// { prop: "code", label: "参数编码", isEditField: true },
|
||||
{ width: 80, prop: "value", label: "参数值", isEditField: true },
|
||||
// { prop: "valueFloor", label: "参数值下限", isEditField: true },
|
||||
// { prop: "valueTop", label: "参数值上限", isEditField: true },
|
||||
{ prop: "description", label: "描述", isEditField: true },
|
||||
{
|
||||
prop: "operations",
|
||||
@ -155,7 +120,7 @@ export default function () {
|
||||
width: 90,
|
||||
subcomponent: TableOperaionComponent,
|
||||
options: [
|
||||
{ name: "edit", label: "编辑", icon: "edit-outline", permission: "pms:blenderStepParam:update" },
|
||||
{ name: "edit", label: "编辑", icon: "edit-outline", permission: "pms:equipmentTechParam:update" },
|
||||
// { name: "delete", icon: "delete", label: "删除", emitFull: true, permission: "pms:blenderStepParam:delete" },
|
||||
],
|
||||
},
|
||||
@ -176,20 +141,24 @@ export default function () {
|
||||
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "请输入参数名称" },
|
||||
},
|
||||
{
|
||||
input: true,
|
||||
label: "参数编码",
|
||||
prop: "code",
|
||||
rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
elparams: { placeholder: "请输入参数编码" },
|
||||
},
|
||||
// {
|
||||
// input: true,
|
||||
// label: "参数编码",
|
||||
// prop: "code",
|
||||
// rules: { required: true, message: "必填项不能为空", trigger: "blur" },
|
||||
// elparams: { placeholder: "请输入参数编码" },
|
||||
// },
|
||||
],
|
||||
[
|
||||
{ input: true, label: "参数值上限", prop: "valueTop", elparams: { placeholder: "请输入参数值上限" } }
|
||||
],
|
||||
[
|
||||
{ input: true, label: "参数值上限", prop: "valueTop", elparams: { placeholder: "请输入参数值上限" } },
|
||||
{ input: true, label: "参数值下限", prop: "valueFloor", elparams: { placeholder: "请输入参数值下限" } },
|
||||
],
|
||||
[
|
||||
{ input: true, label: "参数值", prop: "value", elparams: { placeholder: "请输入参数值" } },
|
||||
{ input: true, label: "参数值", prop: "value", elparams: { placeholder: "请输入参数值" } }
|
||||
],
|
||||
[
|
||||
{
|
||||
input: true,
|
||||
label: "描述",
|
||||
@ -200,8 +169,8 @@ export default function () {
|
||||
],
|
||||
],
|
||||
operations: [
|
||||
{ name: "add", label: "保存", type: "primary", showOnEdit: false },
|
||||
{ name: "update", label: "更新", type: "primary", showOnEdit: true },
|
||||
{ name: "add", label: "保存", type: "primary", showOnEdit: false, permission: 'pms:equipmentTechParam:save' },
|
||||
{ name: "update", label: "更新", type: "primary", showOnEdit: true, permission: 'pms:equipmentTechParam:update' },
|
||||
// { name: "update", label: "更新", type: "primary", permission: "pms:blenderStepParam:update", showOnEdit: true },
|
||||
// { name: 'reset', label: '重置', type: 'warning', showAlways: true },
|
||||
// { name: 'cancel', label: '取消', showAlways: true },
|
||||
|
@ -6,20 +6,21 @@ import { timeFilter } from "@/utils/filters";
|
||||
export default function () {
|
||||
const tableProps = [
|
||||
{ type: "index", label: "序号" },
|
||||
{ prop: "kilnCode", label: "窑炉" },
|
||||
{ width: 160, prop: "orderCode", label: "主订单号" },
|
||||
{ width: 60, prop: "orderCate", label: "子号" },
|
||||
{ width: 160, prop: "code", label: "烧成订单号" },
|
||||
{ prop: "kilnCode", label: "窑炉" },
|
||||
{ width: 60, prop: "percent", label: "进度", filter: (val) => (val !== null && val !== undefined ? val + " %" : "-") },
|
||||
// { width: 160, prop: "code", label: "烧成订单号" },
|
||||
// { prop: "statusDictValue", label: "订单状态", filter: (val) => (val !== null && val !== undefined ? ["等待", "确认", "生产", "暂停", "结束", "接受", "拒绝"][val] : "-"), },
|
||||
// { prop: "startTime", label: "开始时间" },
|
||||
{ prop: "bomCode", label: "配方" },
|
||||
{ width: 180, prop: "bomName", label: "牌号" },
|
||||
{ prop: 'sapParam6', label: '烧成温度' },
|
||||
{ prop: 'sapParam7', label: '保温时间' },
|
||||
{ width: 80, prop: "ai", label: "版本号" },
|
||||
{ width: 80, prop: "qty", label: "生产量" },
|
||||
{ prop: "qtyComplete", label: "完成量" },
|
||||
{ width: 160, prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
// { prop: "remark", label: "备注" },
|
||||
// { prop: 'version', label: '配方号' },
|
||||
// { prop: 'status', label: '状态', subcomponent: StatusComponent }, // subcomponent
|
||||
// { prop: "description", label: "详情", subcomponent: TableTextComponent },
|
||||
// {
|
||||
|
@ -110,7 +110,7 @@ export default {
|
||||
},
|
||||
},
|
||||
activated() {
|
||||
console.log("list view with ehad activated..........", this.triggerUpdate);
|
||||
//console.log("list view with ehad activated..........", this.triggerUpdate);
|
||||
this.refreshLayoutKey = this.layoutTable();
|
||||
},
|
||||
watch: {
|
||||
@ -179,7 +179,7 @@ export default {
|
||||
}
|
||||
)
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
if (res.code === 0) {
|
||||
// page 场景:
|
||||
@ -218,7 +218,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -287,7 +287,7 @@ export default {
|
||||
// break;
|
||||
// }
|
||||
// case "status": {
|
||||
// console.log("status", data);
|
||||
// //console.log("status", data);
|
||||
// // TODO: 类似于这种字符串,可以统一集中到一个文件里
|
||||
// const { id, code } = data;
|
||||
// const queryCondition = { id, code };
|
||||
@ -316,7 +316,7 @@ export default {
|
||||
// break;
|
||||
// }
|
||||
// case "to-bom-detail": {
|
||||
// // console.log('to-bom-detail', data.name)
|
||||
// // //console.log('to-bom-detail', data.name)
|
||||
// // 查看配方详情
|
||||
// return this.$router.push({
|
||||
// name: "pms-bomDetails",
|
||||
@ -377,7 +377,7 @@ export default {
|
||||
// });
|
||||
// }
|
||||
// case "preview": {
|
||||
// console.log("[PREVIEW] data", data);
|
||||
// //console.log("[PREVIEW] data", data);
|
||||
// // report preview
|
||||
// return this.$router.push({
|
||||
// name: "pms-reportPreview",
|
||||
@ -387,7 +387,7 @@ export default {
|
||||
// });
|
||||
// }
|
||||
// case "design": {
|
||||
// console.log("[DESIGN] data", data);
|
||||
// //console.log("[DESIGN] data", data);
|
||||
// // report design
|
||||
// return this.$router.push({
|
||||
// name: "pms-reportDesign",
|
||||
@ -453,7 +453,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "新增":
|
||||
this.openDialog();
|
||||
@ -495,7 +495,7 @@ export default {
|
||||
});
|
||||
}
|
||||
});
|
||||
console.log("查询", this.cachedSearchCondition);
|
||||
//console.log("查询", this.cachedSearchCondition);
|
||||
this.getList(this.cachedSearchCondition);
|
||||
break;
|
||||
}
|
||||
@ -534,7 +534,7 @@ export default {
|
||||
});
|
||||
}
|
||||
this.$nextTick(() => {
|
||||
console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
//console.log(`[edit-dialog] extraParams: ${extraParams}`);
|
||||
this.$refs["edit-dialog"].init(/** some args... */ row_id, detail_mode, tag_info, extraParams);
|
||||
});
|
||||
},
|
||||
|
@ -127,7 +127,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleSubEmitData(payload) {
|
||||
console.log("[component] BaseListTable handleSubEmitData(): ", payload);
|
||||
//console.log("[component] BaseListTable handleSubEmitData(): ", payload);
|
||||
this.$emit("operate-event", payload);
|
||||
},
|
||||
loadSubClassFn(tree, treeNode, resolve) {
|
||||
|
@ -155,12 +155,12 @@ export default {
|
||||
resetForm(excludeId = false, immediate = false) {
|
||||
setTimeout(
|
||||
() => {
|
||||
console.log("[Dialog Just Form] clearing form...");
|
||||
//console.log("[Dialog Just Form] clearing form...");
|
||||
Object.keys(this.dataForm).forEach((key) => {
|
||||
if (excludeId && key === "id") return;
|
||||
this.dataForm[key] = null;
|
||||
});
|
||||
console.log("[Dialog Just Form] cleared form...", this.dataForm);
|
||||
//console.log("[Dialog Just Form] cleared form...", this.dataForm);
|
||||
this.$refs.dataForm.clearValidate();
|
||||
this.$emit("dialog-closed"); // 触发父组件销毁自己
|
||||
},
|
||||
@ -182,11 +182,11 @@ export default {
|
||||
|
||||
handleComponentModelUpdate(propName, { subject, payload: { data } }) {
|
||||
this.dataForm[propName] = JSON.stringify(data);
|
||||
console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
//console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
console.log("btn click payload: ", payload);
|
||||
//console.log("btn click payload: ", payload);
|
||||
|
||||
if ("name" in payload) {
|
||||
switch (payload.name) {
|
||||
@ -209,7 +209,7 @@ export default {
|
||||
data: this.dataForm,
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("[add&update] res is: ", res);
|
||||
//console.log("[add&update] res is: ", res);
|
||||
this.loadingStatus = false;
|
||||
if (res.code === 0) {
|
||||
this.$message.success(payload.name === "add" ? "添加成功" : "更新成功");
|
||||
|
@ -201,7 +201,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleLoadSub({ tree, treeNode, resolve }) {
|
||||
// console.log("tree, treeNOde, resovle is:", tree, treeNode, resolve);
|
||||
// //console.log("tree, treeNOde, resovle is:", tree, treeNode, resolve);
|
||||
this.$http.get(`${this.urls.tree}?rootId=${tree.id}`).then(({ data: res }) => {
|
||||
if (res.code === 0 && res.data) {
|
||||
resolve(
|
||||
@ -246,7 +246,7 @@ export default {
|
||||
},
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
// page 场景:
|
||||
if ("list" in res.data) {
|
||||
@ -267,7 +267,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -307,7 +307,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "status": {
|
||||
console.log("status", data);
|
||||
//console.log("status", data);
|
||||
// TODO: 类似于这种字符串,可以统一集中到一个文件里
|
||||
const { id, code } = data;
|
||||
const queryCondition = { id, code };
|
||||
@ -346,7 +346,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("[search] form handleBtnClick", btnName, payload);
|
||||
//console.log("[search] form handleBtnClick", btnName, payload);
|
||||
switch (btnName) {
|
||||
case "新增":
|
||||
this.openDialog();
|
||||
|
@ -12,14 +12,14 @@ export default function () {
|
||||
{ width: 90, prop: "typeDictValue", label: "料仓类型", filter: dictFilter("liaocang") },
|
||||
// { prop: "enabled", label: "状态", subcomponent: switchBtn }, // subcomponent
|
||||
{ width: 220, prop: "materialDescription", label: "原料" },
|
||||
{ width: 128, prop: "materialName", label: "中文描述" },
|
||||
{ prop: "qty", label: "料位[kg]" },
|
||||
// { prop: "unitDictValue", label: "单位", filter: dictFilter('unit') },
|
||||
{ width: 128, prop: "materialTypeDictValue", label: "原料类型", filter: dictFilter("material_category") },
|
||||
{ width: 128, prop: "density", label: "原料堆积密度" },
|
||||
{ width: 90, prop: "dosLow", label: "加料下限" },
|
||||
{ width: 90, prop: "dosHigh", label: "加料上限" },
|
||||
// { width: 128, prop: "density", label: "原料堆积密度" },
|
||||
// { width: 90, prop: "dosLow", label: "加料下限" },
|
||||
// { width: 90, prop: "dosHigh", label: "加料上限" },
|
||||
{ width: 128, prop: "description", label: "描述" },
|
||||
{ width: 128, prop: "materialName", label: "中文描述" },
|
||||
// { prop: "remark", label: "备注" },
|
||||
{ width: 128, prop: "createTime", label: "添加时间", filter: timeFilter },
|
||||
{
|
||||
|
@ -2,28 +2,52 @@
|
||||
<div class="storage-box" :style="{ outlineColor: color }">
|
||||
<div
|
||||
class="storage-title"
|
||||
style="margin-bottom: 10px; padding-bottom: 12px; text-align: center; font-weight: bold; font-size: 1.125em; border-bottom: 1px solid #ccc3"
|
||||
>
|
||||
<span style="display: inline-block; color: white; padding: 6px 12px; border-radius: 6px 20px" :style="{ background: color }">
|
||||
style="
|
||||
margin-bottom: 10px;
|
||||
padding-bottom: 12px;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
font-size: 1.125em;
|
||||
border-bottom: 1px solid #ccc3;
|
||||
">
|
||||
<span
|
||||
style="display: inline-block; color: white; padding: 6px 12px; border-radius: 6px 20px"
|
||||
:style="{ background: color }">
|
||||
{{ storage }}
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="storage-body" style="height: 120px; display: flex">
|
||||
<div class="storage-box__bg" style="height: 100%; width: 48px; margin-right: 12px; border-radius: 4px; overflow: hidden">
|
||||
<div
|
||||
class="storage-box__bg"
|
||||
style="height: 100%; width: 48px; margin-right: 12px; border-radius: 4px; overflow: hidden">
|
||||
<div
|
||||
class="storage-box__inner"
|
||||
style="position: absolute; bottom: 0; left: 0; height: 0; width: 100%; font-size: 1.125rem; text-align: center;"
|
||||
:style="{ background: color, height: computedRatio + '%', color: computedRatio > 20 ? 'white' : '#ccc' }"
|
||||
>
|
||||
<span style="height: 100%; display: flex; flex-direction: column; justify-content: flex-end;">{{ computedRatio + '%' }}</span>
|
||||
style="
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
height: 0;
|
||||
width: 100%;
|
||||
font-size: 1.125rem;
|
||||
text-align: center;
|
||||
"
|
||||
:style="{
|
||||
background: color,
|
||||
height: computedRatio + '%',
|
||||
color: computedRatio > 20 ? 'white' : '#ccc',
|
||||
}">
|
||||
<span style="height: 100%; display: flex; flex-direction: column; justify-content: flex-end">
|
||||
{{ computedRatio + "%" }}
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div style="display: flex; flex-direction: column; min-width: 128px; justify-content: space-between">
|
||||
<div style="font-size: 1.125em; line-height: 2.5; text-align: right">{{ material }}</div>
|
||||
<div style="font-size: 1.5em; line-height: 1.25; text-align: right; font-weight: bold">
|
||||
{{ qty }} <span style="color: #777; font-weight: normal; font-size: 1rem">{{ computedUnit }}</span>
|
||||
{{ qty }}
|
||||
<span style="color: #777; font-weight: normal; font-size: 1rem">{{ computedUnit }}</span>
|
||||
</div>
|
||||
|
||||
<!-- <div class="btn-group" style="text-align: right">
|
||||
@ -76,12 +100,12 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
computedUnit() {
|
||||
if (!this.unitValue) return "存量";
|
||||
return this.unitList(this.unitValue) + " 存量";
|
||||
if (!this.unitValue) return "存量[kg]";
|
||||
return this.unitList(this.unitValue) + " 存量[kg]";
|
||||
},
|
||||
computedRatio() {
|
||||
return this.ratio ? this.ratio.toFixed(2) * 100 : 0
|
||||
}
|
||||
return this.ratio ? this.ratio.toFixed(2) * 100 : 0;
|
||||
},
|
||||
},
|
||||
created() {},
|
||||
mounted() {},
|
||||
|
@ -15,7 +15,7 @@
|
||||
layout="total, sizes, prev, pager, next, jumper"></el-pagination>
|
||||
</div>
|
||||
</section>
|
||||
<section class="container-content">
|
||||
<section class="container-content" v-if="dailyStorage.length || middleStorage.length || unknownStorage.length">
|
||||
<div class="dialy-storage" v-if="dailyStorage.length">
|
||||
<h3
|
||||
class=""
|
||||
@ -38,7 +38,7 @@
|
||||
:qty="st.qty ?? 0"
|
||||
:storage="st.name"
|
||||
color="#8899ff"
|
||||
:material="st.material ?? '默认物料'"
|
||||
:material="st.materialName ?? '默认物料'"
|
||||
:total="2"
|
||||
:unit-value="st.unitDictValue"
|
||||
:ratio="st.ratio" />
|
||||
@ -66,7 +66,7 @@
|
||||
:qty="st.qty ?? 0"
|
||||
:storage="st.name"
|
||||
color="#99aa11"
|
||||
:material="st.material ?? '默认物料'"
|
||||
:material="st.materialName ?? '默认物料'"
|
||||
:total="2"
|
||||
:unit-value="st.unitDictValue"
|
||||
:ratio="st.ratio" />
|
||||
@ -94,13 +94,17 @@
|
||||
:qty="st.qty ?? 0"
|
||||
color="#3388ff"
|
||||
:storage="st.name"
|
||||
:material="st.material ?? '默认物料'"
|
||||
:material="st.materialName ?? '默认物料'"
|
||||
:total="2"
|
||||
:unit-value="st.unitDictValue"
|
||||
:ratio="st.ratio" />
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<div v-else style="color: #ccc; letter-spacing: 1px; font-size: 18px; padding: 12px;">
|
||||
无数据
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
@ -70,7 +70,7 @@ export default {
|
||||
deep: true,
|
||||
},
|
||||
"dataForm.description": function (val) {
|
||||
console.log("here", val);
|
||||
//console.log("here", val);
|
||||
if (val === "batch备用服务器") {
|
||||
this.loadData(0);
|
||||
} else {
|
||||
|
@ -3,9 +3,9 @@
|
||||
<div class="base-list-table w-full">
|
||||
<el-table
|
||||
:data="tableData"
|
||||
:cell-style="{ padding: 0 }"
|
||||
v-bind="tableConfig"
|
||||
ref="base-list-table"
|
||||
:cell-style="{ padding: 0 }"
|
||||
:header-cell-style="/** 重写表格样式 **/ {
|
||||
padding: '5px 0',
|
||||
}"
|
||||
@ -129,7 +129,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleSubEmitData(payload) {
|
||||
// console.log("[component] BaseListTable handleSubEmitData(): ", payload);
|
||||
// //console.log("[component] BaseListTable handleSubEmitData(): ", payload);
|
||||
this.$emit("operate-event", payload);
|
||||
},
|
||||
loadSubClassFn(tree, treeNode, resolve) {
|
||||
|
@ -126,7 +126,7 @@ export default {
|
||||
// TODO: 此处也需要修改,碰到具体业务需求才更新...
|
||||
if (field.watch) {
|
||||
// const { index: innerIdx, condition } = field.watch;
|
||||
// console.log("=====field.watch=====", innerIdx, this.searchForm[innerIdx], this.headConfig.fields[innerIdx].default);
|
||||
// //console.log("=====field.watch=====", innerIdx, this.searchForm[innerIdx], this.headConfig.fields[innerIdx].default);
|
||||
// // 设置监听器
|
||||
// this.$watch(
|
||||
// () => this.searchForm[innerIdx],
|
||||
@ -136,19 +136,19 @@ export default {
|
||||
// // queryParams
|
||||
// // })
|
||||
// this.$http(field.url, queryParams).then((res) => {
|
||||
// console.log("[==>] 更新有前置条件的字段!!!", queryParams, res);
|
||||
// //console.log("[==>] 更新有前置条件的字段!!!", queryParams, res);
|
||||
// // 此处是外部的 index
|
||||
// this.searchForm[index] = Math.floor(Math.random() * 10);
|
||||
// });
|
||||
// }
|
||||
// );
|
||||
// console.log("[BaseSearchForm] mounted(): ", this.searchForm);
|
||||
// //console.log("[BaseSearchForm] mounted(): ", this.searchForm);
|
||||
// // 如果此时已经有默认值了,就立马根据这个默认值来发起请求
|
||||
// if (this.searchForm[innerIdx]) {
|
||||
// // TODO: 这个判断好像不太需要...
|
||||
// console.log("TODO: 这个判断好像不太需要...");
|
||||
// //console.log("TODO: 这个判断好像不太需要...");
|
||||
// } else {
|
||||
// console.log("TODO: 监听的字段还没来得及设置值呢...");
|
||||
// //console.log("TODO: 监听的字段还没来得及设置值呢...");
|
||||
// }
|
||||
}
|
||||
});
|
||||
|
@ -80,7 +80,7 @@ export default {
|
||||
methods: {
|
||||
init(id) {
|
||||
this.visible = true;
|
||||
console.log("[BatchDialog--detail] init", id);
|
||||
//console.log("[BatchDialog--detail] init", id);
|
||||
this.batchId = id;
|
||||
this.getBatchDetailList();
|
||||
},
|
||||
@ -98,7 +98,7 @@ export default {
|
||||
batchId: this.batchId,
|
||||
},
|
||||
});
|
||||
console.log("[BatchDialog] getBatchList", data);
|
||||
//console.log("[BatchDialog] getBatchList", data);
|
||||
if (code == 0) {
|
||||
this.dataList = data.list;
|
||||
this.total = data.total;
|
||||
|
@ -91,7 +91,7 @@ export default {
|
||||
data: { code, data, msg },
|
||||
} = await this.$http.get("/pms/blenderBatch/" + batchId);
|
||||
if (code == 0) {
|
||||
console.log("[BatchDialog] getBatch", data);
|
||||
//console.log("[BatchDialog] getBatch", data);
|
||||
this.$set(this.dataForm, "id", data.id);
|
||||
this.$set(this.dataForm, "batchSize", data.batchSize);
|
||||
} else {
|
||||
|
@ -148,7 +148,7 @@ export default {
|
||||
methods: {
|
||||
init(id) {
|
||||
this.visible = true;
|
||||
console.log("[BatchDialog] init", id);
|
||||
//console.log("[BatchDialog] init", id);
|
||||
this.blenderOrderId = id;
|
||||
this.getBatchList();
|
||||
},
|
||||
@ -166,7 +166,7 @@ export default {
|
||||
blenderOrderId: this.blenderOrderId,
|
||||
},
|
||||
});
|
||||
console.log("[BatchDialog] getBatchList", data);
|
||||
//console.log("[BatchDialog] getBatchList", data);
|
||||
if (code == 0) {
|
||||
this.dataList = data.list;
|
||||
this.total = data.total;
|
||||
@ -185,7 +185,7 @@ export default {
|
||||
},
|
||||
|
||||
handleOperate({ type, data }) {
|
||||
console.log("[BatchDialog] handleOperate", type, data);
|
||||
//console.log("[BatchDialog] handleOperate", type, data);
|
||||
switch (type) {
|
||||
case "create":
|
||||
this.editDialogVisible = true;
|
||||
|
@ -165,7 +165,7 @@ export default {
|
||||
else if (col.fetchTreeData) {
|
||||
// 获取设备类型时触发的,用于前端构建属性结构,约定,parentId 为0时是顶级节点
|
||||
col.fetchTreeData().then(({ data: res }) => {
|
||||
// console.log("[DialogJustForm fetchTreeData -->]", res.data);
|
||||
// //console.log("[DialogJustForm fetchTreeData -->]", res.data);
|
||||
if (res.code === 0 && res.data) {
|
||||
if ("list" in res.data) {
|
||||
this.$set(col, "options", res.data.list);
|
||||
@ -198,7 +198,7 @@ export default {
|
||||
row.forEach((col) => {
|
||||
if (!col.prop) return;
|
||||
if ("injectTo" in col && Array.isArray(col.injectTo)) {
|
||||
// console.log("watching options ..... ", col);
|
||||
// //console.log("watching options ..... ", col);
|
||||
col.injectTo.map((item) => {
|
||||
const unwatch = this.$watch(
|
||||
() => this.dataForm[col.prop],
|
||||
@ -264,7 +264,7 @@ export default {
|
||||
if (excludeId && key === "id") return;
|
||||
this.dataForm[key] = null;
|
||||
});
|
||||
// console.log("[DialogJustForm resetForm()] clearing form...");
|
||||
// //console.log("[DialogJustForm resetForm()] clearing form...");
|
||||
this.$refs.dataForm.clearValidate();
|
||||
this.$emit("dialog-closed"); // 触发父组件销毁自己
|
||||
this.watchList.map((unwatch) => unwatch());
|
||||
@ -277,9 +277,9 @@ export default {
|
||||
/** init **/
|
||||
init(id, detailMode) {
|
||||
this.visible = true;
|
||||
// console.log("[DialogJustForm] init", this.dataForm, id, detailMode);
|
||||
// //console.log("[DialogJustForm] init", this.dataForm, id, detailMode);
|
||||
if (this.$refs.dataForm) {
|
||||
// console.log("[DialogJustForm] clearing form validation...");
|
||||
// //console.log("[DialogJustForm] clearing form validation...");
|
||||
// 当不是首次渲染dialog的时候,一开始就清空验证信息,本组件的循环里只有一个 dataForm 所以只用取 [0] 即可
|
||||
this.$refs.dataForm.clearValidate();
|
||||
}
|
||||
@ -306,7 +306,7 @@ export default {
|
||||
url: file.fileUrl,
|
||||
}));
|
||||
}
|
||||
// console.log("[DialogJustForm] init():", this.dataForm);
|
||||
// //console.log("[DialogJustForm] init():", this.dataForm);
|
||||
} else {
|
||||
this.$message({
|
||||
message: `${res.code}: ${res.msg}`,
|
||||
@ -333,22 +333,22 @@ export default {
|
||||
|
||||
/** handlers */
|
||||
handleSelectChange(col, eventValue) {
|
||||
// console.log("[dialog] select change: ", col, eventValue);
|
||||
// //console.log("[dialog] select change: ", col, eventValue);
|
||||
this.$forceUpdate();
|
||||
},
|
||||
|
||||
handleSwitchChange(val) {
|
||||
// console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
// //console.log("[dialog] switch change: ", val, this.dataForm);
|
||||
},
|
||||
|
||||
handleComponentModelUpdate(propName, { subject, payload: { data } }) {
|
||||
this.dataForm[propName] = JSON.stringify(data);
|
||||
// console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
// //console.log("[DialogJustForm] handleComponentModelUpdate", this.dataForm[propName]);
|
||||
},
|
||||
|
||||
addOrUpdate(method = "POST") {
|
||||
if ("parentId" in this.dataForm) {
|
||||
// console.log("[DialogJustForm parentId]", this.dataForm.parentId);
|
||||
// //console.log("[DialogJustForm parentId]", this.dataForm.parentId);
|
||||
// 对特殊的键做特殊处理,如 parentId 是一个 cascader,获取的值是 ["xxx"],后端只需要xxx
|
||||
const lastItem = this.dataForm.parentId.length - 1;
|
||||
this.dataForm.parentId = this.dataForm.parentId[lastItem];
|
||||
@ -400,7 +400,7 @@ export default {
|
||||
|
||||
// Object.getOwnPropertyNames(this.dataForm).forEach((prop) => {
|
||||
// if (/.*?Time/.test(prop)) {
|
||||
// console.log("HTTP prop", prop, this.dataForm[prop]);
|
||||
// //console.log("HTTP prop", prop, this.dataForm[prop]);
|
||||
// }
|
||||
// });
|
||||
|
||||
@ -413,7 +413,7 @@ export default {
|
||||
data: httpPayload,
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
// console.log("[add&update] res is: ", res);
|
||||
// //console.log("[add&update] res is: ", res);
|
||||
this.loadingStatus = false;
|
||||
if (res.code === 0) {
|
||||
this.$message.success(method === "POST" ? "添加成功" : "更新成功");
|
||||
@ -438,7 +438,7 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
// console.log("btn click payload: ", payload);
|
||||
// //console.log("btn click payload: ", payload);
|
||||
|
||||
if ("name" in payload) {
|
||||
switch (payload.name) {
|
||||
@ -454,12 +454,12 @@ export default {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
console.log("[x] 不是这么用的! 缺少name属性");
|
||||
//console.log("[x] 不是这么用的! 缺少name属性");
|
||||
}
|
||||
},
|
||||
|
||||
handleUploadChange(file, fileList) {
|
||||
// console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
// //console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
},
|
||||
|
||||
handleClose() {
|
||||
|
@ -110,7 +110,7 @@ export default {
|
||||
},
|
||||
|
||||
handleSuccess(response, file, fileList) {
|
||||
// console.log("success response", response);
|
||||
// //console.log("success response", response);
|
||||
|
||||
if ("code" in response && response.code === 500) {
|
||||
this.$message({
|
||||
@ -141,7 +141,7 @@ export default {
|
||||
},
|
||||
|
||||
handleError(err, file, fileList) {
|
||||
console.log("err", err);
|
||||
//console.log("err", err);
|
||||
},
|
||||
|
||||
handleBtnClick(payload) {
|
||||
@ -174,7 +174,7 @@ export default {
|
||||
},
|
||||
|
||||
handleUploadChange(file, fileList) {
|
||||
// console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
// //console.log("[Upload] handleUploadChange...", file, fileList);
|
||||
},
|
||||
|
||||
handleClose() {
|
||||
|
@ -66,7 +66,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleTabClick(tab) {
|
||||
console.log("handle tab click", tab);
|
||||
//console.log("handle tab click", tab);
|
||||
if (tab > this.oldActiveTab) this.toLeft = true;
|
||||
else this.toLeft = false;
|
||||
switch (tab) {
|
||||
@ -89,7 +89,7 @@ export default {
|
||||
|
||||
/** init **/
|
||||
init(order, detailMode) {
|
||||
console.log("init menu dialog,", order);
|
||||
//console.log("init menu dialog,", order);
|
||||
this.order = order;
|
||||
this.detailMode = detailMode ?? false;
|
||||
this.visible = true;
|
||||
|
@ -156,7 +156,7 @@ export default {
|
||||
if ("list" in res.data) {
|
||||
this.dataList = res.data.list;
|
||||
this.totalPage = res.data.total;
|
||||
} else console.log("没有res.data.list属性");
|
||||
}
|
||||
} else {
|
||||
this.dataList.splice(0);
|
||||
this.totalPage = 0;
|
||||
@ -183,7 +183,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -211,7 +211,9 @@ export default {
|
||||
type: "success",
|
||||
duration: 2000,
|
||||
onClose: () => {
|
||||
this.getAList(Object.assign({}, this.listQuery, this.extraSearchConditions, this.params));
|
||||
this.getAList(
|
||||
Object.assign({}, this.listQuery, this.extraSearchConditions, this.params)
|
||||
);
|
||||
this.$emit("refresh-tables", ["ongoing"]);
|
||||
},
|
||||
});
|
||||
@ -221,7 +223,7 @@ export default {
|
||||
}
|
||||
})
|
||||
.catch((errMsg) => {
|
||||
console.log("ere...");
|
||||
//console.log("ere...");
|
||||
this.$message({
|
||||
message: errMsg,
|
||||
type: "error",
|
||||
@ -234,6 +236,60 @@ export default {
|
||||
case "destroy-order":
|
||||
// 结束订单
|
||||
case "end-order": {
|
||||
this.$prompt("确认结束请输入结束备注", "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
})
|
||||
.then(({ value }) => {
|
||||
return value;
|
||||
})
|
||||
.catch(() => {
|
||||
this.$message({
|
||||
type: "info",
|
||||
message: "取消输入",
|
||||
});
|
||||
return Promise.reject();
|
||||
})
|
||||
.then((value) => {
|
||||
return this.$http({
|
||||
method: "post",
|
||||
url: "/pms/order/end",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
data: {
|
||||
id: data,
|
||||
description: value,
|
||||
},
|
||||
});
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
// success
|
||||
this.$message({
|
||||
message: "已结束订单!",
|
||||
type: "success",
|
||||
duration: 2000,
|
||||
onClose: () => {
|
||||
this.getAList(
|
||||
Object.assign({}, this.listQuery, this.extraSearchConditions, this.params)
|
||||
);
|
||||
this.$emit("refresh-tables", ["finished"]);
|
||||
},
|
||||
});
|
||||
} else {
|
||||
// failed
|
||||
throw new Error(res.msg);
|
||||
}
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message({
|
||||
type: "error",
|
||||
message: err,
|
||||
});
|
||||
});
|
||||
|
||||
return;
|
||||
this.$confirm(`确定${type === "end-order" ? "结束订单" : "废除订单"}?`, "提示", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
@ -254,7 +310,9 @@ export default {
|
||||
type: "success",
|
||||
duration: 2000,
|
||||
onClose: () => {
|
||||
this.getAList(Object.assign({}, this.listQuery, this.extraSearchConditions, this.params));
|
||||
this.getAList(
|
||||
Object.assign({}, this.listQuery, this.extraSearchConditions, this.params)
|
||||
);
|
||||
this.$emit("refresh-tables", ["finished"]);
|
||||
},
|
||||
});
|
||||
@ -340,13 +398,29 @@ export default {
|
||||
this.openDialog(data); /** data is ==> id */
|
||||
break;
|
||||
}
|
||||
case "copy": {
|
||||
this.$http({
|
||||
url: "/pms/order/copy",
|
||||
method: "post",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
data,
|
||||
}).then(({ data: res }) => {
|
||||
if (res.code === 0) {
|
||||
this.$message.success("复制成功!");
|
||||
this.getAList(Object.assign({}, this.listQuery, this.extraSearchConditions, this.params));
|
||||
}
|
||||
});
|
||||
break;
|
||||
}
|
||||
case "view":
|
||||
case "view-detail-action": {
|
||||
this.openDialog(data, true);
|
||||
break;
|
||||
}
|
||||
case "view-ongoing": {
|
||||
console.log("view-ongoing", data);
|
||||
//console.log("view-ongoing", data);
|
||||
this.openMenuDialog(data, false);
|
||||
break;
|
||||
}
|
||||
@ -358,12 +432,12 @@ export default {
|
||||
},
|
||||
|
||||
handleBtnClick({ btnName, payload }) {
|
||||
console.log("SearchForm", btnName, payload);
|
||||
//console.log("SearchForm", btnName, payload);
|
||||
|
||||
switch (btnName) {
|
||||
case "查询": {
|
||||
this.params = Object.assign({}, payload);
|
||||
console.log("this.params", this.params);
|
||||
//console.log("this.params", this.params);
|
||||
if ("timerange" in payload) {
|
||||
// 处理时间段
|
||||
if (!!payload.timerange) {
|
||||
@ -384,6 +458,57 @@ export default {
|
||||
this.showUploadDialog(payload);
|
||||
// alert('/pms/order/importExcelOrder');
|
||||
break;
|
||||
case "导出订单":
|
||||
this.$confirm(`确定要导出订单吗?`, "提示", {
|
||||
confirmButtonText: "是",
|
||||
cancelButtonText: "否",
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
this.overlayVisible = true;
|
||||
console.log("导出: ", payload);
|
||||
return this.$http({
|
||||
url: "/pms/order/export",
|
||||
method: "post",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
responseType: "blob",
|
||||
});
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
const blob = new Blob([res]);
|
||||
|
||||
/** 通知 */
|
||||
this.$notify({
|
||||
title: "成功",
|
||||
message: "开始下载",
|
||||
type: "success",
|
||||
duration: 1200,
|
||||
});
|
||||
|
||||
const fileName = "订单导出.xlsx";
|
||||
if ("download" in document.createElement("a")) {
|
||||
const alink = document.createElement("a");
|
||||
alink.download = fileName;
|
||||
alink.style.display = "none";
|
||||
alink.target = "_blank";
|
||||
alink.href = URL.createObjectURL(blob);
|
||||
document.body.appendChild(alink);
|
||||
alink.click();
|
||||
URL.revokeObjectURL(alink.href);
|
||||
document.body.removeChild(alink);
|
||||
} else {
|
||||
navigator.msSaveBlob(blob, fileName);
|
||||
}
|
||||
|
||||
this.overlayVisible = false;
|
||||
})
|
||||
.catch((err) => {
|
||||
this.$message.error("导出出错!");
|
||||
this.overlayVisible = false;
|
||||
});
|
||||
break;
|
||||
case "压制工艺":
|
||||
// 跳转至压制工艺页面
|
||||
this.$router.push({ name: "pms-shapeStep" });
|
||||
@ -421,7 +546,7 @@ export default {
|
||||
this.renderDialog = true;
|
||||
|
||||
this.$nextTick(() => {
|
||||
// console.log("init dialog", row_id, detail_mode);
|
||||
// //console.log("init dialog", row_id, detail_mode);
|
||||
this.$refs["order-dialog"].init(/** some args... */ row_id, detail_mode);
|
||||
});
|
||||
},
|
||||
|
@ -148,7 +148,7 @@ export default {
|
||||
watch: {
|
||||
$route: function (route) {
|
||||
if (route.hash) {
|
||||
console.log("acitive hash", route.hash);
|
||||
//console.log("acitive hash", route.hash);
|
||||
this.activeTable = route.hash;
|
||||
}
|
||||
},
|
||||
@ -269,7 +269,7 @@ export default {
|
||||
inject: ["urls"],
|
||||
mounted() {
|
||||
this.getSpecificList("ongoing", this.conditions.ongoing);
|
||||
console.log("[list view with head]", this.headConfigs);
|
||||
//console.log("[list view with head]", this.headConfigs);
|
||||
},
|
||||
activated() {
|
||||
this.refreshLayoutKey = this.layoutTable();
|
||||
@ -296,7 +296,7 @@ export default {
|
||||
if ("list" in res.data) {
|
||||
this.dataLists[type] = res.data.list;
|
||||
this.totalPage[type] = res.data.total;
|
||||
} else console.log("没有res.data.list属性");
|
||||
}
|
||||
} else {
|
||||
this.dataLists[type].splice(0);
|
||||
this.totalPage[type] = 0;
|
||||
@ -339,7 +339,7 @@ export default {
|
||||
},
|
||||
})
|
||||
.then(({ data: res }) => {
|
||||
console.log("[http response] res is: ", res);
|
||||
//console.log("[http response] res is: ", res);
|
||||
|
||||
// page 场景:
|
||||
if ("list" in res.data) {
|
||||
@ -360,7 +360,7 @@ export default {
|
||||
|
||||
/** 处理 表格操作 */
|
||||
handleOperate({ type, data }) {
|
||||
console.log("payload", type, data);
|
||||
//console.log("payload", type, data);
|
||||
// 编辑、删除、跳转路由、打开弹窗(动态component)都可以在配置里加上 url
|
||||
// payload: { type: string, data: string | number | object }
|
||||
switch (type) {
|
||||
@ -404,7 +404,7 @@ export default {
|
||||
break;
|
||||
}
|
||||
case "status": {
|
||||
console.log("status", data);
|
||||
//console.log("status", data);
|
||||
// TODO: 类似于这种字符串,可以统一集中到一个文件里
|
||||
const { id, code } = data;
|
||||
const queryCondition = { id, code };
|
||||
@ -448,13 +448,13 @@ export default {
|
||||
}
|
||||
delete params.timerange;
|
||||
}
|
||||
console.log("[search form btn click]", Object.assign({}, this.conditions.ongoing, params));
|
||||
//console.log("[search form btn click]", Object.assign({}, this.conditions.ongoing, params));
|
||||
// 发起请求
|
||||
this.getSpecificList("ongoing", Object.assign({}, this.conditions.ongoing, params));
|
||||
}
|
||||
}
|
||||
case "pending":
|
||||
console.log("[search form btn click]", type, btnName, payload);
|
||||
//console.log("[search form btn click]", type, btnName, payload);
|
||||
if (btnName === "压制工艺") {
|
||||
// 跳转至压制工艺页面
|
||||
alert("跳转至压制工艺页面");
|
||||
@ -470,7 +470,7 @@ export default {
|
||||
case "finished":
|
||||
break;
|
||||
}
|
||||
// console.log("[search] form handleBtnClick", type, btnName, payload);
|
||||
// //console.log("[search] form handleBtnClick", type, btnName, payload);
|
||||
// switch (btnName) {
|
||||
// case "新增":
|
||||
// this.openDialog();
|
||||
|
@ -85,7 +85,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
handleOperate({ type, data: id }) {
|
||||
console.log("payload", type, id);
|
||||
//console.log("payload", type, id);
|
||||
switch (type) {
|
||||
case "blender-edit":
|
||||
this.blenderOrderEditVisible = true;
|
||||
@ -108,7 +108,7 @@ export default {
|
||||
type: "warning",
|
||||
})
|
||||
.then(() => {
|
||||
console.log("here");
|
||||
//console.log("here");
|
||||
this.$http
|
||||
.post(this.urls.detach, id /* { id: data } */, { headers: { "Content-Type": "application/json" } })
|
||||
.then(({ data: res }) => {
|
||||
@ -159,7 +159,7 @@ export default {
|
||||
...this.extraQueryFields,
|
||||
};
|
||||
|
||||
console.log("getAlist", data, this.pageIsPost);
|
||||
//console.log("getAlist", data, this.pageIsPost);
|
||||
|
||||
return this.$http({
|
||||
url: this.urls.page ?? this.urls.base + "/page",
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user