feat:光芯

This commit is contained in:
shijing 2024-07-22 13:35:39 +08:00
parent 58c24851c6
commit d401e4b4dd
19 changed files with 5466 additions and 339 deletions

View File

@ -3,10 +3,10 @@ NODE_ENV = development
# 标题 # 标题
# VUE_APP_TITLE = '曲阳金隅安全智能管控平台' # VUE_APP_TITLE = '曲阳金隅安全智能管控平台'
# VUE_APP_TITLE = '托克逊能源管理平台' VUE_APP_TITLE = '托克逊能源管理平台'
# VUE_APP_TITLE = '中建材光子科技有限公司' # VUE_APP_TITLE = '中建材光子科技有限公司'
VUE_APP_TITLE = '超低排放系统' # VUE_APP_TITLE = '超低排放系统'
VUE_APP_PJ = 'pf' VUE_APP_PJ = 'gx'
# 接口地址 # 接口地址
#VUE_APP_API_BASEURL = http://1.203.161.103:2800/api #VUE_APP_API_BASEURL = http://1.203.161.103:2800/api
@ -16,10 +16,10 @@ VUE_APP_PJ = 'pf'
# VUE_APP_API_BASEURL = http://127.0.0.1:2226/api # VUE_APP_API_BASEURL = http://127.0.0.1:2226/api
#测试环境 #测试环境
# VUE_APP_API_BASEURL = http://49.232.14.174:2226/api VUE_APP_API_BASEURL = http://49.232.14.174:2226/api
VUE_APP_API_BASEURL = http://127.0.0.1:2226/api # VUE_APP_API_BASEURL = http://127.0.0.1:2226/api
# VUE_APP_BASEURL = http://49.232.14.174:2226 VUE_APP_BASEURL = http://49.232.14.174:2226
VUE_APP_BASEURL = http://127.0.0.1:2226 # VUE_APP_BASEURL = http://127.0.0.1:2226
# #光子 # #光子
# VUE_APP_API_BASEURL = http://49.232.14.174:2250/api # VUE_APP_API_BASEURL = http://49.232.14.174:2250/api

View File

@ -204,6 +204,15 @@ export default {
); );
}, },
}, },
change: {
name: "修改日志",
req: async function (id, data) {
return await http.post(
`${config.API_URL}/wpm/mlog/${id}/change/`,
data
);
},
},
}, },
mlogb: { mlogb: {
list: { list: {
@ -218,6 +227,15 @@ export default {
return await http.post(`${config.API_URL}/wpm/mlogb/in/`, data); return await http.post(`${config.API_URL}/wpm/mlogb/in/`, data);
}, },
}, },
updateIn: {
name: "更新",
req: async function (id, data) {
return await http.put(
`${config.API_URL}/wpm/mlogb/in/${id}/`,
data
);
},
},
delIn: { delIn: {
name: "删除", name: "删除",
req: async function (id) { req: async function (id) {
@ -226,6 +244,15 @@ export default {
); );
}, },
}, },
updateOut: {
name: "更新",
req: async function (id, data) {
return await http.put(
`${config.API_URL}/wpm/mlogb/out/${id}/`,
data
);
},
},
}, },
handover: { handover: {
list: { list: {
@ -339,4 +366,10 @@ export default {
}, },
}, },
}, },
prints: {
name: "打印",
req: async function (data) {
return await http.post(`${config.API_URL}/print/`, data);
},
},
}; };

View File

