This commit is contained in:
zty 2025-08-28 16:21:41 +08:00
commit 8cd7bdb879
10 changed files with 217 additions and 94 deletions

View File

@ -356,6 +356,12 @@ export default {
return await http.delete(`${config.API_URL}/wpm/mlogbw/${id}/`); return await http.delete(`${config.API_URL}/wpm/mlogbw/${id}/`);
}, },
}, },
start_test:{
name: "kuaisu",
req: async function (data) {
return await http.post(`${config.API_URL}/wpm/mlogbw/start_test/`,data);
},
}
}, },
mloguser: { mloguser: {
list: { list: {

View File

@ -1,9 +1,9 @@
<template> <template>
<el-input ref="scanInput" v-model="scanValue" :placeholder="props.placeholder" @keydown="handleKeyDown" :type="inputType" <el-input ref="scanInput" v-model="scanValue" :placeholder="props.placeholder" @keydown="handleKeyDown" :type="inputType"
@focus="handleFocus" clearable /> @focus="handleFocus" clearable/>
</template> </template>
<script setup> <script setup>
import { ref, defineProps, defineEmits, computed, onMounted } from "vue"; import { ref, defineProps, defineEmits, computed, onMounted, nextTick } from "vue";
import { ElMessage } from 'element-plus' import { ElMessage } from 'element-plus'
const scanValue = ref('') const scanValue = ref('')
@ -23,30 +23,50 @@ const props = defineProps({
const emit = defineEmits(['scan']); const emit = defineEmits(['scan']);
const inputType = ref('text') const inputType = ref('text')
onMounted(()=>{
nextTick(()=>{
// const inputElement = document.querySelector('input[type="text"]');
const inputElement = scanInput.value.$el.querySelector('input');
inputElement.addEventListener("compositionstart", (event) => {
ElMessage.info('请确保输入法为英文!')
});
})
})
function handleKeyDown(e) { function handleKeyDown(e) {
if (e.key === 'Enter') { if (e.key === 'Enter') {
// inputType.value = 'text'
// e.target.readOnly = false
const value = scanValue.value.trim() const value = scanValue.value.trim()
if (/[\u4e00-\u9fa5]/.test(value)) { if (/[\u4e00-\u9fa5]/.test(value)) {
ElMessage.error('扫码内容包含中文或输入法异常,请切换为英文输入法后重试!') ElMessage.error('扫码内容包含中文或输入法异常,请切换为英文输入法后重试!')
scanValue.value = '' scanValue.value = ''
return return
} }
if (value) { else if (value) {
// inputType.value = 'text'
// props.onScan && props.onScan(value) // props.onScan && props.onScan(value)
emit('scan', value) emit('scan', value)
if (props.clearAfterScan) { if (props.clearAfterScan) {
scanValue.value = '' scanValue.value = ''
} }
} }
else {
ElMessage.error('请扫描正确的条码/二维码!')
}
} }
} }
function handleFocus(e) { function handleFocus(e) {
// //
e.target.setAttribute('inputmode', 'text') e.target.setAttribute('inputmode', 'text')
e.target.setAttribute('lang', 'en') e.target.setAttribute('lang', 'en')
// ElMessage.info('') // ElMessage.info('')
// e.target.readOnly = true
// inputType.value = 'password' // inputType.value = 'password'
} }
</script> </script>

View File

@ -31,6 +31,8 @@
:params="params" :params="params"
:query="params" :query="params"
id="exportDiv" id="exportDiv"
:summary-method="getSummaries"
show-summary
stripe stripe
> >
<el-table-column type="index" width="50" fixed="left"/> <el-table-column type="index" width="50" fixed="left"/>
@ -49,7 +51,7 @@
</el-table-column> </el-table-column>
<el-table-column label="合格数" class-name="colorheader1"> <el-table-column label="合格数" class-name="colorheader1">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.data['毛坯检测_缺陷项_放大率¢2mm不合格']?1-scope.row.data['毛坯检测_缺陷项_放大率¢2mm不合格']:1 }}</span> <span>{{ scope.row.data['毛坯检测_缺陷项_放大率¢2mm不合格']?0:1 }}</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table-column> </el-table-column>
@ -78,14 +80,14 @@
</el-table-column> </el-table-column>
<el-table-column label="合格数" class-name="colorheader3"> <el-table-column label="合格数" class-name="colorheader3">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.data['毛坯检测_缺陷项_剪切¢18.3mm不合格']?1-scope.row.data['毛坯检测_缺陷项_剪切¢18.3mm不合格']:1 }}</span> <span>{{ !scope.row.data['毛坯检测_缺陷项_剪切¢18.3mm不合格']&&!scope.row.data['毛坯检测_缺陷项_剪切¢18.3mm可加工']?1:0 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<!-- <el-table-column label="可加工" class-name="colorheader3"> <el-table-column label="可加工" class-name="colorheader3">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.data['毛坯检测_缺陷项_剪切¢18.3mm不合格']?1-scope.row.data['毛坯检测_缺陷项_剪切¢18.3mm不合格']:0 }}</span> <span>{{ scope.row.data['毛坯检测_缺陷项_剪切¢18.3mm可加工']?1:0 }}</span>
</template> </template>
</el-table-column> --> </el-table-column>
</el-table-column> </el-table-column>
<el-table-column label="暗点" align="center" class-name="colorheader4"> <el-table-column label="暗点" align="center" class-name="colorheader4">
<el-table-column label="内标合格" class-name="colorheader4"> <el-table-column label="内标合格" class-name="colorheader4">
@ -102,7 +104,7 @@
</el-table-column> </el-table-column>
<el-table-column label="可加工" class-name="colorheader4"> <el-table-column label="可加工" class-name="colorheader4">
<template #default="scope"> <template #default="scope">
<span v-if="scope.row.data.毛坯检测_检测项_暗点==''||scope.row.data.毛坯检测_检测项_暗点==null">1</span> <span v-if="scope.row.data.毛坯检测_检测项_暗点!=='合格'&&scope.row.data.毛坯检测_检测项_暗点!=='不合格'">1</span>
<span v-else>0</span> <span v-else>0</span>
</template> </template>
</el-table-column> </el-table-column>
@ -147,23 +149,14 @@
<span>{{ scope.row.data.毛坯检测_缺陷项_角偏?scope.row.data.毛坯检测_缺陷项_角偏:0 }}</span> <span>{{ scope.row.data.毛坯检测_缺陷项_角偏?scope.row.data.毛坯检测_缺陷项_角偏:0 }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="出口" align="center" class-name="colorheader6"> <!-- <el-table-column label="出口" align="center" class-name="colorheader6">
<el-table-column label="国标" class-name="colorheader6"> <el-table-column label="国标" class-name="colorheader6">
<!-- <template #default="scope">
<span></span>
</template> -->
</el-table-column> </el-table-column>
<el-table-column label="内标" class-name="colorheader6"> <el-table-column label="内标" class-name="colorheader6">
<!-- <template #default="scope">
<span></span>
</template> -->
</el-table-column> </el-table-column>
<el-table-column label="内标放宽" class-name="colorheader6"> <el-table-column label="内标放宽" class-name="colorheader6">
<!-- <template #default="scope">
<span></span>
</template> -->
</el-table-column> </el-table-column>
</el-table-column> </el-table-column> -->
<el-table-column label="备注" align="center" class-name="colorheader7"> <el-table-column label="备注" align="center" class-name="colorheader7">
<template #default="scope"> <template #default="scope">
<span>{{ scope.row.data.毛坯检测_缺陷项_备注 }}</span> <span>{{ scope.row.data.毛坯检测_缺陷项_备注 }}</span>
@ -234,7 +227,96 @@ export default {
getCountQt(data,type){ getCountQt(data,type){
let count_qt = 0,count = 0; let count_qt = 0,count = 0;
} },
getSummaries({ columns, data }) {
const sums = [];
let total = data.length;
columns.forEach((column, index) => {
if (index === 0) {
sums[index] = <p class="count_row">合计<br /><br />比率<br /></p>
return;
}
let propert = '';
if(index == 4&&column.label=='合格数'){
propert= '毛坯检测_缺陷项_放大率¢2mm不合格';
}
if(index == 6&&column.label=='合格数'){
propert= '毛坯检测_缺陷项_放大率¢16mm不合格';
}
if(index == 9&&column.label=='合格数'){
propert= '毛坯检测_缺陷项_剪切¢18.3mm不合格';
}
if(index == 10&&column.label=='可加工'){
propert= '毛坯检测_缺陷项_剪切¢18.3mm可加工';
}
if(index == 11&&column.label=='内标合格'||index == 12&&column.label=='长点不合格'||index == 13&&column.label=='可加工'){
propert= '毛坯检测_检测项_暗点';
}
if(index == 14&&column.label=='暗点重'){
propert= '毛坯检测_缺陷项_暗点重';
}
if(index == 15&&column.label=='花丝'){
propert= '毛坯检测_缺陷项_花丝';
}
if(index == 16&&column.label=='网格'){
propert= '毛坯检测_缺陷项_网格';
}
if(index == 17&&column.label=='花朵'){
propert= '毛坯检测_缺陷项_花朵';
}
if(index == 18&&column.label=='S畸变'){
propert= '毛坯检测_缺陷项_S畸变不合格';
}
if(index == 19&&column.label=='弓形畸变不合格'){
propert= '毛坯检测_缺陷项_弓形畸变不合格';
}
if(index == 20&&column.label=='炸废'){
propert= '毛坯检测_缺陷项_炸废';
}
if(index == 21&&column.label=='角偏'){
propert= '毛坯检测_缺陷项_角偏';
}
if (propert!=='') {
let values = [];
if(index==4||index==6){
values = data.map((item) =>!item.data[propert]?1:0);
}else if(index==9){
values = data.map((item) =>!item.data[propert]&&!item.data['毛坯检测_缺陷项_剪切¢18.3mm可加工']?1:0);
}else if(index==11){
values = data.map((item) =>item.data[propert]=='合格'?1:0);
}else if(index==12){
values = data.map((item) =>item.data[propert]=='不合格'?1:0);
}else if(index==13){
values = data.map((item) =>item.data[propert]!=='合格'&&item.data[propert]!=='不合格'?1:0);
}else{
values = data.map((item) =>item.data[propert]!==undefined?Number(item.data[propert]):0);
}
console.log('values',values);
if (!values.every((value) => Number.isNaN(value))) {
sums[index] = values.reduce((prev, curr) => {
let value = Number(curr);
let sum = 0;
sum = Number(Number(prev) + Number(curr));
if (!isNaN(value)) {
// let rate = Number(sum/total*100).toFixed(2);
// return <p class="count_row"><div ref="borrowAmount1">{sum}</div><br /><div ref="borrowAmount2">{rate}</div></p>
return sum;
} else {
// let rate = Number(prev/total*100).toFixed(2);
// return <p class="count_row"><div ref="borrowAmount1">{prev}</div><br /><div ref="borrowAmount2">{rate}</div></p>
return prev;
}
}, 0);
} else{
sums[index] = <p class="count_row"><div ref="borrowAmount1">0</div><br /><div ref="borrowAmount2">0</div></p>
}
sums[index] =
<p class="count_row"><div ref="borrowAmount1">{sums[index]}</div><br /><div ref="borrowAmount2">{Number(sums[index]/total*100).toFixed(2)}%</div></p>
}
});
return sums;
},
}, },
}; };
</script> </script>

