Compare commits

...

4 Commits

Author SHA1 Message Date
29ea06e5be Merge pull request 'projects/mesxc-zhp' (#143) from projects/mesxc-zhp into projects/mesxc-test
Reviewed-on: #143
2023-12-13 17:08:40 +08:00
‘937886381’
f5bb5f27b4 修改 2023-12-13 16:55:39 +08:00
‘937886381’
fbe8e5c023 新增报表 2023-12-13 16:50:55 +08:00
‘937886381’
4e48eae2a7 修改ui 2023-12-04 14:14:34 +08:00
63 changed files with 5308 additions and 971 deletions

View File

@ -1,8 +1,8 @@
### ###
# @Author: Do not edit # @Author: Do not edit
# @Date: 2023-08-29 09:40:39 # @Date: 2023-08-29 09:40:39
# @LastEditTime: 2023-11-21 10:36:47 # @LastEditTime: 2023-12-13 16:52:10
# @LastEditors: DY # @LastEditors: zhp
# @Description: # @Description:
### ###
# 开发环境配置 # 开发环境配置
@ -13,7 +13,7 @@ VUE_APP_TITLE = MES系统
# 芋道管理系统/开发环境 # 芋道管理系统/开发环境
# VUE_APP_BASE_API = 'http://100.64.0.26:48082' # VUE_APP_BASE_API = 'http://100.64.0.26:48082'
VUE_APP_BASE_API = 'http://192.168.0.33:48082' # VUE_APP_BASE_API = 'http://192.168.0.33:48082'
# VUE_APP_BASE_API = 'http://192.168.4.173:48080' # VUE_APP_BASE_API = 'http://192.168.4.173:48080'
# VUE_APP_BASE_API = 'http://192.168.2.173:48080' # VUE_APP_BASE_API = 'http://192.168.2.173:48080'
# VUE_APP_BASE_API = 'http://192.168.1.49:48082' # VUE_APP_BASE_API = 'http://192.168.1.49:48082'

View File

@ -0,0 +1,101 @@
/*
* @Author: zhp
* @Date: 2023-11-06 15:38:12
* @LastEditTime: 2023-12-08 16:08:35
* @LastEditors: zhp
* @Description:
*/
import request from '@/utils/request'
// 创建质量检测类型基础
export function createQualityHotMaterial(data) {
return request({
url: '/base/quality-hot-material/create',
method: 'post',
data: data
})
}
// 更新质量检测类型基础
export function updateQualityHotMaterial(data) {
return request({
url: '/base/quality-hot-material/update',
method: 'put',
data: data
})
}
// 删除质量检测类型基础
export function deleteQualityHotMaterial(id) {
return request({
url: '/base/quality-hot-material/delete?id=' + id,
method: 'delete'
})
}
// 获得质量检测类型基础
export function getQualityHotMaterial(id) {
return request({
url: '/base/quality-hot-material/get?id=' + id,
method: 'get'
})
}
// 获得质量检测类型基础分页
export function getQualityHotMaterialPage(query) {
return request({
url: 'base/quality-hot-material/page',
method: 'get',
params: query
})
}
// 导出质量检测类型基础 Excel
// export function exportQualityScrapTypeExcel(query) {
// return request({
// url: '/base/quality-scrap-type/export-excel',
// method: 'get',
// params: query,
// responseType: 'blob'
// })
// }
export function getCode(query) {
return request({
url: '/base/quality-hot-material/getCode',
method: 'get',
params: query
})
}
export function getHotMaterialAllList(query) {
return request({
url: '/base/core-hot-material/listAll',
method: 'get',
params: query
})
}
export function getSupplierList(query) {
return request({
url: '/base/core-supplier/listAll',
method: 'get',
params: query
})
}
export function getWorkerList(query) {
return request({
url: '/base/core-worker/listAll',
method: 'get',
params: query
})
}
export function getMaterialCheckList(query) {
return request({
url: '/base/core-hot-material-check/listByMaterial',
method: 'get',
params: query
})
}

View File

@ -1,10 +1,17 @@
/*
* @Author: zhp
* @Date: 2023-12-04 14:10:37
* @LastEditTime: 2023-12-13 16:03:46
* @LastEditors: zhp
* @Description:
*/
import request from '@/utils/request' import request from '@/utils/request'
// 创建安灯按钮16键对应 // 创建安灯按钮16键对应
export function createQualityInspectionBoxBtn(data) { export function createQualityInspectionBoxBtn(data) {
return request({ return request({
url: '/base/quality-inspection-box-btn/create', url: '/base/quality-inspection-box-btn/updateBatch',
method: 'post', method: 'put',
data: data data: data
}) })
} }
@ -52,3 +59,19 @@ export function exportQualityInspectionBoxBtnExcel(query) {
responseType: 'blob' responseType: 'blob'
}) })
} }
export function getAllDetByTypeList(query) {
return request({
url: '/base/quality-scrap-det/scrapMap',
method: 'get',
params: query,
})
}
export function getListByLineSection(query) {
return request({
url: '/base/quality-inspection-box-btn/detListByLineSection',
method: 'get',
params: query,
})
}

View File

@ -1,7 +1,7 @@
/* /*
* @Author: zhp * @Author: zhp
* @Date: 2023-11-06 15:38:12 * @Date: 2023-11-06 15:38:12
* @LastEditTime: 2023-11-06 15:39:39 * @LastEditTime: 2023-12-08 09:46:55
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
*/ */
@ -67,3 +67,4 @@ export function getCode(query) {
params: query params: query
}) })
} }

View File

@ -0,0 +1,63 @@
/*
* @Author: zhp
* @Date: 2023-12-08 15:26:59
* @LastEditTime: 2023-12-11 15:21:44
* @LastEditors: zhp
* @Description:
*/
import request from '@/utils/request'
export function getQualityIsraPage(query) {
return request({
url: 'base/quality-isra-statistics/getIsraData',
method: 'get',
params: query
})
}
export function getQualityIsraDayMap(query) {
return request({
url: '/base/quality-isra-statistics/dayMap',
method: 'get',
params: query
})
}
export function getQualityIsraWeekMap(query) {
return request({
url: '/base/quality-isra-statistics/weekMap',
method: 'get',
params: query
})
}
export function getQualityIsraMonthMap(query) {
return request({
url: '/base/quality-isra-statistics/monthMap',
method: 'get',
params: query
})
}
export function getQualityIsraDayList(query) {
return request({
url: '/base/quality-isra-statistics/dayList',
method: 'get',
params: query
})
}
export function getQualityIsraWeekList(query) {
return request({
url: '/base/quality-isra-statistics/weekList',
method: 'get',
params: query
})
}
export function getQualityIsraMonthList(query) {
return request({
url: '/base/quality-isra-statistics/monthList',
method: 'get',
params: query
})
}

View File

@ -1,7 +1,7 @@
/* /*
* @Author: zhp * @Author: zhp
* @Date: 2023-10-31 10:55:20 * @Date: 2023-10-31 10:55:20
* @LastEditTime: 2023-10-31 15:05:30 * @LastEditTime: 2023-12-06 14:09:14
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
*/ */
@ -33,3 +33,12 @@ export function exportEnergyPlcExcel(query) {
responseType: 'blob' responseType: 'blob'
}) })
} }
export function getOriginalGlassRetrace(query) {
return request({
url: '/base/original-glass-statistics/originalGlassRetrace',
method: 'get',
params: query,
})
}

View File

@ -0,0 +1,41 @@
/*
* @Author: zhp
* @Date: 2023-12-12 13:49:02
* @LastEditTime: 2023-12-13 15:52:11
* @LastEditors: zhp
* @Description:
*/
import request from '@/utils/request'
// 获得质量检查信息记录表分页
export function getProductionDataList(query) {
return request({
url: '/base/report-auto-production/listPlus',
method: 'get',
data: query,
})
}
export function updateProductionDataList(query) {
return request({
url: '/base/report-auto-production/updatePlus',
method: 'put',
data: query,
})
}
export function updateSumProductionDataList(query) {
return request({
url: '/base/report-auto-production/update',
method: 'put',
data: query,
})
}
export function getAutoDeliveDataList(query) {
return request({
url: '/base/report-auto-delive/listPlus',
method: 'put',
data: query,
})
}

View File

