From 872b0e0d61b89dbdab7bf6ae2cf00223c626cb0e Mon Sep 17 00:00:00 2001 From: gaoluyang <2820782392@qq.com> Date: 星期四, 27 三月 2025 09:47:00 +0800 Subject: [PATCH] 可靠性计划-开发联调 --- src/api/business/reliabilityPlan.js | 51 +++++ src/views/CNAS/process/method/standardMethod/index.vue | 2 src/views/business/reliabilityPlan/index.vue | 489 ++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 541 insertions(+), 1 deletions(-) diff --git a/src/api/business/reliabilityPlan.js b/src/api/business/reliabilityPlan.js new file mode 100644 index 0000000..cac5a39 --- /dev/null +++ b/src/api/business/reliabilityPlan.js @@ -0,0 +1,51 @@ +// 鍙潬鎬ц鍒掔浉鍏虫帴鍙� +import request from '@/utils/request' + +// 鎴愬搧鏌ヨ +export function selectProduct(query) { + return request({ + url: '/reliabilityPlanProduct/selectProduct', + method: 'get', + params: query + }) +} +// 鎴愬搧娣诲姞 +export function addOrUpdateProduct(query) { + return request({ + url: '/reliabilityPlanProduct/addOrUpdateProduct', + method: 'post', + data: query + }) +} +// 鎴愬搧鍒犻櫎 +export function delProduct(query) { + return request({ + url: '/reliabilityPlanProduct/delProduct', + method: 'delete', + params: query + }) +} +// 鍘熻緟鏂欐煡璇� +export function selectMaterial(query) { + return request({ + url: '/reliabilityPlanMaterial/selectMaterial', + method: 'get', + params: query + }) +} +// 鍘熻緟鏂欐坊鍔� +export function addOrUpdateMaterial(query) { + return request({ + url: '/reliabilityPlanMaterial/addOrUpdateMaterial', + method: 'post', + data: query + }) +} +// 鍘熻緟鏂欏垹闄� +export function delMaterial(query) { + return request({ + url: '/reliabilityPlanMaterial/delMaterial', + method: 'delete', + params: query + }) +} diff --git a/src/views/CNAS/process/method/standardMethod/index.vue b/src/views/CNAS/process/method/standardMethod/index.vue index 0485bd2..306b43f 100644 --- a/src/views/CNAS/process/method/standardMethod/index.vue +++ b/src/views/CNAS/process/method/standardMethod/index.vue @@ -41,7 +41,7 @@ </div> </div> <lims-table :tableData="tableData" :column="column" :page="page" :tableLoading="tableLoading" - :height="'calc(100vh - 250px)'" style="padding: 20px; padding-top: 0" @pagination="pagination"></lims-table> + :height="'calc(100vh - 250px)'" @pagination="pagination"></lims-table> <!-- 鏂板/缂栬緫 --> <el-dialog :title="title" :visible.sync="addDlog" width="500px"> <el-form :model="addForm" ref="addForm" :rules="addRules" label-position="right" label-width="120px"> diff --git a/src/views/business/reliabilityPlan/index.vue b/src/views/business/reliabilityPlan/index.vue new file mode 100644 index 0000000..4e3246f --- /dev/null +++ b/src/views/business/reliabilityPlan/index.vue @@ -0,0 +1,489 @@ +<template> + <div class="app-container"> + <div class="search"> + <el-form :model="entity" ref="entity" size="small" :inline="true"> + <el-form-item label="浜у搧鍨嬪彿" prop="productType" v-if="tabIndex === 0"> + <el-input v-model="entity.productType" clearable placeholder="璇疯緭鍏�" size="small" + @keyup.enter.native="goSearch($event)"> + </el-input> + </el-form-item> + <el-form-item label="鍘熻緟鏂欏悕绉�" prop="entrustCode" v-if="tabIndex === 1"> + <el-input v-model="entity.entrustCode" clearable placeholder="璇疯緭鍏�" size="small" + @keyup.enter.native="goSearch($event)"> + </el-input> + </el-form-item> + <el-form-item> + <el-button size="mini" type="primary" @click="goSearch()">鏌ヨ</el-button> + <el-button size="mini" @click="refresh()">閲嶇疆</el-button> + </el-form-item> + </el-form> + </div> + <div class="table"> + <div class="table-tab"> + <div> + <ul class="tab"> + <li :class="{ active: tabIndex === 0 }" @click="handleTab(0)">鎴愬搧</li> + <li :class="{ active: tabIndex === 1 }" @click="handleTab(1)">鍘熻緟鏂�</li> + </ul> + </div> + <div> + <el-button size="small" type="primary" @click="openAddDia('add')">鏂板</el-button> + </div> + </div> + <!--鎴愬搧--> + <div class="table"> + <lims-table :tableData="tableData" :column="column" + v-if="tabIndex === 0" + @pagination="pagination" + ref="tableData" + :height="'calc(100vh - 290px)'" + key="tableData" :page="page" + :tableLoading="tableLoading"></lims-table> + </div> + <!--鍘熻緟鏂�--> + <div class="table"> + <lims-table :tableData="tableData1" :column="column1" + v-if="tabIndex === 1" :isSelection="true" + @pagination="pagination1" + :height="'calc(100vh - 290px)'" + key="tableData1" :page="page1" :tableLoading="tableLoading1"></lims-table> + </div> + </div> + <el-dialog :visible.sync="proPlanDia" title="鎴愬搧璁″垝"> + <el-form :model="proPlanForm" ref="proPlanForm" :rules="proPlanRules" label-width="80px" size="small"> + <el-form-item label="浜у搧鍨嬪彿" prop="productType"> + <el-input v-model="proPlanForm.productType" placeholder="璇峰~鍐欎骇鍝佸瀷鍙�" :disabled="operationType === 'review'"></el-input> + </el-form-item> + <el-form-item label="浜у搧鍚嶇О" prop="productName"> + <el-input v-model="proPlanForm.productName" placeholder="璇峰~鍐欎骇鍝佸悕绉�" :disabled="operationType === 'review'"></el-input> + </el-form-item> + <el-form-item label="闆朵欢鍙�" prop="partNo"> + <el-input v-model="proPlanForm.partNo" placeholder="璇峰~鍐欓浂浠跺彿" :disabled="operationType === 'review'"></el-input> + </el-form-item> + <el-form-item label="瀹℃牳浜�" prop="reviewerId"> + <el-select v-model="proPlanForm.reviewerId" clearable filterable size="small" style="width: 50%;" :disabled="operationType === 'review'"> + <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + </el-form-item> + </el-form> + <div slot="footer" class="foot"> + <el-button v-if="operationType !== 'review'" @click="closeProDia">鍙� 娑�</el-button> + <el-button v-if="operationType !== 'review'" type="primary" :loading="submitProLoading" @click="submitProForm">淇� 瀛�</el-button> + <el-button v-if="operationType === 'review'" :loading="submitProLoading" @click="submitProForm(0)">涓嶉�氳繃</el-button> + <el-button v-if="operationType === 'review'" type="primary" :loading="submitProLoading" @click="submitProForm(1)">閫氳繃</el-button> + </div> + </el-dialog> + <el-dialog :visible.sync="materialDia" title="鍘熻緟鏂欒鍒�"> + <el-form :model="materialForm" ref="materialForm" :rules="materialRules" label-width="90px" size="small"> + <el-form-item label="鍘熻緟鏂欏悕绉�" prop="materialName"> + <el-input v-model="materialForm.materialName" placeholder="璇峰~鍐欎骇鍝佸悕绉�" :disabled="operationType === 'review'"></el-input> + </el-form-item> + <el-form-item label="闆朵欢鍙�" prop="partNo"> + <el-input v-model="materialForm.partNo" placeholder="璇峰~鍐欓浂浠跺彿" :disabled="operationType === 'review'"></el-input> + </el-form-item> + <el-form-item label="瀹℃牳浜�" prop="reviewerId"> + <el-select v-model="proPlanForm.reviewerId" clearable filterable size="small" style="width: 50%;" :disabled="operationType === 'review'"> + <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id"> + </el-option> + </el-select> + </el-form-item> + </el-form> + <div slot="footer" class="foot"> + <el-button v-if="operationType !== 'review'" @click="closeMaterialRulesDia">鍙� 娑�</el-button> + <el-button v-if="operationType !== 'review'" type="primary" :loading="submitMatLoading" @click="submitMaterialRulesForm">淇� 瀛�</el-button> + <el-button v-if="operationType === 'review'" :loading="submitMatLoading" @click="submitMaterialRulesForm(0)">涓嶉�氳繃</el-button> + <el-button v-if="operationType === 'review'" type="primary" :loading="submitMatLoading" @click="submitMaterialRulesForm(1)">閫氳繃</el-button> + </div> + </el-dialog> + </div> +</template> + +<script> +import limsTable from "@/components/Table/lims-table.vue"; +import { + addOrUpdateMaterial, + addOrUpdateProduct, delMaterial, + delProduct, + selectMaterial, + selectProduct +} from "@/api/business/reliabilityPlan"; +import {selectUserCondition} from "@/api/system/user"; +import {deleteAuxiliaryWorkingHours} from "@/api/performance/manHour"; + +export default { + name: '', + // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢� + components: {limsTable}, + data() { + // 杩欓噷瀛樻斁鏁版嵁 + return { + entity: { + productType: null, + entrustCode: null, + }, + tabIndex: 0, + // 鎴愬搧table鏁版嵁 + tableData: [], + tableLoading: false, + column: [ + { label: '浜у搧鍨嬪彿', prop: 'productType' }, + { label: '浜у搧鍚嶇О', prop: 'productName' }, + { label: '闆朵欢鍙�', prop: 'partNo' }, + { + dataType: 'tag', + label: '瀹℃牳鐘舵��', + prop: 'state', + formatData: (params) => { + if (params == 1) { + return '閫氳繃' + } else if (params == 0) { + return '涓嶉�氳繃' + } else { + return null + } + }, + formatType: (params) => { + if (params == 1) { + return 'success' + } else if (params == 0) { + return 'danger' + } else { + return null + } + } + }, + { + dataType: 'action', + label: '鎿嶄綔', + fixed: 'right', + operation: [ + { + name: '缂栬緫', + type: 'text', + clickFun: (row) => { + this.openAddDia('edit',row); + } + }, + { + name: '瀹℃牳', + type: 'text', + clickFun: (row) => { + this.openAddDia('review',row); + }, + }, + { + name: "鍒犻櫎", + type: "text", + clickFun: (row) => { + this.handleDelete(row); + }, + disabled: (row) => { + return row.state == 1 + }, + }, + ] + } + ], + page: { + total: 0, + size: 20, + current: 1 + }, + // + // 鍘熻緟鏂檛able鏁版嵁 + tableData1: [], + tableLoading1: false, + column1: [ + { label: '鍘熻緟鏂欏悕绉�', prop: 'materialName' }, + { label: '闆朵欢鍙�', prop: 'partNo' }, + { + dataType: 'tag', + label: '瀹℃牳鐘舵��', + prop: 'state', + formatData: (params) => { + if (params == 1) { + return '閫氳繃' + } else if (params == 0) { + return '涓嶉�氳繃' + } else { + return null + } + }, + formatType: (params) => { + if (params == 1) { + return 'success' + } else if (params == 0) { + return 'danger' + } else { + return null + } + } + }, + { + dataType: 'action', + fixed: 'right', + label: '鎿嶄綔', + operation: [ + { + name: '缂栬緫', + type: 'text', + clickFun: (row) => { + this.openAddDia('edit',row); + } + }, + { + name: '瀹℃牳', + type: 'text', + clickFun: (row) => { + this.openAddDia('review',row); + }, + }, + { + name: "鍒犻櫎", + type: "text", + clickFun: (row) => { + this.handleDeleteM(row); + }, + disabled: (row) => { + return row.state == 1 + }, + }, + ] + } + ], + page1: { + total: 0, + size: 20, + current: 1 + }, + proPlanDia: false, + responsibleOptions: [], + proPlanForm: { + id: '', + productName: '', + productType: '', + partNo: '', + }, + proPlanRules: { + + }, + submitProLoading: false, + operationType: '', + materialDia: false, + materialForm: { + id: '', + materialName: '', + partNo: '', + state: '', + }, + materialRules: {}, + submitMatLoading: false, + }; + }, + mounted() { + this.goSearch() + }, + // 鏂规硶闆嗗悎 + methods: { + // 鐐瑰嚮鏌ヨ鍥炶皟 + goSearch(event) { + if (event && typeof event.preventDefault === 'function') { + event.preventDefault(); // 闃绘榛樿琛屼负 + } + this.page.current = 1 + this.page1.current = 1 + this.refreshTable() + }, + // 鍒囨崲涓嬪崟tab琛ㄦ牸 + handleTab(m) { + this.tabIndex = m; + this.refreshTable() + }, + pagination(page) { + this.page.size = page.limit + this.refreshTable() + }, + pagination1(page) { + this.page1.size = page.limit + this.refreshTable() + }, + // 鏌ヨ鍥炶皟 + refreshTable() { + if (this.tabIndex === 0) { + // 鎴愬搧鏌ヨ + this.getProductOrderList() + } else if (this.tabIndex === 1) { + // 鍘熻緟鏂欐煡璇� + this.getMaterialOrderList() + } + }, + getProductOrderList () { + this.tableLoading = true + selectProduct({...this.entity, ...this.page}).then(response => { + this.tableLoading = false + this.tableData = response.data.records + }).catch(error => { + this.tableLoading = false + }) + }, + getMaterialOrderList () { + this.tableLoading1 = true + selectMaterial({...this.entity, ...this.page}).then(response => { + this.tableLoading1 = false + this.tableData1 = response.data.records + }).catch(err => { + this.tableLoading1 = false + }) + }, + // 閲� 缃� + refresh() { + this.resetForm('entity') + this.refreshTable() + }, + // 鎵撳紑鏂板寮规 + openAddDia(type, row) { + this.operationType = type + // this.getUserList() + if (this.tabIndex === 0) { + this.proPlanDia = true + if (this.operationType !== 'add') { + this.proPlanForm = {...row} + } + } else { + this.materialDia = true + if (this.operationType !== 'add') { + this.materialForm = {...row} + } + } + }, + // 鎴愬搧淇℃伅鎻愪氦 + submitProForm (state) { + this.submitProLoading = true + if (this.operationType === 'add') { + this.proPlanForm.state = '' + } else { + this.proPlanForm.state = state + } + addOrUpdateProduct(this.proPlanForm).then(res => { + if (res.code === 200) { + this.closeProDia() + this.$message.success('鎿嶄綔鎴愬姛') + this.goSearch() + } + this.submitProLoading = false + }).catch(err => { + console.log(err) + this.submitProLoading = false + }) + }, + // 鍏抽棴鎴愬搧淇℃伅寮规 + closeProDia () { + this.resetForm('proPlanDia') + this.proPlanDia = false + }, + // 鍘熻緟鏂欎俊鎭彁浜� + submitMaterialRulesForm (state) { + this.submitMatLoading = true + if (this.operationType === 'add') { + this.materialForm.state = '' + } else { + this.materialForm.state = state + } + addOrUpdateMaterial(this.materialForm).then(res => { + if (res.code === 200) { + this.closeMaterialRulesDia() + this.$message.success('鎿嶄綔鎴愬姛') + this.goSearch() + } + this.submitMatLoading = false + }).catch(err => { + console.log(err) + this.submitMatLoading = false + }) + }, + // 鍏抽棴鍘熻緟鏂欎俊鎭脊妗� + closeMaterialRulesDia() { + this.resetForm('materialForm') + this.materialDia = false + }, + handleDelete (row) { + this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }).then(() => { + delProduct({ id: row.id }).then((res) => { + if (res.code == 200){ + this.$message.success("鍒犻櫎鎴愬姛"); + this.goSearch(); + } + }); + }).catch(() => { + + }); + }, + handleDeleteM (row) { + this.$confirm("鏄惁鍒犻櫎璇ユ潯鏁版嵁?", "鎻愮ず", { + confirmButtonText: "纭畾", + cancelButtonText: "鍙栨秷", + type: "warning", + }).then(() => { + delMaterial({ id: row.id }).then((res) => { + if (res.code == 200){ + this.$message.success("鍒犻櫎鎴愬姛"); + this.goSearch(); + } + }); + }).catch(() => { + + }); + }, + // 鑾峰彇璐熻矗浜轰俊鎭帴鍙� + getUserList() { + selectUserCondition().then(res => { + if (res.code == 200) { + this.responsibleOptions = res.data + } + }); + } + } +}; +</script> + +<style scoped> +.table-tab { + display: flex; + justify-content: space-between; +} + +.tab { + list-style-type: none; + display: flex; + margin-bottom: 12px; + margin-top: 0; + padding-left: 0; +} + +.tab li { + line-height: 24px; + padding: 6px 14px; + font-size: 14px; + color: #333333; + border: 1px solid #EEEEEE; + cursor: pointer; +} + +.tab li:nth-child(1) { + border-radius: 8px 0 0 8px; +} + +.tab li:nth-child(2) { + border-radius: 0 8px 8px 0; +} + +.tab li.active { + border-color: #3A7BFA; + color: #3A7BFA; +} +</style> -- Gitblit v1.9.3