@ -1089,7 +1089,7 @@ const routes = [
meta: { meta: {
title: "车间任务", title: "车间任务",
icon: "el-icon-cellphone", icon: "el-icon-cellphone",
perms: ["pm"], perms: ["pm_gx"],
}, },
component: "pm/utask", component: "pm/utask",
}, },
@ -1221,16 +1221,26 @@ const routes = [
title: "生产执行gx", title: "生产执行gx",
icon: "el-icon-grid", icon: "el-icon-grid",
type: "menu", type: "menu",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
children: [ children: [
{
name: "printTest",
path: "/wpm_gx/print",
meta: {
title: "打印测试",
icon: "el-icon-files",
perms: ["wpm_gx"],
},
component: "wpm_gx/print",
},
{ {
name: "qiepian", name: "qiepian",
path: "/wpm_gx/qiepian", path: "/wpm_gx/qiepian",
meta: { meta: {
title: "切片", title: "切片",
icon: "el-icon-files", icon: "el-icon-files",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
component: "wpm_gx/qiepian", component: "wpm_gx/qiepian",
}, },
@ -1240,7 +1250,7 @@ const routes = [
meta: { meta: {
title: "活化", title: "活化",
icon: "el-icon-cellphone", icon: "el-icon-cellphone",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
component: "wpm_gx/huohua", component: "wpm_gx/huohua",
}, },
@ -1250,7 +1260,7 @@ const routes = [
meta: { meta: {
title: "黑化", title: "黑化",
icon: "el-icon-cellphone", icon: "el-icon-cellphone",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
component: "wpm_gx/heihua", component: "wpm_gx/heihua",
}, },
@ -1260,7 +1270,7 @@ const routes = [
meta: { meta: {
title: "烧结", title: "烧结",
icon: "el-icon-cellphone", icon: "el-icon-cellphone",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
component: "wpm_gx/shaojie", component: "wpm_gx/shaojie",
}, },
@ -1270,7 +1280,7 @@ const routes = [
meta: { meta: {
title: "减薄", title: "减薄",
icon: "el-icon-cellphone", icon: "el-icon-cellphone",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
component: "wpm_gx/jianbo", component: "wpm_gx/jianbo",
}, },
@ -1280,7 +1290,7 @@ const routes = [
meta: { meta: {
title: "精雕", title: "精雕",
icon: "el-icon-cellphone", icon: "el-icon-cellphone",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
component: "wpm_gx/jingdiao", component: "wpm_gx/jingdiao",
}, },
@ -1290,7 +1300,7 @@ const routes = [
meta: { meta: {
title: "磨抛", title: "磨抛",
icon: "el-icon-cellphone", icon: "el-icon-cellphone",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
component: "wpm_gx/mopao", component: "wpm_gx/mopao",
}, },
@ -1300,7 +1310,7 @@ const routes = [
meta: { meta: {
title: "倒角", title: "倒角",
icon: "el-icon-cellphone", icon: "el-icon-cellphone",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
component: "wpm_gx/daojiao", component: "wpm_gx/daojiao",
}, },
@ -1310,7 +1320,7 @@ const routes = [
meta: { meta: {
title: "超洗", title: "超洗",
icon: "el-icon-cellphone", icon: "el-icon-cellphone",
perms: ["wpm"], perms: ["wpm_gx"],
}, },
component: "wpm_gx/chaoxi", component: "wpm_gx/chaoxi",
}, },

View File

@ -1,20 +1,22 @@
import { createApp } from 'vue' import { createApp } from "vue";
import ElementPlus from 'element-plus' import ElementPlus from "element-plus";
import 'element-plus/dist/index.css' import "element-plus/dist/index.css";
import 'element-plus/theme-chalk/display.css' import "element-plus/theme-chalk/display.css";
import scui from './scui' import scui from "./scui";
import ehsui from './ehs' import ehsui from "./ehs";
import i18n from './locales' import i18n from "./locales";
import router from './router' import router from "./router";
import store from './store' import store from "./store";
import App from './App.vue' import App from "./App.vue";
import * as ElementPlusIconsVue from '@element-plus/icons-vue' import * as ElementPlusIconsVue from "@element-plus/icons-vue";
import preventReClick from './utils/preventReClick' import preventReClick from "./utils/preventReClick";
import Print from './utils/print2' import Print from "./utils/print2";
import Xlsx from './utils/xlsx' import Xlsx from "./utils/xlsx";
import DataVVue3 from '@kjgl77/datav-vue3' import jsBarCode from "./utils/jsBarCode";
import * as Cesium from 'cesium' import DataVVue3 from "@kjgl77/datav-vue3";
import htmlToPdf from "./utils/htmlToPdf";
import * as Cesium from "cesium";
const app = createApp(App); const app = createApp(App);
@ -28,13 +30,14 @@ app.use(ehsui);
app.use(preventReClick); app.use(preventReClick);
app.use(Print); app.use(Print);
app.use(Xlsx); app.use(Xlsx);
app.use(htmlToPdf);
app.use(jsBarCode);
app.use(DataVVue3); app.use(DataVVue3);
//挂载app //挂载app
app.mount('#app'); app.mount("#app");
for (const [key, component] of Object.entries(ElementPlusIconsVue)) { for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component) app.component(key, component);
} }
const debounce = (fn, delay) => { const debounce = (fn, delay) => {
@ -60,4 +63,4 @@ window.ResizeObserver = class ResizeObserver extends _ResizeObserver {
callback = debounce(callback, 16); callback = debounce(callback, 16);
super(callback); super(callback);
} }
}; };

45
src/utils/htmlToPdf.js Normal file
View File

@ -0,0 +1,45 @@
import html2Canvas from "html2canvas";
import JsPDF from "jspdf";
/**
*
* @param {*} reportName 下载时候的标题
* @param {*} isDownload 是否下载默认为下载传false不下载
*/
const getPdf = function (reportName, isDownload = true) {
return new Promise((resolve, reject) => {
var title = reportName;
html2Canvas(document.querySelector("#pdfDom"), {
allowTaint: true,
useCORS: true,
}).then((canvas) => {
const contentWidth = canvas.width;
const contentHeight = canvas.height;
console.log("contentWidth", contentWidth);
console.log("contentHeight", contentHeight);
//页面偏移
let position = 5;
//a4纸的尺寸[595.28,841.89]html页面生成的canvas在pdf中图片的宽高
const imgWidth = contentWidth - 20;
const imgHeight = contentHeight - 20;
let pageData = canvas.toDataURL("image/jpeg", 1.0);
let PDF = new JsPDF("p", "px", [210, 270]);
//有两个高度需要区分一个是html页面的实际高度和生成pdf的页面高度(841.89)
//当内容未超过pdf一页显示的范围无需分页
PDF.addImage(pageData, "JPEG", 10, 10, imgWidth, imgHeight);
PDF.save(title + ".pdf");
if (isDownload) {
PDF.save(title + ".pdf");
}
// 删除本地存储的base64字段
var pdfData = PDF.output("datauristring"); //获取base64Pdf
let blobData = new Blob([PDF], {
type: "application/pdf",
});
console.log("blobData", blobData);
resolve(blobData);
});
});
};
export default getPdf;

4095
src/utils/jsBarCode.js Normal file

File diff suppressed because it is too large Load Diff

View File

@ -156,6 +156,11 @@
/> />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :md="12" :sm="24">
<el-form-item label="绑定工序">
<el-switch v-model="form.batch_bind" />
</el-form-item>
</el-col>
</el-row> </el-row>
</el-form> </el-form>
</el-main> </el-main>
@ -174,6 +179,7 @@ const defaultForm = {
process: null, process: null,
sort: 1, sort: 1,
out_rate: 100, out_rate: 100,
batch_bind: true,
is_autotask: true, is_autotask: true,
is_count_utask: false, is_count_utask: false,
}; };

View File

@ -128,7 +128,7 @@
v-if="dialog.save" v-if="dialog.save"
ref="saveDialog" ref="saveDialog"
@success="handleSaveSuccess" @success="handleSaveSuccess"
@closed="dialog.save = false" @closed="saveClose"
> >
</save-dialog> </save-dialog>
<show-dialog <show-dialog
@ -219,7 +219,10 @@ export default {
this.$refs.showDialog.open().setData(row); this.$refs.showDialog.open().setData(row);
}); });
}, },
saveClose() {
this.$refs.table.refresh();
this.dialog.save = false;
},
// //
permission() { permission() {
this.dialog.permission = true; this.dialog.permission = true;
@ -229,7 +232,7 @@ export default {
}, },
// //
async table_del(row) { async table_del(row) {
this.$API.rpm.rpj.delete this.$API.mtm.routepack.delete
.req(row.id) .req(row.id)
.then((res) => { .then((res) => {
this.$message.success("删除成功"); this.$message.success("删除成功");

View File

@ -311,10 +311,8 @@ export default {
.then((res) => { .then((res) => {
that.tLoading = false; that.tLoading = false;
that.$message.success("提交成功"); that.$message.success("提交成功");
that.$router.push({ that.$emit("close");
name: "", that.visible = false;
query: {},
});
}) })
.catch((e) => { .catch((e) => {
that.tLoading = false; that.tLoading = false;

View File

@ -30,9 +30,9 @@
:apiObj="apiObj" :apiObj="apiObj"
row-key="id" row-key="id"
stripe stripe
id="myTable"
:params="params" :params="params"
:query="query" :query="query"
id="myTable"
> >
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column <el-table-column
@ -48,6 +48,9 @@
show-overflow-tooltip show-overflow-tooltip
min-width="100" min-width="100"
> >
<template #default="scope">
{{ scope.row.batch }}
</template>
</el-table-column> </el-table-column>
<el-table-column label="抽样数量" prop="count"> <el-table-column label="抽样数量" prop="count">
</el-table-column> </el-table-column>
@ -77,6 +80,14 @@
</el-table-column> </el-table-column>
<el-table-column label="结石" prop="count_n_js"> <el-table-column label="结石" prop="count_n_js">
</el-table-column> </el-table-column>
<el-table-column label="杂质" prop="count_n_zz">
</el-table-column>
<el-table-column label="颜色青" prop="count_n_ysq">
</el-table-column>
<el-table-column label="划伤" prop="count_n_hs">
</el-table-column>
<el-table-column label="扁" prop="count_n_b">
</el-table-column>
<el-table-column label="其他" prop="count_n_qt"> <el-table-column label="其他" prop="count_n_qt">
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
@ -92,6 +103,11 @@
</el-table-column> </el-table-column>
<el-table-column label="检测人" prop="test_user_name"> <el-table-column label="检测人" prop="test_user_name">
</el-table-column> </el-table-column>
<el-table-column label="物料id">
<template #default="scope">
{{ scope.row.material }}
</template>
</el-table-column>
</scTable> </scTable>
</el-main> </el-main>
</el-container> </el-container>

View File

@ -25,62 +25,38 @@
</div> </div>
</el-header> </el-header>
<el-main class="nopadding"> <el-main class="nopadding">
<scTable <scTable ref="table" :apiObj="apiObj" row-key="id" :params="params">
ref="table"
:apiObj="apiObj"
row-key="id"
hidePagination
:params="params"
>
<el-table-column <el-table-column
label="#" label="#"
type="index" type="index"
width="50" width="50"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="工段名称" label="物料"
prop="name" prop="material_name"
min-width="100" min-width="120"
></el-table-column> ></el-table-column>
<el-table-column label="所在工序" prop="cate" min-width="100"> <el-table-column label="批次" prop="batch" min-width="100">
<template #default="scope">
<span
>{{ scope.row.process_cate }} -
{{ scope.row.process_name }}</span
>
</template>
</el-table-column> </el-table-column>
<el-table-column label="数量" prop="count"></el-table-column>
<el-table-column <el-table-column
label="所属部门" label="交送人"
prop="belong_dept_name" prop="send_user_name"
min-width="150"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="班次规则" label="接收人"
prop="shift_rule" prop="recive_user_name"
min-width="80"
></el-table-column>
<!-- <el-table-column label="能源监测" prop="need_enm" min-width="80">
<template #default="scope">
<span v-if="scope.row.need_enm"></span>
<span v-else></span>
</template>
</el-table-column> -->
<el-table-column
label="排序"
prop="sort"
min-width="80"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="创建时间" label="交接日期"
prop="create_time" prop="send_date"
min-width="150" width="120"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="操作" label="操作"
fixed="right" fixed="right"
align="center" align="center"
width="180" width="120"
> >
<template #default="scope"> <template #default="scope">
<el-button <el-button
@ -114,21 +90,27 @@
<save-dialog <save-dialog
v-if="dialog.save" v-if="dialog.save"
ref="saveDialog" ref="saveDialog"
:mgroupId="mgroupId"
@success="handleSaveSuccess" @success="handleSaveSuccess"
@closed="dialog.save = false" @closed="dialog.save = false"
> >
</save-dialog> </save-dialog>
</template> </template>
<script> <script>
import saveDialog from "./mlog_form.vue"; import saveDialog from "./handover_form.vue";
export default { export default {
name: "mgroup", props: {
mgroupName: {
type: String,
default: "",
},
},
name: "handover",
components: { components: {
saveDialog, saveDialog,
}, },
data() { data() {
return { return {
// apiObj: this.$API.mtm.mgroup.list,
apiObj: null, apiObj: null,
params: { cate: "photon" }, params: { cate: "photon" },
query: {}, query: {},
@ -138,13 +120,25 @@ export default {
}, },
tableData: [], tableData: [],
selection: [], selection: [],
cates_: { mtask: "",
section: "工序", mlogId: "",
other: "其他", processId: "",
}, processCate: "",
}; };
}, },
mounted() {}, mounted() {
let that = this;
that.$API.mtm.mgroup.list
.req({ page: 0, search: that.mgroupName })
.then((res) => {
that.mgroupId = res[0].id;
that.processId = res[0].process;
that.processCate = res[0].process_cate;
that.params.send_mgroup = res[0].id;
that.params.recive_mgroup = res[0].id;
that.apiObj = that.$API.wpm.handover.list;
});
},
methods: { methods: {
// //
table_add() { table_add() {

View File

@ -0,0 +1,328 @@
<template>
<el-dialog
:title="titleMap[mode]"
v-model="visible"
width="1000px"
:size="1000"
destroy-on-close
@closed="$emit('closed')"
>
<el-form
ref="dialogForm"
:model="form"
:rules="rules"
label-width="80px"
>
<el-row>
<el-col :md="12" :sm="24">
<el-form-item label="交接物料" prop="wm">
<el-select
v-model="form.wm"
placeholder="交接物料"
clearable
style="width: 100%"
@change="materialChange"
>
<el-option
v-for="item in materialOptions"
:key="item.id"
:label="item.batch"
:value="item.id"
>
<span>{{ item.batch }}</span>
<span v-if="item.notok_sign !== null"
>-{{ item.notok_sign }}</span
>
<span>-[{{ item.count }}]</span>
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="交送日期" prop="send_date">
<el-date-picker
v-model="form.send_date"
type="date"
placeholder="选择时间"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
style="width: 100%"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="交接数量" width="100">
<el-input-number
v-model="form.count"
controls-position="right"
:min="0"
step="1"
:step-strictly="true"
style="width: 100%"
placeholder="交接数量"
>
</el-input-number>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="交送人" prop="send_user">
<el-select
v-model="form.send_user"
placeholder="交送人"
clearable
style="width: 100%"
>
<el-option
v-for="item in userList"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="接收工段" prop="recive_mgroup">
<el-select
v-model="form.recive_mgroup"
placeholder="接收工段"
clearable
style="width: 100%"
>
<el-option
v-for="item in mgroupOptions"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="接收人" prop="recive_user">
<el-select
v-model="form.recive_user"
placeholder="接收人"
clearable
style="width: 100%"
>
<el-option
v-for="item in userList2"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-footer>
<el-button type="primary" v-loading="isSaveing" @click="submit"
>确定</el-button
>
<el-button @click="visible = false">取消</el-button>
</el-footer>
</el-dialog>
</template>
<script>
export default {
emits: ["success", "closed"],
props: {
mgroupId: {
type: String,
default: "",
},
},
data() {
return {
yseorno: ["是", "否"],
loading: false,
mode: "add",
titleMap: {
add: "新增交接记录",
edit: "编辑交接记录",
show: "查看交接记录",
},
handle_user: [],
form: {
batch: "",
count: 0, //
wm: "",
send_date: "",
send_user: "",
send_mgroup: "",
recive_user: "",
recive_mgroup: "",
},
rules: {
batch: [
{
required: true,
message: "请输入批次号",
trigger: "blur",
},
],
wm: {
required: true,
message: "请选择物料",
trigger: "blur",
},
send_date: [
{
required: true,
message: "请选择送料日期",
trigger: "blur",
},
],
send_user: [
{
required: true,
message: "请选择交送人",
trigger: "blur",
},
],
send_mgroup: [
{
required: true,
message: "请选择交送工段",
trigger: "blur",
},
],
recive_user: [
{
required: true,
message: "请选择接收人",
trigger: "blur",
},
],
recive_mgroup: [
{
required: true,
message: "请选择接收工段",
trigger: "blur",
},
],
},
userList: [],
userList2: [],
mgroupOptions: [],
materialOptions: [],
visible: false,
isSaveing: false,
setFiltersVisible: false,
};
},
mounted() {
let materialObj = this.$TOOL.data.get("MATERIAL_OBJECT");
this.materialObj = materialObj;
let date = new Date();
let year = date.getFullYear();
let month = date.getMonth() + 1;
let day = date.getDate();
this.form.handle_date = year + "-" + month + "-" + day;
this.form.send_mgroup = this.mgroupId;
this.getMaterial();
this.getUserList();
this.getMgroupOptions();
},
methods: {
//
getMgroupOptions() {
this.$API.mtm.mgroup.list
.req({ page: 0, type__in: "dept" })
.then((res) => {
this.mgroupOptions = res;
});
},
//
getMaterial() {
let that = this;
this.$API.wpm.wmaterial.list
.req({ mgroup: that.mgroupId, page: 0 })
.then((res) => {
that.materialOptions = res;
});
},
//
getUserList() {
let that = this;
this.$API.system.user.list
.req({ mgroup__name: "切片", page: 0 })
.then((res) => {
that.userList2 = res;
});
this.$API.system.user.list
.req({ mgroup__name: "活化", page: 0 })
.then((res) => {
that.userList = res;
});
},
//
open(mode = "add") {
this.mode = mode;
this.visible = true;
return this;
},
materialChange(val) {
let data = this.materialOptions.filter((item) => {
return item.id == val;
});
this.form.batch = data[0].batch;
},
//
submit() {
this.$refs.dialogForm.validate(async (valid) => {
if (valid) {
if (this.mode == "add") {
this.$API.wpm.handover.create
.req(this.form)
.then((res) => {
this.isSaveing = false;
this.$emit("success", this.form, this.mode);
this.visible = false;
this.$message.success("操作成功");
})
.catch((err) => {
//
this.isSaveing = false;
return err;
});
} else if (this.mode == "edit") {
this.$API.wpm.handover.update
.req(this.form.id, this.form)
.then((res) => {
this.isSaveing = false;
this.$emit("success", this.form, this.mode);
this.visible = false;
this.$message.success("操作成功");
})
.catch((err) => {
//
this.isSaveing = false;
return err;
});
}
}
});
},
//
setData(data) {
Object.assign(this.form, data);
},
//
setFilters(filters) {
this.selectionFilters = filters;
this.setFiltersVisible = true;
},
},
};
</script>
<style scoped>
.formTitle {
margin-bottom: 10px;
font-weight: 600;
}
</style>

View File

@ -1,5 +1,31 @@
<template> <template>
<el-container> <el-container>
<el-header>
<div class="left-panel">
<el-button type="primary" @click="tomio" v-auth="'mio.do'"
>领料</el-button
>
<el-button type="primary" @click="tomio" v-auth="'mio.do'"
>入库</el-button
>
</div>
<div class="right-panel">
<!-- <el-button type="primary" @click="materialsChoses('wm')"
>选择物料</el-button
> -->
<el-input
style="margin-right: 5px"
v-model="query.search"
placeholder="名称"
clearable
></el-input>
<el-button
type="primary"
icon="el-icon-search"
@click="handleQuery"
></el-button>
</div>
</el-header>
<el-main class="nopadding"> <el-main class="nopadding">
<scTable <scTable
ref="table" ref="table"
@ -14,37 +40,23 @@
width="50" width="50"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="工段名称" label="物料名称"
prop="name" prop="material_name"
min-width="100"
></el-table-column>
<el-table-column
label="批次号"
prop="batch"
min-width="100" min-width="100"
></el-table-column> ></el-table-column>
<el-table-column label="所在工序" prop="cate" min-width="100">
<template #default="scope">
<span
>{{ scope.row.process_cate }} -
{{ scope.row.process_name }}</span
>
</template>
</el-table-column>
<el-table-column <el-table-column
label="所属部门" label="所属部门"
prop="belong_dept_name" prop="belong_dept_name"
min-width="150" min-width="150"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="班次规则" label="数量"
prop="shift_rule" prop="count"
min-width="80"
></el-table-column>
<!-- <el-table-column label="能源监测" prop="need_enm" min-width="80">
<template #default="scope">
<span v-if="scope.row.need_enm"></span>
<span v-else></span>
</template>
</el-table-column> -->
<el-table-column
label="排序"
prop="sort"
min-width="80" min-width="80"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
@ -86,16 +98,35 @@
</el-table-column> </el-table-column>
</scTable> </scTable>
</el-main> </el-main>
<el-dialog title="选择物料" v-model="materialsVisible" width="90%">
<materials
style="height: 500px"
:materialType="materialType"
ref="materialsChose"
@choseChange="choseChange"
></materials>
</el-dialog>
</el-container> </el-container>
</template> </template>
<script> <script>
import materials from "./../mtm/materials.vue";
export default { export default {
name: "mgroup", props: {
mgroupName: {
type: String,
default: "",
},
},
components: {
materials,
},
name: "wmaterial",
data() { data() {
return { return {
// apiObj: this.$API.mtm.mgroup.list,
apiObj: null, apiObj: null,
params: { cate: "photon" }, params: {
mgroupx: "",
},
query: {}, query: {},
dialog: { dialog: {
save: false, save: false,
@ -103,38 +134,36 @@ export default {
}, },
tableData: [], tableData: [],
selection: [], selection: [],
cates_: { queryWm: {
section: "工序", search: "",
other: "其他", material: "",
}, },
materialType: "wm",
visibleDrawer: false,
}; };
}, },
mounted() {}, mounted() {
let that = this;
that.$API.mtm.mgroup.list
.req({ page: 0, search: that.mgroupName })
.then((res) => {
that.mgroupId = res[0].id;
that.params.mgroupx = res[0].id;
that.apiObj = that.$API.wpm.wmaterial.list;
});
},
methods: { methods: {
// materialsChoses(str) {
table_add() { this.materialType = str;
this.dialog.save = true; this.materialsVisible = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("add");
});
}, },
// choseChange(data) {
table_edit(row) { this.queryWm.material = data;
this.dialog.save = true; this.$refs.table_wm.queryData(this.queryWm);
this.$nextTick(() => { this.materialsVisible = false;
this.$refs.saveDialog.open("edit").setData(row);
});
}, },
// tomio() {
async table_del(row) { this.$router.push({ name: "halfgood_mio" });
var id = row.id;
var res = await this.$API.mtm.mgroup.delete.req(id);
if (res.err_msg) {
this.$message.error(res.err_msg);
} else {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
}, },
// //
selectionChange(selection) { selectionChange(selection) {
@ -145,7 +174,6 @@ export default {
this.$refs.table.queryData(this.query); this.$refs.table.queryData(this.query);
}, },
// //
//
handleSaveSuccess(data, mode) { handleSaveSuccess(data, mode) {
this.dialog.save = true; this.dialog.save = true;
this.$refs.table.refresh(); this.$refs.table.refresh();

View File

@ -7,7 +7,7 @@
@closed="$emit('closed')" @closed="$emit('closed')"
> >
<div> <div>
<el-card style="width: 100%" header="基本信息" shadow="hover"> <el-card style="width: 100%" header="基本信息" shadow="never">
<el-descriptions> <el-descriptions>
<el-descriptions-item label="工艺路线">{{ <el-descriptions-item label="工艺路线">{{
mlogItem.material_out_name mlogItem.material_out_name
@ -34,47 +34,64 @@
mlogItem.create_time mlogItem.create_time
}}</el-descriptions-item> }}</el-descriptions-item>
</el-descriptions> </el-descriptions>
<el-button <div
type="primary" style="
@click="mioSubmit" padding: 5px 10px;
v-auth="'mio.submit'" display: flex;
v-if="mlogItem.state == 10" justify-content: end;
"
> >
编辑 <el-button
</el-button> type="primary"
v-if="mlogItem.submit_time == null"
@click="mlogUpdate"
v-auth="'mlog.update'"
>
编辑
</el-button>
<el-button
type="primary"
v-if="mlogItem.submit_time == null"
:loading="isSaveing"
@click="mlogSubmit"
>提交</el-button
>
</div>
</el-card> </el-card>
<el-card style="width: 100%" header="输入信息" shadow="hover"> <el-card
style="width: 100%; margin: 1vh 0"
header="物料消耗"
shadow="never"
>
<div> <div>
<el-button <el-button
type="primary" type="primary"
v-if="mlogItem.submit_time == null"
icon="el-icon-plus" icon="el-icon-plus"
@click="table_add" @click="table_add"
>新增</el-button >新增</el-button
> >
</div> </div>
<scTable <scTable
ref="table" ref="tableIn"
:apiObj="apiObj" :apiObj="apiObj"
row-key="id" row-key="id"
stripe stripe
:params="params" :params="paramsIn"
hidePagination hidePagination
hideDo
> >
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column <el-table-column
label="物料" label="物料"
prop="material" prop="material_in_name"
show-overflow-tooltip show-overflow-tooltip
> ></el-table-column>
<template #default="scope"
>{{ scope.row.material_name }}
</template>
</el-table-column>
<el-table-column label="批次号" prop="batch"> <el-table-column label="批次号" prop="batch">
</el-table-column> </el-table-column>
<el-table-column label="领用数量" prop="count_use"> <el-table-column label="领用数量" prop="count_use">
</el-table-column> </el-table-column>
<el-table-column label="破碎数量" prop="count_break">
</el-table-column>
<el-table-column <el-table-column
label="创建时间" label="创建时间"
prop="create_time" prop="create_time"
@ -90,9 +107,17 @@
<template #default="scope"> <template #default="scope">
<el-button <el-button
link link
type="primary"
@click="table_in_edit(scope.row)"
:disabled="mlogItem.submit_time !== null"
>
编辑
</el-button>
<el-button
link
:disabled="mlogItem.submit_time !== null"
type="danger" type="danger"
@click="table_del(scope.row)" @click="table_in_del(scope.row)"
v-if="mlogItem.state == 10"
> >
删除 删除
</el-button> </el-button>
@ -100,29 +125,24 @@
</el-table-column> </el-table-column>
</scTable> </scTable>
</el-card> </el-card>
<el-card style="width: 100%" header="输出信息" shadow="hover"> <el-card style="width: 100%" header="产出物料" shadow="never">
<scTable <scTable
ref="table" ref="tableOut"
:apiObj="apiObj" :apiObj="apiObj"
row-key="id" row-key="id"
stripe stripe
:params="params" :params="paramsOut"
hidePagination hidePagination
hideDo
> >
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column <el-table-column
label="物料" label="产出物料"
prop="material" prop="material_out_name"
show-overflow-tooltip show-overflow-tooltip
> ></el-table-column>
<template #default="scope"
>{{ scope.row.material_name }}
</template>
</el-table-column>
<el-table-column label="批次号" prop="batch"> <el-table-column label="批次号" prop="batch">
</el-table-column> </el-table-column>
<el-table-column label="数量" prop="count"> <el-table-column label="数量" prop="count_real">
</el-table-column> </el-table-column>
<el-table-column label="不合格数量" prop="count_notok"> <el-table-column label="不合格数量" prop="count_notok">
</el-table-column> </el-table-column>
@ -142,7 +162,8 @@
<el-button <el-button
link link
type="primary" type="primary"
@click="table_check(scope.row)" :disabled="mlogItem.submit_time !== null"
@click="table_out_check(scope.row)"
> >
检验 检验
</el-button> </el-button>
@ -151,18 +172,13 @@
link link
type="danger" type="danger"
@click="check_reSet(scope.row)" @click="check_reSet(scope.row)"
v-if="scope.row.test_date !== null" :disabled="
mlogItem.submit_time !== null &&
scope.row.test_date !== null
"
> >
撤回 撤回
</el-button> </el-button>
<el-button
link
type="danger"
@click="table_del(scope.row)"
v-if="mlogItem.state == 10"
>
删除
</el-button>
</template> </template>
</el-table-column> </el-table-column>
</scTable> </scTable>
@ -176,11 +192,66 @@
@closed="dialog.save = false" @closed="dialog.save = false"
> >
</save-dialog> </save-dialog>
<check-dialog
v-if="dialog.check"
ref="checkDialog"
@success="handleCheckSuccess"
@closed="dialog.check = false"
>
</check-dialog>
<el-dialog v-model="saveInDialog" title="新增/编辑">
<el-form
:model="saveInForm"
:rules="rules"
label-width="100px"
ref="saveInForm"
>
<el-row>
<el-col :span="23">
<el-form-item label="领取数量" prop="count_use">
<el-input-number
v-model="saveInForm.count_use"
:min="1"
style="width: 100%"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :span="23">
<el-form-item label="破碎数量" prop="count_break">
<el-input-number
v-model="saveInForm.count_break"
:min="0"
style="width: 100%"
controls-position="right"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
<template #footer>
<el-button
type="primary"
:loading="isSaveing"
@click="saveInSubmit()"
> </el-button
>
</template>
</el-dialog>
<edit-dialog
v-if="dialog.edit"
ref="editDialog"
@success="handleEditSuccess"
@closed="dialog.edit = false"
>
</edit-dialog>
</div> </div>
</el-drawer> </el-drawer>
</template> </template>
<script> <script>
import editDialog from "./mlog_form.vue";
import saveDialog from "./mlogb_form.vue"; import saveDialog from "./mlogb_form.vue";
import checkDialog from "./mlogb_check.vue";
export default { export default {
props: { props: {
mlogId: { mlogId: {
@ -189,7 +260,9 @@ export default {
}, },
}, },
components: { components: {
editDialog,
saveDialog, saveDialog,
checkDialog,
}, },
emits: ["success", "closed"], emits: ["success", "closed"],
data() { data() {
@ -199,23 +272,53 @@ export default {
form: {}, form: {},
dialog: { dialog: {
save: false, save: false,
edit: false,
check: false,
}, },
apiObj: null, apiObj: null,
params: { paramsIn: {
page: 0, page: 0,
mlog: "", mlog: "",
material_in__isnull: 0,
},
paramsOut: {
page: 0,
mlog: "",
material_out__isnull: 0,
}, },
mgroup: "", mgroup: "",
mlogItem: {}, mlogItem: {},
saveInForm: {
count_use: 0,
count_break: 0,
},
visible: false, visible: false,
isSaveing: false, isSaveing: false,
options: [], options: [],
saveInDialog: false,
setFiltersVisible: false, setFiltersVisible: false,
rules: {
count_use: [
{
required: true,
message: "请输入领取数量",
trigger: "blur",
},
],
count_break: [
{
required: true,
message: "请输入破碎数量",
trigger: "blur",
},
],
},
}; };
}, },
mounted() { mounted() {
this.getMlogItem(); this.getMlogItem();
this.params.mlog = this.mlogId; this.paramsIn.mlog = this.mlogId;
this.paramsOut.mlog = this.mlogId;
this.apiObj = this.$API.wpm.mlogb.list; this.apiObj = this.$API.wpm.mlogb.list;
}, },
methods: { methods: {
@ -235,41 +338,86 @@ export default {
Object.assign(this.form, data); Object.assign(this.form, data);
this.getRoute(data.id); this.getRoute(data.id);
}, },
//
mlogUpdate() {
this.dialog.edit = true;
this.$nextTick(() => {
this.$refs.editDialog.open("edit").setData(this.mlogItem);
});
},
// mlogUpdate(data) {
// this.$refs.editDialog.open().setData(data);
// },
table_add() { table_add() {
this.dialog.save = true; this.dialog.save = true;
this.$nextTick(() => { this.$nextTick(() => {
this.$refs.saveDialog.open(); this.$refs.saveDialog.open();
}); });
}, },
table_del(row) { //
this.$confirm("确定删除吗?").then(() => { table_in_edit(row) {
this.$API.wpm.mlogb.delIn.req(row.id).then((res) => { this.saveInForm = row;
this.$message.success("操作成功"); this.saveInDialog = true;
this.$refs.table.refresh(); },
//
saveInSubmit() {
let that = this;
that.$refs.saveInForm.validate(async (valid) => {
if (valid) {
that.isSaveing = true;
let obj = {};
obj.count_use = that.saveInForm.count_use;
obj.count_break = that.saveInForm.count_break;
that.$API.wpm.mlogb.updateIn
.req(that.saveInForm.id, obj)
.then((res) => {
that.isSaveing = false;
that.$message.success("操作成功");
that.saveInDialog = false;
that.$refs.tableIn.refresh();
that.$refs.tableOut.refresh();
})
.catch(() => {
that.isSaveing = false;
});
}
});
},
table_in_del(row) {
let that = this;
that.$confirm("确定删除吗?").then(() => {
that.$API.wpm.mlogb.delIn.req(row.id).then((res) => {
that.$message.success("操作成功");
that.$refs.tableIn.refresh();
that.$refs.tableOut.refresh();
//inout //inout
}); });
}); });
}, },
// table_out_check(row) {
submit() { this.dialog.check = true;
let that = this; this.$nextTick(() => {
that.$refs.dialogForm.validate(async (valid) => { this.$refs.checkDialog.open(row);
if (valid) {
that.isSaveing = true;
that.form.mgroup = that.mgroup;
if (that.mode === "add") {
that.$API.wpm.mlog.init.req(that.form).then((res) => {
that.isSaveing = false;
that.$emit("success");
that.visible = false;
that.$message.success("操作成功");
});
} else {
}
}
}); });
}, },
handleSaveSuccess() {},
//
mlogSubmit() {
let that = this;
that.$API.wpm.mlog.submit.req(that.mlogItem.id).then((res) => {
that.isSaveing = false;
that.visible = false;
that.$message.success("操作成功");
});
},
handleSaveSuccess() {
this.$refs.tableIn.refresh();
this.$refs.tableOut.refresh();
},
handleCheckSuccess() {
this.$refs.tableOut.refresh();
},
handleEditSuccess() {},
// //
setFilters(filters) { setFilters(filters) {
this.selectionFilters = filters; this.selectionFilters = filters;

View File

@ -16,87 +16,129 @@
label-width="80px" label-width="80px"
style="padding: 0 10px" style="padding: 0 10px"
> >
<el-form-item label="开始时间" prop="work_start_time"> <el-row>
<el-date-picker <el-col :md="12" :sm="24">
v-model="form.work_start_time" <el-form-item
type="datetime" label="开始时间"
value-format="YYYY-MM-DD HH:mm:ss" prop="work_start_time"
/> >
</el-form-item> <el-date-picker
<el-form-item label="间隔提醒"> :disabled="mode == 'edit'"
<el-input-number v-model="form.work_start_time"
v-model="form.reminder_interval_list[0]" type="datetime"
:min="1" value-format="YYYY-MM-DD HH:mm:ss"
style="width: 25%" />
controls-position="right" </el-form-item>
/> </el-col>
<el-input-number <el-col :md="12" :sm="24">
v-model="form.reminder_interval_list[1]" <el-form-item label="结束时间" prop="work_end_time">
:min="1" <el-date-picker
style="width: 25%" v-model="form.work_end_time"
controls-position="right" type="datetime"
/> value-format="YYYY-MM-DD HH:mm:ss"
<el-input-number />
v-model="form.reminder_interval_list[2]" </el-form-item>
:min="1" </el-col>
style="width: 25%" <el-col :span="24">
controls-position="right" <el-form-item label="间隔提醒">
/> <el-input-number
<el-input-number v-model="form.reminder_interval_list[0]"
v-model="form.reminder_interval_list[3]" :min="1"
:min="1" :disabled="mode == 'edit'"
style="width: 25%" style="width: 25%"
controls-position="right" controls-position="right"
/> />
</el-form-item> <el-input-number
<el-form-item label="生产路线" prop="route"> v-model="form.reminder_interval_list[1]"
<el-select :min="1"
v-model="form.route" :disabled="mode == 'edit'"
placeholder="生产路线" style="width: 25%"
clearable controls-position="right"
style="width: 100%" />
> <el-input-number
<el-option v-model="form.reminder_interval_list[2]"
v-for="item in routeOptions" :min="1"
:key="item.id" :disabled="mode == 'edit'"
:label="item.process_name" style="width: 25%"
:value="item.id" controls-position="right"
></el-option> />
</el-select> <el-input-number
</el-form-item> v-model="form.reminder_interval_list[3]"
<el-form-item label="生产设备"> :min="1"
<el-select :disabled="mode == 'edit'"
v-model="form.equipment" style="width: 25%"
placeholder="生产设备" controls-position="right"
clearable />
style="width: 100%" </el-form-item>
> </el-col>
<el-option <el-col :md="12" :sm="24">
v-for="item in options" <el-form-item label="生产路线" prop="route">
:key="item.id" <el-select
:label="item.name" v-model="form.route"
:value="item.id" placeholder="生产路线"
></el-option> clearable
</el-select> style="width: 100%"
</el-form-item> :disabled="mode == 'edit'"
<el-form-item label="操作人"> >
<el-select <el-option
v-model="form.handle_user" v-for="item in routeOptions"
placeholder="操作人" :key="item.id"
clearable :label="item.process_name"
style="width: 100%" :value="item.id"
> >
<el-option <span
v-for="item in userOptions" >{{ item.routepack_name }}-{{
:key="item.id" item.process_name
:label="item.name" }}</span
:value="item.id" >
></el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="备注"> </el-col>
<el-input v-model="form.note" clearable></el-input> <el-col :md="12" :sm="24">
</el-form-item> <el-form-item label="生产设备">
<el-select
v-model="form.equipment"
placeholder="生产设备"
clearable
:disabled="mode == 'edit'"
style="width: 100%"
>
<el-option
v-for="item in options"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="操作人">
<el-select
v-model="form.handle_user"
placeholder="操作人"
clearable
style="width: 100%"
>
<el-option
v-for="item in userOptions"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="备注">
<el-input
v-model="form.note"
clearable
></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
</el-main> </el-main>
<el-footer> <el-footer>
@ -202,6 +244,7 @@ export default {
}, },
// //
setData(data) { setData(data) {
console.log("data", data);
Object.assign(this.form, data); Object.assign(this.form, data);
this.getRoute(data.id); this.getRoute(data.id);
}, },
@ -224,14 +267,18 @@ export default {
that.$message.success("操作成功"); that.$message.success("操作成功");
}); });
} else { } else {
// that.$API.mtm.mgroup.update let obj = {};
// .req(that.form.id, that.form) obj.work_end_time = that.form.work_end_time;
// .then((res) => { obj.handle_user = that.form.handle_user;
// that.isSaveing = false; obj.note = that.form.note;
// that.$emit("success", that.form, that.mode); that.$API.wpm.mlog.change
// that.visible = false; .req(that.form.id, that.form)
// that.$message.success(""); .then((res) => {
// }); that.isSaveing = false;
that.$emit("success");
that.visible = false;
that.$message.success("操作成功");
});
} }
} }
}); });

View File

@ -0,0 +1,214 @@
<template>
<el-dialog
title="过程检验"
v-model="visible"
:size="1000"
destroy-on-close
@closed="$emit('closed')"
>
<el-container v-loading="loading">
<el-main style="padding: 0 20px 20px 20px">
<el-form
ref="dialogForm"
:model="form"
:rules="rules"
label-position="right"
label-width="100px"
style="padding: 0 10px"
>
<el-row>
<el-col :md="12" :sm="24">
<el-form-item label="批次号" prop="batch">
<el-input
v-model="form.batch"
:disabled="batchDisabled"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="实际生产数">
<el-input-number
v-model="form.count_real"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="合格数量">
<el-input-number
v-model="form.count_ok"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="不合格数量">
<el-input-number
v-model="form.count_notok"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="划伤">
<el-input-number
v-model="form.count_n_hs"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="气泡">
<el-input-number
v-model="form.count_n_qp"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="水纹">
<el-input-number
v-model="form.count_n_swen"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="崩边">
<el-input-number
v-model="form.count_n_bb"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="雾面">
<el-input-number
v-model="form.count_n_wm"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="麻点">
<el-input-number
v-model="form.count_n_md"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
<el-col :md="12" :sm="24">
<el-form-item label="线痕">
<el-input-number
v-model="form.count_n_xh"
:min="0"
class="width-100"
controls-position="right"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</el-main>
<el-footer>
<el-button type="primary" :loading="isSaveing" @click="submit"
>保存</el-button
>
<el-button @click="visible = false">取消</el-button>
</el-footer>
</el-container>
</el-dialog>
</template>
<script>
export default {
emits: ["success", "closed"],
data() {
return {
loading: false,
//
form: {},
//
rules: {
batch: [
{
required: true,
message: "请填写批次号",
trigger: "blur",
},
],
count_use: [
{
required: true,
message: "请填写领用数量",
trigger: "blur",
},
],
},
options: [],
materialOptions: [],
visible: false,
isSaveing: false,
batchDisabled: false,
};
},
mounted() {
if (this.form.batch != null) {
this.batchDisabled = true;
}
},
methods: {
open(data) {
this.visible = true;
Object.assign(this.form, data);
console.log(this.form);
},
//
submit() {
let that = this;
that.$refs.dialogForm.validate(async (valid) => {
if (valid) {
that.isSaveing = true;
that.form.mlog = that.mlog;
that.$API.wpm.mlogb.updateOut
.req(that.form.id, that.form)
.then((res) => {
that.isSaveing = false;
that.$emit("success");
that.visible = false;
that.$message.success("操作成功");
})
.catch((err) => {
that.isSaveing = false;
});
}
});
},
},
};
</script>
<style scoped>
.width-100 {
width: 100%;
}
</style>

View File

@ -33,8 +33,21 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="批次号" prop="batch"> <el-form-item label="批次号" prop="wm_in">
<el-input v-model="form.batch" /> <el-select
v-model="form.wm_in"
placeholder="交接物料"
clearable
style="width: 100%"
>
<el-option
v-for="item in materialOptions"
:key="item.id"
:label="item.batch"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item> </el-form-item>
<el-form-item label="领用数量"> <el-form-item label="领用数量">
<el-input-number <el-input-number
@ -43,9 +56,6 @@
controls-position="right" controls-position="right"
/> />
</el-form-item> </el-form-item>
<!-- <el-form-item label="备注">
<el-input v-model="form.note" clearable></el-input>
</el-form-item> -->
</el-form> </el-form>
</el-main> </el-main>
<el-footer> <el-footer>
@ -84,12 +94,13 @@ export default {
mode: "add", mode: "add",
titleMap: { titleMap: {
add: "新增", add: "新增",
edit: "编辑",
}, },
// //
form: defaultForm, form: defaultForm,
// //
rules: { rules: {
batch: [ wm_in: [
{ {
required: true, required: true,
message: "请填写批次号", message: "请填写批次号",
@ -105,6 +116,7 @@ export default {
], ],
}, },
options: [], options: [],
materialOptions: [],
visible: false, visible: false,
isSaveing: false, isSaveing: false,
setFiltersVisible: false, setFiltersVisible: false,
@ -112,6 +124,7 @@ export default {
}, },
mounted() { mounted() {
this.getMtask(); this.getMtask();
this.getMaterial();
}, },
methods: { methods: {
open() { open() {
@ -125,6 +138,15 @@ export default {
that.options = res; that.options = res;
}); });
}, },
//
getMaterial() {
let that = this;
this.$API.wpm.wmaterial.list
.req({ mgroupx: that.mgroup, page: 0 })
.then((res) => {
that.materialOptions = res;
});
},
// //
submit() { submit() {
let that = this; let that = this;

View File

@ -31,6 +31,7 @@
row-key="id" row-key="id"
:params="params" :params="params"
:query="params" :query="params"
@row-click="table_detail"
> >
<el-table-column <el-table-column
label="#" label="#"
@ -69,6 +70,10 @@
label="开始时间" label="开始时间"
prop="work_start_time" prop="work_start_time"
></el-table-column> ></el-table-column>
<el-table-column
label="结束时间"
prop="work_end_time"
></el-table-column>
<el-table-column <el-table-column
label="创建时间" label="创建时间"
prop="create_time" prop="create_time"
@ -80,6 +85,19 @@
width="180" width="180"
> >
<template #default="scope"> <template #default="scope">
<el-button
link
size="small"
v-auth="'mlog.update'"
v-if="scope.row.submit_time == null"
type="primary"
@click.stop="table_edit(scope.row)"
>编辑</el-button
>
<el-divider
direction="vertical"
v-if="scope.row.submit_time == null"
></el-divider>
<el-button <el-button
link link
size="small" size="small"
@ -88,29 +106,15 @@
>详情</el-button >详情</el-button
> >
<el-divider direction="vertical"></el-divider> <el-divider direction="vertical"></el-divider>
<el-button <el-button
link link
size="small" size="small"
@click="table_edit(scope.row)" v-auth="'mgroup.delete'"
v-auth="'mgroup.update'" type="danger"
type="primary" @click.stop="table_del(scope.row, scope.$index)"
>编辑</el-button >删除</el-button
> >
<el-divider direction="vertical"></el-divider>
<el-popconfirm
title="确定删除吗?"
@confirm="table_del(scope.row, scope.$index)"
>
<template #reference>
<el-button
link
size="small"
v-auth="'mgroup.delete'"
type="danger"
>删除</el-button
>
</template>
</el-popconfirm>
</template> </template>
</el-table-column> </el-table-column>
</scTable> </scTable>
@ -161,10 +165,6 @@ export default {
}, },
tableData: [], tableData: [],
selection: [], selection: [],
cates_: {
section: "工序",
other: "其他",
},
mtask: "", mtask: "",
mlogId: "", mlogId: "",
processId: "", processId: "",
@ -206,15 +206,20 @@ export default {
}); });
}, },
// //
async table_del(row) { table_del(row) {
var id = row.id; this.$confirm(`确定删除吗?`, "提示", {
var res = await this.$API.mtm.mgroup.delete.req(id); type: "warning",
if (res.err_msg) { }).then(() => {
this.$message.error(res.err_msg); var id = row.id;
} else { this.$API.wpm.mlog.delete.req(id).then((res) => {
this.$refs.table.refresh(); if (res.err_msg) {
this.$message.success("删除成功"); this.$message.error(res.err_msg);
} } else {
this.$refs.table.refresh();
this.$message.success("删除成功");
}
});
});
}, },
// //
selectionChange(selection) { selectionChange(selection) {

132
src/views/wpm_gx/print.vue Normal file
View File

@ -0,0 +1,132 @@
<template>
<div>
<div id="pdfDom" class="container" ref="pdfContent">
<div class="title">
<span>光芯科技</span>
<span>交接单</span>
</div>
<canvas id="barcode"></canvas>
<p class="lineStyle">物料{{ name }}</p>
<p class="lineStyle">批次号{{ batch }}</p>
<p class="lineStyle">数量{{ count }}</p>
</div>
<el-button type="primary" @click="toGetPdf">打印 </el-button>
</div>
</template>
<script>
import axios from "axios";
import config from "@/config";
import http from "@/utils/request";
import getPdf from "@/utils/htmlToPdf";
import PdfLoader from "@/utils/html2pdf";
import html2canvas from "html2canvas";
export default {
data() {
return {
name: "切片",
batch: "2023-01-01",
count: "1000",
visible: false,
};
},
mounted() {
var canvas = document.getElementById("barcode");
var context = canvas.getContext("2d");
context.clearRect(0, 0, 210, 270);
JsBarcode("#barcode", "9780199532179", {
format: "CODE128",
displayValue: true,
fontSize: 24,
lineColor: "#000000",
});
},
methods: {
toGetPdf(val = false, download = false) {
let that = this;
this.$nextTick(() => {
setTimeout(() => {
let title = "交接单";
getPdf(title, download).then((res) => {
console.log("res", res);
// that.dataURLtoFile(res, "pdf");
let obj = {};
obj.file = res;
obj.printer_name = "GP-3150TN";
http.post(`http://192.168.1.242:8080/print/`, obj, {
headers: { "Content-Type": "multipart/form-data" },
}).then((res) => {
console.log("postRes", res);
});
});
}, 1000);
});
},
/* 将base64转换为文件,接收2个参数第一是base64第二个是文件名字 最后返回文件对象 */
dataURLtoFile(dataurl, filename) {
var arr = dataurl.split(","),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new File([u8arr], filename, { type: mime });
},
toGetPdf1() {
let exportDiv = document.getElementById("pdfDom"); // id
this.pdfDownLoader = new PdfLoader(exportDiv, "print"); // fileName -->, question-table -->class
this.pdfDownLoader.getPDF("0000");
console.log(this.pdfDownLoader);
},
// async handlePrint() {
// let content = this.$refs.pdfContent;
// let canvas = await html2canvas(content);
// let imgData = canvas.toDataURL("image/png");
// let pdf = jsPDF("", "pt", "a4");
// let blob = new Blob([JSON.stringify(imgData, null, 2)], {
// type: "application/json",
// });
// // http://192.168.1.242:8000/print
// //POST form-data
// //{"file":"","printer_name":"GP-3150TN"}
// console.log("blob", blob);
// let obj = {};
// obj.file = blob;
// obj.printer_name = "GP-3150TN";
// http.post(`http://192.168.1.242:8000/print/`, obj).then((res) => {
// console.log(res);
// });
// // const blob = new Blob([response.data], { type: "application/pdf" });
// this.$PRINT("#myReport");
// },
},
};
</script>
<style scoped>
.container {
width: 210px;
height: 270px;
padding: 10px 5px;
border: 1px solid #dddddd;
background-color: #ffffff;
}
.title {
/* display: flex;
justify-content: space-between; */
font-size: 18px;
}
#barcode {
/* position: absolute; */
width: 200px;
height: 100px;
}
.lineStyle {
font-size: 14px;
margin-bottom: 5px;
}
</style>