View File

@ -176,8 +176,7 @@ export default {
return { return {
params: { params: {
ordering:'-data__毛坯检测_小日期', ordering:'-data__毛坯检测_小日期',
ordering:'data__毛坯检测_批次号', querys:[[{field:"data__has_key",compare:"",value:"毛坯检测_日期"}]],
querys:[[{field:"wm",value:0,compare:"isnull"},{field:"data__has_key",compare:"",value:"毛坯检测_批次号"}]],
}, },
query:{ query:{
name__contains:'', name__contains:'',
@ -186,7 +185,7 @@ export default {
last_time__lte:'', last_time__lte:'',
}, },
// apiObj: this.$API.wpm.wpr.query, // apiObj: this.$API.wpm.wpr.query,
apiObj: null, apiObj: this.$API.wpm.batchstquery,
options:[], options:[],
tableData:[], tableData:[],
}; };

View File

@ -136,17 +136,22 @@
<el-button <el-button
type="primary" type="primary"
link link
size="small"
v-if="!query.is_deleted" v-if="!query.is_deleted"
@click="formSetting(scope.row)" @click="formSetting(scope.row)"
v-auth="'user.update'" v-auth="'user.update'"
> >
设置 设置
</el-button> </el-button>
<el-button
type="success"
link
@click="userERCode(scope.row)"
v-auth="'user.update'"
>
人员二维码
</el-button>
<el-button <el-button
link link
size="small"
type="warning" type="warning"
@click="formEdit(scope.row, '2')" @click="formEdit(scope.row, '2')"
v-auth="'user.update'" v-auth="'user.update'"
@ -155,7 +160,6 @@
</el-button> </el-button>
<el-button <el-button
link link
size="small"
type="danger" type="danger"
v-if="!query.is_deleted" v-if="!query.is_deleted"
@click="formReset(scope.row)" @click="formReset(scope.row)"
@ -172,7 +176,6 @@
<el-button <el-button
link link
type="danger" type="danger"
size="small"
v-auth="'user.delete'" v-auth="'user.delete'"
> >
删除 删除
@ -245,6 +248,27 @@
@success="handleSaveSuccess" @success="handleSaveSuccess"
@closed="settingClose" @closed="settingClose"
></save-dialog> ></save-dialog>
<el-dialog title="人员二维码" v-model="dialog.qrCode" :width="600">
<el-container>
<el-main style="text-align: center;">
<el-descriptions :column="2">
<el-descriptions-item label="姓名:">
{{userItem.name}}
</el-descriptions-item>
<el-descriptions-item label="账号:">
{{userItem.username}}
</el-descriptions-item>
<el-descriptions-item label="部门:">
{{userItem.belong_dept_name}}
</el-descriptions-item>
<el-descriptions-item label="岗位:">
{{userItem.post_name}}
</el-descriptions-item>
</el-descriptions>
<scQrCode :text="scQrCodeText" style="margin: 50px 0;"></scQrCode>
</el-main>
</el-container>
</el-dialog>
</template> </template>
<script> <script>
@ -263,7 +287,7 @@ export default {
return { return {
dialog: { dialog: {
save: false, save: false,
// certSave:false, qrCode:false,
}, },
isDeleted: true, isDeleted: true,
deletedIs: false, deletedIs: false,
@ -308,6 +332,8 @@ export default {
name: null, name: null,
}, },
imageUrl: "", imageUrl: "",
scQrCodeText: "",
userItem: {},
filterParams: {}, filterParams: {},
tableParams: {}, tableParams: {},
apiObj: this.$API.system.user.list, apiObj: this.$API.system.user.list,
@ -352,6 +378,12 @@ export default {
getImgUrl(img) { getImgUrl(img) {
return "http://49.232.14.174:2226" + img; return "http://49.232.14.174:2226" + img;
}, },
userERCode(row){
let that = this;
that.userItem = row;
that.scQrCodeText = "user#"+row.id;
that.dialog.qrCode = true;
},
// //
add() { add() {
this.type = "add"; this.type = "add";

View File

@ -185,7 +185,7 @@
:cate = "cate_type" :cate = "cate_type"
:process = "process" :process = "process"
:mgroupId = "mgroupId" :mgroupId = "mgroupId"
:deptId = " params.belong_dept" :deptId = " deptId"
@success="handleinmSuccess" @success="handleinmSuccess"
> >
</save-dialog> </save-dialog>

View File

@ -259,6 +259,7 @@
>编辑</el-button> >编辑</el-button>
<el-button <el-button
type="warning" type="warning"
v-if="mlogItem.material_in_&&mlogItem.material_in_.tracking==20"
@click="table_out_check_single(scope.row,'ins')" @click="table_out_check_single(scope.row,'ins')"
>详情</el-button> >详情</el-button>
<el-button <el-button
@ -998,7 +999,6 @@ export default {
}else{ }else{
this.$refs.checkTable.refreshfun(); this.$refs.checkTable.refreshfun();
} }
}, },
// //
handleEditSuccess() { handleEditSuccess() {
@ -1012,7 +1012,11 @@ export default {
scheckClose(){ scheckClose(){
this.dialog.check_single = false; this.dialog.check_single = false;
this.$refs.tableIn.refresh(); this.$refs.tableIn.refresh();
this.$refs.tableOut.refresh(); if(this.mlogItem.material_out_&&this.mlogItem.material_out_.tracking==10){
this.$refs.tableOut.refresh();
}else{
this.$refs.checkTable.refreshfun();
}
}, },
checkDialogClose(){ checkDialogClose(){
this.dialog.check = false; this.dialog.check = false;

View File

@ -250,7 +250,7 @@
</el-row> </el-row>
</el-form> </el-form>
<el-footer> <el-footer>
<el-button type="primary" :loading="isSaveing" @click.stop="checkSetting" save>确定</el-button> <el-button type="primary" v-loading="isSaveing" @click.stop="checkSetting" save>确定</el-button>
<el-button @click="saveCancel">取消</el-button> <el-button @click="saveCancel">取消</el-button>
</el-footer> </el-footer>
</el-main> </el-main>
@ -824,55 +824,20 @@ export default {
that.isSaveing = true; that.isSaveing = true;
that.$refs.dialogForm.validate((valid) => { that.$refs.dialogForm.validate((valid) => {
if (valid) { if (valid) {
Object.assign(that.setForm,that.form); let obj = {};
that.mlogbwlist.forEach(item => { obj.mlogbw_ids = that.mlogbwlist.map(item => item.id);
if(item.ftest!==null){ obj.test_equip = that.form.equipment;
item.ftest.ftestdefects.forEach(defect => { obj.test_user = that.form.test_user;
if(that.setForm.defectids.indexOf(defect.defect) > -1){ obj.test_date = that.handle_date!=null?that.handle_date:that.currentDate;
defect.test_user = that.setForm.test_user; if(that.form.defectids.length>0){
} obj.defects = that.form.defectids;
}) }
item.ftest.ftestitems.forEach(testitem => { if(that.form.testitemids.length>0){
if(that.setForm.testitemids.indexOf(testitem.testitem) > -1){ obj.testitems = that.form.testitemids;
testitem.test_user = that.setForm.test_user; }
testitem.test_equip = that.setForm.equipment; obj.qct = that.qct;
} that.$API.wpm.mlogbw.start_test.req(obj).then((res) => {
}) that.isSaveing = false;
}else{
let ftest = {};
ftest.ftestitems = [];
ftest.ftestdefects = [];
ftest.qct = that.qct;
ftest.test_date =that.handle_date!=null?that.handle_date:that.currentDate;
ftest.test_user = that.handle_user;
that.qct_defects.forEach((item0) => {
let itemObj = {};
itemObj.defect = item0.defect;
itemObj.has = false;
if(that.setForm.defectids.indexOf(item0.defect) > -1){
itemObj.test_user = that.setForm.test_user;
}else{
itemObj.test_user = that.handle_user;
}
ftest.ftestdefects.push(itemObj);
})
that.qct_testitems.forEach((item1) => {
let itemObj1 = {};
itemObj1.testitem = item1.testitem;
itemObj1.addto_wpr = item1.addto_wpr;
itemObj1.test_val_json = "";
if(that.setForm.testitemids.indexOf(item1.testitem) > -1){
itemObj1.test_user = that.setForm.test_user;
itemObj1.test_equip = that.setForm.equipment;
}else{
itemObj1.test_user = that.handle_user;
}
ftest.ftestitems.push(itemObj1);
})
item.ftest = ftest;
}
});
that.$API.wpm.mlogbw.update.req("bulk",that.mlogbwlist).then((res) => {
that.form = {}; that.form = {};
that.checkVisible = false; that.checkVisible = false;
that.multipleSet = true; that.multipleSet = true;
@ -882,13 +847,11 @@ export default {
that.qct_testitems = []; that.qct_testitems = [];
that.qct_testitems = that.testitemlists; that.qct_testitems = that.testitemlists;
that.tableHeight = document.getElementById('mlogbwMain').clientHeight-80; that.tableHeight = document.getElementById('mlogbwMain').clientHeight-80;
that.isSaveing = false;
that.getList(); that.getList();
}).catch((err) => { }).catch(() => {
that.isSaveing = false; that.isSaveing = false;
return err; })
}); }else{ that.isSaveing = false;}
}
}); });
}, },
saveCancel(){ saveCancel(){

View File

@ -28,9 +28,9 @@
</div> </div>
<div class="right-panel"> <div class="right-panel">
<el-input <el-input
style="margin-right: 5px" style="margin-right: 5px;width:200px"
v-model="query.search" v-model="query.search"
placeholder="名称" placeholder="批次号"
clearable clearable
></el-input> ></el-input>
<el-button <el-button
@ -38,6 +38,11 @@
icon="el-icon-search" icon="el-icon-search"
@click="handleQuery" @click="handleQuery"
></el-button> ></el-button>
<el-checkbox
v-model="showHidden"
label="未启用"
@change="hiddenChange"
/>
</div> </div>
</el-header> </el-header>
<el-main> <el-main>
@ -197,13 +202,13 @@ export default {
return { return {
apiObj: null, apiObj: null,
params: { mgroup: "" }, params: { mgroup: "" },
query: {}, query: {enabled: true},
dialog: { dialog: {
save: false, save: false,
detail: false, detail: false,
mtask:false, mtask:false,
}, },
showHidden: false,
tableData: [], tableData: [],
selection: [], selection: [],
mtaskoptions:[], mtaskoptions:[],
@ -332,6 +337,15 @@ export default {
handleQuery() { handleQuery() {
this.$refs.table.queryData(this.query); this.$refs.table.queryData(this.query);
}, },
hiddenChange(val) {
console.log('val',val);
if (val) {
this.query.enabled = false;
} else {
this.query.enabled = true;
}
this.$refs.table.queryData(this.query);
},
// //
// //
handleSaveSuccess(data, mode) { handleSaveSuccess(data, mode) {

View File

@ -33,6 +33,9 @@
<el-descriptions-item label="部门/车间">{{ <el-descriptions-item label="部门/车间">{{
mlogItem.belong_dept_name mlogItem.belong_dept_name
}}</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="所在班组">{{
mlogItem.team_name
}}</el-descriptions-item>
<el-descriptions-item label="处理人"> <el-descriptions-item label="处理人">
<div v-if="mlogItem.handle_users_&&mlogItem.handle_users_.length>0"> <div v-if="mlogItem.handle_users_&&mlogItem.handle_users_.length>0">
<span v-for="item in mlogItem.handle_users_" :key="item.id">{{ item.name }}</span> <span v-for="item in mlogItem.handle_users_" :key="item.id">{{ item.name }}</span>