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&&params.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&&params.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