From aefd598cc1ced37ff2cfed2b529dbf10bea7554c Mon Sep 17 00:00:00 2001 From: 叶松 <2217086471@qq.com> Date: 星期四, 26 十月 2023 11:31:55 +0800 Subject: [PATCH] 模具尺寸检查完成 --- web/src/views/QualityManage/DieDetection.vue | 58 +++++ web/src/views/QualityManage/components/ThreedCheck.vue | 3 web/src/views/QualityManage/components/PatternCheck.vue | 471 +++++++++++++++++++++++++++++++++++++++++++++++ web/src/api/index.js | 4 web/src/api/modules/quality.js | 34 +++ 5 files changed, 567 insertions(+), 3 deletions(-) diff --git a/web/src/api/index.js b/web/src/api/index.js index d731477..53df892 100644 --- a/web/src/api/index.js +++ b/web/src/api/index.js @@ -22,6 +22,7 @@ import Analyse from './modules/analyse'; // 数据分析模块 import Safety from './modules/safety'; // 安全管理模块 import Scan from './modules/scan'; // 扫码跳转到对应页面 +import Quality from './modules/quality'; // 质量管理界面 export default { System, @@ -44,5 +45,6 @@ Report, Analyse, Safety, - Scan + Scan, + Quality } diff --git a/web/src/api/modules/quality.js b/web/src/api/modules/quality.js new file mode 100644 index 0000000..a1a6b20 --- /dev/null +++ b/web/src/api/modules/quality.js @@ -0,0 +1,34 @@ +/** + * 质量管理 + */ + import axios from '../request'; + export default{ + /** + * 模具质量检测 + */ + + // 获取模具编号 + getMouldNumberLists: params => + axios.get('/engineering/moldQuality/getMoldNum', {params}), + // 获取模具型号 + getMuuldCodeLists: params => + axios.post('/engineering/moldQuality/getMoldCode', params), + //通过项目,模具编号,型号获取尺寸等信息 + getProjectThroughSizes: params => + axios.post('/engineering/moldQuality/getMoldByProIdAndModNumAndModCode', params), + //查询质量尺寸检查列表 + searchQulityLists: params => + axios.post('/engineering/moldQuality/findAll', params), + //添加质量尺寸 + addQulityInfo: params => + axios.post('/engineering/moldQuality/insert', params), + //修改质量尺寸 + updateQulityInfo: params => + axios.post('/engineering/moldQuality/update', params), + //质量尺寸详情 + detailsQulityInfo: params => + axios.get('/engineering/moldQuality/findOneById', {params}), + //删除质量尺寸 + deleteQulityInfo: params => + axios.get('/engineering/moldQuality/delete', {params}), + } \ No newline at end of file diff --git a/web/src/views/QualityManage/DieDetection.vue b/web/src/views/QualityManage/DieDetection.vue index 6738fe3..e5df74b 100644 --- a/web/src/views/QualityManage/DieDetection.vue +++ b/web/src/views/QualityManage/DieDetection.vue @@ -1,3 +1,57 @@ <template> - <div>模具质量检测</div> -</template> \ No newline at end of file + <div class="main"> + <div class="main_tabs"> + <el-tabs v-model="activeName" @tab-click="handleClick"> + <el-tab-pane label="模具尺寸检查" name="first"> + <pattern-check ref="pattern"></pattern-check> + </el-tab-pane> + <el-tab-pane label="三维检查" name="second"> + <threed-check ref="threed"></threed-check> + </el-tab-pane> + </el-tabs> + </div> + </div> +</template> +<script> +import PatternCheck from './components/PatternCheck.vue'//模具尺寸检查 +import ThreedCheck from './components/ThreedCheck.vue'//三维检查 +export default { + components:{ + PatternCheck, + ThreedCheck, + }, + data(){ + return{ + activeName:'first' + } + }, + mounted(){ + this.$refs.pattern.searchButtonInfo(true); + this.$refs.pattern.getAllPersons(); + }, + methods:{ + //切换界面 + handleClick(tab){ + switch(tab.name){ + case 'second': + this.$refs.threed.searchButtonInfo(true); + this.$refs.threed.getAllPersons(); + break; + default: + this.$refs.pattern.searchButtonInfo(true); + this.$refs.pattern.getAllPersons(); + } + }, + } +} +</script> +<style scoped lang="scss"> +@import'@/style/layout-main.scss'; +/deep/ .el-tabs__content{ + position: static; +} + +/deep/.main { + background: none; +} +</style> \ No newline at end of file diff --git a/web/src/views/QualityManage/components/PatternCheck.vue b/web/src/views/QualityManage/components/PatternCheck.vue new file mode 100644 index 0000000..f8a6fc8 --- /dev/null +++ b/web/src/views/QualityManage/components/PatternCheck.vue @@ -0,0 +1,471 @@ +<template> + <div class="main tabs_main" style="height:89%"> + <div class="main_header"> + <div class="header_item"> + <span class="header_label">项目名称:</span> + <el-select v-model="search.proId" placeholder="请选择项目名称" clearable @change="getNumberList"> + <el-option + v-for="item in optionsProjects" + :key="item.proId" + :label="item.proName" + :value="item.proId"> + </el-option> + </el-select> + </div> + <div class="header_item"> + <span class="header_label">模具编号:</span> + <el-select v-model="search.mouldNum" placeholder="请选择模具编号" clearable filterable> + <el-option + v-for="(item,index) in optionsMoulds" + :key="index" + :label="item.mouldNum" + :value="item.mouldNum"> + </el-option> + </el-select> + </div> + <div class="header_item"> + <span class="header_label">模具型号:</span> + <el-select v-model="search.mouldCode" placeholder="请选择模具型号" clearable> + <el-option + v-for="(item,index) in optionsCodes" + :key="index" + :label="item.mouldCode" + :value="item.mouldCode"> + </el-option> + </el-select> + </div> + <div class="header_item"> + <el-button icon="el-icon-search" v-if="showButton('search')" @click="searchButtonInfo(true)">查询</el-button> + <el-button class="search_btn" icon="el-icon-plus" v-if="showButton('insert')" @click="insertProp">新增</el-button> + </div> + </div> + <div class="main_content"> + <el-table + v-loading="loading" + :data="dataList" + height="100%"> + <el-table-column align="center" label="序号" width="60"> + <template #default="scope"> + <span>{{(pageNum - 1) * pageSize + scope.$index + 1}}</span> + </template> + </el-table-column> + <el-table-column prop="proName" label="项目名称" align="center" ></el-table-column> + <el-table-column prop="mouldNum" label="模具编号" align="center" ></el-table-column> + <el-table-column prop="mouldCode" label="模具型号" align="center" ></el-table-column> + <el-table-column prop="blockNum" label="块号" align="center" show-overflow-tooltip></el-table-column> + <el-table-column prop="size" label="尺寸" align="center" show-overflow-tooltip></el-table-column> + <el-table-column prop="turn" label="转向" align="center"></el-table-column> + <el-table-column prop="groutingHole" label="注浆孔" align="center"></el-table-column> + <el-table-column prop="content" label="检测内容" show-overflow-tooltip align="center"></el-table-column> + <el-table-column prop="checkDate" label="检查表日期" align="center"></el-table-column> + <el-table-column prop="checkUnit" label="检测单位" align="center"></el-table-column> + <el-table-column label="操作" align="center" width="150"> + <template #default="{ row }"> + <el-button class="table_btn" size="mini" v-if="showButton('update')" @click="updateProp(row)">修改</el-button> + <el-button class="delete_btn" size="mini" v-if="showButton('delete')" @click="deleteInfo(row)">删除</el-button> + </template> + </el-table-column> + </el-table> + </div> + <div class="main_footer"> + <el-pagination + background + @current-change="changePageNum" + @size-change="changePageSize" + :current-page="pageNum" + :page-sizes="[10, 20, 50, 100]" + :page-size="pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="total"> + </el-pagination> + </div> + <el-dialog + class="prop_dialog" + :title="asyncTitle === true ? '新增' :'修改'" + :close-on-click-modal="false" + :visible.sync="asyncVisible" + width="45%"> + <el-form ref="ruleForm" :model="ruleForm" :rules="rules" label-width="auto" class="rule_form"> + <el-form-item label="项目名称" prop="proId"> + <el-select v-model="ruleForm.proId" placeholder="请选择项目名称" @change="getNumberList"> + <el-option + v-for="item in optionsProjects" + :key="item.proId" + :label="item.proName" + :value="item.proId"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="模具编号" prop="mouldNum"> + <el-select v-model="ruleForm.mouldNum" placeholder="请选择模具编号" clearable @change="getSizeLists(1)"> + <el-option + v-for="(item,index) in optionsMoulds" + :key="index" + :label="item.mouldNum" + :value="item.mouldNum"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="模具型号" prop="mouldCode"> + <el-select v-model="ruleForm.mouldCode" placeholder="请选择模具型号" clearable @change="getSizeLists(2)"> + <el-option + v-for="(item,index) in optionsCodes" + :key="index" + :label="item.mouldCode" + :value="item.mouldCode"> + </el-option> + </el-select> + </el-form-item> + <el-form-item label="块号" prop="blockNum"> + <el-input v-model="ruleForm.blockNum" :size="size" clearable placeholder="请输入块号" :disabled="true"></el-input> + </el-form-item> + <el-form-item label="尺寸:" prop="size"> + <el-input v-model="ruleForm.size" :size="size" clearable placeholder="请输入尺寸" :disabled="true"></el-input> + </el-form-item> + <el-form-item label="转向:" prop="turn"> + <el-input v-model="ruleForm.turn" :size="size" clearable placeholder="请输入转向" :disabled="true"></el-input> + </el-form-item> + <el-form-item label="注浆孔:" prop="groutingHole"> + <el-input v-model="ruleForm.groutingHole" :size="size" clearable placeholder="请输入注浆孔" :disabled="true"></el-input> + </el-form-item> + <el-form-item label="检测内容:" prop="content"> + <el-input v-model="ruleForm.content" :size="size" type="textarea" :rows="3" clearable placeholder="请输入检测内容"></el-input> + </el-form-item> + <el-form-item label="上传检查表:" prop="files"> + <upload-file :file-list.sync="ruleForm.files"> + <template #info> + <span>点击上传文件,支持xls、xlsx、ppt、doc、docx、pdf格式</span> + </template> + </upload-file> + </el-form-item> + <el-form-item label="检查表日期:" prop="checkDate"> + <el-date-picker + v-model="ruleForm.checkDate" + type="date" + value-format="yyyy-MM-dd HH:mm:ss" + placeholder="请选择日期"> + </el-date-picker> + </el-form-item> + <el-form-item label="检测单位:" prop="checkUnit"> + <el-input v-model="ruleForm.checkUnit" :size="size" clearable placeholder="请输入检测单位"></el-input> + </el-form-item> + </el-form> + <div slot="footer"> + <el-button @click="asyncVisible = false">取 消</el-button> + <el-button class="submit_btn" @click="asyncTitle ? submitInsert() : submitUpdate()">提 交</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import { buttonPinia } from '../../../pinia/index'; +import UploadFile from '../../../components/uploadFile'; +import { throttle, changeSize } from '../../../plugins/public'; // 导入节流、动态切换组件尺寸方法 + export default { + components:{ + UploadFile + }, + data() { + return { + size: changeSize(), // 组件尺寸 + pageNum: 1, + pageSize: 10, + search:{},//查询条件 + total: 0, + loading: false, + dataList: [], //模具尺寸检查信息列表 + asyncTitle: true, // 对话框title 新增:true 修改:false + asyncVisible: false, // 添加 修改对话框 + ruleForm: { + files:[] + }, // 按钮表单 + rules: { + files: [{ + required: true, + message: '请选择上传文件', + trigger: ['blur','change'] + }], + proId: [{ + required: true, + message: '请选择项目名称', + trigger: 'change' + }], + mouldNum: [{ + required: true, + message: '请选择模具编号', + trigger: ['blur','change'] + }], + mouldCode: [{ + required: true, + message: '请选择模具型号', + trigger: ['change','blur'] + }], + checkDate: [{ + required: true, + message: '请选择检查表日期', + trigger: 'change' + }], + content: [{ + required: true, + message: '请输入检测内容', + trigger: 'blur' + }], + checkUnit: [{ + required: true, + message: '请输入检测单位', + trigger: 'blur' + }], + }, + optionsMoulds:[],//模具编号 + optionsCodes:[],//模具型号 + optionsProjects:[],//所有项目 + } + }, + watch: { + asyncVisible(bol) { + if(!bol) { + this.ruleForm = {}; + this.$refs.ruleForm.resetFields(); + }else{ + this.$set(this.ruleForm,'files',[]) + } + } + }, + mounted() { + const that = this; + // 根据窗口大小动态修改组件尺寸 + window.onresize = () => { + that.size = changeSize(); + } + }, + methods: { + //获得所有项目 + getAllPersons(){ + let params = { + pageNum: 1, + pageSize: 100000000 + } + this.$api.Engineer.searchProjects(params).then(res=>{ + if(res.statusMsg === 'ok'){ + this.optionsProjects = res.data.list + }else{ + this.$message.warning(res.statusMsg) + } + }) + }, + //根据项目获取编号,型号 + getNumberList(val){ + if(this.asyncVisible===false&&this.search.proId ===''){ + this.$set(this.search,'mouldNum','') + this.$set(this.search,'mouldCode','') + } + if(this.asyncTitle){ + this.$set(this.ruleForm,'mouldNum','') + this.$set(this.ruleForm,'mouldCode','') + this.$set(this.ruleForm,'blockNum','') + this.$set(this.ruleForm,'size','') + this.$set(this.ruleForm,'turn','') + this.$set(this.ruleForm,'groutingHole','') + } + this.$api.Quality.getMouldNumberLists({proId:val}).then(res=>{ + if(res.statusMsg === 'ok'){ + this.optionsMoulds = res.data + }else{ + this.$message.warning(res.statusMsg) + } + }) + this.$api.Quality.getMuuldCodeLists({proId:val}).then(res=>{ + if(res.statusMsg === 'ok'){ + this.optionsCodes = res.data + }else{ + this.$message.warning(res.statusMsg) + } + }) + }, + //获取尺寸等信息 + getSizeLists(val){ + let params + if(this.asyncTitle){ + params={ + proId:this.ruleForm.proId, + mouldNum:this.ruleForm.mouldNum, + mouldCode:this.ruleForm.mouldCode + } + }else{ + params={ + proId:this.ruleForm.proId, + mouldNum:this.ruleForm.mouldNum, + mouldCode:this.ruleForm.mouldCode + } + } + if(val===1){ + this.$set(this.ruleForm,'mouldCode','') + let obj = {proId:this.ruleForm.proId,mouldNum:this.ruleForm.mouldNum} + this.$api.Quality.getMuuldCodeLists(obj).then(res=>{ + if(res.statusMsg === 'ok'){ + this.optionsCodes = res.data + }else{ + this.$message.warning(res.statusMsg) + } + }) + }else{ + this.$api.Quality.getProjectThroughSizes(params).then(res=>{ + if(res.statusMsg === 'ok'){ + this.$set(this.ruleForm,'blockNum',res.data.mouldTypeName) + this.$set(this.ruleForm,'size',res.data.mouldSizeName) + this.$set(this.ruleForm,'turn',res.data.mouldTurnName) + this.$set(this.ruleForm,'groutingHole',res.data.groutingHolesName) + }else{ + this.$message.warning(res.statusMsg) + } + }) + } + }, + // 查询按钮列表信息 + searchButtonInfo(bol) { + if(bol) { + this.pageNum = 1; + } + let params = Object.assign({},this.search,{ + pageNum: this.pageNum, + pageSize: this.pageSize + }) + this.loading = true; + this.$api.Quality.searchQulityLists(params).then((res) => { + if(res.statusMsg === 'ok') { + this.total = res.data.total; + this.dataList = res.data.list; + }else{ + this.$message.warning(res.statusMsg) + } + this.loading = false; + }) + }, + // 新增按钮信息 + insertProp() { + this.asyncTitle = true; + this.asyncVisible = true; + }, + // 修改按钮信息 + updateProp(row) { + this.asyncTitle = false; + this.asyncVisible = true; + this.getNumberList(row.proId) + this.$api.Quality.detailsQulityInfo({id: row.id}).then(res=>{ + if(res.statusMsg === 'ok'){ + this.ruleForm = res.data + this.$set(this.ruleForm, 'files', res.data.moldQualityFileEntities.map((item, index) => { + const type = item.fileName.split('.'); + return { + id: index + 1, + type: type[type.length - 1], + name: item.fileName, + url: item.fileUrl + } + })) + res.data.tbigPaths.filter(iten=>iten.fileType ===1).map(item=>{ + this.imageList.push({ + id: this.imageList.length + 1, + url:`https://pipe.thhy-tj.com/${item.filePath}`, + name:item.filePathName, + nameImg:item.filePathName + }) + }) + }else{ + this.$message.warning(res.statusMsg) + } + }) + }, + // 删除按钮信息 + deleteInfo(row) { + this.$confirm("该操作将删除该信息,是否继续删除?", "提示", { + confirmButtonText: "确定", + cancelButtonText: "取消", + type: "warning" + }) + .then(() => { + this.$api.Quality.deleteQulityInfo({id: row.id}) + .then(res => { + if(res.statusMsg === 'ok') { + this.searchButtonInfo(true); + this.$message.success("删除成功!"); + } else { + this.$message.warning(res.statusMsg); + } + }) + }) + .catch(() => { + this.$message.warning("您已取消"); + }) + }, + // 提交添加按钮信息 + submitInsert: throttle(function() { + this.$refs.ruleForm.validate((valid) => { + if(valid) { + const params = Object.assign({}, this.ruleForm); + params.moldQualityFileEntities = params.files&¶ms.files.map(item => { + return { + fileName:item.name, + fileUrl:item.url + } + }); + delete params.files + this.$api.Quality.addQulityInfo(params).then((res) => { + if(res.statusMsg === 'ok') { + this.asyncVisible = false; + this.searchButtonInfo(true); + this.$message.success('添加成功!'); + } else { + this.$message.warning(res.statusMsg); + } + }) + } + }) + }, 3000), + // 提交修改按钮信息 + submitUpdate: throttle(function() { + this.$refs.ruleForm.validate((valid) => { + if(valid) { + const params = Object.assign({}, this.ruleForm); + params.moldQualityFileEntities = params.files&¶ms.files.map(item => { + return { + fileName:item.name, + fileUrl:item.url + } + }); + delete params.files + this.$api.Quality.updateQulityInfo(params).then((res) => { + if(res.statusMsg === 'ok') { + this.asyncVisible = false; + this.searchButtonInfo(true); + this.$message.success('修改成功!'); + } else { + this.$message.warning(res.statusMsg); + } + }) + } + }) + }, 3000), + // 判断按钮权限信息 + showButton(str) { + const pinia = buttonPinia(); + return pinia.$state.buttonInfo.includes(str); + }, + // 切换页数 + changePageNum(page) { + this.pageNum = page; + this.searchButtonInfo(); + }, + // 切换每页条数 + changePageSize(size) { + this.pageSize = size; + this.searchButtonInfo(); + } + } + } +</script> + +<style lang="sass" scoped> +@import '../../../style/layout-main.scss'; +</style> \ No newline at end of file diff --git a/web/src/views/QualityManage/components/ThreedCheck.vue b/web/src/views/QualityManage/components/ThreedCheck.vue new file mode 100644 index 0000000..501e09f --- /dev/null +++ b/web/src/views/QualityManage/components/ThreedCheck.vue @@ -0,0 +1,3 @@ +<template> + <div>三维检测</div> +</template> \ No newline at end of file -- Gitblit v1.9.3