gaoluyang
2025-03-27 872b0e0d61b89dbdab7bf6ae2cf00223c626cb0e
可靠性计划-开发联调
已修改1个文件
已添加2个文件
542 ■■■■■ 文件已修改
src/api/business/reliabilityPlan.js 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/CNAS/process/method/standardMethod/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/business/reliabilityPlan/index.vue 489 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
  })
}
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">
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
      },
      //
      // åŽŸè¾…æ–™table数据
      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>