@ -142,9 +142,6 @@ function findMaxLabelWidth(rows) {
if (!opt.label) return 0; if (!opt.label) return 0;
if (opt.label.length > max) { if (opt.label.length > max) {
max = opt.label.length; max = opt.label.length;
if (opt.label.includes('(')) {
max = max - 3
}
} }
}); });
}); });
@ -242,7 +239,7 @@ export default {
size: { size: {
type: String, type: String,
default: '', default: '',
} },
}, },
data() { data() {
return { return {

View File

@ -83,7 +83,7 @@ export default {
], ],
}, },
placeholder: '请输入内容', placeholder: '请输入内容',
// readOnly: false, readOnly: true,
}, },
}; };
}, },
@ -123,7 +123,6 @@ export default {
const editor = this.$refs.editor; const editor = this.$refs.editor;
this.Quill = new Quill(editor, this.options); this.Quill = new Quill(editor, this.options);
// start // start
this.Quill?.enable(false);
this.$nextTick(() => { this.$nextTick(() => {
this.Quill?.blur(); this.Quill?.blur();
this.Quill?.enable(true); this.Quill?.enable(true);
@ -195,7 +194,7 @@ export default {
}; };
</script> </script>
<style lang="scss" scoped> <style>
.editor-wrapper { .editor-wrapper {
position: relative; position: relative;
cursor: not-allowed; cursor: not-allowed;

View File

@ -360,7 +360,6 @@ export default {
ts: Date.now(), // ts: Date.now(), //
} }
reqGet(data).then(res => { reqGet(data).then(res => {
console.log(1)
if (res.repCode === '0000') { if (res.repCode === '0000') {
this.backImgBase = res.repData.originalImageBase64 this.backImgBase = res.repData.originalImageBase64
this.blockBackImgBase = res.repData.jigsawImageBase64 this.blockBackImgBase = res.repData.jigsawImageBase64

View File

@ -28,7 +28,7 @@ export default {
// tableBtn: [], // 占位 // tableBtn: [], // 占位
// searchBarFormConfig: [], // 占位 // searchBarFormConfig: [], // 占位
// // 弹窗表单配置 // // 弹窗表单配置
// dialogFormConfig: [], // // dialogFormConfig: [], //
updateUrl: '', updateUrl: '',
addUrl: '', addUrl: '',
pageUrl: '', pageUrl: '',
@ -118,9 +118,9 @@ export default {
this.queryParams['startTime'] = btn.timeVal[0]; this.queryParams['startTime'] = btn.timeVal[0];
this.queryParams['endTime'] = btn.timeVal[1]; this.queryParams['endTime'] = btn.timeVal[1];
return; return;
} }
this.queryParams[key] = btn[key] || null; this.queryParams[key] = btn[key] || null;
}); });
this.handleQuery(); this.handleQuery();
break; break;
case 'add': case 'add':

View File

@ -104,7 +104,7 @@ export const constantRoutes = [
// this generates a separate chunk (about.[hash].js) for this route // this generates a separate chunk (about.[hash].js) for this route
// which is lazy-loaded when the route is visited. // which is lazy-loaded when the route is visited.
component: () => import(/* webpackChunkName: "about" */ '@/views/OperationalOverview/coldBoard.vue') component: () => import(/* webpackChunkName: "about" */ '@/views/OperationalOverview/coldBoard.vue')
}, },
{ {
path: '/processingBoard', path: '/processingBoard',
name: 'processingBoard', name: 'processingBoard',

View File

@ -273,12 +273,20 @@ export default {
$('.hiprint-printTemplate').empty() $('.hiprint-printTemplate').empty()
// const templates = this.$ls.get('KEY_TEMPLATES', {}) // const templates = this.$ls.get('KEY_TEMPLATES', {})
const template = provider.value const template = provider.value
// console.log(template) // console.log(template)
if (this.modelData) {
hiprintTemplate = new hiprint.PrintTemplate({ hiprintTemplate = new hiprint.PrintTemplate({
template: this.modelData != '' ? JSON.parse(this.modelData) : {}, template: JSON.parse(this.modelData),
settingContainer: '#PrintElementOptionSetting', settingContainer: '#PrintElementOptionSetting',
paginationContainer: '.hiprint-printPagination' paginationContainer: '.hiprint-printPagination'
}) })
} else {
hiprintTemplate = new hiprint.PrintTemplate({
template:{},
settingContainer: '#PrintElementOptionSetting',
paginationContainer: '.hiprint-printPagination'
})
}
// } // }
hiprintTemplate.design('#hiprint-printTemplate') hiprintTemplate.design('#hiprint-printTemplate')
// console.log(hiprintTemplate) // console.log(hiprintTemplate)

View File

@ -1,18 +1,18 @@
<!-- <!--
* @Author: zhp * @Author: zhp
* @Date: 2023-10-17 16:50:19 * @Date: 2023-10-17 16:50:19
* @LastEditTime: 2023-10-30 10:47:13 * @LastEditTime: 2023-12-01 16:48:53
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
--> -->
<template> <template>
<el-dialog :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="40%"> <el-dialog class="baseDialog" :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="40%" show-close="true">
<small-title slot="title" :no-padding="true"> <small-title slot="title" :no-padding="true">
{{ !dataForm.id ? '新增' : '编辑' }} {{ !dataForm.id ? '新增' : '编辑' }}
</small-title> </small-title>
<!--
<div class="content"> <div class="content">
<div class="visual-part"> <div class="visual-part"> -->
<el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px" <el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px"
@keyup.enter.native="dataFormSubmit"> @keyup.enter.native="dataFormSubmit">
<el-row :gutter="20"> <el-row :gutter="20">
@ -96,8 +96,8 @@
:page-sizes="[5, 10, 15]" :page-sizes="[5, 10, 15]"
@pagination="getList" /> @pagination="getList" />
</div> --> </div> -->
</div> <!-- </div> -->
</div> <!-- </div> -->
<!-- <div style="position: absolute; bottom: 24px; right: 24px"> <!-- <div style="position: absolute; bottom: 24px; right: 24px">
<el-button style="margin-right: 10px" @click="goback()">返回</el-button> <el-button style="margin-right: 10px" @click="goback()">返回</el-button>
@ -416,3 +416,34 @@ export default {
padding: 18px; padding: 18px;
} }
</style> --> </style> -->
<style>
.baseDialog .el-dialog__header {
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
padding: 13px 24px;
border-bottom: 1px solid #e9e9e9;
}
.baseDialog .el-dialog__header .titleStyle::before{
content: '';
display: inline-block;
width: 4px;
height: 16px;
background-color: #0B58FF;
border-radius: 1px;
margin-right: 8px;
position: relative;
top: 2px;
}
.baseDialog .el-dialog__body {
padding-left: 24px;
padding-right: 24px;
}
.baseDialog .btnTextStyle {
letter-spacing:6px;
padding: 9px 10px 9px 16px;
font-size: 14px;
}
</style>

View File

@ -1,12 +1,12 @@
<!-- <!--
* @Author: zhp * @Author: zhp
* @Date: 2023-10-17 16:50:19 * @Date: 2023-10-17 16:50:19
* @LastEditTime: 2023-10-30 10:41:07 * @LastEditTime: 2023-12-04 13:43:19
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
--> -->
<template> <template>
<el-dialog :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="30%"> <el-dialog class="baseDialog" :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="30%" show-close="true">
<small-title slot="title" :no-padding="true"> <small-title slot="title" :no-padding="true">
{{ !dataForm.id ? '新增' : '编辑' }} {{ !dataForm.id ? '新增' : '编辑' }}
</small-title> </small-title>
@ -46,7 +46,7 @@
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="模板设计" prop="content"> <el-form-item label="模板设计" prop="content">
<el-button type="primary" @click="btnClickDesign()">模板设计</el-button> <el-button icon="el-icon-edit" @click="btnClickDesign()">模板设计</el-button>
</el-form-item> </el-form-item>
</el-col> </el-col>
<!-- <el-col :span="12"> <!-- <el-col :span="12">
@ -439,3 +439,36 @@ export default {
padding: 18px; padding: 18px;
} }
</style> --> </style> -->
<style>
.baseDialog .el-dialog__header {
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
padding: 13px 24px;
border-bottom: 1px solid #e9e9e9;
}
.baseDialog .el-dialog__header .titleStyle::before{
content: '';
display: inline-block;
width: 4px;
height: 16px;
background-color: #0B58FF;
border-radius: 1px;
margin-right: 8px;
position: relative;
top: 2px;
}
.baseDialog .el-dialog__body {
padding-left: 24px;
padding-right: 24px;
}
.baseDialog .btnTextStyle {
letter-spacing:6px;
padding: 9px 10px 9px 16px;
font-size: 14px;
}
</style>

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2023-08-01 14:55:51 * @Date: 2023-08-01 14:55:51
* @LastEditors: zhp * @LastEditors: zhp
* @LastEditTime: 2023-11-22 14:40:07 * @LastEditTime: 2023-12-04 13:38:45
* @Description: * @Description:
--> -->
<template> <template>
@ -71,7 +71,7 @@ export default {
modelShow:false, modelShow:false,
tableBtn: [ tableBtn: [
{ {
type: 'print', type: 'detail',
btnName: '查看', btnName: '查看',
}, },
this.$auth.hasPermi(`base:packaging-print-model:update`) this.$auth.hasPermi(`base:packaging-print-model:update`)
@ -121,11 +121,12 @@ export default {
// name: 'reset', // name: 'reset',
// }, // },
{ {
type: 'separate', type: 'label',
label:'标签模板',
}, },
{ {
type: this.$auth.hasPermi('base:packaging-print-model:create') ? 'button' : '', type: this.$auth.hasPermi('base:packaging-print-model:create') ? 'button' : '',
btnName: '新增模板', btnName: '新增',
name: 'add', name: 'add',
color: 'success', color: 'success',
plain: true, plain: true,

View File

@ -1,19 +1,19 @@
<!-- <!--
* @Author: zhp * @Author: zhp
* @Date: 2023-10-17 16:50:19 * @Date: 2023-10-17 16:50:19
* @LastEditTime: 2023-10-18 16:07:39 * @LastEditTime: 2023-12-04 13:45:45
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
--> -->
<template> <template>
<el-dialog :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="40%"> <el-dialog class="baseDialog" :visible.sync="visible" :show-close="false" :wrapper-closable="false" width="40%" show-close="true">
<small-title slot="title" :no-padding="true"> <small-title slot="title" :no-padding="true">
{{ !dataForm.id ? '新增' : '编辑' }} {{ !dataForm.id ? '新增' : '编辑' }}
</small-title> </small-title>
<div class="content"> <div class="content">
<div class="visual-part"> <div class="visual-part">
<el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px" <el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="auto"
@keyup.enter.native="dataFormSubmit"> @keyup.enter.native="dataFormSubmit">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
@ -345,3 +345,37 @@ export default {
padding: 18px; padding: 18px;
} }
</style> --> </style> -->
<style>
.baseDialog .el-dialog__header {
font-size: 16px;
color: rgba(0, 0, 0, 0.85);
font-weight: 500;
padding: 13px 24px;
border-bottom: 1px solid #e9e9e9;
}
.baseDialog .el-dialog__header .titleStyle::before{
content: '';
display: inline-block;
width: 4px;
height: 16px;
background-color: #0B58FF;
border-radius: 1px;
margin-right: 8px;
position: relative;
top: 2px;
}
.baseDialog .el-dialog__body {
padding-left: 24px;
padding-right: 24px;
}
.baseDialog .btnTextStyle {
letter-spacing:6px;
padding: 9px 10px 9px 16px;
font-size: 14px;
}
</style>

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2023-08-01 14:55:51 * @Date: 2023-08-01 14:55:51
* @LastEditors: zhp * @LastEditors: zhp
* @LastEditTime: 2023-11-22 14:36:33 * @LastEditTime: 2023-12-04 13:44:01
* @Description: * @Description:
--> -->
<template> <template>
@ -122,7 +122,8 @@ export default {
// name: 'reset', // name: 'reset',
// }, // },
{ {
type: 'separate', type: 'label',
label: '标签类型'
}, },
{ {
type: this.$auth.hasPermi('base:packaging-print-type:create') ? 'button' : '', type: this.$auth.hasPermi('base:packaging-print-type:create') ? 'button' : '',

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2022-08-24 11:19:43 * @Date: 2022-08-24 11:19:43
* @LastEditors: zhp * @LastEditors: zhp
* @LastEditTime: 2023-11-06 15:59:53 * @LastEditTime: 2023-12-13 15:52:53
* @Description: * @Description:
*/ */
export default { export default {
@ -38,7 +38,7 @@ export default {
this.$refs["dataForm"].resetFields(); this.$refs["dataForm"].resetFields();
if (this.dataForm.id) { if (this.dataForm.id) {
this.urlOptions.infoURL(id).then(response => { this.urlOptions.infoURL(id).then(response => {
this.dataForm = response.data; this.dataForm = response.data
if (this.setData) { if (this.setData) {
this.setDataForm() this.setDataForm()
} }
@ -80,7 +80,7 @@ export default {
if (this.dataForm.id) { if (this.dataForm.id) {
this.urlOptions.updateURL(this.dataForm).then(response => { this.urlOptions.updateURL(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
this.visible = false; this.visible = false;
this.$emit("refreshDataList"); this.$emit("refreshDataList");
}); });
return; return;

View File

@ -9,8 +9,7 @@
<el-drawer <el-drawer
:visible="visible" :visible="visible"
:show-close="false" :show-close="false"
:wrapper-closable="mode.includes('detail') ? true : false" :wrapper-closable="false"
:before-close="handleCancel"
class="drawer" class="drawer"
custom-class="mes-drawer" custom-class="mes-drawer"
:size="size || '50%'" :size="size || '50%'"
@ -130,12 +129,13 @@
</section> </section>
</div> </div>
<div v-if="!mode.includes('detail')" class="drawer-body__footer"> <div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button> <el-button style="" @click="handleCancel">返回</el-button>
<el-button <el-button
type="primary" type="primary"
v-if="!mode.includes('detail')"
@click="handleSave"> @click="handleSave">
确定 保存
</el-button> </el-button>
</div> </div>
</div> </div>

View File

@ -9,8 +9,7 @@
<el-drawer <el-drawer
:visible="visible" :visible="visible"
:show-close="false" :show-close="false"
:wrapper-closable="mode.includes('detail') ? true : false" :wrapper-closable="false"
:before-close="handleCancel"
class="drawer" class="drawer"
custom-class="mes-drawer" custom-class="mes-drawer"
:size="size || '50%'" :size="size || '50%'"
@ -129,10 +128,11 @@
</section> </section>
</div> </div>
<div v-if="!mode.includes('detail')" class="drawer-body__footer"> <div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button> <el-button style="" @click="handleCancel">取消</el-button>
<el-button <el-button
type="primary" type="primary"
v-if="!mode.includes('detail')"
@click="handleCancel"> @click="handleCancel">
确定 确定
</el-button> </el-button>

View File

@ -34,7 +34,7 @@
<base-dialog <base-dialog
:dialogTitle="title" :dialogTitle="title"
:dialogVisible="open" :dialogVisible="open"
width="30%" width="700px"
@close="cancel" @close="cancel"
@cancel="cancel" @cancel="cancel"
@confirm="submitForm"> @confirm="submitForm">

View File

@ -25,7 +25,6 @@
v-if="tableBtn.length" v-if="tableBtn.length"
slot="handleBtn" slot="handleBtn"
label="操作" label="操作"
:width="90"
:method-list="tableBtn" :method-list="tableBtn"
@clickBtn="handleTableBtnClick" /> @clickBtn="handleTableBtnClick" />
</base-table> </base-table>
@ -42,7 +41,7 @@
<base-dialog <base-dialog
:dialogTitle="title" :dialogTitle="title"
:dialogVisible="open" :dialogVisible="open"
width="45%" width="700px"
@close="cancel" @close="cancel"
@cancel="cancel" @cancel="cancel"
@confirm="submitForm"> @confirm="submitForm">
@ -128,7 +127,7 @@ export default {
// width: 180, // width: 180,
// filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'), // filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
// }, // },
{ prop: 'code', label: '编码', showOverflowtooltip: true }, { prop: 'code', label: '编码' },
{ prop: 'plcTableName', label: '关联表名' }, { prop: 'plcTableName', label: '关联表名' },
{ prop: 'name', label: '标识名称' }, { prop: 'name', label: '标识名称' },
{ prop: 'enName', label: '英文名称' }, { prop: 'enName', label: '英文名称' },
@ -137,7 +136,7 @@ export default {
label: '是否采集', label: '是否采集',
subcomponent: switchBtn, subcomponent: switchBtn,
}, },
{ prop: 'description', label: '描述', showOverflowtooltip: true }, { prop: 'description', label: '描述' },
], ],
searchBarFormConfig: [ searchBarFormConfig: [
{ {
@ -214,28 +213,16 @@ export default {
}, },
], ],
[ [
// {
// switch: true,
// label: '', // 0 , 1
// prop: 'collection',
// bind: {
// 'active-value': 1,
// 'inactive-value': 0,
// value: 1,
// },
// },
{ {
select: true, switch: true,
options: [ label: '是否采集', // 0 , 1
{ label: '否', value: 0 },
{ label: '是', value: 1 }
],
label: '是否采集',
prop: 'collection', prop: 'collection',
bind: { bind: {
clearable: true, filterable: true 'active-value': 1,
} 'inactive-value': 0,
} value: 1,
},
},
], ],
[ [
{ {

View File

@ -9,8 +9,7 @@
<el-drawer <el-drawer
:visible="visible" :visible="visible"
:show-close="false" :show-close="false"
:wrapper-closable="mode.includes('detail') ? true : false" :wrapper-closable="false"
:before-close="handleCancel"
class="drawer" class="drawer"
custom-class="mes-drawer" custom-class="mes-drawer"
:size="size || '50%'" :size="size || '50%'"
@ -148,12 +147,13 @@
</section> </section>
</div> </div>
<div v-if="!mode.includes('detail')" class="drawer-body__footer"> <div class="drawer-body__footer">
<el-button style="" @click="handleCancel">取消</el-button> <el-button style="" @click="handleCancel">取消</el-button>
<el-button <el-button
type="primary" type="primary"
v-if="!mode.includes('detail')"
@click="handleSave"> @click="handleSave">
确定 保存
</el-button> </el-button>
</div> </div>
</div> </div>

View File

@ -1,8 +1,8 @@
<!-- <!--
filename: dialogForm.vue filename: dialogForm.vue
author: liubin author: liubin
date: 2023-10-31 15:55:13 date: 2023-10-31 15:55:13
description: description:
--> -->
<template> <template>
@ -112,7 +112,7 @@
<el-form-item label="附件"> <el-form-item label="附件">
<FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="isdetail" @name="setFileName" /> <FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="isdetail" @name="setFileName" />
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="!isdetail" class="drawer-body__footer"> <div v-if="!isdetail" class="drawer-body__footer">
@ -269,7 +269,6 @@ export default {
} }
this.dataForm.description = this.dataForm.description || '无' this.dataForm.description = this.dataForm.description || '无'
this.setConfig() this.setConfig()
this.setInspectionContet()
}); });
} else { } else {
// if (this.urlOptions.isGetCode) { // if (this.urlOptions.isGetCode) {

View File

@ -49,8 +49,7 @@
<addRecord <addRecord
v-if="addOrUpdateVisible" v-if="addOrUpdateVisible"
ref="addOrUpdate" ref="addOrUpdate"
@refreshDataList="getList" @refreshDataList="getList" />
@destroy="addOrUpdateVisible = false" />
</div> </div>
</template> </template>

View File

@ -49,7 +49,7 @@
<script> <script>
import { publicFormatter } from '@/utils/dict'; import { publicFormatter } from '@/utils/dict';
// import moment from 'moment'; import moment from 'moment';
import basicPageMixin from '@/mixins/lb/basicPageMixin'; import basicPageMixin from '@/mixins/lb/basicPageMixin';
import { exportMaintainMonitorExcel } from '@/api/equipment/base/maintain/record' import { exportMaintainMonitorExcel } from '@/api/equipment/base/maintain/record'
import { parseTime } from '@/utils/ruoyi' import { parseTime } from '@/utils/ruoyi'
@ -67,7 +67,7 @@ const remainBox = {
color() { color() {
if (this.value) { if (this.value) {
const v = +this.value; const v = +this.value;
return v < 0 ? '#FF5454' : v >= 0 && v < 2 ? '#FFD767' : '#37D97F'; return v < 0 ? 'red' : v >= 0 && v < 2 ? 'yellow' : 'green';
} }
return 'unset'; return 'unset';
}, },
@ -78,10 +78,9 @@ const remainBox = {
style={`background: ${ style={`background: ${
this.color this.color
}; position:absolute; inset: 0; padding: 0 10px; display: flex; align-items: center; color: ${ }; position:absolute; inset: 0; padding: 0 10px; display: flex; align-items: center; color: ${
// this.color == 'red' ? '#fff' : 'unset' this.color == 'red' ? '#fff' : 'unset'
'#fff'
}`}> }`}>
{ this.injectData[this.injectData.prop]?.toFixed(0) || '' } {this.injectData[this.injectData.prop] || ''}
</div> </div>
); );
}, },
@ -122,35 +121,30 @@ export default {
// width: 180, // width: 180,
// filter: parseTime(createTime), // filter: parseTime(createTime),
// }, // },
{ prop: 'name', label: '保养计划', minWidth: 100, showOverflowtooltip: true }, { prop: 'name', label: '保养计划' },
{ prop: 'lineName', label: '产线名', minWidth: 100, showOverflowtooltip: true }, { prop: 'lineName', label: '产线名' },
{ prop: 'sectionName', label: '工段名', minWidth: 100, showOverflowtooltip: true }, { prop: 'sectionName', label: '工段名' },
{ prop: 'equipmentName', label: '设备名称', minWidth: 100, showOverflowtooltip: true }, { prop: 'equipmentName', label: '设备名称' },
{ prop: 'equipmentCode', label: '设备编码', minWidth: 100, showOverflowtooltip: true }, { prop: 'equipmentCode', label: '设备编码' },
{ prop: 'maintenancePeriod', label: '保养频率' }, { prop: 'maintenancePeriod', label: '保养频率' },
{ {
prop: 'maintainType', prop: 'maintainType',
label: '保养类型', label: '保养类型',
showOverflowtooltip: true,
filter: publicFormatter(this.DICT_TYPE.MAINTAIN_TYPE), filter: publicFormatter(this.DICT_TYPE.MAINTAIN_TYPE),
}, },
{ {
prop: 'lastMaintainTime', prop: 'lastMaintainTime',
label: '上次保养时间', label: '上次保养时间',
filter: parseTime, filter: parseTime,
minWidth: 150,
showOverflowtooltip: true
}, },
{ prop: 'nextMaintainTime', label: '计划下次保养时间', filter: parseTime, minWidth: 150, showOverflowtooltip: true }, { prop: 'nextMaintainTime', label: '计划下次保养时间', filter: parseTime },
{ {
prop: 'remainDays', prop: 'remainDays',
label: '距离保养时间(天)', label: '距离保养时间(天)',
subcomponent: remainBox, subcomponent: remainBox,
minWidth: 150,
// showOverflowtooltip: true
}, },
{ prop: 'opt1', label: '设备保养', name: '操作', subcomponent: btn, width: 100 }, { prop: 'opt1', label: '设备保养', name: '操作', subcomponent: btn },
{ prop: 'opt2', label: '保养记录', name: '查看详情', subcomponent: btn, width: 100 }, { prop: 'opt2', label: '保养记录', name: '查看详情', subcomponent: btn },
], ],
searchBarFormConfig: [ searchBarFormConfig: [
{ {

View File

@ -99,24 +99,23 @@ export default {
prop: 'createTime', prop: 'createTime',
label: '添加时间', label: '添加时间',
fixed: true, fixed: true,
width: 150, width: 180,
filter: timeFilter, filter: timeFilter,
}, },
{ prop: 'maintainOrderNumber', label: '设备保养单号', width: 110, showOverflowtooltip: true }, { prop: 'maintainOrderNumber', label: '设备保养单号' },
{ prop: 'startTime', label: '开始时间', filter: timeFilter, minWidth: 150, showOverflowtooltip: true }, { prop: 'startTime', label: '开始时间', filter: timeFilter },
{ prop: 'endTime', label: '结束时间', filter: timeFilter, minWidth: 150, showOverflowtooltip: true }, { prop: 'endTime', label: '结束时间', filter: timeFilter },
{ prop: 'equipmentName', label: '设备名称', minWidth: 100, showOverflowtooltip: true }, { prop: 'equipmentName', label: '设备名称' },
{ prop: 'maintainWorker', label: '保养人员', minWidth: 100, showOverflowtooltip: true }, { prop: 'maintainWorker', label: '保养人员' },
{ {
prop: 'relatePlan', prop: 'relatePlan',
label: '是否计划保养', label: '是否计划保养',
width: 120,
filter: (v) => (v != null ? ['', '是', '否'][v] : ''), filter: (v) => (v != null ? ['', '是', '否'][v] : ''),
}, },
{ prop: 'planName', label: '保养计划名称', minWidth: 120, showOverflowtooltip: true }, { prop: 'planName', label: '保养计划名称' },
{ prop: 'maintainDuration', label: '计划保养用时(h)', minWidth: 130, showOverflowtooltip: true }, { prop: 'maintainDuration', label: '计划保养用时(h)' },
{ prop: 'timeUsed', label: '实际保养用时(h)', minWidth: 130 }, { prop: 'timeUsed', label: '实际保养用时(h)' },
{ prop: 'remark', label: '备注', minWidth: 100, showOverflowtooltip: true }, { prop: 'remark', label: '备注' },
], ],
searchBarFormConfig: [ searchBarFormConfig: [
{ {
@ -181,6 +180,14 @@ export default {
plain: true, plain: true,
color: 'success', color: 'success',
}, },
{
type: this.$auth.hasPermi('equipment:maintain-record:export')
? 'button'
: '',
btnName: '导出',
name: 'export',
color: 'warning',
},
], ],
rows: [ rows: [
[ [
@ -215,29 +222,17 @@ export default {
}, },
], ],
[ [
// {
// switch: true,
// label: '',
// prop: 'relatePlan',
// bind: {
// 'active-value': 1,
// 'inactive-value': 2,
// },
// rules: [{ required: true, message: '', trigger: 'blur' }],
// },
{ {
select: true, switch: true,
options: [
{ label: '是', value: 1 },
{ label: '否', value: 2 }
],
label: '是否计划保养', label: '是否计划保养',
prop: 'relatePlan', prop: 'relatePlan',
bind: { bind: {
clearable: true, filterable: true 'active-value': 1,
'inactive-value': 2,
}, },
rules: [{ required: true, message: '是否计划保养不能为空', trigger: 'blur' }], rules: [{ required: true, message: '是否计划保养不能为空', trigger: 'blur' }],
}, },
{},
{ {
select: true, select: true,
label: '所属计划', label: '所属计划',
@ -248,11 +243,6 @@ export default {
clearable: true, clearable: true,
}, },
}, },
{
input: true,
label: '保养用时',
prop: 'timeUsed',
},
], ],
[ [
{ {
@ -279,7 +269,11 @@ export default {
clearable: true, clearable: true,
}, },
}, },
{} {
input: true,
label: '保养用时',
prop: 'timeUsed',
},
], ],
[ [

View File

@ -1,180 +1,173 @@
<!--
首页
工单管理
合并请求
里程碑
探索
通知469
创建
个人信息和配置
mt-fe-group / yudao-dev
取消关注
11
点赞
0
派生
0
代码
工单
0
合并请求
0
版本发布
0
百科
动态
559 提交
25 分支
145 MiB
分支: projects/mes-test
yudao-dev/src/views/equipment/base/repair/CustomDialogForm.vue
346
8.9 KiB
原始文件
永久链接
Blame
文件历史
<!--
filename: dialogForm.vue filename: dialogForm.vue
author: liubin author: liubin
date: 2023-10-31 15:55:13 date: 2023-10-31 15:55:13
description: description:
--> -->
<template> <template>
<el-drawer <el-drawer :visible.sync="visible" :show-close="false" :wrapper-closable="disabled" class="drawer"
:visible.sync="visible" custom-class="mes-drawer" size="65%" @closed="$emit('destroy')">
:show-close="false" <small-title slot="title" :no-padding="true">
:wrapper-closable="disabled" {{ disabled ? '查看详情' : !dataForm.maintenanceStatus ? '修改' : '完成' }}
class="drawer" </small-title>
custom-class="mes-drawer" <div class="drawer-body flex">
size="65%" <div class="drawer-body__content">
@closed="$emit('destroy')"> <el-form ref="form" :model="dataForm" label-width="100px" label-position="top" v-loading="formLoading">
<small-title slot="title" :no-padding="true"> <el-row :gutter="20">
{{ disabled ? '查看详情' : !dataForm.maintenanceStatus ? '修改' : '完成' }} <el-col :span="8">
</small-title> <el-form-item label="维修单号" prop="repairOrderNumber">
<div class="drawer-body flex"> <span>{{ dataForm.repairOrderNumber }}</span>
<div class="drawer-body__content"> </el-form-item>
<el-form </el-col>
ref="form" <el-col :span="8">
:model="dataForm" <el-form-item label="设备名称" prop="equipmentName">
label-width="100px" <span>{{ dataForm.equipmentName }}</span>
label-position="top" </el-form-item>
v-loading="formLoading"> </el-col>
<el-row :gutter="20"> <el-col :span="8">
<el-col :span="8"> <el-form-item label="维修工" prop="repairman">
<el-form-item label="维修单号" prop="repairOrderNumber"> <span>{{ dataForm.repairman }}</span>
<span>{{ dataForm.repairOrderNumber }}</span> </el-form-item>
</el-form-item> </el-col>
</el-col> </el-row>
<el-col :span="8"> <el-row :gutter="20">
<el-form-item label="设备名称" prop="equipmentName"> <el-col :span="8">
<span>{{ dataForm.equipmentName }}</span> <el-form-item label="故障发生时间" prop="faultTime">
</el-form-item> <span>{{ parseTime(dataForm.faultTime) }}</span>
</el-col> </el-form-item>
<el-col :span="8"> </el-col>
<el-form-item label="维修工" prop="repairman"> <el-col :span="8">
<span>{{ dataForm.repairman }}</span> <el-form-item label="故障级别" prop="faultLevel">
</el-form-item> <span>{{ getDictDataLabel('fault-level', dataForm.faultLevel) }}</span>
</el-col> </el-form-item>
</el-row> </el-col>
<el-row :gutter="20"> <el-col :span="8">
<el-col :span="8"> <el-form-item label="联系方式" prop="repairmanPhone">
<el-form-item label="故障发生时间" prop="faultTime"> <span>{{ dataForm.repairmanPhone }}</span>
<span>{{ parseTime(dataForm.faultTime) }}</span> </el-form-item>
</el-form-item> </el-col>
</el-col> </el-row>
<el-col :span="8">
<el-form-item label="故障级别" prop="faultLevel">
<span>{{ getDictDataLabel('fault-level', dataForm.faultLevel) }}</span>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="联系方式" prop="repairmanPhone">
<span>{{ dataForm.repairmanPhone }}</span>
</el-form-item>
</el-col>
</el-row>
<el-divider /> <el-divider style="margin-top: -10px" />
<div v-if=" disabled && dataForm.maintenanceStatus === 1 ? true : !disabled ? true : false">
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
{{ '设备维修信息' }}
</small-title>
<el-row :gutter="20">
<el-col :span="6">
<el-form-item
label="维修开始时间"
prop="maintenanceStartTime"
:rules="[{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="dataForm.maintenanceStartTime"
type="datetime"
:disabled="disabled"
placeholder="请选择维修开始时间"
value-format="timestamp" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="维修结束时间"
prop="maintenanceFinishTime"
:rules="[{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="dataForm.maintenanceFinishTime"
type="datetime"
:disabled="disabled"
placeholder="请选择维修开始时间"
value-format="timestamp" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item
label="维修方式"
prop="repairMode"
:rules="[{ required: true, message: '维修方式不能为空', trigger: 'blur' }]">
<el-select
:disabled="disabled"
v-model="dataForm.repairMode"
placeholder="请选择维修方式">
<el-option
v-for="opt in getDictDatas('repair-mode')"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="故障类型" prop="faultType">
<el-select
:disabled="disabled"
v-model="dataForm.faultType"
placeholder="请选择故障类型">
<el-option
v-for="opt in getDictDatas('fault-type')"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20"> <small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
<el-col> {{ '设备维修信息' }}
<el-form-item </small-title>
label="故障明细" <el-row :gutter="20">
prop="faultDetail" <el-col :span="6">
:rules="[{ required: true, message: '故障明细不能为空', trigger: 'blur' }]"> <el-form-item label="维修开始时间" prop="maintenanceStartTime"
<!-- // --> :rules="[{ required: true, message: '维修开始时间不能为空', trigger: 'blur' }]">
<editor v-model="dataForm.faultDetail" :read-only="disabled" :min-height="150"/> <el-date-picker v-model="dataForm.maintenanceStartTime" type="datetime" :disabled="disabled"
</el-form-item> placeholder="请选择维修开始时间" value-format="timestamp" />
</el-col> </el-form-item>
</el-row> </el-col>
<el-col :span="6">
<el-form-item label="维修结束时间" prop="maintenanceFinishTime"
:rules="[{ required: true, message: '维修结束时间不能为空', trigger: 'blur' }]">
<el-date-picker v-model="dataForm.maintenanceFinishTime" type="datetime" :disabled="disabled"
placeholder="请选择维修开始时间" value-format="timestamp" />
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="维修方式" prop="repairMode"
:rules="[{ required: true, message: '维修方式不能为空', trigger: 'blur' }]">
<el-select :disabled="disabled" v-model="dataForm.repairMode" placeholder="请选择维修方式">
<el-option v-for="opt in getDictDatas('repair-mode')" :key="opt.value" :label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="6">
<el-form-item label="故障类型" prop="faultType">
<el-select :disabled="disabled" v-model="dataForm.faultType" placeholder="请选择故障类型">
<el-option v-for="opt in getDictDatas('fault-type')" :key="opt.value" :label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col> <el-col>
<el-form-item label="维修记录" prop="maintenanceDetail"> <el-form-item label="故障明细" prop="faultDetail"
<!-- // --> :rules="[{ required: true, message: '故障明细不能为空', trigger: 'blur' }]">
<editor v-model="dataForm.maintenanceDetail" :read-only="disabled" :min-height="150"/> <!-- // -->
</el-form-item> <editor v-model="dataForm.faultDetail" :read-only="disabled" :min-height="150" />
</el-col> </el-form-item>
</el-row> </el-col>
</el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col> <el-col>
<el-form-item label="维修附件" prop="file"> <el-form-item label="维修记录" prop="maintenanceDetail">
<FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="disabled" @name="setFileName" /> <!-- // -->
</el-form-item> <editor v-model="dataForm.maintenanceDetail" :read-only="disabled" :min-height="150" />
</el-col> </el-form-item>
</el-row> </el-col>
</el-row>
<el-row :gutter="20"> <el-row :gutter="20">
<el-col> <el-col>
<el-form-item label="备注" prop="remark"> <el-form-item label="维修附件" prop="file">
<el-input <FileUpload v-model="file" :limit="1" :f-name="fileName" :disabled="disabled" @name="setFileName" />
v-model="dataForm.remark" </el-form-item>
:placeholder="`请输入备注`" </el-col>
:disabled="disabled" /> </el-row>
</el-form-item>
</el-col>
</el-row>
</div>
</el-form>
<div v-if="!disabled" class="drawer-body__footer"> <el-row :gutter="20">
<el-button style="" @click="goback()">取消</el-button> <el-col>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button> <el-form-item label="备注" prop="remark">
</div> <el-input v-model="dataForm.remark" :placeholder="`请输入备注`" :disabled="disabled" />
</div> </el-form-item>
</div> </el-col>
</el-drawer> </el-row>
</el-form>
<div v-if="!disabled" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
</div>
</div>
</el-drawer>
</template> </template>
<script> <script>
@ -187,102 +180,102 @@ import { parseTime } from '@/utils/ruoyi'
import { getDictDataLabel } from '@/utils/dict'; import { getDictDataLabel } from '@/utils/dict';
export default { export default {
name: 'DialogForm', name: 'DialogForm',
model: { model: {
prop: 'dataForm', prop: 'dataForm',
event: 'update', event: 'update',
}, },
emits: ['update'], emits: ['update'],
components: { SmallTitle, Editor, FileUpload }, components: { SmallTitle, Editor, FileUpload },
props: { props: {
// dataForm: { // dataForm: {
// type: Object, // type: Object,
// default: () => ({}), // default: () => ({}),
// }, // },
// disabled: { // disabled: {
// type: Boolean, // type: Boolean,
// default: false // default: false
// }, // },
}, },
data() { data() {
return { return {
formLoading: true, formLoading: true,
visible: false, visible: false,
disabled: false, disabled: false,
dataForm: {}, dataForm: {},
file: '', file: '',
fileName: '' fileName: ''
}; };
}, },
mounted() {}, mounted() { },
methods: { methods: {
setFileName(val) { setFileName(val) {
this.fileName = val this.fileName = val
}, },
goback() { goback() {
this.$emit('refreshDataList'); this.$emit('refreshDataList');
this.visible = false; this.visible = false;
}, },
goEdit() { goEdit() {
this.disabled = false; this.disabled = false;
}, },
/** 模拟透传 ref */ /** 模拟透传 ref */
validate(cb) { validate(cb) {
return this.$refs.form.validate(cb); return this.$refs.form.validate(cb);
}, },
resetFields(args) { resetFields(args) {
return this.$refs.form.resetFields(args); return this.$refs.form.resetFields(args);
}, },
initData() { initData() {
this.file = '' this.file = ''
this.fileName = '' this.fileName = ''
}, },
init(row, isdetail) { init(row, isdetail) {
this.initData(); this.initData();
this.disabled = isdetail || false; this.disabled = isdetail || false;
this.dataForm.id = row.id || undefined; this.dataForm.id = row.id || undefined;
this.visible = true; this.visible = true;
this.$nextTick(() => { this.$nextTick(() => {
this.$refs['form'].resetFields(); this.$refs['form'].resetFields();
if (this.dataForm.id) { if (this.dataForm.id) {
// //
getEqRepair(this.dataForm.id).then(response => { getEqRepair(this.dataForm.id).then(response => {
this.formLoading = false this.formLoading = false
this.dataForm = response.data; this.dataForm = response.data;
this.dataForm.maintenanceStatus = this.dataForm.maintenanceStatus || 0 this.dataForm.maintenanceStatus = row.maintenanceStatus || 0
if (this.dataForm.files.length > 0) { if (this.dataForm.files.length > 0) {
this.file = this.dataForm.files[0].fileUrl this.file = this.dataForm.files[0].fileUrl
this.fileName = this.dataForm.files[0].fileName this.fileName = this.dataForm.files[0].fileName
} }
}); });
} else { } else {
// if (this.urlOptions.isGetCode) { // if (this.urlOptions.isGetCode) {
// this.getCode() // this.getCode()
// } // }
} }
}); });
}, },
// //
dataFormSubmit() { dataFormSubmit() {
this.$refs["form"].validate((valid) => { this.$refs["form"].validate((valid) => {
if (!valid) { if (!valid) {
return false; return false;
} }
// //
if (this.file) { if (this.file) {
const temp = this.file.split(',') // const temp = this.file.split(',') //
let arry = [] let arry = []
temp.forEach(item => { temp.forEach(item => {
arry.push({ arry.push({
fileName: this.fileName, fileName: this.fileName,
fileType: 2, fileType: 2,
fileUrl: item fileUrl: item
}) })
}) })
this.dataForm.files = arry this.dataForm.files = arry
} }
if (this.dataForm.id) { if (this.dataForm.id) {
updateEqRepair(this.dataForm).then(response => { updateEqRepair(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功"); this.$modal.msgSuccess("修改成功");
@ -299,49 +292,49 @@ export default {
// }); // });
}); });
}, },
}, },
}; };
</script> </script>
<style scoped> <style scoped>
.drawer >>> .el-drawer { .drawer>>>.el-drawer {
border-radius: 8px 0 0 8px; border-radius: 8px 0 0 8px;
} }
.drawer >>> .el-drawer__header { .drawer>>>.el-drawer__header {
margin: 0; margin: 0;
padding: 32px 32px 24px; padding: 32px 32px 24px;
border-bottom: 1px solid #dcdfe6; border-bottom: 1px solid #dcdfe6;
margin-bottom: 0px; margin-bottom: 0px;
} }
.small-title::before { .small-title::before {
content: ''; content: '';
display: inline-block; display: inline-block;
vertical-align: top; vertical-align: top;
width: 4px; width: 4px;
height: 22px; height: 22px;
border-radius: 1px; border-radius: 1px;
margin-right: 8px; margin-right: 8px;
background-color: #0b58ff; background-color: #0b58ff;
} }
.drawer-body { .drawer-body {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
height: 100%; height: 100%;
} }
.drawer-body__content { .drawer-body__content {
flex: 1; flex: 1;
/* background: #eee; */ /* background: #eee; */
padding: 20px 30px; padding: 20px 30px;
overflow-y: auto; overflow-y: auto;
} }
.drawer-body__footer { .drawer-body__footer {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
padding: 18px; padding: 18px;
} }
</style> </style>

View File

@ -17,7 +17,7 @@
v-if="tableBtn.length" v-if="tableBtn.length"
slot="handleBtn" slot="handleBtn"
label="操作" label="操作"
:width="120" :width="180"
:method-list="tableBtn" :method-list="tableBtn"
@clickBtn="handleTableBtnClick" /> @clickBtn="handleTableBtnClick" />
</base-table> </base-table>
@ -48,8 +48,7 @@
<CustomDialogForm <CustomDialogForm
v-if="addOrUpdateVisible" v-if="addOrUpdateVisible"
ref="addOrUpdate" ref="addOrUpdate"
@refreshDataList="getList" @refreshDataList="getList" />
@destroy="addOrUpdateVisible = false" />
</div> </div>
</template> </template>
@ -71,6 +70,12 @@ export default {
addOrUpdateVisible: false, addOrUpdateVisible: false,
searchBarKeys: ['maintenanceStatus', 'createTime', 'equipmentId'], searchBarKeys: ['maintenanceStatus', 'createTime', 'equipmentId'],
tableBtn: [ tableBtn: [
this.$auth.hasPermi('equipment:repair:update')
? {
type: 'detail',
btnName: '详情',
}
: undefined,
this.$auth.hasPermi('equipment:repair:finish') this.$auth.hasPermi('equipment:repair:finish')
? { ? {
type: 'finish', type: 'finish',
@ -79,16 +84,10 @@ export default {
: undefined, : undefined,
this.$auth.hasPermi('equipment:repair:update') this.$auth.hasPermi('equipment:repair:update')
? { ? {
type: 'detail', type: 'edit',
btnName: '详情', btnName: '修改',
} }
: undefined, : undefined,
// this.$auth.hasPermi('equipment:repair:update')
// ? {
// type: 'edit',
// btnName: '',
// }
// : undefined,
this.$auth.hasPermi('equipment:repair:delete') this.$auth.hasPermi('equipment:repair:delete')
? { ? {
type: 'delete', type: 'delete',
@ -101,24 +100,22 @@ export default {
prop: 'createTime', prop: 'createTime',
label: '添加时间', label: '添加时间',
fixed: true, fixed: true,
width: 150, width: 180,
filter: parseTime, filter: parseTime,
}, },
{ prop: 'repairOrderNumber', label: '设备维修单号', minWidth: 100, showOverflowtooltip: true }, { prop: 'repairOrderNumber', label: '设备维修单号' },
{ prop: 'maintenanceStartTime', label: '开始时间', filter: parseTime, minWidth: 150, showOverflowtooltip: true }, { prop: 'maintenanceStartTime', label: '开始时间', filter: parseTime },
{ {
prop: 'maintenanceFinishTime', prop: 'maintenanceFinishTime',
label: '结束时间', label: '结束时间',
filter: parseTime, filter: parseTime,
minWidth: 150,
showOverflowtooltip: true
}, },
{ {
prop: 'maintenanceStatus', prop: 'maintenanceStatus',
label: '维修状态', label: '维修状态',
filter: (v) => (v != null ? ['未完成', '完成', '进行中'][v] : ''), filter: (v) => (v != null ? ['未完成', '完成', '进行中'][v] : ''),
}, },
{ prop: 'maintenanceDuration', label: '维修时长(h)', width: 110 }, { prop: 'maintenanceDuration', label: '维修时长(h)' },
{ prop: 'lineName', label: '产线' }, { prop: 'lineName', label: '产线' },
{ prop: 'sectionName', label: '工段' }, { prop: 'sectionName', label: '工段' },
{ prop: 'equipmentName', label: '设备名称', minWidth: 100, showOverflowtooltip: true }, { prop: 'equipmentName', label: '设备名称', minWidth: 100, showOverflowtooltip: true },

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2021-11-18 14:16:25 * @Date: 2021-11-18 14:16:25
* @LastEditors: zhp * @LastEditors: zhp
* @LastEditTime: 2023-11-28 10:03:20 * @LastEditTime: 2023-12-08 13:59:20
* @Description: * @Description:
--> -->
<template> <template>
@ -11,11 +11,11 @@
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }} {{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
</small-title> </small-title>
<div class="content"> <div class="content">
<div class="visual-part"> <!-- <div class="visual-part"> -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
label-width="100px" label-position="top"> label-width="100px" label-position="top">
<el-row :gutter="20"> <el-row :gutter="24">
<el-col :span="12"> <el-col :span="8">
<el-form-item label="设备名称" prop="equipmentId"> <el-form-item label="设备名称" prop="equipmentId">
<el-select v-model="dataForm.equipmentId" filterable :disabled="isdetail" style="width: 100%" <el-select v-model="dataForm.equipmentId" filterable :disabled="isdetail" style="width: 100%"
@change="getCode" placeholder="请选择设备名称"> @change="getCode" placeholder="请选择设备名称">
@ -23,44 +23,39 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="8">
<el-form-item label="设备编码" prop="equipmentCode"> <el-form-item label="设备编码" prop="equipmentCode">
<el-input v-model="dataForm.equipmentCode" clearable :disabled="isdetail" placeholder="请输入设备编码" /> <el-input v-model="dataForm.equipmentCode" clearable :disabled="isdetail" placeholder="请输入设备编码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="8">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="设备Bom编码" prop="code"> <el-form-item label="设备Bom编码" prop="code">
<el-input v-model="dataForm.code" clearable :disabled="isdetail" placeholder="请输入设备Bom编码" /> <el-input v-model="dataForm.code" clearable :disabled="isdetail" placeholder="请输入设备Bom编码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> </el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="设备物料BOM名称" prop="name"> <el-form-item label="设备物料BOM名称" prop="name">
<el-input v-model="dataForm.name" clearable :disabled="isdetail" placeholder="请输入设备物料BOM名称" /> <el-input v-model="dataForm.name" clearable :disabled="isdetail" placeholder="请输入设备物料BOM名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="8">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="当前状态" prop="enabled"> <el-form-item label="当前状态" prop="enabled">
<el-switch v-model="dataForm.enabled" :active-value="1" :inactive-value="0" /> <el-select v-model="dataForm.enabled" filterable :disabled="isdetail" style="width: 100%"
placeholder="请选择当前状态">
<el-option v-for="dict in enableList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" :disabled="isdetail" clearable placeholder="请输入备注" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" :disabled="isdetail" clearable placeholder="请输入备注" />
</el-form-item>
</el-form> </el-form>
</div> <!-- </div> -->
<div v-if="!isdetail" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button v-if="isdetail" type="primary" @click="goEdit()">
编辑
</el-button>
<el-button v-else type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<div class="attr-list" v-if="idAttrShow"> <div class="attr-list" v-if="idAttrShow">
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true"> <small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
设备物料明细 设备物料明细
@ -80,14 +75,12 @@
</base-table> </base-table>
<pagination v-show="listQuery.total > 0" :total="listQuery.total" :page.sync="listQuery.pageNo" <pagination v-show="listQuery.total > 0" :total="listQuery.total" :page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize" :page-sizes="[5, 10, 15]" @pagination="getList" /> :limit.sync="listQuery.pageSize" :page-sizes="[5, 10, 15]" @pagination="getList" />
<div class="drawer-body__footer">
<el-button type="primary" @click="goback()">关闭</el-button>
</div>
</div> </div>
</div> </div>
<div class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<attr-add v-if="addOrUpdateVisible" ref="addOrUpdate" :product-id="dataForm.id" @refreshDataList="getList" /> <attr-add v-if="addOrUpdateVisible" ref="addOrUpdate" :product-id="dataForm.id" @refreshDataList="getList" />
</el-drawer> </el-drawer>
</template> </template>
@ -200,6 +193,29 @@ export default {
mounted() { mounted() {
}, },
methods: { methods: {
dataFormSubmit() {
this.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
//
if (this.dataForm.id) {
this.urlOptions.updateURL(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.visible = false;
this.$emit("refreshDataList");
});
return;
}
//
this.urlOptions.createURL(this.dataForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.idAttrShow = true;
this.dataForm.id = res.data
this.$emit("refreshDataList");
});
});
},
getCode(val) { getCode(val) {
this.equipmentList.forEach((ele) => { this.equipmentList.forEach((ele) => {
if (val === ele.id) { if (val === ele.id) {
@ -232,8 +248,8 @@ export default {
this.$confirm( this.$confirm(
`确定对${ `确定对${
raw.data.materialName raw.data.materialName
? '[物料名为' + raw.data.materialName + ']' ? '[物料名为' + raw.data.materialName + ']'
: '[序号为' + raw.data.materialName + ']' : '[序号为' + raw.data.id + ']'
}进行删除操作?`, }进行删除操作?`,
'提示', '提示',
{ {
@ -374,7 +390,7 @@ export default {
} }
.action_btn { .action_btn {
float: right; float: right;
margin: 5px 15px; margin: -40px 15px;
font-size: 14px; font-size: 14px;
} }
.add { .add {

View File

@ -1,13 +1,8 @@
<!-- <!--
* @Author: zwq * @Author: zwq
* @Date: 2021-11-18 14:16:25 * @Date: 2021-11-18 14:16:25
<<<<<<< HEAD
* @LastEditors: zhp * @LastEditors: zhp
* @LastEditTime: 2023-11-28 10:09:20 * @LastEditTime: 2023-12-08 13:59:10
=======
* @LastEditors: DY
* @LastEditTime: 2023-11-27 16:37:17
>>>>>>> projects/mes-test
* @Description: * @Description:
--> -->
<template> <template>
@ -16,11 +11,11 @@
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }} {{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
</small-title> </small-title>
<div class="content"> <div class="content">
<div class="visual-part"> <!-- <div class="visual-part"> -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()" <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
label-width="100px" label-position="top"> label-width="100px" label-position="top">
<el-row :gutter="20"> <el-row :gutter="24">
<el-col :span="12"> <el-col :span="8">
<el-form-item label="设备名称" prop="equipmentId"> <el-form-item label="设备名称" prop="equipmentId">
<el-select v-model="dataForm.equipmentId" filterable :disabled="isdetail" style="width: 100%" <el-select v-model="dataForm.equipmentId" filterable :disabled="isdetail" style="width: 100%"
@change="getCode" placeholder="请选择设备名称"> @change="getCode" placeholder="请选择设备名称">
@ -28,43 +23,44 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="8">
<el-form-item label="设备编码" prop="equipmentCode"> <el-form-item label="设备编码" prop="equipmentCode">
<el-input v-model="dataForm.equipmentCode" clearable :disabled="isdetail" placeholder="请输入设备编码" /> <el-input v-model="dataForm.equipmentCode" clearable :disabled="isdetail" placeholder="请输入设备编码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="8">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="参数Bom编码" prop="code"> <el-form-item label="参数Bom编码" prop="code">
<el-input v-model="dataForm.code" clearable :disabled="isdetail" placeholder="请输入参数Bom编码" /> <el-input v-model="dataForm.code" clearable :disabled="isdetail" placeholder="请输入参数Bom编码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> </el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="设备参数BOM名称" prop="name"> <el-form-item label="设备参数BOM名称" prop="name">
<el-input v-model="dataForm.name" clearable :disabled="isdetail" placeholder="请输入设备参数BOM名称" /> <el-input v-model="dataForm.name" clearable :disabled="isdetail" placeholder="请输入设备参数BOM名称" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> <el-col :span="8">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="当前状态" prop="enabled"> <el-form-item label="当前状态" prop="enabled">
<el-switch v-model="dataForm.enabled" :active-value="1" :inactive-value="0" /> <!-- <el-switch v-model="dataForm.enabled" :active-value="1" :inactive-value="0" /> -->
<el-select v-model="dataForm.enabled" filterable :disabled="isdetail" style="width: 100%"
placeholder="请选择当前状态">
<el-option v-for="dict in enableList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" :disabled="isdetail" clearable placeholder="请输入备注" />
</el-form-item> </el-form-item>
</el-col> </el-col>
</el-row> </el-row>
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" :disabled="isdetail" clearable placeholder="请输入备注" />
</el-form-item>
</el-form> </el-form>
</div> <!-- </div> -->
<div v-if="!isdetail" class="drawer-body__footer"> <!-- <div v-if="!isdetail" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button v-if="isdetail" type="primary" @click="goEdit()"> </div> -->
编辑
</el-button>
<el-button v-else type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<div class="attr-list" v-if="idAttrShow"> <div class="attr-list" v-if="idAttrShow">
<small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true"> <small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
@ -85,14 +81,12 @@
</base-table> </base-table>
<pagination v-show="listQuery.total > 0" :total="listQuery.total" :page.sync="listQuery.pageNo" <pagination v-show="listQuery.total > 0" :total="listQuery.total" :page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize" :page-sizes="[5, 10, 15]" @pagination="getList" /> :limit.sync="listQuery.pageSize" :page-sizes="[5, 10, 15]" @pagination="getList" />
<div class="drawer-body__footer">
<el-button type="primary" @click="goback()">关闭</el-button>
</div>
</div> </div>
</div> </div>
<div v-if="!isdetail" class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<attr-add v-if="addOrUpdateVisible" ref="addOrUpdate" :product-id="dataForm.id" @refreshDataList="getList" /> <attr-add v-if="addOrUpdateVisible" ref="addOrUpdate" :product-id="dataForm.id" @refreshDataList="getList" />
</el-drawer> </el-drawer>
</template> </template>
@ -173,7 +167,17 @@ export default {
tableBtn, tableBtn,
tableProps, tableProps,
topBtnConfig, topBtnConfig,
addOrUpdateVisible: false, addOrUpdateVisible: false,
enableList: [
{
id: 0,
name: '停用'
},
{
id: 1,
name:'启用'
}
],
urlOptions: { urlOptions: {
isGetCode: false, isGetCode: false,
// codeURL: getCode, // codeURL: getCode,
@ -248,8 +252,8 @@ export default {
this.$confirm( this.$confirm(
`确定对${ `确定对${
raw.data.valueName raw.data.valueName
? '[物料名称为' + raw.data.valueName + ']' ? '[参数名为' + raw.data.valueName + ']'
: '[序号为' + raw.data.valueName + ']' : '[序号为' + raw.data.id + ']'
}进行删除操作?`, }进行删除操作?`,
'提示', '提示',
{ {
@ -274,7 +278,30 @@ export default {
} else { } else {
this.addNew(raw.data.id); this.addNew(raw.data.id);
} }
}, },
dataFormSubmit() {
this.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
//
if (this.dataForm.id) {
this.urlOptions.updateURL(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.visible = false;
this.$emit("refreshDataList");
});
return;
}
//
this.urlOptions.createURL(this.dataForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.idAttrShow = true;
this.dataForm.id = res.data
this.$emit("refreshDataList");
});
});
},
getList() { getList() {
// //
processEquValueBomDetPage({ processEquValueBomDetPage({
@ -389,12 +416,13 @@ export default {
justify-content: flex-end; justify-content: flex-end;
padding: 18px; padding: 18px;
} }
.action_btn {
float: right;
margin: 5px 15px;
font-size: 14px;
}
.add { .add {
color: #0b58ff; color: #0b58ff;
} }
.action_btn {
float: right;
margin: -40px 15px;
font-size: 14px;
}
</style> </style>

View File

@ -1,7 +1,7 @@
<!-- <!--
* @Author: zhp * @Author: zhp
* @Date: 2023-11-08 15:30:27 * @Date: 2023-11-08 15:30:27
* @LastEditTime: 2023-11-28 10:11:40 * @LastEditTime: 2023-12-04 15:19:33
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
--> -->
@ -15,36 +15,40 @@
</slot> </slot>
</template> </template>
<el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px" <el-form ref="dataForm" :model="dataForm" :rules="dataRule" label-width="100px" label-position="top"
@keyup.enter.native="dataFormSubmit()"> @keyup.enter.native="dataFormSubmit()">
<el-form-item label="参数名称" prop="paramId"> <el-row :gutter="24">
<el-select v-model="dataForm.paramId" filterable placeholder="参数名称" @change="getData" multiple > <el-col :span="8">
<el-option v-for="dict in materialList" :key=" dict.id" :label="dict.name" :value="dict.id" /> <el-form-item label="参数名称" prop="paramId">
</el-select> <el-select v-model="dataForm.paramId" filterable placeholder="参数名称" @change="getData" multiple>
</el-form-item> <el-option v-for="dict in materialList" :key=" dict.id" :label="dict.name" :value="dict.id" />
<!-- <el-form-item label="参数编码" prop="code"> </el-select>
<el-input v-model="dataForm.code" placeholder="请输入参数编码" clearable /> </el-form-item>
</el-form-item> --> </el-col>
<!-- <el-form-item label="标准最小值" prop="standardMinValue"> <el-col :span="8">
<el-input v-model="dataForm.standardMinValue" placeholder="请输入标准最小值" clearable /> <el-form-item label="工艺最小值" prop="minValue">
</el-form-item> <el-input v-model="dataForm.minValue" placeholder="请输入工艺最小值" clearable />
<el-form-item label="标准最大值" prop="standardMaxValue"> </el-form-item>
<el-input v-model="dataForm.standardMaxValue" placeholder="请输入标准最大值" clearable /> </el-col>
</el-form-item> --> <el-col :span="8">
<el-form-item label="工艺最小值" prop="minValue"> <el-form-item label="工艺最大值" prop="maxValue">
<el-input v-model="dataForm.minValue" placeholder="请输入工艺最小值" clearable /> <el-input v-model="dataForm.maxValue" placeholder="请输入工艺最大值" clearable />
</el-form-item> </el-form-item>
<el-form-item label="工艺最大值" prop="maxValue"> </el-col>
<el-input v-model="dataForm.maxValue" placeholder="请输入工艺最大值" clearable /> </el-row>
</el-form-item> <el-row :gutter="24">
<el-form-item label="工艺标准值" prop="defaultValue"> <el-col :span="8">
<el-input v-model="dataForm.defaultValue" placeholder="请输入工艺标准值" clearable /> <el-form-item label="工艺标准值" prop="defaultValue">
</el-form-item> <el-input v-model="dataForm.defaultValue" placeholder="请输入工艺标准值" clearable />
<el-form-item label="备注" prop="remark"> </el-form-item>
<el-input v-model="dataForm.remark" placeholder="请输入备注" clearable /> </el-col>
</el-form-item> <el-col :span="8">
<el-form-item label="备注" prop="remark">
<el-input v-model="dataForm.remark" placeholder="请输入备注" clearable />
</el-form-item>
</el-col>
</el-row>
</el-form> </el-form>
<el-row style="text-align: right"> <el-row style="text-align: right">
<el-button @click="visible = false">取消</el-button> <el-button @click="visible = false">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button> <el-button type="primary" @click="dataFormSubmit()">确定</el-button>

View File

@ -6,7 +6,7 @@
--> -->
<template> <template>
<el-form ref="form" :model="dataForm" label-width="120px" v-loading="formLoading"> <el-form ref="dataForm" :model="dataForm" label-width="120px" v-loading="formLoading" label-position="top">
<el-row :gutter="20"> <el-row :gutter="20">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="产线" prop="productionLineId" <el-form-item label="产线" prop="productionLineId"
@ -24,8 +24,22 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24">
<el-col :span="12"> <el-form-item label="检测内容" prop="inspectionDetIdList"
:rules="[{ required: true, message: '不能为空', trigger: 'change' }]">
<div class="itemDet" v-for="item in inspectionDetList" :key="item.typeId" style="padding: 0 20px;">
<div>{{ item.typeName}} </div>
<!-- <div>{{ item.data }} </div> -->
<div class="content">
<el-checkbox-group v-model="dataForm.inspectionDetIdList" @change="handleCheckedCitiesChange">
<el-checkbox v-for="i in item.data" :key="i.content" :label="i.detId">{{ i.content }}
</el-checkbox>
</el-checkbox-group>
</div>
</div>
</el-form-item>
</el-col>
<!-- <el-col :span="12">
<el-form-item label="按钮盒识别码" prop="buttonId" :rules="[ <el-form-item label="按钮盒识别码" prop="buttonId" :rules="[
{ required: true, message: '不能为空', trigger: 'blur' }, { required: true, message: '不能为空', trigger: 'blur' },
{ {
@ -37,70 +51,7 @@
]"> ]">
<el-input v-model="dataForm.buttonId" @change="$emit('update', dataForm)" placeholder="请输入整数" /> <el-input v-model="dataForm.buttonId" @change="$emit('update', dataForm)" placeholder="请输入整数" />
</el-form-item> </el-form-item>
<el-form-item </el-col>
label="产线"
prop="productionLineId"
:rules="[
{ required: true, message: '产线不能为空', trigger: 'blur' },
]">
<el-select
v-model="dataForm.productionLineId"
placeholder="请选择产线"
filterable
@change="handleProductlineChange">
<el-option
v-for="opt in productionLineList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="工段"
prop="sectionId"
:rules="[
{ required: true, message: '工段不能为空', trigger: 'blur' },
]">
<el-select
v-model="dataForm.sectionId"
placeholder="请选择工段"
filterable
@change="$emit('update', dataForm)">
<el-option
v-for="opt in workshopSectionList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="按钮盒识别码"
prop="buttonId"
:rules="[
{
required: true,
message: '按钮盒识别码不能为空',
trigger: 'blur',
},
{
type: 'number',
message: '请输入整数',
trigger: 'blur',
transform: (val) => Number.isInteger(Number(val)) && Number(val),
},
]">
<el-input
v-model="dataForm.buttonId"
@change="$emit('update', dataForm)"
placeholder="请输入整数" />
</el-form-item>
</el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="按钮值" prop="keyValue" :rules="[ <el-form-item label="按钮值" prop="keyValue" :rules="[
{ required: true, message: '不能为空', trigger: 'blur' }, { required: true, message: '不能为空', trigger: 'blur' },
@ -121,34 +72,43 @@
</el-col> </el-col>
<el-col :span="12"> <el-col :span="12">
<el-form-item label="检测内容" prop="inspectionDetId"> <el-form-item label="检测内容" prop="inspectionDetContent"
<el-select v-model="dataForm.inspectionDetId" placeholder="请选择检测内容" filterable :rules="[{ required: true, message: '不能为空', trigger: 'change' }]">
<el-select v-model="dataForm.inspectionDetContent" placeholder="请选择检测内容" filterable
@change="$emit('update', dataForm)"> @change="$emit('update', dataForm)">
<el-option v-for="opt in inspectionDetList" :key="opt.value" :label="opt.label" :value="opt.value" /> <el-option v-for="opt in inspectionDetList" :key="opt.value" :label="opt.label" :value="opt.value" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-col> </el-col> -->
</el-row> </el-row>
</el-form> </el-form>
</template> </template>
<script> <script>
import basicAdd from '../../mixins/basic-add';
import {
createQualityInspectionBoxBtn,
updateQualityInspectionBoxBtn,
getQualityInspectionBoxBtn,
getListByLineSection
} from '@/api/base/qualityInspectionBoxBtn';
export default { export default {
name: 'DialogForm', mixins: [basicAdd],
model: {
prop: 'dataForm',
event: 'update',
},
emits: ['update'],
components: {},
props: {
dataForm: {
type: Object,
default: () => ({}),
},
},
data() { data() {
return { return {
urlOptions: {
// isGetCode: false,
// codeURL: getCode,
createURL: createQualityInspectionBoxBtn,
updateURL: updateQualityInspectionBoxBtn,
infoURL: getQualityInspectionBoxBtn,
},
dataForm: {
// id: null,
sectionId: null,
productionLineId: null,
inspectionDetIdList:[],
},
formLoading: true, formLoading: true,
productionLineList: [], productionLineList: [],
inspectionDetList:[], inspectionDetList:[],
@ -158,6 +118,7 @@ export default {
mounted() { mounted() {
this.getProductionLineList() this.getProductionLineList()
this.getQualityInspectionDetList() this.getQualityInspectionDetList()
// this.getList()
// this.getWorksectionList(); // this.getWorksectionList();
// this.getCode('/base/equipment-group-alarm/getCode').then((code) => { // this.getCode('/base/equipment-group-alarm/getCode').then((code) => {
// this.formLoading = false; // this.formLoading = false;
@ -170,13 +131,56 @@ export default {
watch: { watch: {
'dataForm.productionId': { 'dataForm.productionId': {
handler(id) { handler(id) {
if (id != null) this.getWorksectionList(id); if (id != null) this.getWorksectionList(id)
}, },
immediate: true, immediate: true
}, },
}, },
methods: { methods: {
/** 模拟透传 ref */ init(obj) {
// console.log(productionLineId);
console.log(obj);
this.visible = true;
// if(obj.id)
this.dataForm.id = obj.id ? obj.id : ""
this.$nextTick(() => {
this.$refs["dataForm"].resetFields()
if (obj) {
getListByLineSection({
productionLineId: obj.productionLineId,
sectionId: obj.sectionId,
}).then((res) => {
console.log(res);
this.dataForm.inspectionDetIdList = res.data
})
}
if (this.dataForm.id) {
this.urlOptions.infoURL(obj.id).then(response => {
this.dataForm.id = response.data.id
this.dataForm.productionLineId = response.data.productionLineId
this.dataForm.sectionId = response.data.sectionId
// if (this.setData) {
// this.setDataForm()
// }
});
} else {
// if (this.urlOptions.isGetCode) {
// this.getCode()
// }
}
});
},
/** 模拟透传 ref */
handleCheckedCitiesChange(value) {
;console.log(value);
// let checkedCount = value.length;
// this.checkAll = checkedCount === this.cities.length;
// this.isIndeterminate = checkedCount > 0 && checkedCount < this.cities.length;
},
// getList() {
// console.log(this.dataForm.sectionId);
// },
validate(cb) { validate(cb) {
return this.$refs.form.validate(cb); return this.$refs.form.validate(cb);
}, },
@ -200,14 +204,34 @@ export default {
async getQualityInspectionDetList() { async getQualityInspectionDetList() {
this.formLoading = true; this.formLoading = true;
const res = await this.$axios({ const res = await this.$axios({
url: '/base/quality-inspection-det/listAll', url: '/base/quality-inspection-det/inspectionMap',
method: 'get', method: 'get',
}); });
if (res.code == 0) { if (res.code == 0) {
this.inspectionDetList = res.data.map((item) => ({ console.log(res)
label: item.content, let arr = []
value: item.id, for (let i in res.data) {
})); let obj = {
typeName: res.data[i].length !== 0 ? res.data[i][0].typeName : '',
typeId: res.data[i].length !== 0 ? res.data[i][0].typeId : '',
data:[]
}
let detArr = []
res.data[i].forEach(ele => {
detArr.push({
detId: ele.id,
content: ele.content
})
})
obj.data = detArr
arr.push(obj)
}
this.inspectionDetList = arr
console.log(this.inspectionDetList);
// this.inspectionDetList = res.data.map((item) => ({
// label: item.content,
// value: item.content,
// }));
} }
this.formLoading = false; this.formLoading = false;
}, },

View File

@ -1,47 +1,24 @@
<template> <template>
<div class="app-container"> <div class="app-container">
<!-- 搜索工作栏 --> <!-- 搜索工作栏 -->
<SearchBar <SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" @headBtnClick="buttonClick" />
:formConfigs="searchBarFormConfig"
ref="search-bar"
@headBtnClick="handleSearchBarBtnClick" />
<!-- 列表 --> <!-- 列表 -->
<base-table <base-table :table-props="tableProps" :page="listQuery.pageNo" :limit="listQuery.pageSize" :table-data="tableData">
:table-props="tableProps" <method-btn v-if="tableBtn.length" slot="handleBtn" label="操作" :width="120" fixed="right" :method-list="tableBtn"
:page="queryParams.pageNo" @clickBtn="handleClick" />
:limit="queryParams.pageSize" </base-table>
:table-data="list"
@emitFun="handleEmitFun">
<method-btn
v-if="tableBtn.length"
slot="handleBtn"
label="操作"
:width="120"
fixed="right"
:method-list="tableBtn"
@clickBtn="handleTableBtnClick" />
</base-table>
<!-- 分页组件 --> <!-- 分页组件 -->
<pagination <pagination :limit.sync="listQuery.pageSize" :page.sync="listQuery.pageNo" :total="listQuery.total"
v-show="total > 0" @pagination="getDataList" />
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" />
<!-- 对话框(添加 / 修改) --> <!-- 对话框(添加 / 修改) -->
<base-dialog <base-dialog :dialogTitle="addOrEditTitle" :dialogVisible="addOrUpdateVisible" width="50%" @cancel="handleCancel"
:dialogTitle="title" @confirm="handleConfirm" :before-close="handleCancel">
:dialogVisible="open" <add-or-update ref="addOrUpdate" @refreshDataList="successSubmit"></add-or-update>
width="50%" </base-dialog>
@close="cancel" </div>
@cancel="cancel"
@confirm="submitForm">
<DialogForm v-if="open" ref="form" v-model="form" :rows="rows" />
</base-dialog>
</div>
</template> </template>
<script> <script>
@ -53,84 +30,21 @@ import {
getQualityInspectionBoxBtnPage, getQualityInspectionBoxBtnPage,
exportQualityInspectionBoxBtnExcel, exportQualityInspectionBoxBtnExcel,
} from '@/api/base/qualityInspectionBoxBtn'; } from '@/api/base/qualityInspectionBoxBtn';
import basicPageMixin from '@/mixins/lb/basicPageMixin'; import basicPage from '../../mixins/basic-page';
import moment from 'moment'; import moment from 'moment';
import DialogForm from './dialogForm.vue'; import addOrUpdate from './dialogForm.vue';
export default { export default {
name: 'QualityInspectionBoxBtn', name: 'QualityInspectionBoxBtn',
mixins: [basicPageMixin], mixins: [basicPage],
components: { DialogForm }, components: { addOrUpdate },
data() { data() {
return { return {
rows: [ urlOptions: {
[ getDataListURL: getQualityInspectionBoxBtnPage,
{ deleteURL: deleteQualityInspectionBoxBtn,
select: true, // exportURL: exportFactoryExcel,
label: '产线', },
url: '/base/production-line/listAll',
prop: 'productionId',
rules: [{ required: true, message: '产线不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
},
{
select: true,
label: '工段',
url: '/base/workshop-section/listAll',
prop: 'sectionId',
rules: [{ required: true, message: '工段不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
},
],
[
{
input: true,
label: '按钮盒识别码',
prop: 'buttonId',
rules: [
{
type: 'number',
message: '请输入整数',
trigger: 'blur',
transform: (val) =>
Number.isInteger(Number(val)) && Number(val),
},
],
},
{ input: true, label: '按钮盒模式', prop: 'model' },
],
[
{
input: true,
label: '按钮值',
prop: 'keyValue',
rules: [
{
type: 'number',
message: '请输入100以内的整数',
trigger: 'blur',
transform: (val) =>
Number(val) <= 100 && Number.isInteger(+val) && Number(val),
},
],
bind: { type: 'number', min: 0, max: 100 },
},
{
select: true,
label: '检测内容',
url: '/base/quality-inspection-det/listAll',
prop: 'inspectionDetId',
rules: [{ required: true, message: '不能为空', trigger: 'blur' }],
bind: {
filterable: true,
},
},
],
],
searchBarFormConfig: [ searchBarFormConfig: [
{ {
type: 'input', type: 'input',
@ -170,15 +84,17 @@ export default {
btnName: '删除', btnName: '删除',
} }
: undefined, : undefined,
].filter((v) => v), ].filter((v) => v),
tableData: [],
tableProps: [ tableProps: [
{ // {
prop: 'createTime', // prop: 'createTime',
label: '添加时间', // label: '',
fixed: true, // fixed: true,
width: 180, // width: 180,
filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'), // filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
}, // },
{ {
prop: 'productionLineName', prop: 'productionLineName',
label: '产线', label: '产线',
@ -190,39 +106,22 @@ export default {
{ {
prop: 'inspectionDetContent', prop: 'inspectionDetContent',
label: '检测内容', label: '检测内容',
}, }
{
width: 160,
prop: 'buttonId',
label: '按钮盒识别码',
},
// {
// width: 256,
// prop: 'productionId',
// label: '线ID',
// ,
// },
// {
// width: 256,
// prop: 'sectionId',
// label: 'ID',
// ,
// },
{ width: 90, prop: 'keyValue', label: '按钮值' },
{ width: 128, prop: 'model', label: '按钮盒模式' },
], ],
// //
queryParams: { listQuery: {
pageNo: 1, pageNo: 1,
pageSize: 10, pageSize: 10,
inspectionDetContent: null, inspectionDetContent: null,
}, },
// keys, queryParams pageNo, pageSize key addOrUpdateVisible: false,
addOrEditTitle:'',
// keys, listQuery pageNo, pageSize key
searchBarKeys: ['inspectionDetContent'], searchBarKeys: ['inspectionDetContent'],
form: { form: {
id: null, id: null,
buttonId: null, buttonId: null,
inspectionDetId: null, inspectionDetContent: [],
productionLineId: null, productionLineId: null,
sectionId: null, sectionId: null,
model: null, model: null,
@ -231,19 +130,19 @@ export default {
}; };
}, },
created() { created() {
this.getList(); // this.getList();
}, },
methods: { methods: {
/** 查询列表 */ /** 查询列表 */
getList() { // getList() {
this.loading = true; // this.loading = true;
// // //
getQualityInspectionBoxBtnPage(this.queryParams).then((response) => { // getQualityInspectionBoxBtnPage(this.listQuery).then((response) => {
this.list = response.data.list; // this.list = response.data.list;
this.total = response.data.total; // this.total = response.data.total;
this.loading = false; // this.loading = false;
}); // });
}, // },
/** 表单重置 */ /** 表单重置 */
reset() { reset() {
this.form = { this.form = {
@ -256,78 +155,28 @@ export default {
keyValue: null, keyValue: null,
}; };
this.resetForm('form'); this.resetForm('form');
}, },
/** 新增按钮操作 */ buttonClick(val) {
handleAdd() { switch (val.btnName) {
this.reset(); case 'search':
this.open = true; this.listQuery.pageNo = 1;
this.title = '添加安灯按钮16键对应'; this.listQuery.pageSize = 10;
}, this.listQuery.inspectionDetContent = val.inspectionDetContent ? val.inspectionDetContent : undefined;
/** 修改按钮操作 */ // this.listQuery.teamId = val.teamId ? val.teamId : undefined;
handleUpdate(row) { this.getDataList()
this.reset(); break;
const id = row.id; case 'add':
getQualityInspectionBoxBtn(id).then((response) => { this.addOrEditTitle = '新增';
this.form = response.data; this.addOrUpdateVisible = true;
this.open = true; this.addOrUpdateHandle();
this.title = '修改安灯按钮16键对应'; break;
}); case 'export':
}, this.handleExport();
/** 提交按钮 */ break;
submitForm() { default:
this.$refs['form'].validate((valid) => { console.log(val);
if (!valid) { }
return; },
}
//
if (this.form.id != null) {
updateQualityInspectionBoxBtn(this.form).then((response) => {
this.$modal.msgSuccess('修改成功');
this.open = false;
this.getList();
});
return;
}
//
createQualityInspectionBoxBtn(this.form).then((response) => {
this.$modal.msgSuccess('新增成功');
this.open = false;
this.getList();
});
});
},
/** 删除按钮操作 */
handleDelete(row) {
const id = row.id;
this.$modal
.confirm('是否确认删除"' + row.sectionName + '"?')
.then(function () {
return deleteQualityInspectionBoxBtn(id);
})
.then(() => {
this.getList();
this.$modal.msgSuccess('删除成功');
})
.catch(() => {});
},
/** 导出按钮操作 */
handleExport() {
//
let params = { ...this.queryParams };
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal
.confirm('是否确认导出所有安灯按钮16键对应数据项?')
.then(() => {
this.exportLoading = true;
return exportQualityInspectionBoxBtnExcel(params);
})
.then((response) => {
this.$download.excel(response, '安灯按钮16键对应.xls');
this.exportLoading = false;
})
.catch(() => {});
},
}, },
}; };
</script> </script>

View File

@ -0,0 +1,100 @@
/*
* @Author: zwq
* @Date: 2022-08-24 11:19:43
* @LastEditors: zhp
* @LastEditTime: 2023-12-13 15:57:27
* @Description:
*/
export default {
data() {
/* eslint-disable */
return {
urlOptions: {
createURL: '',
updateURL: '',
infoURL: '',
codeURL: '',
getOption: false,
isGetCode: false,
optionArrUrl: [],
optionArr: {}
},
visible: false,
setData: false
}
},
created() {
},
activated() {
},
methods: {
init(id) {
this.dataForm.id = id || "";
this.visible = true;
if (this.urlOptions.getOption) {
this.getArr()
}
this.$nextTick(() => {
this.$refs["dataForm"].resetFields();
if (this.dataForm.id) {
this.urlOptions.infoURL(id).then(response => {
this.dataForm = response.data
if (this.setData) {
this.setDataForm()
}
});
} else {
if (this.urlOptions.isGetCode) {
this.getCode()
}
}
});
},
getCode() {
this.urlOptions.codeURL()
.then(({ data: res }) => {
this.dataForm.code = res;
})
.catch(() => {});
},
getArr() {
const params = {
pageSize: 100,
pageNo: 1,
}
this.urlOptions.optionArrUrl.forEach((item, index) => {
item(params).then(({ data: res }) => {
this.$set(this.urlOptions.optionArr, `arr${index}`, res.list)
})
.catch(() => {
});
});
},
// 表单提交
dataFormSubmit() {
this.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
// 修改的提交
if (this.dataForm.id) {
this.urlOptions.updateURL(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.visible = false;
this.$emit("refreshDataList");
});
return;
}
// 添加的提交
this.urlOptions.createURL(this.dataForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.visible = false;
this.$emit("refreshDataList");
});
});
},
formClear() {
this.$refs.dataForm.resetFields()
}
}
}

View File

@ -0,0 +1,168 @@
/*
* @Author: zwq
* @Date: 2022-08-24 11:19:43
* @LastEditors: zhp
* @LastEditTime: 2023-12-13 16:19:04
* @Description:
*/
export default {
data() {
/* eslint-disable */
return {
urlOptions: {
getDataListURL: '',
deleteURL: '',
statusUrl: '',
exportURL: ''
},
tableData: [],
listQuery: {
pageSize: 10,
pageNo: 1,
total: 1,
},
exportLoading: false,
dataListLoading: false,
addOrEditTitle: '',
addOrUpdateVisible: false,
}
},
created() {
},
mounted() {
this.getDataList()
},
methods: {
// 获取数据列表
getDataList() {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then(response => {
this.tableData = response.data.list;
this.listQuery.total = response.data.total;
this.dataListLoading = false;
});
},
// 每页数
sizeChangeHandle(val) {
this.listQuery.pageSize = val;
this.listQuery.pageNo = 1;
this.getDataList();
},
// 当前页
currentChangeHandle(val) {
this.listQuery.pageNo = val;
this.getDataList();
},
// 新增 / 修改
addOrUpdateHandle(id) {
this.addOrUpdateVisible = true;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id);
});
},
cancel(id) {
this.$refs["popover-" + id].showPopper = false;
},
//改变状态
changeStatus(id) {
this.$http
.post(this.urlOptions.statusUrl, { id })
.then(({ data: res }) => {
if (res.code !== 0) {
return this.$message.error(res.msg);
}
this.$refs["popover-" + id].showPopper = false;
this.$message({
message: this.$t("prompt.success"),
type: "success",
duration: 500,
onClose: () => {
this.getDataList();
},
});
})
.catch(() => { });
},
//tableBtn点击
handleClick(val) {
if (val.type === "edit") {
this.addOrUpdateVisible = true;
this.addOrEditTitle = "编辑";
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data);
});
} else if (val.type === "delete") {
this.deleteHandle(val.data.id, val.data.name, val.data._pageIndex)
} else if (val.type === "change") {
this.changeStatus(val.data.id)
} else {
this.otherMethods(val)
}
},
// 删除
deleteHandle(id, name, index) {
this.$confirm(`确定对${name ? '[名称=' + name + ']' : '[序号=' + index + ']'}进行删除操作?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.urlOptions.deleteURL(id).then(({ data }) => {
this.$message({
message: "操作成功",
type: "success",
duration: 1500,
onClose: () => {
this.getDataList();
},
});
});
})
.catch(() => { });
},
//search-bar点击
buttonClick(val) {
switch (val.btnName) {
case "search":
this.listQuery.xm1 = val.xm1;
this.listQuery.xm2 = val.xm2;
this.listQuery.pageNo = 1;
this.getDataList();
break;
case "add":
this.addOrEditTitle = '新增'
this.addOrUpdateVisible = true;
this.addOrUpdateHandle()
break;
default:
console.log(val)
}
},
handleCancel() {
this.$refs.addOrUpdate.formClear()
this.addOrUpdateVisible = false
this.addOrEditTitle = ''
},
handleConfirm() {
this.$refs.addOrUpdate.dataFormSubmit()
},
successSubmit() {
this.handleCancel()
this.getDataList()
},
/** 导出按钮操作 */
handleExport() {
// 处理查询参数
let params = { ...this.queryParams };
params.pageNo = undefined;
params.pageSize = undefined;
this.$modal.confirm('是否确认导出所有数据项?').then(() => {
this.exportLoading = true;
return this.urlOptions.exportURL(params);
}).then(response => {
this.$download.excel(response, '工厂.xls');
this.exportLoading = false;
}).catch(() => { });
}
}
}

View File

@ -0,0 +1,69 @@
/*
* @Date: 2020-12-29 16:49:28
* @LastEditors: DY
* @LastEditTime: 2023-09-12 11:13:34
* @FilePath: \basic-admin\src\filters\basicData\index.js
* @Description:
*/
const table = {
lineStatus: {
1: '生产中',
2: '停止',
3: '未知',
},
reportType: {
1: '日',
2: '周',
3: '月'
}
}
// 日期格式化
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.\d{3}/gm),'');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{([ymdhisa])+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
export default function (dictTable) {
return function (val) {
return table?.[dictTable]?.[val]
}
}

View File

@ -0,0 +1,65 @@
<!--
* @Author: zhp
* @Date: 2023-11-07 19:28:13
* @LastEditTime: 2023-11-08 14:11:43
* @LastEditors: zhp
* @Description:
-->
<template>
<div :class="[className, { 'p-0': noPadding }]">
<slot />
</div>
</template>
<script>
export default {
props: {
size: {
// : xl lg md sm
type: String,
default: 'de',
validator: function (val) {
return ['xl', 'lg', 'de', 'md', 'sm'].indexOf(val) !== -1;
},
},
noPadding: {
type: Boolean,
default: false,
},
},
computed: {
className: function () {
return `${this.size}-title`;
},
},
};
</script>
<style lang="scss" scoped>
$pxls: (xl, 28px) (lg, 24px) (de, 20px) (md, 18px) (sm, 16px);
$mgr: 8px;
@each $size, $height in $pxls {
.#{$size}-title {
font-size: 18px;
line-height: $height;
color: #000;
font-weight: 500;
font-family: '微软雅黑', 'Microsoft YaHei', Arial, Helvetica, sans-serif;
&::before {
content: '';
display: inline-block;
vertical-align: top;
width: 4px;
height: $height + 2px;
border-radius: 1px;
margin-right: $mgr;
background-color: #0b58ff;
}
}
}
.p-0 {
padding: 0;
}
</style>

View File

@ -0,0 +1,375 @@
<!--
* @Author: zhp
* @Date: 2023-12-08 13:46:17
* @LastEditTime: 2023-12-08 16:09:13
* @LastEditors: zhp
* @Description:
-->
<template>
<el-drawer :visible.sync="visible" :show-close="false" :wrapper-closable="false" class="drawer" size="50%">
<small-title slot="title" :no-padding="true">
{{ isdetail ? '详情' : !dataForm.id ? '新增' : '编辑' }}
</small-title>
<div class="content">
<!-- <div class="visual-part"> -->
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
label-width="100px" label-position="top">
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="供应商" prop="supplierId">
<el-select v-model="dataForm.supplierId" filterable :disabled="isdetail" style="width: 100%"
placeholder="请选择供应商">
<el-option v-for="dict in supplierList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="原料" prop="materialId">
<el-select v-model="dataForm.materialId" filterable :disabled="isdetail" style="width: 100%"
@change="getData" placeholder="请选择原料">
<el-option v-for="dict in materialList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="样品编码" prop="sampleCode">
<el-input v-model="dataForm.sampleCode" clearable :disabled="isdetail" placeholder="请输入样品编码" />
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="8">
<el-form-item label="取样人" prop="samplerId">
<el-select v-model="dataForm.samplerId" filterable :disabled="isdetail" style="width: 100%"
placeholder="请选择取样人">
<el-option v-for="dict in workerList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="检测人" prop="checkerId">
<el-select v-model="dataForm.checkerId" filterable :disabled="isdetail" style="width: 100%"
placeholder="请选择检测人">
<el-option v-for="dict in workerList" :key=" dict.id" :label="dict.name" :value="dict.id" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="检测时间" prop="checkTime">
<el-date-picker v-model="dataForm.checkTime" type="datetime" placeholder="选择检测时间">
</el-date-picker>
</el-form-item>
</el-col>
</el-row>
</el-form>
<!-- </div> -->
<div class="attr-list" v-if="idAttrShow">
<!-- <small-title style="margin: 16px 0; padding-left: 8px" :no-padding="true">
设备物料明细
</small-title>
<div v-if="!isdetail" class="action_btn">
<template>
<span style="display: inline-block;">
<el-button type="text" @click="addNew()" icon="el-icon-plus">新增</el-button>
</span>
</template>
</div>
<base-table :table-props="tableProps" :page="listQuery.pageNo" :limit="listQuery.pageSize"
:table-data="productAttrList">
<method-btn v-if="!isdetail" slot="handleBtn" :width="120" label="操作" :method-list="tableBtn"
@clickBtn="handleClick" />
</base-table>
<pagination v-show="listQuery.total > 0" :total="listQuery.total" :page.sync="listQuery.pageNo"
:limit.sync="listQuery.pageSize" :page-sizes="[5, 10, 15]" @pagination="getList" /> -->
</div>
</div>
<div class="drawer-body__footer">
<el-button style="" @click="goback()">取消</el-button>
<el-button type="primary" @click="dataFormSubmit()">确定</el-button>
</div>
<!-- <attr-add v-if="addOrUpdateVisible" ref="addOrUpdate" :product-id="dataForm.id" @refreshDataList="getList" /> -->
</el-drawer>
</template>
<script>
// import basicAdd from '../../core/mixins/basic-add';
import {
getQualityHotMaterial,
updateQualityHotMaterial,
createQualityHotMaterial,
getHotMaterialAllList,
getSupplierList,
getWorkerList,
getMaterialCheckList
} from '@/api/base/qualityHotMaterial';
import SmallTitle from './SmallTitle';
// import { parseTime } from '../../core/mixins/code-filter';
// import attrAdd from './attr-add';
// import {DICT_TYPE, getDictDatas} from "@/utils/dict";
// import { publicFormatter } from '@/utils/dict';
const topBtnConfig = [
{
type: 'add',
btnName: 'btn.add'
}
]
export default {
// mixins: [basicAdd],
components: { SmallTitle },
data() {
return {
// tableBtn,
// tableProps,
// topBtnConfig,
addOrUpdateVisible: false,
urlOptions: {
isGetCode: false,
// codeURL: getCode,
createURL: createQualityHotMaterial,
updateURL: updateQualityHotMaterial,
infoURL: getQualityHotMaterial,
},
listQuery: {
pageSize: 10,
pageNo: 1,
total: 0,
},
materialList: [],
workerList: [],
supplierList:[],
equipmentList:[],
dataForm: {
id: undefined,
materialId:null,
supplierId: null,
sampleCode: null,
samplerId: null,
checkerId: null,
checkTime: null,
appearance: null,
checkResult: null,
materialGrade: null,
},
productAttrList: [],
visible: false,
isdetail: false,
idAttrShow: false,
dataRule: {
// code: [{ required: true, message: "", trigger: "blur" }],
name: [{ required: true, message: "设备物料名称不能为空", trigger: "blur" }],
equipmentId: [{ required: true, message: "设备名称不能为空", trigger: "change" }],
// : [{ required: true, message: "", trigger: "change" }],
// processTime: [{ required: true, message: "线", trigger: "blur" }]
}
};
},
mounted() {
},
methods: {
dataFormSubmit() {
this.$refs["dataForm"].validate((valid) => {
if (!valid) {
return false;
}
//
if (this.dataForm.id) {
this.urlOptions.updateURL(this.dataForm).then(response => {
this.$modal.msgSuccess("修改成功");
this.visible = false;
this.$emit("refreshDataList");
});
return;
}
//
this.urlOptions.createURL(this.dataForm).then(response => {
this.$modal.msgSuccess("新增成功");
this.idAttrShow = true;
this.dataForm.id = res.data
this.$emit("refreshDataList");
});
});
},
getData(val) {
console.log(val);
getMaterialCheckList({
materialId:val
}).then((res) => {
console.log(res);
})
},
// clickTopBtn(val) {
// if (val === 'add') {
// this.addNew()
// }
// },
initData() {
this.productAttrList.splice(0);
this.listQuery.total = 0;
},
getDict() {
getHotMaterialAllList().then((res) => {
this.materialList = res.data
})
getWorkerList().then((res) => {
this.workerList = res.data
})
getSupplierList().then(res => {
this.supplierList = res.data
})
},
handleClick(raw) {
if (raw.type === 'delete') {
this.$confirm(
`确定对${
raw.data.materialName
? '[物料名称为' + raw.data.materialName + ']'
: '[序号为' + raw.data.materialName + ']'
}进行删除操作?`,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
deleteProcessEquMaterialBomDet(raw.data.id).then(({ data }) => {
this.$message({
message: '操作成功',
type: 'success',
duration: 1500,
onClose: () => {
this.getList();
},
});
});
})
.catch(() => {});
} else {
this.addNew(raw.data.id);
}
},
getList() {
//
processEquMaterialBomDetPage({
...this.listQuery,
bomId: this.dataForm.id,
}).then((response) => {
this.productAttrList = response.data.list;
this.listQuery.total = response.data.total;
});
},
init(id, isdetail) {
this.initData()
this.getDict()
this.isdetail = isdetail || false;
this.dataForm.id = id || undefined;
this.visible = true;
if (id) {
this.idAttrShow = true
} else {
this.idAttrShow = false
}
this.$nextTick(() => {
this.$refs['dataForm'].resetFields();
if (this.dataForm.id) {
//
this.urlOptions.infoURL({
bomId: id,
pageNo: 1,
pageSize:10
}).then(response => {
this.dataForm = response.data
this.dataForm.unit = String(this.dataForm.unit)
this.dataForm.materialType = String(this.dataForm.materialType)
this.dataForm.productType = String(this.dataForm.productType)
});
//
this.getList();
} else {
if (this.urlOptions.isGetCode) {
this.getCode()
}
}
});
},
goback() {
this.$emit('refreshDataList');
this.visible = false;
// this.initData();
},
goEdit() {
this.isdetail = false;
},
// /
addNew(id) {
this.addOrUpdateVisible = true;
this.$nextTick(() => {
this.$refs.addOrUpdate.init(id,this.dataForm.id);
});
}
}
};
</script>
<style scoped>
.drawer >>> .el-drawer {
border-radius: 8px 0 0 8px;
display: flex;
flex-direction: column;
}
.drawer >>> .el-form-item__label {
padding: 0;
}
.drawer >>> .el-drawer__header {
margin: 0;
padding: 32px 32px 24px;
border-bottom: 1px solid #dcdfe6;
}
.drawer >>> .el-drawer__body {
flex: 1;
height: 1px;
display: flex;
flex-direction: column;
}
.drawer >>> .content {
padding: 30px 24px;
flex: 1;
display: flex;
flex-direction: column;
/* height: 100%; */
}
.drawer >>> .visual-part {
flex: 1 auto;
max-height: 76vh;
overflow: hidden;
overflow-y: scroll;
padding-right: 10px; /* 调整滚动条样式 */
}
.drawer >>> .el-form,
.drawer >>> .attr-list {
padding: 0 16px;
}
.drawer-body__footer {
display: flex;
justify-content: flex-end;
padding: 18px;
}
.action_btn {
float: right;
margin: -40px 15px;
font-size: 14px;
}
.add {
color: #0b58ff;
}
</style>

View File

@ -0,0 +1,182 @@
<template>
<div class="app-container">
<search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
<base-table v-loading="dataListLoading" :table-props="tableProps" :page="listQuery.pageNo"
:limit="listQuery.pageSize" :table-data="tableData">
<method-btn v-if="tableBtn.length" slot="handleBtn" :width="120" label="操作" :method-list="tableBtn"
@clickBtn="handleClick" />
</base-table>
<pagination :limit.sync="listQuery.pageSize" :page.sync="listQuery.pageNo" :total="listQuery.total"
@pagination="getDataList" />
<!-- <base-dialog
:dialogTitle="addOrEditTitle"
:dialogVisible="addOrUpdateVisible"
@cancel="handleCancel"
@confirm="handleConfirm"
:before-close="handleCancel"
width="30%"> -->
<add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" />
<!-- </base-dialog> -->
</div>
</template>
<script>
import AddOrUpdate from './add-or-updata';
import basicPage from '../../../core/mixins/basic-page';
import { parseTime } from '../../../core/mixins/code-filter';
import {
getQualityHotMaterialPage,
deleteQualityHotMaterial,
getHotMaterialAllList
} from '@/api/base/qualityHotMaterial';
// import { getList, } from "@/api/base/qualityScrapType";
const tableProps = [
{
prop: 'createTime',
label: '添加时间',
filter: parseTime
},
{
prop: 'supplierName',
label: '供应商'
},
{
prop: 'materialName',
label: '原料'
},
{
prop: 'sampleCode',
label: '样品编号'
},
{
prop: 'samplerName',
label: '取样人'
},
{
prop: 'appearance',
label: '是否合格'
},
{
prop: 'materialGrade',
label: '原料等级'
},
{
prop: 'checkerName',
label: '检测人员'
},
];
export default {
mixins: [basicPage],
data() {
return {
urlOptions: {
getDataListURL: getQualityHotMaterialPage,
deleteURL: deleteQualityHotMaterial,
// exportURL: exportFactoryExcel,
},
tableProps,
tableBtn: [
this.$auth.hasPermi(`base:quality-inspection-det:update`)
? {
type: 'edit',
btnName: '编辑',
}
: undefined,
this.$auth.hasPermi(`base:quality-inspection-det:delete`)
? {
type: 'delete',
btnName: '删除',
}
: undefined,
].filter((v)=>v),
tableData: [],
formConfig: [
// {
// type: 'input',
// label: '',
// placeholder: '',
// param: 'content',
// },
{
type: 'select',
label: '原料名称',
selectOptions: [],
labelField: 'name',
valueField: 'id',
param: 'materialId',
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
{
type: 'separate',
},
{
type: this.$auth.hasPermi('base:quality-scrap-det:create') ? 'button' : '',
btnName: '新增',
name: 'add',
color: 'success',
plain: true
},
],
};
},
components: {
AddOrUpdate,
},
created() { },
mounted () {
this.getDict();
},
methods: {
//
getDataList() {
this.dataListLoading = true;
this.urlOptions.getDataListURL(this.listQuery).then(response => {
this.tableData = response.data.list;
this.listQuery.total = response.data.total;
this.dataListLoading = false;
});
},
async getDict() {
//
const res = await getHotMaterialAllList();
this.formConfig[0].selectOptions = res.data;
},
buttonClick(val) {
switch (val.btnName) {
case 'search':
this.listQuery.pageNo = 1;
this.listQuery.pageSize = 10;
this.listQuery.content = val.content ? val.content : undefined;
this.listQuery.typeId = val.typeId ? val.typeId : undefined;
this.getDataList();
break;
case 'reset':
this.$refs.searchBarForm.resetForm();
this.listQuery = {
pageSize: 10,
pageNo: 1,
total: 1,
};
this.getDataList();
break;
case 'add':
this.addOrEditTitle = '新增';
this.addOrUpdateVisible = true;
this.addOrUpdateHandle();
break;
case 'export':
this.handleExport();
break;
default:
console.log(val);
}
},
},
};
</script>

View File

@ -15,7 +15,7 @@
@pagination="getList" /> @pagination="getList" />
<!-- 对话框(添加 / 修改) --> <!-- 对话框(添加 / 修改) -->
<base-dialog :dialogTitle="title" :dialogVisible="open" width="40%" @close="cancel" @cancel="cancel" <base-dialog :dialogTitle="title" :dialogVisible="open" width="30%" @close="cancel" @cancel="cancel"
@confirm="submitForm"> @confirm="submitForm">
<DialogForm v-if="open" ref="form" v-model="form" :rows="[ <DialogForm v-if="open" ref="form" v-model="form" :rows="[
[ [

View File

@ -0,0 +1,270 @@
<!--
filename: dialogForm.vue
author: liubin
date: 2023-09-11 15:55:13
description: DialogForm for qualityInspectionRecord only
-->
<template>
<el-form
ref="form"
:model="innerDataForm"
label-width="100px"
v-loading="formLoading">
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="检测内容"
prop="inspectionDetId"
:rules="[{ required: true, message: '检测内容不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.inspectionDetId"
placeholder="请选择检测内容"
filterable
clearable
@change="handleInspectionDetChange">
<el-option
v-for="opt in inspectionDetList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="来源"
prop="source"
:rules="[{ required: true, message: '来源不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.source"
placeholder="请选择来源"
filterable
clearable
@change="$emit('update', innerDataForm)">
<el-option
v-for="opt in [
{ label: '手动', value: 1 },
{ label: '自动', value: 2 },
]"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
label="产线"
prop="productionLineId"
:rules="[{ required: true, message: '产线不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.productionLineId"
placeholder="请选择产线"
filterable
clearable
@change="handleProductlineChange">
<el-option
v-for="opt in productionLineList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="工段"
prop="sectionId"
:rules="[{ required: true, message: '工段不能为空', trigger: 'blur' }]">
<el-select
v-model="innerDataForm.sectionId"
placeholder="请选择工段"
clearable
filterable
@change="$emit('update', innerDataForm)">
<el-option
v-for="opt in sectionList"
:key="opt.value"
:label="opt.label"
:value="opt.value" />
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item label="检测人员" prop="checkPerson">
<el-input
v-model="innerDataForm.checkPerson"
clearable
@change="$emit('update', innerDataForm)"
placeholder="请输入检测人员" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item
label="检测时间"
prop="checkTime"
:rules="[{ required: true, message: '检测时间不能为空', trigger: 'blur' }]">
<el-date-picker
v-model="innerDataForm.checkTime"
type="datetime"
placeholder="请选择检测时间"
value-format="timestamp"
@change="$emit('update', innerDataForm)"></el-date-picker>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col>
<el-form-item label="描述" prop="explainText">
<el-input
v-model="innerDataForm.explainText"
placeholder="请输入描述信息"
@change="$emit('update', innerDataForm)"
type="textarea"></el-input>
</el-form-item>
</el-col>
<el-col>
<el-form-item label="备注" prop="remark">
<el-input
v-model="innerDataForm.remark"
@change="$emit('update', innerDataForm)"
placeholder="请输入备注"></el-input>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script>
export default {
name: 'DialogForm',
model: {
prop: 'dataForm',
event: 'update',
},
emits: ['update'],
components: {},
props: {
dataForm: {
type: Object,
default: () => ({}),
},
},
data() {
return {
formLoading: true,
inspectionDetList: [],
productionLineList: [],
sectionList: [],
innerDataForm: {},
cacheInspectionDetList: null,
};
},
mounted() {
Promise.all([this.getProductLineList(), this.getInspectionDetList()]).then(
() => {
this.formLoading = false;
}
);
},
watch: {
// 'innerDataForm.productionLineId': {
// handler: async function (plId) {
// if (plId) await this.getWorksectionList(plId);
// },
// immediate: true,
// },
dataForm: {
handler: function (dataForm) {
this.innerDataForm = Object.assign({}, dataForm);
if (dataForm.productionLineId)
this.getWorksectionList(dataForm.productionLineId);
},
immediate: true,
},
},
methods: {
/** 模拟透传 ref */
validate(cb) {
return this.$refs.form.validate(cb);
},
resetFields(args) {
return this.$refs.form.resetFields(args);
},
handleInspectionDetChange(value) {
const { id, content } = this.cacheInspectionDetList.find(
(item) => item.id == value
);
this.innerDataForm.inspectionDetId = id;
this.innerDataForm.inspectionDetContent = content;
this.$emit('update', this.innerDataForm);
},
async handleProductlineChange(id) {
// await this.getWorksectionList(id);
this.innerDataForm.sectionId = null;
this.$emit('update', this.innerDataForm);
},
// getCode
async getCode(url) {
const response = await this.$axios(url);
return response.data;
},
// 线
async getProductLineList() {
const response = await this.$axios('/base/core-production-line/listAll');
this.productionLineList = response.data.map((item) => ({
label: item.name,
value: item.id,
}));
},
//
async getInspectionDetList() {
const response = await this.$axios(
'/base/quality-inspection-det/listAll'
);
this.cacheInspectionDetList = response.data;
this.inspectionDetList = response.data.map((item) => ({
label: item.content,
value: item.id,
}));
},
//
async getWorksectionList(plId) {
const response = await this.$axios(
'/base/workshop-section/listByParentId',
{
params: {
id: plId,
},
}
);
this.sectionList = response.data.map((item) => ({
label: item.name,
value: item.id,
}));
},
},
};
</script>
<style scoped lang="scss">
.el-date-editor,
.el-select {
width: 100%;
}
</style>

View File

@ -0,0 +1,494 @@
<template>
<div class="status-timegraph-container" style="background: #f2f4f9; flex: 1; display: flex; flex-direction: column">
<el-row class="" style="
margin-bottom: 12px;
background: #fff;
padding: 16px 16px 0;
border-radius: 8px;
">
<!-- <div class="blue-title">生产节拍时序图</div> -->
<SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" @headBtnClick="handleSearchBarBtnClick" />
<!-- 列表 -->
<base-table :table-props="tableProps" :page="1" :limit="10" :table-data="list">
</base-table>
</el-row>
<el-row class="" style="
height: 1px;
flex: 1;
margin-bottom: 12px;
background: #fff;
padding: 16px 16px 32px;
border-radius: 8px;
display: flex;
flex-direction: column;
">
<el-row :gutter="20">
<el-col :span="24">
<div class="blue-title">
<!-- <span > -->
图表时间维度
<!-- </span> -->
<el-tabs style="margin-top: 10px;" v-model="activeName" type="card" @tab-click="handleClick">
<el-tab-pane label="天" name="day">
<div id="mapDayMain" style="height: 500px;width: 1000px;"></div>
<div id="listDayMain" style="height: 500px;width: 1000px;"></div>
</el-tab-pane>
<el-tab-pane label="周" name="week">
<div id="mapWeekMain" style="height: 500px;width: 1000px;"></div>
<div id="listWeekMain" style="height: 500px;width: 1000px;"></div>
</el-tab-pane>
<el-tab-pane label="月" name="month">
<div id="mapMonthMain" style="height: 500px;width: 1000px;"></div>
<div id="listMonthMain" style="height: 500px;width: 1000px;"></div>
</el-tab-pane>
<!-- <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane> -->
</el-tabs>
</div>
</el-col>
<!-- <el-col :span="18" class="legend-row">
<div class="legend">
<div class="icon running"></div>
<div>运行中</div>
</div>
<div class="legend">
<div class="icon fault"></div>
<div>故障</div>
</div>
<div class="legend">
<div class="icon stop"></div>
<div>计划停机</div>
</div>
</el-col> -->
</el-row>
<!-- <div class="main-area" style="flex: 1; display: flex; flex-direction: column">
<div class="graphs" v-show="graphList.length" id="status-chart" style="height: 1px; flex: 1"></div>
<h2 v-if="!graphList || graphList.length == 0" class="no-data-bg"></h2>
</div> -->
</el-row>
</div>
</template>
<script>
import {
getQualityIsraPage,
getQualityIsraDayMap,
getQualityIsraWeekMap,
getQualityIsraMonthMap,
getQualityIsraDayList,
getQualityIsraWeekList,
getQualityIsraMonthList,
} from '@/api/monitoring/qualityIsra';
// import Editor from '@/components/Editor';
import moment from 'moment';
// import DialogForm from './dialogForm.vue';
import * as echarts from 'echarts';
// import basicPageMixin from '@/mixins/lb/basicPageMixin';
export default {
name: 'statisticalData',
// components: {
// DialogForm,
// },
// mixins: [basicPageMixin],
data() {
return {
list: [],
dynamicProps: [],
activeName: 'day',
dayMapUrl: '/base/quality-isra-statistics/dayMap',
weekMapUrl: '/base/quality-isra-statistics/weekMap',
monthMapUrl: '/base/quality-isra-statistics/monthMap',
dayListUrl: '/base/quality-isra-statistics/dayList',
weekListUrl: '/base/quality-isra-statistics/weekList',
monthListUrl: '/base/quality-isra-statistics/monthList',
searchBarFormConfig: [
{
type: 'select',
label: '缺陷类型',
placeholder: '请选择缺陷类型',
param: 'checkType',
selectOptions: [],
labelField: 'name',
valueField: 'name',
defaultSelect: []
},
{
type: 'datePicker',
label: '时间段',
dateType: 'daterange', // datetimerange
// format: 'yyyy-MM-dd HH:mm:ss',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
defaultTime: ['00:00:00', '23:59:59'],
param: 'checkTime',
// width: 350,
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
],
//
queryParams: {
checkType:undefined,
// productionId: undefined,
startTime: undefined,
endTime: undefined,
// productionLineId: null,
},
};
},
created() {
// this.getProductLineList();
},
computed: {
tableProps() {
return [
{
// width: 128,
prop: 'checkType',
label: '缺陷类型',
},
{
// width: 128,
prop: 'sumNum',
label: '缺陷总数',
},
...this.dynamicProps,
];
},
},
mounted() {
// if (this.$route.query.woIdString) {
// console.log(this.$route.query.woIdString)
// this.queryParams.workOrderIdList = this.$route.query.woIdString.split(',')
// // this.queryParams.workOrderIdList = [this.$route.query.woIdString]
// // let arr =[]
// this.searchBarFormConfig[0].defaultSelect = this.$route.query.woIdString.split(',')
// console.log(this.searchBarFormConfig[0].defaultSelect);
// }
// if (this.$route.params.startTime && this.$route.params.endTime) {
// this.searchBarFormConfig[0].defaultSelect = [
// this.$route.params.startTime,
// this.$route.params.endTime,
// ];
// this.queryParams.param = {};
// this.$set(
// this.queryParams.param,
// 'startTime',
// this.$route.params.startTime
// );
// this.$set(this.queryParams.param, 'endTime', this.$route.params.endTime);
// } else {
// this.searchBarFormConfig[0].defaultSelect = [];
// }
this.getList()
this.getData()
this.getDict()
},
methods: {
handleClick() {
this.getData()
},
getData() {
this.$axios({
url: this.activeName === 'day' ? this.dayMapUrl : this.activeName === 'week' ? this.weekMapUrl : this.monthMapUrl,
method: 'get',
params: this.queryParams
}).then((res) => {
let mapArr= []
let mapLegendData = []
// let mapXAxisData = []
for (let i in res.data) {
let obj = {
name: '',
type: 'line',
// stack: 'Total',
data: [],
mapXAxisData:[],
}
// console.log(i)
let dataArr = []
res.data[i].forEach(ele => {
dataArr.push(ele.num)
obj.mapXAxisData.push(ele.checkTime)
})
obj.name = i
obj.data = dataArr
mapLegendData.push(i)
mapArr.push(obj)
}
// console.log(res.data[res]);
var chartDom = this.activeName === 'day' ? document.getElementById('mapDayMain') : this.activeName === 'week' ? document.getElementById('mapWeekMain') : document.getElementById('mapMonthMain')
var myChart = echarts.init(chartDom);
var option;
option = {
title: {
text: '各类型缺陷对比图'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: mapLegendData
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
// toolbox: {
// feature: {
// saveAsImage: {}
// }
// },
xAxis: {
type: 'category',
// boundaryGap: false,
data: mapArr[0].mapXAxisData
},
yAxis: {
type: 'value'
},
series: mapArr
}
option && myChart.setOption(option);
})
this.$axios({
url: this.activeName === 'day' ? this.dayListUrl : this.activeName === 'week' ? this.weekListUrl : this.monthListUrl,
method: 'get',
params: this.queryParams
}).then((res) => {
// console.log(res);
let listNumArr = []
let listRatioArr = []
// let listLegendData = []
let listXAxisData = []
// for (let i in res.data) {
// console.log(i)
// let dataArr = []
res.data.forEach(ele => {;
listNumArr.push(ele.num)
listRatioArr.push(ele.ratio)
listXAxisData.push(ele.checkTime)
})
console.log(listNumArr);
// obj.name = i
// obj.data = dataArr
// listLegendData.push(i)
// listArr.push(obj)
// }
// console.log(res.data[res]);
var chartDom = this.activeName === 'day' ? document.getElementById('listDayMain') : this.activeName === 'week' ? document.getElementById('listWeekMain') : document.getElementById('listMonthMain')
var myChart = echarts.init(chartDom);
var option;
option = {
title: {
text: '缺陷率趋势图'
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['缺陷数量', '缺陷率']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
// toolbox: {
// feature: {
// saveAsImage: {}
// }
// },
xAxis: {
type: 'category',
// boundaryGap: false,
data: listXAxisData
},
yAxis: [
{
type: 'value',
name: '缺陷数量',
// min: 0,
// max: 250,
// interval: 50,
// axisLabel: {
// formatter: '{value} ml'
// }
},
{
type: 'value',
name: '缺陷率',
// min: 0,
// max: 25,
// interval: 5,
axisLabel: {
formatter: '{value} %'
}
}
],
series: [
{
name: '缺陷数量',
type: 'bar',
barWidth: '3%',
data: listNumArr,
label: {
show: true, //
position: 'top', //
// formatter: '{c}%',//
textStyle: { //
color: 'black',//
fontSize: 20//
}
}
},
{
name: '缺陷率',
type: 'line',
yAxisIndex: 1,
tooltip: {
valueFormatter: function (value) {
return value + '%';
}
},
data: listRatioArr
}
]
}
option && myChart.setOption(option);
})
},
/** 获取搜索栏的产线列表 */
async getDict() {
// const res = await getProductList()
// const result = await getWorkOrderList()
const res = await this.$axios({
url: '/base/quality-isra-standards/page',
method: 'get',
params: {
pageSize: 100,
pageNo:1
}
});
console.log(res)
this.searchBarFormConfig[0].selectOptions = res.data.list
// this.searchBarFormConfig[1].selectOptions = res.data.map((item) => {
// return {
// name: item.name,
// id:item.id
// }
// })
// this.searchBarFormConfig[0].selectOptions = result.data.map((item) => {
// return {
// name: item.name,
// id: item.id
// }
// })
},
// getProductLineList() {
// this.$axios('/base/production-line/listAll').then((response) => {
// this.searchBarFormConfig[0].selectOptions = response.data.map(
// (item) => {
// return {
// name: item.name,
// id: item.id,
// };
// }
// );
// });
// },
getList() {
this.getDataList()
},
/** 查询列表 */
async getDataList() {
console.log(this.queryParams);
this.loading = true;
//
const {
data: { data, otherList, otherMap, nameData },
} = await getQualityIsraPage(this.queryParams)
console.log(this.queryParams);
this.dynamicProps = this.filterNameData(nameData)
this.list = this.filterData(data);
},
filterNameData(nameData) {
const ndSet = new Set();
nameData.forEach((nd) => {
ndSet.add(nd.name);
});
return Array.from(ndSet.values())
.sort()
.map((name) => ({
prop: name,
label: name,
}));
},
filterData(data) {
return data.map((item) => {
const { data: innerData } = item;
const keyValuePairs = {};
innerData.map((d) => {
keyValuePairs[d.dynamicName] = d.dynamicValue;
});
return {
// inspectionContent: item.inspectionContent,
...keyValuePairs,
sumNum: item.sumNum,
// sumInput: item.sumInput,
// productionName: item.productionName,
checkType: item.checkType,
// scrapRatio: item.scrapRatio,
};
});
},
/** 取消按钮 */
handleSearchBarBtnClick(val) {
if (val.btnName === 'search') {
this.queryParams.checkType = val.checkType ? val.checkType : undefined
// this.queryParams.productionId = val.productionId ? val.productionId : undefined
this.queryParams.startTime = val.checkTime ? val.checkTime[0] : undefined
this.queryParams.endTime = val.checkTime ? val.checkTime[1] : undefined
this.getList()
}
console.log(val);
}
},
};
</script>
<style lang="scss">
.blue-title {
position: relative;
padding: 4px 0;
padding-left: 12px;
font-size: 14px;
color: #606266;
font-weight: 700;
margin-bottom: 12px;
&::before {
content: '';
position: absolute;
left: 0;
top: 6px;
height: 16px;
width: 4px;
border-radius: 1px;
background: #0b58ff;
}
}
</style>

View File

@ -1,12 +1,12 @@
<!-- <!--
* @Author: zhp * @Author: zhp
* @Date: 2023-11-06 15:15:30 * @Date: 2023-11-06 15:15:30
* @LastEditTime: 2023-11-07 19:38:13 * @LastEditTime: 2023-12-01 10:58:25
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
--> -->
<template> <template>
<el-dialog :visible.sync="dialogVisible" width="50%" :before-close="handleClose"> <el-dialog :visible.sync="visible" width="50%">
<small-title slot="title" :no-padding="true"> <small-title slot="title" :no-padding="true">
{{ '详情' }} {{ '详情' }}
</small-title> </small-title>
@ -118,7 +118,7 @@ export default {
name: '自动', name: '自动',
} }
], ],
dialogVisible:false, visible:false,
dataForm: { dataForm: {
id: undefined, id: undefined,
logTime: undefined, logTime: undefined,
@ -144,79 +144,79 @@ export default {
}; };
}, },
mounted() { mounted() {
// this.getDict() this.getDict()
console.log('我看看', this.dataForm) console.log('我看看', this.dataForm)
this.getCurrentTime() this.getCurrentTime()
}, },
methods: { methods: {
init() { // init() {
this.dialogVisible = true // this.dialogVisible = true
}, // },
getCurrentTime() { getCurrentTime() {
// new Date().Format("yyyy-MM-dd HH:mm:ss") // new Date().Format("yyyy-MM-dd HH:mm:ss")
this.dataForm.logTime = new Date() this.dataForm.logTime = new Date()
// this.dataForm.logTime = year + "-" + month + "-" + day; // this.dataForm.logTime = year + "-" + month + "-" + day;
console.log(this.dataForm.logTime); console.log(this.dataForm.logTime);
}, },
// async getDict() { async getDict() {
// // //
// const res = await getList() const res = await getList()
// this.typeList = res.data this.typeList = res.data
// getWorkOrderList().then((res) => { getWorkOrderList().then((res) => {
// console.log(res); console.log(res);
// // console.log(response); // console.log(response);
// this.workOrderList = res.data.map((item) => { this.workOrderList = res.data.map((item) => {
// return { return {
// name: item.name, name: item.name,
// id: item.id id: item.id
// } }
// }) })
// // console.log(this.formConfig[0].selectOptions); // console.log(this.formConfig[0].selectOptions);
// // this.listQuery.total = response.data.total; // this.listQuery.total = response.data.total;
// }) })
// getLineList().then((res) => { getLineList().then((res) => {
// console.log(res); console.log(res);
// // console.log(response); // console.log(response);
// this.lineList = res.data.map((item) => { this.lineList = res.data.map((item) => {
// return { return {
// name: item.name, name: item.name,
// id: item.id id: item.id
// } }
// }) })
// // console.log(this.formConfig[0].selectOptions); // console.log(this.formConfig[0].selectOptions);
// // this.listQuery.total = response.data.total; // this.listQuery.total = response.data.total;
// }) })
// getDetList().then((res) => { getDetList().then((res) => {
// console.log(res); console.log(res);
// // console.log(response); // console.log(response);
// this.workOrderList = res.data.map((item) => { this.workOrderList = res.data.map((item) => {
// return { return {
// name: item.name, name: item.name,
// id: item.id id: item.id
// } }
// }) })
// // console.log(this.formConfig[0].selectOptions); // console.log(this.formConfig[0].selectOptions);
// // this.listQuery.total = response.data.total; // this.listQuery.total = response.data.total;
// }) })
// getTeamList().then((res) => { getTeamList().then((res) => {
// console.log(res); console.log(res);
// // console.log(response); // console.log(response);
// this.teamList = res.data.map((item) => { this.teamList = res.data.map((item) => {
// return { return {
// name: item.name, name: item.name,
// id: item.id id: item.id
// } }
// }) })
// // console.log(this.formConfig[0].selectOptions); // console.log(this.formConfig[0].selectOptions);
// // this.listQuery.total = response.data.total; // this.listQuery.total = response.data.total;
// }) })
// }, },
// setMaterialCode() { setMaterialCode() {
// const chooseM = this.materialList.filter(item => { const chooseM = this.materialList.filter(item => {
// return item.id === this.dataForm.materialId return item.id === this.dataForm.materialId
// }) })
// this.dataForm.materialCode = chooseM[0].code this.dataForm.materialCode = chooseM[0].code
// } }
}, },
}; };
</script> </script>

View File

@ -40,7 +40,7 @@ const tableProps = [
label: '工单' label: '工单'
}, },
{ {
prop: 'teamId', prop: 'teamName',
label: '班组' label: '班组'
}, },
{ {

View File

@ -1,19 +1,20 @@
<!-- <!--
* @Author: zhp * @Author: zhp
* @Date: 2023-11-06 15:15:30 * @Date: 2023-11-06 15:15:30
* @LastEditTime: 2023-11-24 08:42:18 * @LastEditTime: 2023-12-01 16:33:41
* @LastEditors: zhp * @LastEditors: zhp
* @Description: * @Description:
--> -->
<template> <template>
<el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"> <el-form :model="dataForm" :rules="dataRule" ref="dataForm" @keyup.enter.native="dataFormSubmit()"
label-width="110px">
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="报废类型编码" prop="code"> <el-form-item label="报废类型编码" prop="code">
<el-input v-model="dataForm.code" placeholder="请输入报废类型编码" /> <el-input v-model="dataForm.code" placeholder="请输入报废类型编码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="11">
<el-form-item label="报废类型" prop="name"> <el-form-item label="报废类型" prop="name">
<el-input v-model="dataForm.name" placeholder="请输入报废类型" /> <el-input v-model="dataForm.name" placeholder="请输入报废类型" />
</el-form-item> </el-form-item>
@ -21,12 +22,12 @@
</el-row> </el-row>
<el-row :gutter="24"> <el-row :gutter="24">
<el-col :span="12"> <el-col :span="12">
<el-form-item label="描述类型" prop="description"> <el-form-item label="描述类型" prop="description" label-width="110px">
<el-input v-model="dataForm.description" clearable placeholder="描述类型" /> <el-input v-model="dataForm.description" clearable placeholder="描述类型" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="12"> <el-col :span="11">
<el-form-item label="备注" prop="remark"> <el-form-item label="备注" prop="remark" label-width="110px">
<el-input v-model="dataForm.remark" clearable placeholder="请输入备注" /> <el-input v-model="dataForm.remark" clearable placeholder="请输入备注" />
</el-form-item> </el-form-item>
</el-col> </el-col>

View File

@ -307,6 +307,10 @@ export default {
type: 'category', type: 'category',
data: arrXAxis data: arrXAxis
}, },
grid: {
left: '5%',
top:'2%'
},
yAxis: { yAxis: {
type: 'value' type: 'value'
}, },

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2023-08-01 14:55:51 * @Date: 2023-08-01 14:55:51
* @LastEditors: zhp * @LastEditors: zhp
* @LastEditTime: 2023-11-24 10:55:54 * @LastEditTime: 2023-12-01 16:41:40
* @Description: * @Description:
--> -->
<template> <template>
@ -57,7 +57,8 @@ const tableProps = [
}, },
{ {
prop: 'userName', prop: 'userName',
label: '操作人' label: '操作人',
showOverflowtooltip: true
}, },
{ {
prop: 'source', prop: 'source',
@ -128,7 +129,7 @@ export default {
}, },
{ {
type: 'button', type: 'button',
btnName: '搜索', btnName: '查询',
name: 'search', name: 'search',
color: 'primary', color: 'primary',
}, },
@ -161,7 +162,8 @@ export default {
type: this.$auth.hasPermi('monitoring:materiel-date-from:export') ? 'button' : '', type: this.$auth.hasPermi('monitoring:materiel-date-from:export') ? 'button' : '',
btnName: '导出', btnName: '导出',
name: 'export', name: 'export',
color: 'warning', color: 'primary',
plain: true
}, },
], ],
}; };

View File

@ -0,0 +1,252 @@
<!--
* @Author: zwq
* @Date: 2023-08-01 14:55:51
* @LastEditors: zhp
* @LastEditTime: 2023-12-06 14:08:00
* @Description:
-->
<template>
<div class="app-container">
<search-bar :formConfigs="formConfig" ref="searchBarForm" @headBtnClick="buttonClick" />
<base-table :table-props="tableProps" :page="listQuery.pageNo" :limit="listQuery.pageSize" :table-data="list">
<!-- <method-btn v-if="tableBtn.length" slot="handleBtn" :width="120" label="操作" :method-list="tableBtn"
@clickBtn="handleClick" /> -->
</base-table>
<pagination :limit.sync="listQuery.pageSize" :page.sync="listQuery.pageNo" :total="listQuery.total"
@pagination="getList" />
<!-- <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList" /> -->
</div>
</template>
<script>
// import AddOrUpdate from './add-or-updata';
// import unitDict from './unitDict';
// import basicPage from '../mixins/basic-page';
import { publicFormatter } from '@/utils/dict';
import { parseTime } from '../mixins/code-filter';
import {
getOriginalGlassRetrace,
getWorkOrderList,
// exportEnergyPlcExcel
} from '@/api/quality/rawMaterialTraceability';
const tableProps = [
{
prop: 'workOrderName',
label: '工单名称',
},
{
prop: 'palletNumber',
label: '托号',
},
{
prop: 'transportQuantity',
label: '该托片数',
},
{
prop: 'packagingCode',
label: '包装条码',
},
{
prop: '',
label: '原片产线',
},
{
prop: 'originalGlassOutputTime',
label: '原片下片时间',
filter: parseTime
},
{
prop: 'batch',
label: '深加工产线',
},
{
prop: 'deepProcessingInputTime',
label: '深加工上片时间',
filter: parseTime
},
{
prop: 'productionOutputTime',
label: '深加工下片时间',
filter: parseTime
}
];
export default {
// mixins: [basicPage],
data() {
return {
// urlOptions: {
// getDataListURL: getMaterialUseLogPage,
// // deleteURL: deletePackingType,
// // exportURL: exportPackingExcel,
// },
tableProps,
// tableBtn: [
// this.$auth.hasPermi(`base:packaging-print-log:update`)
// ? {
// type: 'edit',
// btnName: '',
// }
// : undefined,
// this.$auth.hasPermi(`base:packaging-print-log:delete`)
// ? {
// type: 'delete',
// btnName: '',
// }
// : undefined,
// ].filter((v) => v),
list: [],
listQuery: {
pageSize: 10,
pageNo: 1,
total: 0,
workOrderId: undefined,
startTime: undefined,
endTime:undefined,
},
formConfig: [
{
type: 'select',
label: '工单',
selectOptions: [],
labelField: 'name',
valueField: 'id',
param: 'workOrderId'
},
// {
// type: 'datePicker',
// label: '',
// dateType: 'daterange',
// format: 'yyyy-MM-dd',
// valueFormat: "yyyy-MM-dd",
// rangeSeparator: '-',
// startPlaceholder: '',
// endPlaceholder: '',
// param: 'timeVal',
// defaultSelect: [],
// width: 250
// },
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
// {
// type: 'separate',
// },
// {
// type: 'button',
// btnName: '',
// name: 'reset',
// },
// {
// type: 'separate',
// },
// {
// type: this.$auth.hasPermi('base:packaging-print-log:create') ? 'button' : '',
// btnName: '',
// name: 'add',
// color: 'success',
// plain: true,
// },
// {
// type: 'separate',
// type: this.$auth.hasPermi('base:product:create') ? 'separate' : '',
// },
// {
// type: this.$auth.hasPermi('monitoring:materiel-date-from:export') ? 'button' : '',
// btnName: '',
// name: 'export',
// color: 'warning',
// },
],
};
},
components: {
// AddOrUpdate,
},
created() {
this.getList()
this.getDict()
},
methods: {
getList() {
getOriginalGlassRetrace({ ...this.listQuery }).then(res => {
console.log(res);
this.list = res.data || []
console.log(this.list);
// this.listQuery.total = res.data.total || 0
})
},
getDict() {
//
// getCustomerList().then((response) => {
// console.log(response);
// this.customerList = response.data
// // this.listQuery.total = response.data.total;
// })
// getModelList().then((response) => {
// console.log(response);
// this.modelList = response.data
// // this.listQuery.total = response.data.total;
// })
getWorkOrderList().then((response) => {
// console.log(response);
this.formConfig[0].selectOptions = response.data.map((item) => {
return {
name: item.name,
id: item.id
}
})
console.log(this.formConfig[0].selectOptions);
// this.listQuery.total = response.data.total;
})
},
// handleExport() {
// //
// let params = { ...this.listQuery };
// params.pageNo = undefined;
// params.pageSize = undefined;
// this.$modal.confirm('?').then(() => {
// this.exportLoading = true;
// return exportEnergyPlcExcel(params);
// }).then(response => {
// this.$download.excel(response, ' ');
// this.exportLoading = false;
// }).catch(() => { });
// },
buttonClick(val) {
console.log(val)
if (val.btnName === 'search') {
this.listQuery.workOrderId = val.workOrderId ? val.workOrderId :undefined
// this.queryParams.status = val.status
// if (val.timeVal && val.timeVal.length != 0 ) {
// this.listQuery.startTime = val.timeVal[0] + ' 00:00:00'
// this.listQuery.endTime = val.timeVal[1] + ' 23:59:59'
// } else {
// this.listQuery.startTime = undefined
// this.listQuery.endTime = undefined
// }
this.getList()
} else {
// this.handleExport()
// this.addOrEditTitle = ''
// this.centervisible = true
// this.$nextTick(() => {
// this.$refs.orderAdd.init()
// })
}
},
otherMethods(val) {
this.addOrUpdateVisible = true;
this.addOrEditTitle = '详情';
this.$nextTick(() => {
this.$refs.addOrUpdate.init(val.data.id, true);
});
},
},
};
</script>

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2023-08-01 14:55:51 * @Date: 2023-08-01 14:55:51
* @LastEditors: zhp * @LastEditors: zhp
* @LastEditTime: 2023-11-28 10:51:44 * @LastEditTime: 2023-12-01 16:43:10
* @Description: * @Description:
--> -->
<template> <template>
@ -134,7 +134,7 @@ export default {
}, },
{ {
type: 'button', type: 'button',
btnName: '搜索', btnName: '查询',
name: 'search', name: 'search',
color: 'primary', color: 'primary',
}, },

View File

@ -124,7 +124,8 @@ export default {
// immediate: true, // immediate: true,
// }, // },
dataForm: { dataForm: {
handler: function (dataForm) { handler: function (dataForm) {
console.log(dataForm);
this.innerDataForm = Object.assign({}, dataForm); this.innerDataForm = Object.assign({}, dataForm);
if (dataForm.productionLineId) if (dataForm.productionLineId)

View File

@ -66,7 +66,19 @@ export default {
mixins: [basicPageMixin], mixins: [basicPageMixin],
data() { data() {
return { return {
rows: [ rows: [
[
{
select: true,
label: '工单名称',
url: 'base/core-work-order/listbyfilter',
prop: 'workOrderId',
rules: [{ required: true, message: '工单名称不能为空', trigger: 'change' }],
bind: {
filterable: true,
},
}
],
[ [
{ {
select: true, select: true,
@ -122,18 +134,7 @@ export default {
label: '检测人员', label: '检测人员',
prop: 'checkPerson', prop: 'checkPerson',
}, },
{
datetime: true,
label: '检测时间',
prop: 'checkTime',
rules: [{ required: true, message: '检测时间不能为空', trigger: 'blur' }],
bind: {
format: 'yyyy-MM-dd HH:mm:ss',
'value-format': 'timestamp',
// 'value-format': 'yyyy-MM-dd HH:mm:ss',
clearable: true,
},
},
], ],
[{ textarea: true, label: '描述', prop: 'explainText' }], [{ textarea: true, label: '描述', prop: 'explainText' }],
[{ input: true, label: '备注', prop: 'remark' }], [{ input: true, label: '备注', prop: 'remark' }],
@ -224,7 +225,7 @@ export default {
}, },
{ {
// width: 128, // width: 128,
prop: 'lineName', prop: 'productionLineName',
label: '产线', label: '产线',
}, },
{ {
@ -247,9 +248,10 @@ export default {
}, },
], ],
// keys, queryParams pageNo, pageSize key // keys, queryParams pageNo, pageSize key
searchBarKeys: ['inspectionDetContent', 'checkTime', 'productionLineId'], searchBarKeys: ['inspectionDetContent', 'checkTime', 'workOrderId'],
form: { form: {
id: undefined, id: undefined,
// workOrderId:undefined,
inspectionDetId: undefined, inspectionDetId: undefined,
inspectionDetContent: undefined, inspectionDetContent: undefined,
productionLineId: undefined, productionLineId: undefined,
@ -354,7 +356,8 @@ export default {
inspectionDetContent: undefined, inspectionDetContent: undefined,
sectionId: undefined, sectionId: undefined,
checkPerson: undefined, checkPerson: undefined,
checkTime: undefined, checkTime: undefined,
workOrderId:undefined,
source: undefined, source: undefined,
explainText: undefined, explainText: undefined,
remark: undefined, remark: undefined,
@ -383,12 +386,14 @@ export default {
this.reset(); this.reset();
const id = row.id; const id = row.id;
getQualityInspectionRecord(id).then((response) => { getQualityInspectionRecord(id).then((response) => {
/** 因为后端返回的时间是时间戳格式,需转换 */ /** 因为后端返回的时间是时间戳格式,需转换 */
console.log(response.data);
const info = {} const info = {}
Object.keys(this.form).forEach(key => { Object.keys(this.form).forEach(key => {
info[key] = response.data[key] info[key] = response.data[key]
}); });
this.form = info; this.form = info;
console.log(this.form);
this.open = true; this.open = true;
this.title = '修改质量检查信息记录表'; this.title = '修改质量检查信息记录表';
}); });

View File

@ -2,7 +2,7 @@
* @Author: zwq * @Author: zwq
* @Date: 2023-08-01 14:55:51 * @Date: 2023-08-01 14:55:51
* @LastEditors: zhp * @LastEditors: zhp
* @LastEditTime: 2023-11-10 16:26:45 * @LastEditTime: 2023-12-06 08:57:53
* @Description: * @Description:
--> -->
<template> <template>
@ -75,21 +75,21 @@ export default {
// // exportURL: exportPackingExcel, // // exportURL: exportPackingExcel,
// }, // },
tableProps, tableProps,
tableBtn: [ // tableBtn: [
this.$auth.hasPermi(`base:packaging-print-log:update`) // this.$auth.hasPermi(`base:packaging-print-log:update`)
? { // ? {
type: 'edit', // type: 'edit',
btnName: '编辑', // btnName: '',
} // }
: undefined, // : undefined,
this.$auth.hasPermi(`base:packaging-print-log:delete`) // this.$auth.hasPermi(`base:packaging-print-log:delete`)
? { // ? {
type: 'delete', // type: 'delete',
btnName: '删除', // btnName: '',
} // }
: undefined, // : undefined,
].filter((v) => v), // ].filter((v) => v),
list: [], list: [],
listQuery: { listQuery: {
pageSize: 10, pageSize: 10,
@ -123,7 +123,7 @@ export default {
// }, // },
{ {
type: 'button', type: 'button',
btnName: '搜索', btnName: '查询',
name: 'search', name: 'search',
color: 'primary', color: 'primary',
}, },

View File

@ -351,7 +351,7 @@ export default {
...keyValuePairs, ...keyValuePairs,
sumInput: item.sumInput, sumInput: item.sumInput,
productionName: item.productionName, productionName: item.productionName,
workOrderId: item.workOrderId, workOrderName: item.workOrderName,
scrapRatio: item.scrapRatio, scrapRatio: item.scrapRatio,
}; };
}); });

View File

@ -0,0 +1,37 @@
<template>
<div class="tableInner">
<el-input v-model="list[itemProp]" @blur="changeInput" />
</div>
</template>
<script>
export default {
name: 'InputArea',
props: {
injectData: {
type: Object,
default: () => ({})
},
itemProp: {
type: String
}
},
data() {
return {
list: this.injectData
}
},
methods: {
changeInput() {
console.log(this.list)
this.$emit('emitData', this.list)
}
}
}
</script>
<style>
.tableInner .el-input__inner {
border: none;
padding: 0;
height: 33px;
}
</style>

View File

@ -0,0 +1,530 @@
<!--
* @Author: zhp
* @Date: 2023-12-12 13:45:25
* @LastEditTime: 2023-12-13 15:17:53
* @LastEditors: zhp
* @Description:
-->
<template>
<div class="app-container">
<el-form :inline="true" :model="dataForm" class="demo-form-inline">
<el-form-item>
<el-date-picker v-model="monthValue" type="monthrange" range-separator="" start-placeholder="开始日期"
end-placeholder="结束日期" value-format="timestamp" :clearable="false" :picker-options="pickerOptions"
size="small" style='width:350px;' @change="timeSelect">
</el-date-picker>
</el-form-item>
<el-button type="primary" @click="getDataList()">查询</el-button>
<el-button type="primary" icon="el-icon-edit-outline" @click="editDataList()">编辑</el-button>
<el-button v-if="isSave" type="success" @click="saveDataList()">保存</el-button>
</el-form>
<el-table :data="list" style="width: 100%" :header-cell-style="{
background: '#F2F4F9',
color: '#606266'
}">
<el-table-column :label="'许昌安彩月成品生产汇总' + timeTips" align="center">
<el-table-column prop="lineId" label="生产线">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.lineId" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.lineId }} </span>
</template>
</el-table-column>
<el-table-column label="投入数㎡">
<el-table-column prop="inputNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputNow" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputNow }} </span>
</template>
</el-table-column>
<el-table-column prop="inputHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputHis" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputHis }} </span>
</template>
</el-table-column>
<el-table-column prop="inputTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputTrend" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="完成良品产量">
<el-table-column prop="goodProductNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductNow" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductNow }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductHis" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductHis }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="原片漏检率">
<el-table-column prop="missCheckNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckNow" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.missCheckNow }} </span>
</template>
</el-table-column>
<el-table-column prop="missCheckHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckHis" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.missCheckHis }} </span>
</template>
</el-table-column>
<el-table-column prop="missCheckTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.missCheckTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="综合良品率">
<el-table-column prop="goodProductPassNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassNow" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassNow }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductPassHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassHis" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassHis }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductPassTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassTrend }} </span>
</template>
</el-table-column>
</el-table-column>
</el-table-column>
<div style="height: 50px;" class="remark" slot="append">
<h3 style="float: left;text-align: center;margin-left: 20px;">备注</h3>
<el-input :disabled="disabled" style="float:right;width: 96%;margin-top: 8px;" v-model="remark"></el-input>
</div>
</el-table>
<!-- 搜索工作栏 -->
<!-- <SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" @headBtnClick="handleSearchBarBtnClick" /> -->
<!-- 列表 -->
<!-- <base-table :table-props="tableProps" :page="1" :limit="10" :summary-method="getSummaries" show-summary
:table-data="list">
</base-table> -->
<!-- 分页组件 -->
<!-- <pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" /> -->
</div>
</template>
<script>
import {
getProductionDataList,
updateProductionDataList,
updateSumProductionDataList
} from '@/api/report/production';
// import Editor from '@/components/Editor';
import moment from 'moment';
// import DialogForm from './dialogForm.vue';
// import basicPageMixin from '@/mixins/lb/basicPageMixin';
const tableProps = [
{
// width: 128,
prop: 'lineId',
label: '生产线',
},
{
// width: 128,
prop: '',
label: '投入数㎡',
align: 'center',
children: [
{
prop: 'inputNow',
label: '本周'
},
{
prop: 'inputHis',
label: '上周'
},
{
prop: 'inputTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '完成良品产量',
align: 'center',
children: [
{
prop: 'goodProductNow',
label: '本周'
},
{
prop: 'goodProductHis',
label: '上周'
},
{
prop: 'goodProductTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '原片漏检率',
align: 'center',
children: [
{
prop: 'missCheckNow',
label: '本周'
},
{
prop: 'missCheckHis',
label: '上周'
},
{
prop: 'missCheckTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '综合良品率',
align: 'center',
children: [
{
prop: 'goodProductPassNow',
label: '本周'
},
{
prop: 'goodProductPassHis',
label: '上周'
},
{
prop: 'goodProductPassTrend',
label: '增减'
}
]
},
];
export default {
name: 'statisticalData',
// components: {
// DialogForm,
// },
// mixins: [basicPageMixin],
data() {
return {
list: [],
remark: '',
monthValue:[],
// dynamicProps: [],
tableProps,
// dataForm: {
// reportTime:undefined
// },
isSave:false,
disabled: true,
sumArr: [],
timeTips:'',
searchBarFormConfig: [
// {
// type: 'select',
// label: '',
// placeholder: '',
// param: 'workOrderIdList',
// selectOptions: [],
// multiple: true,
// labelField: 'name',
// valueField: 'id',
// defaultSelect: []
// },
// {
// type: 'select',
// label: '',
// placeholder: '',
// param: 'productionId',
// selectOptions: [],
// },
// {
// type: 'input',
// label: '',
// placeholder: '',
// param: 'inspectionDetContent',
// },
{
type: 'datePicker',
label: '时间段',
dateType: 'daterange', // datetimerange
// format: 'yyyy-MM-dd HH:mm:ss',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
defaultTime: ['00:00:00', '23:59:59'],
param: 'checkTime',
// width: 350,
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
// {
// type: this.$auth.hasPermi(
// 'base:quality-inspection-record:create'
// )
// ? 'button'
// : '',
// btnName: '',
// name: 'add',
// plain: true,
// color: 'success',
// },
],
pickerOptions: {
disabledDate(date) {
return date.getTime() > Date.now()
}
},
// tableBtn: [
// this.$auth.hasPermi('base:quality-inspection-record:update')
// ? {
// type: 'edit',
// btnName: '',
// }
// : undefined,
// this.$auth.hasPermi('base:quality-inspection-record:delete')
// ? {
// type: 'delete',
// btnName: '',
// }
// : undefined,
// ].filter((v) => v),
// tableProps: [
// {
// prop: 'createTime',
// label: '',
// fixed: true,
// width: 180,
// filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
// },
// {
// // width: 128,
// prop: 'inspectionDetContent',
// label: '',
// },
// {
// // width: 128,
// prop: 'lineName',
// label: '线',
// },
// {
// // width: 128,
// prop: 'checkPerson',
// label: '',
// },
// {
// // width: 160,
// prop: 'checkTime',
// label: '',
// filter: (val) =>
// val != null ? moment(val).format('yyyy-MM-DD HH:mm:ss') : '-',
// },
// {
// width: 90,
// prop: 'source',
// label: '',
// filter: (val) => ['', '', ''][val],
// },
// ],
// keys, queryParams pageNo, pageSize key
// searchBarKeys: ['inspectionDetContent', 'checkTime', 'productionLineId'],
// form: {
// id: undefined,
// inspectionDetId: undefined,
// inspectionDetContent: undefined,
// productionLineId: undefined,
// sectionId: undefined,
// checkPerson: undefined,
// checkTime: undefined,
// source: undefined,
// explainText: undefined,
// remark: undefined,
// },
//
dataForm: {
// workOrderIdList:undefined,
// productionId: undefined,
// startTime: undefined,
// endTime: undefined,
reportTime: [],
reportType:4,
// productionLineId: null,
},
};
},
created() {
// this.getProductLineList();
},
mounted() {
// if (this.$route.params.startTime && this.$route.params.endTime) {
// this.searchBarFormConfig[0].defaultSelect = [
// this.$route.params.startTime,
// this.$route.params.endTime,
// ];
// this.queryParams.param = {};
// this.$set(
// this.queryParams.param,
// 'startTime',
// this.$route.params.startTime
// );
// this.$set(this.queryParams.param, 'endTime', this.$route.params.endTime);
// } else {
// this.searchBarFormConfig[0].defaultSelect = [];
// }
this.getDataList()
},
methods: {
timeSelect() {
// switch (this.queryParams.timeDim) {
// case '1':
// if (this.timeValue[1] - this.timeValue[0] > 7 * 24 * 3600000) {
// this.$modal.msgError('7')
// this.timeValue = []
// }
// break
// case '2':
if (this.monthValue[1] - this.monthValue[0] > 729 * 24 * 3600000) {
this.$modal.msgError('最大时间范围为24个月请重新选择')//
this.monthValue = []
}
// break
// case '4':
// if (this.monthValue[1] - this.monthValue[0] > 729 * 24 * 3600000) {
// this.$modal.msgError('24')//
// this.monthValue = []
// }
// break
// default:
},
transformTime(timeStamp) {//
let year = moment(timeStamp).format('YYYY')
let month = moment(timeStamp).format('MM')
let newData = moment(new Date(year, month, 0)).format('YYYY-MM-DD') + ' 23:59:59'
let value = newData
console.log(value);
return value
},
// selectTime() {
// switch (this.queryParams.type) {
// case 1:
// this.queryParams.searchTime = this.monthValue
// break;
// case 2:
// this.queryParams.searchTime = this.weekValue
// break;
// default:
// this.queryParams.searchTime = this.dateValue
// }
// },
editDataList() {
this.disabled = false
this.isSave = true
},
async saveDataList() {
let obj = {}
this.list.forEach((ele, index) => {
if (ele.det === false) {
this.list[index].lineId = ''
this.list[index].remark = this.remark
obj = ele
this.list.splice(index,1)
}
})
let updateArr = this.list
// console.log(JSON.stringify(updateArr[1]))
const result = await Promise.all([
await updateSumProductionDataList(obj),
await updateProductionDataList(updateArr),
]);
if (result[0] == true && result[1] == true) {
console.log(res)
this.disabled = true
this.isSave = false
this.getDataList()
} else {
this.$modal.msgError('更新失败');
}
},
async getDataList() {
if (this.monthValue.length > 0) {
console.log(this.monthValue)
this.dataForm.reportTime[0] = this.transformTime(this.monthValue[0])
// this.queryParams.startTime = this.monthValue[0]
this.dataForm.reportTime[1] = this.transformTime(this.monthValue[1])
this.timeTips = moment(this.monthValue[0]).format('YYYY-MM-DD') + ' - ' + moment(this.monthValue[1]).format('YYYY-MM-DD')
console.log(this.timeTips);
} else {
// this.$modal.msgError('')
// return false
}
console.log(this.dataForm);
const res = await this.$axios({
url: '/base/report-auto-production/page',
method: 'get',
params: this.dataForm
})
console.log(res)
// let sum = undefined
// res.data.list.forEach((ele, index) => {
// if (ele.det === false) {
// sum = res.data.list.splice(index, 1)
// }
// })
res.data.list.forEach((ele,index) => {
if (ele.det === false) {
res.data.list[index].lineId = '合计'
this.remark = res.data.list[index].remark
}
});
this.list = res.data.list
},
},
};
</script>

View File

@ -0,0 +1,37 @@
<template>
<div class="tableInner">
<el-input v-model="list[itemProp]" @blur="changeInput" />
</div>
</template>
<script>
export default {
name: 'InputArea',
props: {
injectData: {
type: Object,
default: () => ({})
},
itemProp: {
type: String
}
},
data() {
return {
list: this.injectData
}
},
methods: {
changeInput() {
console.log(this.list)
this.$emit('emitData', this.list)
}
}
}
</script>
<style>
.tableInner .el-input__inner {
border: none;
padding: 0;
height: 33px;
}
</style>

View File

@ -0,0 +1,532 @@
<!--
* @Author: zhp
* @Date: 2023-12-12 13:45:25
* @LastEditTime: 2023-12-13 16:55:27
* @LastEditors: zhp
* @Description:
-->
<template>
<div class="app-container">
<el-form :inline="true" :model="dataForm" class="demo-form-inline">
<el-form-item>
<el-date-picker v-model="monthValue" type="monthrange" range-separator="" start-placeholder="开始日期"
end-placeholder="结束日期" value-format="timestamp" :clearable="false" :picker-options="pickerOptions"
size="small" style='width:350px;' @change="timeSelect">
</el-date-picker>
</el-form-item>
<el-button type="primary" @click="getDataList()">查询</el-button>
<el-button type="primary" icon="el-icon-edit-outline" @click="editDataList()">编辑</el-button>
<el-button v-if="isSave" type="success" @click="saveDataList()">保存</el-button>
</el-form>
<el-table :data="list" style="width: 100%" :header-cell-style="{
background: '#F2F4F9',
color: '#606266'
}">
<el-table-column :label="'许昌安彩月成品生产汇总' + timeTips" align="center">
<el-table-column prop="glassType" label="品种">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.glassType" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.glassType }} </span>
</template>
</el-table-column>
<el-table-column label="规格">
<el-table-column prop="inputNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputNow" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputNow }} </span>
</template>
</el-table-column>
<el-table-column prop="inputHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputHis" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputHis }} </span>
</template>
</el-table-column>
<el-table-column prop="inputTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputTrend" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="完成良品产量">
<el-table-column prop="goodProductNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductNow" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductNow }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductHis" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductHis }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="原片漏检率">
<el-table-column prop="missCheckNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckNow" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.missCheckNow }} </span>
</template>
</el-table-column>
<el-table-column prop="missCheckHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckHis" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.missCheckHis }} </span>
</template>
</el-table-column>
<el-table-column prop="missCheckTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.missCheckTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="综合良品率">
<el-table-column prop="goodProductPassNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassNow" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassNow }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductPassHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassHis" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassHis }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductPassTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassTrend }} </span>
</template>
</el-table-column>
</el-table-column>
</el-table-column>
<div style="height: 50px;" class="remark" slot="append">
<h3 style="float: left;text-align: center;margin-left: 20px;">备注</h3>
<el-input :disabled="disabled" style="float:right;width: 96%;margin-top: 8px;" v-model="remark"></el-input>
</div>
</el-table>
<!-- 搜索工作栏 -->
<!-- <SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" @headBtnClick="handleSearchBarBtnClick" /> -->
<!-- 列表 -->
<!-- <base-table :table-props="tableProps" :page="1" :limit="10" :summary-method="getSummaries" show-summary
:table-data="list">
</base-table> -->
<!-- 分页组件 -->
<!-- <pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" /> -->
</div>
</template>
<script>
import {
getAutoDeliveDataList,
updateProductionDataList,
updateSumProductionDataList
} from '@/api/report/production';
// import Editor from '@/components/Editor';
import moment from 'moment';
// import DialogForm from './dialogForm.vue';
// import basicPageMixin from '@/mixins/lb/basicPageMixin';
const tableProps = [
{
// width: 128,
prop: 'lineId',
label: '生产线',
},
{
// width: 128,
prop: '',
label: '投入数㎡',
align: 'center',
children: [
{
prop: 'inputNow',
label: '本周'
},
{
prop: 'inputHis',
label: '上周'
},
{
prop: 'inputTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '完成良品产量',
align: 'center',
children: [
{
prop: 'goodProductNow',
label: '本周'
},
{
prop: 'goodProductHis',
label: '上周'
},
{
prop: 'goodProductTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '原片漏检率',
align: 'center',
children: [
{
prop: 'missCheckNow',
label: '本周'
},
{
prop: 'missCheckHis',
label: '上周'
},
{
prop: 'missCheckTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '综合良品率',
align: 'center',
children: [
{
prop: 'goodProductPassNow',
label: '本周'
},
{
prop: 'goodProductPassHis',
label: '上周'
},
{
prop: 'goodProductPassTrend',
label: '增减'
}
]
},
];
export default {
name: 'statisticalData',
// components: {
// DialogForm,
// },
// mixins: [basicPageMixin],
data() {
return {
list: [],
remark: '',
monthValue:[],
// dynamicProps: [],
tableProps,
// dataForm: {
// reportTime:undefined
// },
isSave:false,
disabled: true,
sumArr: [],
timeTips:'',
searchBarFormConfig: [
// {
// type: 'select',
// label: '',
// placeholder: '',
// param: 'workOrderIdList',
// selectOptions: [],
// multiple: true,
// labelField: 'name',
// valueField: 'id',
// defaultSelect: []
// },
// {
// type: 'select',
// label: '',
// placeholder: '',
// param: 'productionId',
// selectOptions: [],
// },
// {
// type: 'input',
// label: '',
// placeholder: '',
// param: 'inspectionDetContent',
// },
{
type: 'datePicker',
label: '时间段',
dateType: 'daterange', // datetimerange
// format: 'yyyy-MM-dd HH:mm:ss',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
defaultTime: ['00:00:00', '23:59:59'],
param: 'checkTime',
// width: 350,
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
// {
// type: this.$auth.hasPermi(
// 'base:quality-inspection-record:create'
// )
// ? 'button'
// : '',
// btnName: '',
// name: 'add',
// plain: true,
// color: 'success',
// },
],
pickerOptions: {
disabledDate(date) {
return date.getTime() > Date.now()
}
},
// tableBtn: [
// this.$auth.hasPermi('base:quality-inspection-record:update')
// ? {
// type: 'edit',
// btnName: '',
// }
// : undefined,
// this.$auth.hasPermi('base:quality-inspection-record:delete')
// ? {
// type: 'delete',
// btnName: '',
// }
// : undefined,
// ].filter((v) => v),
// tableProps: [
// {
// prop: 'createTime',
// label: '',
// fixed: true,
// width: 180,
// filter: (val) => moment(val).format('yyyy-MM-DD HH:mm:ss'),
// },
// {
// // width: 128,
// prop: 'inspectionDetContent',
// label: '',
// },
// {
// // width: 128,
// prop: 'lineName',
// label: '线',
// },
// {
// // width: 128,
// prop: 'checkPerson',
// label: '',
// },
// {
// // width: 160,
// prop: 'checkTime',
// label: '',
// filter: (val) =>
// val != null ? moment(val).format('yyyy-MM-DD HH:mm:ss') : '-',
// },
// {
// width: 90,
// prop: 'source',
// label: '',
// filter: (val) => ['', '', ''][val],
// },
// ],
// keys, queryParams pageNo, pageSize key
// searchBarKeys: ['inspectionDetContent', 'checkTime', 'productionLineId'],
// form: {
// id: undefined,
// inspectionDetId: undefined,
// inspectionDetContent: undefined,
// productionLineId: undefined,
// sectionId: undefined,
// checkPerson: undefined,
// checkTime: undefined,
// source: undefined,
// explainText: undefined,
// remark: undefined,
// },
//
dataForm: {
// pageSize: 100,
// pageNo:1,
// workOrderIdList:undefined,
// productionId: undefined,
// startTime: undefined,
// endTime: undefined,
reportTime: [],
// reportType:4,
// productionLineId: null,
},
};
},
created() {
// this.getProductLineList();
},
mounted() {
// if (this.$route.params.startTime && this.$route.params.endTime) {
// this.searchBarFormConfig[0].defaultSelect = [
// this.$route.params.startTime,
// this.$route.params.endTime,
// ];
// this.queryParams.param = {};
// this.$set(
// this.queryParams.param,
// 'startTime',
// this.$route.params.startTime
// );
// this.$set(this.queryParams.param, 'endTime', this.$route.params.endTime);
// } else {
// this.searchBarFormConfig[0].defaultSelect = [];
// }
this.getDataList()
},
methods: {
timeSelect() {
// switch (this.queryParams.timeDim) {
// case '1':
// if (this.timeValue[1] - this.timeValue[0] > 7 * 24 * 3600000) {
// this.$modal.msgError('7')
// this.timeValue = []
// }
// break
// case '2':
if (this.monthValue[1] - this.monthValue[0] > 729 * 24 * 3600000) {
this.$modal.msgError('最大时间范围为24个月请重新选择')//
this.monthValue = []
}
// break
// case '4':
// if (this.monthValue[1] - this.monthValue[0] > 729 * 24 * 3600000) {
// this.$modal.msgError('24')//
// this.monthValue = []
// }
// break
// default:
},
transformTime(timeStamp) {//
let year = moment(timeStamp).format('YYYY')
let month = moment(timeStamp).format('MM')
let newData = moment(new Date(year, month, 0)).format('YYYY-MM-DD') + ' 23:59:59'
let value = newData
console.log(value);
return value
},
// selectTime() {
// switch (this.queryParams.type) {
// case 1:
// this.queryParams.searchTime = this.monthValue
// break;
// case 2:
// this.queryParams.searchTime = this.weekValue
// break;
// default:
// this.queryParams.searchTime = this.dateValue
// }
// },
editDataList() {
this.disabled = false
this.isSave = true
},
async saveDataList() {
let obj = {}
this.list.forEach((ele, index) => {
if (ele.det === false) {
this.list[index].lineId = ''
this.list[index].remark = this.remark
obj = ele
this.list.splice(index,1)
}
})
let updateArr = this.list
// console.log(JSON.stringify(updateArr[1]))
const result = await Promise.all([
await updateSumProductionDataList(obj),
await updateProductionDataList(updateArr),
]);
if (result[0] == true && result[1] == true) {
console.log(res)
this.disabled = true
this.isSave = false
this.getDataList()
} else {
this.$modal.msgError('更新失败');
}
},
async getDataList() {
if (this.monthValue.length > 0) {
console.log(this.monthValue)
this.dataForm.reportTime[0] = this.transformTime(this.monthValue[0])
// this.queryParams.startTime = this.monthValue[0]
this.dataForm.reportTime[1] = this.transformTime(this.monthValue[1])
this.timeTips = moment(this.monthValue[0]).format('YYYY-MM-DD') + ' - ' + moment(this.monthValue[1]).format('YYYY-MM-DD')
console.log(this.timeTips);
} else {
// this.$modal.msgError('')
// return false
}
console.log(this.dataForm);
const res = await this.$axios({
url: 'base/report-auto-delive/listPlus',
method: 'get',
params: this.dataForm
})
console.log(res)
// let sum = undefined
// res.data.list.forEach((ele, index) => {
// if (ele.det === false) {
// sum = res.data.list.splice(index, 1)
// }
// })
// res.data.forEach((ele,index) => {
// if (ele.det === false) {
// res.data.list[index].lineId = ''
// this.remark = res.data.list[index].remark
// }
// });
this.list = res.data
},
},
};
</script>

View File

@ -0,0 +1,37 @@
<template>
<div class="tableInner">
<el-input v-model="list[itemProp]" @blur="changeInput" />
</div>
</template>
<script>
export default {
name: 'InputArea',
props: {
injectData: {
type: Object,
default: () => ({})
},
itemProp: {
type: String
}
},
data() {
return {
list: this.injectData
}
},
methods: {
changeInput() {
console.log(this.list)
this.$emit('emitData', this.list)
}
}
}
</script>
<style>
.tableInner .el-input__inner {
border: none;
padding: 0;
height: 33px;
}
</style>

View File

@ -0,0 +1,455 @@
<!--
* @Author: zhp
* @Date: 2023-12-12 13:45:25
* @LastEditTime: 2023-12-13 15:17:39
* @LastEditors: zhp
* @Description:
-->
<template>
<div class="app-container">
<el-form :inline="true" :model="dataForm" class="demo-form-inline">
<el-form-item>
<el-date-picker v-model="weekValue1" type="week" format="yyyy 第 WW 周" style='width:170px;'
:picker-options="pickerOptionsWeek" @change="startWeek" :clearable="false" size="small" placeholder="选择周">
</el-date-picker>-
<el-date-picker v-model="weekValue2" type="week" format="yyyy 第 WW 周" :picker-options="pickerOptionsWeek"
style='width:170px;' @change="endWeek" :clearable="false" size="small" placeholder="选择周">
</el-date-picker>
</el-form-item>
<el-button type="primary" @click="getDataList()">查询</el-button>
<el-button type="primary" icon="el-icon-edit-outline" @click="editDataList()">编辑</el-button>
<el-button v-if="isSave" type="success" @click="saveDataList()">保存</el-button>
</el-form>
<el-table :data="list" style="width: 100%" :header-cell-style="{
background: '#F2F4F9',
color: '#606266'
}">
<el-table-column :label="'许昌安彩月成品生产汇总' + timeTips" align="center">
<el-table-column prop="lineId" label="生产线">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.lineId" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.lineId }} </span>
</template>
</el-table-column>
<el-table-column label="投入数㎡">
<el-table-column prop="inputNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputNow" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputNow }} </span>
</template>
</el-table-column>
<el-table-column prop="inputHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputHis" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputHis }} </span>
</template>
</el-table-column>
<el-table-column prop="inputTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputTrend" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="完成良品产量">
<el-table-column prop="goodProductNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductNow" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductNow }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductHis" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductHis }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="原片漏检率">
<el-table-column prop="missCheckNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckNow" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.missCheckNow }} </span>
</template>
</el-table-column>
<el-table-column prop="missCheckHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckHis" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.missCheckHis }} </span>
</template>
</el-table-column>
<el-table-column prop="missCheckTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.missCheckTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="综合良品率">
<el-table-column prop="goodProductPassNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassNow" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassNow }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductPassHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassHis" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassHis }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductPassTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassTrend }} </span>
</template>
</el-table-column>
</el-table-column>
</el-table-column>
<div style="height: 50px;" class="remark" slot="append">
<h3 style="float: left;text-align: center;margin-left: 20px;">备注</h3>
<el-input :disabled="disabled" style="float:right;width: 96%;margin-top: 8px;" v-model="remark"></el-input>
</div>
</el-table>
<!-- 搜索工作栏 -->
<!-- <SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" @headBtnClick="handleSearchBarBtnClick" /> -->
<!-- 列表 -->
<!-- <base-table :table-props="tableProps" :page="1" :limit="10" :summary-method="getSummaries" show-summary
:table-data="list">
</base-table> -->
<!-- 分页组件 -->
<!-- <pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" /> -->
</div>
</template>
<script>
import {
getProductionDataList,
updateProductionDataList,
updateSumProductionDataList
} from '@/api/report/production';
// import Editor from '@/components/Editor';
import moment from 'moment';
// import DialogForm from './dialogForm.vue';
// import basicPageMixin from '@/mixins/lb/basicPageMixin';
const tableProps = [
{
// width: 128,
prop: 'lineId',
label: '生产线',
},
{
// width: 128,
prop: '',
label: '投入数㎡',
align: 'center',
children: [
{
prop: 'inputNow',
label: '本周'
},
{
prop: 'inputHis',
label: '上周'
},
{
prop: 'inputTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '完成良品产量',
align: 'center',
children: [
{
prop: 'goodProductNow',
label: '本周'
},
{
prop: 'goodProductHis',
label: '上周'
},
{
prop: 'goodProductTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '原片漏检率',
align: 'center',
children: [
{
prop: 'missCheckNow',
label: '本周'
},
{
prop: 'missCheckHis',
label: '上周'
},
{
prop: 'missCheckTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '综合良品率',
align: 'center',
children: [
{
prop: 'goodProductPassNow',
label: '本周'
},
{
prop: 'goodProductPassHis',
label: '上周'
},
{
prop: 'goodProductPassTrend',
label: '增减'
}
]
},
];
export default {
name: 'statisticalData',
// components: {
// DialogForm,
// },
// mixins: [basicPageMixin],
data() {
return {
list: [],
remark:'',
// dynamicProps: [],
tableProps,
timeTips:'',
// dataForm: {
// reportTime:undefined
// },
isSave:false,
disabled: true,
sumArr: [],
weekValue1: null,//24
weekValue2: null,
searchBarFormConfig: [
// {
// type: 'select',
// label: '',
// placeholder: '',
// param: 'workOrderIdList',
// selectOptions: [],
// multiple: true,
// labelField: 'name',
// valueField: 'id',
// defaultSelect: []
// },
// {
// type: 'select',
// label: '',
// placeholder: '',
// param: 'productionId',
// selectOptions: [],
// },
// {
// type: 'input',
// label: '',
// placeholder: '',
// param: 'inspectionDetContent',
// },
{
type: 'datePicker',
label: '时间段',
dateType: 'daterange', // datetimerange
// format: 'yyyy-MM-dd HH:mm:ss',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
defaultTime: ['00:00:00', '23:59:59'],
param: 'checkTime',
// width: 350,
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
// {
// type: this.$auth.hasPermi(
// 'base:quality-inspection-record:create'
// )
// ? 'button'
// : '',
// btnName: '',
// name: 'add',
// plain: true,
// color: 'success',
// },
],
pickerOptionsWeek: {
disabledDate(time) {
let day = Date.now()
let limitTime = moment(day).day(-1)
return time.getTime() > new Date(limitTime).getTime()
}
},
dataForm: {
// workOrderIdList:undefined,
// productionId: undefined,
// startTime: undefined,
// endTime: undefined,
reportTime: [],
reportType:3
// productionLineId: null,
},
};
},
created() {
// this.getProductLineList();
},
mounted() {
// if (this.$route.params.startTime && this.$route.params.endTime) {
// this.searchBarFormConfig[0].defaultSelect = [
// this.$route.params.startTime,
// this.$route.params.endTime,
// ];
// this.queryParams.param = {};
// this.$set(
// this.queryParams.param,
// 'startTime',
// this.$route.params.startTime
// );
// this.$set(this.queryParams.param, 'endTime', this.$route.params.endTime);
// } else {
// this.searchBarFormConfig[0].defaultSelect = [];
// }
this.getDataList()
},
methods: {
startWeek() {
if (this.weekValue1 && this.weekValue2) {
let a = new Date(this.weekValue1).getTime()
let b = new Date(this.weekValue2).getTime()
if (a > b) {
this.$modal.msgError('开始时间不能晚于结束时间,请重新选择')
this.weekValue1 = null
return false
}
if (b - a > 167 * 24 * 3600000) {
this.$modal.msgError('最大时间范围为24周请重新选择')
this.weekValue1 = null
return false
}
}
},
endWeek() {
if (this.weekValue1 && this.weekValue2) {
let a = new Date(this.weekValue1).getTime()
let b = new Date(this.weekValue2).getTime()
if (a > b) {
this.$modal.msgError('结束时间不能早于开始时间,请重新选择')
this.weekValue2 = null
return false
}
if (b - a > 167 * 24 * 3600000) {
this.$modal.msgError('最大时间范围为24周请重新选择')
this.weekValue2 = null
return false
}
}
},
editDataList() {
this.disabled = false
this.isSave = true
},
async saveDataList() {
let obj = {}
this.list.forEach((ele, index) => {
if (ele.det === false) {
this.list[index].lineId = ''
this.list[index].remark = this.remark
obj = ele
this.list.splice(index,1)
}
})
let updateArr = this.list
// console.log(JSON.stringify(updateArr[1]))
const result = await Promise.all([
await updateSumProductionDataList(obj),
await updateProductionDataList(updateArr),
]);
if (result[0] == true && result[1] == true) {
console.log(res)
this.disabled = true
this.isSave = false
this.getDataList()
} else {
this.$modal.msgError('更新失败');
}
},
async getDataList() {
if (this.weekValue1 && this.weekValue2) {
this.dataForm.reportTime[0] = moment(this.weekValue1).day(0).format('YYYY-MM-DD') + ' 00:00:00'
// this.queryParams.startTime = this.monthValue[0]
this.dataForm.reportTime[1] = moment(this.weekValue2).day(6).format('YYYY-MM-DD') + ' 23:59:59'
this.timeTips = moment(this.weekValue1).day(0).format('YYYY-MM-DD') + ' - ' + moment(this.weekValue2).day(0).format('YYYY-MM-DD')
} else {
}
this.loading = true;
//
const res = await this.$axios({
url: '/base/report-auto-production/page',
method: 'get',
params: this.dataForm
})
// console.log(this.queryParams);
console.log(res)
// let sum = undefined
// res.data.list.forEach((ele, index) => {
// if (ele.det === false) {
// sum = res.data.list.splice(index, 1)
// }
// })
res.data.list.forEach((ele,index) => {
if (ele.det === false) {
res.data.list[index].lineId = '合计'
this.remark = res.data.list[index].remark
}
});
this.list = res.data.list
},
},
};
</script>

View File

@ -0,0 +1,37 @@
<template>
<div class="tableInner">
<el-input v-model="list[itemProp]" @blur="changeInput" />
</div>
</template>
<script>
export default {
name: 'InputArea',
props: {
injectData: {
type: Object,
default: () => ({})
},
itemProp: {
type: String
}
},
data() {
return {
list: this.injectData
}
},
methods: {
changeInput() {
console.log(this.list)
this.$emit('emitData', this.list)
}
}
}
</script>
<style>
.tableInner .el-input__inner {
border: none;
padding: 0;
height: 33px;
}
</style>

View File

@ -0,0 +1,459 @@
<!--
* @Author: zhp
* @Date: 2023-12-12 13:45:25
* @LastEditTime: 2023-12-13 15:16:03
* @LastEditors: zhp
* @Description:
-->
<template>
<div class="app-container">
<el-form :inline="true" :model="dataForm" class="demo-form-inline">
<el-form-item>
<el-date-picker style='width:170px;' v-model="yearValue1" type="year" :picker-options="pickerOptions"
value-format="timestamp" placeholder="选择年" @change="startYear" size="small" :clearable="false">
</el-date-picker>-
<el-date-picker style='width:170px;' v-model="yearValue2" type="year" :picker-options="pickerOptions"
value-format="timestamp" placeholder="选择年" @change="endYear" size="small" :clearable="false">
</el-date-picker>
</el-form-item>
<el-button type="primary" @click="getDataList()">查询</el-button>
<el-button type="primary" icon="el-icon-edit-outline" @click="editDataList()">编辑</el-button>
<el-button v-if="isSave" type="success" @click="saveDataList()">保存</el-button>
</el-form>
<el-table :data="list" style="width: 100%" :header-cell-style="{
background: '#F2F4F9',
color: '#606266'
}">
<el-table-column :label="'许昌安彩月成品生产汇总' + timeTips" align="center">
<el-table-column prop="lineId" label="生产线">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.lineId" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.lineId }} </span>
</template>
</el-table-column>
<el-table-column label="投入数㎡">
<el-table-column prop="inputNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputNow" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputNow }} </span>
</template>
</el-table-column>
<el-table-column prop="inputHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputHis" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputHis }} </span>
</template>
</el-table-column>
<el-table-column prop="inputTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.inputTrend" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.inputTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="完成良品产量">
<el-table-column prop="goodProductNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductNow" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductNow }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductHis" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductHis }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="原片漏检率">
<el-table-column prop="missCheckNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckNow" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.missCheckNow }} </span>
</template>
</el-table-column>
<el-table-column prop="missCheckHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckHis" :disabled="disabled"></el-input>
<span v-else>{{ scope.row.missCheckHis }} </span>
</template>
</el-table-column>
<el-table-column prop="missCheckTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.missCheckTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.missCheckTrend }} </span>
</template>
</el-table-column>
</el-table-column>
<el-table-column label="综合良品率">
<el-table-column prop="goodProductPassNow" label="本周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassNow" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassNow }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductPassHis" label="上周">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassHis" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassHis }} </span>
</template>
</el-table-column>
<el-table-column prop="goodProductPassTrend" label="增减">
<template slot-scope="scope">
<el-input v-if="scope.row.det === true" v-model="scope.row.goodProductPassTrend" :disabled="disabled">
</el-input>
<span v-else>{{ scope.row.goodProductPassTrend }} </span>
</template>
</el-table-column>
</el-table-column>
</el-table-column>
<div style="height: 50px;" class="remark" slot="append">
<h3 style="float: left;text-align: center;margin-left: 20px;">备注</h3>
<el-input :disabled="disabled" style="float:right;width: 96%;margin-top: 8px;" v-model="remark"></el-input>
</div>
</el-table>
<!-- 搜索工作栏 -->
<!-- <SearchBar :formConfigs="searchBarFormConfig" ref="search-bar" @headBtnClick="handleSearchBarBtnClick" /> -->
<!-- 列表 -->
<!-- <base-table :table-props="tableProps" :page="1" :limit="10" :summary-method="getSummaries" show-summary
:table-data="list">
</base-table> -->
<!-- 分页组件 -->
<!-- <pagination
v-show="total > 0"
:total="total"
:page.sync="queryParams.pageNo"
:limit.sync="queryParams.pageSize"
@pagination="getList" /> -->
</div>
</template>
<script>
import {
getProductionDataList,
updateProductionDataList,
updateSumProductionDataList
} from '@/api/report/production';
// import Editor from '@/components/Editor';
import moment from 'moment';
// import DialogForm from './dialogForm.vue';
// import basicPageMixin from '@/mixins/lb/basicPageMixin';
const tableProps = [
{
// width: 128,
prop: 'lineId',
label: '生产线',
},
{
// width: 128,
prop: '',
label: '投入数㎡',
align: 'center',
children: [
{
prop: 'inputNow',
label: '本周'
},
{
prop: 'inputHis',
label: '上周'
},
{
prop: 'inputTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '完成良品产量',
align: 'center',
children: [
{
prop: 'goodProductNow',
label: '本周'
},
{
prop: 'goodProductHis',
label: '上周'
},
{
prop: 'goodProductTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '原片漏检率',
align: 'center',
children: [
{
prop: 'missCheckNow',
label: '本周'
},
{
prop: 'missCheckHis',
label: '上周'
},
{
prop: 'missCheckTrend',
label: '增减'
}
]
},
{
// width: 128,
prop: '',
label: '综合良品率',
align: 'center',
children: [
{
prop: 'goodProductPassNow',
label: '本周'
},
{
prop: 'goodProductPassHis',
label: '上周'
},
{
prop: 'goodProductPassTrend',
label: '增减'
}
]
},
];
export default {
name: 'statisticalData',
// components: {
// DialogForm,
// },
// mixins: [basicPageMixin],
data() {
return {
list: [],
remark: '',
timeTips:'',
yearValue1: null,//10
yearValue2: null,
// dynamicProps: [],
tableProps,
dataForm: {
// workOrderIdList:undefined,
// productionId: undefined,
// startTime: undefined,
// endTime: undefined,
reportTime: [],
reportType: 5
// productionLineId: null,
},
// dataForm: {
// reportTime:undefined
// },
isSave:false,
disabled: true,
sumArr: [],
pickerOptions: {
disabledDate(date) {
return date.getTime() > Date.now()
}
},
searchBarFormConfig: [
// {
// type: 'select',
// label: '',
// placeholder: '',
// param: 'workOrderIdList',
// selectOptions: [],
// multiple: true,
// labelField: 'name',
// valueField: 'id',
// defaultSelect: []
// },
// {
// type: 'select',
// label: '',
// placeholder: '',
// param: 'productionId',
// selectOptions: [],
// },
// {
// type: 'input',
// label: '',
// placeholder: '',
// param: 'inspectionDetContent',
// },
{
type: 'datePicker',
label: '时间段',
dateType: 'daterange', // datetimerange
// format: 'yyyy-MM-dd HH:mm:ss',
format: 'yyyy-MM-dd HH:mm:ss',
valueFormat: 'yyyy-MM-dd HH:mm:ss',
rangeSeparator: '-',
startPlaceholder: '开始日期',
endPlaceholder: '结束日期',
defaultTime: ['00:00:00', '23:59:59'],
param: 'checkTime',
// width: 350,
},
{
type: 'button',
btnName: '查询',
name: 'search',
color: 'primary',
},
// {
// type: this.$auth.hasPermi(
// 'base:quality-inspection-record:create'
// )
// ? 'button'
// : '',
// btnName: '',
// name: 'add',
// plain: true,
// color: 'success',
// },
],
};
},
created() {
// this.getProductLineList();
},
mounted() {
// if (this.$route.params.startTime && this.$route.params.endTime) {
// this.searchBarFormConfig[0].defaultSelect = [
// this.$route.params.startTime,
// this.$route.params.endTime,
// ];
// this.queryParams.param = {};
// this.$set(
// this.queryParams.param,
// 'startTime',
// this.$route.params.startTime
// );
// this.$set(this.queryParams.param, 'endTime', this.$route.params.endTime);
// } else {
// this.searchBarFormConfig[0].defaultSelect = [];
// }
this.getDataList()
},
methods: {
startYear() {
if (this.yearValue2 && this.yearValue2 < this.yearValue1) {
this.$modal.msgError('开始时间不能晚于结束时间,请重新选择')
this.yearValue1 = null
return false
}
if (this.yearValue1 && this.yearValue2) {
if (this.yearValue2 - this.yearValue1 > 10 * 365 * 24 * 3600000) {
this.$modal.msgError('最大时间范围为10年请重新选择')
this.yearValue1 = null
return false
}
}
},
endYear() {
if (this.yearValue2 && this.yearValue2 < this.yearValue1) {
this.$modal.msgError('结束时间不能早于开始时间,请重新选择')
this.yearValue2 = null
return false
}
if (this.yearValue1 && this.yearValue2) {
if (this.yearValue2 - this.yearValue1 > 10 * 365 * 24 * 3600000) {
this.$modal.msgError('最大时间范围为10年请重新选择')
this.yearValue2 = null
return false
}
}
},
editDataList() {
this.disabled = false
this.isSave = true
},
async saveDataList() {
let obj = {}
this.list.forEach((ele, index) => {
if (ele.det === false) {
this.list[index].lineId = ''
this.list[index].remark = this.remark
obj = ele
this.list.splice(index,1)
}
})
let updateArr = this.list
// console.log(JSON.stringify(updateArr[1]))
const result = await Promise.all([
await updateSumProductionDataList(obj),
await updateProductionDataList(updateArr),
]);
if (result[0] == true && result[1] == true) {
console.log(res)
this.disabled = true
this.isSave = false
this.getDataList()
} else {
this.$modal.msgError('更新失败');
}
},
transformYear(timeStamp) {//
let year = moment(timeStamp).format('YYYY')
let newData = year + '-12-31 23:59:59'
let value = newData
return value
},
async getDataList() {
if (this.yearValue1 && this.yearValue2) {
if (this.yearValue2 < this.yearValue1) {
this.$modal.msgError('结束时间不能早于开始时间')
return false
} else {
this.dataForm.reportTime[0] = this.transformYear(this.yearValue1)
this.dataForm.reportTime[1] = this.transformYear(this.yearValue2)
this.timeTips = this.transformYear(this.yearValue1) + " - " + this.transformYear(this.yearValue1)
}
}
this.loading = true;
//
const res = await this.$axios({
url: '/base/report-auto-production/page',
method: 'get',
params: this.dataForm
})
// console.log(this.queryParams);
console.log(res)
let sum = undefined
// res.data.list.forEach((ele, index) => {
// if (ele.det === false) {
// sum = res.data.list.splice(index, 1)
// }
// })
res.data.list.forEach((ele,index) => {
if (ele.det === false) {
res.data.list[index].lineId = '合计'
this.remark = res.data.list[index].remark
}
});
this.list = res.data.list
},
},
};
</script>