代码重构
This commit is contained in:
@@ -1,87 +0,0 @@
|
||||
<script>
|
||||
export default {
|
||||
methods: {
|
||||
/** 提交按钮 */
|
||||
submitForm: function () {
|
||||
this.$refs["form"].validate((valid) => {
|
||||
if (valid) {
|
||||
console.log(JSON.stringify(this.form));
|
||||
|
||||
if (this.form.id != undefined && this.opertype === 2) {
|
||||
updateQcGp12ServiceStatistics(this.form)
|
||||
.then((res) => {
|
||||
this.msgSuccess("修改成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
})
|
||||
.catch((err) => {
|
||||
//TODO 错误逻辑
|
||||
});
|
||||
} else {
|
||||
addQcGp12ServiceStatistics(this.form)
|
||||
.then((res) => {
|
||||
this.msgSuccess("新增成功");
|
||||
this.open = false;
|
||||
this.getList();
|
||||
})
|
||||
.catch((err) => {
|
||||
//TODO 错误逻辑
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
},
|
||||
/** 新增表单校验规则 */
|
||||
rules: {
|
||||
id: [
|
||||
{ required: true, message: "序号不能为空", trigger: "blur" }
|
||||
],
|
||||
workOrder: [
|
||||
{ required: true, message: "工单号不能为空", trigger: "blur" }
|
||||
],
|
||||
partNumber: [
|
||||
{ required: true, message: "零件号不能为空", trigger: "blur" }
|
||||
],
|
||||
description: [
|
||||
{ required: true, message: "零件描述不能为空", trigger: "blur" }
|
||||
],
|
||||
specification: [
|
||||
{ required: true, message: "规格不能为空", trigger: "blur" }
|
||||
],
|
||||
color: [
|
||||
{ required: true, message: "颜色不能为空", trigger: "blur" }
|
||||
],
|
||||
team: [
|
||||
{ required: true, message: "班组不能为空", trigger: "blur" }
|
||||
],
|
||||
siteNo: [
|
||||
{ required: true, message: "站点号不能为空", trigger: "blur" }
|
||||
],
|
||||
comNo: [
|
||||
{ required: true, message: "串口号不能为空", trigger: "blur" }
|
||||
],
|
||||
startTime: [
|
||||
{ required: true, message: "开始时间不能为空", trigger: "change" }
|
||||
],
|
||||
endTime: [
|
||||
{ required: true, message: "结束时间不能为空", trigger: "change" }
|
||||
],
|
||||
requireNumber: [
|
||||
{ required: true, message: "投入数不能为空", trigger: "blur" }
|
||||
],
|
||||
qualifiedNumber: [
|
||||
{ required: true, message: "合格数不能为空", trigger: "blur" }
|
||||
],
|
||||
qualifiedRate: [
|
||||
{ required: true, message: "合格率不能为空", trigger: "blur" }
|
||||
],
|
||||
damoNumber: [
|
||||
{ required: true, message: "打磨数不能为空", trigger: "blur" }
|
||||
],
|
||||
baofeiNumber: [
|
||||
{ required: true, message: "报废数不能为空", trigger: "blur" }
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -128,3 +128,15 @@ export function UpdateWorkOrderDetail(query) {
|
||||
params: query,
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
* 生成虚拟标签
|
||||
* @param {查询条件} data
|
||||
*/
|
||||
export function GenerateVirtualLabel(query) {
|
||||
return request({
|
||||
url: '/mes/qc/gp12/QcGp12Controller/GenerateVirtualLabel',
|
||||
method: 'post',
|
||||
data: query,
|
||||
})
|
||||
}
|
||||
|
||||
@@ -0,0 +1,258 @@
|
||||
<template>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8" v-for="(group, index) in groups" :key="index">
|
||||
<el-card shadow="hover" class="box-card">
|
||||
<div class="card-header">{{ group.groupName }}</div>
|
||||
<div>
|
||||
<el-row :gutter="5" v-for="(row, rowIndex) in rowList" :key="rowIndex">
|
||||
<el-col :span="2">
|
||||
<div class="defect-item-left">{{ row }}</div>
|
||||
</el-col>
|
||||
<el-col v-if="item.type === row" :span="3" v-for="(item, index) in group.children" :key="index">
|
||||
<div class="defect-item-box" @mousedown="handleStart($event, item)"
|
||||
@mouseup="handleEnd($event, item)" @touchstart="handleStart($event, item)"
|
||||
@touchend="handleEnd($event, item)">
|
||||
<div class="defect-item-name">{{ item.name }}</div>
|
||||
<div class="defect-item-number">{{ getClickItemNum(item) }}</div>
|
||||
</div>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-card>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<slot name="workorder"></slot>
|
||||
</el-col>
|
||||
<DefectUpdateDialog ref="DefectUpdateDialogRef" @updateDefectNum="updateDefectNum" />
|
||||
</el-row>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import DefectUpdateDialog from './DefectUpdateDialog.vue';
|
||||
import * as QcGp12Api from '@/api/qualityManagement/gp12/qcGp12Service';
|
||||
export default {
|
||||
name: 'DefectCard',
|
||||
components: { DefectUpdateDialog },
|
||||
props: {
|
||||
// 工单信息
|
||||
formData: Object,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
groups: [
|
||||
{ groupName: '油漆', children: [] },
|
||||
{ groupName: '设备', children: [] },
|
||||
{ groupName: '毛坯', children: [] },
|
||||
{ groupName: '程序', children: [] },
|
||||
{ groupName: '班组操作', children: [] }
|
||||
],
|
||||
rowList: ['抛光', '打磨', '报废'],
|
||||
pressTimer: null,
|
||||
isLongPress: false,
|
||||
dialogData: {
|
||||
title: '',
|
||||
update: {
|
||||
show: false,
|
||||
updateName: '',
|
||||
updateCode: '',
|
||||
updateNum: 0
|
||||
},
|
||||
}
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
async init() {
|
||||
let groups = await QcGp12Api.GetDefectInitOptions()
|
||||
this.groups = groups.data
|
||||
},
|
||||
validateWorkOrder() {
|
||||
if (!this.formData.workOrder) {
|
||||
this.showErrorMessage(1, '未生成有效工单!请扫描箱标签');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
showErrorMessage(code, message) {
|
||||
this.$emit('showWarningMessage', code, message);
|
||||
},
|
||||
getClickItemNum(item) {
|
||||
return item.num || 0;
|
||||
},
|
||||
handleStart(event, item) {
|
||||
if (event.type.startsWith('touch')) event.preventDefault();
|
||||
if (this.pressTimer) clearTimeout(this.pressTimer);
|
||||
this.pressTimer = setTimeout(() => {
|
||||
this.isLongPress = true;
|
||||
this.showUpdateDialog(item);
|
||||
}, 500);
|
||||
},
|
||||
handleEnd(event, item = null) {
|
||||
if (!item) return;
|
||||
if (this.pressTimer) clearTimeout(this.pressTimer);
|
||||
this.handleShortClick(item);
|
||||
this.isLongPress = false;
|
||||
},
|
||||
// 提取短按处理逻辑
|
||||
handleShortClick(item) {
|
||||
if (this.isLongPress) return;
|
||||
if (!this.validateWorkOrder()) return;
|
||||
const params = {
|
||||
workOrder: this.formData.workOrder,
|
||||
defectCode: item.code,
|
||||
defectNum: item.num || 0,
|
||||
type: "1",
|
||||
};
|
||||
this.updateDefectItem(params);
|
||||
},
|
||||
updateDefectItem(params) {
|
||||
QcGp12Api.ChangeWorkOrderDefect(params).then(res => {
|
||||
if (res.code === 200) {
|
||||
this.refresh();
|
||||
} else {
|
||||
this.$message.error('缺陷项点击异常');
|
||||
}
|
||||
});
|
||||
},
|
||||
// 长按
|
||||
showUpdateDialog(item) {
|
||||
if (!this.validateWorkOrder()) return;
|
||||
const data = {
|
||||
updateName: `${item.type}-${item.name}`,
|
||||
updateCode: item.code,
|
||||
updateNum: this.getClickItemNum(item),
|
||||
workOrder: this.formData.workOrder,
|
||||
description: this.formData.description
|
||||
}
|
||||
this.$refs.DefectUpdateDialogRef.open(data);
|
||||
},
|
||||
updateDefectNum(params) {
|
||||
if (!this.validateWorkOrder()) return;
|
||||
this.updateDefectItem(params);
|
||||
this.$refs.DefectUpdateDialogRef.close();
|
||||
this.refresh();
|
||||
this.isLongPress = false;
|
||||
},
|
||||
setDefectNum(defectCode, num) {
|
||||
// 更新缺陷数量的方法
|
||||
for (let group of this.groups) {
|
||||
for (let child of group.children) {
|
||||
if (child.code === defectCode) {
|
||||
child.num = num;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
async refresh() {
|
||||
this.$emit("refresh");
|
||||
},
|
||||
// 获取工单缺陷项(刷新)
|
||||
getDefectListByWorkOrder() {
|
||||
if (!this.formData.workOrder) {
|
||||
return;
|
||||
}
|
||||
const params = {
|
||||
workOrder: this.formData.workOrder,
|
||||
};
|
||||
QcGp12Api.GetWorkOrderDefectList(params).then(res => {
|
||||
if (res.code === 200 && res.data.length > 0) {
|
||||
let _list = res.data;
|
||||
for (let item of _list) {
|
||||
this.setDefectNum(item.defectCode, item.defectNum);
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.box-card {
|
||||
width: 100%;
|
||||
background-color: #032169;
|
||||
/* 深墨绿色背景 */
|
||||
color: #ecf0f1;
|
||||
/* 浅灰色文字颜色 */
|
||||
border-radius: 10px;
|
||||
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
|
||||
/* 设置阴影 */
|
||||
margin-top: 2px;
|
||||
margin-bottom: 2px;
|
||||
/* 增加卡片底部间距 */
|
||||
}
|
||||
|
||||
.card-header {
|
||||
color: #ecf0f1;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.defect-item-left {
|
||||
height: 100px;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
writing-mode: vertical-lr;
|
||||
}
|
||||
|
||||
.defect-item-box {
|
||||
min-width: 100%;
|
||||
border-radius: 5%;
|
||||
margin-top: 5px;
|
||||
margin-bottom: 5px;
|
||||
background-color: #11a983;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
transition: background-color 0.3s ease, transform 0.3s ease;
|
||||
/* 添加过渡效果 */
|
||||
}
|
||||
|
||||
.defect-item-box:hover {
|
||||
background-color: #008c62;
|
||||
/* 悬停时的背景颜色 */
|
||||
transform: scale(1.05);
|
||||
/* 悬停时稍微放大 */
|
||||
cursor: pointer;
|
||||
/* 改变鼠标指针形状 */
|
||||
}
|
||||
|
||||
.defect-item-name {
|
||||
width: 100%;
|
||||
height: 60px;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
text-align: center;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
writing-mode: vertical-lr;
|
||||
letter-spacing: 5px;
|
||||
}
|
||||
|
||||
.defect-item-number {
|
||||
color: red;
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.number-text {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,73 @@
|
||||
<template>
|
||||
<el-dialog class="dialogBox" :visible.sync="show" title="缺陷项修改" width="400px" append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<el-form label-width="auto">
|
||||
<el-form-item label="工单号">
|
||||
<div class="number-text">{{ workOrder }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="缺陷项">
|
||||
<div class="number-text">{{ updateName }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="缺陷数">
|
||||
<el-input-number :min="0" class="number-text" v-model="updateNum"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="close">取消</el-button>
|
||||
<el-button :disabled="loading" type="primary" @click="updateDefectNum">确认修改</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as QcGp12Api from '@/api/qualityManagement/gp12/qcGp12Service';
|
||||
export default {
|
||||
name: 'DefectUpdateDialog',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
show: false,
|
||||
updateName: '',
|
||||
updateCode: '',
|
||||
updateNum: 0,
|
||||
workOrder: '',
|
||||
description: ""
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
updateDefectNum() {
|
||||
this.loading = true;
|
||||
const params = {
|
||||
workOrder: this.workOrder,
|
||||
defectCode: this.updateCode,
|
||||
defectNum: this.updateNum || 0,
|
||||
type: "2",
|
||||
};
|
||||
this.$emit('updateDefectNum', params);
|
||||
this.loading = false;
|
||||
},
|
||||
open(data) {
|
||||
this.show = true;
|
||||
this.loading = false;
|
||||
this.updateName = data.updateName;
|
||||
this.updateCode = data.updateCode;
|
||||
this.updateNum = data.updateNum;
|
||||
this.workOrder = data.workOrder;
|
||||
this.description = data.description;
|
||||
},
|
||||
close() {
|
||||
this.show = false;
|
||||
this.updateName = "";
|
||||
this.updateCode = "";
|
||||
this.updateNum = 0;
|
||||
this.workOrder = "";
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
/* 样式 */
|
||||
</style>
|
||||
@@ -0,0 +1,192 @@
|
||||
<template>
|
||||
<el-dialog v-loading="loading" :visible.sync="show" title="结束工单" width="90%" append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<el-form label-width="auto">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="工单号">
|
||||
<div class="number-text">{{ formData.workOrder }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="零件号">
|
||||
<div class="number-text">{{ formData.partNumber }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="规格">
|
||||
<div class="number-text">{{ formData.specification }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="颜色">
|
||||
<div class="number-text">{{ formData.color }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="6">
|
||||
<el-form-item label="描述">
|
||||
<div class="number-text">{{ formData.description }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="站点">
|
||||
<div class="number-text">{{ siteNo }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="3">
|
||||
<el-form-item label="班组">
|
||||
<div class="number-text">{{ team }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="来源">
|
||||
<div class="number-text">{{ formData.isOnetime === 1 ? "一次合格" : "抛光件" }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="6">
|
||||
<el-form-item label="类别">
|
||||
<div class="number-text">{{ formData.isBack === 1 ? "返工件" : "正常件" }}</div>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<table class="workorder-card-table">
|
||||
<tr>
|
||||
<td>投入数</td>
|
||||
<td>{{ formData.requireNumber }}</td>
|
||||
<td>合格数</td>
|
||||
<td>{{ formData.qualifiedNumber }}</td>
|
||||
<td>合格率</td>
|
||||
<td>{{ qualifiedRate }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>抛光数</td>
|
||||
<td>{{ formData.polishNumber }}</td>
|
||||
<td>打磨数</td>
|
||||
<td>{{ formData.damoNumber }}</td>
|
||||
<td>报废数</td>
|
||||
<td>{{ formData.baofeiNumber }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>开始时间</td>
|
||||
<td>{{ formData.startTime }}</td>
|
||||
<td>结束时间</td>
|
||||
<td>{{ formData.endTime }}</td>
|
||||
<td>工单状态</td>
|
||||
<td>{{ formData.endTime ? "已结束" : "未结束" }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="close">取消</el-button>
|
||||
<el-button :disabled="loading" type="primary" @click="endWorkOrder">确认结束工单并生成报表</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as QcGp12Api from '@/api/qualityManagement/gp12/qcGp12Service';
|
||||
export default {
|
||||
name: 'EndWorkOrderDialog',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
show: false,
|
||||
formData: {
|
||||
workOrder: '',
|
||||
partnumber: '',
|
||||
specification: '',
|
||||
color: '',
|
||||
description: '',
|
||||
number: '',
|
||||
labelCode: '',
|
||||
siteNo: '',
|
||||
comNo: '',
|
||||
isOnetime: 0,
|
||||
isBack: 0,
|
||||
isPolish: 0,
|
||||
isOut: 0,
|
||||
},
|
||||
// 需要传入
|
||||
team: '',
|
||||
siteNo: '',
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
qualifiedRate() {
|
||||
if (this.formData.requireNumber > 0) {
|
||||
const rate = Math.floor((this.formData.qualifiedNumber / this.formData.requireNumber) * 100);
|
||||
return `${rate}%`;
|
||||
} else {
|
||||
return "0%";
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
endWorkOrder() {
|
||||
this.$confirm('是否确认完成工单并生成报表!', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'info',
|
||||
center: true
|
||||
}).then(() => {
|
||||
QcGp12Api.EndGP12WorkOrderAndCreateStatistics(this.formData).then(res => {
|
||||
if (res.code === 200 && res.data === "ok") {
|
||||
this.$message.success("结束工单并生成报表成功!");
|
||||
this.changeFormStatus(1)
|
||||
this.doClearFormData()
|
||||
this.close()
|
||||
} else {
|
||||
this.$message.error("结束工单异常!" + res.msg);
|
||||
}
|
||||
});
|
||||
}).catch(() => {
|
||||
});
|
||||
},
|
||||
changeFormStatus(type) {
|
||||
// type = 1 进入外标签扫码模式
|
||||
this.$emit("changeFormStatus", type)
|
||||
},
|
||||
doClearFormData() {
|
||||
this.$emit('clearFormData');
|
||||
},
|
||||
open(data) {
|
||||
this.show = true
|
||||
this.loading = false
|
||||
this.formData = data.formData
|
||||
this.team = data.team
|
||||
this.siteNo = data.siteNo
|
||||
},
|
||||
close() {
|
||||
this.show = false
|
||||
this.loading = false
|
||||
this.formData = {}
|
||||
this.team = ""
|
||||
this.siteNo = ""
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.number-text {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.workorder-card-table {
|
||||
width: 100%;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
border: 2px solid #000;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.workorder-card-table td {
|
||||
border: 2px solid #000;
|
||||
padding: 5px;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,203 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-dialog class="dialogBox" :visible.sync="show" title="缺陷项修改" width="400px" append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<el-form label-width="auto">
|
||||
<el-form-item label="工单号">
|
||||
<div class="number-text">{{ formData.workOrder }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="零件号">
|
||||
<div class="number-text">{{ formData.partNumber }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="描述">
|
||||
<div class="number-text">{{ formData.description }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="投入数">
|
||||
<div class="number-text">{{ requireNumber }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="抛光数">
|
||||
<div class="number-text">{{ formData.polishNumber }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="打磨数">
|
||||
<div class="number-text">{{ formData.damoNumber }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="报废数">
|
||||
<div class="number-text">{{ formData.baofeiNumber }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="合格数">
|
||||
<el-input-number :min="0" class="number-text" v-model="formData.qualifiedNumber"></el-input-number>
|
||||
</el-form-item>
|
||||
<el-form-item label="快速操作">
|
||||
<el-button type="primary" icon="el-icon-minus" @click="openReduceDialog">减少合格数</el-button>
|
||||
<el-button type="primary" icon="el-icon-plus" @click="openAddDialog">增加合格数</el-button>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="close">取消</el-button>
|
||||
<el-button :disabled="loading" type="primary" @click="updateQualifiedNumber">确认修改</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 减少合格数对话框 -->
|
||||
<el-dialog :visible.sync="reduceDialogVisible" title="减少合格数" width="300px" append-to-body>
|
||||
<el-form label-width="auto">
|
||||
<el-form-item label="减少数量">
|
||||
<el-input-number :min="1" :max="formData.qualifiedNumber" v-model="changeAmount"
|
||||
controls-position="right"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="reduceDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="confirmReduce">确定</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
|
||||
<!-- 增加合格数对话框 -->
|
||||
<el-dialog :visible.sync="addDialogVisible" title="增加合格数" width="300px" append-to-body>
|
||||
<el-form label-width="auto">
|
||||
<el-form-item label="增加数量">
|
||||
<el-input-number :min="1" v-model="changeAmount" controls-position="right"></el-input-number>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="addDialogVisible = false">取消</el-button>
|
||||
<el-button type="primary" @click="confirmAdd">确定</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import * as QcGp12Api from '@/api/qualityManagement/gp12/qcGp12Service';
|
||||
|
||||
export default {
|
||||
name: 'GenerateLabelDialog',
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
show: false,
|
||||
reduceDialogVisible: false,
|
||||
addDialogVisible: false,
|
||||
changeAmount: 1,
|
||||
formData: {
|
||||
workOrder: '',
|
||||
partNumber: '',
|
||||
specification: '',
|
||||
color: '',
|
||||
description: '',
|
||||
number: '',
|
||||
labelCode: '',
|
||||
siteNo: '',
|
||||
comNo: '',
|
||||
isOnetime: 0,
|
||||
isBack: 0,
|
||||
isPolish: 0,
|
||||
isOut: 0,
|
||||
polishNumber: 0,
|
||||
damoNumber: 0,
|
||||
baofeiNumber: 0,
|
||||
qualifiedNumber: 0,
|
||||
},
|
||||
team: '',
|
||||
siteNo: '',
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
requireNumber() {
|
||||
return this.formData.polishNumber + this.formData.damoNumber + this.formData.baofeiNumber + this.formData.qualifiedNumber;
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
openReduceDialog() {
|
||||
this.reduceDialogVisible = true;
|
||||
this.changeAmount = 1;
|
||||
},
|
||||
openAddDialog() {
|
||||
this.addDialogVisible = true;
|
||||
this.changeAmount = 1;
|
||||
},
|
||||
confirmReduce() {
|
||||
if (this.changeAmount > 0 && this.changeAmount <= this.formData.qualifiedNumber) {
|
||||
this.formData.qualifiedNumber -= this.changeAmount;
|
||||
this.reduceDialogVisible = false;
|
||||
} else {
|
||||
this.$message.error('请输入有效的减少数量');
|
||||
}
|
||||
},
|
||||
confirmAdd() {
|
||||
if (this.changeAmount > 0) {
|
||||
this.formData.qualifiedNumber += this.changeAmount;
|
||||
this.addDialogVisible = false;
|
||||
} else {
|
||||
this.$message.error('请输入有效的增加数量');
|
||||
}
|
||||
},
|
||||
async updateQualifiedNumber() {
|
||||
try {
|
||||
this.loading = true;
|
||||
await QcGp12Api.GenerateVirtualLabel(this.formData);
|
||||
this.$message.success('修改成功');
|
||||
this.updateFormData();
|
||||
this.close();
|
||||
} catch (error) {
|
||||
this.$message.error('修改失败,请重试');
|
||||
} finally {
|
||||
this.loading = false;
|
||||
}
|
||||
},
|
||||
updateFormData() {
|
||||
this.$emit("updateFormData");
|
||||
},
|
||||
open(data) {
|
||||
this.show = true;
|
||||
this.loading = false;
|
||||
this.formData = { ...data.formData };
|
||||
this.team = data.team;
|
||||
this.siteNo = data.siteNo;
|
||||
},
|
||||
close() {
|
||||
this.show = false;
|
||||
this.resetFormData();
|
||||
},
|
||||
resetFormData() {
|
||||
this.formData = {
|
||||
workOrder: '',
|
||||
partNumber: '',
|
||||
specification: '',
|
||||
color: '',
|
||||
description: '',
|
||||
number: '',
|
||||
labelCode: '',
|
||||
siteNo: '',
|
||||
comNo: '',
|
||||
isOnetime: 0,
|
||||
isBack: 0,
|
||||
isPolish: 0,
|
||||
isOut: 0,
|
||||
polishNumber: 0,
|
||||
damoNumber: 0,
|
||||
baofeiNumber: 0,
|
||||
qualifiedNumber: 0,
|
||||
};
|
||||
this.team = '';
|
||||
this.siteNo = '';
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.number-text {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.dialog-footer button {
|
||||
margin-left: 10px;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,184 @@
|
||||
<template>
|
||||
<el-dialog v-loading="loading" :visible.sync="show" title="开始或继续工单" width="600px" append-to-body
|
||||
:close-on-click-modal="false">
|
||||
<el-form label-width="auto">
|
||||
<el-form-item label="零件号">
|
||||
<div class="number-text">{{ partnumber }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="规格">
|
||||
<div class="number-text">{{ specification }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="颜色">
|
||||
<div class="number-text">{{ color }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="描述">
|
||||
<div class="number-text">{{ description }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="零件数">
|
||||
<div class="number-text">{{ number }}</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="标签内容">
|
||||
<div class="number-text">{{ labelCode }}</div>
|
||||
</el-form-item>
|
||||
<div v-if="partnumber">
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="是否抛光件">
|
||||
<el-switch v-model="isPolish" :active-value="1" :inactive-value="0">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="是否返工件">
|
||||
<el-switch v-model="isBack" :active-value="1" :inactive-value="0">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="标记">
|
||||
<el-switch v-model="isOut" :active-value="1" :inactive-value="0">
|
||||
</el-switch>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</div>
|
||||
</el-form>
|
||||
<scanInput @scanInput="handleScanBoxOutLabel"></scanInput>
|
||||
<template #footer>
|
||||
<div class="dialog-footer">
|
||||
<el-button @click="close">取消</el-button>
|
||||
<el-button :disabled="loading" type="primary" @click="startWorkOrder">确认开始工单</el-button>
|
||||
</div>
|
||||
</template>
|
||||
</el-dialog>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import scanInput from '../../components/scanInput.vue';
|
||||
import * as QcGp12Api from '@/api/qualityManagement/gp12/qcGp12Service';
|
||||
export default {
|
||||
name: 'StartWorkOrderDialog',
|
||||
components: { scanInput },
|
||||
data() {
|
||||
return {
|
||||
loading: false,
|
||||
show: false,
|
||||
partnumber: '',
|
||||
specification: '',
|
||||
color: '',
|
||||
description: '',
|
||||
number: '',
|
||||
labelCode: '',
|
||||
isOnetime: 0,
|
||||
isBack: 0,
|
||||
isPolish: 0,
|
||||
isOut: 0,
|
||||
// 需要传入
|
||||
team: '',
|
||||
siteNo: '',
|
||||
comNo: '未知串口'
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
// 扫外箱标签的情况
|
||||
handleScanBoxOutLabel(label = '', comNo = '未知串口') {
|
||||
const params = {
|
||||
label,
|
||||
// type === 1 获取详细物料信息 2只判断零件号是否正确
|
||||
type: 1
|
||||
}
|
||||
QcGp12Api.AnalyzeLabel(params).then(res => {
|
||||
if (res.code === 200 && res.data.isOk) {
|
||||
this.partnumber = res.data.partnumber;
|
||||
this.specification = res.data.specification;
|
||||
this.color = res.data.color;
|
||||
this.number = res.data.number;
|
||||
this.description = res.data.description;
|
||||
this.labelCode = res.data.labelCode;
|
||||
this.comNo = comNo;
|
||||
} else {
|
||||
this.showErrorMessage(3, "标签存在异常!");
|
||||
}
|
||||
})
|
||||
},
|
||||
showErrorMessage(code, message) {
|
||||
this.$emit('showWarningMessage', code, message);
|
||||
},
|
||||
// 确认开始工单
|
||||
startWorkOrder() {
|
||||
const params = {
|
||||
partNumber: this.partnumber,
|
||||
description: this.description,
|
||||
specification: this.specification,
|
||||
color: this.color,
|
||||
team: this.team,
|
||||
siteNo: this.siteNo,
|
||||
comNo: this.comNo,
|
||||
isOnetime: this.isPolish === 0 ? 1 : 0,
|
||||
isBack: this.isBack,
|
||||
isPolish: this.isPolish,
|
||||
isOut: this.isOut,
|
||||
label: this.labelCode,
|
||||
}
|
||||
if (params.partNumber === '' || params.label === '') {
|
||||
this.showErrorMessage(3, "标签信息为空!请检查标签!");
|
||||
return;
|
||||
}
|
||||
this.loading = true
|
||||
// 开始工单
|
||||
QcGp12Api.StartGP12WorkOrder(params).then(res => {
|
||||
if (res.code == 200) {
|
||||
this.$message.success("开始工单成功!");
|
||||
this.formDataChange(res.data)
|
||||
this.changeFormStatus(2)
|
||||
this.doRefresh()
|
||||
this.close()
|
||||
this.loading = false
|
||||
} else {
|
||||
this.$message.error("开始工单异常!请检查");
|
||||
this.loading = false
|
||||
}
|
||||
}).catch((err) => {
|
||||
this.$message.error("开始工单异常!请检查");
|
||||
this.loading = false
|
||||
});
|
||||
},
|
||||
formDataChange(data) {
|
||||
this.$emit("formDataChange", data)
|
||||
},
|
||||
changeFormStatus(type) {
|
||||
// type = 2 进入内标签扫码模式
|
||||
this.$emit("changeFormStatus", type)
|
||||
},
|
||||
doRefresh() {
|
||||
this.$emit('refresh');
|
||||
},
|
||||
open(data) {
|
||||
this.show = true
|
||||
this.loading = false
|
||||
this.team = data.team
|
||||
this.siteNo = data.siteNo
|
||||
this.partnumber = ''
|
||||
this.specification = ''
|
||||
this.color = ''
|
||||
this.description = ''
|
||||
this.number = ''
|
||||
this.labelCode = ''
|
||||
this.isOnetime = 0
|
||||
this.isBack = 0
|
||||
this.isPolish = 0
|
||||
this.isOut = 0
|
||||
},
|
||||
close() {
|
||||
this.show = false
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.number-text {
|
||||
font-size: 20px;
|
||||
font-weight: 600;
|
||||
}
|
||||
</style>
|
||||
@@ -0,0 +1,357 @@
|
||||
<template>
|
||||
<div>
|
||||
<el-card class="workorder-card">
|
||||
<div class="workorder-card-header">
|
||||
<div>
|
||||
<span>工单编号:</span>
|
||||
<span>{{ formData.workOrder }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span :class="messageClass">{{ message }}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="workorder-card-button-box">
|
||||
<div>
|
||||
<el-button type="primary" @click="doRefresh">刷新</el-button>
|
||||
</div>
|
||||
<div>
|
||||
<el-button v-if="formStatus === 1" type="success" @click="doBtnStartWorkOrder">开启工单</el-button>
|
||||
<el-button v-if="formStatus === 2" type="info" @click="doBtnGenerateLabel">修改合格数</el-button>
|
||||
<el-button v-if="formStatus === 2" type="warning" @click="doBtnEndWorkOrder">结束工单</el-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="workorder-card-action-box">
|
||||
<div>
|
||||
<span>站点: </span>
|
||||
<el-select :disabled="formStatus === 2" style="width: 140px;" v-model="site" placeholder="请选择站点"
|
||||
@change="selectChange">
|
||||
<el-option v-for="item in siteOptions" :key="item.code" :label="item.name"
|
||||
:value="item.code"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
<div>
|
||||
<span>班组: </span>
|
||||
<el-select :disabled="formStatus === 2" style="width: 140px;" v-model="team" placeholder="请选择班组"
|
||||
@change="selectChange">
|
||||
<el-option v-for="item in teamOptions" :key="item.code" :label="item.name"
|
||||
:value="item.code"></el-option>
|
||||
</el-select>
|
||||
</div>
|
||||
</div>
|
||||
<table v-if="formData.workOrder" class="workorder-card-table">
|
||||
<tr>
|
||||
<td>零件号</td>
|
||||
<td>{{ formData.partNumber }}</td>
|
||||
<td>描述</td>
|
||||
<td>{{ formData.description }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>规格</td>
|
||||
<td>{{ formData.specification }}</td>
|
||||
<td>颜色</td>
|
||||
<td>{{ formData.color }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>来源</td>
|
||||
<td>{{ formData.isOnetime === 1 ? "一次合格" : "抛光件" }}</td>
|
||||
<td>类别</td>
|
||||
<td>{{ formData.isBack === 1 ? "返工件" : "正常件" }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>投入数</td>
|
||||
<td>{{ formData.requireNumber }}</td>
|
||||
<td>合格数</td>
|
||||
<td>
|
||||
{{ formData.qualifiedNumber }}
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>合格率</td>
|
||||
<td>{{ qualifiedRate }}</td>
|
||||
<td>抛光数</td>
|
||||
<td>{{ formData.polishNumber }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>打磨数</td>
|
||||
<td>{{ formData.damoNumber }}</td>
|
||||
<td>报废数</td>
|
||||
<td>{{ formData.baofeiNumber }}</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>开始时间</td>
|
||||
<td>{{ formData.startTime }}</td>
|
||||
<td>结束时间</td>
|
||||
<td>{{ formData.endTime }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</el-card>
|
||||
<StartWorkOrderDialog ref="StartWorkOrderDialogRef" @showWarningMessage="showErrorMessage"
|
||||
@changeFormStatus="changeFormStatus" @formDataChange="formDataChange" @refresh="doRefresh" />
|
||||
<EndWorkOrderDialog ref="EndWorkOrderDialogRef" @changeFormStatus="changeFormStatus"
|
||||
@clearFormData="clearFormData" />
|
||||
<GenerateLabelDialog ref="GenerateLabelDialogRef" @updateFormData="updateFormData"></GenerateLabelDialog>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import StartWorkOrderDialog from './StartWorkOrderDialog.vue';
|
||||
import EndWorkOrderDialog from './EndWorkOrderDialog.vue';
|
||||
import GenerateLabelDialog from './GenerateLabelDialog.vue';
|
||||
import * as QcGp12Api from '@/api/qualityManagement/gp12/qcGp12Service';
|
||||
export default {
|
||||
name: 'WorkOrderCard',
|
||||
components: { StartWorkOrderDialog, EndWorkOrderDialog, GenerateLabelDialog },
|
||||
props: {
|
||||
message: String,
|
||||
messageClass: String
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
StartWorkOrderDialogRef: null,
|
||||
EndWorkOrderDialogRef: null,
|
||||
sessionKey: '_touchScreenA01',
|
||||
|
||||
teamOptions: [],
|
||||
siteOptions: [],
|
||||
// 站点工单执行状态 1-初始状态(扫外箱标签) 2-工单执行中(扫内标签)
|
||||
formStatus: 1,
|
||||
team: '',
|
||||
site: '',
|
||||
formData: {
|
||||
workOrder: '',
|
||||
partnumber: '',
|
||||
specification: '',
|
||||
color: '',
|
||||
description: '',
|
||||
isOnetime: 0,
|
||||
isBack: 0,
|
||||
isPolish: 0,
|
||||
isOut: 0,
|
||||
},
|
||||
};
|
||||
},
|
||||
created() {
|
||||
this.init();
|
||||
},
|
||||
computed: {
|
||||
qualifiedRate() {
|
||||
if (this.formData.requireNumber > 0) {
|
||||
const rate = Math.floor((this.formData.qualifiedNumber / this.formData.requireNumber) * 100);
|
||||
return `${rate}%`;
|
||||
} else {
|
||||
return "0%";
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
validateWorkOrder() {
|
||||
if (!this.formData.workOrder) {
|
||||
this.showErrorMessage(1, '未生成有效工单,请扫描箱标签');
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
},
|
||||
showErrorMessage(code, message) {
|
||||
this.$emit('showWarningMessage', code, message);
|
||||
},
|
||||
async init() {
|
||||
try {
|
||||
// 初始化数据
|
||||
let teams = await QcGp12Api.GetGroupOptions()
|
||||
let sites = await QcGp12Api.GetStieOptions()
|
||||
let groups = await QcGp12Api.GetDefectInitOptions()
|
||||
this.teamOptions = teams.data
|
||||
this.siteOptions = sites.data
|
||||
this.groups = groups.data
|
||||
// 缓存数据读取
|
||||
this.getLocalStorage()
|
||||
} catch (error) {
|
||||
console.error(error);
|
||||
}
|
||||
},
|
||||
|
||||
clearFormData() {
|
||||
this.formData = {
|
||||
workOrder: '',
|
||||
partnumber: '',
|
||||
specification: '',
|
||||
color: '',
|
||||
description: '',
|
||||
isOnetime: 0,
|
||||
isBack: 0,
|
||||
isPolish: 0,
|
||||
isOut: 0,
|
||||
}
|
||||
},
|
||||
selectChange() {
|
||||
this.setLocalStorage()
|
||||
},
|
||||
setLocalStorage() {
|
||||
const data = {
|
||||
team: this.team,
|
||||
site: this.site
|
||||
}
|
||||
localStorage.setItem(this.sessionKey, JSON.stringify(data));
|
||||
},
|
||||
getLocalStorage() {
|
||||
const data = JSON.parse(localStorage.getItem(this.sessionKey));
|
||||
if (data) {
|
||||
this.team = data.team
|
||||
this.site = data.site
|
||||
}
|
||||
},
|
||||
// 更新工单数据
|
||||
updateFormData() {
|
||||
const params = {
|
||||
workOrder: this.formData.workOrder
|
||||
}
|
||||
if (params.workOrder === '' || params.workOrder === null) {
|
||||
return;
|
||||
}
|
||||
QcGp12Api.UpdateWorkOrderDetail(params).then(res => {
|
||||
if (res.code === 200) {
|
||||
this.formData = res.data
|
||||
this.formDataChange()
|
||||
}
|
||||
})
|
||||
},
|
||||
changeFormStatus(type) {
|
||||
this.formStatus = type
|
||||
},
|
||||
setMqttMessage(LabelCode, ComNo, SiteNo) {
|
||||
if (SiteNo !== this.site) {
|
||||
return;
|
||||
}
|
||||
// 解析结果
|
||||
if (this.formStatus === 1) {
|
||||
// 扫外箱标签模式
|
||||
this.$refs.StartWorkOrderDialogRef.handleScanBoxOutLabel(LabelCode, ComNo)
|
||||
return;
|
||||
}
|
||||
// 扫内标签模式
|
||||
if (this.formStatus === 2) {
|
||||
// 扫内标签模式
|
||||
this.handleScanInnerLabel(LabelCode, ComNo)
|
||||
return;
|
||||
}
|
||||
},
|
||||
// 扫内标签的情况
|
||||
handleScanInnerLabel(label = '', comNo = "未知串口") {
|
||||
const params = {
|
||||
workOrder: this.formData.workOrder,
|
||||
partNumber: this.formData.partNumber,
|
||||
team: this.team,
|
||||
siteNo: this.site,
|
||||
comNo: comNo,
|
||||
labelType: 2,
|
||||
label,
|
||||
}
|
||||
QcGp12Api.ScanInnerLabel(params).then(res => {
|
||||
if (res.code === 200 && res.data === "ok") {
|
||||
this.showErrorMessage(0);
|
||||
this.updateFormData()
|
||||
} else {
|
||||
this.showErrorMessage(3, res.data);
|
||||
}
|
||||
});
|
||||
},
|
||||
// 工单数据变更
|
||||
formDataChange(data = null) {
|
||||
if (data) {
|
||||
this.formData = data
|
||||
}
|
||||
this.$emit("formDataChange", this.formData)
|
||||
},
|
||||
doRefresh() {
|
||||
this.$emit('refresh');
|
||||
this.showErrorMessage(0);
|
||||
},
|
||||
clearFormData() {
|
||||
this.formData = {
|
||||
workOrder: '',
|
||||
partnumber: '',
|
||||
specification: '',
|
||||
color: '',
|
||||
description: '',
|
||||
isOnetime: 0,
|
||||
isBack: 0,
|
||||
isPolish: 0,
|
||||
isOut: 0,
|
||||
}
|
||||
this.$emit('clear');
|
||||
},
|
||||
doBtnStartWorkOrder() {
|
||||
const data = {
|
||||
team: this.team,
|
||||
siteNo: this.siteNo,
|
||||
}
|
||||
this.$refs.StartWorkOrderDialogRef.open(data);
|
||||
},
|
||||
doBtnEndWorkOrder() {
|
||||
const data = {
|
||||
formData: this.formData,
|
||||
team: this.team,
|
||||
siteNo: this.siteNo,
|
||||
}
|
||||
this.$refs.EndWorkOrderDialogRef.open(data);
|
||||
},
|
||||
doBtnGenerateLabel() {
|
||||
const data = {
|
||||
formData: this.formData,
|
||||
team: this.team,
|
||||
siteNo: this.siteNo,
|
||||
}
|
||||
this.$refs.GenerateLabelDialogRef.open(data);
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
.workorder-card {
|
||||
min-height: 400px;
|
||||
}
|
||||
|
||||
|
||||
.workorder-card-header {
|
||||
width: 100%;
|
||||
font-size: 18px;
|
||||
font-weight: 600;
|
||||
margin-bottom: 10px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
}
|
||||
|
||||
.workorder-card-table {
|
||||
width: 100%;
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
border: 2px solid #000;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
.workorder-card-table td {
|
||||
border: 2px solid #000;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
.workorder-card-button-box {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.workorder-card-action-box {
|
||||
width: 100%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
margin-bottom: 10px;
|
||||
font-size: 16px;
|
||||
font-weight: 600;
|
||||
}
|
||||
</style>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user